From bf5e31040a37c82a49e0333738912d858403c6e7 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Thu, 30 May 2024 23:46:15 +0530 Subject: [PATCH 001/241] packages stable release --- .../pubspec.lock | 48 ++--- .../pubspec.yaml | 16 +- packages/attendance_management/CHANGELOG.md | 8 +- packages/attendance_management/pubspec.lock | 33 ++- packages/attendance_management/pubspec.yaml | 9 +- packages/digit_components/.gitignore | 1 - packages/digit_components/CHANGELOG.md | 5 +- .../digit_components/example/pubspec.lock | 15 +- packages/digit_components/pubspec.lock | 7 - packages/digit_components/pubspec.yaml | 4 +- packages/digit_data_model/CHANGELOG.md | 3 + packages/digit_data_model/pubspec.lock | 8 +- packages/digit_data_model/pubspec.yaml | 4 +- .../test/product_variant_bloc_test.dart | 2 +- packages/digit_scanner/CHANGELOG.md | 6 + packages/digit_scanner/example/pubspec.lock | 14 +- packages/digit_scanner/pubspec.lock | 12 +- packages/digit_scanner/pubspec.yaml | 6 +- packages/digit_showcase/CHANGELOG.md | 5 +- packages/digit_showcase/pubspec.yaml | 2 +- packages/forms_engine/pubspec.lock | 40 +--- packages/inventory_management/CHANGELOG.md | 5 +- packages/inventory_management/pubspec.lock | 29 ++- packages/inventory_management/pubspec.yaml | 11 +- packages/referral_reconciliation/CHANGELOG.md | 5 +- .../assets/fonts/Roboto/LICENSE.txt | 202 ------------------ .../assets/fonts/Roboto/Roboto-Black.ttf | Bin 168060 -> 0 bytes .../fonts/Roboto/Roboto-BlackItalic.ttf | Bin 174108 -> 0 bytes .../assets/fonts/Roboto/Roboto-Bold.ttf | Bin 167336 -> 0 bytes .../assets/fonts/Roboto/Roboto-BoldItalic.ttf | Bin 171508 -> 0 bytes .../assets/fonts/Roboto/Roboto-Italic.ttf | Bin 170504 -> 0 bytes .../assets/fonts/Roboto/Roboto-Light.ttf | Bin 167000 -> 0 bytes .../fonts/Roboto/Roboto-LightItalic.ttf | Bin 173172 -> 0 bytes .../assets/fonts/Roboto/Roboto-Medium.ttf | Bin 168644 -> 0 bytes .../fonts/Roboto/Roboto-MediumItalic.ttf | Bin 173416 -> 0 bytes .../assets/fonts/Roboto/Roboto-Regular.ttf | Bin 168260 -> 0 bytes .../assets/fonts/Roboto/Roboto-Thin.ttf | Bin 168488 -> 0 bytes .../fonts/Roboto/RobotoCondensed-Regular.ttf | Bin 166836 -> 0 bytes packages/referral_reconciliation/pubspec.lock | 29 ++- packages/referral_reconciliation/pubspec.yaml | 20 +- packages/registration_delivery/CHANGELOG.md | 8 +- packages/registration_delivery/pubspec.lock | 33 +-- packages/registration_delivery/pubspec.yaml | 13 +- 43 files changed, 229 insertions(+), 374 deletions(-) delete mode 100644 packages/referral_reconciliation/assets/fonts/Roboto/LICENSE.txt delete mode 100644 packages/referral_reconciliation/assets/fonts/Roboto/Roboto-Black.ttf delete mode 100644 packages/referral_reconciliation/assets/fonts/Roboto/Roboto-BlackItalic.ttf delete mode 100644 packages/referral_reconciliation/assets/fonts/Roboto/Roboto-Bold.ttf delete mode 100644 packages/referral_reconciliation/assets/fonts/Roboto/Roboto-BoldItalic.ttf delete mode 100644 packages/referral_reconciliation/assets/fonts/Roboto/Roboto-Italic.ttf delete mode 100644 packages/referral_reconciliation/assets/fonts/Roboto/Roboto-Light.ttf delete mode 100644 packages/referral_reconciliation/assets/fonts/Roboto/Roboto-LightItalic.ttf delete mode 100644 packages/referral_reconciliation/assets/fonts/Roboto/Roboto-Medium.ttf delete mode 100644 packages/referral_reconciliation/assets/fonts/Roboto/Roboto-MediumItalic.ttf delete mode 100644 packages/referral_reconciliation/assets/fonts/Roboto/Roboto-Regular.ttf delete mode 100644 packages/referral_reconciliation/assets/fonts/Roboto/Roboto-Thin.ttf delete mode 100644 packages/referral_reconciliation/assets/fonts/Roboto/RobotoCondensed-Regular.ttf diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index a9bbf0504..b886bc560 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -69,10 +69,10 @@ packages: dependency: "direct main" description: name: attendance_management - sha256: a37af7332bd47c81f008e081602fd2b438f0b3f5751b43080bd493156dd9c554 + sha256: "1c4c58e887ae1090220271978b56ab8b89d27b0618afc201ed391ea5eade95fc" url: "https://pub.dev" source: hosted - version: "0.0.0-dev.4" + version: "1.0.0+1" audioplayers: dependency: "direct main" description: @@ -420,11 +420,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - name: dart_mappable_builder - sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e - url: "https://pub.dev" - source: hosted - version: "4.2.3" + path: "../../packages/dart_mappable_builder" + relative: true + source: path + version: "4.2.0" dart_style: dependency: transitive description: @@ -484,18 +483,19 @@ packages: digit_components: dependency: "direct main" description: - path: "../../packages/digit_components" - relative: true - source: path - version: "0.0.1+8" + name: digit_components + sha256: "29b8d33cce933e971831d371f0d873e008a091e99d4192cecd738de357eaaed8" + url: "https://pub.dev" + source: hosted + version: "1.0.0" digit_data_model: dependency: "direct main" description: name: digit_data_model - sha256: ed3c4938b77777b764497fa7ac7be8ba34212d2925a853b5ccbb77f716dacb5e + sha256: "604be26d7f535027d1f16077b47b55a363c74a6040c34fb942ce82d58b9a54ec" url: "https://pub.dev" source: hosted - version: "0.0.0-dev.2" + version: "1.0.0" digit_firebase_services: dependency: "direct main" description: @@ -507,18 +507,18 @@ packages: dependency: "direct main" description: name: digit_scanner - sha256: "5af0318e92a1373677141bd174f64bbc126f9ad64f1d333774205ac684fe40dc" + sha256: a9959caad13c65165db5dc00cbe592e640e881d5e512599eac55591722b2da15 url: "https://pub.dev" source: hosted - version: "0.0.0-dev.5" + version: "1.0.0+1" digit_showcase: dependency: "direct main" description: name: digit_showcase - sha256: "75380c35b3e819d04690336eb1682d085882f372daea7a26724470bbc36e3555" + sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" url: "https://pub.dev" source: hosted - version: "0.0.0-dev.1" + version: "1.0.0" dio: dependency: "direct main" description: @@ -1073,7 +1073,7 @@ packages: dependency: transitive description: name: image - sha256: "2237616a36c0d69aef7549ab439b833fb7f9fb9fc861af2cc9ac3eedddd69ca8" + sha256: "4c68bfd5ae83e700b5204c1e74451e7bf3cf750e6843c6e158289cf56bda018e" url: "https://pub.dev" source: hosted version: "4.1.7" @@ -1094,10 +1094,10 @@ packages: dependency: "direct main" description: name: inventory_management - sha256: "07a8a1558601f58524bff189052340b634b412e1643766e0b7e487e05f69b09b" + sha256: afb270392e2f3fb01a7e367dc5b0f0249b9e76c88208c1a1c71bcc6096491b0b url: "https://pub.dev" source: hosted - version: "0.0.0-dev.5" + version: "1.0.0" io: dependency: transitive description: @@ -1510,18 +1510,18 @@ packages: dependency: "direct main" description: name: referral_reconciliation - sha256: b8852d90b9b2105b374583aa11f42b00fa823b1689b9b397293c269ba9f5a1bb + sha256: "95f00e17c3bacd61cd96b9bb7a8606de450540cfe53b5296c4a2bc2957d2b346" url: "https://pub.dev" source: hosted - version: "0.0.0-dev.2" + version: "1.0.0" registration_delivery: dependency: "direct main" description: name: registration_delivery - sha256: cb61c12e3766998c63ac930d993dc28140dde2ef3211b9d1b3adff8dc8b20738 + sha256: "328c71e9a1163481eba1e0653cca23a4e50a32c44cccfcfba049849e87184114" url: "https://pub.dev" source: hosted - version: "0.0.0-dev.2" + version: "1.0.0+1" remove_emoji_input_formatter: dependency: transitive description: diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index b811bbb05..ebbc2a366 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -18,7 +18,7 @@ dependencies: sqlite3_flutter_libs: ^0.5.10 path_provider: ^2.0.11 path: ^1.8.2 - digit_components: ^0.0.3+16 + digit_components: ^1.0.0 auto_route: ^7.8.4 flutter_bloc: ^8.1.1 collection: ^1.16.0 @@ -58,19 +58,19 @@ dependencies: package_info_plus: ^5.0.1 expandable: ^5.0.1 flutter_svg: ^2.0.8 - digit_showcase: ^0.0.0-dev.1 + digit_showcase: ^1.0.0 audioplayers: ^5.2.0 gs1_barcode_parser: ^1.0.5 qr_flutter: ^4.1.0 disk_space: ^0.2.1 google_mlkit_barcode_scanning: ^0.10.0 camera: ^0.10.5+7 - attendance_management: ^0.0.0-dev.5 - digit_scanner: ^0.0.0-dev.7 - inventory_management: ^0.0.0-dev.9 - referral_reconciliation: ^0.0.0-dev.5 - digit_data_model: ^0.0.0-dev.3 - registration_delivery: ^0.0.0-dev.7 + attendance_management: ^1.0.0+1 + digit_scanner: ^1.0.0+1 + inventory_management: ^1.0.0 + referral_reconciliation: ^1.0.0 + digit_data_model: ^1.0.0 + registration_delivery: ^1.0.0+1 dev_dependencies: flutter_test: diff --git a/packages/attendance_management/CHANGELOG.md b/packages/attendance_management/CHANGELOG.md index ec419e7c6..0d09edc85 100644 --- a/packages/attendance_management/CHANGELOG.md +++ b/packages/attendance_management/CHANGELOG.md @@ -17,4 +17,10 @@ * Updated digit_components version for dropdown fix ## 0.0.0-dev.5 -* Updated digit_data_model to latest version \ No newline at end of file +* Updated digit_data_model to latest version + +## 1.0.0 +* Initial stable release + +## 1.0.0+1 +* Updated digit_components to latest version \ No newline at end of file diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index 6558b4248..f30318e96 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -257,6 +257,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" + cupertino_icons: + dependency: transitive + description: + name: cupertino_icons + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 + url: "https://pub.dev" + source: hosted + version: "1.0.8" dart_mappable: dependency: "direct main" description: @@ -268,11 +276,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - name: dart_mappable_builder - sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e - url: "https://pub.dev" - source: hosted - version: "4.2.3" + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.0" dart_style: dependency: transitive description: @@ -309,18 +316,18 @@ packages: dependency: "direct main" description: name: digit_components - sha256: "00642b6c6195d75987f43f8e6c32a417c0bb75b36e15cf9c5b130466d556de91" + sha256: "29b8d33cce933e971831d371f0d873e008a091e99d4192cecd738de357eaaed8" url: "https://pub.dev" source: hosted - version: "0.0.3+13" + version: "1.0.0" digit_data_model: dependency: "direct main" description: name: digit_data_model - sha256: ca8a602305fb591329a95c1340805ace1577ef4146a2beea1991a0653a24040d + sha256: "604be26d7f535027d1f16077b47b55a363c74a6040c34fb942ce82d58b9a54ec" url: "https://pub.dev" source: hosted - version: "0.0.0-dev.1" + version: "1.0.0" dio: dependency: "direct main" description: @@ -944,6 +951,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" + remove_emoji_input_formatter: + dependency: transitive + description: + name: remove_emoji_input_formatter + sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" + url: "https://pub.dev" + source: hosted + version: "0.0.1+1" shelf: dependency: transitive description: diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index 686eb3283..3eba801d1 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -1,7 +1,8 @@ name: attendance_management description: Digit UI attendance_management specification -version: 0.0.0-dev.5 -homepage: "https://github.com/egovernments/health-campaign-field-worker-app/tree/develop/packages/attendance_management" +version: 1.0.0+1 +homepage: "https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/attendance_management" +repository: "https://github.com/egovernments/health-campaign-field-worker-app" environment: sdk: '>=3.0.0 <4.0.0' @@ -10,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^0.0.3+16 + digit_components: ^1.0.0 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 @@ -26,7 +27,7 @@ dependencies: path: ^1.8.2 drift_db_viewer: ^2.0.0 auto_route: ^7.8.4 - digit_data_model: ^0.0.0-dev.3 + digit_data_model: ^1.0.0 connectivity_plus: ^5.0.2 collection: ^1.16.0 location: ^5.0.0 diff --git a/packages/digit_components/.gitignore b/packages/digit_components/.gitignore index 96486fd93..11bcaf4ae 100644 --- a/packages/digit_components/.gitignore +++ b/packages/digit_components/.gitignore @@ -23,7 +23,6 @@ migrate_working_dir/ # Flutter/Dart/Pub related # Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. -/pubspec.lock **/doc/api/ .dart_tool/ .packages diff --git a/packages/digit_components/CHANGELOG.md b/packages/digit_components/CHANGELOG.md index 2ac2074b5..ce683796f 100644 --- a/packages/digit_components/CHANGELOG.md +++ b/packages/digit_components/CHANGELOG.md @@ -99,4 +99,7 @@ * Updated digit_components to develop branch ## 0.0.3+16 -* Removed flutter_localizations dependency \ No newline at end of file +* Removed flutter_localizations dependency + +## 1.0.0 +* Stable release \ No newline at end of file diff --git a/packages/digit_components/example/pubspec.lock b/packages/digit_components/example/pubspec.lock index 3cc5be616..1b3ac8711 100644 --- a/packages/digit_components/example/pubspec.lock +++ b/packages/digit_components/example/pubspec.lock @@ -231,7 +231,7 @@ packages: path: ".." relative: true source: path - version: "0.0.3+6" + version: "1.0.0" easy_stepper: dependency: transitive description: @@ -357,11 +357,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.3" - flutter_localizations: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" flutter_spinkit: dependency: transitive description: @@ -796,6 +791,14 @@ packages: url: "https://pub.dev" source: hosted version: "14.3.0" + remove_emoji_input_formatter: + dependency: transitive + description: + name: remove_emoji_input_formatter + sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" + url: "https://pub.dev" + source: hosted + version: "0.0.1+1" shelf: dependency: transitive description: diff --git a/packages/digit_components/pubspec.lock b/packages/digit_components/pubspec.lock index 9fa519a74..7c84c45c4 100644 --- a/packages/digit_components/pubspec.lock +++ b/packages/digit_components/pubspec.lock @@ -201,7 +201,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_style: dependency: transitive description: @@ -335,11 +334,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.3" - flutter_localizations: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" flutter_spinkit: dependency: "direct main" description: @@ -766,7 +760,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.0.1+1" - shelf: dependency: transitive description: diff --git a/packages/digit_components/pubspec.yaml b/packages/digit_components/pubspec.yaml index 235aeb113..c3fd090f3 100644 --- a/packages/digit_components/pubspec.yaml +++ b/packages/digit_components/pubspec.yaml @@ -1,7 +1,7 @@ name: digit_components description: Digit UI Design specification Flutter widgets. Import this package by adding digit_components in respective pubspec.yaml dependencies. -version: 0.0.3+16 -homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/develop/packages/digit_components +version: 1.0.0 +homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_components repository: https://github.com/egovernments/health-campaign-field-worker-app environment: diff --git a/packages/digit_data_model/CHANGELOG.md b/packages/digit_data_model/CHANGELOG.md index 376e1ec86..4b0dee16a 100644 --- a/packages/digit_data_model/CHANGELOG.md +++ b/packages/digit_data_model/CHANGELOG.md @@ -7,3 +7,6 @@ ## 0.0.0-dev.3 * Supports boundary v2 and updated single entities to list for all search models + +## 1.0.0 +* Initial stable release \ No newline at end of file diff --git a/packages/digit_data_model/pubspec.lock b/packages/digit_data_model/pubspec.lock index 2f4e6a241..3f0249b33 100644 --- a/packages/digit_data_model/pubspec.lock +++ b/packages/digit_data_model/pubspec.lock @@ -252,11 +252,9 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: develop - resolved-ref: "858ec25f6bc8fec4c7043adbc22fa6bfad57abfc" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git + path: "../dart_mappable_builder" + relative: true + source: path version: "4.2.0" dart_style: dependency: transitive diff --git a/packages/digit_data_model/pubspec.yaml b/packages/digit_data_model/pubspec.yaml index 49cd733bf..27f868d67 100644 --- a/packages/digit_data_model/pubspec.yaml +++ b/packages/digit_data_model/pubspec.yaml @@ -1,7 +1,7 @@ name: digit_data_model description: "The digit_data_model package is a comprehensive data modeling library for the project. It defines various classes, enums, and functions used throughout the project. The package is written in Dart and is primarily used in Flutter applications." -version: 0.0.0-dev.3 -homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/develop/packages/digit_data_model +version: 1.0.0 +homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_data_model repository: https://github.com/egovernments/health-campaign-field-worker-app environment: diff --git a/packages/digit_data_model/test/product_variant_bloc_test.dart b/packages/digit_data_model/test/product_variant_bloc_test.dart index 6fea7c644..a15cb8471 100644 --- a/packages/digit_data_model/test/product_variant_bloc_test.dart +++ b/packages/digit_data_model/test/product_variant_bloc_test.dart @@ -67,7 +67,7 @@ void main() { .thenAnswer((invocation) async { final searchModel = invocation.positionalArguments[0] as ProjectResourceSearchModel; - if (searchModel.projectId == testProjectId) { + if (searchModel.projectId!.contains(testProjectId)) { return testProjectResources; } else { return []; diff --git a/packages/digit_scanner/CHANGELOG.md b/packages/digit_scanner/CHANGELOG.md index aa41c3a95..99e292681 100644 --- a/packages/digit_scanner/CHANGELOG.md +++ b/packages/digit_scanner/CHANGELOG.md @@ -20,3 +20,9 @@ Disabled Submit button for manual code not entered ## 0.0.0-dev.7 Reverted disable button change + +## 1.0.0 +Initial stable Release + +## 1.0.0+1 +* Updated digit_components to latest version \ No newline at end of file diff --git a/packages/digit_scanner/example/pubspec.lock b/packages/digit_scanner/example/pubspec.lock index 735614c67..edcedbf3a 100644 --- a/packages/digit_scanner/example/pubspec.lock +++ b/packages/digit_scanner/example/pubspec.lock @@ -309,17 +309,17 @@ packages: dependency: transitive description: name: digit_components - sha256: "00642b6c6195d75987f43f8e6c32a417c0bb75b36e15cf9c5b130466d556de91" + sha256: "29b8d33cce933e971831d371f0d873e008a091e99d4192cecd738de357eaaed8" url: "https://pub.dev" source: hosted - version: "0.0.3+13" + version: "1.0.0" digit_scanner: dependency: "direct main" description: path: ".." relative: true source: path - version: "0.0.0-dev.5" + version: "1.0.0+1" easy_stepper: dependency: transitive description: @@ -879,6 +879,14 @@ packages: url: "https://pub.dev" source: hosted version: "14.3.0" + remove_emoji_input_formatter: + dependency: transitive + description: + name: remove_emoji_input_formatter + sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" + url: "https://pub.dev" + source: hosted + version: "0.0.1+1" shelf: dependency: transitive description: diff --git a/packages/digit_scanner/pubspec.lock b/packages/digit_scanner/pubspec.lock index 12956d078..f212b7498 100644 --- a/packages/digit_scanner/pubspec.lock +++ b/packages/digit_scanner/pubspec.lock @@ -341,10 +341,10 @@ packages: dependency: "direct main" description: name: digit_components - sha256: "00642b6c6195d75987f43f8e6c32a417c0bb75b36e15cf9c5b130466d556de91" + sha256: "29b8d33cce933e971831d371f0d873e008a091e99d4192cecd738de357eaaed8" url: "https://pub.dev" source: hosted - version: "0.0.3+13" + version: "1.0.0" easy_stepper: dependency: transitive description: @@ -936,6 +936,14 @@ packages: url: "https://pub.dev" source: hosted version: "14.3.0" + remove_emoji_input_formatter: + dependency: transitive + description: + name: remove_emoji_input_formatter + sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" + url: "https://pub.dev" + source: hosted + version: "0.0.1+1" shelf: dependency: transitive description: diff --git a/packages/digit_scanner/pubspec.yaml b/packages/digit_scanner/pubspec.yaml index 870dc8338..9fc821418 100644 --- a/packages/digit_scanner/pubspec.yaml +++ b/packages/digit_scanner/pubspec.yaml @@ -2,7 +2,7 @@ name: digit_scanner description: "A Scanner package used for scanning QR Codes and GS1 Barcodes." # The following line prevents the package from being accidentally published to # pub.dev using `flutter pub publish`. This is preferred for private packages. -homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/develop/packages/digit_scanner +homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_scanner repository: https://github.com/egovernments/health-campaign-field-worker-app # The following defines the version and build number for your application. @@ -17,7 +17,7 @@ repository: https://github.com/egovernments/health-campaign-field-worker-app # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 0.0.0-dev.7 +version: 1.0.0+1 environment: sdk: '>=2.19.4 <3.9.0' @@ -38,7 +38,7 @@ dependencies: google_mlkit_barcode_scanning: ^0.10.0 camera: ^0.10.5+7 gs1_barcode_parser: ^1.0.5 - digit_components: ^0.0.3+16 + digit_components: ^1.0.0 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 overlay_builder: ^1.1.0 diff --git a/packages/digit_showcase/CHANGELOG.md b/packages/digit_showcase/CHANGELOG.md index beecb6767..7d378758b 100644 --- a/packages/digit_showcase/CHANGELOG.md +++ b/packages/digit_showcase/CHANGELOG.md @@ -1,2 +1,5 @@ ## 0.0.0-dev.1 -* Digit Showcase initial release. \ No newline at end of file +* Digit Showcase initial release. + +## 1.0.0 +* Stable release \ No newline at end of file diff --git a/packages/digit_showcase/pubspec.yaml b/packages/digit_showcase/pubspec.yaml index 6f5e8eb51..c44965e5b 100644 --- a/packages/digit_showcase/pubspec.yaml +++ b/packages/digit_showcase/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_showcase description: Customized showcase view -version: 0.0.0-dev.1 +version: 1.0.0 homepage: "https://github.com/egovernments/health-campaign-field-worker-app/tree/develop/packages/digit_showcase" environment: diff --git a/packages/forms_engine/pubspec.lock b/packages/forms_engine/pubspec.lock index ce10fb381..1fbd7a910 100644 --- a/packages/forms_engine/pubspec.lock +++ b/packages/forms_engine/pubspec.lock @@ -228,10 +228,11 @@ packages: digit_components: dependency: "direct main" description: - path: "../digit_components" - relative: true - source: path - version: "0.0.1+8" + name: digit_components + sha256: "8e5d120f2c16c0d8ffaf4d0de1218da5e492061d6bb9245214589fb1ea5ec09e" + url: "https://pub.dev" + source: hosted + version: "0.0.3+16" easy_stepper: dependency: transitive description: @@ -349,11 +350,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.3" - flutter_localizations: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" flutter_spinkit: dependency: transitive description: @@ -508,22 +504,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.7.1" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "7e108028e3d258667d079986da8c0bc32da4cb57431c2af03b1dc1038621a9dc" - url: "https://pub.dev" - source: hosted - version: "9.0.13" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: b06739349ec2477e943055aea30172c5c7000225f79dad4702e2ec0eda79a6ff - url: "https://pub.dev" - source: hosted - version: "1.0.5" lints: dependency: transitive description: @@ -584,18 +564,18 @@ packages: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.5.0" meta: dependency: transitive description: name: meta - sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.10.0" mime: dependency: transitive description: @@ -1034,5 +1014,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <4.0.0" + dart: ">=3.2.0 <3.9.0" flutter: ">=3.16.0" diff --git a/packages/inventory_management/CHANGELOG.md b/packages/inventory_management/CHANGELOG.md index 9d64e530b..b476efdc6 100644 --- a/packages/inventory_management/CHANGELOG.md +++ b/packages/inventory_management/CHANGELOG.md @@ -24,4 +24,7 @@ * Updated digit_scanner to latest version ## 0.0.0-dev.9 -* Updated digit_scanner to latest version \ No newline at end of file +* Updated digit_scanner to latest version + +## 1.0.0 +* Initial stable Release \ No newline at end of file diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index cfbf0dd69..351796d18 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -388,11 +388,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - name: dart_mappable_builder - sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e - url: "https://pub.dev" - source: hosted - version: "4.2.3" + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.0" dart_style: dependency: transitive description: @@ -421,26 +420,26 @@ packages: dependency: "direct main" description: name: digit_components - sha256: "00642b6c6195d75987f43f8e6c32a417c0bb75b36e15cf9c5b130466d556de91" + sha256: "29b8d33cce933e971831d371f0d873e008a091e99d4192cecd738de357eaaed8" url: "https://pub.dev" source: hosted - version: "0.0.3+13" + version: "1.0.0" digit_data_model: dependency: "direct main" description: name: digit_data_model - sha256: ed3c4938b77777b764497fa7ac7be8ba34212d2925a853b5ccbb77f716dacb5e + sha256: "604be26d7f535027d1f16077b47b55a363c74a6040c34fb942ce82d58b9a54ec" url: "https://pub.dev" source: hosted - version: "0.0.0-dev.2" + version: "1.0.0" digit_scanner: dependency: "direct main" description: name: digit_scanner - sha256: "5af0318e92a1373677141bd174f64bbc126f9ad64f1d333774205ac684fe40dc" + sha256: a9959caad13c65165db5dc00cbe592e640e881d5e512599eac55591722b2da15 url: "https://pub.dev" source: hosted - version: "0.0.0-dev.5" + version: "1.0.0+1" dio: dependency: transitive description: @@ -1120,6 +1119,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" + remove_emoji_input_formatter: + dependency: transitive + description: + name: remove_emoji_input_formatter + sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" + url: "https://pub.dev" + source: hosted + version: "0.0.1+1" rxdart: dependency: transitive description: diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index 91aa57483..065a455a0 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -1,7 +1,8 @@ name: inventory_management description: Provides features to manage inventory. -version: 0.0.0-dev.9 -repository: https://github.com/egovernments/health-campaign-field-worker-app/tree/develop/packages/inventory_management +version: 1.0.0 +homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/inventory_management +repository: https://github.com/egovernments/health-campaign-field-worker-app environment: sdk: '>=3.0.0 <4.0.0' @@ -10,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^0.0.3+16 + digit_components: ^1.0.0 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 @@ -28,10 +29,10 @@ dependencies: uuid: ^3.0.6 recase: ^4.1.0 pluto_grid: ^7.0.1 - digit_scanner: ^0.0.0-dev.7 + digit_scanner: ^1.0.0+1 gs1_barcode_parser: ^1.0.5 auto_route: ^7.8.4 - digit_data_model: ^0.0.0-dev.3 + digit_data_model: ^1.0.0 collection: ^1.16.0 dev_dependencies: diff --git a/packages/referral_reconciliation/CHANGELOG.md b/packages/referral_reconciliation/CHANGELOG.md index c8d843658..e030e2b40 100644 --- a/packages/referral_reconciliation/CHANGELOG.md +++ b/packages/referral_reconciliation/CHANGELOG.md @@ -11,4 +11,7 @@ Updated digit_data_model to latest version Updated digit_scanner to latest version ## 0.0.0-dev.5 -Updated digit_scanner to latest version \ No newline at end of file +Updated digit_scanner to latest version + +## 1.0.0 +* Initial stable version \ No newline at end of file diff --git a/packages/referral_reconciliation/assets/fonts/Roboto/LICENSE.txt b/packages/referral_reconciliation/assets/fonts/Roboto/LICENSE.txt deleted file mode 100644 index d64569567..000000000 --- a/packages/referral_reconciliation/assets/fonts/Roboto/LICENSE.txt +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/packages/referral_reconciliation/assets/fonts/Roboto/Roboto-Black.ttf b/packages/referral_reconciliation/assets/fonts/Roboto/Roboto-Black.ttf deleted file mode 100644 index 0112e7da626ca2f959eca850c806779ba55dbfbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168060 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
TJYyt(6q>rW4S(W4gHIq&3$utU3y8!9=k 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 WVelBb2)1!{_R^~ms-+tiJp5mlrotHj diff --git a/packages/referral_reconciliation/assets/fonts/Roboto/Roboto-BlackItalic.ttf b/packages/referral_reconciliation/assets/fonts/Roboto/Roboto-BlackItalic.ttf deleted file mode 100644 index b2c6aca57bc0d92ab3197d595766bf9285deea00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174108 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�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 diff --git a/packages/referral_reconciliation/assets/fonts/Roboto/Roboto-Bold.ttf b/packages/referral_reconciliation/assets/fonts/Roboto/Roboto-Bold.ttf deleted file mode 100644 index 43da14d84ecb949ca5f5e8ecca3a514aa7fe1c7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167336 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

CI1`9yZA;krY|pfYv_=)r#TI})&gnG! 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 }T0zx*PitjbVP(pkGu*HnX1(-EMz?0WEMAX) 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 diff --git a/packages/referral_reconciliation/assets/fonts/Roboto/Roboto-Italic.ttf b/packages/referral_reconciliation/assets/fonts/Roboto/Roboto-Italic.ttf deleted file mode 100644 index 1b5eaa361c7306b4246c48497c79475c0e05c5e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170504 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 JyV?28{{co6(@+2a diff --git a/packages/referral_reconciliation/assets/fonts/Roboto/Roboto-Light.ttf b/packages/referral_reconciliation/assets/fonts/Roboto/Roboto-Light.ttf deleted file mode 100644 index e7307e72c5e7bced5d36c776d0986bf71b605f15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167000 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 T&&O!b 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

1!1exG)EK6u~BkmExnKuQI2?mS0J2 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 Og7zwfTI$9`zx;34o!sdF diff --git a/packages/referral_reconciliation/assets/fonts/Roboto/Roboto-LightItalic.ttf b/packages/referral_reconciliation/assets/fonts/Roboto/Roboto-LightItalic.ttf deleted file mode 100644 index 2d277afb231f7613a49d983217c1aba871741433..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173172 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 diff --git a/packages/referral_reconciliation/assets/fonts/Roboto/Roboto-Medium.ttf b/packages/referral_reconciliation/assets/fonts/Roboto/Roboto-Medium.ttf deleted file mode 100644 index ac0f908b9c9c73da558b45d65cc5c6094874d3e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168644 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 X76wnEi(n^v8!x?bp_;lO!DIggn3ZN8 diff --git a/packages/referral_reconciliation/assets/fonts/Roboto/Roboto-MediumItalic.ttf b/packages/referral_reconciliation/assets/fonts/Roboto/Roboto-MediumItalic.ttf deleted file mode 100644 index fc36a4785c50c04c9b18260e4709cda077ed352d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173416 zcma&P2Vhgx7eD^)cuCr(ZQ8U=TT1s}7brBe>^)^~WbeH<$SzB!$es$y)bv>t6hWDS zs6`M5h^RPFz=eRcdHsLxO<$Av_4oh%zJ5vik~Z(&bI(2Jb3W&s8-*x}5{?J1B(`kU zyhTA1*FuF>Xr?H1P|J=Tx*YmFZ=^yi?N^kc)mnDx)@0U#CDRqU<_krMT-%{bX3b4M z<_}S5`S6 z_^VH+DU?|7``IJ#g7rrD8+d;Pu2V;hoibzUH(Tc8{YHusQD@Bf!2?}EmETgxqn{Ne zFn;X7857J6SOTs;!0#uH8#s1o^V})t6`F?6V<8j9Po7dTP{DjEM2q()Od2{N=j-Kv zD>S7m#?(_$@t(pes4j&mCM7_zDxu1F&1wq^3(s*`Z7!uyJeuTVfP4%tR9s5)o-UeM zE}teg=p`={Tqw2%y);f0{H3OPp3I&ni+pkg-qfs~7lJ)6P@5~{X7w6LNnuGWjF2$G zl1Ocm#45P!(X-k51O07cy+fI<6Y6%WuBUrdvwJR`UKB=Wxckw5%V2D;A-=l?ox0&&*etcbdG=RbDP79)k*9L7Dj$pLc_> z7I@L-3dc}wt_b>|7M0pi~-{lZRt7_CEc zppZ(FlB&FuX`516S*RscsfuYRuE0z=y#P!vz?gUym zL`6BG%qElBoZ?JRcREbC%%*xkr(atg3<>K4Vwb*1$682?A+jhjz2d%78-Q_ zMC$gm{jPxf=3#?It|N=uO&sK0@X5h1Bfq+p@aL&{s~DXysNI-hRTqAB0Q+Ccq435HHoRGiR|Ra!>9`eJe!HkVo`9XnUR%a8WCOtHD*3SDuTt`u8-RiD@6Z27gkmk<*~194

>Lm_m;)d~S=y9Q;dl?qBN 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 z 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

S&jh1n&JeeMOkU4{=4@cYr6k z(ax=L|s)4kSST31>;ptckO_^V^T9xBEDa;HjTYh`K}oyXu_h<1|<>J?*}M z_pN2n9G6MC$WAI?$U?FnI``L8W)^o)BV!P5DDM^Dp<4A|-bV83(N%hr%JcH;Mvmvf zabV=(>{)?-Z6BOhoQIA_ZSX+;dyKbxbtFaJ@`~Go>%13f#KV-=OQ~q$bHK<788q}q z!3^#&4)djubc-6QXmCR$?(J^ht_2LE4uQDY_m6s@>c_n*5h&F(Lr&e$^R`oV+yy%Jm$1XX53TRMp- zTrza)av|@CQ{}l#7(OW#Vfbhu`!gXB&m>3y305S)ZQ{N3ES_8=bjPfxUdXZH$+=XJ znuGretdmtM`KG~}D_7Zz#W1=F5j{YnX5e&fuoLxoru79!-6YqGjZC#(KD2lj(0T>< z7E^c>)5x#ry~UT%Y3P!fAgSc!zFxHNxAe-i zd6O4EEtZ$goR=Xcu74xL9xPTh7L7l@Wz8S64(@z#+}ke>e{uilY2e1{a?iA{3XY(v zaT8V~dvssmY-72Hr~+H=p<-k>>KbgdhjhNA+}(gSc0AY~E6v>(a1wqdzTxNbfcu$rJo9co2}{f}e$KawlH4&%uLYUbl(0V=f z@6dW%%1)O&4%M#1$BYxNyI95W*qv^zGoF`VztTAToaMNLA1+4lbEX{2JDeCajdfwl`a34YDYx57q$G&3m&&*5FJa`QdcW z!F&sx@f-8=+4c=A_4xeY@xM0W08bJ0!K`u2V|b3BgKv#sk})5;*R`m2z$g4K31=L7 zO2NXX&$sCRKWS8oj$*6X&3xbdK9Cvc8W>}?c*23e^;wbt+BN>B-BZ`C1Fy+w%S(hvucm84bN}l zwTV?pSxM89wk91ZMWmB}6r~Cxy(ghd5s}`J zB1pHOVn750q$*87K=dsj5}JUtP(lfWl0blvKmy6V7jlz((@-hd?{oGh5ES3<_viii z{qf7@wX-`rJ3Djc%$YN1_UzSO9RK36Qa+^`mzq=ReCZOUyOds7`iIiVWonffQs!{k zSId4=_V;on%N;7`EdO-{y@Fqb+7%oX)ru`EeqQmie>eXL{=fO#0;~aT0;U8U2{;>& z9AH!`UFqXW36(2UUR~Ms(%>roRTfvdQ}wN?d#cr}How}B)$UhsUH!A_7hkUV@{U(J zzw+rTNi{mx*juwy&9OC4*37Qex7OTRKiB%LmaVq6cFWpRYyVa|wN8yX?dy!F^In|| zb)xE|)h$r>jk?n_ll){nqvOzE=CSA+KF-(5At64eq`E z?(3^w&uloX;hsi*jm9=Q(b&6j$Hu#x6m9Zh6L-_VrU#n6*lcO@0?ns4k8a`DVswjR zEnjW1SoVK3^`Ubum7#Gwt=;NTM;Nak+!4KN? zXt%oE?e;C(zt?_shpHX=cUaruMo0gSA9lRascNTHo&7t1(mA`!2VK(M81P1TSEcLl zuHoHkciY+hjqa{0_*Mwg8-mdfZ)VFW@&ashY zM}~}CFmmOnVx#7bT0Uyys9#3?Hu|N}UyM!|?HZ$v@f}lk%;+(Z@4of!sj;t*T|M^E zxOd0Jyf^s0JL6l8UpC%0q0xlx6Anx`HR1lh*>WaYC;Ck+GqK*pUK6KHTsv{!#1j)Q zPV%1AZqnvSk&~`Zx;weh58-`pf$*-|zH6jSm)mSop)AKl1x% z{zu8vx__*F%-hPJ4E*HSCvl(L|J3i(S3X_y>G4k=O)oXQ%k+fLDt)&7Gj~XlkeVSQ zLMDZ*2{{sScE)Qn=FBWH^YfYaKR^EY@h{&0;`Z!%vj@)pX^wTyr*nRp`@-Ch=7xRQ z;>)F9o|so`UZ;5<&pR={-2Be-=gr@HF&%*nQ zdM#SGSY14F@yW&RB~_O!ToSgl$kJ9zLzdc?wOqF0Yw`7@uN~hE{AR~D>B~DV-?*aW ziX|%|SC(J-&dQ%x+E=~2YV@jIs|&9#y?W&8tKYu$?Y3{-Yu;aTZEfSVE7sLq*L>Z| zb;;k=|8DAcw)Gv?hi(YiuxDe_jZxnReZS}XKQ_I!Y5S(QANu^T?}rONHu!PczpDJ} z%YUW*)cmK$<*y7`UG-)||frQ??2TXt=&zIDRZeLt7_dG^n{wyE2OZhL>*ylrc? zg>E~x?fSOVUpoA9V7vGBQQI$Ve-zp+bYrM(NAn%ScU;+#vUB{-sGT{xe0TZps=q66 z*IT46}wODsj}z8J=cHj`Rls9`rdc;M(k_5 zuhTx;{`&jB+wb~q)Ne5dsydYke0t>TBU_Gy9l3ra z<48_efv|wEMqzJ+jSTxVY+2Zru;XFZ!`w%`j+Q@K|7hol_b0KH&J2f~o9m!JIU(hfZBSm2&F$)7t4$r@Nf)b9%(-Pfjm8{oU!Ur;nY!b~^Qpex}TsSI@LRGvv&) zGfU3=bY}ONurpWBq(9cjt z2A}PJcJkSIXTLvt@a&bdY3Dkh+jTDDT;jPuB8x;;i)<13R^-^o&m&hyhDM%>ycwB& zzR>wP=ifd*=KPHFE6@LO{>1tC^Y<^P7m8e{a-rFU9v8-32)VHQ!nO-1FT`KSx>)dH zrHhR(_P99uV#vki7q?$Lc`@!{=B2kUy?1HWrEf3oymb1~%}ZHP1*6`NS`f7{YJb$l zsJN)i=mOCJ(T$?pM)!%H5dBH?(&%;3yP}Uo$3)+b{`0cmkE`OU_f@~ErLOv4t$wxc)ecvOUj69m;;a9I3=!BT%EXvaV_II#SM)c6E`DnW!$E?(701^H{-J73&od+FBjh+{*Cy) z@$bY>ik}`oFMfIay7(XCe~Ax|kBd)=e|WRl%^EiYZ+5=f^X9uZXWsnw=Jz)b-n?=% z?UvWAinm_B)%n(lThni?xD|S9->tA)*KcJc6ild`&?KQ-!svt<39A!!C7er0N>man zBvwtVm)Iilt;Dg3UnH(g{5A1>qCL^LUFvq-+nsKYxIO*$irb;L&)mL!`{A7ucWT{f ze`na8@pnGHv-Hm9J7ITX?zob?lKhhzC3R04oisCPb<&=s3rV)5$H_j)FC+&f*Gdjd z?w33zc|r0I$%m3-lGAKnwu-hUww|_kZ8L4FY@xPOwwtzWdqMk)_R97;_NMk8_R;nb z`wIIn_HcWgJ=0OZ;qR#FXygcVbaRY!Om}?a*y;##oO4`rBstuUM|ZvNmbmMGxBA_= zcOCa?+nt0C~aWcn6&rPW~MDnTb;HwZExD~vtG8>KYl-V8*KSvs>zwPFE6L?{d%G*T8@OA$ySV$fN4O`tKXrfU{>Ht* zz0JMf9qzv5j&~=!Q{CC_$LW^z!s#!hmrt*fUMsypdh_(4^e*Y|q)$&@p1v)8Px_(s znDm?J*%<{hif5F~sGLzFqfJJ~j2;<%Glpi2$(WQeEn{Y8;mp37`!kPbMrI~uKFCtD zie#0^s+v_Vt3_7FtX^3|v);>^mNh$TY1X=|Em^;!9ZC&Rtz2yL&7ax~@@;y53S-_d&5V|Fi{SxaWv09(sV6?Rs^Qn5(CX5A^BcJxiPz zt^X-TC?mv3^`Q7dJuRwglSDcFOMW?JsVJ{D5LMK&VzJg)6eIm)umubN13?3@8q5M+ zzyvT{af{i?4)L;HRJ7NJiWT%H7ezU*(xN%{ zG}g}xUp+$fQY(t3T6mNlw>N8reFMO30u?!o0U&=Sa+ClWwmWgHB zQSpxcp7_k#k@ziQq54?N)Puzk)g{`17V1p#u|8L<*6xb7YDwOpeki68KTZ1{go$@( z&$p}%L^o?=F`lvndQCGj^gz)^(hqy_kNmdFeCtv1h8`-W>q|sC^6ICr5#Q*i#30LR zQC@irP^<`1XGGA;Y%@VH-Vw6{)7@|B9>n(Gj*?uF*GF^<&mr|d_&?8gK zRW)O`-cStHPKeFgSK=#et5~Rw5i=xB)otP<^%YT1J1IU^ABll#Uw$)8Jo=XqkH-_T z%Jg_3VKu@=YGHVwpqR+4co}8cVc8@qLc@`k7NQ?91b91vYBUy8n#9%7>Y zg&58n&3auGwJGmly_*=OSD~#byS`9NQ&))N(6x%@q|7JaO&Q;XW0|(5=&lbCi!9%Z zx1qrx>k2VV-ylBH+ZeId_M)T35U*HM& z{~^$Et=12^Ulz5k{^AAQPxRK;i8Xo;uwK-(xWroQ9&2Qrc1={bM4I(oqxTUbtsjat z)^*h9cTvImI_Y|YE@HTK4&iW7M;~Q4I3H;}BdS@G$m2`nvCPNIoBL{r8G0`x&Z`Dx z`9rMIqeON1&DX1-IAbj+4q7jXWtK#-+(#F`dR>AyDvNH~4bfS)hd!USFCa?lny77_ z!%JQYdA=m3=jCmwC#LG{DC=V}h4vi@Cep_5fK5U?!1Dc|rqxI6pii%n<-pqg6S8N4 zK1^)X7E`AiT(iJ`8%0^`5b*--vs2$E*6>#9_sE*n)&(Na@;U9n+KzsmI$aPy(GE+z zUxnUTVu>XU-iQ|CpmSrq+g|pnDPFVmho26L<@$1XYCPc>@j2m_);gl4e#p3K=G|AU zw&XxN7qs6=8Q>S%Z?o>?8C{V}EyP;c5A>hJC@`9}o+j{nQ%h~0(+d8&FW$C(E&4$3 z;nrT_bxRHLD&Jn}q4QhIUPncsb*gCTg&eeQ5Q|CszFuC8uxt~RE&d`H-dN7>EY;C7 zL`}_KjMqyD;r%jp)!b0s&u~xxdETG6&p58j@kStp{UwjYS6@SJ14}D-v?cQU2T@pA zB?g1K$_nukVORCC7^U72&D5jfCFEGJzDT^S?iBOrzh7JW^851BMGvnnB2axtj0Js= zF-?&*uWN(pAILH5TcVnWI2a6aV7DD6gB8dL*lO8Twl76UK$OzSE(pTkJ zQdG3i>xeIOZ&5?-EcU32#CxiSEYC!SzsGaui)Pl#9_VR=-wNIjfPVEwKko*jKjoKl zbQvCXg*JtTh`@{XyaXpytXp#%CQPw0sTNP&;)b^ z9kk_Q5#!=I%|_ZLqJn;047YSfcD_X4E-sc@niKkprFsb0sV}m89`e07AA;{k!m5ZPAfueXcA)Zf>Fs`^8MrjZ%Li%pCI)tS)Y7R9vCOlGnNxx00-bFkA5X}to%T?lKNF1 z&}T|Ym^viS`&%gM#q*?Y`P>kF(^8r?l698l`46GgNo70yV+f6;&IrBsQjfKS=LmNa zItinoXDKD!cu2Szono&Ri-$G3t<;myRX0l=lYY8ENk`8?*Cl*ghUy%~LK#Lf&dFy$ zpTCCs7~`O97fG+bhK!{@(Z3ethHvJE!%UqSz4bqaCJ&+8<`2V#k8F3@7XNMNg-$N@ zV#y=2-ArCVH<$Xc)Y0>YQcsn7saY4PlZF_FO-LC_-~UG-AEX?~55-{|M&2$YJOy@{ za#!}7ze39J{E#v}|Ffj*$q(dF{^#T!OPT%*WZ!fc-+(P3g0fh_T#a$S91nJjne=IM ze2}48J~=i>^BRHmo2-EhVW{0%h!g@ zQqL%1d56Bg!uZy_j&5T1586rc9z48P^6X#dW0FT?yK=2Dd0jEvSnA?Z|3+sr^=@=) zb50@qww${#U!v__=2^*7?>759p{aMvK8emRc~m~r%u~(>85`vDrEdMCd@>#BDc_D~ z%EkP^oGVH>K>1|ZO!*}Hyws^>IdbQKrc9wMQXXhh|E7P?55JOf$(#qGf6Fv^y!_WN zkGIYFvz%8~V17;imU@;flbk>1$*H`unzDy-m~$8A8y+3nc<9|n^z-RJpO$l5^#43L zX3~^-jiiSca}7B^Fxx}UrSr+bygrmC*G&DC`IwxO<=yurZ)hfIA!%oZd9ox=ug?pa zr^va4q`N75{~9vCG3Ox6Ys|R^bLzbMK0h=fo*(}ldH$FB<=vN8zkd#S3!u62+do~G zv}64FmhgMp`isBH&wS_Y^u@-BeCN-~+r0Vje+vI9Hy0yEnJ?$foBt`yg%cEEp?AEKX=Ti zq5qf@Bke!3|C#n5$uH6lB*WbCRQ7W@Hs*!7W8>^6{VDI+QZFgw$&2U6F>mIRu`PG( zlFvndE+=J9UYOU1^Tr^{$((wo+^=K|vs5%f)R&A|dN{Idq)}FXWTctb(A}iGH)W_P z-_hsM?WLaoL~cv{U&`d%xq>q#GB+>_6y zUwk1al3rtTc;UjQ!-KLp9ewJ0rj~LZ<@sYZThnJNi-m=i?bR06#+8bmP`f1Fk>*DU z&tC$rRo#StKhFGROuMdK+lf}JqVsjY93kHETCH+H`A%Nbn^;0Q@t3|#@|hMtp8`6W zsj6nRcv)3V(=D9nyvLgRr>Y$2-d6rB7OPdYSosEc-kCRXs;=s~W~OFOa@AX&Xl$&f zbBV0U!)j5j^4#J@Vol>B&(w7~v2;xhKM#$9sFpf8gy^ zz{jGSk1)?T@;uv1#>q$dm`7eb%*X1(O(sobk>nvy2Hqqgt&B4deZ0(@C=Xwv^Rf77 zl2WRoKzl2{$t_y|qF6NDs`}6hw1byd0WU9EI_}YZWOd9Z@pRcFB-Nl4CAWGBA8zq9 zfq8|Utd#l3y^z`}OAYa5>21Cq} za+7W2xvH6jmicp!>O~tp`IA+XT=V3Q`zRA_tI8+IJIz0NT_(*tmlyN>nYlbU*K?ak zmdD)kC4LfTW+(4cd7h+|>l&y+>VQe}e@s<;(HEvq(E`=|%iQ|cKt zUd_}LdXJCht5w$KX$!Qa+6FCD+pnGBU8E>2Mz5mR(S!7^`cQqm{*gXg|4!em@8BB& z=k=?4qMprnq5Ukyc@eHi5KK=#$i~7IdU%|hUe>MNQ{`LKv_&4(p z^q=DYng1sLE&f0I@8JEQLjjh6;sGTCDg{&xs2wn{l3K}H$+uFmN@Xfls8pj;`$~f= zji?flrrtmPP|q<8`Fn-(PuAL>T5q7%zlbn#N?a6nz6fY2eo8T=s#0BfRq3e=Rz~I4 zdcCrpT0c-r<<|NnwZ2BJQI>LRJ&Rf|)Rt-AYdf^xvl^otB;}fMOgU#9Wym}N@Cr~^ zHB_(~DLcUy@Uv0U@G>kpf8?YnX_8nuBXRSeJe`adhI4JDU^x+}V)WEioXGcO4TlKx%?5Avs}P!jgnV3A1i}o$ygY zms?wI{(NiQt+lt7-&%HS&aHQE^}N;nMr!fB1%9_4P>(C8On#Szd-|8eAvIF)yHo1r zgX{Z?9Xe+M8 znR<-$;D7m3KT|{08R|^+b9ENh&5zYZ>SA??x>Q}Jel4(Ds^6%~)fMVWb(NSUzED@I z->PfWwdy+cJ26|#QMagD)t}XE>M!bcF;{%4hN?T%o$4+X%Y!(^Qx07K_AUHC@e6Gu13LTfMLTE|!R;>L2Q#>I3zm`bd4u zH^IKv3TcHkKdq=%Oe?N_s!mtGP}gfUw3=Eit+rM`E2tIGeCe6nwb>$6o1@Le&b@S zv>&t|ML1U4ll1k|yk{OE&Wdx|zeJ=suO(^QM3nZ6h}O0vwRUJb#bt3t#Av&cRLUU{B`Um=lT85U1^qr%BrgT=i=%4D-wJa@LyU&+wx+>iizF>^B z@2R|njGm_SQr=d2>k3i~l~t+$x>f0;^wmGsKhewT<&=I(e`SC&5UKX1GDt74&r`-L z6OeH<^Zt)BI>{E;{LT8odHT!^bZczss#7wUAd3{JpXwehR^d4_8&E5c&J{*47o63UY|Ptq2kTn zquKZD9T3{8PuVAjBl`4dQY%!K*>DG`=k+0jF}WEKno)Hg*9x`N?BpM+RqfWhd+*SY zz_OvO0{fH=2=EUI4eQoBG%T=eK%YLfLak5ANLfD}UCL8hubQFOS89cNdvbWQcWA4! zp`y>cc{0B@dshw!4VgEu>^y3acOLfa`95Boe;bYpTJt7J~cbN**l0L22jKTHAAZh)e0?GGxTMGLN#|(Q|9{5d$afcRzerU_IZoB zJ$vsL)iuY2K4n8IQ&|7G`~09=Zk()T;hLeX=I-+seS7bCSp=5d&#MWJK;jG42*rnZ zr{bs9P<9qo*zYacq;8e6e!`n2V5NQ2+5sgv+^hC(->ABIr1fa~T9uMAP9NB%S&h>2 z$ntv4N~L|}k#*vL;Cf}{k=K$B`ZuX8kG!Xk?AEx9Jo4!o^mTRnT#u3!mp5zRUQ>-Rn`22+lh2TSLP{ZH`(KGnTN≤FHXCuU9Qce=@vmZ{%9^5??OaVQJ8!4u8-w;yt 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 Aj{pDw diff --git a/packages/referral_reconciliation/assets/fonts/Roboto/RobotoCondensed-Regular.ttf b/packages/referral_reconciliation/assets/fonts/Roboto/RobotoCondensed-Regular.ttf deleted file mode 100644 index 17e8ea57b11bd91e9f06ac86254de6f128c922ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166836 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%0DobldLI6;RHmt=q(=g# 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Ð~r7nr2;MB1?dhlQM^raj&)m#1|o5&C=1RB?jJ7KPQ$TrutseqxO zn;xbVlBBHdJuG!#n?dNRx4qQBo$j`JFW2my+5&KupV!YFF)b0@^=!9OX9~T!UX_g0 zJ}D$sQM*7{BQIfKv(Oa9-1-J00@zX5)po7mEt^?&s#Zcq4p;z z_sBZar!R%!c-=MyQp;F7Twfozq=sH-h#rHfx;~U&7o$|R(V;=4Sp$6H9&ulxTurJ{ zS6XIpxs!HHhMMkxC9BNv*{TvKX&=%CG;V~;fRKDkyl-+0ly2wCWepftI5C3inXi1r z%6xc+XG~z5_pX=4%|*PpE`AbE#aHXzy8iAB?i_*4RjL) zy-jzFIebus41PcgCSSvYF~d-0T2Dl18a{-FNvP?`QIr9ii;RcCeUASEthL1vHtrko zN5d6u3kuqfO6t zc}1JNyf!OB3*p$u!DH{AJ*%}Zym5nFp*gfcERU-8d+YrqO$YkcEB!8S-eA14H zuWhHXBgWCY0C^@@=>Hl$oDT*z^M4qyLT2)x&CBvhi1Et-A$fGuCANyo3#Nr1eQ-C$by9aI?>jluhRc_UM`F{H=fA zoPO=w46N9unaUcSRUIsP=kBK;9Qi?f;(dh;zO~W0N?a}aajW=iP(@y6-M4MCShXJy z6<*IH&-yr2=r2NFv1s(}SgKmJu9sLX-4iEq7tcM4`T}XDGnPpLF0f1pr5TD&kmJpu zB?FXa3MpWj;v^8`#eZ8S>0U+!7StDs#fnI~7AiKaQ3y&j){#C<52Yx3#;}=FPmN)F z7uIdIU|d|(uB;i;a>h36Ax37jD_{PF>NS~Hy=LoCjHSsn=C$=eR^7LM_u9#P2AzHQ zXW`H|`va(|kl%A`Op~giLl~Yt;P69uNT-Mb!>Eud7#I~rZwkO5FN2IAFjq)AXumij zY`VD0>J+dfafR1AzQF&rqNTRbY{s&mE<&*|y#h?UIBgw)k^5LWSO^~B)*JNw)e+8Q z*%)~{1_f}O5$B}H%3I*OvWqZkF$Q52?$MOJ$Gcr%OY$c8Z*lfeUdzrddaUO{(F!id z%AS%d`?+gnfo#J4kyzQ!kf|1H`P;R!SLMp;m1{yQomH!gm(tixikwNUkV{RPgojq7 z8=MzTQSefOn(YXn#iYVD7`H5JinKNgZOPiVFQbCZitfV-3Wj%Gfr2(R2UW1a`hM&c z#`CGHO=Rg`zoW`F;FdF?v-QBZgE2n4%=gg5msn>pT{!2JzrVucg?|?h{G2mS)lmA!w<=K z%rXZWPC2Z#KjM;hLw#Ur+Ui2cZ3NJ&>cI}x?k|mAyQwG()hN(z?2VP=`Et3<`ko4(l<_f4r?Z6P(I@sS2r$#c85W5}6h`1|P z(okeEbH$o@({9YU{j)RX@N3z#s#kLWb`iaN@vQ7%)|FN17j$9!J5}Ks-YIsAQ{x8Q z`=i_HYIT*q5ntUF#h6|3uZXo}!iLgPaqES3bgM*9oC)0GA6y zpUg6{QiVIi*yJuTrJd;tz3L|$W6lBt4?WVvud^Te41)VXWA`w$6a+5D0Ko(P}p&RfN=nbhpP=|?;z?CZSTKP#=R_YJG8w|png*9bm6i{yxR ziSxmiceVHw?$?9Y4)`f>#7D0CrQoe2PeeOw2fUx=SlTtme{e);66!}>Is|opkbd4( z=1&wT^Xi_d6-Bz5A-Y1GlK8tT8;iP?l5UT>p2-F47uAgSil~`_0(aPx@qDeTL;7`o z(K#1`#CVq?!)yZP5k%v4c_ZB8)uoRqi0_t<^frC)Dhn`;*QkwQyk=F{I9@0Zt^q@7 zcTkJtvR(~5ha<}dHZ1b%pN^yE#&(YzJeX4MvGTdt5r4TO(z3#i+><*(e$;w$N2Fzi z`!;zW@3&Wy@2{!tl=Y$hej9a#jkN%xLpy5?!w#BzS`Sf6X&eJJm35SoNw(>cJ+-V> z_lsn=X?tk%451~`R81*l%+JhBe!Ax6=3gh=~dPEx@jJ|ACg9I;9d?^h&*TVOd@`QIm&0x2y0lI22MfR zbts8%YPErKW)Rutk|W^mN;(t!3$A|mPUq~p=>^jVj$g23-fWiW{LAK;Eh>9|C#HN; zuRhgL!m8lNG9EUjdxX=9-18Oq}F&AXSq`PvdQBg)-7#f!KnrQ1#U= zfHXCN0?PcGbVt`p;;Qei68_sCk2m*pngQCw~i+gaiheZ5K(77zx6gcq~0Ar8zqt_ z@`g`3|9<7dPgZ9&UU&Wcg<4JIVemVVXD}F27@gC!GX-s0_wBobB5u~Bsfgq~lE%4N zoq&P?A~YN;$R}-R#0gQTDmf{xb}$N6MWK<1HdJmu`}wWYEa7;gKK&G)sMc4k@9z6m z+!;4}=14hS4EzVi*UsFx{ljS&zs}VMPo2`fwJoxT0s~MDb~>X`eq>^f zQqbz@P|vO9ui6w@1QT_v4a=>T*Y08yA`DU(FnELIYN(N64@U1W%rZGR*aL|zc0!qO zSDzTN$Kq1X?0U7QgSTmtK7(76_J>4qKI*N>S6lW|UpvFwzdU8^l*wb~G_#{R2KuF? z@p@02_Mgc=K7Q^R8+s*m@86582lujayw3DbzdC$;G4w=cX;%EL74A{gq8+408fwwX zc#jiFxHBnDzSWE7sXr+8{oCE1S0D=~njP z%*@fednX}vqOrYJnh=uVlrU=%+jd%OKV-6su)Xu)kmV(G%i^Q6RM=k zK|P_t817I*VkxN~aA=b;jck4cpI4(o2n>e8$9BU!>~bD;qEJSRrc2eten< zchi=(HBZoNx{I4iI^yCHmceSctM7!Xni zCE8lwtlE@A8<&(EgHeW>Eg9B1@_#Ytx{Tejj74g2Jq?Ga~3g$XY=b< zzD#LRY{|uyH36ZM&h%4!LB2=`MKiiN>mopR>X)G7?~ zZ(21RHG}gyc`n8v&dGwqk5JVfMeSw1;im_OOe{Qp`Lc^4u!)#a2cRSSVMoGgMlvs5 zn~}+il1E0LkvlU2W|5H-n6bT7{KBl$n$yko31M&O_=DH;lYb)Nd~H1~;k;9u#@z>N ze2!T!=5E^hY|44~;Ay9JpEx(*^pJ<**As_ncQzM)X&;B(sR-%{kktmYxtMyHn39{M zgH@lH?h!V+W7P7&RCRS0`hkWTJ&@QTLSY&?wpEd8Iu**XwrO2|+*EE&RzqUIrB6*2 zANx4ZA*rPyAZiCv()fqRPJcwZ@cLg%O0lVEb_Cs>w0WAva!98%>_{ccXtiSHFnqf< z3%Tz40WqBxQ@F&<0PLL7GiD*e8>-H;KNHnKj*`J|Nc1L6DQR}-j5$OTM6q%FeKFqQ zU~3)i8ulE7J=s?dvZw!Rsq1s??0sokp>m!xeE39u>b1jHMsJ8qL66U)-ASCS=0D+Bt9!RJdZ2KaK(CK6sriPV+|GZ*v4SnYN`aOLN7*z7M> zy*0UR+Onkw4=fuuS>Z1@kdSWuGH5F+_XhKNlU3Z_ds%Z){1Hk=Ir+xLTi!q1uipm% zYEZqHAC#u>EL5^IR{aetFHJao<#m^hiS~g?H8@A8>uXYS9hbraXMrpwp`puxb`Itq zt(tJ({UOY{d(DZ55At%mRqZ-?GI= zjSe+(&{O&XG@VImoI%qug@@cbYfN&om!as88Y6!J$XQZy-`LSe^^K*hC$&PbRvZ1< z3_!{4;2R@|YqX&Os2hohH=q}wm34S+#msHTr`^oFC;szrc*dXiXMZ@UVB>^E*~=E> z?h)U!wbRyaoS6Cch;Pn|UI}}KpSzQKd{XM_SEfvzz10f)qY*5ON1&2ei}Y>q?h2xi zxL*(V`%UOQ+xT)D)9!7tj2O{`#uy~VC=nQ~0*fAW zU$uEk*P)Fdi)e;MP{}05QaUMzdfNk9FIcr~((w22Id!eUtS&;o&wh@K-O%S)JY_C3 zK_3I4OChdcw{ITSQ8~nWSc6+HT)B41;0ySi1o1ViX*r6|33HE!k}hp-)kcc~$xlhd zrv%!wQab1L6koSlm@_tI=w*CHH;kpb91GBy2qwyH#PH?5L5E{Z>73G{C%0SHu3Xr< z(fPrz(CUw~*5u2v60t1P6aEvH$ztWsHMa(Hs(TX47J1SAMJ!TMPlEV}H?sT(BlWY? zM1yFm8%22)Hf#)t@OtfS%UQ9YwFOI}-J5E@Qt z;8~GXhxm^_VpLeT2z|V+F;j3#$rbr3jhlW{)<)#xXE58It(2A%*jV%*n!_?4!XuUU zaN0xE(%zJkWdWMSQQDyV>p?$q^dv4z>)$V9{J;TeinUkzxB)S}#;5frN?Bd}2mitH zA^3?ueDc65v&oWDa3Aqa{eGNwpI+ymf?}AZC+Dm(zkwYrrz&2AnWyj1^DLol(1kVv z@_xqltXZpeE&N}TkEzkHVT~FM;5e~cT0#r22W}n&YbeH2+tSq1(Q-wN?bMm*FV>gN zKOTX;$78g7tS29vxtNBjJC*LAbsz|!#KV@CX(k#QM9K)T@4)x?$~Ik&P+3VcEMATD zmli+TK}Uzm_anIhIzUxx$r**+pJ2EQ^UX^(T*6n-$Z%Oz=KUo2I@*z=jTV3)fPiI7 zAF$jC4N8m~*cKMYLa6u{%rsZn+Eq`j?Vv^mY1%}8J4T)gs& z)vF$?VReV_o`cu6tXH>rtEA*s&c!Y3CAVl4(WkC zPqS=f-zi72Z@v~t5tVz$v|&!{G$2YzL}`PdkLLgN*L)r;CbG-`wumUDza@v=)c*>V z&J_>IgcV|*0gyof%Kg9oTKLgN%26>hK+I&T*lPS$3(I)^)P}xi^j+|8TD0;J#B!6d zX1fRT9z({{z(K=J_+}3Lp5np7A!at~XkNE!N<4~2GJ`MY8*C>K$?dL|ezwZ5&U{S% ze;MEib>U1TTfzlWAf;apbWyq_yn)%!PWyoa#YV|qSie_nH1U(2N@~Z59kv5g7mG`1 zU-A9Xq0Vy(hRH00zyq(#{z047aDygeqG??!s)3=h_a9PgPg5>!l|Xq}1umSD1ON)S z7z5CV9LY!+m^39n1Ca-4rJv#bpj|^vc~n)D4vW#v;U*R@8O#6nPSKM=Dya3F8fO*xp8l_Nsg zcl3j&-0Cdi)}q3!tgM`4Mc;0NX0;i$xMHzxVZiU~QKPi{Rm6$?3bo}kX~%N;beU$# zg>nPdNT#__N?xh- zM|r~%yM$Cpij`xbY9;xi(1tB`XVp3};SHLO8lUcS>h)a?*7Cpw-wEo@qL>Y%M-Lyi zQ#s%q()eYs4S^e$^6iIDTb=LO9H)*myLckjX0j%W6mW>#;vemVL5`*ReUM_k6m+w~ zZ_u0dTe)sgSh?!RxJk6UWO<_2tKWdgr=CnT!DD10JqP3lk4QkoV-5LO+qJ$X+s#Cg zdRnboip$)1U4`8cs(vkNsbB$iJ=D&b)1J1>1dhXee9CRedl`|YP!Gqn?2sy z9kn2}`?1#f&Gw0PT`MeS&W;rq{XDOH+hZ)2`LJJ*Ck~|}g83i`gWVC)IcIZ3W%dRA z;3?f3DxReR0kIr1APOBvgJf41!&Gz* z=VoeAp7Ml6nVCL(Ek>q~^XLU8CfPk6!wS(2_LxstSXg|RG9WM9!2O|(hWSDdrK4%^ zhZE0tp&$t8;o@HYs6U|jJ!I?A2>z|O%vUTJ);%zFMB#7NwfI-+r)&Kt2KMhieT^M0 z87{MAUg@11k=rX{v&+m{IvZ^#qQiDZy>n^yQsf#Dr&n=|49mgl$fht2#BBLdC29FS8S`0Ix_d-MIiNFG!a=P%s9mI!C%mO$0N z)qI-xiV|FugzSOYk2BM=TL)+VhvnB9nB9kc-Gk_+7IX(V8sVdvuKE~!NG37qrh0RG zT}OxVA2etFj0>v9>Id57{VjT z5y>>gWHettm*}&<`s{EqpKZG>8ngSKRu!Su*~zF2$Xie%Z2q05ZWWuH=e_u-+3#*W z?Ljf*>cu}RuVY4)Eo(GNFy%$*o@zBft5g#ZkMJbII;tfEduIqXqGAI9W}x<9mf)EX z(FjNa4`=`b(FAZrFjruWu#ebKZ@AS=p=K2o07(K=rgKjX?vT*z=aHD4h#$Y&LCHZL z^y8Q0@0X~&KJ)Vp?MB|jzx+?|FK4@=^!-?z+3U~yj915R#1HFR4L&!TAht^GQ?P#kJRRh51uPD( zR(L)9$!WoNoxa5!d}^9w^eo4)<1-vedW={rK7aelEgV&6J$^A({B`H8w~n)_$3x!( z&n0O&0DDA{;&g47OqR1daBWwltOEwls42h|1;K>vC=GqAbXaLVz%*h_&S7sLp0K%y zNf>lf?1E91lKEoLOOez@JeU&3_zv;gu|xRB3g3Nr@2a@Ze8g|8{LHxvGQ2spTP=*X%JF!saB4bX+f3a!A0__m%IQ#US6$|OEpP*UsAkUSNop2 zM1InKhIuIMNa)-MnoB%hQX&j&-L#BN3^AFJHW*2~=lszlmt>AgT|ED#lzR1R#n=A= zw&I%c>1*bbrAYRn=rxr07;3FNe$AfctuptmNpH|@c(*p4QaaRg!cyFedwcgTwMiqe z%g`Y`9+SldN=S!)ox{Hr0=qp`4bU>|aGG=+jwA~`)UJCMiIrnga+mSRJ-(X~*R}oopa3`z?R#wRz}EBw|EXfxrG`m+ zjKm{|7LQi>s8{bdl^~4)X~gJsV#l*)3)NfbE1ahEc@h5wq+G>xaHKzoddTXKbBp3=$N}*hm09B?CECf_@{t| zJY8*_K>piNO14BRc>zH;UOOeyKGkRMHn_=rkWe(dg6@pcszd^e#gpW=sxWy2B`ZrY zEwb%Pd>Xr6R`*^xn3S_+$$|lk#%!UA(tH8}P^MjGEKw)>ju|gxbQwNr((o=~;IyvO z*~_*FF@-G^Q+YWtfvt9ai_Ri-*}GjZ_8i0w)*&K99n6LsI+z6)8jicpb)`B_W@P!& z5~5TdU|#82i?~(caUZDNc>yJtYLJi1U78nMa+lx)aC>R}P^m&5e0$iQWCqtjgkP*R zIRE6UkC&|ZD|6A8nTpdgb<_ESVoml8UUA~U43q>|x0)&2mjAw{kti5HL#Z}H{J<(t zAb(v?_~pK|ZMMX*i^X^OV*JjsoQ6BWgGY08XoQ6$$xTWJeP7(DKo~GMq%UGU@kxV< z|FEUnj#%PQnY295qEBK&wNFwimVA;a@uL=~xE7Ig%R)yjUq=V+lLq6HhS_%ElOilO zzFK}#3)d%wmVA;4%Q)#4?q0l^ypo@0O`5MMGV#t!%j3;-YyB~-mw zM7%xXlEIN6Wu=}VgM=Xx*(BY1v9av;<_i=24ow=h&?{l^)CZ50;RQ2}-~Ht5_!%?D zjGta+o+3Ilzs7v(XNSBf28k){PKg_@vB*EY?=kP3g2QjV_vnj;eP%#o*j`*+c3}1Z zkD_1>9W(amYy*MaY9gv=k?sl<&!et%|hUWR8;uVXtZ>*|Wx;nl$xHi)D`{ zzBP`IJvDLK+2+m9PCxYHlUbRg2j*0%wsF9yh1QQ3jvTPDdfcXgqcXYAx?;<#2M>z9 zD~r}ftwSyMH}>y;L!AEATm9_To7Eg2-^qL9!H0*d9rz5vM^=1SwBs+MB1sUU>D+)r zmX@?G<>lfdIAXLOCYBnc6}b*F|2umQ{yUk4aW_fqb$p2rHl0j{M-n-1i%|$ z7$Y5!YxCZSn6$J9_&!@F6UI>E#!%i z(nlAjlBa;vYZWzK!P)F>?To*Tv`lpW?KjRT`rk^P@SMK|1=PV2?Fl|$L+yjQYAMY# z1231}nMf*{y3lho1G|O1^=c{k3lpa#XGBc{0@#8~)>#}`Bo49FpFQ{txScp>ReqB* zXR))GBe}d7-sjiZChH%NA^ym~Q7QgqiLypxEaUlfZiD}cV%e@r38s-tzD(1AkIn)O zSGtg?>stV6W%zlNnaKh&Gx>CO1}5?uoHI-B;z6vj&ama`QA1=T92PKusv{J7&9cVwLMO2tfeg^riZ01stVEhse;w(j{CuoiPO;b zSSB7~^>m$G?vs9+O=%t`hp`)(Lh{0mq9qF(wq5n!nuY{P1p33k&1aC(pva#@42^IH zU}QnkQ67N>Il6KsKf1GVM&rsuhNX0Y9ru%}DhF1l)5Z^}vE-oiIZs zUCv~nMsG6mrw`q|@-#p9_P(7}I=(v9*|41?EnQJFM|5o!a}y!bS3n_m<^Jv8~X zu4MZ*cW1Ud+i?F6$6|OG?vyw48$Q8Oa~h?sKSoJ@<&$c_3pI#eVO4Z&vV_p+ zgElRGHE3DY^dle*2mL}iMf3|Pg!BuyK1CDN%~g3AtK!qDlBR{UA*j{vJ;K%)fMX6| zc8t0X-Wgj6mT25Exnn^P`Ty8I(lTfdudiIG>{yqWE08Hkyd-96q$G!;vS> zE1xRR- ziK108kumsxq+y9-3Q4E>=Rz4AjsLnnpc4uN>f{sQXI>jnPB&(AXoQ5NDOnbcfGmR7315OP&$?nqBHAf(`U$pb%d6G#yG`A8%h zQZV2vrT|$qNf1&*f-uXH6AjOpE2=|sF*cE2;%`*yAGQ`}g>PEc<=qaiy;ikOY&dJs zWYqZGyKQ~^0`5K?jLA=b{bc=WV%cg#D2JlJLlM^+f?nDkE%#NMLgyM#4jHZRN-J7|WYZF;!3mNrqFMC|!41%q+L2(&epSl`Q!hES zYB0U+$g!#yQPCMnh_Of|g1J$2)a(1^H8iYdE8o0k21(q(H?LjEt5{8`(4k6p2uwv+ zU==m(^i&r@K9e;8PuGjEDZz(ADBVN)LEMW@T8Fmi*0S9?v~A;)P=V(S?%1JE(^(f+ zyt8ZXb%$-_fZqMP&RsdZ?mHV=HmasB-SwunA&nc+eppv$Ozz#XL1OOUp5CoTc50c_ zEUCl#v=#f$uJ51H>E*gz>b=x!beqgWfg?K4-gV(Z2lH+PTl$F%kDqOCA|_KF(k2mMHHMCs5QcmKrf(*VU$j1iq zv5|a)$%$9n%E!+CA9wE^Cq~ z{t*%hBcDP;4c2hHg;It{a&7A92lG78ASc+^@onpbV5^8{ApokHbR~dAVzod`tAxPh zD}j5i1jbznw7C*!!Oc!PB?LxY2@Jau7<2`hD8a6dpAWeb7;z;q=1SmBG^b4n^uQt# zg1sG&16P>icsn;C0A$Ti2;6@qupl7-lr2gKthf?boDf)jC9pIhu!ficJ1JqY5J{#b z<8m&pmcUDvMcJ0i5|<8}{>v|_Y!r{J>!?C?N5!F(eJj#SB!_d-qE&e*LH2Y zXeWnF>@#S}@Ox@E{p0-f^WIvoO#Al~(d4}Md(m`S@vub`##|KTLPJGrXc!E#=*YiM z4WHAZ)$rnvS{82<7u@&69Nx~MYii6>?mUp`TM{E5DOJX+UT{J%e%ne%Jsd)2OL zyj{HL&*IcS7MXvb`wk1e>wiCLCR@=N&`N75eV$HCPVm%y+LK%vuhGeAp1KrUM%*3d zQB@E(`uHK=wQ^OhE?p>Ls-u~lUB#7y?Bj~d(bKE)ztW*!meIT@CgUc~P}2NJ{xEkG z-JH{q+dv^=`p;8dJ6n85aR*O))#_b`J+^7>ZuO$tqHgnM!-wX){`%|PJRa5K@%1Tg zRNP3r{Bw&I6R)0?-ElJIxjOGu43x z9^a>7{T59&Jv@EZ($TMp_LD`%=njoq-_?A^#>G=76`(JtQV218MoUHZQ&WePBLS1K zO5Nk-;G_o)KO>O9*^9?#A%avRSDe`t5RDVn!OfQ-)lOCVBLnX)tUDI=b!WW{+t+Xy z1d_3FwhAjBBdr?pC^%Yw5CK5_ zG|_S2;X}I~-lZSj?t9_f{+FI5c!q}m)T()Qz`D#(`k5fGb}IWk%8-<icP`z%cG5JouG7%T{U@zHpf3me zvYzs=UZ#EnV!yy=2Eu}o4lV5blS`6Tf?lT#c>;?9bx>*1z7F!Nex(cb`BsHtHb$+&LbRd_UAYYMyN2`rE-f@zXxF-KEO;&O%jwE8u*kYWEy9y z+iy4COU$0xdE>#e`yM+dJR)jW>$@xF_v|-%q-VpUYMP-pYWMyT{o_C0y-RczEj^(R zy4>Di`C|`GoN_;~H6Lr~2y9hRrs)+O^&^a+Th@RgdMCF0LaxD~IO|?N69|^#3`JLD zHeDr0PfVdoMM{Z;#M2^6L+J@o1)mMS|B>cuTcdyFegn22JM-A4mt&rY8P{XLh$%yR zH_lMot6ldR*BV|q9(-HhJaoXaf{9D&RKmVA!_E)ETB6afZJ=H@o-ad&o>9ihU*wvk zV^hbKDu4&I18z$h1`+v>^e8UZ*5h~-2!nJ`7=bn6UCB)JtCv@;3Zl7`xOT$G67|Z8 z9b0g9wr{4E5=s#NKyU$h?Z7Z`nQUd9p5d@(*rzC=i4+f(rP?iOqIQ-Vj~x|f1@73m zh7=;)xREY$=#SNn49bkNj5XSC{?g^x(^G0NlSZAP-KlHJs;TCYs{FT=dkuZ*paSSdwFGmUd9pmXU;0uZc936WRxUb0%t0LgOnKetCIHjM{tqJMpz!I@pIMBIUSVmG>O_RAY zYe>{`P8@pTr1qQ`@SGYPK4`#*Q3IY9KmTU@OL%@f{hNp~j9-!t?%Q|p>&G4!{Rjs= zuvdd{ddkr4sw9p%#47=kfkLMX7KmUq3eg8g_5&{6q6Q5J3v$ealv+_mZCU)AS}XLi z`s zkksH{%@yBXd&@W}`dt0??{A47#)&Iv&hT{TOz0W$ywOqZrcy+xHGE|8fF=Q*2aqy? zIZU8vHn;eJ#B6Q+&6(Q5;$?tGASX@H&N+9%1(ItQ*xOC05f-iU zQz0tR^*c4yIBhK5Z!A3{s`u}!O}aUgXP*YDFT%eP5z+E+wT-!MmyC32U2-#=K0B^*Jr6_(tKqh4*T)SXmRStN_pU?4gFDw7dvwjQS9XleAJn_!(5_=29Jc<+AqS@3Q!o_VXc=&` z5x9wiE{w&saT5bg;9IBs%t0;XDo;B*a^UGX zU*t48`;+I#a~HnTjy$+<)+%+?yamgJTK(X!opw*V5F=_A_d%i}I=>mwFJHZUw&#l< zUO7)N6NWbc!_*0-ryiZcW*b~6u@=m(Vik&NWfg| zLP}*GCPCI!FR^Le&wofJldzy1A?<~LkrfDtPXgNHVjO_t4cZivMc6IRF+8y>dQ~7z z+vd+MKE*6ULLvDSKiH-@Iw3MGUKa{W5Wo2+n*UG>Xn1iFlfgEVNrFufO+@3bjwTu} z-)me*Itq}cYY*R?Db|Ufix+7NjTB=V;4*QNihp@gEArPz)XBfx{v?hh*R`6ir6Jxf(o}52OJ-t4fO7O59vw!-xc9y zxVvRd=qt5y=w@ghR*@V2N&Os8k5`)N-jbC`617s!K+FYTpt(B$Mcis^E~pKjes=S| zGr=JPI`sqYF6=t@%)t?N=a0s-&=(Rp4{Km6ThUtA{z<}NjV)KS3I;LM!n27V%O~KH z8ZNy-P7&D-5{_jQ%7H9GM6SHP4-KB3b_G9-gbTG?$kkp97}bESPXpo?qb%?gQZ+y@ z3a4}rPHAQIxGCf43E`43QhdQOVI_>*BoP@BfM>!XVf4!8pvpP!qg%t5DVbk6T>70= zP4km<&C7$UF;m+;&G_Zw@8YXBpS)Bdka_Co1hH{RQOlH1#OlolMLi_Glo8cWKKr4u zbNQL~o2LA@R${L_5LpHu@d#Sv#!8@RW6Qt|N7!-2^h@TkupFjhQT06oEu}XZmBc>r zs}bi}v&}#f7)j$~M9OC(@;K3ao(oCU;N<4(!Bw-f4BR5I>>Np;S67w<5aw(-R*lmo z@Jg}4gkbFmYC-N&JexOY*+C4J&}KJI)Xfuhnlk!{m8)0mwT1M~hgNTY&LyPpJ(Td# zCuuJ{5E0ai4>Xa7#*# zvvz`2NVp^@H#~#f`g-{cc~P9(g_VgG23A#EO|FQ`2A7vT0MbwmciPZ}r>YZSbXwH;FC{2(SJXqPEj*Ls|!7M&imw(dEE-Bm9NQ(V*s}o z_fiO404;U-(sd?iLJkrK^)O9qF-EO``XK3*m`Sy@aE)`nyqx<*kkcKv#GOlJUAk8# zG3RsxfWhEKaa^;FYkAKVj}nXaw@yucOT6J(V|>!Lf2bi)ZfgM=>r<T_TX)g#XkJLQ~WYO+xRe^_tMXwu%K?MHl!jO}Zr^ z=U3X|VhXZLOxkh@xKd>ru@6Tci7mx4wP4W54QLH4ItD)mfpx$$VwH}%FOIxS<}+M6 zn^e=B4pCSh|26Yc%`v`J>xX<)@St7|-4x~37RJbJYsItT_}Xp8NTO}%aeeT7y5+YD z?j-WFPm`z`rys8st@GrfZJT$N^-=tUZ%MnNSBmHC?Mf&rtCWuW#Zgz~aC49qj+=Hc zDb^}kq8Ka zzNcJ#u`weYKW$ok@vE;G@pD7ZY~2*2PLJ8LNu;NR*2Zqe9@6?qzNS(wjUz+RWlgvi z=aLdE9f_QiHMUDpUZhY4ld}t;snRt?XcI*=q}fqHO>SZWnoFyjFZlx6YsdBDuW7-z zbaA!?T*_UI=YKH1tZaNLGRljpzle^;C1Z20`WB!?GQIXWBp3A_^E-NvvAa_$1q>}< z;`5dXiOtuRgHbpmEoH9|pm1Y4T%LhM7Sb6&I5jV_qAD;vkb>SMmz%*uR-t8n0!q{} z)uB_zYbzHodT`n#W5I@PlV4l<>d#xZ8uNElz4%%i{l%A_sdnjF#*Qu9MXRch{Cc19 zw|`YKUVDVIa+@F{WiD`DUYV-<9bQZq*N|p0uY#-7Xi3m29LyiS1&}!kWZ7+w^iBB4 zor#;UP#rFF5)~8$PGo_bkl92!$59tB*!Wm2Ha=KVq`zRynm>Bf=s6Dr;GfuLe3*0P zym8-_iABo_8-?DWQ%~CDZtOu7Wr?owY0&RU73e`vV#URV#dPI@o+!Z-hX zxFI?;qV~ri^;@Oj?B#6SZuZ!B@QGbYfm(knw+|jMaUYN9;Y+87Ey#K=P zq(MKLuM1O_LC(u;zfyh8ym;GagNxb0-Ab?_J<0S#qdSbV{0`w9hrUQ+7adLLGQvEo z{T;NV1RpF;bJsjejCscManbGWo7B{k)wFenKS|yF;o({YdmF?i0Hkp;9)Sg1Y)>r6z>$#PwoS&dkywB0!!Or9whY05fa zUbL*0)RnSS_g933&GNcO^c%fNXKAAQ4f*~cZ1V6w6 z4`bmC0|E8kj|NYiI7nToYUbK3lSelO&mKE!8c`~C(ldv7+b|ui4{h1uT8z{Oc`>rE z;jhk_r7Ai(iR)BRl{2|3z~#h1<5N0P3l~50ya9K7HYZ$BcY+yK$X1_HWwn#%Jdb?0wZkpwgBagF&^;jYA&N2jW>` zC7aM9HG^|pS$pA*j%#~3N1AFf&aP8(*tVC)4A)&n<*W*S_t z3kMCl%u43<@~GWi_o#7yuLdD8uX}yf&^5EI<^OLLQgii4p0R} z13@oNWhW;pIu#)1fa);(AA%szMO$^&yIlWNv@kw<=O1nKHs8LBlF*i)ir>(M1^=OO zT604as8tc6(ACf$qT%k42|XbbvLO>{IDFVHnzfUNp>8?@UH)jZy&V5Ry3Mil8aXwP zFmSd87IUq}b^P0T&w`#%jr+`1D95FtD8YAY{ASQ9%gmC1OV-XBknv!$I-9BwPZ`~R zr2gto{f$urMojqV*uJ-d-mydTXTC9i!D+2m|6zlBtka*^G+=e@Y7dXz@yyXZ{l<(M zbY9&`{uJ`WzKT69quiw{j(Y_8P|9s|1v;4H$ZeF~C@b6r{|-4^a5RY0;MdMg)XE0} zMx_9_0_=eP#ZTb`JcZ{j#dEjwNu7v$*dw~I%T9DD#;)heqoDiP(QbCd+>Nf7$42=I zd_b}@ogkV^4FMF92q?q!#Vza>2y_;CZyQU*mM@7IU$`hubZr|AqaTR6VJtO*#@8|8 zfaYI!O`Qse8lg+XLO_(LpdpweTI7-dt^+3_fi5h66$kxU1F7OGDlbkn(KC z$FCc^D%6-Wv{QnoSN$eQhJI0PI8;4R+^SXI9#I>-t?Ov}iDtmJ;64YJ?__&P|0|c5 zE@9VMW>*U|RKAD@TLTWI1-B(VTKo-odvGgpAd9)1`Tk>h{dc;eWiBEqRiV-2(9sU2 z3z`}@EJZfduzcjo!fgtV6x|IoHZb@8XHEx4jV@dk5HB=%>lMFV(B^t)2 z(_GY}{oG26Qfl227u?k?alr#2YmpoZ#mbhrp1NoD8RLu}#kmiTUN9aemGNUSb$$s=Q$&_)#9`|FT$`q8L>@~QS&3{jKmPV4P>j)?4@%&39Bbg=$ zux=V9S(I~y`+z9DBD-cNe#(?ti#)~-G1j}JXw0OS-r&j0ZD7oL7UUKB1ZICWy{ z(Q{K)JpZ=wp;0{YPviZ|=zk84J^YjR4y-E~d17mHkC`V1A5f{5iA!yh=yx$)9C6ap zi*UwafW;NW;j+TrakNbO_i)!TVbM79M2O_7Ml3mO7Q5JLTC$=k#XhaLoz-w5&wIyr z7f$^cbtn)x6#LzCX7FycGj^AL-B2M-%3K%at?=FZ=h}1l4l5rBTAL4Ai$jjwSRIY? zi8Vo$@t1aDT)MGTSoK7+d0t|Ulj?L4!_G&XEtl?>o6PxzxnzQ5X~`+M5Y5#F-WWgf zbO86ceED9j)9<|ZyjnJU$Ao=4LTlHIOs(MwQ3To}A2j8R#o@LJVRe@zRo=yMrC7!e zaI6JP)~&6KTW;Z2?6E z<&Yl5nL*|WaIt!qBZuqJOM>Jfqd%SVM(yG+HMtiv$Q?cSTfdBT!8dA`)NZv1Xi*e{;ZLS5dc7yH1`iak( z_W5pwc1$TyXvgT!baEv@2}_8aYCX!d7-DH-P-T#6>45e%z2dfZt8Nob-!T?L88j|5 zUeyj(`P#3(GW9|6+naBaeu!Pj!wN_XDT|v%6h|!luf@JRAiM>V8sX<62Wk<{5@-&0 z^d1`(RS-ohpg+@H)a4FO{nd@VYKJaCw6{5br)c^vuY%}E``1=mr=<*s?>yT*yWr_> zplsDsavBonL0(IBi}Se12u|H#C3%QkY)C2*xVDn>^q_*kf_6v_`0|}%n;a01{AWEi zIU5hwGgbNnKXI^LWTU7nd`&22iq-^KC%EI&_cDQQuS`g@F8I_u+n--E zW7W4v-Mgrdo_ug;gW4~Oz$1?y7Tdc`Hk7AUbm{$2OiHWPqLZkWiBy!jJ70P&^V_e> z1Vx8h{}8^L*V`JO9!mks`KV}_NXk33&-jw6XJz(Xws;$4>sPbU#rac2pI{=1;V5B7 ztRAQF3(!HlGTH7TiY{S9%&r6Iiq}bnoQK&aj3VeX>d`S~UlcR60e7cESH;CnWFRtE zk&MNWUUzfT?gDpyozaaCUnIw_3Akt`!#e^u*^_sR8mclNE_VJuP#0ZsXzJvIQdvYx z-3p}Xodsw2EPsUbdE;+zAblt8(6TxmhR(I?RMZZeStLNe_y&y&#I|>V9u74Mu z4uv1EkzPm|cOq_p{LdMBQmC+0A{ON_uNy-mtiy!_WeOKSLJf2{*OmpA6v3?)U_Uij zWn1!6vr~gI$no@-lU6v|Yrest~DsNYV${dYCgdgsRZ1&wpI z-aCDrPfcExATn>noqOVZrO!nb<7Z=ye)i7wwQ@X(FCM70`zg}@#zL=s534GNUQ4*c zEj@#H0W@xT-;~S$AkWQzyu;0@(;;@?T94q%f!V`evx#|mC9c0|nhd*_uW(b}4HsNo zh;^th?btMTM&sM|&YHf~7y5CfX9t2E3m^G)g@`X+BZ4n>USF%>%^%L~ue9qh(MR|2 z5AYSOL8p+(dIiVLZ7z#Y9`q89Sm`pUWcru?%LQmIe>%lJTo<6RhE6e_tR`@a=cuQI z@%g4BA03+#91!&0Ga!HFqzO}T=H?iWB%NRJ*qMP_#t*#vp8S#d2OJUavhYGyR<<}Y z-;h2F->HmvyUwFj!ku|Fdc_zv<0``IRWYX`gxR%<*XhsEif1cQ{F~lQH@};%pREX? zH?890it3DGmn&YwAE(+%62%b<2jg=GzG3_2AvBVVWI9+Sjzl`6*X;ZKq2j1jQwvr^ zsUH9GQqt*+TBnX3JEhG%_4L!HXcuJ;NloR9Ud2&s&e!C~lO=uYy041W)=rOyzlmO^ z>pk%j5J;iOXVt z^60E9s5Yc+nM#>;Gh1eM%k&IK@5vImvCyRv-%HJu&6=sVhuN>$m6;;)MPDPJiSEYH zs7hvbO1=2SOSQ#C!jYb$K3+IHp>RUity>d!7bXlZY%B9q2xq-;erx0WR#SHADURqR z*XK)|+2^)eR4SeCYB_p*HEerAwTx=yqjR7F^3Lfr!;&FYs&SVzyrREtRYGmmoT_cA z_N+>%tty5?&kiOy=0NiT$EhdBFoi!wCRi9)7a6NoG7A~7t~RD`8i9&$^d3}c!tkfx zNh&HVEJ}Je(068P_i+=a#i2XMVbND?Hh!+Wsp^Ms6iz9;_(}Sv$}5%^PC?f=NC@9H z;DNfvr6c?BDLtc3U0N$Lhd>Z`_3*2VMAd>?RZHS08*j4Z8<(df3*Xp{3GBEp>BF}@zIdG#}E4C7z*wNZ&iC;dVK#S&)}a6M~_*6Ok!v>sO9X8TFx5E0zKVv zQynY+vW8POO+g=d>fFiq$R1xNHXw&j8yqoG1O;s+(lmuhDH(r$LcCUu%^S~+RX11*~^+&FW_%FWGlo94~!CN55? z*RoOF(M5&#X^^w2CYNU$362u72z2BS z;3JL_GO~kQC1glC;}Wu5l#s>s>$lOknjFdt%R4?zh~*Bd;K@mmPpwisKj~~{aeFQlA*&E? zN*%Gq_%b0EcY{4RbK+Xh`smROo3?D;vaVPr*5CJJl@-5iTzL1`&UfD4y)H0@u6F7m zttwa4j?gQav3O+3#9DeBYdp7r4n<8wz;QIsOo@C->RYAATd+JBP7JcS-CP0eDvT80 z6wZ!mHDt_;l?8KGt1mrQSgS?c?F}2W&eN(c%b(i$q4{&R?tkd^cfK~J)=jV8zh93w zx8DV9x5u9M;o9e16Wi=ikRZ#`8i23BiEYJeRV9I)fZ?cpjL&z73}cNNuRb5@sBTya z-idyOYB!viBxr**m9=_hvr``m*C7h=nr`8UwQKo6Te@VKCCFJh$FF5w&kAR0!}V|$ zign|&(zDbV$78c9XVt@p!EzBCp@SK-!q_Z!zd`y`j(iEp;XX^QiXZ zHg~aZHRRRY))e)oEyp))^T4;uXN_O{!Q%UxH^^z)v|&!(g#PvV)vK?zpOaTxFPz;Gjs~8(}j&z!ux5=cTlyc%| zUXQzHu9`Au`SFW$Ck|>?t!4ds&GJOE=4*c2d1zasw?11uVsHDleS7uo(6%S&WIb-! z2ylnLBr-Cc&I}UApn*W>3$-fu_0yCMp0;Xj-waSeS)60kqv3{TKhz*g%28^QlG8Rm z9^xWLX@f>0BXI?Z9|_M1FlQ=omMgerlA~7zEiUpFk3@rNzl@<)%jOQLR$Zhh44j=% zFzEKy{rVOS>Rz{Mm0Go`RITfqapL_uM~%9(J^QxXh})1gSRaxr20mQ2 zoLx>I$?;5Cq+g4Ha+r=6w>#9GO#|1CLqHL7*d0nP(MYG(g>N#EPI=)>yHH zGP`vEp;R}zY7e4AVNJv-+bNIf{`MWfMad7@fECE*)_JK8HKMv~eZ$&@e8Ub?y2U6P z$qx<{!Jk4h1=!ci`Z?(tB}|PY{u#YuV~W-4RsB2+mF*28UlLU{cf75h5NsQHi`Ai5 zICG?$xSKdPHv>IDIQ~W@@O-eiQ$boLQlZQW8CW#9V1Tp5siQ4KnfBnaM&k0$_N{77 zTqVZOyK=Ao$z2^AO<4cto=&Yq>(H)h4d+apy|2%p3w@^c={0%s{>j>71MaT4<#I}$ zHhql0_1iOQ`}}?n*3IcUf8aeAqIbQTa`WG5LtAwjGUKl9ZG?KD-~0swlLpP5JB&^u z-5z)WIF5%^RG?Qh>w!?I9cAH`*^fjg8%Oeu%?WL95c@3IKdwicZgQMQM`VkF#17RJ zsu>WYCQ{*5T3)V}oMqkzWVL0tZydr1&-zV+T)Lo8;SoXxdY#J_@yJ)k zZQ`fT)Q3Vd&^B<9x-`@_lmPfv;)t&GDS*$al41B{qbe8Oln$TYq!B16PAo_B#7;sh44tWsGb)tjWFBM4VBSpnnMk9+yzeU-ZF1f5CT;Yxh8TZ-^()5=slqs zH~%(&_O=}xH^Y^86*o2BG~QQ{0lx2zb8TO6<(yW+9jcncXXMH+lKzzdBH+$cUmP(< zq9yQ9O4g_hQji%!Eog&Tn z2W9SvBjRhK`$s(wiDkZ)h#BCQdiI{33yDDqN%&9c8x=vveYO*<+y}aq$lBwL;Qg94SX}>2W!6ZQ^>yjf|TX2jvL9 zk9a6Y@qEdr-Le9NS|b7pJz{O?PaB*3~MjFF}TG-T@teDXmstGmir{1j^jjvw0#$A0{)|#AMspi~0k4*C} z>^iYqZg%Qj`FJ%xCrr)pe6D@#+k~XwXa(8Y7K{OuNq7;{AcgU`sV_ni24E^sp;9U@ zyfjd5e0Ymnl<6A=*+lK}cz?P-$B$ninKBwfq8WL)$yqi1*mi9FjMaahcyPsY>hV)Y zmwCT6{@Ark95X_ICtT#YtbXrXS`r=)X7S)b3jQLMm>vk95N=|H`RfCSzI0!X57vsR zkr7N^BOM5-?|zK;V?6xfd{M@6x+o(jS_9$)L6e;8MHd70`x7fx9{+Qdacb$2=RKEq z?i9ZMLIrjvdA`!7`z`|-WWf@40$xJQ@px~#H^+|G(CSuWOobyNk?r8hOAoAhx8G^q$?&zRsDA%YEmTTnZl|rTF!h|+| zXW!=ahE*%ypkx20nG-WA*7JO|bLWk(TaUc6VWs3dMs>=m2rfXfCk8h=`B4q0{Z&;F z^CgNOl`JGejGdA;P@NG#L7e!&d){csC2=Kq1^8PDUSV+wwxZxtj{j>$5l?ujKnb_l zNhhPA(->hCcRl{=)MAMpKE0rKYFmq_#=znL09cS}J&03Q{Uk*xIO6mfXiq0GVHuptxx(rxvVS z*`jIV7W+iY#znq`3vO?Q=Bgv7&m5lDs#RWMk*9o>mVJ7(YuGC4cEou5t83J|yeBlj zcm-s*75t8EI`(3bQWOv0F~x%0s#|fd)!)*Ou+iuwBTxJ;fe!682}AK$hx z7-I%`k7KTC&S$dLLC;LF=4y{;_Tjl8#{io(7yDb}TmvvyH-cZS&SNT=&tn$}%>||l zDUfc>*jrtvcH+@BoKLn@!16Q>6uS^P0+VnLPF1Cc9?KSjIW7CrXj)RJ6aXTJ3(-gD9MTH8LL=Lq)Pkze3FKznQN^#%MTP~q5_lcBk z3%5Tvc+c2-SEPwIzc9kjh>n*!ToqlOG5+}C-~p6T8O?SXxGdvn1nTpMkdD-2IhX7| zK&>a37ZcqIw!;L|Gh>+-;vz$rrc#4VR=EtTP)GIq$y7sV8O{w)ev4l>KN@;iz3=Bo zF8*HSM1>6t)}D$MZ|)!daHjFQID2Mn!7>4>+vZiqXW#WU!p7Ma4MnHz zIN4;~j9{IeIsry%7*d`3s@w^uzUs`tfWGAlJClOtNrLr_kQixKxUs6SnsrdjIv~ny zR5uzw9S%J8!pHBN^dedNrB|E1Ma31~q?@ZmEum!_BAYl4DB}PqBM~v5&bo(VKFIX2 zeRJ&HmT=iT4XznS91r82S0K=drc1SKvM867=5MTKLodJ$RZJO4d7c9+Zfst6;~{nR zZ|gVQSfw5xyl32~J;R6Z9ku?2X!WHxjNtRni7u}+zbJa1Ibl5eTI?R7tX&sYcINCd zLhD79zccI}hMoGM_tc{}tDmH6mW5MJERwL>enl;cZ~sbk+2&-bXSuu@DJoi}SogeG zmo=2Sj15cPUTB2s)>{Aj>Q%o-ma=!4T*`aK6NAqdUXMC0x?ieuQS>@{!Z`kV>|P<( zt~ZPw_2qJKN^wnvO8KfjbaLVo=}J(QM1cr%Db2VzErPpnEeRN}i%S)?g9vNTDOw6? zwaT;mmX2huq;fgAD~A#t$&k`OT7j0x4prdH*_aH)h?IJjNv${Y^6aVx@~Wq%P)D*= zp%k%ZUX(hj`>>gTae+y@&m2La#?58o#KNIX`c7FrciP!0CpRBEVUSguY3$RG7Y;ak z^BwoZl31UIa_@9D!m*)yxkVkRg@`C8MD{HJFSR3MKrf$Wb|@qFWGYHjVcJn zu0A>Ri~3LFwbjoW#`{kO8ZBS9`q0BW8*)^Aa``_3e;6N4ST*SN15Z3Q0h^i(-%+ks~ zWz1@;s>Z)QzixanW7YVpdmcXCsy9(!A7E`9(>3n+fu2mzO44@5hvAp7w#y7EXyXh| zK>QkdOiS`){kg&02K_HorO5N4I@fmv_EZMlR7EBa!zuaJ0h=5n>-P18a~}7!SDfgMi|>fys{0JI{fOWN8~85 zX;FZa!Y3r+QF6XbrM07*k#`>A(&fRepVTXw+#0}@wK$$D&}wsQ!nZu&dc2uJgv&!5 z9tb_f{M5RF`dE5O4z5%_b}i*P{W+R)HU-&>&XR9PA_qZ{0C1$TP~^(h(=#)(8hbwF zr8n#eCvUhnFR`ZCImtUO^jrROdE7Xu#gik|DsYbnj9%i;;zv)Oq9#fSI2mT|q<8^; z`Bq~^oL`$zhC3($Gs}%9v}2w{d8{)&O$^t35qdM$v047r@COTosIx+GG*$4 zB3(-YV{u&TgXAeF0<;LuSWL3+gTmoR#^>ZGg3*hR$`h-PrH)+v%=;f6dgYp0^!F_f zjLjPTa{sxN7tb19xb*Bd?+q3yU;G2fQ-3r5ee+}ERG`&Ew~68*-M3%3aPFy%uj4+R zFO6=Zzp_<{Q<~_Sm7R^$0D_9w7}Z3{hXpugP()iJ@8H>?4Im$6nm2R!CJ&uWb55oeE( z44FqX#<~8I=ji^uA~kK>;UzU_G(OapdUj);Zok{}Na4ft%*Q;dd7hrQUBiM!MqzkF zJ9zDN53Z?E$6vIcWOH8X21sjKj9RJ{-XPhWH|hOY(8OB)Ro{>8U)fY3b?Djn)nZt4 zKBY3>3xgX~)H4iCSELY?0!{dH>``A&3)QDQs^B^DJ!atd%6c%p_PEZ(r>vpxm3U(? zzt5)k_;mj}(fHIg3VdK0;FyN9ouN#!`n{Q(;!1+&E4|68B!ZAxiOBwQR&%5CT2&(G zXx#Q1i2=a~b}El#I+Jx!BO(ivLBtv?)1=JX($X}mD6yt^q+O>jeW%>r^<>M=dp$>^ zMEBjxbH84(?b*$v20xR#VCc0;{_}*l{8p_0e(dN0L=57w{=4;LbN#3ZiN*Ti5295w z!gJa zbuqAP`pR~9teLheVimszp&(5j{Dcno$Sb9dJN%V41mPWeYvZn>8CFkc(UV*<+UPG0%j@hM)QP z(^I=&^F8L9+Hc0(!e#S@jCf*g7&4;F`nSUzx6sZ8vW3R zB-2M41JEy&?xo8{=2W_A#o*33q7otm7x1nC3lk4Tduf=RdF1nua;HZUUmRAvUXH&E zP*#yc^TYb8N8Z}&%cFKESe_|Onl`y*siO~1-Zvs{leqd~m#5k`ZnUah;gn(9@(+y( zJWz0dyAJoxctFkG8(Oh!T5-ZpMsd^Jm9=w^yfAH5Xovp(2Gz43G^R3*=^T%(i2gaT z<{5zlLdJ1itLFt{w_J{i(l-Y^P&f{)%DZzZ&^&6=iwn;DFzKbD)87Y{&nQ^2`qKy1 znmdfu#>GF&?krvKm8RDvPUtC9*=}1x-A6>aG z@=&9;lw1%0t8+{NxwNLR>tR2Gwybl!?~Q{yMg+FTj^4NT^)g3S%v#j`j->^w)Wlzn zHzylW-j60PF~0w2o#00+Lti|AJN}5mMrjMMlCsD)pQ0z3eVCDbBKa_b=mK88;lnLg zBC)S~+0&v&^B2LgQD%oDSo$)H*%f`YRo#ka zfiNmc7HLz?JbAV5g?~qj{F9SUoDUuF zJ-TSskj9O+t{XBhMm#<-MWlSy>yh79hJKy1>*XPfo3_$kf9&B34{oBJ7>%<&6+2M@ zTIvIO6;n&CLauJ}th0J0k_OGcS1JXK^GH>!=ZZ(hvVE)MLji*^DA*fyd!>( z1RH0o0y^tS8OTPknhmqw2!*!9ZjHVmIuDQAEZ#kP=Y}SY>&LRsY&Iq3!g?@|$~~g_KQw1_GCR zgZ}_+rwX{;V{R?YYq_(`@a*!~lsKw|)hjEU*@As_xc2l+ z^UFH?hxmF!C!?c#r;(?UXSW_s@%xjTqLraP4V)dxQktLCdL*l)<;mQlr`8|q*uQyR z|ILeLZJT%J+c~@PAAjY}MF(d0y56SEkaA73bK2zHR<}vQ!6k!MbZ&U(^l39UZke`m zTubAZDVshy@ZR8w+d7E`joS_CH9%8x`sUPX*1K`XJ4xCm11;3;G!B&$ilZ*mR;X=Z zK=LZi!@VV_F4K|Xh8PRjp|i6O@-bly!-tQ69c*Jn#;o?GWP|aA_lbF`c$3E2$EN|Vc-W`wbZ;_a8J1O|MYE;C$2%ld13f;Pk_C$> zaCxj@eA{>&MTY^#Ama>J7Yyo&JUW0nSYKqX0w8XOD^yS7K~Q+m0xlJ;;1I~e-{eeh zrsg?iY%D9D3q2ZR1n+wucP9so-mzkO@ih^Ztfm@EHi`NMQk6Fw$G%a~9nj1rKnrH* zsi~;Jk2kB`5kirj>zM2$4ch4@s={U?ZrO=9{{@rU=^evCb2)31QJ-ik)yPXu=KKOA zLM;nyef-jE$JYb`509NVd6;L-MeY3KPoDl>t78nwA4g4$se9oo=wW=EbE|71f6!;% zU=CMOWiBbGVeJH8l_=q~^~VZHoQqqL{~+nmX`1WR%rCQiRC!9FD#sP6KrU70K?8t7 znMXIy(3Q2|6(S`~Kpgq}-o`ZrIAha1t=}~9-Gzl?TCJWkN1c3r$$jISt`7CBC1$o6 z0^42nRWsJM?u#zSTJe_Rj?}TR-K3Yc7I&pi$el-rrmh>KZf^0`iTD*GLerXKwQq?*a*sX2ObD&LZkjD1T+1pF*sT-1nq z14oS>`RNe8h1MR;uLy486Yi)<2|HYVO*dRo|25Q~Qly}4cj|H5ts8Z@?H;NjJ~gUo zJ&S|X{YmS&PTnu}1X(HHKbibW7S1cdn0?FB?SPtoWo3uAQT% zi%aTpSh|U@Tvc!Y#ghYDDGu7|61}XcYnLS!V?r)NS$zB@w~jch^~)Zrt?`H%`YsO& zY;x!=dY;X2`F9c8EFqj>dpX@p2v1Nr7uq)!np4J3f|5yhuYwY(xfTBP{1Z=zp)p=gfu|bv5|({xj+$ThztIi^jDZ#x>)D`iP-@@}W@w{=Sj^|Mc2K_-DwLd9aZx zD3cWw#PjyJG;7;AnL3gCSqHipY3?G(UHU8B29U|Qm=-W*_%Hm0b?kxV% zb9Kv>Ep$$hP@w$;s*A^s9Sk~CzO>Ngd54r?eFtpVC0r0FXBh|q;>gN{Fa&?2Bg{m^ zT?ccuhG(CB{BdKccFef{&nwGakblADmI0Y!w@b_wlw=Fc5IVKeB8j$*#EMgBp z;Bu-8{^8;y_?#X8xNr#!#|a6dDo)%%txZK@2VoFs4OHNoipm5nUBQ`3fdVeu^g~C> zZo&wqC5XxU_8mJ`CpW9Q+N#aOsV7h33eL91pAVnhV(4w##cod7yh8Nca`Iu}!?~`D zb3D`E6cx~L{t3U*LHR;7Mg4w+Fo4})Y}5_*zLgw3TTG9PmPbAq_ZOpg;-2MO=Z^O| z=dNZ$azNQ9T1ZIjxyyPSqkT8+(fP_#m^-Zm+=-qW9LXTxn+f|m`xpC!D(<-D7iE1n z*c%r4#YXcNieIfM>WgZasmSQyY2ZDN&ufAg`jtYlEc`n@-vR18TSu3*a9MKnPGx#2qZ2G#nxm<%-Gn4xnT^pFc5FzJBG?JP28i<+ z_WCC5;kA+Z`Ct+3UJDwu)KyzJM$bmMo((%2ku=(8jt>8c(LTrMo#FnG(e~U?ChXxe z7=5RoU^gMj4-byOZjX)z>@u4ItM&Br6Xo2-updxfiBOKc+Bl1H7NVnRFMl(PrV?Vs2^kB+gjNYki zEN!&4Ql6Vns|iWIvNdvAZAdCOV6TcjO=Q?xGwgIaY~I2AmSB&upqWAbNuL7TbhK7V z{&kCsv5gGw9IRW$Y?@;_bG>wb#3jx{fqj*VV>(3Bh6nB|582({{XreWpvQ; zJw5O_%uVKB9_C-{TVX7A0Tz8qheh^ErMEGdZehhe)(`#?7r~)DI-}Ilz+wAaXU?$j z!ZUjbFD4ZE0Mc5eJ#P)*rGdH1@N&eE z2Wc^cX$1rYxDRx+X~l*m)xrsRw)gYS^yS$*C=W)kZO>lGT4l-6vqf4dqbrv>8hg{- z-Wz-7s!ligdv`Phy&9X6iGcD2@8c1L{l*>MU4p^%?5nyfd?vkAdrG%5Jcq&trH_ z8sk&)%h{MuCf?^$3i?E$ z7J_v9I@SnN^C@f3w?{cB@@|&rIm!g(!u%i$9 zu*jm4GT8-%`4u(pS?OwXw8)-}WE$?>lGxL0$h9^bqLSvK(rfgH=awGlx8*G3UuZE1@0 z_OL0AZz3^T7_vFKnno6q9>af-gb;v3)^Tr*o)p8TRc*vzB1!q=09M zPgSz%&TZirC$&4g$*A$xKg)o_B|QVS{4RRIzos9%oN+A!Efq&*z#-F%d8EhNS@ZNLR@xq|P0XJjImh#G_1^UeKO-6oRr< zEw01!`77GqE{QOt$vg zoSF8TX7($4l^c=0mUAOU3VjcrfF0lyhrs_TDfj7#j#@8nXC?U_`|V2Q50VM$mCCX2 zq>|fVfjkYT10T(u5I>K0um<##cE|jYNLBL0=h0{QPaB9Ewg$C{9Pax=S2S-3wJGYJ zQ1K4?C_g;T8`x=}6*yvT#y!YG>493Sy68!mP_I65L1b-EKRIwO;(abgC|yUvj0l5* zTZmgffo=IBkn6S5*!5Zq0l8Y2Yat5Y$SBvd%rC(mU9spIJ_^A&n0z*SqQU8s(G!QO zi1P$|OPMG_)$Z=PV5a2yeV=<>d;9d6Q)+1cvIRZnHa7k-HQz6u^pAdMLiWVrrT{1y z7fbLCo1q+T1nB zKG8P)IC(`q=9G}ppthZ`i*Ds`)vTF0X2>&l!)S207B&~MHO5*FE>zE-13ETm-lJ>* z7qZTiy<;nfEle&y$=vP|F%i{H>m!c&9n@UeTo#n6s_(WX??IiDstr z^j+jU$+^)X(6pb5Lce+Hu@;TF(ZBbkSZ!><4wx(7AZJk@=g_Txs|vjIQeaCq|nVz=7}`I75~MvRCRiR~r5TqiZt%H0LgWPsHY*talUp@H!w# z^FC$IT@dbw_^GvzCHJza0lSNe|& zQ_QnNnR&RRnkXEZc|;xIKH(4KXxm~)u;_4yG04-OSD8c41RV}E{=hTuH#%w$@(Ju| zey)6N{2iaKg*062Z-m(qM#Sv1l~mD4&TjiIqbzU5{lIv(e=|n+vPMUX%@X5GDO5}D zv(DQNql~teVZq!COOEj*o;k=UBib`8n1w!96#kqf=~{14!UEX0cwSNxObuS1eD>yI zf7EHLAut>m*$^5+FGWvB!%}@0buCSg%0atQ9m#&vkL5(QiBf0i*P_IX<0GS{MJ4IgK@)@irYj&IaOE0z?7N4?fgw6eJ9#GEW0ia`T2rd-Orn}-v zLklnTrs7ONsxsEtKj`}!-{?3v|QbLKpI=7XYfDZa@}{|zn`qtk1`O-y$=lCPjAm#^skp*@u zFNm|?O+%b;zpoJ74Ns->EyjCS()q4vo^R9RPH_v@-3U5 zsRM0n- z?NK&h-PULcsnnYkb7tZk=FFv8XO@m-#V9B$XU@D&xeh%njvx)DA{IyCPQpCT=_Btq z&FNS6L07iD-x6L_en&Wr2{Y*j=FA6iWp7h!W<)VKb3@L2FZ+4TnGY%_KqHo?(#9-& ziRfJmSYY)nH5PbKc#MWs1N2JV-_S0-N{25foisPwIFfHTC5JLrotBO#i92i~8O@QO zPw`!}%5d8{$i1a}4a%`;lIRhO=1rB>O}lGfYR4C@TD{O4xEb2^Ue3fprbRQR_g8Ou z;%^pjShsG2$3t-63u|>asu9wag?dE`Zi18hpn{Ds&}_QOH_Tw9=_*&i!(>Vazme^O zC^gILu<{bBa551xjU1J?C=)EH3X&tm})V1SA z%)I!L`eNv=&{{3?=F6ZDcxJp`@X2h+^s&+F0YP@xtO2(on_F76T%9`8l5e8RHvS*fg0&rrQ_72a?ak1762gPaaD7LNVB!H?b zSmyxnY9I1CZ|7gk7A+#M*jA3zj3AA)+jyP$7t6yhBkQzJO{^t7cy8anabnE5_lnF? z=0;4NwG*D3y<+Cvdx=L%9NKdyS}QFH_b%oB2 zz1Z%%*Ic98E@EZa`dO+aPy52kSnd;8;{(=cFHQ!e2wcl;EIiB(@AFLZFTt2)7LHem zC30m<>qJX+traN6@WE&8CDy>O3Fr5T2(rg3g@= z6`LFEOxLfai5XVU9r_$DIr{Q?S{U7T^pVKIVV?MZaxT6PtAOAV9{?_&nw|R@c%`nP zAHE(io8se?WdZtYzN&yem)F`s*@#X8*12KVH*)WSvGOF87(H8LMMkq#M5Cp&bkB`* zGx*k-<1N}V$3|OlAP&{PnuNlhx2$T?DUbC+7Bb9;z6`G_xw{Q?Rt2QKjN@%Rl92@==^ZnBv zOV)bxQf7`a;STS`%ykKF3y%D7Ym9cr8foqrKrUmigq0V3pdUd`0{u+4>BnAaoJBvV zwAIctET5RGR1QR7ku`+Ds@5t?j-D+Vmoi#<|J|dpJNY(F?3vT8-7&`!%mfEuzT1Y` z9-HBWnK5FH&7W%H!ya27_^58t%;sM&5H3?^G^EIE3%puVma7hr9W zMq8d2#XTBp>}-#uRb%?SzyXGrF5(RZ# zZXv^)tT@R40Kc)Lps4I~#6BsH5M6Q;a}WgO-U}szpyenJ|33yn`-n9)A}ZC!fo5;B zzG!PkEzNATYV$oJmb#pUGSTA}J-d$E63I8&K ziN|_Bv*+83Ipus=7Uhe+iQ zPrMziBJNP%OM7pQ-BZ_|SB?$FThiYgOKYOBqn@K}txZ4= zqqhTfuq{QR?YiSu97;`+_IwYY;;;GC@9b^UkbUYU7v!M+pGT^Mknyf&AIo4o57N^=9Z&_ zerxUJ;gP?K^*M|tKm8}PD{}!=A3A~jM4z(vpY~ep86YS5#N^sC0kH~D_D{SQPSz%}7Phl!EmCh?W@uE6f#+c~ zQ$mihzm!>aq5G-51NK>$Ix5R+-d$4$7vyJ?2L^#t=`}S+5G|V{_Dr;Av!!&pwV$T+ zuVRfQf9W->z|wIdqv0{hvSd1Orj5MjkIXeI-$vGK%dqm6Y$V)o|8#?Re*n-aXNtde)BwL<2b1cz?Id;#THf(ZiP};Mm zb_HvN$C6)cU&LC8j0RoEE*JER2Yf_HG&@n!=?Ep+a6@}D^WY)1rWvzPm%awHKGybk zk>7}&T~casCV+gyZZj#uq~A!_(%Bv4_I3r}9dfwD$oZ9kYl}+;`XkOSt?0QPt)%m- z+tD|~k!cgh%!1aU7@>PQj<*uJru0$YeMU8m?OT9GkC;!lukjoKh`kJ*A|~6%FCbcME9C-_-o_|jPtdD zM9WR#&%=n*;`7FsXEuM{dYn0aA%703>&fHKPrAmR4&PAc_-0}LbBwK{;ep}rQG3I> zlI^QQOpPvA!c{TSHsIAE7T}}RVgGkvUElKiZ2LWOckn&diSOA%#qV#I-+Rzo8{cES z`2GN`liy>V=6oC@_TkzB>%A9U%P}6>vh_X18GTfhfcG3DLj;Aoi^%UY_;PDLff&X47f#|wz_417WD{mw9$bZ|{0=R#kaeqYA z2;Y=C2cK*5lV({yzHx|Ejq)|e=(FZ%=oc`J+fMYgO%tg%XQ;t@&>BSyf8T5kUD%?F%%aWHH zKp#iBm(N3tZ;ntR3h1KhOc9uV{>G^G4r(Xyf*N)uQHo0x1#Pq&X8qfRqq`2e37DHQz`kpQ? z7?;G?p&X;yX5rl#KYoSi5&BRoCl)^I-53uV`v_Pc%ee&R*~<^3N0QV!?6ZeGvOQc6 z67KmIChqf_+2bV&5DbWDDU4;N0$>?j`G`^+p#s)PX=kxptl#nMOa(MMjs7xxD;>yO z?m6)FHuX__?M-vE_&EIKEmXs~eAr*&4~Mw!2>bwZmtHdk`5^sYkerIPojuP%{sn5R zBA#d7eex4?)(7Z=Bb>-%sj2kR%Q$YKV<9c0L>!8Nxug>kZ)y+$wZ$n*q7MEBeAui48+=Q=kIdY^`m}6Yp*ZZ62m%KXp#M1fG=HIvS{pbGv z^5XXwoY=CoaK0#*GHYt#_Hlp}IYCYQx7c>4PrV$Z-;u?w?t+g?M`=@8|YHuo@eDy_)*O`r0Z zJ%|#xTn)fnt0Rx+Y(#$Fh2L)k%`W6P z{!ds9?C0S>NFNxlh4__ROGyq$eQ?(ET>Y5iab7g?Ln|q5tO{_G@yWzx=5?%fP~6j5 zii=)#jvj(mA1Lm;i<=fWcirp*<)=PS#e?#_kNMu(^4i;1UpsgXZJ;I$oijt7zHG|) zN8bqjIrm@TtH(|(KqJG!+E`sty))pKP-Ze|9N#0XDGeT6))eL^r-9r z2ef3GQ6&vN?`VFmJSidgU(`w;U>@8KvzR=%18zWS zCs%9ZUsi*b%)l z@&>=h8SpgleGA(f{t3)>NL!`+DJjd290RY=J^k`Ii}*!F>laPJZ_8gesm0D$ z8EJI$Hv-q?%sEiRa7yj~EDQ1ZP0o|eWlRtEyvd*UGkR+mndASBK398-!Qm4Odms3s zyJO|otwkV{gk(a zd9WX)SH6|Co@G|j5x4A!(cqSURr!Wh^32S2%$ZB?KR^}s)S!g$V$M$Wkml^A)%!Mr zX57LYZ{{^HUXj;;-*e^y%a#ZDJ3Lx9>Dpw zII^S(^kKdc$hLj~tb;Bn%h{xheAo@Pr6K78?am^<=m*X7qQ5eJfpY*_$X6zyZozs6 z$ChYS4e^ZT)-#6U_V4;ECvZY&6`8h_sBT@nhtj-Az4Za&Qk>Ioa;XC4N+hRWa;ZR! zMQtYM*#>w_O{`$V4XKH-&P1A+9LqDaZDP)xue=k%kDNJ3-7X}xnX?mq%-QqD*x0eT z8gg^&@vN8r*X{z<@PxV+cFYW3qGz()fE@@23!Apx=B)3%8&uVWG#RQ!291oyexR!& z-k0b1{JmcV)!}>IpVvfdIU`Gb+MgPLKvEsg;C%(ZzzhUIdsU9N{RgO>3)HqCUIz%e z`QiCgzOkO5gTgJC*(RqapmN220(mqBGX;drC%`phjsO38yYld=sv~~Sz4yIGSi65A>cpZ)WbCIm^tMnd78b0t&qi1zIN50BxC6 zd3Qkr;PpqX^R}kn^`5LATwF|?RqdDy7lY9Djf@73WwLj7uD7jy({Kp*Y?6gcJ~hto z$}rXx#FwWjJmzIU0a2HdwH#ZWgx5;OMhaf>70Y@Ws!fB!N z>tG~=Yf%fj*o(k>iFZ#h-Tcza%@~d*GDKIF#5DYB?#18}g~s-b9&NJ6sSj7O{krJU zCVQOvu$6`fSc?^@8>O6y{sO(-E$lCn~iS)*03yz6EnTm`29}ZYvFCiUPBrBuiSiTS91EIqfmhi z@j>1pF+Y}!48%J$v@hfyH@g8ND+Wd2sq$R=aN* z=)IvzQI!y0kd=j7c`yTg)cjXF{s-RjmB1kLzjP~$fQZhrXLFePelJXYzX?+_@$*xg z{XyQF(2;|h>WFYB!^d)$!s(dN!9mkfIqoVn47qF8(c!EF&Y|D%o!cCy%4w~0n55W= z9h-KihrZ!X&-IOoRJVNtF3p}yMlP)=-8b0rxxO*Kv3;X!9)Qx4s7`Wz!43RF*niiD z*LqULeLQd>TNdr`w6J{`XMrW$r^#Lj@W8$-_>VeQMtHK!WiV-rMP>o~mN4t}EP(4e zY|gsI)63ym>P=BD8_&XgT6hi9iYTFjVVu0S4w zS?35%%&~O=*uyTIUx?lBSK;QD9CnONGm~PTmAxuXKeY_}3S@VmZYkt=&&^=j-(&P& z!}s2J?#7e@g$oZAnIbhf8(W@;$(2ZfRYQfO~Rvq6pq22xzFuzDmNLep*ugd(QDGV6w=9e4=%rD&yJT=Sa8GACnpvD*V5gKOa3MVa_ z$x6NB`~oU6znr4y7igdTjiY8O2`q(9tVxMZmTG2((gCe>AKrx9sy0X-lYM6uS~(B zHxw$6Wp~nk6i{Ex{vz85O{}G^YYG*^ovu6ng@QfV)KU?jh5m;Apm4+iDcF6f$Y>39 zT~p{k-06A~3U)uKDQtBV27p4d{V71#k2boidqH$vQy4JZ>AI5=a^##;sR_0U8+9F( z(x~gu2-|zEKWvQ;>IronR7BU$(z*_9vA=QOW9LojzeeWfE}(u)Rnv31xz4WWZnOzD zMc9!P78>ZobGY4?bT$5I(DqT>Q;*g#fmuzl;@W%^;7JVQT)W8h^9urVL2}$El06eY(=en+(VGl=5X6=IX8dh;~wJ8$>DaM3|rev z!D3ovZ@1=6hMNCA-f;JHG9Syv8j%42^p!>_NA~a58}xhB~DA z7H^s0hE@#Uy&q;<3#>X?lo*zTZ7-PFn@=-K6ulf?9{y6}VEd2R%bn0Ju@A)(wZrx) zZ109B!%}L+#io5tc09DD6Lv6dX=wqTYruaLwF35Rfzb->m6s8M-xB6Qy~hHK)e4QL ztELMW*<-mHq>L#Rt!QZ^pe=cshXo@fQ0Ou;2`f5b;}^z88^S`k^jVF^D}m4A68}_C zI0YGy6L5=kx~#LL_263uMhoLPsqnLY$!|X%?Y;T!c%~nBKHKMDWJz2|u?O2*+Wni^ zJ_+!H!xPZH*TBOP2L8v;{vhESbi22c?elQ6*t^7!-J0N$Q**$Nh%N{}Pr&+A!wvq0 z*%xq@wL2OeG|HMSo__MPD!Uf&GqDpJgBdg_l{F9{gy_-m;KWK)j4tvfXlucG!g)Z* zNnVb;eU_=l_99)_n)Q283MzIfyIh1;$WVCHQ;$^vlcdAg6)n9{%U7;xz@;DEP?K91 z84ge!npOLKuR#^B`^)xMqGO(UW_3e@I;v{gZB=3Aztl&sG=36R*1Y;^W=rOSMKh+& z{RZBx|0SPy*0TZcZGHY9YSyb<6`YkV5Wvs-aQ|PtOHLc26Cn3isOUgut)Gw&TqZ^8 zt(sBRt;*83w#thk4|!JrE)Bqy7_pniM8dXOGAav|``urAcJX5Wi_FWf`E{A|{kj@| z%0rPHEMa_kqEq1E%oq>i*^~g8{ds6|Nc?@t_u7@NuJ(sUQ+BCs(UEFfjas)bdK=UW zp?P;e0v)`c#;9WilX{bmw5;$ACq|J?p_WZyS-Pwcd2k!?PrO&tDg7QsTD(p?Zcjvo zcob~Lt&Z)KTyUI|n3RS`+2(RwVTYRyzy8JQy1LcRKVPL5?Tq@U-5>h*X08kS)$G_& z6YcSqVkH#aY2K;=X$B86Oop3kmcaYM9Zlj@;*Y>XDq@C!0~{DPXG zP3CC-{e8Q^lR2RRPZRd%$ttHk!_JA-25j*J1nR*zbSdB=enUmNc?(u6MDCw3m@uP7 zl}ngbxxZsg!^*|c`>VFU_f)j)u@=!)>i(Kw`MyjL?1O8_#`$?|?QGdZI*hHz7Zo|7 zi%Yb&t-cZ!Gf*t#A|2}16epqr+&9W+5g-1@KYgi`BEi${RO7bbuC%{yQRAmy8#TP6 zI;eKp|EX0zWbGfPJKanMi1SmbeR1=%DT#CC2T$A#3-e2#T% zj$=M+jwQkk90wxOpxoblpDK9$#kK2Iv%6+|`T8@z+wj$FwLR*r?uT%<*Ql4GscKGi zqO4|&QN*cdQeqVGd?a|E&(*L8SFz&k+~{_+|Jt9EP(fF3m|C&eyW)zI1@;oa{zgtP z;PsN{aoA^G&1Ze0F%a*c2CgJLr}7@>4Z#vVAIj$icz!g&TM0YJdx>V7hZ9@eH^}En z*=#U{&qok`Hr~(Ya|gcHmA5X$iVnXS_6}3kIGkWLaHEh}9BL zuDy-1FTUeS#;m~02EOZpvDu8k!N-l7%(HG)na^{L4TCyuho0>gKrVg_yG?c>6@+ z@8AVCnqc-vATH6s0iS`>QN64^UasMS_3Ai*gNH(F{4R#m-r%&BoWgP?r(?7XKo@&^ z7oCqi6RO;ZOpiBkH#(Uf0(>_2_7SYCrx4#r!{6%~Ukk*^0iX49-2}@;5udh~>Vii! zKIBNqNe^pUKo>=lqli!2Oj?ro4lECdRk1#;tPlQrFiLyV1nl|{1r9yK@5Of|(bdJ+ z;Yxdbcmq8?v#{Iz74=d4QPMt6*UFFT%nrZ1X}^Z>V&Th~i{2+|@2bXM5Qj%Cm0qmX zGZqzJV(@71&B`v|htbO%V&vp@71F;_VomtFy}lnyep(kzJ_OzZ(xjB!Grk=-M+Ny}Wd zSLv}>H70O6nVjAj)y1nZ!N+(a+b@8o#48fjhuZELA1#Vk7y_QtX=@Gye7x3AeRwrB z_u%N!cx@oy|Ag(ZhB0z>f@h8#Na8Rx!k%~7D2SCEx6*wJNn`y8&r6B*Jb>T0)SIVh zgJM?2Z3VRLdO?FKBvZs20~oOwzZNOL0&Q+QGd&=M^Ei%xh5GpbzqS|jR-(=MOSZRX z`>E*n9fUu@^t&EMeSjw-{6z-Or-Z)dN-kL}6b_zoyOEFo z;PR~kQ3t_wHgJy;+-kGKEqRtnwUf_tAe(`F{wVJ~yaAe*a24Ngv(L?x6U zslYSi8c`qLUZsM))1KK@yErbVdV64%7>^mZ?~?mzb5NO4NO^4G_vOj=2Yes$X#MS! z5Om8(SmzU?hh#4FJ_bLS1+Z(fRXcu!)p$BH&=p`1iFUNh;^GckIJS|v9EpPeTePtS z>ErtieP}1(p`GTrk$J@!+CuAAM~il*(6V>dK=%7-Q(PMlq)iQ^{h6Z`*DhxJi?pS} z0C>sQwkFyIOXIAlGB_t(g8gA_x~NA_XHAyCVOwGc7adC0SYu#^SVctzB{I^A%9ty^ zYDLkDMLr7d6n%#Dd6PxI>YAe4i~Q^2HI;GS94mAc@Xo}RW$88=4e~PLE~t_=O==!@ zD=7diSSl#vMNgF6cO_XEa(gKJP$e*3%q5b@){uDj;N(k3UNUjn+=iL+8xrF$ntc6+ zTW?!4<+2OLrW+qhZwSVYy!)80b1$1y-ys^Ko;>)sKRbWirK8sQ3xfI!elq&(`_fNB zHh01gI3|?a8OO?s!byi;Z{@;O+1jm~jzlgk0^xNU@{$ipKimQij<_pBe>U!NEzDWq z#^RRy?r`TC{+5Sh8W!N5JGtd6&1$Fxu#Ic;ODNC<^_ch zw|-)7L(TGV*DLjJwrwb!e8r6FX}4ZArH#6!_SJ);OV!e@s^i9+_NrqyzF2+38*3-5 zU4PYV(arpsuRY>qmrG8v59^P9*O82emHDZWdEa_GRo&(?eeHO1aeaE6<6PX=_&9o*8T?p}cc?$I{V>Ew9W47r|9Y<9Q&ELTxaN(K zGW+>cbvvw+PG~;^`{r0iHFE9ua^E}%cwCk&_5njwKf>p?PX%4U!*e4hvD*5x*haFM*Fa9&1sn65OqfM@Du$ y)}mJ8MgeasvEXYla}dwxY`-(QQ0i`=U0WNq-de92;CW8XT@S20z}E-Z1^*X7!Mh;< diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index da91f4612..43c729221 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -388,11 +388,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - name: dart_mappable_builder - sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e - url: "https://pub.dev" - source: hosted - version: "4.2.3" + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.0" dart_style: dependency: transitive description: @@ -421,26 +420,26 @@ packages: dependency: "direct main" description: name: digit_components - sha256: "00642b6c6195d75987f43f8e6c32a417c0bb75b36e15cf9c5b130466d556de91" + sha256: "29b8d33cce933e971831d371f0d873e008a091e99d4192cecd738de357eaaed8" url: "https://pub.dev" source: hosted - version: "0.0.3+13" + version: "1.0.0" digit_data_model: dependency: "direct main" description: name: digit_data_model - sha256: ed3c4938b77777b764497fa7ac7be8ba34212d2925a853b5ccbb77f716dacb5e + sha256: "604be26d7f535027d1f16077b47b55a363c74a6040c34fb942ce82d58b9a54ec" url: "https://pub.dev" source: hosted - version: "0.0.0-dev.2" + version: "1.0.0" digit_scanner: dependency: "direct main" description: name: digit_scanner - sha256: "5af0318e92a1373677141bd174f64bbc126f9ad64f1d333774205ac684fe40dc" + sha256: a9959caad13c65165db5dc00cbe592e640e881d5e512599eac55591722b2da15 url: "https://pub.dev" source: hosted - version: "0.0.0-dev.5" + version: "1.0.0+1" dio: dependency: transitive description: @@ -1128,6 +1127,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" + remove_emoji_input_formatter: + dependency: transitive + description: + name: remove_emoji_input_formatter + sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" + url: "https://pub.dev" + source: hosted + version: "0.0.1+1" rxdart: dependency: transitive description: diff --git a/packages/referral_reconciliation/pubspec.yaml b/packages/referral_reconciliation/pubspec.yaml index 5d9902b21..f41f54119 100644 --- a/packages/referral_reconciliation/pubspec.yaml +++ b/packages/referral_reconciliation/pubspec.yaml @@ -1,7 +1,7 @@ name: referral_reconciliation description: "This module will enable the health facility supervisors to track referrals made by on-field health workers to different health facilities digitally via the Digit HCM app" -version: 0.0.0-dev.5 -homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/develop/packages/referral_reconciliation +version: 1.0.0 +homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/referral_reconciliation repository: https://github.com/egovernments/health-campaign-field-worker-app environment: @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^0.0.3+16 + digit_components: ^1.0.0 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 @@ -29,12 +29,12 @@ dependencies: uuid: ^3.0.6 recase: ^4.1.0 pluto_grid: ^7.0.1 - digit_scanner: ^0.0.0-dev.7 + digit_scanner: ^1.0.0+1 group_radio_button: ^1.3.0 flutter_keyboard_visibility: ^5.4.0 auto_route: ^7.8.4 collection: ^1.16.0 - digit_data_model: ^0.0.0-dev.3 + digit_data_model: ^1.0.0 stream_transform: ^2.1.0 dev_dependencies: @@ -52,10 +52,6 @@ dev_dependencies: auto_route_generator: ^7.3.2 flutter: - fonts: - - family: Roboto - fonts: - - asset: assets/fonts/Roboto/Roboto-Regular.ttf - - family: RobotoCondensed - fonts: - - asset: assets/fonts/Roboto/RobotoCondensed-Regular.ttf \ No newline at end of file + assets: + - assets/images/ + - assets/icons/svg/ \ No newline at end of file diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration_delivery/CHANGELOG.md index 9876e3910..b4a8da628 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration_delivery/CHANGELOG.md @@ -17,4 +17,10 @@ * Updated digit_scanner to latest version ## 0.0.0-dev.7 -* Fixed Duplicate routing issue \ No newline at end of file +* Fixed Duplicate routing issue + +## 1.0.0 +* Initial stable version + +## 1.0.0+1 +* Updated digit_showcase to latest version \ No newline at end of file diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 9f79c6023..c42ce4ed3 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -388,11 +388,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - name: dart_mappable_builder - sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e - url: "https://pub.dev" - source: hosted - version: "4.2.3" + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.0" dart_style: dependency: transitive description: @@ -421,34 +420,34 @@ packages: dependency: "direct main" description: name: digit_components - sha256: "00642b6c6195d75987f43f8e6c32a417c0bb75b36e15cf9c5b130466d556de91" + sha256: "29b8d33cce933e971831d371f0d873e008a091e99d4192cecd738de357eaaed8" url: "https://pub.dev" source: hosted - version: "0.0.3+13" + version: "1.0.0" digit_data_model: dependency: "direct main" description: name: digit_data_model - sha256: ed3c4938b77777b764497fa7ac7be8ba34212d2925a853b5ccbb77f716dacb5e + sha256: "604be26d7f535027d1f16077b47b55a363c74a6040c34fb942ce82d58b9a54ec" url: "https://pub.dev" source: hosted - version: "0.0.0-dev.2" + version: "1.0.0" digit_scanner: dependency: "direct main" description: name: digit_scanner - sha256: "5af0318e92a1373677141bd174f64bbc126f9ad64f1d333774205ac684fe40dc" + sha256: a9959caad13c65165db5dc00cbe592e640e881d5e512599eac55591722b2da15 url: "https://pub.dev" source: hosted - version: "0.0.0-dev.5" + version: "1.0.0+1" digit_showcase: dependency: "direct main" description: name: digit_showcase - sha256: "75380c35b3e819d04690336eb1682d085882f372daea7a26724470bbc36e3555" + sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" url: "https://pub.dev" source: hosted - version: "0.0.0-dev.1" + version: "1.0.0" dio: dependency: transitive description: @@ -1136,6 +1135,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" + remove_emoji_input_formatter: + dependency: transitive + description: + name: remove_emoji_input_formatter + sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" + url: "https://pub.dev" + source: hosted + version: "0.0.1+1" rxdart: dependency: transitive description: diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index 9a4693bf8..7a1311832 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -1,7 +1,8 @@ name: registration_delivery description: "Registration and Delivery for Health Campaigns" -version: 0.0.0-dev.7 -homepage: "https://github.com/egovernments/health-campaign-field-worker-app/tree/develop/packages/registration_delivery" +version: 1.0.0+1 +homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/registration_delivery +repository: https://github.com/egovernments/health-campaign-field-worker-app environment: sdk: '>=3.0.0 <4.0.0' @@ -10,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^0.0.3+16 + digit_components: ^1.0.0 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 @@ -28,12 +29,12 @@ dependencies: uuid: ^3.0.6 recase: ^4.1.0 pluto_grid: ^7.0.1 - digit_scanner: ^0.0.0-dev.7 + digit_scanner: ^1.0.0+1 gs1_barcode_parser: ^1.0.5 auto_route: ^7.8.4 - digit_data_model: ^0.0.0-dev.3 + digit_data_model: ^1.0.0 package_info_plus: ^5.0.1 - digit_showcase: ^0.0.0-dev.1 + digit_showcase: ^1.0.0 collection: ^1.16.0 flutter_keyboard_visibility: ^5.4.0 stream_transform: ^2.1.0 From 8447d70638d90b0bb4d292e13a06cc61f5848b2d Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Fri, 31 May 2024 15:45:05 +0530 Subject: [PATCH 002/241] moved service.dart and service_definition.dart bloc to data_model package moved downsync model and repo to hcm TODO: publish the versions --- .../project_beneficiaries_downsync.dart | 21 +- .../data/local_store/downsync}/downsync.dart | 3 +- .../lib/data/repositories/oplog.dart | 30 +++ .../data/repositories/remote/downsync.dart | 2 +- .../lib/models/data_model.init.dart | 32 +-- .../lib/models/downsync}/downsync.dart | 0 .../lib/models/downsync}/downsync.mapper.dart | 0 .../lib/pages/authenticated.dart | 25 +-- .../lib/pages/checklist/checklist.dart | 4 +- .../pages/checklist/checklist_preview.dart | 5 +- .../lib/pages/checklist/checklist_view.dart | 2 - .../pages/checklist/checklist_wrapper.dart | 2 - .../beneficiary/beneficaries_report.dart | 2 +- .../lib/utils/constants.dart | 37 ++-- .../lib/utils/i18_key_constants.dart | 203 +++++++++++++++++- .../lib/utils/utils.dart | 3 - .../pubspec.lock | 18 +- packages/digit_data_model/CHANGELOG.md | 5 +- .../lib/blocs/service/service.dart | 0 .../lib/blocs/service/service.freezed.dart | 0 .../service_definition.dart | 3 +- .../service_definition.freezed.dart | 0 packages/digit_data_model/lib/data_model.dart | 2 + .../digit_data_model/lib/utils/typedefs.dart | 9 +- packages/digit_data_model/pubspec.yaml | 4 +- packages/registration_delivery/CHANGELOG.md | 7 +- .../lib/data/repositories/oplog/oplog.dart | 28 --- .../beneficiary/beneficiary_wrapper.dart | 2 - .../pages/registration_delivery_wrapper.dart | 4 + .../lib/registration_delivery.dart | 5 - .../lib/registration_delivery.init.dart | 4 - .../lib/utils/typedefs.dart | 5 - packages/registration_delivery/pubspec.lock | 7 +- packages/registration_delivery/pubspec.yaml | 2 +- .../test/widgets/beneficiary_card_test.dart | 3 +- .../beneficiary_statistics_card.test.dart | 3 +- .../test/widgets/widget_app.dart | 21 ++ 37 files changed, 360 insertions(+), 143 deletions(-) rename {packages/registration_delivery/lib/data/repositories/local => apps/health_campaign_field_worker_app/lib/data/local_store/downsync}/downsync.dart (93%) create mode 100644 apps/health_campaign_field_worker_app/lib/data/repositories/oplog.dart rename {packages/registration_delivery => apps/health_campaign_field_worker_app}/lib/data/repositories/remote/downsync.dart (84%) rename {packages/registration_delivery/lib/models/entities => apps/health_campaign_field_worker_app/lib/models/downsync}/downsync.dart (100%) rename {packages/registration_delivery/lib/models/entities => apps/health_campaign_field_worker_app/lib/models/downsync}/downsync.mapper.dart (100%) rename packages/{registration_delivery => digit_data_model}/lib/blocs/service/service.dart (100%) rename packages/{registration_delivery => digit_data_model}/lib/blocs/service/service.freezed.dart (100%) rename packages/{registration_delivery => digit_data_model}/lib/blocs/service_definition/service_definition.dart (94%) rename packages/{registration_delivery => digit_data_model}/lib/blocs/service_definition/service_definition.freezed.dart (100%) rename {apps/health_campaign_field_worker_app => packages/registration_delivery}/test/widgets/beneficiary_card_test.dart (96%) rename {apps/health_campaign_field_worker_app => packages/registration_delivery}/test/widgets/beneficiary_statistics_card.test.dart (97%) create mode 100644 packages/registration_delivery/test/widgets/widget_app.dart diff --git a/apps/health_campaign_field_worker_app/lib/blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart b/apps/health_campaign_field_worker_app/lib/blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart index ecfd7ab76..757804b09 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart @@ -11,6 +11,7 @@ import '../../data/local_store/no_sql/schema/app_configuration.dart'; import '../../data/local_store/secure_store/secure_store.dart'; import '../../data/network_manager.dart'; import '../../data/repositories/remote/bandwidth_check.dart'; +import '../../models/downsync/downsync.dart'; import '../../utils/background_service.dart'; import '../../utils/environment_config.dart'; @@ -26,31 +27,31 @@ class BeneficiaryDownSyncBloc downSyncRemoteRepository; final LocalRepository downSyncLocalRepository; + final NetworkManager networkManager; + final BandwidthCheckRepository bandwidthCheckRepository; final LocalRepository - householdLocalRepository; + householdLocalRepository; final LocalRepository - householdMemberLocalRepository; + householdMemberLocalRepository; final LocalRepository - projectBeneficiaryLocalRepository; + projectBeneficiaryLocalRepository; final LocalRepository taskLocalRepository; final LocalRepository - sideEffectLocalRepository; + sideEffectLocalRepository; final LocalRepository - referralLocalRepository; - final NetworkManager networkManager; - final BandwidthCheckRepository bandwidthCheckRepository; + referralLocalRepository; BeneficiaryDownSyncBloc({ required this.individualLocalRepository, required this.downSyncRemoteRepository, required this.downSyncLocalRepository, + required this.networkManager, + required this.bandwidthCheckRepository, required this.householdLocalRepository, required this.householdMemberLocalRepository, required this.projectBeneficiaryLocalRepository, required this.taskLocalRepository, required this.sideEffectLocalRepository, required this.referralLocalRepository, - required this.networkManager, - required this.bandwidthCheckRepository, }) : super(const BeneficiaryDownSyncState._()) { on(_handleDownSyncOfBeneficiaries); on(_handleCheckTotalCount); @@ -202,9 +203,9 @@ class BeneficiaryDownSyncBloc // check if the API response is there or it failed if (downSyncResults.isNotEmpty) { await networkManager.writeToEntityDB(downSyncResults, [ + individualLocalRepository, householdLocalRepository, householdMemberLocalRepository, - individualLocalRepository, projectBeneficiaryLocalRepository, taskLocalRepository, sideEffectLocalRepository, diff --git a/packages/registration_delivery/lib/data/repositories/local/downsync.dart b/apps/health_campaign_field_worker_app/lib/data/local_store/downsync/downsync.dart similarity index 93% rename from packages/registration_delivery/lib/data/repositories/local/downsync.dart rename to apps/health_campaign_field_worker_app/lib/data/local_store/downsync/downsync.dart index f3934af9b..996064153 100644 --- a/packages/registration_delivery/lib/data/repositories/local/downsync.dart +++ b/apps/health_campaign_field_worker_app/lib/data/local_store/downsync/downsync.dart @@ -1,9 +1,8 @@ import 'dart:async'; import 'package:digit_data_model/data_model.dart'; -import 'package:digit_data_model/models/oplog/oplog_entry.dart'; import 'package:drift/drift.dart'; -import 'package:registration_delivery/models/entities/downsync.dart'; +import '../../../models/downsync/downsync.dart'; class DownsyncLocalRepository diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/oplog.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/oplog.dart new file mode 100644 index 000000000..bab747792 --- /dev/null +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/oplog.dart @@ -0,0 +1,30 @@ +import 'package:digit_data_model/data_model.dart'; + +import '../../models/downsync/downsync.dart'; + +class DownsyncOpLogManager extends OpLogManager { + DownsyncOpLogManager(super.isar); + + @override + DownsyncModel applyServerGeneratedIdToEntity( + DownsyncModel entity, + String serverGeneratedId, + int rowVersion, + ) => + throw UnimplementedError(); + + @override + String getClientReferenceId(DownsyncModel entity) => + throw UnimplementedError(); + + @override + String? getServerGeneratedId(DownsyncModel entity) => + throw UnimplementedError(); + + @override + int? getRowVersion(DownsyncModel entity) => throw UnimplementedError(); + + @override + bool? getNonRecoverableError(DownsyncModel entity) => + throw UnimplementedError(); +} diff --git a/packages/registration_delivery/lib/data/repositories/remote/downsync.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/remote/downsync.dart similarity index 84% rename from packages/registration_delivery/lib/data/repositories/remote/downsync.dart rename to apps/health_campaign_field_worker_app/lib/data/repositories/remote/downsync.dart index 464f420de..d80ac8145 100644 --- a/packages/registration_delivery/lib/data/repositories/remote/downsync.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/remote/downsync.dart @@ -1,7 +1,7 @@ // Generated using mason. Do not modify by hand import 'package:digit_data_model/data_model.dart'; -import 'package:registration_delivery/models/entities/downsync.dart'; +import '../../../models/downsync/downsync.dart'; class DownsyncRemoteRepository extends RemoteRepository { diff --git a/apps/health_campaign_field_worker_app/lib/models/data_model.init.dart b/apps/health_campaign_field_worker_app/lib/models/data_model.init.dart index 7de8d0a2d..c79ba0096 100644 --- a/apps/health_campaign_field_worker_app/lib/models/data_model.init.dart +++ b/apps/health_campaign_field_worker_app/lib/models/data_model.init.dart @@ -3,20 +3,24 @@ // ignore_for_file: type=lint // ignore_for_file: unused_element -import 'entities/additional_fields_type.dart' as p0; -import 'entities/mdms_master_enums.dart' as p1; -import 'entities/mdms_module_enums.dart' as p2; -import 'entities/roles.dart' as p3; -import 'entities/roles_type.dart' as p4; -import 'entities/scanner_type.dart' as p5; -import 'entities/status.dart' as p6; +import 'downsync/downsync.dart' as p0; +import 'entities/additional_fields_type.dart' as p1; +import 'entities/mdms_master_enums.dart' as p2; +import 'entities/mdms_module_enums.dart' as p3; +import 'entities/roles.dart' as p4; +import 'entities/roles_type.dart' as p5; +import 'entities/scanner_type.dart' as p6; +import 'entities/status.dart' as p7; void initializeMappers() { - p0.AdditionalFieldsTypeMapper.ensureInitialized(); - p1.MasterEnumsMapper.ensureInitialized(); - p2.ModuleEnumsMapper.ensureInitialized(); - p3.RolesMapper.ensureInitialized(); - p4.RolesTypeMapper.ensureInitialized(); - p5.ScannerTypeMapper.ensureInitialized(); - p6.StatusMapper.ensureInitialized(); + p0.DownsyncSearchModelMapper.ensureInitialized(); + p0.DownsyncModelMapper.ensureInitialized(); + p0.DownsyncAdditionalFieldsMapper.ensureInitialized(); + p1.AdditionalFieldsTypeMapper.ensureInitialized(); + p2.MasterEnumsMapper.ensureInitialized(); + p3.ModuleEnumsMapper.ensureInitialized(); + p4.RolesMapper.ensureInitialized(); + p5.RolesTypeMapper.ensureInitialized(); + p6.ScannerTypeMapper.ensureInitialized(); + p7.StatusMapper.ensureInitialized(); } diff --git a/packages/registration_delivery/lib/models/entities/downsync.dart b/apps/health_campaign_field_worker_app/lib/models/downsync/downsync.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/downsync.dart rename to apps/health_campaign_field_worker_app/lib/models/downsync/downsync.dart diff --git a/packages/registration_delivery/lib/models/entities/downsync.mapper.dart b/apps/health_campaign_field_worker_app/lib/models/downsync/downsync.mapper.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/downsync.mapper.dart rename to apps/health_campaign_field_worker_app/lib/models/downsync/downsync.mapper.dart diff --git a/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart b/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart index 0211d9b2d..3cb217497 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart @@ -15,6 +15,7 @@ import '../blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.da import '../blocs/sync/sync.dart'; import '../data/remote_client.dart'; import '../data/repositories/remote/bandwidth_check.dart'; +import '../models/downsync/downsync.dart'; import '../router/app_router.dart'; import '../router/authenticated_route_observer.dart'; import '../utils/environment_config.dart'; @@ -165,10 +166,6 @@ class AuthenticatedPageWrapper extends StatelessWidget { create: (_) => LocationBloc(location: Location()) ..add(const LoadLocationEvent()), ), - BlocProvider( - create: (_) => - HouseholdDetailsBloc(const HouseholdDetailsState()), - ), BlocProvider( create: (ctx) => BeneficiaryDownSyncBloc( bandwidthCheckRepository: BandwidthCheckRepository( @@ -176,15 +173,22 @@ class AuthenticatedPageWrapper extends StatelessWidget { bandwidthPath: envConfig.variables.checkBandwidthApiPath, ), + individualLocalRepository: ctx.read< + LocalRepository>(), + downSyncRemoteRepository: ctx.read< + RemoteRepository>(), + downSyncLocalRepository: ctx.read< + LocalRepository>(), + networkManager: ctx.read(), householdLocalRepository: ctx.read< LocalRepository>(), householdMemberLocalRepository: ctx.read< LocalRepository>(), - individualLocalRepository: ctx.read< - LocalRepository>(), projectBeneficiaryLocalRepository: ctx.read< LocalRepository>(), @@ -196,13 +200,6 @@ class AuthenticatedPageWrapper extends StatelessWidget { referralLocalRepository: ctx.read< LocalRepository>(), - downSyncRemoteRepository: ctx.read< - RemoteRepository>(), - downSyncLocalRepository: ctx.read< - LocalRepository>(), - networkManager: ctx.read(), ), ), BlocProvider( diff --git a/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist.dart b/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist.dart index 9a93b513d..bf54939a1 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist.dart @@ -3,10 +3,8 @@ import 'package:digit_components/widgets/digit_project_cell.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:health_campaign_field_worker_app/utils/constants.dart'; +import '../../utils/constants.dart'; import 'package:recase/recase.dart'; -import 'package:registration_delivery/blocs/service/service.dart'; -import 'package:registration_delivery/blocs/service_definition/service_definition.dart'; import '../../blocs/auth/auth.dart'; import '../../router/app_router.dart'; diff --git a/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_preview.dart b/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_preview.dart index 64df8774a..105936fc5 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_preview.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_preview.dart @@ -1,11 +1,10 @@ import 'package:digit_components/digit_components.dart'; import 'package:digit_components/widgets/atoms/digit_divider.dart'; +import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:health_campaign_field_worker_app/widgets/no_result_card/no_result_card.dart'; +import '../../widgets/no_result_card/no_result_card.dart'; import 'package:intl/intl.dart'; -import 'package:registration_delivery/blocs/service/service.dart'; -import 'package:registration_delivery/blocs/service_definition/service_definition.dart'; import '../../router/app_router.dart'; import '../../utils/constants.dart'; diff --git a/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_view.dart b/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_view.dart index 24f939a33..4c2443cf1 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_view.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_view.dart @@ -7,8 +7,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:group_radio_button/group_radio_button.dart'; -import 'package:registration_delivery/blocs/service/service.dart'; -import 'package:registration_delivery/blocs/service_definition/service_definition.dart'; import '../../models/data_model.dart'; import '../../models/entities/roles_type.dart'; diff --git a/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_wrapper.dart b/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_wrapper.dart index 169cc80dc..f3627037c 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_wrapper.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_wrapper.dart @@ -2,8 +2,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:digit_data_model/data_model.dart'; -import 'package:registration_delivery/blocs/service/service.dart'; -import 'package:registration_delivery/blocs/service_definition/service_definition.dart'; import '../../utils/extensions/extensions.dart'; import '../../widgets/boundary_selection_wrapper.dart'; diff --git a/apps/health_campaign_field_worker_app/lib/pages/reports/beneficiary/beneficaries_report.dart b/apps/health_campaign_field_worker_app/lib/pages/reports/beneficiary/beneficaries_report.dart index d5f47caea..4440e7d0e 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/reports/beneficiary/beneficaries_report.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/reports/beneficiary/beneficaries_report.dart @@ -7,11 +7,11 @@ import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:registration_delivery/models/entities/downsync.dart'; import '../../../blocs/app_initialization/app_initialization.dart'; import '../../../blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart'; import '../../../blocs/sync/sync.dart'; +import '../../../models/downsync/downsync.dart'; import '../../../router/app_router.dart'; import '../../../utils/i18_key_constants.dart' as i18; import '../../../utils/utils.dart'; diff --git a/apps/health_campaign_field_worker_app/lib/utils/constants.dart b/apps/health_campaign_field_worker_app/lib/utils/constants.dart index c30a79dd7..45df4d36d 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/constants.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/constants.dart @@ -17,6 +17,7 @@ import '../data/local_store/no_sql/schema/localization.dart'; import '../data/local_store/no_sql/schema/project_types.dart'; import '../data/local_store/no_sql/schema/row_versions.dart'; import '../data/local_store/no_sql/schema/service_registry.dart'; +import '../data/repositories/remote/downsync.dart'; import 'environment_config.dart'; import 'utils.dart'; @@ -82,23 +83,7 @@ class Constants { ProjectLocalRepository(sql, ProjectOpLogManager(isar)), ProjectStaffLocalRepository(sql, ProjectStaffOpLogManager(isar)), IndividualLocalRepository(sql, IndividualOpLogManager(isar)), - HouseholdMemberLocalRepository(sql, HouseholdMemberOpLogManager(isar)), - HouseholdLocalRepository(sql, HouseholdOpLogManager(isar)), - StockLocalRepository(sql, StockOpLogManager(isar)), - StockReconciliationLocalRepository( - sql, - StockReconciliationOpLogManager(isar), - ), - ProjectBeneficiaryLocalRepository( - sql, - ProjectBeneficiaryOpLogManager( - isar, - ), - ), ProjectFacilityLocalRepository(sql, ProjectFacilityOpLogManager(isar)), - TaskLocalRepository(sql, TaskOpLogManager(isar)), - SideEffectLocalRepository(sql, SideEffectOpLogManager(isar)), - ReferralLocalRepository(sql, ReferralOpLogManager(isar)), ServiceDefinitionLocalRepository( sql, ServiceDefinitionOpLogManager(isar), @@ -123,6 +108,22 @@ class Constants { sql, PgrServiceOpLogManager(isar), ), + HouseholdMemberLocalRepository(sql, HouseholdMemberOpLogManager(isar)), + HouseholdLocalRepository(sql, HouseholdOpLogManager(isar)), + ProjectBeneficiaryLocalRepository( + sql, + ProjectBeneficiaryOpLogManager( + isar, + ), + ), + TaskLocalRepository(sql, TaskOpLogManager(isar)), + SideEffectLocalRepository(sql, SideEffectOpLogManager(isar)), + ReferralLocalRepository(sql, ReferralOpLogManager(isar)), + StockLocalRepository(sql, StockOpLogManager(isar)), + StockReconciliationLocalRepository( + sql, + StockReconciliationOpLogManager(isar), + ), AttendanceLocalRepository( sql, AttendanceOpLogManager(isar), @@ -186,6 +187,8 @@ class Constants { ProjectFacilityRemoteRepository(dio, actionMap: actions), if (value == DataModelType.individual) IndividualRemoteRepository(dio, actionMap: actions), + if (value == DataModelType.downsync) + DownsyncRemoteRepository(dio, actionMap: actions), if (value == DataModelType.stock) StockRemoteRepository(dio, actionMap: actions), if (value == DataModelType.stockReconciliation) @@ -202,8 +205,6 @@ class Constants { SideEffectRemoteRepository(dio, actionMap: actions), if (value == DataModelType.referral) ReferralRemoteRepository(dio, actionMap: actions), - if (value == DataModelType.downsync) - DownsyncRemoteRepository(dio, actionMap: actions), if (value == DataModelType.attendanceRegister) AttendanceRemoteRepository(dio, actionMap: actions), if (value == DataModelType.attendance) diff --git a/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart b/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart index 44a385365..5bfd6a46a 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart @@ -1,7 +1,5 @@ library i18; -import 'package:registration_delivery/utils/i18_key_constants.dart'; - const common = Common(); const login = Login(); const forgotPassword = ForgotPassword(); @@ -831,3 +829,204 @@ class StockDetailsReturnedShowcase { return 'STOCK_DETAILS_RETURNED_SHOWCASE_COMMENT'; } } + +class HouseholdLocationShowcase { + const HouseholdLocationShowcase(); + + String get administrativeArea { + return 'HOUSEHOLD_LOCATION_SHOWCASE_ADMINISTRATIVE_AREA'; + } + + String get landmark { + return 'HOUSEHOLD_LOCATION_SHOWCASE_LANDMARK'; + } + + String get address { + return 'HOUSEHOLD_LOCATION_SHOWCASE_ADDRESS'; + } + + String get postalCode { + return 'HOUSEHOLD_LOCATION_SHOWCASE_POSTAL_CODE'; + } +} + +class HouseholdLocation { + const HouseholdLocation(); + + String get householdLocationLabelText => 'HOUSEHOLD_LOCATION_LABEL_TEXT'; + + String get administrationAreaFormLabel => 'ADMINISTRATION_AREA_FORM_LABEL'; + + String get administrationAreaRequiredValidation => + 'HOUSEHOLD_LOCATION_ADMINISTRATION_AREA_REQUIRED_VALIDATION'; + + String get householdAddressLine1LabelText => + 'HOUSEHOLD_ADDRESS_LINE_1_FORM_LABEL'; + + String get landmarkFormLabel => 'LANDMARK_FORM_LABEL'; + + String get householdAddressLine2LabelText => + 'HOUSEHOLD_ADDRESS_LINE_2_FORM_LABEL'; + + String get postalCodeFormLabel => 'POSTAL_CODE_FORM_LABEL'; + + String get actionLabel => 'HOUSEHOLD_LOCATION_ACTION_LABEL'; +} + +class SearchBeneficiary { + const SearchBeneficiary(); + + String get statisticsLabelText => 'BENEFICIARY_STATISTICS_LABEL_TEXT'; + + String get searchIndividualLabelText => + 'BENEFICIARY_STATISTICS_SEARCH_INDIVIDUAL_LABEL'; + + String get noOfHouseholdsRegistered => 'NO_OF_HOUSEHOLDS_REGISTERED'; + + String get noOfResourcesDelivered => 'NO_OF_RESOURCES_DELIVERED'; + + String get beneficiarySearchHintText => 'BENEFICIARY_SEARCH_HINT_TEXT'; + + String get beneficiaryIndividualSearchHintText => + 'BENEFICIARY_INDIVIDUAL_SEARCH_HINT_TEXT'; + + String get beneficiaryInfoDescription => 'BENEFICIARY_INFO_DESCRIPTION'; + + String get beneficiaryInfoTitle => 'BENEFICIARY_INFO_TITLE'; + + String get beneficiaryAddActionLabel => 'BENEFICIARY_ADD_ACTION_LABEL'; + + String get iconLabel => 'ICON_LABEL'; + + String get yearsAbbr => 'YEARS_ABBR'; + + String get monthsAbbr => 'MONTHS_ABBR'; + + String get proximityLabel => 'PROXIMITY_LABEL'; +} + +class IndividualDetails { + const IndividualDetails(); + + String get individualsDetailsLabelText => 'INDIVIDUAL_LABEL_TEXT'; + + String get nameLabelText => 'INDIVIDUAL_NAME_LABEL_TEXT'; + + String get checkboxLabelText => 'HEAD_OF_HOUSEHOLD_LABEL_TEXT'; + + String get idTypeLabelText => 'ID_TYPE_LABEL_TEXT'; + + String get idNumberLabelText => 'ID_NUMBER_LABEL_TEXT'; + + String get idNumberSuggestionText => 'ID_NUMBER_SUGGESTION_TEXT'; + + String get dobLabelText => 'DOB_LABEL_TEXT'; + + String get ageLabelText => 'AGE_LABEL_TEXT'; + + String get separatorLabelText => 'SEPARATOR_LABEL_TEXT'; + + String get genderLabelText => 'GENDER_LABEL_TEXT'; + + String get dobErrorText => 'DOB_ERROR_MESSAGE'; + + String get mobileNumberLabelText => 'MOBILE_NUMBER_LABEL_TEXT'; + + String get heightLabelText => 'HEIGHT_LABEL_TEXT'; + + String get submitButtonLabelText => 'INDIVIDUAL_DETAILS_SUBMIT'; + + String get mobileNumberInvalidFormatValidationMessage => + 'INDIVIDUAL_DETAILS_INVALID_MOBILE_NUMBER'; + + String get yearsHintText => 'YEARS_HINT_TEXT'; + String get monthsHintText => 'MONTHS_HINT_TEXT'; + + String get yearsErrorText => 'ERR_YEARS'; + + String get monthsErrorText => 'ERR_MONTHS'; + + String get yearsAndMonthsErrorText => 'ERR_YEARS_AND_MONTHS'; + + String get linkVoucherToIndividual => 'LINK_VOUCHER_TO_INDIVIDUAL'; +} + +class BeneficiaryDetails { + const BeneficiaryDetails(); + + String get beneficiarysDetailsLabelText => 'BENEFICIARY_DETAILS_LABEL_TEXT'; + String get beneficiarysDetailsEditIconLabelText => + 'BENEFICIARY_DETAILS_EDIT_ICON_LABEL_TEXT'; + String get beneficiarysDetailsEditIconLabel => + 'BENEFICIARY_DETAILS_EDIT_ICON_LABEL'; + String get beneficiarysDetailsDeleteIconLabel => + 'BENEFICIARY_DETAILS_DELETE_ICON_LABEL'; + String get resourcesTobeDelivered => 'RESOURCES_TO_BE_DELIVERED'; + String get resourcesTobeProvided => 'RESOURCES_TO_BE_PROVIDED'; + + String get beneficiaryAge => 'BENEFICIARY_AGE'; + String get ctaProceed => 'PROCEED'; + String get beneficiaryDoseNo => 'BENEFICIARY_DETAILS_DOSE_NO'; + String get beneficiaryDose => 'BENEFICIARY_DETAILS_DOSE'; + String get beneficiaryStatus => 'BENEFICIARY_DETAILS_STATUS'; + String get beneficiaryResources => 'BENEFICIARY_DETAILS_RESOURCES'; + String get beneficiaryQuantity => 'BENEFICIARY_DETAILS_QUANTITY'; + String get beneficiaryCompletedOn => 'BENEFICIARY_DETAILS_COMPLETED_ON'; + String get beneficiaryDeliveryStrategy => + 'BENEFICIARY_DETAILS_DELIVERY_STRATEGY'; + String get beneficiaryCycle => 'BENEFICIARY_DETAILS_CYCLE'; + String get currentCycleLabel => 'BENEFICIARY_DETAILS_CURRENT_CYCLE_LABEL'; + String get fromCurrentLocation => 'FROM_CURRENT_LOCATION'; + String get unableToScan => 'UNABLE_TO_SCAN'; + + String get scanValidResource => 'SCAN_VALID_RESOURCE'; + + String get scannedResourceCountMisMatch => 'SCANNED_RESOURCE_COUNT_MISMATCH'; + + String get resourceAlreadyScanned => 'RESOURCE_ALREADY_SCANNED'; + + String get scannerLabel => 'SCANNER_LABEL'; + + String get noOfResourceScanned => 'NO_OF_RESOURCE_SCANNED'; + + String get resourcesScanned => 'RESOURCES_SCANNED'; + + String get saveScannedResource => 'SAVE_SCANNED_RESOURCE'; + + String get flashOn => 'FLASH_ON'; + + String get flashOff => 'FLASH_OFF'; + + String get scannerDialogTitle => 'SCANNER_DIALOG_TITLE'; + + String get scannerDialogContent => 'SCANNER_DIALOG_CONTENT'; + + String get scannerDialogPrimaryAction => 'SCANNER_DIALOG_PRIMARY_ACTION'; + + String get scannerDialogSecondaryAction => 'SCANNER_DIALOG_SECONDARY_ACTION'; + String get beneficiaryHeader => 'BENEFICIARY_HEADER'; + String get deliveryHeader => 'DELIVERY_TABLE_HEADER'; + + String get proceedWithoutDownloading => 'PROCEED_WITHOUT_DOWNLOADING'; + String get unableToCheckDataInServer => 'FAILED_TO_CHECK_DATA_IN_SERVER'; + String get dataFound => 'DATA_FOUND'; + String get noDataFound => 'NO_DATA_FOUND'; + String get dataFoundContent => 'DATA_FOUND_CONTENT'; + String get noDataFoundContent => 'NO_DATA_FOUND_CONTENT'; + String get dataDownloadInProgress => 'DATA_DOWNLOAD_IN_PROGRESS'; + String get insufficientStorage => 'INSUFFICIENT_STORAGE_WARNING'; + String get downloadreport => 'DOWNLOAD_REPORT'; + String get boundary => 'BOUNDARY'; + String get status => 'STATUS'; + String get downloadedon => 'DOWNLOADED_ON'; + String get recordsdownload => 'RECORDS_DOWNLOAD'; + String get downloadcompleted => 'DOWNLOAD_COMPLETED'; + String get datadownloadreport => 'DATA_DOWNLOAD_REPORT'; + String get download => 'DOWNLOAD'; + String get partialdownloaded => 'PARTIAL_DOWNLOAD'; + String get downloadtime => 'DOWNLOAD_TIME'; + String get totalrecorddownload => 'TOTAL_RECORD_DOWNLOAD'; + String get insufficientStorageContent => + 'INSUFFICIENT_STORAGE_WARNING_CONTENT'; + String get recordCycle => 'BENEFICIARY_DETAILS_RECORD_CYCLE'; +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/lib/utils/utils.dart b/apps/health_campaign_field_worker_app/lib/utils/utils.dart index 6ac575e78..6e385b2cf 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/utils.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/utils.dart @@ -23,8 +23,6 @@ import 'package:isar/isar.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:referral_reconciliation/referral_reconciliation.dart' as referral_reconciliation_mappers; -import 'package:registration_delivery/registration_delivery.init.dart' - as registration_mappers; import '../blocs/app_initialization/app_initialization.dart'; import '../blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart'; @@ -381,7 +379,6 @@ getSelectedLanguage(AppInitialized state, int index) { initializeAllMappers() async { List initializations = [ Future(() => initializeMappers()), - Future(() => registration_mappers.initializeMappers()), Future(() => attendance_mappers.initializeMappers()), Future(() => referral_reconciliation_mappers.initializeMappers()), Future(() => inventory_mappers.initializeMappers()), diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index b886bc560..db374d578 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -484,17 +484,16 @@ packages: dependency: "direct main" description: name: digit_components - sha256: "29b8d33cce933e971831d371f0d873e008a091e99d4192cecd738de357eaaed8" + sha256: "8e5d120f2c16c0d8ffaf4d0de1218da5e492061d6bb9245214589fb1ea5ec09e" url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "0.0.3+16" digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "604be26d7f535027d1f16077b47b55a363c74a6040c34fb942ce82d58b9a54ec" - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_data_model" + relative: true + source: path version: "1.0.0" digit_firebase_services: dependency: "direct main" @@ -1517,10 +1516,9 @@ packages: registration_delivery: dependency: "direct main" description: - name: registration_delivery - sha256: "328c71e9a1163481eba1e0653cca23a4e50a32c44cccfcfba049849e87184114" - url: "https://pub.dev" - source: hosted + path: "../../packages/registration_delivery" + relative: true + source: path version: "1.0.0+1" remove_emoji_input_formatter: dependency: transitive diff --git a/packages/digit_data_model/CHANGELOG.md b/packages/digit_data_model/CHANGELOG.md index 4b0dee16a..b90afd229 100644 --- a/packages/digit_data_model/CHANGELOG.md +++ b/packages/digit_data_model/CHANGELOG.md @@ -9,4 +9,7 @@ * Supports boundary v2 and updated single entities to list for all search models ## 1.0.0 -* Initial stable release \ No newline at end of file +* Initial stable release + +## 1.0.1 +* Added Service and Service Definition Bloc \ No newline at end of file diff --git a/packages/registration_delivery/lib/blocs/service/service.dart b/packages/digit_data_model/lib/blocs/service/service.dart similarity index 100% rename from packages/registration_delivery/lib/blocs/service/service.dart rename to packages/digit_data_model/lib/blocs/service/service.dart diff --git a/packages/registration_delivery/lib/blocs/service/service.freezed.dart b/packages/digit_data_model/lib/blocs/service/service.freezed.dart similarity index 100% rename from packages/registration_delivery/lib/blocs/service/service.freezed.dart rename to packages/digit_data_model/lib/blocs/service/service.freezed.dart diff --git a/packages/registration_delivery/lib/blocs/service_definition/service_definition.dart b/packages/digit_data_model/lib/blocs/service_definition/service_definition.dart similarity index 94% rename from packages/registration_delivery/lib/blocs/service_definition/service_definition.dart rename to packages/digit_data_model/lib/blocs/service_definition/service_definition.dart index ba4a09ecc..357eba268 100644 --- a/packages/registration_delivery/lib/blocs/service_definition/service_definition.dart +++ b/packages/digit_data_model/lib/blocs/service_definition/service_definition.dart @@ -3,7 +3,6 @@ import 'dart:async'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:digit_data_model/data_model.dart'; -import 'package:registration_delivery/utils/utils.dart'; import '../../utils/typedefs.dart'; @@ -28,7 +27,7 @@ class ServiceDefinitionBloc ) async { final results = await serviceDefinitionDataRepository.search( ServiceDefinitionSearchModel( - tenantId: RegistrationDeliverySingleton().tenantId, + tenantId: DigitDataModelSingleton().tenantId, ), ); diff --git a/packages/registration_delivery/lib/blocs/service_definition/service_definition.freezed.dart b/packages/digit_data_model/lib/blocs/service_definition/service_definition.freezed.dart similarity index 100% rename from packages/registration_delivery/lib/blocs/service_definition/service_definition.freezed.dart rename to packages/digit_data_model/lib/blocs/service_definition/service_definition.freezed.dart diff --git a/packages/digit_data_model/lib/data_model.dart b/packages/digit_data_model/lib/data_model.dart index 41839822d..15e7ae7be 100644 --- a/packages/digit_data_model/lib/data_model.dart +++ b/packages/digit_data_model/lib/data_model.dart @@ -18,6 +18,8 @@ export 'blocs/product_variant/product_variant.dart'; export 'blocs/project_facility/project_facility.dart'; export 'blocs/user/user.dart'; export 'blocs/boundary/boundary.dart'; +export 'blocs/service/service.dart'; +export 'blocs/service_definition/service_definition.dart'; export 'data/data_repository.dart'; export 'data/local_store/no_sql/schema/oplog.dart' hide AdditionalId; export 'data/local_store/sql_store/sql_store.dart'; diff --git a/packages/digit_data_model/lib/utils/typedefs.dart b/packages/digit_data_model/lib/utils/typedefs.dart index 647169897..995fdfff0 100644 --- a/packages/digit_data_model/lib/utils/typedefs.dart +++ b/packages/digit_data_model/lib/utils/typedefs.dart @@ -6,6 +6,8 @@ import '../models/entities/individual.dart'; import '../models/entities/product_variant.dart'; import '../models/entities/project_facility.dart'; import '../models/entities/project_resource.dart'; +import '../models/entities/service.dart'; +import '../models/entities/service_definition.dart'; /// `FacilityDataRepository` is a type alias for a `DataRepository` that works with `FacilityModel` and `FacilitySearchModel`. typedef FacilityDataRepository @@ -29,4 +31,9 @@ typedef ProductVariantDataRepository /// `BoundaryDataRepository` is a type alias for a `DataRepository` that works with `BoundaryModel` and `BoundarySearchModel`. typedef BoundaryDataRepository - = DataRepository; \ No newline at end of file + = DataRepository; + +typedef ServiceDataRepository + = DataRepository; +typedef ServiceDefinitionDataRepository + = DataRepository; diff --git a/packages/digit_data_model/pubspec.yaml b/packages/digit_data_model/pubspec.yaml index 27f868d67..c39dc0639 100644 --- a/packages/digit_data_model/pubspec.yaml +++ b/packages/digit_data_model/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_data_model description: "The digit_data_model package is a comprehensive data modeling library for the project. It defines various classes, enums, and functions used throughout the project. The package is written in Dart and is primarily used in Flutter applications." -version: 1.0.0 +version: 1.0.1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_data_model repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -40,7 +40,7 @@ dev_dependencies: dart_mappable_builder: git: url: https://github.com/egovernments/health-campaign-field-worker-app/ - ref: develop + ref: master path: ./packages/dart_mappable_builder isar_generator: ^3.0.5 diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration_delivery/CHANGELOG.md index b4a8da628..46453edb0 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration_delivery/CHANGELOG.md @@ -23,4 +23,9 @@ * Initial stable version ## 1.0.0+1 -* Updated digit_showcase to latest version \ No newline at end of file +* Updated digit_showcase to latest version + +## 1.0.1 +* Moved service and service definition bloc to digit_data_model package +* Removed downsync model +* Added HouseholdDetailsBloc in registration_delivery_wrapper page \ No newline at end of file diff --git a/packages/registration_delivery/lib/data/repositories/oplog/oplog.dart b/packages/registration_delivery/lib/data/repositories/oplog/oplog.dart index dd2974e4b..ddb908e13 100644 --- a/packages/registration_delivery/lib/data/repositories/oplog/oplog.dart +++ b/packages/registration_delivery/lib/data/repositories/oplog/oplog.dart @@ -1,6 +1,5 @@ import 'package:digit_data_model/data_model.dart'; -import '../../../models/entities/downsync.dart'; import '../../../models/entities/household.dart'; import '../../../models/entities/household_member.dart'; import '../../../models/entities/project_beneficiary.dart'; @@ -163,31 +162,4 @@ class ReferralOpLogManager extends OpLogManager { @override bool? getNonRecoverableError(ReferralModel entity) => entity.nonRecoverableError; -} - -class DownsyncOpLogManager extends OpLogManager { - DownsyncOpLogManager(super.isar); - - @override - DownsyncModel applyServerGeneratedIdToEntity( - DownsyncModel entity, - String serverGeneratedId, - int rowVersion, - ) => - throw UnimplementedError(); - - @override - String getClientReferenceId(DownsyncModel entity) => - throw UnimplementedError(); - - @override - String? getServerGeneratedId(DownsyncModel entity) => - throw UnimplementedError(); - - @override - int? getRowVersion(DownsyncModel entity) => throw UnimplementedError(); - - @override - bool? getNonRecoverableError(DownsyncModel entity) => - throw UnimplementedError(); } \ No newline at end of file diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart index 89c207be9..5e8e49c48 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart @@ -8,8 +8,6 @@ import '../../blocs/delivery_intervention/deliver_intervention.dart'; import '../../blocs/household_overview/household_overview.dart'; import '../../blocs/referral_management/referral_management.dart'; import '../../blocs/search_households/search_households.dart'; -import '../../blocs/service/service.dart'; -import '../../blocs/service_definition/service_definition.dart'; import '../../blocs/side_effects/side_effects.dart'; import '../../models/entities/household.dart'; import '../../models/entities/household_member.dart'; diff --git a/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart b/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart index 183965d16..e9e8df413 100644 --- a/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart +++ b/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; +import '../blocs/household_details/household_details.dart'; import '../blocs/search_households/proximity_search.dart'; import '../blocs/search_households/search_bloc_common_wrapper.dart'; import '../blocs/search_households/search_by_head.dart'; @@ -150,6 +151,9 @@ class RegistrationDeliveryWrapperPage extends StatelessWidget { ); }, ), + BlocProvider( + create: (_) => HouseholdDetailsBloc(const HouseholdDetailsState()), + ), ], child: const AutoRouter(), ), diff --git a/packages/registration_delivery/lib/registration_delivery.dart b/packages/registration_delivery/lib/registration_delivery.dart index 401fdd0cd..f74b1a4d0 100644 --- a/packages/registration_delivery/lib/registration_delivery.dart +++ b/packages/registration_delivery/lib/registration_delivery.dart @@ -15,15 +15,12 @@ export 'blocs/search_households/search_bloc_common_wrapper.dart'; export 'blocs/search_households/search_by_head.dart'; export 'blocs/search_households/search_households.dart'; export 'blocs/search_households/tag_by_search.dart'; -export 'blocs/service/service.dart'; -export 'blocs/service_definition/service_definition.dart'; export 'blocs/side_effects/side_effects.dart'; export 'data/repositories/local/base/household_base.dart'; export 'data/repositories/local/base/household_member_base.dart'; export 'data/repositories/local/base/project_beneficiary_base.dart'; export 'data/repositories/local/base/side_effect_base.dart'; export 'data/repositories/local/base/task_base.dart'; -export 'data/repositories/local/downsync.dart'; export 'data/repositories/local/household.dart'; export 'data/repositories/local/household_member.dart'; export 'data/repositories/local/project_beneficiary.dart'; @@ -31,14 +28,12 @@ export 'data/repositories/local/referral.dart'; export 'data/repositories/local/side_effect.dart'; export 'data/repositories/local/task.dart'; export 'data/repositories/oplog/oplog.dart'; -export 'data/repositories/remote/downsync.dart'; export 'data/repositories/remote/household.dart'; export 'data/repositories/remote/household_member.dart'; export 'data/repositories/remote/project_beneficiary.dart'; export 'data/repositories/remote/referral.dart'; export 'data/repositories/remote/side_effect.dart'; export 'data/repositories/remote/task.dart'; -export 'models/entities/downsync.dart'; export 'models/entities/household.dart'; export 'models/entities/household_member.dart'; export 'models/entities/project_beneficiary.dart'; diff --git a/packages/registration_delivery/lib/registration_delivery.init.dart b/packages/registration_delivery/lib/registration_delivery.init.dart index c57c5bf62..3e481040e 100644 --- a/packages/registration_delivery/lib/registration_delivery.init.dart +++ b/packages/registration_delivery/lib/registration_delivery.init.dart @@ -5,7 +5,6 @@ import 'models/entities/additional_fields_type.dart' as p0; import 'models/entities/deliver_strategy_type.dart' as p1; -import 'models/entities/downsync.dart' as p2; import 'models/entities/household.dart' as p3; import 'models/entities/household_member.dart' as p4; import 'models/entities/project_beneficiary.dart' as p5; @@ -19,9 +18,6 @@ import 'models/entities/task_resource.dart' as p11; void initializeMappers() { p0.AdditionalFieldsTypeMapper.ensureInitialized(); p1.DeliverStrategyTypeMapper.ensureInitialized(); - p2.DownsyncSearchModelMapper.ensureInitialized(); - p2.DownsyncModelMapper.ensureInitialized(); - p2.DownsyncAdditionalFieldsMapper.ensureInitialized(); p3.HouseholdSearchModelMapper.ensureInitialized(); p3.HouseholdModelMapper.ensureInitialized(); p3.HouseholdAdditionalFieldsMapper.ensureInitialized(); diff --git a/packages/registration_delivery/lib/utils/typedefs.dart b/packages/registration_delivery/lib/utils/typedefs.dart index 50cdeabb9..40ae09722 100644 --- a/packages/registration_delivery/lib/utils/typedefs.dart +++ b/packages/registration_delivery/lib/utils/typedefs.dart @@ -21,8 +21,3 @@ typedef ProjectResourceDataRepository = DataRepository; typedef ProductVariantDataRepository = DataRepository; - -typedef ServiceDataRepository - = DataRepository; -typedef ServiceDefinitionDataRepository - = DataRepository; diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index c42ce4ed3..dc6be92b3 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -427,10 +427,9 @@ packages: digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "604be26d7f535027d1f16077b47b55a363c74a6040c34fb942ce82d58b9a54ec" - url: "https://pub.dev" - source: hosted + path: "../digit_data_model" + relative: true + source: path version: "1.0.0" digit_scanner: dependency: "direct main" diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index 7a1311832..711a33d54 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -1,6 +1,6 @@ name: registration_delivery description: "Registration and Delivery for Health Campaigns" -version: 1.0.0+1 +version: 1.0.1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/registration_delivery repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/apps/health_campaign_field_worker_app/test/widgets/beneficiary_card_test.dart b/packages/registration_delivery/test/widgets/beneficiary_card_test.dart similarity index 96% rename from apps/health_campaign_field_worker_app/test/widgets/beneficiary_card_test.dart rename to packages/registration_delivery/test/widgets/beneficiary_card_test.dart index 9171f1387..5623b21bf 100644 --- a/apps/health_campaign_field_worker_app/test/widgets/beneficiary_card_test.dart +++ b/packages/registration_delivery/test/widgets/beneficiary_card_test.dart @@ -1,9 +1,10 @@ import 'package:registration_delivery/widgets/beneficiary/beneficiary_card.dart'; -import '../widget_app.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'widget_app.dart'; + void main() { group( 'Beneficiary Card Test', diff --git a/apps/health_campaign_field_worker_app/test/widgets/beneficiary_statistics_card.test.dart b/packages/registration_delivery/test/widgets/beneficiary_statistics_card.test.dart similarity index 97% rename from apps/health_campaign_field_worker_app/test/widgets/beneficiary_statistics_card.test.dart rename to packages/registration_delivery/test/widgets/beneficiary_statistics_card.test.dart index 347ece1f4..bdcc08fe2 100644 --- a/apps/health_campaign_field_worker_app/test/widgets/beneficiary_statistics_card.test.dart +++ b/packages/registration_delivery/test/widgets/beneficiary_statistics_card.test.dart @@ -1,8 +1,9 @@ import 'package:registration_delivery/models/beneficiary_statistics/beneficiary_statistics_model.dart'; import 'package:registration_delivery/widgets/beneficiary/beneficiary_statistics_card.dart'; -import '../widget_app.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'widget_app.dart'; + void main() { group( 'BeneficiaryStatisticsCard Test', diff --git a/packages/registration_delivery/test/widgets/widget_app.dart b/packages/registration_delivery/test/widgets/widget_app.dart new file mode 100644 index 000000000..6ac7e56dd --- /dev/null +++ b/packages/registration_delivery/test/widgets/widget_app.dart @@ -0,0 +1,21 @@ +import 'package:flutter/material.dart'; + +class WidgetApp extends StatelessWidget { + final Widget child; + final List? localizationDelegates; + final NavigatorObserver? navigatorObserver; + + const WidgetApp({ + super.key, + required this.child, + this.localizationDelegates, + this.navigatorObserver, + }); + + @override + Widget build(BuildContext context) => MaterialApp( + localizationsDelegates: localizationDelegates, + navigatorObservers: [if (navigatorObserver != null) navigatorObserver!], + home: Scaffold(body: child), + ); +} From 44c89ed09f170e89804d060f2989841de07b7c46 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Fri, 31 May 2024 15:54:04 +0530 Subject: [PATCH 003/241] build runner update on registration_delivery.init.dart --- .../lib/registration_delivery.init.dart | 64 +++++++++---------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/packages/registration_delivery/lib/registration_delivery.init.dart b/packages/registration_delivery/lib/registration_delivery.init.dart index 3e481040e..f7b7ae3bc 100644 --- a/packages/registration_delivery/lib/registration_delivery.init.dart +++ b/packages/registration_delivery/lib/registration_delivery.init.dart @@ -5,40 +5,40 @@ import 'models/entities/additional_fields_type.dart' as p0; import 'models/entities/deliver_strategy_type.dart' as p1; -import 'models/entities/household.dart' as p3; -import 'models/entities/household_member.dart' as p4; -import 'models/entities/project_beneficiary.dart' as p5; -import 'models/entities/referral.dart' as p6; -import 'models/entities/reg_form_validations_type.dart' as p7; -import 'models/entities/side_effect.dart' as p8; -import 'models/entities/status.dart' as p9; -import 'models/entities/task.dart' as p10; -import 'models/entities/task_resource.dart' as p11; +import 'models/entities/household.dart' as p2; +import 'models/entities/household_member.dart' as p3; +import 'models/entities/project_beneficiary.dart' as p4; +import 'models/entities/referral.dart' as p5; +import 'models/entities/reg_form_validations_type.dart' as p6; +import 'models/entities/side_effect.dart' as p7; +import 'models/entities/status.dart' as p8; +import 'models/entities/task.dart' as p9; +import 'models/entities/task_resource.dart' as p10; void initializeMappers() { p0.AdditionalFieldsTypeMapper.ensureInitialized(); p1.DeliverStrategyTypeMapper.ensureInitialized(); - p3.HouseholdSearchModelMapper.ensureInitialized(); - p3.HouseholdModelMapper.ensureInitialized(); - p3.HouseholdAdditionalFieldsMapper.ensureInitialized(); - p4.HouseholdMemberSearchModelMapper.ensureInitialized(); - p4.HouseholdMemberModelMapper.ensureInitialized(); - p4.HouseholdMemberAdditionalFieldsMapper.ensureInitialized(); - p5.ProjectBeneficiarySearchModelMapper.ensureInitialized(); - p5.ProjectBeneficiaryModelMapper.ensureInitialized(); - p5.ProjectBeneficiaryAdditionalFieldsMapper.ensureInitialized(); - p6.ReferralSearchModelMapper.ensureInitialized(); - p6.ReferralModelMapper.ensureInitialized(); - p6.ReferralAdditionalFieldsMapper.ensureInitialized(); - p7.RegFormValidationsMapper.ensureInitialized(); - p8.SideEffectSearchModelMapper.ensureInitialized(); - p8.SideEffectModelMapper.ensureInitialized(); - p8.SideEffectAdditionalFieldsMapper.ensureInitialized(); - p9.StatusMapper.ensureInitialized(); - p10.TaskSearchModelMapper.ensureInitialized(); - p10.TaskModelMapper.ensureInitialized(); - p10.TaskAdditionalFieldsMapper.ensureInitialized(); - p11.TaskResourceSearchModelMapper.ensureInitialized(); - p11.TaskResourceModelMapper.ensureInitialized(); - p11.TaskResourceAdditionalFieldsMapper.ensureInitialized(); + p2.HouseholdSearchModelMapper.ensureInitialized(); + p2.HouseholdModelMapper.ensureInitialized(); + p2.HouseholdAdditionalFieldsMapper.ensureInitialized(); + p3.HouseholdMemberSearchModelMapper.ensureInitialized(); + p3.HouseholdMemberModelMapper.ensureInitialized(); + p3.HouseholdMemberAdditionalFieldsMapper.ensureInitialized(); + p4.ProjectBeneficiarySearchModelMapper.ensureInitialized(); + p4.ProjectBeneficiaryModelMapper.ensureInitialized(); + p4.ProjectBeneficiaryAdditionalFieldsMapper.ensureInitialized(); + p5.ReferralSearchModelMapper.ensureInitialized(); + p5.ReferralModelMapper.ensureInitialized(); + p5.ReferralAdditionalFieldsMapper.ensureInitialized(); + p6.RegFormValidationsMapper.ensureInitialized(); + p7.SideEffectSearchModelMapper.ensureInitialized(); + p7.SideEffectModelMapper.ensureInitialized(); + p7.SideEffectAdditionalFieldsMapper.ensureInitialized(); + p8.StatusMapper.ensureInitialized(); + p9.TaskSearchModelMapper.ensureInitialized(); + p9.TaskModelMapper.ensureInitialized(); + p9.TaskAdditionalFieldsMapper.ensureInitialized(); + p10.TaskResourceSearchModelMapper.ensureInitialized(); + p10.TaskResourceModelMapper.ensureInitialized(); + p10.TaskResourceAdditionalFieldsMapper.ensureInitialized(); } From 4dc59d93d31379685af0f275c74b2fd7ec02c03f Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Fri, 31 May 2024 16:04:14 +0530 Subject: [PATCH 004/241] added missing imports in network_manager_provider_wrapper.dart --- .../network_manager_provider_wrapper.dart | 205 +++++++++--------- .../pubspec.lock | 4 +- .../lib/registration_delivery.dart | 3 +- 3 files changed, 107 insertions(+), 105 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart b/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart index f598ff637..19286c031 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart +++ b/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart @@ -1,6 +1,10 @@ import 'dart:io'; import 'package:attendance_management/attendance_management.dart'; +import 'package:inventory_management/inventory_management.dart'; +import 'package:registration_delivery/registration_delivery.dart'; +import 'package:referral_reconciliation/referral_reconciliation.dart'; + import 'package:digit_components/theme/digit_theme.dart'; import 'package:digit_components/widgets/digit_card.dart'; import 'package:digit_components/widgets/digit_elevated_button.dart'; @@ -9,19 +13,16 @@ import 'package:digit_data_model/data_model.dart'; import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:inventory_management/inventory_management.dart'; import 'package:isar/isar.dart'; import 'package:provider/provider.dart'; -import 'package:referral_reconciliation/data/repositories/local/hf_referral.dart'; -import 'package:referral_reconciliation/data/repositories/oplog/oplog.dart'; -import 'package:referral_reconciliation/data/repositories/remote/hf_referral.dart'; -import 'package:referral_reconciliation/models/entities/hf_referral.dart'; -import 'package:registration_delivery/data/repositories/local/registration_delivery_address.dart'; -import 'package:registration_delivery/registration_delivery.dart'; import '../blocs/app_initialization/app_initialization.dart'; +import '../data/local_store/downsync/downsync.dart'; import '../data/network_manager.dart'; +import '../data/repositories/oplog.dart'; import '../data/repositories/remote/auth.dart'; +import '../data/repositories/remote/downsync.dart'; +import '../models/downsync/downsync.dart'; class NetworkManagerProviderWrapper extends StatelessWidget { final LocalSqlDataStore sql; @@ -136,6 +137,55 @@ class NetworkManagerProviderWrapper extends StatelessWidget { ProjectFacilityOpLogManager(isar), ), ), + RepositoryProvider>( + create: (_) => DownsyncLocalRepository( + sql, + DownsyncOpLogManager(isar), + ), + ), + RepositoryProvider< + LocalRepository>( + create: (_) => ServiceDefinitionLocalRepository( + sql, + ServiceDefinitionOpLogManager( + isar, + ), + ), + ), + RepositoryProvider>( + create: (_) => ServiceLocalRepository( + sql, + ServiceOpLogManager(isar), + ), + ), + RepositoryProvider< + LocalRepository>( + create: (_) => ProjectResourceLocalRepository( + sql, + ProjectResourceOpLogManager(isar), + ), + ), + RepositoryProvider< + LocalRepository>( + create: (_) => ProductVariantLocalRepository( + sql, + ProductVariantOpLogManager(isar), + ), + ), + RepositoryProvider>( + create: (_) => BoundaryLocalRepository( + sql, + BoundaryOpLogManager(isar), + ), + ), + RepositoryProvider< + LocalRepository>( + create: (_) => PgrServiceLocalRepository( + sql, + PgrServiceOpLogManager(isar), + ), + ), RepositoryProvider< LocalRepository>( create: (_) => HouseholdMemberLocalRepository( @@ -183,53 +233,10 @@ class NetworkManagerProviderWrapper extends StatelessWidget { SideEffectOpLogManager(isar), ), ), - RepositoryProvider>( - create: (_) => DownsyncLocalRepository( - sql, - DownsyncOpLogManager(isar), - ), - ), - RepositoryProvider< - LocalRepository>( - create: (_) => ServiceDefinitionLocalRepository( - sql, - ServiceDefinitionOpLogManager( - isar, - ), - ), - ), - RepositoryProvider>( - create: (_) => ServiceLocalRepository( - sql, - ServiceOpLogManager(isar), - ), - ), - RepositoryProvider< - LocalRepository>( - create: (_) => ProjectResourceLocalRepository( - sql, - ProjectResourceOpLogManager(isar), - ), - ), - RepositoryProvider< - LocalRepository>( - create: (_) => ProductVariantLocalRepository( - sql, - ProductVariantOpLogManager(isar), - ), - ), - RepositoryProvider>( - create: (_) => BoundaryLocalRepository( - sql, - BoundaryOpLogManager(isar), - ), - ), - RepositoryProvider< - LocalRepository>( - create: (_) => PgrServiceLocalRepository( + RepositoryProvider( + create: (_) => RegistrationDeliveryAddressRepo( sql, - PgrServiceOpLogManager(isar), + AddressOpLogManager(isar), ), ), RepositoryProvider< @@ -257,12 +264,6 @@ class NetworkManagerProviderWrapper extends StatelessWidget { StockReconciliationOpLogManager(isar), ), ), - RepositoryProvider( - create: (_) => RegistrationDeliveryAddressRepo( - sql, - AddressOpLogManager(isar), - ), - ), ]; } @@ -351,43 +352,6 @@ class NetworkManagerProviderWrapper extends StatelessWidget { create: (_) => ProjectResourceRemoteRepository(dio, actionMap: actions), ), - if (value == DataModelType.household) - RepositoryProvider< - RemoteRepository>( - create: (_) => HouseholdRemoteRepository( - dio, - actionMap: actions, - ), - ), - if (value == DataModelType.householdMember) - RepositoryProvider< - RemoteRepository>( - create: (_) => - HouseholdMemberRemoteRepository(dio, actionMap: actions), - ), - if (value == DataModelType.projectBeneficiary) - RepositoryProvider< - RemoteRepository>( - create: (_) => - ProjectBeneficiaryRemoteRepository(dio, actionMap: actions), - ), - if (value == DataModelType.task) - RepositoryProvider>( - create: (_) => TaskRemoteRepository( - dio, - actionMap: actions, - ), - ), - if (value == DataModelType.referral) - RepositoryProvider< - RemoteRepository>( - create: (_) => ReferralRemoteRepository( - dio, - actionMap: actions, - ), - ), if (value == DataModelType.service) RepositoryProvider< RemoteRepository>( @@ -436,18 +400,55 @@ class NetworkManagerProviderWrapper extends StatelessWidget { actionMap: actions, ), ), - if (value == DataModelType.sideEffect) + if (value == DataModelType.downsync) RepositoryProvider< - RemoteRepository>( - create: (_) => SideEffectRemoteRepository( + RemoteRepository>( + create: (_) => DownsyncRemoteRepository( dio, actionMap: actions, ), ), - if (value == DataModelType.downsync) + if (value == DataModelType.household) RepositoryProvider< - RemoteRepository>( - create: (_) => DownsyncRemoteRepository( + RemoteRepository>( + create: (_) => HouseholdRemoteRepository( + dio, + actionMap: actions, + ), + ), + if (value == DataModelType.householdMember) + RepositoryProvider< + RemoteRepository>( + create: (_) => + HouseholdMemberRemoteRepository(dio, actionMap: actions), + ), + if (value == DataModelType.projectBeneficiary) + RepositoryProvider< + RemoteRepository>( + create: (_) => + ProjectBeneficiaryRemoteRepository(dio, actionMap: actions), + ), + if (value == DataModelType.task) + RepositoryProvider>( + create: (_) => TaskRemoteRepository( + dio, + actionMap: actions, + ), + ), + if (value == DataModelType.referral) + RepositoryProvider< + RemoteRepository>( + create: (_) => ReferralRemoteRepository( + dio, + actionMap: actions, + ), + ), + if (value == DataModelType.sideEffect) + RepositoryProvider< + RemoteRepository>( + create: (_) => SideEffectRemoteRepository( dio, actionMap: actions, ), diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index db374d578..9d5ae854a 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -494,7 +494,7 @@ packages: path: "../../packages/digit_data_model" relative: true source: path - version: "1.0.0" + version: "1.0.1" digit_firebase_services: dependency: "direct main" description: @@ -1519,7 +1519,7 @@ packages: path: "../../packages/registration_delivery" relative: true source: path - version: "1.0.0+1" + version: "1.0.1" remove_emoji_input_formatter: dependency: transitive description: diff --git a/packages/registration_delivery/lib/registration_delivery.dart b/packages/registration_delivery/lib/registration_delivery.dart index f74b1a4d0..21ced98d1 100644 --- a/packages/registration_delivery/lib/registration_delivery.dart +++ b/packages/registration_delivery/lib/registration_delivery.dart @@ -16,6 +16,7 @@ export 'blocs/search_households/search_by_head.dart'; export 'blocs/search_households/search_households.dart'; export 'blocs/search_households/tag_by_search.dart'; export 'blocs/side_effects/side_effects.dart'; +export 'data/repositories/local/registration_delivery_address.dart'; export 'data/repositories/local/base/household_base.dart'; export 'data/repositories/local/base/household_member_base.dart'; export 'data/repositories/local/base/project_beneficiary_base.dart'; @@ -67,4 +68,4 @@ export 'pages/beneficiary_registration/household_location.dart'; export 'pages/beneficiary_registration/individual_details.dart'; export 'pages/reason_for_deletion.dart'; export 'pages/registration_delivery_wrapper.dart'; -export 'pages/search_beneficiary.dart'; \ No newline at end of file +export 'pages/search_beneficiary.dart'; From 4785ef504800f84f9dc5933d2482a03888ccccb9 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Mon, 3 Jun 2024 12:57:46 +0530 Subject: [PATCH 005/241] updated scripts for syncdown file, entitymapper file, router file --- .../pubspec.lock | 9 +- tools/attendance_package_imports.dart | 308 ++++++- tools/inventory_package_imports.dart | 498 +++++++++-- tools/referral_reconciliation_imports.dart | 439 ++++++++-- tools/registration_delivery_imports.dart | 784 +++++++++++++++++- 5 files changed, 1884 insertions(+), 154 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 9d5ae854a..270fe8c2f 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -1516,10 +1516,11 @@ packages: registration_delivery: dependency: "direct main" description: - path: "../../packages/registration_delivery" - relative: true - source: path - version: "1.0.1" + name: registration_delivery + sha256: "328c71e9a1163481eba1e0653cca23a4e50a32c44cccfcfba049849e87184114" + url: "https://pub.dev" + source: hosted + version: "1.0.0+1" remove_emoji_input_formatter: dependency: transitive description: diff --git a/tools/attendance_package_imports.dart b/tools/attendance_package_imports.dart index 895723cc4..255803e19 100644 --- a/tools/attendance_package_imports.dart +++ b/tools/attendance_package_imports.dart @@ -26,6 +26,19 @@ void main() { '$appRoot/widgets/network_manager_provider_wrapper.dart'; var constantsFilePath = '$appRoot/utils/constants.dart'; var utilsFilePath = '$appRoot/utils/utils.dart'; + var routerFilePath = '$appRoot/router/app_router.dart'; + var entityMapperFilePath = + '$appRoot/data/local_store/no_sql/schema/entity_mapper.dart'; + var syncDownFilePath = '$appRoot/data/repositories/sync/sync_down.dart'; + + // Update the sync_down.dart file + _updateSyncDownFile(syncDownFilePath); + + // Add attendance routes and import to the router file + _addAttendanceRoutesAndImportToRouterFile(routerFilePath); + + // Add new case statements to the entity_mapper.dart file + _updateEntityMapperFile(entityMapperFilePath); _createLocalizationDelegatesFile(localizationDelegatesFilePath); @@ -59,6 +72,295 @@ void main() { Process.run('dart', ['format', utilsFilePath]).then((ProcessResult results) { print(results.stdout); }); + + // Run dart format on the app_router.dart file + Process.run('dart', ['format', routerFilePath]).then((ProcessResult results) { + print(results.stdout); + }); + + // Run dart format on the entity_mapper.dart file + Process.run('dart', ['format', entityMapperFilePath]) + .then((ProcessResult results) { + print(results.stdout); + }); + + // Run dart format on the sync_down.dart file + Process.run('dart', ['format', syncDownFilePath]) + .then((ProcessResult results) { + print(results.stdout); + }); +} + +void _updateSyncDownFile(String syncDownFilePath) { + // Define the import statement and the new case statements + var importStatement = + "import 'package:attendance_management/attendance_management.dart';"; + var newCases = ''' + case DataModelType.attendance: + responseEntities = await remote.search(AttendanceLogSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId!) + .whereNotNull() + .toList(), + tenantId: envConfig.variables.tenantId, + )); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) return; + final entity = element.entity as AttendanceLogModel; + final responseEntity = responseEntities + .whereType() + .firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId.toString(), + serverGeneratedId: serverGeneratedId, + nonRecoverableError: entity.nonRecoverableError, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = + await local.opLogManager.updateSyncDownRetry( + entity.clientReferenceId.toString(), + ); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + break; +'''; + + // Check if the sync_down file exists + var syncDownFile = File(syncDownFilePath); + + if (!syncDownFile.existsSync()) { + print('Error: Sync Down file does not exist at path: $syncDownFilePath'); + return; + } + + // Read the sync_down file + var syncDownFileContent = syncDownFile.readAsStringSync(); + + // Check if the import statement already exists and add it if not + if (!syncDownFileContent.contains(importStatement)) { + syncDownFileContent = importStatement + '\n' + syncDownFileContent; + print('The import statement was added to sync_down.dart.'); + } else { + print('The import statement already exists in sync_down.dart.'); + } + + // Insert the new case statements + if (!syncDownFileContent.contains('DataModelType.attendance')) { + // Find the position to insert the new cases within the switch statement + var switchIndex = + syncDownFileContent.indexOf('switch (typeGroupedEntity.key) {'); + if (switchIndex != -1) { + var caseInsertionIndex = + syncDownFileContent.indexOf('default:', switchIndex); + if (caseInsertionIndex != -1) { + syncDownFileContent = + syncDownFileContent.substring(0, caseInsertionIndex) + + newCases + + '\n' + + syncDownFileContent.substring(caseInsertionIndex); + print('The new cases were added to sync_down.dart.'); + + // Write the updated content back to the file + syncDownFile.writeAsStringSync(syncDownFileContent); + } else { + print( + 'Error: Could not find the default case in the switch statement in sync_down.dart.'); + return; + } + } else { + print('Error: Could not find the switch statement in sync_down.dart.'); + return; + } + } else { + print('The new cases already exist in sync_down.dart.'); + } +} + +void _updateEntityMapperFile(String entityMapperFilePath) { + // Define the import statement and new case statements + var importStatement = + "import 'package:attendance_management/attendance_management.dart';"; + var newCases = ''' + case "attendance": + final entity = AttendanceLogModelMapper.fromJson(entityString); + return entity; +'''; + + // Check if the entity_mapper file exists + var entityMapperFile = File(entityMapperFilePath); + + if (!entityMapperFile.existsSync()) { + print( + 'Error: Entity Mapper file does not exist at path: $entityMapperFilePath'); + return; + } + + // Read the entity_mapper file + var entityMapperFileContent = entityMapperFile.readAsStringSync(); + + // Check if the import statement already exists and add it if not + if (!entityMapperFileContent.contains(importStatement)) { + entityMapperFileContent = importStatement + '\n' + entityMapperFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + + // Check if the new cases already exist in the file + if (!entityMapperFileContent.contains('case "attendance":')) { + // Find the position to insert the new cases (before the default case) + var caseInsertionIndex = entityMapperFileContent.indexOf('default:'); + if (caseInsertionIndex != -1) { + entityMapperFileContent = + entityMapperFileContent.substring(0, caseInsertionIndex) + + newCases + + '\n' + + entityMapperFileContent.substring(caseInsertionIndex); + print('The new cases were added.'); + + // Write the updated content back to the file + entityMapperFile.writeAsStringSync(entityMapperFileContent); + } else { + print('Error: Could not find the insertion point.'); + return; + } + } else { + print('The new cases already exist.'); + } +} + +void _addAttendanceRoutesAndImportToRouterFile(String routerFilePath) { + // Define the attendance route lines + var attendanceRoutes = ''' + // Attendance Route + AutoRoute( + page: ManageAttendanceRoute.page, + path: 'manage-attendance', + ), + AutoRoute( + page: AttendanceDateSessionSelectionRoute.page, + path: 'attendance-date-session-selection', + ), + AutoRoute( + page: MarkAttendanceRoute.page, + path: 'mark-attendance', + ), + AutoRoute( + page: AttendanceAcknowledgementRoute.page, + path: 'attendance-acknowledgement', + ), + '''; + + // Define the import statement + var importStatement1 = + "import 'package:attendance_management/router/attendance_router.gm.dart';"; + // Define the import statement + var importStatement2 = + "import 'package:attendance_management/router/attendance_router.dart';"; + + // Check if the router file exists + var routerFile = File(routerFilePath); + + if (!routerFile.existsSync()) { + print('Error: Router file does not exist at path: $routerFilePath'); + return; + } + + // Read the router file + var routerFileContent = routerFile.readAsStringSync(); + + // Normalize the whitespace in the file content + var normalizedFileContent = routerFileContent.replaceAll(RegExp(r'\s'), ''); + + // Check if the import statement already exists + if (!normalizedFileContent + .contains(importStatement1.replaceAll(RegExp(r'\s'), ''))) { + // Add the import statement at the beginning of the file + routerFileContent = importStatement1 + '\n' + routerFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + + // Check if the import statement already exists + if (!normalizedFileContent + .contains(importStatement2.replaceAll(RegExp(r'\s'), ''))) { + // Add the import statement at the beginning of the file + routerFileContent = importStatement2 + '\n' + routerFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + // Check if the attendanceRoute module already exists + if (!routerFileContent.contains('AttendanceRoute')) { + // Find the position to insert the module + var moduleInsertionIndex = routerFileContent.indexOf('@AutoRouterConfig('); + if (moduleInsertionIndex != -1) { + var endOfModulesIndex = + routerFileContent.indexOf(']', moduleInsertionIndex); + if (endOfModulesIndex != -1) { + var modulesEndIndex = + routerFileContent.lastIndexOf(']', endOfModulesIndex); + routerFileContent = routerFileContent.substring(0, modulesEndIndex) + + ' AttendanceRoute,' + + routerFileContent.substring(modulesEndIndex); + print('The attendanceRoute module was added.'); + } else { + print('Error: Could not find the end of the modules list.'); + return; + } + } else { + print('Error: Could not find @AutoRouterConfig annotation.'); + return; + } + } else { + print('The AttendanceRoute module already exists.'); + } + + // Check if the attendance routes already exist in the file + if (!normalizedFileContent + .contains(attendanceRoutes.replaceAll(RegExp(r'\s'), ''))) { + // Find the position to insert the routes + var insertionIndex = routerFileContent + .indexOf('// INFO : Need to add Router of package Here'); + if (insertionIndex != -1) { + routerFileContent = routerFileContent.substring(0, insertionIndex) + + '// INFO : Need to add Router of package Here\n' + + attendanceRoutes + + routerFileContent.substring(insertionIndex + + '// INFO : Need to add Router of package Here'.length); + print('The attendance routes were added.'); + + // Write the updated content back to the file + routerFile.writeAsStringSync(routerFileContent); + } else { + print('Error: Could not find the insertion point.'); + return; + } + } else { + print('The attendance routes already exist.'); + } } void _addAttendanceMapperToUtilsFile({required String utilsFilePath}) { @@ -98,12 +400,12 @@ void _addAttendanceMapperToUtilsFile({required String utilsFilePath}) { } if (!utilsFileContent.contains(attendanceInitializationStatement)) { - // Add the inventory related initialization statement to the file + // Add the attendance related initialization statement to the file var initializeAllMappersIndex = utilsFileContent.indexOf('initializeAllMappers() async {'); if (initializeAllMappersIndex == -1) { print( - 'Error: Could not find a place to insert the inventory initialization statement.'); + 'Error: Could not find a place to insert the attendance initialization statement.'); return; } var endOfInitializeAllMappers = initializeAllMappersIndex + @@ -114,7 +416,7 @@ void _addAttendanceMapperToUtilsFile({required String utilsFilePath}) { '\n ' + attendanceInitializationStatement + utilsFileContent.substring(endOfInitializeAllMappers - 1); - print('Inventory initialization statement added to utils.dart'); + print('Attendance initialization statement added to utils.dart'); } // Write the updated content back to the utils.dart file diff --git a/tools/inventory_package_imports.dart b/tools/inventory_package_imports.dart index b69054fd4..170db4b19 100644 --- a/tools/inventory_package_imports.dart +++ b/tools/inventory_package_imports.dart @@ -23,18 +23,41 @@ void main() { '$appRoot/widgets/network_manager_provider_wrapper.dart'; var constantsFilePath = '$appRoot/utils/constants.dart'; var utilsFilePath = '$appRoot/utils/utils.dart'; + var routerFilePath = '$appRoot/router/app_router.dart'; + var entityMapperFilePath = + '$appRoot/data/local_store/no_sql/schema/entity_mapper.dart'; + var syncDownFilePath = '$appRoot/data/repositories/sync/sync_down.dart'; + // add the localization delegates for the inventory package _createLocalizationDelegatesFile(localizationDelegatesFilePath); + // Add the inventory repositories to the network manager provider wrapper _addRepoToNetworkManagerProviderWrapper( networkManagerProviderWrapperFilePath: networkManagerProviderWrapperFilePath, ); + // Add the inventory constants to the constants file _addInventoryConstantsToConstantsFile(constantsFilePath: constantsFilePath); + // Add the inventory mappers to the utils file _addInventoryMapperToUtilsFile(utilsFilePath: utilsFilePath); + // Add inventory routes and import to the router file + _addInventoryRoutesAndImportToRouterFile(routerFilePath); + + // Add new case statements to the entity_mapper.dart file + _updateEntityMapperFile(entityMapperFilePath); + + // Update the sync_down.dart file + _updateSyncDownFile(syncDownFilePath); + + // Run dart format on the updated file + Process.run('dart', ['format', syncDownFilePath]) + .then((ProcessResult results) { + print(results.stdout); + }); + // Run dart format on the hcm_oplog.dart file Process.run('dart', ['format', localizationDelegatesFilePath]) .then((ProcessResult results) { @@ -57,6 +80,361 @@ void main() { Process.run('dart', ['format', utilsFilePath]).then((ProcessResult results) { print(results.stdout); }); + + // Run dart format on the app_router.dart file + Process.run('dart', ['format', routerFilePath]).then((ProcessResult results) { + print(results.stdout); + }); + + // Run dart format on the entity_mapper.dart file + Process.run('dart', ['format', entityMapperFilePath]) + .then((ProcessResult results) { + print(results.stdout); + }); +} + +void _updateSyncDownFile(String syncDownFilePath) { + // Define the import statement and the new case statements + var importStatement = + "import 'package:inventory_management/inventory_management.dart';"; + var newCases = ''' + case DataModelType.stock: + responseEntities = await remote.search( + StockSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + ), + ); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) return; + final entity = element.entity as StockModel; + final responseEntity = + responseEntities.whereType().firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId!, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; + + case DataModelType.stockReconciliation: + responseEntities = + await remote.search(StockReconciliationSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + )); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) return; + final entity = element.entity as StockReconciliationModel; + final responseEntity = responseEntities + .whereType() + .firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; +'''; + + // Check if the sync_down file exists + var syncDownFile = File(syncDownFilePath); + + if (!syncDownFile.existsSync()) { + print('Error: Sync Down file does not exist at path: $syncDownFilePath'); + return; + } + + // Read the sync_down file + var syncDownFileContent = syncDownFile.readAsStringSync(); + + // Check if the import statement already exists and add it if not + if (!syncDownFileContent.contains(importStatement)) { + syncDownFileContent = importStatement + '\n' + syncDownFileContent; + print('The import statement was added to sync_down.dart.'); + } else { + print('The import statement already exists in sync_down.dart.'); + } + + // Insert the new case statements + if (!syncDownFileContent.contains('DataModelType.stock') && + !syncDownFileContent.contains('DataModelType.stockReconciliation')) { + // Find the position to insert the new cases within the switch statement + var switchIndex = + syncDownFileContent.indexOf('switch (typeGroupedEntity.key) {'); + if (switchIndex != -1) { + var caseInsertionIndex = + syncDownFileContent.indexOf('default:', switchIndex); + if (caseInsertionIndex != -1) { + syncDownFileContent = + syncDownFileContent.substring(0, caseInsertionIndex) + + newCases + + '\n' + + syncDownFileContent.substring(caseInsertionIndex); + print('The new cases were added to sync_down.dart.'); + + // Write the updated content back to the file + syncDownFile.writeAsStringSync(syncDownFileContent); + } else { + print( + 'Error: Could not find the default case in the switch statement in sync_down.dart.'); + return; + } + } else { + print('Error: Could not find the switch statement in sync_down.dart.'); + return; + } + } else { + print('The new cases already exist in sync_down.dart.'); + } +} + +void _updateEntityMapperFile(String entityMapperFilePath) { + // Define the import statement and new case statements + var importStatement = + "import 'package:inventory_management/inventory_management.dart';"; + var newCases = ''' + case "stock": + final entity = StockModelMapper.fromJson(entityString); + return entity; + + case "stockReconciliation": + final entity = StockReconciliationModelMapper.fromJson(entityString); + return entity; +'''; + + // Check if the entity_mapper file exists + var entityMapperFile = File(entityMapperFilePath); + + if (!entityMapperFile.existsSync()) { + print( + 'Error: Entity Mapper file does not exist at path: $entityMapperFilePath'); + return; + } + + // Read the entity_mapper file + var entityMapperFileContent = entityMapperFile.readAsStringSync(); + + // Check if the import statement already exists and add it if not + if (!entityMapperFileContent.contains(importStatement)) { + entityMapperFileContent = importStatement + '\n' + entityMapperFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + + // Check if the new cases already exist in the file + if (!entityMapperFileContent.contains('case "stock":') && + !entityMapperFileContent.contains('case "stockReconciliation":')) { + // Find the position to insert the new cases (before the default case) + var caseInsertionIndex = entityMapperFileContent.indexOf('default:'); + if (caseInsertionIndex != -1) { + entityMapperFileContent = + entityMapperFileContent.substring(0, caseInsertionIndex) + + newCases + + '\n' + + entityMapperFileContent.substring(caseInsertionIndex); + print('The new cases were added.'); + + // Write the updated content back to the file + entityMapperFile.writeAsStringSync(entityMapperFileContent); + } else { + print('Error: Could not find the insertion point.'); + return; + } + } else { + print('The new cases already exist.'); + } +} + +void _addInventoryRoutesAndImportToRouterFile(String routerFilePath) { + // Define the inventory route lines + var inventoryRoutes = ''' + // Inventory Route + AutoRoute( + page: ManageStocksRoute.page, + path: 'manage-stocks', + ), + AutoRoute( + page: RecordStockWrapperRoute.page, + path: 'record-stock', + children: [ + AutoRoute( + page: WarehouseDetailsRoute.page, + path: 'warehouse-details', + initial: true, + ), + AutoRoute(page: StockDetailsRoute.page, path: 'details'), + ], + ), + AutoRoute( + page: InventoryFacilitySelectionRoute.page, + path: 'inventory-select-facilities', + ), + AutoRoute( + page: StockReconciliationRoute.page, path: 'stock-reconciliation', + ), + AutoRoute( + page: InventoryReportSelectionRoute.page, + path: 'inventory-report-selection', + ), + AutoRoute( + page: InventoryReportDetailsRoute.page, + path: 'inventory-report-details', + ), + AutoRoute( + page: InventoryAcknowledgementRoute.page, + path: 'inventory-acknowledgement', + ), + '''; + + // Define the import statement + var importStatement1 = + "import 'package:inventory_management/router/inventory_router.gm.dart';"; + // Define the import statement + var importStatement2 = + "import 'package:inventory_management/router/inventory_router.dart';"; + + // Check if the router file exists + var routerFile = File(routerFilePath); + + if (!routerFile.existsSync()) { + print('Error: Router file does not exist at path: $routerFilePath'); + return; + } + + // Read the router file + var routerFileContent = routerFile.readAsStringSync(); + + // Normalize the whitespace in the file content + var normalizedFileContent = routerFileContent.replaceAll(RegExp(r'\s'), ''); + + // Check if the import statement already exists + if (!normalizedFileContent + .contains(importStatement1.replaceAll(RegExp(r'\s'), ''))) { + // Add the import statement at the beginning of the file + routerFileContent = importStatement1 + '\n' + routerFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + + // Check if the import statement already exists + if (!normalizedFileContent + .contains(importStatement2.replaceAll(RegExp(r'\s'), ''))) { + // Add the import statement at the beginning of the file + routerFileContent = importStatement2 + '\n' + routerFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + // Check if the InventoryRoute module already exists + if (!routerFileContent.contains('InventoryRoute')) { + // Find the position to insert the module + var moduleInsertionIndex = routerFileContent.indexOf('@AutoRouterConfig('); + if (moduleInsertionIndex != -1) { + var endOfModulesIndex = + routerFileContent.indexOf(']', moduleInsertionIndex); + if (endOfModulesIndex != -1) { + var modulesEndIndex = + routerFileContent.lastIndexOf(']', endOfModulesIndex); + routerFileContent = routerFileContent.substring(0, modulesEndIndex) + + ' InventoryRoute,' + + routerFileContent.substring(modulesEndIndex); + print('The InventoryRoute module was added.'); + } else { + print('Error: Could not find the end of the modules list.'); + return; + } + } else { + print('Error: Could not find @AutoRouterConfig annotation.'); + return; + } + } else { + print('The InventoryRoute module already exists.'); + } + + // Check if the inventory routes already exist in the file + if (!normalizedFileContent + .contains(inventoryRoutes.replaceAll(RegExp(r'\s'), ''))) { + // Find the position to insert the routes + var insertionIndex = routerFileContent + .indexOf('// INFO : Need to add Router of package Here'); + if (insertionIndex != -1) { + routerFileContent = routerFileContent.substring(0, insertionIndex) + + '// INFO : Need to add Router of package Here\n' + + inventoryRoutes + + routerFileContent.substring(insertionIndex + + '// INFO : Need to add Router of package Here'.length); + print('The inventory routes were added.'); + + // Write the updated content back to the file + routerFile.writeAsStringSync(routerFileContent); + } else { + print('Error: Could not find the insertion point.'); + return; + } + } else { + print('The inventory routes already exist.'); + } } void _addInventoryMapperToUtilsFile({required String utilsFilePath}) { @@ -128,22 +506,32 @@ void _addInventoryConstantsToConstantsFile( // Define the inventory configuration var inventoryConfiguration = ''' -// inventory related configuration -InventorySingleton().setTenantId(envConfig.variables.tenantId); + InventorySingleton().setTenantId(tenantId: envConfig.variables.tenantId); '''; - // Define the inventory related lines - var inventoryLocalRepositories = [ - 'StockLocalRepository(sql, StockOpLogManager(isar)),', - 'StockReconciliationLocalRepository(sql,StockReconciliationOpLogManager(isar),),', + var localRepositories = [ + "StockLocalRepository(sql, StockOpLogManager(isar)),", + "StockReconciliationLocalRepository(sql,StockReconciliationOpLogManager(isar),),", ]; - var inventoryRemoteRepositories = [ - 'if (value == DataModelType.stock) StockRemoteRepository(dio, actionMap: actions),', - 'if (value == DataModelType.stockReconciliation) StockReconciliationRemoteRepository(dio, actionMap: actions),', + + // Define the remote repositories of inventory + var remoteRepositoriesOfInventory = [ + ''' + if (value == DataModelType.stock) + StockRemoteRepository(dio, actionMap: actions), + if (value == DataModelType.stockReconciliation) + StockReconciliationRemoteRepository(dio, actionMap: actions), + ''' ]; - // Read the constants.dart file + // Check if the constants.dart file exists var constantsFile = File(constantsFilePath); + if (!constantsFile.existsSync()) { + print('Error: The constants.dart file does not exist.'); + return; + } + + // Read the constants.dart file var constantsFileContent = constantsFile.readAsStringSync(); // Normalize the whitespace in the file content and the inventory configuration @@ -156,12 +544,8 @@ InventorySingleton().setTenantId(envConfig.variables.tenantId); for (var importStatement in importStatements) { if (!normalizedFileContent .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { - // Add the import statement after the last import - constantsFileContent = constantsFileContent.substring( - 0, constantsFileContent.indexOf(';') + 1) + - '\n' + - importStatement + - constantsFileContent.substring(constantsFileContent.indexOf(';') + 1); + // Add the import statement at the top of the file + constantsFileContent = importStatement + '\n' + constantsFileContent; print('The import statement was added: $importStatement'); } } @@ -169,44 +553,58 @@ InventorySingleton().setTenantId(envConfig.variables.tenantId); // Check if the inventory configuration already exists in the file // If not, add it to the file if (!normalizedFileContent.contains(normalizedInventoryConfiguration)) { - constantsFileContent = '$inventoryConfiguration\n$constantsFileContent'; - print('The inventory configuration was added.'); - } - - // Check if the inventory local repositories already exist in the file - for (var inventoryLocalRepository in inventoryLocalRepositories) { - var normalizedinventoryLocalRepository = - inventoryLocalRepository.replaceAll(RegExp(r'\s'), ''); - - if (!normalizedFileContent.contains(normalizedinventoryLocalRepository)) { - // Add the inventory local repository to the file - constantsFileContent = constantsFileContent.replaceFirst( - '];', ' $inventoryLocalRepository\n];'); - print( - 'The inventory local repository was added: $inventoryLocalRepository'); - } else { - print('The inventory local repository already exists.'); + // Find the setInitialDataOfPackages method and add the inventory configuration inside it + var setInitialDataOfPackagesIndex = + constantsFileContent.indexOf('void setInitialDataOfPackages() {'); + if (setInitialDataOfPackagesIndex != -1) { + var endOfSetInitialDataOfPackages = setInitialDataOfPackagesIndex + + constantsFileContent + .substring(setInitialDataOfPackagesIndex) + .indexOf('}') + + 1; + constantsFileContent = + constantsFileContent.substring(0, endOfSetInitialDataOfPackages - 1) + + '\n $inventoryConfiguration' + + constantsFileContent.substring(endOfSetInitialDataOfPackages - 1); + print('The inventory configuration was added.'); } } - // Check if the inventory remote repositories already exist in the file - for (var inventoryRemoteRepository in inventoryRemoteRepositories) { - var normalizedInventoryRemoteRepository = - inventoryRemoteRepository.replaceAll(RegExp(r'\s'), ''); + // Add the local and remote repositories to the getLocalRepositories and getRemoteRepositories methods + var getLocalRepositoriesIndex = + constantsFileContent.indexOf('getLocalRepositories('); + if (getLocalRepositoriesIndex != -1) { + var endOfGetLocalRepositories = getLocalRepositoriesIndex + + constantsFileContent.substring(getLocalRepositoriesIndex).indexOf(']') + + 1; + constantsFileContent = + constantsFileContent.substring(0, endOfGetLocalRepositories - 1) + + '\n' + + localRepositories.join('\n') + + constantsFileContent.substring(endOfGetLocalRepositories - 1); + print('The local repositories were added.'); + } - if (!normalizedFileContent.contains(normalizedInventoryRemoteRepository)) { - // Add the inventory remote repository to the _getRemoteRepositories method - var replacementString = constantsFileContent.contains(']);') - ? ' $inventoryRemoteRepository,\n]);' - : ' $inventoryRemoteRepository\n]);'; - constantsFileContent = - constantsFileContent.replaceFirst(']);', replacementString); - print( - 'The inventory remote repository was added: $inventoryRemoteRepository'); - } else { - print('The inventory remote repository already exists.'); - } + var getRemoteRepositoriesIndex = + constantsFileContent.indexOf('getRemoteRepositories('); + if (getRemoteRepositoriesIndex != -1) { + var endOfGetRemoteRepositories = getRemoteRepositoriesIndex + + constantsFileContent + .substring(getRemoteRepositoriesIndex) + .indexOf('addAll(') + + 'addAll('.length; + var endOfAddAll = constantsFileContent + .substring(endOfGetRemoteRepositories) + .indexOf(']') + + endOfGetRemoteRepositories; + constantsFileContent = constantsFileContent.substring(0, endOfAddAll) + + remoteRepositoriesOfInventory.join('\n') + + constantsFileContent.substring(endOfAddAll); + print('The remote repositories were added.'); } + + // Write the updated content back to the constants.dart file + constantsFile.writeAsStringSync(constantsFileContent); } void _addRepoToNetworkManagerProviderWrapper( @@ -214,8 +612,6 @@ void _addRepoToNetworkManagerProviderWrapper( // Define the import statements and repository providers var importStatements = [ "import 'package:inventory_management/inventory_management.dart';", - "import '../data/repositories/remote/stock.dart';", - "import '../data/repositories/remote/stock_reconciliation.dart';" ]; var localRepositories = [ "RepositoryProvider<\n LocalRepository>(\n create: (_) => StockLocalRepository(\n sql,\n StockOpLogManager(isar),\n ),\n ),", diff --git a/tools/referral_reconciliation_imports.dart b/tools/referral_reconciliation_imports.dart index 30b76dc5c..2521565f0 100644 --- a/tools/referral_reconciliation_imports.dart +++ b/tools/referral_reconciliation_imports.dart @@ -26,18 +26,35 @@ void main() { '$appRoot/widgets/network_manager_provider_wrapper.dart'; var constantsFilePath = '$appRoot/utils/constants.dart'; var utilsFilePath = '$appRoot/utils/utils.dart'; + var routerFilePath = '$appRoot/router/app_router.dart'; + var entityMapperFilePath = + '$appRoot/data/local_store/no_sql/schema/entity_mapper.dart'; + var syncDownFilePath = '$appRoot/data/repositories/sync/sync_down.dart'; + // Add referral_recon routes and import to the router file + _addReferralReconRoutesAndImportToRouterFile(routerFilePath); + + // Add new case statements to the entity_mapper.dart file + _updateEntityMapperFile(entityMapperFilePath); + + // update the localization_delegates.dart file _createLocalizationDelegatesFile(localizationDelegatesFilePath); + // Add referral_recon related import and initialization to the network_manager_provider_wrapper.dart file _addRepoToNetworkManagerProviderWrapper( networkManagerProviderWrapperFilePath: networkManagerProviderWrapperFilePath); + // Add referral_recon related import and initialization to the constants.dart file _addReferralReconConstantsToConstantsFile( constantsFilePath: constantsFilePath); + // Add referral_recon related import and initialization to the utils.dart file _addReferralReconMapperToUtilsFile(utilsFilePath: utilsFilePath); + // Update the sync_down.dart file + _updateSyncDownFile(syncDownFilePath); + // Run dart format on the localization_delegates.dart file Process.run('dart', ['format', localizationDelegatesFilePath]) .then((ProcessResult results) { @@ -60,6 +77,311 @@ void main() { Process.run('dart', ['format', utilsFilePath]).then((ProcessResult results) { print(results.stdout); }); + + // Run dart format on the router file + Process.run('dart', ['format', routerFilePath]).then((ProcessResult results) { + print(results.stdout); + }); + + // Run dart format on the entity_mapper.dart file + Process.run('dart', ['format', entityMapperFilePath]) + .then((ProcessResult results) { + print(results.stdout); + }); + + // Run dart format on the sync_down.dart file + Process.run('dart', ['format', syncDownFilePath]) + .then((ProcessResult results) { + print(results.stdout); + }); +} + +void _updateSyncDownFile(String syncDownFilePath) { + // Define the import statement and the new case statements + var importStatement = + "import 'package:referral_reconciliation/referral_reconciliation.dart';"; + var newCases = ''' + case DataModelType.hFReferral: + responseEntities = await remote.search( + HFReferralSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + ), + ); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) return; + final entity = element.entity as HFReferralModel; + final responseEntity = responseEntities + .whereType() + .firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + nonRecoverableError: entity.nonRecoverableError, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + break; + '''; + + // Check if the sync_down file exists + var syncDownFile = File(syncDownFilePath); + + if (!syncDownFile.existsSync()) { + print('Error: Sync Down file does not exist at path: $syncDownFilePath'); + return; + } + + // Read the sync_down file + var syncDownFileContent = syncDownFile.readAsStringSync(); + + // Check if the import statement already exists and add it if not + if (!syncDownFileContent.contains(importStatement)) { + syncDownFileContent = importStatement + '\n' + syncDownFileContent; + print('The import statement was added to sync_down.dart.'); + } else { + print('The import statement already exists in sync_down.dart.'); + } + + // Insert the new case statements + if (!syncDownFileContent.contains('DataModelType.stock') && + !syncDownFileContent.contains('DataModelType.stockReconciliation')) { + // Find the position to insert the new cases within the switch statement + var switchIndex = + syncDownFileContent.indexOf('switch (typeGroupedEntity.key) {'); + if (switchIndex != -1) { + var caseInsertionIndex = + syncDownFileContent.indexOf('default:', switchIndex); + if (caseInsertionIndex != -1) { + syncDownFileContent = + syncDownFileContent.substring(0, caseInsertionIndex) + + newCases + + '\n' + + syncDownFileContent.substring(caseInsertionIndex); + print('The new cases were added to sync_down.dart.'); + + // Write the updated content back to the file + syncDownFile.writeAsStringSync(syncDownFileContent); + } else { + print( + 'Error: Could not find the default case in the switch statement in sync_down.dart.'); + return; + } + } else { + print('Error: Could not find the switch statement in sync_down.dart.'); + return; + } + } else { + print('The new cases already exist in sync_down.dart.'); + } +} + +void _updateEntityMapperFile(String entityMapperFilePath) { + // Define the import statement and new case statements + var importStatement = + "import 'package:referral_reconciliation/models/entities/hf_referral.dart';"; + var newCases = ''' + case "hFReferral": + final entity = HFReferralModelMapper.fromJson(entityString); + return entity; +'''; + + // Check if the entity_mapper file exists + var entityMapperFile = File(entityMapperFilePath); + + if (!entityMapperFile.existsSync()) { + print( + 'Error: Entity Mapper file does not exist at path: $entityMapperFilePath'); + return; + } + + // Read the entity_mapper file + var entityMapperFileContent = entityMapperFile.readAsStringSync(); + + // Check if the import statement already exists and add it if not + if (!entityMapperFileContent.contains(importStatement)) { + entityMapperFileContent = importStatement + '\n' + entityMapperFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + + // Check if the new cases already exist in the file + if (!entityMapperFileContent.contains('case "hFReferral":')) { + // Find the position to insert the new cases (before the default case) + var caseInsertionIndex = entityMapperFileContent.indexOf('default:'); + if (caseInsertionIndex != -1) { + entityMapperFileContent = + entityMapperFileContent.substring(0, caseInsertionIndex) + + newCases + + '\n' + + entityMapperFileContent.substring(caseInsertionIndex); + print('The new cases were added.'); + + // Write the updated content back to the file + entityMapperFile.writeAsStringSync(entityMapperFileContent); + } else { + print('Error: Could not find the insertion point.'); + return; + } + } else { + print('The new cases already exist.'); + } +} + +void _addReferralReconRoutesAndImportToRouterFile(String routerFilePath) { + // Define the referral_recon route lines + var referralReconRoutes = ''' + // Referral Reconciliation Route + AutoRoute( + page: HFCreateReferralWrapperRoute.page, + path: 'hf-referral', + children: [ + AutoRoute( + page: ReferralFacilityRoute.page, + path: 'facility-details', + initial: true), + AutoRoute( + page: RecordReferralDetailsRoute.page, + path: 'referral-details'), + AutoRoute( + page: ReferralReasonChecklistRoute.page, + path: 'referral-checklist-create', + ), + AutoRoute( + page: ReferralReasonChecklistPreviewRoute.page, + path: 'referral-checklist-view', + ), + ]), + AutoRoute( + page: ReferralReconAcknowledgementRoute.page, + path: 'referral-acknowledgement', + ), + AutoRoute( + page: ReferralReconProjectFacilitySelectionRoute.page, + path: 'referral-project-facility', + ), + AutoRoute( + page: SearchReferralReconciliationsRoute.page, + path: 'search-referrals', + ), + '''; + + // Define the import statement + var importStatement1 = + "import 'package:referral_reconciliation/router/referral_reconciliation_router.dart';"; + // Define the import statement + var importStatement2 = + "import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart';"; + + // Check if the router file exists + var routerFile = File(routerFilePath); + + if (!routerFile.existsSync()) { + print('Error: Router file does not exist at path: $routerFilePath'); + return; + } + + // Read the router file + var routerFileContent = routerFile.readAsStringSync(); + + // Normalize the whitespace in the file content + var normalizedFileContent = routerFileContent.replaceAll(RegExp(r'\s'), ''); + + // Check if the import statement already exists + if (!normalizedFileContent + .contains(importStatement1.replaceAll(RegExp(r'\s'), ''))) { + // Add the import statement at the beginning of the file + routerFileContent = importStatement1 + '\n' + routerFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + + // Check if the import statement already exists + if (!normalizedFileContent + .contains(importStatement2.replaceAll(RegExp(r'\s'), ''))) { + // Add the import statement at the beginning of the file + routerFileContent = importStatement2 + '\n' + routerFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + // Check if the referral_reconRoute module already exists + if (!routerFileContent.contains('ReferralReconciliationRoute')) { + // Find the position to insert the module + var moduleInsertionIndex = routerFileContent.indexOf('@AutoRouterConfig('); + if (moduleInsertionIndex != -1) { + var endOfModulesIndex = + routerFileContent.indexOf(']', moduleInsertionIndex); + if (endOfModulesIndex != -1) { + var modulesEndIndex = + routerFileContent.lastIndexOf(']', endOfModulesIndex); + routerFileContent = routerFileContent.substring(0, modulesEndIndex) + + ' ReferralReconciliationRoute,' + + routerFileContent.substring(modulesEndIndex); + print('The referral_reconRoute module was added.'); + } else { + print('Error: Could not find the end of the modules list.'); + return; + } + } else { + print('Error: Could not find @AutoRouterConfig annotation.'); + return; + } + } else { + print('The ReferralReconciliationRoute module already exists.'); + } + + // Check if the referral_recon routes already exist in the file + if (!normalizedFileContent + .contains(referralReconRoutes.replaceAll(RegExp(r'\s'), ''))) { + // Find the position to insert the routes + var insertionIndex = routerFileContent + .indexOf('// INFO : Need to add Router of package Here'); + if (insertionIndex != -1) { + routerFileContent = routerFileContent.substring(0, insertionIndex) + + '// INFO : Need to add Router of package Here\n' + + referralReconRoutes + + routerFileContent.substring(insertionIndex + + '// INFO : Need to add Router of package Here'.length); + print('The referral_recon routes were added.'); + + // Write the updated content back to the file + routerFile.writeAsStringSync(routerFileContent); + } else { + print('Error: Could not find the insertion point.'); + return; + } + } else { + print('The referral_recon routes already exist.'); + } } void _addReferralReconMapperToUtilsFile({required String utilsFilePath}) { @@ -100,12 +422,12 @@ void _addReferralReconMapperToUtilsFile({required String utilsFilePath}) { if (!utilsFileContent .contains(referralReconciliationInitializationStatement)) { - // Add the inventory related initialization statement to the file + // Add the referral_recon related initialization statement to the file var initializeAllMappersIndex = utilsFileContent.indexOf('initializeAllMappers() async {'); if (initializeAllMappersIndex == -1) { print( - 'Error: Could not find a place to insert the inventory initialization statement.'); + 'Error: Could not find a place to insert the referral_recon initialization statement.'); return; } var endOfInitializeAllMappers = initializeAllMappersIndex + @@ -116,7 +438,7 @@ void _addReferralReconMapperToUtilsFile({required String utilsFilePath}) { '\n ' + referralReconciliationInitializationStatement + utilsFileContent.substring(endOfInitializeAllMappers - 1); - print('Inventory initialization statement added to utils.dart'); + print('referral_recon initialization statement added to utils.dart'); } // Write the updated content back to the utils.dart file @@ -132,17 +454,17 @@ void _addReferralReconConstantsToConstantsFile( // Define the referralReconciliation configuration var referralReconciliationConfiguration = ''' -// Referral Reconciliation related configuration -ReferralReconSingleton().setTenantId(envConfig.variables.tenantId); + ReferralReconSingleton().setTenantId(envConfig.variables.tenantId); '''; // Define the referral_reconciliation related lines - var referralReconciliationLocalRepositories = [ - 'HFReferralLocalRepository(sql, HFReferralOpLogManager(isar)),', - ]; - var referralReconciliationRemoteRepositories = [ - 'if (value == DataModelType.hFReferral) HFReferralRemoteRepository(dio, actionMap: actions),', - ]; + var referralReconciliationLocalRepositories = ''' + HFReferralLocalRepository(sql, HFReferralOpLogManager(isar)), + '''; + var referralReconciliationRemoteRepositories = ''' + if (value == DataModelType.hFReferral) + HFReferralRemoteRepository(dio, actionMap: actions), + '''; // Read the constants.dart file var constantsFile = File(constantsFilePath); @@ -158,63 +480,68 @@ ReferralReconSingleton().setTenantId(envConfig.variables.tenantId); for (var importStatement in importStatements) { if (!normalizedFileContent .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { - // Add the import statement after the last import - constantsFileContent = constantsFileContent.substring( - 0, constantsFileContent.indexOf(';') + 1) + - '\n' + - importStatement + - constantsFileContent.substring(constantsFileContent.indexOf(';') + 1); + // Add the import statement at the top of the file + constantsFileContent = importStatement + '\n' + constantsFileContent; print('The import statement was added: $importStatement'); } } - // Check if the referral reconciliation configuration already exists in the file + // Check if the attendance configuration already exists in the file // If not, add it to the file if (!normalizedFileContent .contains(normalizedReferralReconciliationConfiguration)) { - constantsFileContent = - '$referralReconciliationConfiguration\n$constantsFileContent'; - print('The referral reconciliation configuration was added.'); - } - - // Check if the referral reconciliation local repositories already exist in the file - for (var referralReconciliationLocalRepository - in referralReconciliationLocalRepositories) { - var normalizedReferralReconciliationLocalRepository = - referralReconciliationLocalRepository.replaceAll(RegExp(r'\s'), ''); - - if (!normalizedFileContent - .contains(normalizedReferralReconciliationLocalRepository)) { - // Add the referral reconciliation local repository to the file - constantsFileContent = constantsFileContent.replaceFirst( - '];', ' $referralReconciliationLocalRepository\n];'); - print( - 'The referral reconciliation local repository was added: $referralReconciliationLocalRepository'); - } else { - print('The referral reconciliation local repository already exists.'); + // Find the setInitialDataOfPackages method and add the attendance configuration inside it + var setInitialDataOfPackagesIndex = + constantsFileContent.indexOf('void setInitialDataOfPackages() {'); + if (setInitialDataOfPackagesIndex != -1) { + var endOfSetInitialDataOfPackages = setInitialDataOfPackagesIndex + + constantsFileContent + .substring(setInitialDataOfPackagesIndex) + .indexOf('}') + + 1; + constantsFileContent = + constantsFileContent.substring(0, endOfSetInitialDataOfPackages - 1) + + '\n $normalizedReferralReconciliationConfiguration' + + constantsFileContent.substring(endOfSetInitialDataOfPackages - 1); + print('The attendance configuration was added.'); } } - // Check if the referral reconciliation remote repositories already exist in the file - for (var referralReconciliationRemoteRepository - in referralReconciliationRemoteRepositories) { - var normalizedReferralReconciliationRemoteRepository = - referralReconciliationRemoteRepository.replaceAll(RegExp(r'\s'), ''); + // Add the local and remote repositories to the getLocalRepositories and getRemoteRepositories methods + var getLocalRepositoriesIndex = + constantsFileContent.indexOf('getLocalRepositories('); + if (getLocalRepositoriesIndex != -1) { + var endOfGetLocalRepositories = getLocalRepositoriesIndex + + constantsFileContent.substring(getLocalRepositoriesIndex).indexOf(']') + + 1; + constantsFileContent = + constantsFileContent.substring(0, endOfGetLocalRepositories - 1) + + '\n' + + referralReconciliationLocalRepositories + + constantsFileContent.substring(endOfGetLocalRepositories - 1); + print('The local repositories were added.'); + } - if (!normalizedFileContent - .contains(normalizedReferralReconciliationRemoteRepository)) { - // Add the referral reconciliation remote repository to the _getRemoteRepositories method - var replacementString = constantsFileContent.contains(']);') - ? ' $referralReconciliationRemoteRepository,\n]);' - : ' $referralReconciliationRemoteRepository\n]);'; - constantsFileContent = - constantsFileContent.replaceFirst(']);', replacementString); - print( - 'The referral reconciliation remote repository was added: $referralReconciliationRemoteRepository'); - } else { - print('The referral reconciliation remote repository already exists.'); - } + var getRemoteRepositoriesIndex = + constantsFileContent.indexOf('getRemoteRepositories('); + if (getRemoteRepositoriesIndex != -1) { + var endOfGetRemoteRepositories = getRemoteRepositoriesIndex + + constantsFileContent + .substring(getRemoteRepositoriesIndex) + .indexOf('addAll(') + + 'addAll('.length; + var endOfAddAll = constantsFileContent + .substring(endOfGetRemoteRepositories) + .indexOf(']') + + endOfGetRemoteRepositories; + constantsFileContent = constantsFileContent.substring(0, endOfAddAll) + + referralReconciliationRemoteRepositories + + constantsFileContent.substring(endOfAddAll); + print('The remote repositories were added.'); } + + // Write the updated content back to the constants.dart file + constantsFile.writeAsStringSync(constantsFileContent); } void _addRepoToNetworkManagerProviderWrapper( diff --git a/tools/registration_delivery_imports.dart b/tools/registration_delivery_imports.dart index acb74c4c5..1795c5c08 100644 --- a/tools/registration_delivery_imports.dart +++ b/tools/registration_delivery_imports.dart @@ -24,14 +24,30 @@ void main() { '$appRoot/widgets/network_manager_provider_wrapper.dart'; var constantsFilePath = '$appRoot/utils/constants.dart'; var utilsFilePath = '$appRoot/utils/utils.dart'; + var routerFilePath = '$appRoot/router/app_router.dart'; + var entityMapperFilePath = + '$appRoot/data/local_store/no_sql/schema/entity_mapper.dart'; + var syncDownFilePath = '$appRoot/data/repositories/sync/sync_down.dart'; + // Update the sync_down.dart file + _updateSyncDownFile(syncDownFilePath); + + // Add registration routes and import to the router file + _addRegistrationRoutesAndImportToRouterFile(routerFilePath); + + // Add new case statements to the entity_mapper.dart file + _updateEntityMapperFile(entityMapperFilePath); + + // Add the repositories to the network manager provider wrapper _addRepoToNetworkManagerProviderWrapper( networkManagerProviderWrapperFilePath: networkManagerProviderWrapperFilePath); + // Add the registration_delivery related constants to the constants file _addRegNDeliveryConstantsToConstantsFile( constantsFilePath: constantsFilePath); + // Add the registration_delivery related mappers to the utils file _addRegNDeliveryMapperToUtilsFile(utilsFilePath: utilsFilePath); // Run dart format on the network_manager_provider_wrapper.dart file @@ -50,6 +66,637 @@ void main() { Process.run('dart', ['format', utilsFilePath]).then((ProcessResult results) { print(results.stdout); }); + + // Run dart format on the app_router.dart file + Process.run('dart', ['format', routerFilePath]).then((ProcessResult results) { + print(results.stdout); + }); + + // Run dart format on the entity_mapper.dart file + Process.run('dart', ['format', entityMapperFilePath]) + .then((ProcessResult results) { + print(results.stdout); + }); + + // Run dart format on the sync_down.dart file + Process.run('dart', ['format', syncDownFilePath]) + .then((ProcessResult results) { + print(results.stdout); + }); +} + +void _updateSyncDownFile(String syncDownFilePath) { + // Define the import statement and the new case statements + var importStatement = + "import 'package:registration_delivery/registration_delivery.dart';"; + var newCases = ''' + case DataModelType.household: + responseEntities = await remote.search(HouseholdSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) return; + final entity = element.entity as HouseholdModel; + final responseEntity = + responseEntities.whereType().firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + final addressAdditionalId = responseEntity?.address?.id == null + ? null + : AdditionalId( + idType: householdAddressIdKey, + id: responseEntity!.address!.id!, + ); + + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + additionalIds: [ + if (addressAdditionalId != null) addressAdditionalId, + ], + dataOperation: element.operation, + rowVersion: rowVersion, + nonRecoverableError: element.nonRecoverableError, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; + + case DataModelType.householdMember: + responseEntities = await remote.search(HouseholdMemberSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) return; + final entity = element.entity as HouseholdMemberModel; + final responseEntity = responseEntities + .whereType() + .firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; + + case DataModelType.sideEffect: + responseEntities = await remote.search(SideEffectSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + + for (var element in typeGroupedEntity.value) { + if (element.id == null) return; + final entity = element.entity as SideEffectModel; + var responseEntity = responseEntities + .whereType() + .firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + case DataModelType.referral: + responseEntities = await remote.search(ReferralSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + + for (var element in typeGroupedEntity.value) { + if (element.id == null) return; + final entity = element.entity as ReferralModel; + var responseEntity = + responseEntities.whereType().firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + case DataModelType.projectBeneficiary: + responseEntities = + await remote.search(ProjectBeneficiarySearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) return; + final entity = element.entity as ProjectBeneficiaryModel; + final responseEntity = responseEntities + .whereType() + .firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; + case DataModelType.task: + responseEntities = await remote.search(TaskSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) return; + final taskModel = element.entity as TaskModel; + var responseEntity = + responseEntities.whereType().firstWhereOrNull( + (e) => + e.clientReferenceId == taskModel.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: taskModel.clientReferenceId, + serverGeneratedId: serverGeneratedId, + additionalIds: responseEntity?.resources + ?.map((e) { + final id = e.id; + if (id == null) return null; + + return AdditionalId( + idType: taskResourceIdKey, + id: id, + ); + }) + .whereNotNull() + .toList(), + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(taskModel.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + taskModel.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; +'''; + + // Check if the sync_down file exists + var syncDownFile = File(syncDownFilePath); + + if (!syncDownFile.existsSync()) { + print('Error: Sync Down file does not exist at path: $syncDownFilePath'); + return; + } + + // Read the sync_down file + var syncDownFileContent = syncDownFile.readAsStringSync(); + + // Check if the import statement already exists and add it if not + if (!syncDownFileContent.contains(importStatement)) { + syncDownFileContent = importStatement + '\n' + syncDownFileContent; + print('The import statement was added to sync_down.dart.'); + } else { + print('The import statement already exists in sync_down.dart.'); + } + + // Insert the new case statements + if (!syncDownFileContent.contains('DataModelType.stock') && + !syncDownFileContent.contains('DataModelType.stockReconciliation')) { + // Find the position to insert the new cases within the switch statement + var switchIndex = + syncDownFileContent.indexOf('switch (typeGroupedEntity.key) {'); + if (switchIndex != -1) { + var caseInsertionIndex = + syncDownFileContent.indexOf('default:', switchIndex); + if (caseInsertionIndex != -1) { + syncDownFileContent = + syncDownFileContent.substring(0, caseInsertionIndex) + + newCases + + '\n' + + syncDownFileContent.substring(caseInsertionIndex); + print('The new cases were added to sync_down.dart.'); + + // Write the updated content back to the file + syncDownFile.writeAsStringSync(syncDownFileContent); + } else { + print( + 'Error: Could not find the default case in the switch statement in sync_down.dart.'); + return; + } + } else { + print('Error: Could not find the switch statement in sync_down.dart.'); + return; + } + } else { + print('The new cases already exist in sync_down.dart.'); + } +} + +void _updateEntityMapperFile(String entityMapperFilePath) { + // Define the import statement and new case statements + var importStatement = + "import 'package:registration_delivery/registration_delivery.dart';"; + var newCases = ''' + case "household": + final entity = HouseholdModelMapper.fromJson(entityString); + return entity; + + case "householdMember": + final entity = HouseholdMemberModelMapper.fromJson(entityString); + return entity; + + case "projectBeneficiary": + final entity = ProjectBeneficiaryModelMapper.fromJson(entityString); + return entity; + + case "task": + final entity = TaskModelMapper.fromJson(entityString); + return entity; + + case "sideEffect": + final entity = SideEffectModelMapper.fromJson(entityString); + return entity; + + case "referral": + final entity = ReferralModelMapper.fromJson(entityString); + return entity; +'''; + + // Check if the entity_mapper file exists + var entityMapperFile = File(entityMapperFilePath); + + if (!entityMapperFile.existsSync()) { + print( + 'Error: Entity Mapper file does not exist at path: $entityMapperFilePath'); + return; + } + + // Read the entity_mapper file + var entityMapperFileContent = entityMapperFile.readAsStringSync(); + + // Check if the import statement already exists and add it if not + if (!entityMapperFileContent.contains(importStatement)) { + entityMapperFileContent = importStatement + '\n' + entityMapperFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + + // Check if the new cases already exist in the file + if (!entityMapperFileContent.contains('case "household":') && + !entityMapperFileContent.contains('case "householdMember":') && + !entityMapperFileContent.contains('case "projectBeneficiary":') && + !entityMapperFileContent.contains('case "task":') && + !entityMapperFileContent.contains('case "sideEffect":') && + !entityMapperFileContent.contains('case "referral":')) { + // Find the position to insert the new cases (before the default case) + var caseInsertionIndex = entityMapperFileContent.indexOf('default:'); + if (caseInsertionIndex != -1) { + entityMapperFileContent = + entityMapperFileContent.substring(0, caseInsertionIndex) + + newCases + + '\n' + + entityMapperFileContent.substring(caseInsertionIndex); + print('The new cases were added.'); + + // Write the updated content back to the file + entityMapperFile.writeAsStringSync(entityMapperFileContent); + } else { + print('Error: Could not find the insertion point.'); + return; + } + } else { + print('The new cases already exist.'); + } +} + +void _addRegistrationRoutesAndImportToRouterFile(String routerFilePath) { + // Define the registration route lines + var registrationRoutes = ''' + AutoRoute( + page: RegistrationDeliveryWrapperRoute.page, + path: 'registration-delivery-wrapper', + children: [ + AutoRoute( + initial: true, + page: SearchBeneficiaryRoute.page, + path: 'search-beneficiary'), + + AutoRoute( + page: FacilitySelectionRoute.page, + path: 'select-facilities', + ), + + /// Beneficiary Registration + AutoRoute( + page: BeneficiaryRegistrationWrapperRoute.page, + path: 'beneficiary-registration', + children: [ + AutoRoute( + page: IndividualDetailsRoute.page, + path: 'individual-details'), + AutoRoute( + page: HouseHoldDetailsRoute.page, + path: 'household-details'), + AutoRoute( + page: HouseholdLocationRoute.page, + path: 'household-location', + initial: true, + ), + AutoRoute( + page: BeneficiaryAcknowledgementRoute.page, + path: 'beneficiary-acknowledgement', + ), + ], + ), + AutoRoute( + page: BeneficiaryWrapperRoute.page, + path: 'beneficiary', + children: [ + AutoRoute( + page: HouseholdOverviewRoute.page, + path: 'overview', + initial: true, + ), + AutoRoute( + page: BeneficiaryDetailsRoute.page, + path: 'beneficiary-details', + ), + AutoRoute( + page: DeliverInterventionRoute.page, + path: 'deliver-intervention', + ), + AutoRoute( + page: SideEffectsRoute.page, + path: 'side-effects', + ), + AutoRoute( + page: ReferBeneficiaryRoute.page, + path: 'refer-beneficiary', + ), + AutoRoute( + page: DoseAdministeredRoute.page, + path: 'dose-administered', + ), + AutoRoute( + page: SplashAcknowledgementRoute.page, + path: 'splash-acknowledgement', + ), + AutoRoute( + page: ReasonForDeletionRoute.page, + path: 'reason-for-deletion', + ), + AutoRoute( + page: RecordPastDeliveryDetailsRoute.page, + path: 'record-past-delivery-details', + ), + AutoRoute( + page: HouseholdAcknowledgementRoute.page, + path: 'household-acknowledgement', + ), + ], + ), + ]), + '''; + + // Define the import statement + var importStatement1 = + "import 'package:registration_delivery/router/registration_delivery_router.gm.dart';"; + // Define the import statement + var importStatement2 = + "import 'package:registration_delivery/router/registration_delivery_router.dart';"; + + // Check if the router file exists + var routerFile = File(routerFilePath); + + if (!routerFile.existsSync()) { + print('Error: Router file does not exist at path: $routerFilePath'); + return; + } + + // Read the router file + var routerFileContent = routerFile.readAsStringSync(); + + // Normalize the whitespace in the file content + var normalizedFileContent = routerFileContent.replaceAll(RegExp(r'\s'), ''); + + // Check if the import statement already exists + if (!normalizedFileContent + .contains(importStatement1.replaceAll(RegExp(r'\s'), ''))) { + // Add the import statement at the beginning of the file + routerFileContent = importStatement1 + '\n' + routerFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + + // Check if the import statement already exists + if (!normalizedFileContent + .contains(importStatement2.replaceAll(RegExp(r'\s'), ''))) { + // Add the import statement at the beginning of the file + routerFileContent = importStatement2 + '\n' + routerFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + // Check if the RegistrationDeliveryRoute module already exists + if (!routerFileContent.contains('RegistrationDeliveryRoute')) { + // Find the position to insert the module + var moduleInsertionIndex = routerFileContent.indexOf('@AutoRouterConfig('); + if (moduleInsertionIndex != -1) { + var endOfModulesIndex = + routerFileContent.indexOf(']', moduleInsertionIndex); + if (endOfModulesIndex != -1) { + var modulesEndIndex = + routerFileContent.lastIndexOf(']', endOfModulesIndex); + routerFileContent = routerFileContent.substring(0, modulesEndIndex) + + ' RegistrationDeliveryRoute,' + + routerFileContent.substring(modulesEndIndex); + print('The RegistrationDeliveryRoute module was added.'); + } else { + print('Error: Could not find the end of the modules list.'); + return; + } + } else { + print('Error: Could not find @AutoRouterConfig annotation.'); + return; + } + } else { + print('The RegistrationDeliveryRoute module already exists.'); + } + + // Check if the registration routes already exist in the file + if (!normalizedFileContent + .contains(registrationRoutes.replaceAll(RegExp(r'\s'), ''))) { + // Find the position to insert the routes + var insertionIndex = routerFileContent + .indexOf('// INFO : Need to add Router of package Here'); + if (insertionIndex != -1) { + routerFileContent = routerFileContent.substring(0, insertionIndex) + + '// INFO : Need to add Router of package Here\n' + + registrationRoutes + + routerFileContent.substring(insertionIndex + + '// INFO : Need to add Router of package Here'.length); + print('The registration routes were added.'); + + // Write the updated content back to the file + routerFile.writeAsStringSync(routerFileContent); + } else { + print('Error: Could not find the insertion point.'); + return; + } + } else { + print('The registration routes already exist.'); + } } void _addRegNDeliveryMapperToUtilsFile({required String utilsFilePath}) { @@ -120,62 +767,121 @@ void _addRegNDeliveryConstantsToConstantsFile( ]; // Define the additional line to be added - var dataModelConfiguration = - "RegistrationDeliverySingleton().setTenantId(envConfig.variables.tenantId);"; + var registrationDeliveryConfiguration = ''' + RegistrationDeliverySingleton().setTenantId(envConfig.variables.tenantId); + '''; - // Read the constants.dart file + var localRepositories = [ + ''' + HouseholdMemberLocalRepository(sql, HouseholdMemberOpLogManager(isar)), + HouseholdLocalRepository(sql, HouseholdOpLogManager(isar)), + ProjectBeneficiaryLocalRepository( + sql, + ProjectBeneficiaryOpLogManager( + isar, + ), + ), + TaskLocalRepository(sql, TaskOpLogManager(isar)), + SideEffectLocalRepository(sql, SideEffectOpLogManager(isar)), + ReferralLocalRepository(sql, ReferralOpLogManager(isar)), + ''' + ]; + + // Define the remote repositories of registration_delivery + var remoteRepositoriesOfRegistration = [ + ''' + if (value == DataModelType.household) + HouseholdRemoteRepository(dio, actionMap: actions), + if (value == DataModelType.projectBeneficiary) + ProjectBeneficiaryRemoteRepository(dio, actionMap: actions), + if (value == DataModelType.task) + TaskRemoteRepository(dio, actionMap: actions), + if (value == DataModelType.householdMember) + HouseholdMemberRemoteRepository(dio, actionMap: actions), + if (value == DataModelType.sideEffect) + SideEffectRemoteRepository(dio, actionMap: actions), + if (value == DataModelType.referral) + ReferralRemoteRepository(dio, actionMap: actions), + ''' + ]; + + // Check if the constants.dart file exists var constantsFile = File(constantsFilePath); + if (!constantsFile.existsSync()) { + print('Error: The constants.dart file does not exist.'); + return; + } + + // Read the constants.dart file var constantsFileContent = constantsFile.readAsStringSync(); - // Normalize the whitespace in the file content and the DataModel configuration + // Normalize the whitespace in the file content and the registration_delivery configuration var normalizedFileContent = constantsFileContent.replaceAll(RegExp(r'\s'), ''); - var normalizedDataModelConfiguration = - dataModelConfiguration.replaceAll(RegExp(r'\s'), ''); + var normalizedRegistrationConfiguration = + registrationDeliveryConfiguration.replaceAll(RegExp(r'\s'), ''); // Check if the import statements already exist in the file for (var importStatement in importStatements) { if (!normalizedFileContent .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { - // Add the import statement after the last import - constantsFileContent = constantsFileContent.substring( - 0, constantsFileContent.indexOf(';') + 1) + - '\n' + - importStatement + - constantsFileContent.substring(constantsFileContent.indexOf(';') + 1); + // Add the import statement at the top of the file + constantsFileContent = importStatement + '\n' + constantsFileContent; print('The import statement was added: $importStatement'); } } - // Find the setInitialDataOfPackages method in the file - var setInitialDataOfPackagesIndex = - constantsFileContent.indexOf('setInitialDataOfPackages()'); - if (setInitialDataOfPackagesIndex == -1) { - print('Error: Could not find the setInitialDataOfPackages method.'); - return; + // Check if the registration_delivery configuration already exists in the file + // If not, add it to the file + if (!normalizedFileContent.contains(normalizedRegistrationConfiguration)) { + // Find the setInitialDataOfPackages method and add the registration_delivery configuration inside it + var setInitialDataOfPackagesIndex = + constantsFileContent.indexOf('void setInitialDataOfPackages() {'); + if (setInitialDataOfPackagesIndex != -1) { + var endOfSetInitialDataOfPackages = setInitialDataOfPackagesIndex + + constantsFileContent + .substring(setInitialDataOfPackagesIndex) + .indexOf('}') + + 1; + constantsFileContent = + constantsFileContent.substring(0, endOfSetInitialDataOfPackages - 1) + + '\n $registrationDeliveryConfiguration' + + constantsFileContent.substring(endOfSetInitialDataOfPackages - 1); + print('The registration_delivery configuration was added.'); + } } - // Find the end of the setInitialDataOfPackages method - var endOfSetInitialDataOfPackages = setInitialDataOfPackagesIndex + - constantsFileContent - .substring(setInitialDataOfPackagesIndex) - .indexOf('}') + - 1; - - // Check if the additional line already exists in the method - if (!constantsFileContent.contains(normalizedDataModelConfiguration)) { - // Add the additional line to the setInitialDataOfPackages method + // Add the local and remote repositories to the getLocalRepositories and getRemoteRepositories methods + var getLocalRepositoriesIndex = + constantsFileContent.indexOf('getLocalRepositories('); + if (getLocalRepositoriesIndex != -1) { + var endOfGetLocalRepositories = getLocalRepositoriesIndex + + constantsFileContent.substring(getLocalRepositoriesIndex).indexOf(']') + + 1; constantsFileContent = - constantsFileContent.substring(0, endOfSetInitialDataOfPackages - 1) + - '\n ' + - normalizedDataModelConfiguration + - '\n ' + - constantsFileContent.substring(endOfSetInitialDataOfPackages - 1); - print( - 'The additional line was added to the setInitialDataOfPackages method.'); - } else { - print( - 'The additional line already exists in the setInitialDataOfPackages method.'); + constantsFileContent.substring(0, endOfGetLocalRepositories - 1) + + '\n' + + localRepositories.join('\n') + + constantsFileContent.substring(endOfGetLocalRepositories - 1); + print('The local repositories were added.'); + } + + var getRemoteRepositoriesIndex = + constantsFileContent.indexOf('getRemoteRepositories('); + if (getRemoteRepositoriesIndex != -1) { + var endOfGetRemoteRepositories = getRemoteRepositoriesIndex + + constantsFileContent + .substring(getRemoteRepositoriesIndex) + .indexOf('addAll(') + + 'addAll('.length; + var endOfAddAll = constantsFileContent + .substring(endOfGetRemoteRepositories) + .indexOf(']') + + endOfGetRemoteRepositories; + constantsFileContent = constantsFileContent.substring(0, endOfAddAll) + + remoteRepositoriesOfRegistration.join('\n') + + constantsFileContent.substring(endOfAddAll); + print('The remote repositories were added.'); } // Write the updated content back to the constants.dart file @@ -195,7 +901,6 @@ void _addRepoToNetworkManagerProviderWrapper( "RepositoryProvider>(create: (_) => TaskLocalRepository(sql,TaskOpLogManager(isar),),),", "RepositoryProvider>(create: (_) => ReferralLocalRepository(sql,ReferralOpLogManager(isar),),),", "RepositoryProvider>(create: (_) => SideEffectLocalRepository(sql,SideEffectOpLogManager(isar),),),", - "RepositoryProvider>(create: (_) => DownloadLocalRepository(sql,DownloadOpLogManager(isar),),),", ]; // Define the remote repositories of DataModel @@ -206,7 +911,6 @@ void _addRepoToNetworkManagerProviderWrapper( "if (value == DataModelType.task) RepositoryProvider>(create: (_) => TaskRemoteRepository(dio, actionMap: actions,),),", "if (value == DataModelType.referral) RepositoryProvider>(create: (_) => ReferralRemoteRepository(dio, actionMap: actions,),),", "if (value == DataModelType.sideEffect) RepositoryProvider>(create: (_) => SideEffectRemoteRepository(dio, actionMap: actions,),),", - "if (value == DataModelType.downsync) RepositoryProvider>(create: (_) => DownsyncRemoteRepository(dio, actionMap: actions,),),", ]; // Read the network_manager_provider_wrapper.dart file From 05843ca20db884fa4364d1038fd25f6ee8143acd Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Tue, 4 Jun 2024 13:18:25 +0530 Subject: [PATCH 006/241] updated scripts for packages and added info tags --- .../lib/app.dart | 1 + .../lib/pages/home.dart | 6 + .../lib/utils/extensions/context_utility.dart | 2 +- tools/attendance_package_imports.dart | 233 +++++++++++--- tools/digit_data_model_imports.dart | 50 ++- tools/inventory_package_imports.dart | 257 ++++++++++++++- tools/referral_reconciliation_imports.dart | 227 ++++++++++++++ tools/registration_delivery_imports.dart | 296 ++++++++++++++++++ 8 files changed, 994 insertions(+), 78 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/app.dart b/apps/health_campaign_field_worker_app/lib/app.dart index 3deb62e3d..841607f97 100644 --- a/apps/health_campaign_field_worker_app/lib/app.dart +++ b/apps/health_campaign_field_worker_app/lib/app.dart @@ -67,6 +67,7 @@ class MainApplicationState extends State sql: widget.sql, child: MultiBlocProvider( providers: [ + // INFO : Need to add bloc of package Here BlocProvider( create: (_) { return LocationBloc(location: Location()) diff --git a/apps/health_campaign_field_worker_app/lib/pages/home.dart b/apps/health_campaign_field_worker_app/lib/pages/home.dart index d306a2660..ca0234c84 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/home.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/home.dart @@ -315,6 +315,7 @@ class _HomePageState extends LocalizedState { } final Map homeItemsMap = { + // INFO : Need to add home items of package Here i18.home.beneficiaryLabel: homeShowcaseData.distributorBeneficiaries.buildWith( child: HomeItemCard( @@ -463,6 +464,7 @@ class _HomePageState extends LocalizedState { }; final Map homeItemsShowcaseMap = { + // INFO : Need to add showcase keys of package Here i18.home.beneficiaryLabel: homeShowcaseData.distributorBeneficiaries.showcaseKey, i18.home.manageStockLabel: @@ -482,6 +484,7 @@ class _HomePageState extends LocalizedState { }; final homeItemsLabel = [ + // INFO: Need to add items label of package Here i18.home.beneficiaryLabel, i18.home.manageStockLabel, i18.home.stockReconciliationLabel, @@ -525,6 +528,7 @@ class _HomePageState extends LocalizedState { SyncSyncUpEvent( userId: context.loggedInUserUuid, localRepositories: [ + // INFO : Need to add local repo of package Here context.read< LocalRepository>(), context.read< @@ -555,6 +559,7 @@ class _HomePageState extends LocalizedState { AttendanceLogSearchModel>>(), ], remoteRepositories: [ + // INFO : Need to add repo repo of package Here context.read< RemoteRepository>(), context.read< @@ -595,6 +600,7 @@ void setPackagesSingleton(BuildContext context) { context.read().state.maybeWhen( orElse: () {}, initialized: (AppConfiguration appConfiguration, _) { + // INFO : Need to add singleton of package Here RegistrationDeliverySingleton().setInitialData( loggedInUserUuid: context.loggedInUserUuid, maxRadius: appConfiguration.maxRadius!, diff --git a/apps/health_campaign_field_worker_app/lib/utils/extensions/context_utility.dart b/apps/health_campaign_field_worker_app/lib/utils/extensions/context_utility.dart index b76e64997..50f92e1b9 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/extensions/context_utility.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/extensions/context_utility.dart @@ -99,7 +99,7 @@ extension ContextUtilityExtensions on BuildContext { if (selectedBoundary == null) { throw AppException('No boundary is selected'); } - + // INFO: Set Boundary for packages RegistrationDeliverySingleton().setBoundary(boundary: selectedBoundary); InventorySingleton().setBoundaryName(boundaryName: selectedBoundary.name!); ReferralReconSingleton().setBoundary(boundary: selectedBoundary); diff --git a/tools/attendance_package_imports.dart b/tools/attendance_package_imports.dart index 255803e19..92190256e 100644 --- a/tools/attendance_package_imports.dart +++ b/tools/attendance_package_imports.dart @@ -30,6 +30,10 @@ void main() { var entityMapperFilePath = '$appRoot/data/local_store/no_sql/schema/entity_mapper.dart'; var syncDownFilePath = '$appRoot/data/repositories/sync/sync_down.dart'; + var homeFilePath = '$appRoot/pages/home.dart'; + + // Add attendance to home file + _updateHome(homeFilePath); // Update the sync_down.dart file _updateSyncDownFile(syncDownFilePath); @@ -89,6 +93,111 @@ void main() { .then((ProcessResult results) { print(results.stdout); }); + + // Run dart format on the home.dart file + Process.run('dart', ['format', homeFilePath]).then((ProcessResult results) { + print(results.stdout); + }); +} + +void _updateHome(String homeFilePath) { + var importStatement = ''' + import 'package:attendance_management/attendance_management.dart'; + import 'package:attendance_management/router/attendance_router.gm.dart'; + '''; + + var homeItemsData = ''' + i18.home.manageAttendanceLabel: + homeShowcaseData.manageAttendance.buildWith( + child: HomeItemCard( + icon: Icons.fingerprint_outlined, + label: i18.home.manageAttendanceLabel, + onPressed: () { + // context.router.push(const ManageAttendanceRoute()); + }, + ), + ), + '''; + + var showCaseData = ''' + i18.home.manageAttendanceLabel: + homeShowcaseData.manageAttendance.showcaseKey, + '''; + + var itemsLabel = ''' + i18.home.manageAttendanceLabel, + '''; + + // Define the data to be added + var singletonData = ''' + AttendanceSingleton().setInitialData( + projectId: context.projectId, + loggedInIndividualId: context.loggedInIndividualId!, + loggedInUserUuid: context.loggedInUserUuid, + appVersion: Constants().version); + '''; + + var localRepoData = ''' + context.read>(), + '''; + + var remoteRepoData = ''' + context.read>(), + '''; + + // Check if the home.dart file exists + var homeFile = File(homeFilePath); + if (!homeFile.existsSync()) { + print('Error: Home file does not exist at path: $homeFilePath'); + return; + } + + // Read the home.dart file + var homeFileContent = homeFile.readAsStringSync(); + + // Check if the import statement already exists and add it if not + if (!homeFileContent.contains(importStatement)) { + homeFileContent = importStatement + '\n' + homeFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + + // Insert the data to be added + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add singleton of package Here', singletonData); + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add local repo of package Here', localRepoData); + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add repo repo of package Here', remoteRepoData); + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add home items of package Here', homeItemsData); + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add showcase keys of package Here', showCaseData); + homeFileContent = insertData(homeFileContent, + '// INFO: Need to add items label of package Here', itemsLabel); + + // Write the updated content back to the home.dart file + homeFile.writeAsStringSync(homeFileContent); +} + +String insertData(String fileContent, String marker, String data) { + var markerIndex = fileContent.indexOf(marker); + if (markerIndex != -1) { + var endOfMarker = markerIndex + marker.length; + if (!fileContent.substring(endOfMarker).contains(data.trim())) { + fileContent = fileContent.substring(0, endOfMarker) + + '\n' + + data + + fileContent.substring(endOfMarker); + print('Data was added after marker: $marker'); + } else { + print('Data already exists after marker: $marker'); + } + } else { + print('Error: Could not find the marker: $marker'); + } + return fileContent; } void _updateSyncDownFile(String syncDownFilePath) { @@ -432,22 +541,36 @@ void _addAttendanceConstantsToConstantsFile( // Define the attendance configuration var attendanceConfiguration = ''' -// Attendance related configuration AttendanceSingleton().setTenantId(envConfig.variables.tenantId); '''; - // Define the attendance related lines - var attendanceLocalRepositories = [ - 'AttendanceLocalRepository(sql, AttendanceOpLogManager(isar)),', - 'AttendanceLogsLocalRepository(sql, AttendanceLogOpLogManager(isar)),', - ]; - var attendanceRemoteRepositories = [ - 'if (value == DataModelType.attendanceRegister) AttendanceRemoteRepository(dio, actionMap: actions),', - 'if (value == DataModelType.attendance) AttendanceLogRemoteRepository(dio, actionMap: actions),', - ]; + // Define the local and remote repositories + var localRepository = ''' +AttendanceLocalRepository( + sql, + AttendanceOpLogManager(isar), +), +AttendanceLogsLocalRepository( + sql, + AttendanceLogOpLogManager(isar), +), + '''; - // Read the constants.dart file + var remoteRepository = ''' +if (value == DataModelType.attendanceRegister) + AttendanceRemoteRepository(dio, actionMap: actions), +if (value == DataModelType.attendance) + AttendanceLogRemoteRepository(dio, actionMap: actions), + '''; + + // Check if the constants.dart file exists var constantsFile = File(constantsFilePath); + if (!constantsFile.existsSync()) { + print('Error: The constants.dart file does not exist.'); + return; + } + + // Read the constants.dart file var constantsFileContent = constantsFile.readAsStringSync(); // Normalize the whitespace in the file content and the attendance configuration @@ -460,12 +583,8 @@ AttendanceSingleton().setTenantId(envConfig.variables.tenantId); for (var importStatement in importStatements) { if (!normalizedFileContent .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { - // Add the import statement after the last import - constantsFileContent = constantsFileContent.substring( - 0, constantsFileContent.indexOf(';') + 1) + - '\n' + - importStatement + - constantsFileContent.substring(constantsFileContent.indexOf(';') + 1); + // Add the import statement at the top of the file + constantsFileContent = importStatement + '\n' + constantsFileContent; print('The import statement was added: $importStatement'); } } @@ -473,44 +592,58 @@ AttendanceSingleton().setTenantId(envConfig.variables.tenantId); // Check if the attendance configuration already exists in the file // If not, add it to the file if (!normalizedFileContent.contains(normalizedAttendanceConfiguration)) { - constantsFileContent = '$attendanceConfiguration\n$constantsFileContent'; - print('The attendance configuration was added.'); - } - - // Check if the attendance local repositories already exist in the file - for (var attendanceLocalRepository in attendanceLocalRepositories) { - var normalizedAttendanceLocalRepository = - attendanceLocalRepository.replaceAll(RegExp(r'\s'), ''); - - if (!normalizedFileContent.contains(normalizedAttendanceLocalRepository)) { - // Add the attendance local repository to the file - constantsFileContent = constantsFileContent.replaceFirst( - '];', ' $attendanceLocalRepository\n];'); - print( - 'The attendance local repository was added: $attendanceLocalRepository'); - } else { - print('The attendance local repository already exists.'); + // Find the setInitialDataOfPackages method and add the attendance configuration inside it + var setInitialDataOfPackagesIndex = + constantsFileContent.indexOf('void setInitialDataOfPackages() {'); + if (setInitialDataOfPackagesIndex != -1) { + var endOfSetInitialDataOfPackages = setInitialDataOfPackagesIndex + + constantsFileContent + .substring(setInitialDataOfPackagesIndex) + .indexOf('}') + + 1; + constantsFileContent = + constantsFileContent.substring(0, endOfSetInitialDataOfPackages - 1) + + '\n $attendanceConfiguration' + + constantsFileContent.substring(endOfSetInitialDataOfPackages - 1); + print('The attendance configuration was added.'); } } - // Check if the attendance remote repositories already exist in the file - for (var attendanceRemoteRepository in attendanceRemoteRepositories) { - var normalizedAttendanceRemoteRepository = - attendanceRemoteRepository.replaceAll(RegExp(r'\s'), ''); + // Add the local and remote repositories to the getLocalRepositories and getRemoteRepositories methods + var getLocalRepositoriesIndex = + constantsFileContent.indexOf('getLocalRepositories('); + if (getLocalRepositoriesIndex != -1) { + var endOfGetLocalRepositories = getLocalRepositoriesIndex + + constantsFileContent.substring(getLocalRepositoriesIndex).indexOf(']') + + 1; + constantsFileContent = + constantsFileContent.substring(0, endOfGetLocalRepositories - 1) + + '\n' + + localRepository + + constantsFileContent.substring(endOfGetLocalRepositories - 1); + print('The local repositories were added.'); + } - if (!normalizedFileContent.contains(normalizedAttendanceRemoteRepository)) { - // Add the attendance remote repository to the _getRemoteRepositories method - var replacementString = constantsFileContent.contains(']);') - ? ' $attendanceRemoteRepository,\n]);' - : ' $attendanceRemoteRepository\n]);'; - constantsFileContent = - constantsFileContent.replaceFirst(']);', replacementString); - print( - 'The attendance remote repository was added: $attendanceRemoteRepository'); - } else { - print('The attendance remote repository already exists.'); - } + var getRemoteRepositoriesIndex = + constantsFileContent.indexOf('getRemoteRepositories('); + if (getRemoteRepositoriesIndex != -1) { + var endOfGetRemoteRepositories = getRemoteRepositoriesIndex + + constantsFileContent + .substring(getRemoteRepositoriesIndex) + .indexOf('addAll(') + + 'addAll('.length; + var endOfAddAll = constantsFileContent + .substring(endOfGetRemoteRepositories) + .indexOf(']') + + endOfGetRemoteRepositories; + constantsFileContent = constantsFileContent.substring(0, endOfAddAll) + + remoteRepository + + constantsFileContent.substring(endOfAddAll); + print('The remote repositories were added.'); } + + // Write the updated content back to the constants.dart file + constantsFile.writeAsStringSync(constantsFileContent); } void _addRepoToNetworkManagerProviderWrapper( diff --git a/tools/digit_data_model_imports.dart b/tools/digit_data_model_imports.dart index 58ff7c085..da4f271e0 100644 --- a/tools/digit_data_model_imports.dart +++ b/tools/digit_data_model_imports.dart @@ -169,36 +169,34 @@ void _addRepoToNetworkManagerProviderWrapper( "import 'package:digit_data_model/data_model.dart';", ]; var localRepositories = [ - "RepositoryProvider>(create: (_) => IndividualLocalRepository(sql,IndividualOpLogManager(isar),),),", - "RepositoryProvider>(create: (_) => FacilityLocalRepository(sql,FacilityOpLogManager(isar),),),", - "RepositoryProvider>(create: (_) => ProjectLocalRepository(sql,ProjectOpLogManager(isar),),),", - "RepositoryProvider>(create: (_) => ProjectStaffLocalRepository(sql,ProjectStaffOpLogManager(isar),),),", - "RepositoryProvider>(create: (_) => ProjectFacilityLocalRepository(sql,ProjectFacilityOpLogManager(isar),),),", - "RepositoryProvider>(create: (_) => ServiceDefinitionLocalRepository(sql, ServiceDefinitionOpLogManager(isar),),),", - "RepositoryProvider>(create: (_) => ServiceLocalRepository(sql, ServiceOpLogManager(isar),),),", - "RepositoryProvider>(create: (_) => ProjectResourceLocalRepository(sql, ProjectResourceOpLogManager(isar),),),", - "RepositoryProvider>(create: (_) => ProductVariantLocalRepository(sql, ProductVariantOpLogManager(isar),),),", - "RepositoryProvider>(create: (_) => BoundaryLocalRepository(sql, BoundaryOpLogManager(isar),),),", - "RepositoryProvider>(create: (_) => PgrServiceLocalRepository(sql, PgrServiceOpLogManager(isar),),),", + "RepositoryProvider>(create: (_) => IndividualLocalRepository(sql,IndividualOpLogManager(isar),),)", + "RepositoryProvider>(create: (_) => FacilityLocalRepository(sql,FacilityOpLogManager(isar),),)", + "RepositoryProvider>(create: (_) => ProjectLocalRepository(sql,ProjectOpLogManager(isar),),)", + "RepositoryProvider>(create: (_) => ProjectStaffLocalRepository(sql,ProjectStaffOpLogManager(isar),),)", + "RepositoryProvider>(create: (_) => ProjectFacilityLocalRepository(sql,ProjectFacilityOpLogManager(isar),),)", + "RepositoryProvider>(create: (_) => ServiceDefinitionLocalRepository(sql, ServiceDefinitionOpLogManager(isar),),)", + "RepositoryProvider>(create: (_) => ServiceLocalRepository(sql, ServiceOpLogManager(isar),),)", + "RepositoryProvider>(create: (_) => ProjectResourceLocalRepository(sql, ProjectResourceOpLogManager(isar),),)", + "RepositoryProvider>(create: (_) => ProductVariantLocalRepository(sql, ProductVariantOpLogManager(isar),),)", + "RepositoryProvider>(create: (_) => BoundaryLocalRepository(sql, BoundaryOpLogManager(isar),),)", + "RepositoryProvider>(create: (_) => PgrServiceLocalRepository(sql, PgrServiceOpLogManager(isar),),)", ]; // Define the remote repositories of DataModel var remoteRepositoriesOfRegistrationDelivery = [ - "if (value == DataModelType.service) RepositoryProvider>(create: (_) => ServiceRemoteRepository(dio, actionMap: actions,),),", - "if (value == DataModelType.serviceDefinition) RepositoryProvider>(create: (_) => ServiceDefinitionRemoteRepository(dio, actionMap: actions,),),", - "if (value == DataModelType.boundary) RepositoryProvider>(create: (_) => BoundaryRemoteRepository(dio, actionMap: actions,),),", - "if (value == DataModelType.productVariant) RepositoryProvider>(create: (_) => ProductVariantRemoteRepository(dio, actionMap: actions,),),", - "if (value == DataModelType.complaints) RepositoryProvider>(create: (_) => PgrServiceRemoteRepository(dio, actionMap: actions,),),", - "if (value == DataModelType.user) RepositoryProvider>(create: (_) => UserRemoteRepository(dio, actionMap: actions,),),", - "if (value == DataModelType.facility) RepositoryProvider>(create: (_) => FacilityRemoteRepository(dio, actionMap: actions,),),", - "if (value == DataModelType.individual) RepositoryProvider>(create: (_) => IndividualRemoteRepository(dio, actionMap: actions,),),", - "if (value == DataModelType.product) RepositoryProvider>(create: (_) => ProductRemoteRepository(dio, actionMap: actions,),),", - "if (value == DataModelType.productVariant) RepositoryProvider>(create: (_) => ProductVariantRemoteRepository(dio, actionMap: actions,),),", - "if (value == DataModelType.project) RepositoryProvider>(create: (_) => ProjectRemoteRepository(dio, actionMap: actions,),),", - "if (value == DataModelType.projectFacility) RepositoryProvider>(create: (_) => ProjectFacilityRemoteRepository(dio, actionMap: actions,),),", - "if (value == DataModelType.projectProductVariant) RepositoryProvider>(create: (_) => ProjectProductVariantRemoteRepository(dio, actionMap: actions,),),", - "if (value == DataModelType.projectStaff) RepositoryProvider>(create: (_) => ProjectStaffRemoteRepository(dio, actionMap: actions,),),", - "if (value == DataModelType.projectResource) RepositoryProvider>(create: (_) => ProjectResourceRemoteRepository(dio, actionMap: actions,),),", + "if (value == DataModelType.service) RepositoryProvider>(create: (_) => ServiceRemoteRepository(dio, actionMap: actions,),)", + "if (value == DataModelType.serviceDefinition) RepositoryProvider>(create: (_) => ServiceDefinitionRemoteRepository(dio, actionMap: actions,),)", + "if (value == DataModelType.boundary) RepositoryProvider>(create: (_) => BoundaryRemoteRepository(dio, actionMap: actions,),)", + "if (value == DataModelType.productVariant) RepositoryProvider>(create: (_) => ProductVariantRemoteRepository(dio, actionMap: actions,),)", + "if (value == DataModelType.complaints) RepositoryProvider>(create: (_) => PgrServiceRemoteRepository(dio, actionMap: actions,),)", + "if (value == DataModelType.user) RepositoryProvider>(create: (_) => UserRemoteRepository(dio, actionMap: actions,),)", + "if (value == DataModelType.facility) RepositoryProvider>(create: (_) => FacilityRemoteRepository(dio, actionMap: actions,),)", + "if (value == DataModelType.individual) RepositoryProvider>(create: (_) => IndividualRemoteRepository(dio, actionMap: actions,),)", + "if (value == DataModelType.product) RepositoryProvider>(create: (_) => ProductRemoteRepository(dio, actionMap: actions,),)", + "if (value == DataModelType.project) RepositoryProvider>(create: (_) => ProjectRemoteRepository(dio, actionMap: actions,),)", + "if (value == DataModelType.projectFacility) RepositoryProvider>(create: (_) => ProjectFacilityRemoteRepository(dio, actionMap: actions,),)", + "if (value == DataModelType.projectStaff) RepositoryProvider>(create: (_) => ProjectStaffRemoteRepository(dio, actionMap: actions,),)", + "if (value == DataModelType.projectResource) RepositoryProvider>(create: (_) => ProjectResourceRemoteRepository(dio, actionMap: actions,),)", ]; // Read the network_manager_provider_wrapper.dart file diff --git a/tools/inventory_package_imports.dart b/tools/inventory_package_imports.dart index 170db4b19..11af4e8cd 100644 --- a/tools/inventory_package_imports.dart +++ b/tools/inventory_package_imports.dart @@ -17,6 +17,7 @@ void main() { // Define the paths var appRoot = '$appDir/apps/health_campaign_field_worker_app/lib'; + var appFile = '$appRoot/app.dart'; var localizationDelegatesFilePath = '$appRoot/utils/localization_delegates.dart'; var networkManagerProviderWrapperFilePath = @@ -27,8 +28,17 @@ void main() { var entityMapperFilePath = '$appRoot/data/local_store/no_sql/schema/entity_mapper.dart'; var syncDownFilePath = '$appRoot/data/repositories/sync/sync_down.dart'; + var homeFilePath = '$appRoot/pages/home.dart'; + var extensionsFilePath = '$appRoot/utils/extensions/extensions.dart'; + var contextUtilityFilePath = '$appRoot/utils/extensions/context_utility.dart'; - // add the localization delegates for the inventory package + // Set boundary in the context utility file + _setBoundaryInContextUtilityFile(extensionsFilePath, contextUtilityFilePath); + + // Add the scanner bloc to the app file + _addScannerBlocToAppFile(appFile); + + // Create the localization delegates file _createLocalizationDelegatesFile(localizationDelegatesFilePath); // Add the inventory repositories to the network manager provider wrapper @@ -52,6 +62,9 @@ void main() { // Update the sync_down.dart file _updateSyncDownFile(syncDownFilePath); + // Add inventory to home file + _updateHome(homeFilePath); + // Run dart format on the updated file Process.run('dart', ['format', syncDownFilePath]) .then((ProcessResult results) { @@ -91,6 +104,248 @@ void main() { .then((ProcessResult results) { print(results.stdout); }); + + // Run dart format on the home.dart file + Process.run('dart', ['format', homeFilePath]).then((ProcessResult results) { + print(results.stdout); + }); + + // Run dart format on the app.dart file + Process.run('dart', ['format', appFile]).then((ProcessResult results) { + print(results.stdout); + }); + + // Run dart format on the extensions.dart file + Process.run('dart', ['format', extensionsFilePath]) + .then((ProcessResult results) { + print(results.stdout); + }); + + // Run dart format on the context_utility.dart file + Process.run('dart', ['format', contextUtilityFilePath]) + .then((ProcessResult results) { + print(results.stdout); + }); +} + +void _setBoundaryInContextUtilityFile( + String extensionsFilePath, String contextUtilityFilePath) { + // Define the lines to be added + var importStatement = + "import 'package:inventory_management/inventory_management.dart';"; + var boundaryStatement = + 'InventorySingleton().setBoundaryName(boundaryName: selectedBoundary.name!);'; + + // Update the extensions.dart file + var extensionsFile = File(extensionsFilePath); + var extensionsFileContent = extensionsFile.readAsStringSync(); + if (!extensionsFileContent.contains(importStatement)) { + extensionsFileContent = importStatement + '\n' + extensionsFileContent; + extensionsFile.writeAsStringSync(extensionsFileContent); + print('Updated the extensions.dart file.'); + } + + // Update the context_utility.dart file + var contextUtilityFile = File(contextUtilityFilePath); + var contextUtilityFileContent = contextUtilityFile.readAsStringSync(); + + // Use the insertData method to insert the boundaryStatement + contextUtilityFileContent = insertData(contextUtilityFileContent, + '// INFO: Set Boundary for packages', boundaryStatement); + + // Write the updated content back to the context_utility.dart file + contextUtilityFile.writeAsStringSync(contextUtilityFileContent); + print('Updated the context_utility.dart file.'); +} + +void _addScannerBlocToAppFile(String appFilePath) { + var importStatement = "import 'package:digit_scanner/blocs/scanner.dart';"; + + var scannerBlocData = ''' + BlocProvider( + create: (_) { + return DigitScannerBloc( + const DigitScannerState(), + ); + }, + lazy: false, + ), + '''; + + // Check if the app.dart file exists + var appFile = File(appFilePath); + if (!appFile.existsSync()) { + print('Error: App file does not exist at path: $appFile'); + return; + } + + // Read the app.dart file + var appFileContent = appFile.readAsStringSync(); + + // Check if the import statement already exists and add it if not + if (!appFileContent.contains(importStatement)) { + appFileContent = importStatement + '\n' + appFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + + // Insert the data to be added + appFileContent = insertData(appFileContent, + '// INFO : Need to add bloc of package Here', scannerBlocData); + + // Write the updated content back to the app.dart file + appFile.writeAsStringSync(appFileContent); +} + +void _updateHome(String homeFilePath) { + var importStatement = ''' + import 'package:inventory_management/inventory_management.dart'; + import 'package:inventory_management/router/inventory_router.gm.dart'; + '''; + + var homeItemsData = ''' + i18.home.manageStockLabel: + homeShowcaseData.warehouseManagerManageStock.buildWith( + child: HomeItemCard( + icon: Icons.store_mall_directory, + label: i18.home.manageStockLabel, + onPressed: () { + context.read().state.maybeWhen( + orElse: () {}, + initialized: (AppConfiguration appConfiguration, _) { + context.router.push(ManageStocksRoute()); + }, + ); + }, + ), + ), + i18.home.stockReconciliationLabel: + homeShowcaseData.wareHouseManagerStockReconciliation.buildWith( + child: HomeItemCard( + icon: Icons.menu_book, + label: i18.home.stockReconciliationLabel, + onPressed: () { + context.router.push(StockReconciliationRoute()); + }, + ), + ), + i18.home.viewReportsLabel: homeShowcaseData.inventoryReport.buildWith( + child: HomeItemCard( + icon: Icons.announcement, + label: i18.home.viewReportsLabel, + onPressed: () { + context.router.push(InventoryReportSelectionRoute()); + }, + ), + ), + '''; + + var showCaseData = ''' + i18.home.manageStockLabel: + homeShowcaseData.warehouseManagerManageStock.showcaseKey, + i18.home.stockReconciliationLabel: + homeShowcaseData.wareHouseManagerStockReconciliation.showcaseKey, + i18.home.viewReportsLabel: homeShowcaseData.inventoryReport.showcaseKey, + '''; + + var itemsLabel = ''' + i18.home.manageStockLabel, + i18.home.stockReconciliationLabel, + i18.home.viewReportsLabel, + '''; + + // Define the data to be added + var singletonData = ''' + InventorySingleton().setInitialData( + isWareHouseMgr: context.loggedInUserRoles + .where( + (role) => role.code == RolesType.warehouseManager.toValue()) + .toList() + .isNotEmpty, + isDistributor: context.loggedInUserRoles + .where( + (role) => role.code == RolesType.distributor.toValue(), + ) + .toList() + .isNotEmpty, + projectId: context.projectId, + loggedInUserUuid: context.loggedInUserUuid, + transportTypes: appConfiguration.transportTypes + ?.map((e) => InventoryTransportTypes() + ..name = e.code + ..code = e.code) + .toList(), + ); + '''; + + var localRepoData = ''' + context.read>(), + context.read< + LocalRepository>(), + '''; + + var remoteRepoData = ''' + context.read>(), + context.read< + RemoteRepository>(), + '''; + + // Check if the home.dart file exists + var homeFile = File(homeFilePath); + if (!homeFile.existsSync()) { + print('Error: Home file does not exist at path: $homeFilePath'); + return; + } + + // Read the home.dart file + var homeFileContent = homeFile.readAsStringSync(); + + // Check if the import statement already exists and add it if not + if (!homeFileContent.contains(importStatement)) { + homeFileContent = importStatement + '\n' + homeFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + + // Insert the data to be added + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add singleton of package Here', singletonData); + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add local repo of package Here', localRepoData); + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add repo repo of package Here', remoteRepoData); + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add home items of package Here', homeItemsData); + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add showcase keys of package Here', showCaseData); + homeFileContent = insertData(homeFileContent, + '// INFO: Need to add items label of package Here', itemsLabel); + + // Write the updated content back to the home.dart file + homeFile.writeAsStringSync(homeFileContent); +} + +String insertData(String fileContent, String marker, String data) { + var markerIndex = fileContent.indexOf(marker); + if (markerIndex != -1) { + var endOfMarker = markerIndex + marker.length; + if (!fileContent.substring(endOfMarker).contains(data.trim())) { + fileContent = fileContent.substring(0, endOfMarker) + + '\n' + + data + + fileContent.substring(endOfMarker); + print('Data was added after marker: $marker'); + } else { + print('Data already exists after marker: $marker'); + } + } else { + print('Error: Could not find the marker: $marker'); + } + return fileContent; } void _updateSyncDownFile(String syncDownFilePath) { diff --git a/tools/referral_reconciliation_imports.dart b/tools/referral_reconciliation_imports.dart index 2521565f0..821e5fa32 100644 --- a/tools/referral_reconciliation_imports.dart +++ b/tools/referral_reconciliation_imports.dart @@ -20,6 +20,7 @@ void main() { // Define the paths for the application root and the files to be modified var appRoot = '$appDir/apps/health_campaign_field_worker_app/lib'; + var appFile = '$appRoot/app.dart'; var localizationDelegatesFilePath = '$appRoot/utils/localization_delegates.dart'; var networkManagerProviderWrapperFilePath = @@ -30,6 +31,18 @@ void main() { var entityMapperFilePath = '$appRoot/data/local_store/no_sql/schema/entity_mapper.dart'; var syncDownFilePath = '$appRoot/data/repositories/sync/sync_down.dart'; + var homeFilePath = '$appRoot/pages/home.dart'; + var extensionsFilePath = '$appRoot/utils/extensions/extensions.dart'; + var contextUtilityFilePath = '$appRoot/utils/extensions/context_utility.dart'; + + // Set boundary in the context utility file + _setBoundaryInContextUtilityFile(extensionsFilePath, contextUtilityFilePath); + + // Add the scanner bloc to the app file + _addScannerBlocToAppFile(appFile); + + // Add hf_referral to home file + _updateHome(homeFilePath); // Add referral_recon routes and import to the router file _addReferralReconRoutesAndImportToRouterFile(routerFilePath); @@ -94,6 +107,220 @@ void main() { .then((ProcessResult results) { print(results.stdout); }); + + // Run dart format on the home.dart file + Process.run('dart', ['format', homeFilePath]).then((ProcessResult results) { + print(results.stdout); + }); + + // Run dart format on the app.dart file + Process.run('dart', ['format', appFile]).then((ProcessResult results) { + print(results.stdout); + }); + + // Run dart format on the extensions.dart file + Process.run('dart', ['format', extensionsFilePath]) + .then((ProcessResult results) { + print(results.stdout); + }); + + // Run dart format on the contextUtility.dart file + Process.run('dart', ['format', contextUtilityFilePath]) + .then((ProcessResult results) { + print(results.stdout); + }); +} + +void _addScannerBlocToAppFile(String appFilePath) { + var importStatement = "import 'package:digit_scanner/blocs/scanner.dart';"; + + var scannerBlocData = ''' + BlocProvider( + create: (_) { + return DigitScannerBloc( + const DigitScannerState(), + ); + }, + lazy: false, + ), + '''; + + // Check if the app.dart file exists + var appFile = File(appFilePath); + if (!appFile.existsSync()) { + print('Error: App file does not exist at path: $appFile'); + return; + } + + // Read the app.dart file + var appFileContent = appFile.readAsStringSync(); + + // Check if the import statement already exists and add it if not + if (!appFileContent.contains(importStatement)) { + appFileContent = importStatement + '\n' + appFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + + // Insert the data to be added + appFileContent = insertData(appFileContent, + '// INFO : Need to add bloc of package Here', scannerBlocData); + + // Write the updated content back to the app.dart file + appFile.writeAsStringSync(appFileContent); +} + +void _setBoundaryInContextUtilityFile( + String extensionsFilePath, String contextUtilityFilePath) { + // Define the lines to be added + var importStatement = + "import 'package:referral_reconciliation/referral_reconciliation.dart';"; + var boundaryStatement = + 'ReferralReconSingleton().setBoundary(boundary: selectedBoundary);'; + + // Update the extensions.dart file + var extensionsFile = File(extensionsFilePath); + var extensionsFileContent = extensionsFile.readAsStringSync(); + if (!extensionsFileContent.contains(importStatement)) { + extensionsFileContent = importStatement + '\n' + extensionsFileContent; + extensionsFile.writeAsStringSync(extensionsFileContent); + print('Updated the extensions.dart file.'); + } + + // Update the context_utility.dart file + var contextUtilityFile = File(contextUtilityFilePath); + var contextUtilityFileContent = contextUtilityFile.readAsStringSync(); + + // Use the insertData method to insert the boundaryStatement + contextUtilityFileContent = insertData(contextUtilityFileContent, + '// INFO: Set Boundary for packages', boundaryStatement); + + // Write the updated content back to the context_utility.dart file + contextUtilityFile.writeAsStringSync(contextUtilityFileContent); + print('Updated the context_utility.dart file.'); +} + +void _updateHome(String homeFilePath) { + var importStatement = ''' + import 'package:referral_reconciliation/referral_reconciliation.dart'; + import 'package:referral_reconciliation/router/referral_reconciliation.gm.dart'; + '''; + + var homeItemsData = ''' + i18.home.beneficiaryReferralLabel: + homeShowcaseData.hfBeneficiaryReferral.buildWith( + child: HomeItemCard( + icon: Icons.supervised_user_circle_rounded, + label: i18.home.beneficiaryReferralLabel, + onPressed: () async { + context.read().state.maybeWhen( + orElse: () {}, + initialized: (AppConfiguration appConfiguration, _) { + context.router.push(SearchReferralReconciliationsRoute()); + }, + ); + }, + ), + ), + '''; + + var showCaseData = ''' + i18.home.beneficiaryReferralLabel: + homeShowcaseData.hfBeneficiaryReferral.showcaseKey, + '''; + + var itemsLabel = ''' + i18.home.beneficiaryReferralLabel, + '''; + + // Define the data to be added + var singletonData = ''' + ReferralReconSingleton().setInitialData( + userName: context.loggedInUser.name ?? '', + userUUid: context.loggedInUserUuid, + projectId: context.selectedProject.id, + projectName: context.selectedProject.name, + roleCode: RolesType.healthFacilityWorker.toValue(), + appVersion: Constants().version, + tenantId: envConfig.variables.tenantId, + validIndividualAgeForCampaign: ValidIndividualAgeForCampaign( + validMinAge: context.selectedProjectType?.validMinAge ?? 3, + validMaxAge: context.selectedProjectType?.validMaxAge ?? 64, + ), + genderOptions: + appConfiguration.genderOptions?.map((e) => e.code).toList() ?? [], + cycles: context.cycles, + referralReasons: + appConfiguration.referralReasons?.map((e) => e.code).toList() ?? + [], + checklistTypes: + appConfiguration.checklistTypes?.map((e) => e.code).toList() ?? + [], + ); + '''; + + var localRepoData = ''' + context.read>(), + '''; + + var remoteRepoData = ''' + context.read>(), + '''; + + // Check if the home.dart file exists + var homeFile = File(homeFilePath); + if (!homeFile.existsSync()) { + print('Error: Home file does not exist at path: $homeFilePath'); + return; + } + + // Read the home.dart file + var homeFileContent = homeFile.readAsStringSync(); + + // Check if the import statement already exists and add it if not + if (!homeFileContent.contains(importStatement)) { + homeFileContent = importStatement + '\n' + homeFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + + // Insert the data to be added + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add singleton of package Here', singletonData); + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add local repo of package Here', localRepoData); + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add repo repo of package Here', remoteRepoData); + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add home items of package Here', homeItemsData); + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add showcase keys of package Here', showCaseData); + homeFileContent = insertData(homeFileContent, + '// INFO: Need to add items label of package Here', itemsLabel); + + // Write the updated content back to the home.dart file + homeFile.writeAsStringSync(homeFileContent); +} + +String insertData(String fileContent, String marker, String data) { + var markerIndex = fileContent.indexOf(marker); + if (markerIndex != -1) { + var endOfMarker = markerIndex + marker.length; + if (!fileContent.substring(endOfMarker).contains(data.trim())) { + fileContent = fileContent.substring(0, endOfMarker) + + '\n' + + data + + fileContent.substring(endOfMarker); + print('Data was added after marker: $marker'); + } else { + print('Data already exists after marker: $marker'); + } + } else { + print('Error: Could not find the marker: $marker'); + } + return fileContent; } void _updateSyncDownFile(String syncDownFilePath) { diff --git a/tools/registration_delivery_imports.dart b/tools/registration_delivery_imports.dart index 1795c5c08..9a0e46fb0 100644 --- a/tools/registration_delivery_imports.dart +++ b/tools/registration_delivery_imports.dart @@ -20,6 +20,9 @@ void main() { // Define the paths for the application root and the files to be modified var appRoot = '$appDir/apps/health_campaign_field_worker_app/lib'; + var appFile = '$appRoot/app.dart'; + var localizationDelegatesFilePath = + '$appRoot/utils/localization_delegates.dart'; var networkManagerProviderWrapperFilePath = '$appRoot/widgets/network_manager_provider_wrapper.dart'; var constantsFilePath = '$appRoot/utils/constants.dart'; @@ -28,6 +31,21 @@ void main() { var entityMapperFilePath = '$appRoot/data/local_store/no_sql/schema/entity_mapper.dart'; var syncDownFilePath = '$appRoot/data/repositories/sync/sync_down.dart'; + var homeFilePath = '$appRoot/pages/home.dart'; + var extensionsFilePath = '$appRoot/utils/extensions/extensions.dart'; + var contextUtilityFilePath = '$appRoot/utils/extensions/context_utility.dart'; + + // Set boundary in the context utility file + _setBoundaryInContextUtilityFile(extensionsFilePath, contextUtilityFilePath); + + // Add the scanner bloc to the app file + _addScannerBlocToAppFile(appFile); + + // Create the localization delegates file + _createLocalizationDelegatesFile(localizationDelegatesFilePath); + + // Add registration to home file + _updateHome(homeFilePath); // Update the sync_down.dart file _updateSyncDownFile(syncDownFilePath); @@ -83,6 +101,284 @@ void main() { .then((ProcessResult results) { print(results.stdout); }); + + // Run dart format on the home.dart file + Process.run('dart', ['format', homeFilePath]).then((ProcessResult results) { + print(results.stdout); + }); + + // Run dart format on the localization.dart file + Process.run('dart', ['format', localizationDelegatesFilePath]) + .then((ProcessResult results) { + print(results.stdout); + }); + + // Run dart format on the app.dart file + Process.run('dart', ['format', appFile]).then((ProcessResult results) { + print(results.stdout); + }); + + // Run dart format on the extensions.dart file + Process.run('dart', ['format', extensionsFilePath]) + .then((ProcessResult results) { + print(results.stdout); + }); + + // Run dart format on the context_utility.dart file + Process.run('dart', ['format', contextUtilityFilePath]) + .then((ProcessResult results) { + print(results.stdout); + }); +} + +void _addScannerBlocToAppFile(String appFilePath) { + var importStatement = "import 'package:digit_scanner/blocs/scanner.dart';"; + + var scannerBlocData = ''' + BlocProvider( + create: (_) { + return DigitScannerBloc( + const DigitScannerState(), + ); + }, + lazy: false, + ), + '''; + + // Check if the app.dart file exists + var appFile = File(appFilePath); + if (!appFile.existsSync()) { + print('Error: App file does not exist at path: $appFile'); + return; + } + + // Read the app.dart file + var appFileContent = appFile.readAsStringSync(); + + // Check if the import statement already exists and add it if not + if (!appFileContent.contains(importStatement)) { + appFileContent = importStatement + '\n' + appFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + + // Insert the data to be added + appFileContent = insertData(appFileContent, + '// INFO : Need to add bloc of package Here', scannerBlocData); + + // Write the updated content back to the app.dart file + appFile.writeAsStringSync(appFileContent); +} + +void _updateHome(String homeFilePath) { + var importStatement = ''' + import 'package:registration_delivery/registration_delivery.dart'; + import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; + '''; + + var homeItemsData = ''' + i18.home.beneficiaryLabel: + homeShowcaseData.distributorBeneficiaries.buildWith( + child: HomeItemCard( + icon: Icons.all_inbox, + label: i18.home.beneficiaryLabel, + onPressed: () async { + await context.router.push(const RegistrationDeliveryWrapperRoute()); + }, + ), + ), + '''; + + var showCaseData = ''' + i18.home.beneficiaryLabel: + homeShowcaseData.distributorBeneficiaries.showcaseKey, + '''; + + var itemsLabel = ''' + i18.home.beneficiaryLabel, + '''; + + // Define the data to be added + var singletonData = ''' + RegistrationDeliverySingleton().setInitialData( + loggedInUserUuid: context.loggedInUserUuid, + maxRadius: appConfiguration.maxRadius!, + projectId: context.projectId, + selectedBeneficiaryType: context.beneficiaryType, + projectType: context.selectedProjectType, + selectedProject: context.selectedProject, + genderOptions: + appConfiguration.genderOptions!.map((e) => e.code).toList(), + idTypeOptions: + appConfiguration.idTypeOptions!.map((e) => e.code).toList(), + householdDeletionReasonOptions: appConfiguration + .householdDeletionReasonOptions! + .map((e) => e.code) + .toList(), + householdMemberDeletionReasonOptions: appConfiguration + .householdMemberDeletionReasonOptions! + .map((e) => e.code) + .toList(), + deliveryCommentOptions: appConfiguration.deliveryCommentOptions! + .map((e) => e.code) + .toList(), + symptomsTypes: + appConfiguration.symptomsTypes!.map((e) => e.code).toList(), + referralReasons: + appConfiguration.referralReasons!.map((e) => e.code).toList(), + ); + '''; + + var localRepoData = ''' + context.read>(), + context.read>(), + context.read>(), + context.read>(), + context.read>(), + context.read>(), + '''; + + var remoteRepoData = ''' + context.read>(), + context.read>(), + context.read>(), + context.read>(), + context.read>(), + context.read>(), + '''; + + // Check if the home.dart file exists + var homeFile = File(homeFilePath); + if (!homeFile.existsSync()) { + print('Error: Home file does not exist at path: $homeFilePath'); + return; + } + + // Read the home.dart file + var homeFileContent = homeFile.readAsStringSync(); + + // Check if the import statement already exists and add it if not + if (!homeFileContent.contains(importStatement)) { + homeFileContent = importStatement + '\n' + homeFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + + // Insert the data to be added + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add singleton of package Here', singletonData); + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add local repo of package Here', localRepoData); + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add repo repo of package Here', remoteRepoData); + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add home items of package Here', homeItemsData); + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add showcase keys of package Here', showCaseData); + homeFileContent = insertData(homeFileContent, + '// INFO: Need to add items label of package Here', itemsLabel); + + // Write the updated content back to the home.dart file + homeFile.writeAsStringSync(homeFileContent); +} + +String insertData(String fileContent, String marker, String data) { + var markerIndex = fileContent.indexOf(marker); + if (markerIndex != -1) { + var endOfMarker = markerIndex + marker.length; + if (!fileContent.substring(endOfMarker).contains(data.trim())) { + fileContent = fileContent.substring(0, endOfMarker) + + '\n' + + data + + fileContent.substring(endOfMarker); + print('Data was added after marker: $marker'); + } else { + print('Data already exists after marker: $marker'); + } + } else { + print('Error: Could not find the marker: $marker'); + } + return fileContent; +} + +void _setBoundaryInContextUtilityFile( + String extensionsFilePath, String contextUtilityFilePath) { + // Define the lines to be added + var importStatement = + "import 'package:registration_delivery/registration_delivery.dart';"; + var boundaryStatement = + 'RegistrationDeliverySingleton().setBoundary(boundary: selectedBoundary);'; + + // Update the extensions.dart file + var extensionsFile = File(extensionsFilePath); + var extensionsFileContent = extensionsFile.readAsStringSync(); + if (!extensionsFileContent.contains(importStatement)) { + extensionsFileContent = importStatement + '\n' + extensionsFileContent; + extensionsFile.writeAsStringSync(extensionsFileContent); + print('Updated the extensions.dart file.'); + } + + // Update the context_utility.dart file + var contextUtilityFile = File(contextUtilityFilePath); + var contextUtilityFileContent = contextUtilityFile.readAsStringSync(); + + // Use the insertData method to insert the boundaryStatement + contextUtilityFileContent = insertData(contextUtilityFileContent, + '// INFO: Set Boundary for packages', boundaryStatement); + + // Write the updated content back to the context_utility.dart file + contextUtilityFile.writeAsStringSync(contextUtilityFileContent); + print('Updated the context_utility.dart file.'); +} + +void _createLocalizationDelegatesFile(String localizationDelegatesFilePath) { + // Define the import statement and delegate for localization + var importStatement = + "import 'package:registration_delivery/blocs/app_localization.dart' as registration_delivery_localization;"; + var delegate = ''' + registration_delivery_localization.RegistrationDeliveryLocalization + .getDelegate( + getLocalizationString( + isar, + selectedLocale, + ), + appConfig.languages!, + ), + '''; + + // Read the localization delegates file + var localizationDelegatesFile = File(localizationDelegatesFilePath); + var localizationDelegatesFileContent = + localizationDelegatesFile.readAsStringSync(); + + var normalizedFileContent = + localizationDelegatesFileContent.replaceAll(RegExp(r'\s'), ''); + + // Check if the import statement and delegate already exist in the file + // If not, add them to the file + if (!normalizedFileContent + .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { + localizationDelegatesFileContent = + '$importStatement\n$localizationDelegatesFileContent'; + print('The import statement was added.'); + } + + if (!normalizedFileContent.contains(delegate.replaceAll(RegExp(r'\s'), ''))) { + var lastDelegateIndex = + localizationDelegatesFileContent.lastIndexOf(RegExp(r',')); + if (lastDelegateIndex != -1) { + localizationDelegatesFileContent = + localizationDelegatesFileContent.substring(0, lastDelegateIndex + 1) + + '\n $delegate' + + localizationDelegatesFileContent.substring(lastDelegateIndex + 1); + print('The delegate was added.'); + } + } + + // Write the updated content back to the file + localizationDelegatesFile.writeAsStringSync(localizationDelegatesFileContent); } void _updateSyncDownFile(String syncDownFilePath) { From abaf27293d31c858e88d0a48f5c6371df153b542 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Tue, 4 Jun 2024 13:19:33 +0530 Subject: [PATCH 007/241] added info tag to add package related repo's --- .../lib/widgets/network_manager_provider_wrapper.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart b/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart index 19286c031..6bd4bf8df 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart +++ b/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart @@ -264,6 +264,7 @@ class NetworkManagerProviderWrapper extends StatelessWidget { StockReconciliationOpLogManager(isar), ), ), + // INFO Need to add packages here ]; } @@ -484,6 +485,7 @@ class NetworkManagerProviderWrapper extends StatelessWidget { create: (_) => StockReconciliationRemoteRepository(dio, actionMap: actions), ), + // INFO Need to add packages here ]); } From 24f85c816b26efdcf70a1970253d5eb325745970 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Tue, 4 Jun 2024 19:18:48 +0530 Subject: [PATCH 008/241] script changes Ensure proper Markdown formatting in the CHANGELOG. --- packages/attendance_management/CHANGELOG.md | 6 + packages/digit_data_model/CHANGELOG.md | 4 + packages/digit_scanner/CHANGELOG.md | 11 +- packages/digit_showcase/CHANGELOG.md | 2 + packages/inventory_management/CHANGELOG.md | 10 + packages/referral_reconciliation/CHANGELOG.md | 6 + packages/registration_delivery/CHANGELOG.md | 10 + tools/attendance_package_imports.dart | 254 +++++++++--------- tools/digit_data_model_imports.dart | 106 ++++---- tools/inventory_package_imports.dart | 115 +++----- tools/referral_reconciliation_imports.dart | 112 +++----- tools/registration_delivery_imports.dart | 120 +++------ 12 files changed, 349 insertions(+), 407 deletions(-) diff --git a/packages/attendance_management/CHANGELOG.md b/packages/attendance_management/CHANGELOG.md index 0d09edc85..d0087536a 100644 --- a/packages/attendance_management/CHANGELOG.md +++ b/packages/attendance_management/CHANGELOG.md @@ -7,20 +7,26 @@ - Mark Attendance: Mark the attendance of the employees. ## 0.0.0-dev.2 + * Removed unused dependencies from pubspec.yaml file. ## 0.0.0-dev.3 + * Updated intl package version ## 0.0.0-dev.4 + * Updated digit_components version for dropdown fix ## 0.0.0-dev.5 + * Updated digit_data_model to latest version ## 1.0.0 + * Initial stable release ## 1.0.0+1 + * Updated digit_components to latest version \ No newline at end of file diff --git a/packages/digit_data_model/CHANGELOG.md b/packages/digit_data_model/CHANGELOG.md index b90afd229..aeaa67597 100644 --- a/packages/digit_data_model/CHANGELOG.md +++ b/packages/digit_data_model/CHANGELOG.md @@ -3,13 +3,17 @@ * Digit Data Model Initial Release ## 0.0.0-dev.2 + * Boundary v2 Integrated, to use Boundary v1 0.0.0-dev.1 version can be used ## 0.0.0-dev.3 + * Supports boundary v2 and updated single entities to list for all search models ## 1.0.0 + * Initial stable release ## 1.0.1 + * Added Service and Service Definition Bloc \ No newline at end of file diff --git a/packages/digit_scanner/CHANGELOG.md b/packages/digit_scanner/CHANGELOG.md index 99e292681..8def6d437 100644 --- a/packages/digit_scanner/CHANGELOG.md +++ b/packages/digit_scanner/CHANGELOG.md @@ -1,28 +1,35 @@ ## 0.0.0-dev.1 + Digit Scanner Package Setup and Initialization ## 0.0.0-dev.2 + Added Flutter version constraints ## 0.0.0-dev.3 -Removed flutter localizations dependency +Removed flutter localizations dependency ## 0.0.0-dev.4 + Updated repository and homepage url ## 0.0.0-dev.5 -Updated digit_components version for dropdown fix +Updated digit_components version for dropdown fix ## 0.0.0-dev.6 + Disabled Submit button for manual code not entered ## 0.0.0-dev.7 + Reverted disable button change ## 1.0.0 + Initial stable Release ## 1.0.0+1 + * Updated digit_components to latest version \ No newline at end of file diff --git a/packages/digit_showcase/CHANGELOG.md b/packages/digit_showcase/CHANGELOG.md index 7d378758b..69ebf0931 100644 --- a/packages/digit_showcase/CHANGELOG.md +++ b/packages/digit_showcase/CHANGELOG.md @@ -1,5 +1,7 @@ ## 0.0.0-dev.1 + * Digit Showcase initial release. ## 1.0.0 + * Stable release \ No newline at end of file diff --git a/packages/inventory_management/CHANGELOG.md b/packages/inventory_management/CHANGELOG.md index b476efdc6..5a7e570ca 100644 --- a/packages/inventory_management/CHANGELOG.md +++ b/packages/inventory_management/CHANGELOG.md @@ -1,30 +1,40 @@ ## 0.0.0-dev.1 + * Inventory Management Initial Release ## 0.0.0-dev.2 + * Removed unused package dependencies from pubspec.yaml ## 0.0.0-dev.3 + * Updated intl package version ## 0.0.0-dev.4 + * Removed fonts references from pubspec.yaml ## 0.0.0-dev.5 + * Updated digit_components version for dropdown fix ## 0.0.0-dev.6 + * Updated digit_data_model to latest version * Fixed Report Type mapping to value ## 0.0.0-dev.7 + * Fixed Lost report type mapping to value ## 0.0.0-dev.8 + * Updated digit_scanner to latest version ## 0.0.0-dev.9 + * Updated digit_scanner to latest version ## 1.0.0 + * Initial stable Release \ No newline at end of file diff --git a/packages/referral_reconciliation/CHANGELOG.md b/packages/referral_reconciliation/CHANGELOG.md index e030e2b40..2528c27d3 100644 --- a/packages/referral_reconciliation/CHANGELOG.md +++ b/packages/referral_reconciliation/CHANGELOG.md @@ -1,17 +1,23 @@ ## 0.0.0-dev.1 + Referral Reconciliation Initial Release ## 0.0.0-dev.2 + Updated digit_components version for dropdown fix ## 0.0.0-dev.3 + Updated digit_data_model to latest version ## 0.0.0-dev.4 + Updated digit_scanner to latest version ## 0.0.0-dev.5 + Updated digit_scanner to latest version ## 1.0.0 + * Initial stable version \ No newline at end of file diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration_delivery/CHANGELOG.md index 46453edb0..e7b74ad44 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration_delivery/CHANGELOG.md @@ -1,31 +1,41 @@ ## 0.0.0-dev.1 + * Registration and Delivery Initial Release ## 0.0.0-dev.2 + * Boundary v2 Integrated, to use Boundary v1 0.0.0-dev.1 version can be used ## 0.0.0-dev.3 + * Updated digit_data_model to latest version ## 0.0.0-dev.4 + * Added null check for fetching product variants ## 0.0.0-dev.5 + * Facility dialog empty pop up fix on initial load ## 0.0.0-dev.6 + * Updated digit_scanner to latest version ## 0.0.0-dev.7 + * Fixed Duplicate routing issue ## 1.0.0 + * Initial stable version ## 1.0.0+1 + * Updated digit_showcase to latest version ## 1.0.1 + * Moved service and service definition bloc to digit_data_model package * Removed downsync model * Added HouseholdDetailsBloc in registration_delivery_wrapper page \ No newline at end of file diff --git a/tools/attendance_package_imports.dart b/tools/attendance_package_imports.dart index 92190256e..65c273c63 100644 --- a/tools/attendance_package_imports.dart +++ b/tools/attendance_package_imports.dart @@ -19,18 +19,18 @@ void main() { var appDir = Directory.current.path; // Define the paths for the application root and the files to be modified - var appRoot = '$appDir/apps/health_campaign_field_worker_app/lib'; + var appRoot = appDir + '/apps/health_campaign_field_worker_app/lib'; var localizationDelegatesFilePath = - '$appRoot/utils/localization_delegates.dart'; + appRoot + '/utils/localization_delegates.dart'; var networkManagerProviderWrapperFilePath = - '$appRoot/widgets/network_manager_provider_wrapper.dart'; - var constantsFilePath = '$appRoot/utils/constants.dart'; - var utilsFilePath = '$appRoot/utils/utils.dart'; - var routerFilePath = '$appRoot/router/app_router.dart'; + appRoot + '/widgets/network_manager_provider_wrapper.dart'; + var constantsFilePath = appRoot + '/utils/constants.dart'; + var utilsFilePath = appRoot + '/utils/utils.dart'; + var routerFilePath = appRoot + '/router/app_router.dart'; var entityMapperFilePath = - '$appRoot/data/local_store/no_sql/schema/entity_mapper.dart'; - var syncDownFilePath = '$appRoot/data/repositories/sync/sync_down.dart'; - var homeFilePath = '$appRoot/pages/home.dart'; + appRoot + '/data/local_store/no_sql/schema/entity_mapper.dart'; + var syncDownFilePath = appRoot + '/data/repositories/sync/sync_down.dart'; + var homeFilePath = appRoot + '/pages/home.dart'; // Add attendance to home file _updateHome(homeFilePath); @@ -54,50 +54,23 @@ void main() { _addAttendanceMapperToUtilsFile(utilsFilePath: utilsFilePath); - // Run dart format on the localization_delegates.dart file - Process.run('dart', ['format', localizationDelegatesFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the network_manager_provider_wrapper.dart file - Process.run('dart', ['format', networkManagerProviderWrapperFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the constants.dart file - Process.run('dart', ['format', constantsFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the utils.dart file - Process.run('dart', ['format', utilsFilePath]).then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the app_router.dart file - Process.run('dart', ['format', routerFilePath]).then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the entity_mapper.dart file - Process.run('dart', ['format', entityMapperFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the sync_down.dart file - Process.run('dart', ['format', syncDownFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the home.dart file - Process.run('dart', ['format', homeFilePath]).then((ProcessResult results) { - print(results.stdout); - }); + _formatFiles([ + homeFilePath, + syncDownFilePath, + entityMapperFilePath, + routerFilePath, + constantsFilePath, + utilsFilePath, + networkManagerProviderWrapperFilePath, + localizationDelegatesFilePath + ]); +} + +void _formatFiles(List filePaths) { + for (var filePath in filePaths) { + Process.runSync('dart', ['format', filePath]); + print('Formatted $filePath'); + } } void _updateHome(String homeFilePath) { @@ -156,7 +129,8 @@ void _updateHome(String homeFilePath) { var homeFileContent = homeFile.readAsStringSync(); // Check if the import statement already exists and add it if not - if (!homeFileContent.contains(importStatement)) { + if (!homeFileContent + .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { homeFileContent = importStatement + '\n' + homeFileContent; print('The import statement was added.'); } else { @@ -267,7 +241,8 @@ void _updateSyncDownFile(String syncDownFilePath) { var syncDownFileContent = syncDownFile.readAsStringSync(); // Check if the import statement already exists and add it if not - if (!syncDownFileContent.contains(importStatement)) { + if (!syncDownFileContent + .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { syncDownFileContent = importStatement + '\n' + syncDownFileContent; print('The import statement was added to sync_down.dart.'); } else { @@ -275,7 +250,8 @@ void _updateSyncDownFile(String syncDownFilePath) { } // Insert the new case statements - if (!syncDownFileContent.contains('DataModelType.attendance')) { + if (!syncDownFileContent + .contains('DataModelType.attendance'.replaceAll(RegExp(r'\s'), ''))) { // Find the position to insert the new cases within the switch statement var switchIndex = syncDownFileContent.indexOf('switch (typeGroupedEntity.key) {'); @@ -329,7 +305,8 @@ void _updateEntityMapperFile(String entityMapperFilePath) { var entityMapperFileContent = entityMapperFile.readAsStringSync(); // Check if the import statement already exists and add it if not - if (!entityMapperFileContent.contains(importStatement)) { + if (!entityMapperFileContent + .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { entityMapperFileContent = importStatement + '\n' + entityMapperFileContent; print('The import statement was added.'); } else { @@ -337,7 +314,8 @@ void _updateEntityMapperFile(String entityMapperFilePath) { } // Check if the new cases already exist in the file - if (!entityMapperFileContent.contains('case "attendance":')) { + if (!entityMapperFileContent + .contains('case "attendance":'.replaceAll(RegExp(r'\s'), ''))) { // Find the position to insert the new cases (before the default case) var caseInsertionIndex = entityMapperFileContent.indexOf('default:'); if (caseInsertionIndex != -1) { @@ -422,7 +400,8 @@ void _addAttendanceRoutesAndImportToRouterFile(String routerFilePath) { print('The import statement already exists.'); } // Check if the attendanceRoute module already exists - if (!routerFileContent.contains('AttendanceRoute')) { + if (!routerFileContent + .contains('AttendanceRoute'.replaceAll(RegExp(r'\s'), ''))) { // Find the position to insert the module var moduleInsertionIndex = routerFileContent.indexOf('@AutoRouterConfig('); if (moduleInsertionIndex != -1) { @@ -526,6 +505,8 @@ void _addAttendanceMapperToUtilsFile({required String utilsFilePath}) { attendanceInitializationStatement + utilsFileContent.substring(endOfInitializeAllMappers - 1); print('Attendance initialization statement added to utils.dart'); + } else { + print('The attendance initialization statement already exists.'); } // Write the updated content back to the utils.dart file @@ -610,36 +591,50 @@ if (value == DataModelType.attendance) } // Add the local and remote repositories to the getLocalRepositories and getRemoteRepositories methods - var getLocalRepositoriesIndex = - constantsFileContent.indexOf('getLocalRepositories('); - if (getLocalRepositoriesIndex != -1) { - var endOfGetLocalRepositories = getLocalRepositoriesIndex + - constantsFileContent.substring(getLocalRepositoriesIndex).indexOf(']') + - 1; - constantsFileContent = - constantsFileContent.substring(0, endOfGetLocalRepositories - 1) + - '\n' + - localRepository + - constantsFileContent.substring(endOfGetLocalRepositories - 1); - print('The local repositories were added.'); + if (!normalizedFileContent + .contains(localRepository.replaceAll(RegExp(r'\s'), ''))) { + var getLocalRepositoriesIndex = + constantsFileContent.indexOf('getLocalRepositories('); + if (getLocalRepositoriesIndex != -1) { + var endOfGetLocalRepositories = getLocalRepositoriesIndex + + constantsFileContent + .substring(getLocalRepositoriesIndex) + .indexOf('addAll(') + + 'addAll('.length; + var endOfAddAll = constantsFileContent + .substring(endOfGetLocalRepositories) + .indexOf(']') + + endOfGetLocalRepositories; + constantsFileContent = constantsFileContent.substring(0, endOfAddAll) + + localRepository + + constantsFileContent.substring(endOfAddAll); + print('The local repositories were added.'); + } + } else { + print('The local repositories already exist.'); } - var getRemoteRepositoriesIndex = - constantsFileContent.indexOf('getRemoteRepositories('); - if (getRemoteRepositoriesIndex != -1) { - var endOfGetRemoteRepositories = getRemoteRepositoriesIndex + - constantsFileContent - .substring(getRemoteRepositoriesIndex) - .indexOf('addAll(') + - 'addAll('.length; - var endOfAddAll = constantsFileContent - .substring(endOfGetRemoteRepositories) - .indexOf(']') + - endOfGetRemoteRepositories; - constantsFileContent = constantsFileContent.substring(0, endOfAddAll) + - remoteRepository + - constantsFileContent.substring(endOfAddAll); - print('The remote repositories were added.'); + if (!normalizedFileContent + .contains(remoteRepository.replaceAll(RegExp(r'\s'), ''))) { + var getRemoteRepositoriesIndex = + constantsFileContent.indexOf('getRemoteRepositories('); + if (getRemoteRepositoriesIndex != -1) { + var endOfGetRemoteRepositories = getRemoteRepositoriesIndex + + constantsFileContent + .substring(getRemoteRepositoriesIndex) + .indexOf('addAll(') + + 'addAll('.length; + var endOfAddAll = constantsFileContent + .substring(endOfGetRemoteRepositories) + .indexOf(']') + + endOfGetRemoteRepositories; + constantsFileContent = constantsFileContent.substring(0, endOfAddAll) + + remoteRepository + + constantsFileContent.substring(endOfAddAll); + print('The remote repositories were added.'); + } + } else { + print('The remote repositories already exist.'); } // Write the updated content back to the constants.dart file @@ -694,7 +689,8 @@ void _addRepoToNetworkManagerProviderWrapper( // Check if the import statements already exist in the file for (var importStatement in importStatements) { - if (!networkManagerProviderWrapperFileContent.contains(importStatement)) { + if (!networkManagerProviderWrapperFileContent + .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { // Add the import statement after the last import networkManagerProviderWrapperFileContent = networkManagerProviderWrapperFileContent.substring( @@ -705,57 +701,59 @@ void _addRepoToNetworkManagerProviderWrapper( .substring(endOfLastImport); endOfLastImport += importStatement.length + 1; print('The import statement was added: $importStatement'); + } else { + print('The import statement already exists.'); } } - } - // Normalize the whitespace in the file content and the remote repository of attendance - var normalizedFileContent = - networkManagerProviderWrapperFileContent.replaceAll(RegExp(r'\s'), ''); + // Normalize the whitespace in the file content and the remote repository of attendance + var normalizedFileContent = + networkManagerProviderWrapperFileContent.replaceAll(RegExp(r'\s'), ''); // Check if the local repository providers already exist in the file - for (var repositoryProvider in localRepositories) { - var normalizedLocalRepositoryOfAttendance = - repositoryProvider.replaceAll(RegExp(r'\s'), ''); + for (var repositoryProvider in localRepositories) { + var normalizedLocalRepositoryOfAttendance = + repositoryProvider.replaceAll(RegExp(r'\s'), ''); - if (!normalizedFileContent - .contains(normalizedLocalRepositoryOfAttendance)) { - // Add the local repository provider to the file - networkManagerProviderWrapperFileContent = - networkManagerProviderWrapperFileContent.replaceFirst( - '];', ' $repositoryProvider\n];'); - print('The local repository provider was added: $repositoryProvider'); - } else { - print('The local repository provider already exists.'); + if (!normalizedFileContent + .contains(normalizedLocalRepositoryOfAttendance)) { + // Add the local repository provider to the file + networkManagerProviderWrapperFileContent = + networkManagerProviderWrapperFileContent.replaceFirst( + '];', ' $repositoryProvider\n];'); + print('The local repository provider was added: $repositoryProvider'); + } else { + print('The local repository provider already exists.'); + } } - } // Check if the remote repository of attendance already exists in the file - for (var remoteRepositoryOfRegistrationDelivery - in remoteRepositoriesOfRegistrationDelivery) { - var normalizedRemoteRepositoryOfRegistrationDelivery = - remoteRepositoryOfRegistrationDelivery.replaceAll(RegExp(r'\s'), ''); - - if (!normalizedFileContent - .contains(normalizedRemoteRepositoryOfRegistrationDelivery)) { - // Add the remote repository of attendance to the _getRemoteRepositories method - var replacementString = - networkManagerProviderWrapperFileContent.contains(']);') - ? ' $remoteRepositoryOfRegistrationDelivery,\n]);' - : ' $remoteRepositoryOfRegistrationDelivery\n]);'; - networkManagerProviderWrapperFileContent = - networkManagerProviderWrapperFileContent.replaceFirst( - ']);', replacementString); - print( - 'The remote repository of attendance was added: $remoteRepositoryOfRegistrationDelivery'); - } else { - print('The remote repository of attendance already exists.'); + for (var remoteRepositoryOfRegistrationDelivery + in remoteRepositoriesOfRegistrationDelivery) { + var normalizedRemoteRepositoryOfRegistrationDelivery = + remoteRepositoryOfRegistrationDelivery.replaceAll(RegExp(r'\s'), ''); + + if (!normalizedFileContent + .contains(normalizedRemoteRepositoryOfRegistrationDelivery)) { + // Add the remote repository of attendance to the _getRemoteRepositories method + var replacementString = + networkManagerProviderWrapperFileContent.contains(']);') + ? ' $remoteRepositoryOfRegistrationDelivery,\n]);' + : ' $remoteRepositoryOfRegistrationDelivery\n]);'; + networkManagerProviderWrapperFileContent = + networkManagerProviderWrapperFileContent.replaceFirst( + ']);', replacementString); + print( + 'The remote repository of attendance was added: $remoteRepositoryOfRegistrationDelivery'); + } else { + print('The remote repository of attendance already exists.'); + } } - } - // Write the updated content back to the file - networkManagerProviderWrapperFile - .writeAsStringSync(networkManagerProviderWrapperFileContent); + // Write the updated content back to the file + networkManagerProviderWrapperFile + .writeAsStringSync(networkManagerProviderWrapperFileContent); + } } void _createLocalizationDelegatesFile(String localizationDelegatesFilePath) { diff --git a/tools/digit_data_model_imports.dart b/tools/digit_data_model_imports.dart index da4f271e0..be326ab4d 100644 --- a/tools/digit_data_model_imports.dart +++ b/tools/digit_data_model_imports.dart @@ -1,6 +1,8 @@ // Import the required Dart I/O package import 'dart:io'; +import 'attendance_package_imports.dart'; + String createCaseCondition(String key, String value) { return 'case "$key":\n $value'; } @@ -19,11 +21,11 @@ void main() { var appDir = Directory.current.path; // Define the paths for the application root and the files to be modified - var appRoot = '$appDir/apps/health_campaign_field_worker_app/lib'; + var appRoot = appDir + '/apps/health_campaign_field_worker_app/lib'; var networkManagerProviderWrapperFilePath = - '$appRoot/widgets/network_manager_provider_wrapper.dart'; - var constantsFilePath = '$appRoot/utils/constants.dart'; - var utilsFilePath = '$appRoot/utils/utils.dart'; + appRoot + '/widgets/network_manager_provider_wrapper.dart'; + var constantsFilePath = appRoot + '/utils/constants.dart'; + var utilsFilePath = appRoot + '/utils/utils.dart'; _addRepoToNetworkManagerProviderWrapper( networkManagerProviderWrapperFilePath: @@ -33,22 +35,18 @@ void main() { _addDataModelMapperToUtilsFile(utilsFilePath: utilsFilePath); - // Run dart format on the network_manager_provider_wrapper.dart file - Process.run('dart', ['format', networkManagerProviderWrapperFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the constants.dart file - Process.run('dart', ['format', constantsFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the utils.dart file - Process.run('dart', ['format', utilsFilePath]).then((ProcessResult results) { - print(results.stdout); - }); + _formatFiles([ + networkManagerProviderWrapperFilePath, + constantsFilePath, + utilsFilePath, + ]); +} + +void _formatFiles(List filePaths) { + for (var filePath in filePaths) { + Process.runSync('dart', ['format', filePath]); + print('Formatted $filePath'); + } } void _addDataModelMapperToUtilsFile({required String utilsFilePath}) { @@ -87,28 +85,33 @@ void _addDataModelMapperToUtilsFile({required String utilsFilePath}) { print('The import statement already exists.'); } - if (!utilsFileContent.contains(dataModelInitializationStatement)) { - // Add the DataModel related initialization statement to the file - var initializeAllMappersIndex = - utilsFileContent.indexOf('initializeAllMappers() async {'); - if (initializeAllMappersIndex == -1) { - print( - 'Error: Could not find a place to insert the DataModel initialization statement.'); - return; + if (!normalizedFileContent.contains( + dataModelInitializationStatement.replaceAll(RegExp(r'\s'), ''))) { + if (!utilsFileContent.contains(dataModelInitializationStatement)) { + // Add the DataModel related initialization statement to the file + var initializeAllMappersIndex = + utilsFileContent.indexOf('initializeAllMappers() async {'); + if (initializeAllMappersIndex == -1) { + print( + 'Error: Could not find a place to insert the DataModel initialization statement.'); + return; + } + var endOfInitializeAllMappers = initializeAllMappersIndex + + utilsFileContent.substring(initializeAllMappersIndex).indexOf(']') + + 1; + utilsFileContent = + utilsFileContent.substring(0, endOfInitializeAllMappers - 1) + + '\n ' + + dataModelInitializationStatement + + utilsFileContent.substring(endOfInitializeAllMappers - 1); + print('DataModel initialization statement added to utils.dart'); } - var endOfInitializeAllMappers = initializeAllMappersIndex + - utilsFileContent.substring(initializeAllMappersIndex).indexOf(']') + - 1; - utilsFileContent = - utilsFileContent.substring(0, endOfInitializeAllMappers - 1) + - '\n ' + - dataModelInitializationStatement + - utilsFileContent.substring(endOfInitializeAllMappers - 1); - print('DataModel initialization statement added to utils.dart'); - } - // Write the updated content back to the utils.dart file - utilsFile.writeAsStringSync(utilsFileContent); + // Write the updated content back to the utils.dart file + utilsFile.writeAsStringSync(utilsFileContent); + } else { + print('The DataModel initialization statement already exists.'); + } } void _addDataModelConstantsToConstantsFile( @@ -149,6 +152,8 @@ void _addDataModelConstantsToConstantsFile( importStatement + constantsFileContent.substring(constantsFileContent.indexOf(';') + 1); print('The import statement was added: $importStatement'); + } else { + print('The import statement already exists.'); } } @@ -204,6 +209,9 @@ void _addRepoToNetworkManagerProviderWrapper( File(networkManagerProviderWrapperFilePath); var networkManagerProviderWrapperFileContent = networkManagerProviderWrapperFile.readAsStringSync(); + // Normalize the whitespace in the file content and the remote repository of DataModel + var normalizedFileContent = + networkManagerProviderWrapperFileContent.replaceAll(RegExp(r'\s'), ''); // Find the last import statement in the file var lastImportIndex = networkManagerProviderWrapperFileContent @@ -218,25 +226,23 @@ void _addRepoToNetworkManagerProviderWrapper( // Check if the import statements already exist in the file for (var importStatement in importStatements) { - if (!networkManagerProviderWrapperFileContent.contains(importStatement)) { + if (!normalizedFileContent + .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { // Add the import statement after the last import networkManagerProviderWrapperFileContent = - networkManagerProviderWrapperFileContent.substring( - 0, endOfLastImport) + + networkManagerProviderWrapperFileContent.substring(0, + networkManagerProviderWrapperFileContent.indexOf(';') + 1) + '\n' + importStatement + - networkManagerProviderWrapperFileContent - .substring(endOfLastImport); - endOfLastImport += importStatement.length + 1; + networkManagerProviderWrapperFileContent.substring( + networkManagerProviderWrapperFileContent.indexOf(';') + 1); print('The import statement was added: $importStatement'); + } else { + print('The import statement already exists.'); } } } - // Normalize the whitespace in the file content and the remote repository of DataModel - var normalizedFileContent = - networkManagerProviderWrapperFileContent.replaceAll(RegExp(r'\s'), ''); - // Check if the local repository providers already exist in the file for (var repositoryProvider in localRepositories) { var normalizedLocalRepositoryOfDataModel = diff --git a/tools/inventory_package_imports.dart b/tools/inventory_package_imports.dart index 11af4e8cd..56c5ff5f8 100644 --- a/tools/inventory_package_imports.dart +++ b/tools/inventory_package_imports.dart @@ -16,21 +16,22 @@ void main() { var appDir = Directory.current.path; // Define the paths - var appRoot = '$appDir/apps/health_campaign_field_worker_app/lib'; + var appRoot = appDir + '/apps/health_campaign_field_worker_app/lib'; var appFile = '$appRoot/app.dart'; var localizationDelegatesFilePath = - '$appRoot/utils/localization_delegates.dart'; + appRoot + '/utils/localization_delegates.dart'; var networkManagerProviderWrapperFilePath = - '$appRoot/widgets/network_manager_provider_wrapper.dart'; - var constantsFilePath = '$appRoot/utils/constants.dart'; - var utilsFilePath = '$appRoot/utils/utils.dart'; - var routerFilePath = '$appRoot/router/app_router.dart'; + appRoot + '/widgets/network_manager_provider_wrapper.dart'; + var constantsFilePath = appRoot + '/utils/constants.dart'; + var utilsFilePath = appRoot + '/utils/utils.dart'; + var routerFilePath = appRoot + '/router/app_router.dart'; var entityMapperFilePath = - '$appRoot/data/local_store/no_sql/schema/entity_mapper.dart'; - var syncDownFilePath = '$appRoot/data/repositories/sync/sync_down.dart'; - var homeFilePath = '$appRoot/pages/home.dart'; - var extensionsFilePath = '$appRoot/utils/extensions/extensions.dart'; - var contextUtilityFilePath = '$appRoot/utils/extensions/context_utility.dart'; + appRoot + '/data/local_store/no_sql/schema/entity_mapper.dart'; + var syncDownFilePath = appRoot + '/data/repositories/sync/sync_down.dart'; + var homeFilePath = appRoot + '/pages/home.dart'; + var extensionsFilePath = appRoot + '/utils/extensions/extensions.dart'; + var contextUtilityFilePath = + appRoot + '/utils/extensions/context_utility.dart'; // Set boundary in the context utility file _setBoundaryInContextUtilityFile(extensionsFilePath, contextUtilityFilePath); @@ -65,67 +66,26 @@ void main() { // Add inventory to home file _updateHome(homeFilePath); - // Run dart format on the updated file - Process.run('dart', ['format', syncDownFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the hcm_oplog.dart file - Process.run('dart', ['format', localizationDelegatesFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the network_manager_provider_wrapper.dart file - Process.run('dart', ['format', networkManagerProviderWrapperFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the constants.dart file - Process.run('dart', ['format', constantsFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the utils.dart file - Process.run('dart', ['format', utilsFilePath]).then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the app_router.dart file - Process.run('dart', ['format', routerFilePath]).then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the entity_mapper.dart file - Process.run('dart', ['format', entityMapperFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the home.dart file - Process.run('dart', ['format', homeFilePath]).then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the app.dart file - Process.run('dart', ['format', appFile]).then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the extensions.dart file - Process.run('dart', ['format', extensionsFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the context_utility.dart file - Process.run('dart', ['format', contextUtilityFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); + _formatFiles([ + appFile, + localizationDelegatesFilePath, + networkManagerProviderWrapperFilePath, + constantsFilePath, + utilsFilePath, + routerFilePath, + entityMapperFilePath, + syncDownFilePath, + homeFilePath, + extensionsFilePath, + contextUtilityFilePath, + ]); +} + +void _formatFiles(List filePaths) { + for (var filePath in filePaths) { + Process.runSync('dart', ['format', filePath]); + print('Formatted $filePath'); + } } void _setBoundaryInContextUtilityFile( @@ -304,7 +264,8 @@ void _updateHome(String homeFilePath) { var homeFileContent = homeFile.readAsStringSync(); // Check if the import statement already exists and add it if not - if (!homeFileContent.contains(importStatement)) { + if (!homeFileContent + .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { homeFileContent = importStatement + '\n' + homeFileContent; print('The import statement was added.'); } else { @@ -529,7 +490,8 @@ void _updateEntityMapperFile(String entityMapperFilePath) { var entityMapperFileContent = entityMapperFile.readAsStringSync(); // Check if the import statement already exists and add it if not - if (!entityMapperFileContent.contains(importStatement)) { + if (!entityMapperFileContent + .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { entityMapperFileContent = importStatement + '\n' + entityMapperFileContent; print('The import statement was added.'); } else { @@ -910,7 +872,8 @@ void _addRepoToNetworkManagerProviderWrapper( // Check if the import statements already exist in the file for (var importStatement in importStatements) { - if (!networkManagerProviderWrapperFileContent.contains(importStatement)) { + if (!networkManagerProviderWrapperFileContent + .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { // Add the import statement after the last import networkManagerProviderWrapperFileContent = networkManagerProviderWrapperFileContent.substring( @@ -921,6 +884,8 @@ void _addRepoToNetworkManagerProviderWrapper( .substring(endOfLastImport); endOfLastImport += importStatement.length + 1; print('The import statement was added: $importStatement'); + } else { + print('The import statement already exists.'); } } } diff --git a/tools/referral_reconciliation_imports.dart b/tools/referral_reconciliation_imports.dart index 821e5fa32..93f5dd9d4 100644 --- a/tools/referral_reconciliation_imports.dart +++ b/tools/referral_reconciliation_imports.dart @@ -19,21 +19,22 @@ void main() { var appDir = Directory.current.path; // Define the paths for the application root and the files to be modified - var appRoot = '$appDir/apps/health_campaign_field_worker_app/lib'; - var appFile = '$appRoot/app.dart'; + var appRoot = appDir + '/apps/health_campaign_field_worker_app/lib'; + var appFile = appRoot + '/app.dart'; var localizationDelegatesFilePath = - '$appRoot/utils/localization_delegates.dart'; + appRoot + '/utils/localization_delegates.dart'; var networkManagerProviderWrapperFilePath = - '$appRoot/widgets/network_manager_provider_wrapper.dart'; - var constantsFilePath = '$appRoot/utils/constants.dart'; - var utilsFilePath = '$appRoot/utils/utils.dart'; - var routerFilePath = '$appRoot/router/app_router.dart'; + appRoot + '/widgets/network_manager_provider_wrapper.dart'; + var constantsFilePath = appRoot + '/utils/constants.dart'; + var utilsFilePath = appRoot + '/utils/utils.dart'; + var routerFilePath = appRoot + '/router/app_router.dart'; var entityMapperFilePath = - '$appRoot/data/local_store/no_sql/schema/entity_mapper.dart'; - var syncDownFilePath = '$appRoot/data/repositories/sync/sync_down.dart'; - var homeFilePath = '$appRoot/pages/home.dart'; - var extensionsFilePath = '$appRoot/utils/extensions/extensions.dart'; - var contextUtilityFilePath = '$appRoot/utils/extensions/context_utility.dart'; + appRoot + '/data/local_store/no_sql/schema/entity_mapper.dart'; + var syncDownFilePath = appRoot + '/data/repositories/sync/sync_down.dart'; + var homeFilePath = appRoot + '/pages/home.dart'; + var extensionsFilePath = appRoot + '/utils/extensions/extensions.dart'; + var contextUtilityFilePath = + appRoot + '/utils/extensions/context_utility.dart'; // Set boundary in the context utility file _setBoundaryInContextUtilityFile(extensionsFilePath, contextUtilityFilePath); @@ -68,67 +69,26 @@ void main() { // Update the sync_down.dart file _updateSyncDownFile(syncDownFilePath); - // Run dart format on the localization_delegates.dart file - Process.run('dart', ['format', localizationDelegatesFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the network_manager_provider_wrapper.dart file - Process.run('dart', ['format', networkManagerProviderWrapperFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the constants.dart file - Process.run('dart', ['format', constantsFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the utils.dart file - Process.run('dart', ['format', utilsFilePath]).then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the router file - Process.run('dart', ['format', routerFilePath]).then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the entity_mapper.dart file - Process.run('dart', ['format', entityMapperFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the sync_down.dart file - Process.run('dart', ['format', syncDownFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the home.dart file - Process.run('dart', ['format', homeFilePath]).then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the app.dart file - Process.run('dart', ['format', appFile]).then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the extensions.dart file - Process.run('dart', ['format', extensionsFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the contextUtility.dart file - Process.run('dart', ['format', contextUtilityFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); + _formatFiles([ + localizationDelegatesFilePath, + networkManagerProviderWrapperFilePath, + constantsFilePath, + utilsFilePath, + routerFilePath, + entityMapperFilePath, + syncDownFilePath, + homeFilePath, + extensionsFilePath, + contextUtilityFilePath, + appFile, + ]); +} + +void _formatFiles(List filePaths) { + for (var filePath in filePaths) { + Process.runSync('dart', ['format', filePath]); + print('Formatted $filePath'); + } } void _addScannerBlocToAppFile(String appFilePath) { @@ -279,7 +239,8 @@ void _updateHome(String homeFilePath) { var homeFileContent = homeFile.readAsStringSync(); // Check if the import statement already exists and add it if not - if (!homeFileContent.contains(importStatement)) { + if (!homeFileContent + .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { homeFileContent = importStatement + '\n' + homeFileContent; print('The import statement was added.'); } else { @@ -452,7 +413,8 @@ void _updateEntityMapperFile(String entityMapperFilePath) { var entityMapperFileContent = entityMapperFile.readAsStringSync(); // Check if the import statement already exists and add it if not - if (!entityMapperFileContent.contains(importStatement)) { + if (!entityMapperFileContent + .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { entityMapperFileContent = importStatement + '\n' + entityMapperFileContent; print('The import statement was added.'); } else { diff --git a/tools/registration_delivery_imports.dart b/tools/registration_delivery_imports.dart index 9a0e46fb0..915bbd37a 100644 --- a/tools/registration_delivery_imports.dart +++ b/tools/registration_delivery_imports.dart @@ -19,21 +19,22 @@ void main() { var appDir = Directory.current.path; // Define the paths for the application root and the files to be modified - var appRoot = '$appDir/apps/health_campaign_field_worker_app/lib'; - var appFile = '$appRoot/app.dart'; + var appRoot = appDir + '/apps/health_campaign_field_worker_app/lib'; + var appFile = appRoot + '/app.dart'; var localizationDelegatesFilePath = - '$appRoot/utils/localization_delegates.dart'; + appRoot + '/utils/localization_delegates.dart'; var networkManagerProviderWrapperFilePath = - '$appRoot/widgets/network_manager_provider_wrapper.dart'; - var constantsFilePath = '$appRoot/utils/constants.dart'; - var utilsFilePath = '$appRoot/utils/utils.dart'; - var routerFilePath = '$appRoot/router/app_router.dart'; + appRoot + '/widgets/network_manager_provider_wrapper.dart'; + var constantsFilePath = appRoot + '/utils/constants.dart'; + var utilsFilePath = appRoot + '/utils/utils.dart'; + var routerFilePath = appRoot + '/router/app_router.dart'; var entityMapperFilePath = - '$appRoot/data/local_store/no_sql/schema/entity_mapper.dart'; - var syncDownFilePath = '$appRoot/data/repositories/sync/sync_down.dart'; - var homeFilePath = '$appRoot/pages/home.dart'; - var extensionsFilePath = '$appRoot/utils/extensions/extensions.dart'; - var contextUtilityFilePath = '$appRoot/utils/extensions/context_utility.dart'; + appRoot + '/data/local_store/no_sql/schema/entity_mapper.dart'; + var syncDownFilePath = appRoot + '/data/repositories/sync/sync_down.dart'; + var homeFilePath = appRoot + '/pages/home.dart'; + var extensionsFilePath = appRoot + '/utils/extensions/extensions.dart'; + var contextUtilityFilePath = + appRoot + '/utils/extensions/context_utility.dart'; // Set boundary in the context utility file _setBoundaryInContextUtilityFile(extensionsFilePath, contextUtilityFilePath); @@ -68,67 +69,26 @@ void main() { // Add the registration_delivery related mappers to the utils file _addRegNDeliveryMapperToUtilsFile(utilsFilePath: utilsFilePath); - // Run dart format on the network_manager_provider_wrapper.dart file - Process.run('dart', ['format', networkManagerProviderWrapperFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the constants.dart file - Process.run('dart', ['format', constantsFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the utils.dart file - Process.run('dart', ['format', utilsFilePath]).then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the app_router.dart file - Process.run('dart', ['format', routerFilePath]).then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the entity_mapper.dart file - Process.run('dart', ['format', entityMapperFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the sync_down.dart file - Process.run('dart', ['format', syncDownFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the home.dart file - Process.run('dart', ['format', homeFilePath]).then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the localization.dart file - Process.run('dart', ['format', localizationDelegatesFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the app.dart file - Process.run('dart', ['format', appFile]).then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the extensions.dart file - Process.run('dart', ['format', extensionsFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); - - // Run dart format on the context_utility.dart file - Process.run('dart', ['format', contextUtilityFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); + _formatFiles([ + appFile, + localizationDelegatesFilePath, + networkManagerProviderWrapperFilePath, + constantsFilePath, + utilsFilePath, + routerFilePath, + entityMapperFilePath, + syncDownFilePath, + homeFilePath, + extensionsFilePath, + contextUtilityFilePath, + ]); +} + +void _formatFiles(List filePaths) { + for (var filePath in filePaths) { + Process.runSync('dart', ['format', filePath]); + print('Formatted $filePath'); + } } void _addScannerBlocToAppFile(String appFilePath) { @@ -259,7 +219,8 @@ void _updateHome(String homeFilePath) { var homeFileContent = homeFile.readAsStringSync(); // Check if the import statement already exists and add it if not - if (!homeFileContent.contains(importStatement)) { + if (!homeFileContent + .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { homeFileContent = importStatement + '\n' + homeFileContent; print('The import statement was added.'); } else { @@ -697,7 +658,8 @@ void _updateSyncDownFile(String syncDownFilePath) { var syncDownFileContent = syncDownFile.readAsStringSync(); // Check if the import statement already exists and add it if not - if (!syncDownFileContent.contains(importStatement)) { + if (!syncDownFileContent + .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { syncDownFileContent = importStatement + '\n' + syncDownFileContent; print('The import statement was added to sync_down.dart.'); } else { @@ -780,7 +742,8 @@ void _updateEntityMapperFile(String entityMapperFilePath) { var entityMapperFileContent = entityMapperFile.readAsStringSync(); // Check if the import statement already exists and add it if not - if (!entityMapperFileContent.contains(importStatement)) { + if (!entityMapperFileContent + .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { entityMapperFileContent = importStatement + '\n' + entityMapperFileContent; print('The import statement was added.'); } else { @@ -1228,7 +1191,8 @@ void _addRepoToNetworkManagerProviderWrapper( // Check if the import statements already exist in the file for (var importStatement in importStatements) { - if (!networkManagerProviderWrapperFileContent.contains(importStatement)) { + if (!networkManagerProviderWrapperFileContent + .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { // Add the import statement after the last import networkManagerProviderWrapperFileContent = networkManagerProviderWrapperFileContent.substring( @@ -1239,6 +1203,8 @@ void _addRepoToNetworkManagerProviderWrapper( .substring(endOfLastImport); endOfLastImport += importStatement.length + 1; print('The import statement was added: $importStatement'); + } else { + print('The import statement already exists.'); } } } From abba3c869fa0d8bf1ef21fe1fda0e52e93848c16 Mon Sep 17 00:00:00 2001 From: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Date: Tue, 4 Jun 2024 19:22:42 +0530 Subject: [PATCH 009/241] HCM v1.4 Bug Bash Fixes (#432) * HCM v1.4 Bug Bash Fixes * HLM-6145:: Resource Card Duplicate validation added * Complaint user type and source Moved to constants * HLM-6140:: Tasks Status filter based on each household head --- .../complaints_registration.dart | 67 +- .../no_sql/schema/entity_mapper.dart | 4 + .../entities/additional_fields_type.dart | 59 +- .../additional_fields_type.mapper.dart | 8 + .../lib/pages/boundary_selection.dart | 1 - .../lib/pages/qr_details_page.dart | 2 +- .../pubspec.yaml | 2 +- packages/attendance_management/pubspec.yaml | 2 +- packages/digit_components/CHANGELOG.md | 6 +- .../atoms/digit_reactive_search_dropdown.dart | 12 +- .../atoms/searchable_dropdown_field.dart | 4 +- packages/digit_components/pubspec.yaml | 2 +- .../data/repositories/remote/pgr_service.dart | 4 +- .../models/pgr_complaints/pgr_complaints.dart | 31 +- .../digit_scanner/lib/pages/qr_scanner.dart | 57 +- .../lib/utils/scanner_utils.dart | 14 +- packages/digit_scanner/pubspec.yaml | 2 +- .../lib/blocs/stock_reconciliation.dart | 25 +- .../lib/data/repositories/local/stock.dart | 15 +- packages/inventory_management/pubspec.yaml | 2 +- .../lib/blocs/referral_recon_service.dart | 134 -- .../blocs/referral_recon_service.freezed.dart | 2007 ----------------- .../create_hf_referral_wrapper.dart | 7 +- .../reason_checklist_preview.dart | 20 +- .../record_reason_checklist.dart | 49 +- .../record_referral_details.dart | 16 +- .../search_referral_reconciliations.dart | 14 +- packages/referral_reconciliation/pubspec.yaml | 2 +- .../blocs/referral_recon_service_test.dart | 89 - .../beneficiary/deliver_intervention.dart | 87 +- .../beneficiary/view_beneficiary_card.dart | 12 +- packages/registration_delivery/pubspec.yaml | 2 +- 32 files changed, 324 insertions(+), 2434 deletions(-) delete mode 100644 packages/referral_reconciliation/lib/blocs/referral_recon_service.dart delete mode 100644 packages/referral_reconciliation/lib/blocs/referral_recon_service.freezed.dart delete mode 100644 packages/referral_reconciliation/test/blocs/referral_recon_service_test.dart diff --git a/apps/health_campaign_field_worker_app/lib/blocs/complaints_registration/complaints_registration.dart b/apps/health_campaign_field_worker_app/lib/blocs/complaints_registration/complaints_registration.dart index f21d960f0..2f08d9f79 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/complaints_registration/complaints_registration.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/complaints_registration/complaints_registration.dart @@ -6,9 +6,9 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import '../../models/complaints/complaints.dart'; +import '../../models/entities/additional_fields_type.dart'; import '../../utils/environment_config.dart'; import '../../utils/typedefs.dart'; -import '../../utils/utils.dart'; part 'complaints_registration.freezed.dart'; @@ -119,37 +119,50 @@ class ComplaintsRegistrationBloc var auditDetails = AuditDetails( createdBy: event.userId, createdTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: event.userId, ); final pgrServiceModel = PgrServiceModel( - clientReferenceId: referenceId, - tenantId: envConfig.variables.tenantId, - serviceCode: serviceCode, - description: description, - source: 'mobile', - applicationStatus: PgrServiceApplicationStatus.created, - user: PgrComplainantModel( + clientReferenceId: referenceId, tenantId: envConfig.variables.tenantId, - clientReferenceId: IdGen.i.identifier, - complaintClientReferenceId: referenceId, - name: complaintDetailsModel.complainantName, - mobileNumber: complaintDetailsModel.complainantContactNumber, + serviceCode: serviceCode, + description: description, + source: AdditionalFieldsType.mobile.toValue(), + applicationStatus: PgrServiceApplicationStatus.created, + user: PgrComplainantModel( + tenantId: envConfig.variables.tenantId, + clientReferenceId: IdGen.i.identifier, + complaintClientReferenceId: referenceId, + name: complaintDetailsModel.complainantName, + mobileNumber: complaintDetailsModel.complainantContactNumber, + auditDetails: auditDetails, + clientAuditDetails: ClientAuditDetails( + createdBy: event.userId, + createdTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: event.userId, + ), + uuid: event.userId, + userName: complaintDetailsModel.complainantContactNumber, + type: AdditionalFieldsType.employee.toValue(), + ), + address: address.copyWith( + relatedClientReferenceId: referenceId, + ), auditDetails: auditDetails, - uuid: event.userId, - userName: complaintDetailsModel.complainantContactNumber, - type: 'EMPLOYEE', - ), - address: address.copyWith( - relatedClientReferenceId: referenceId, - ), - auditDetails: auditDetails, - additionalDetail: PgrAdditionalDetails( - supervisorName: complaintDetailsModel.supervisorName, - supervisorContactNumber: - complaintDetailsModel.supervisorContactNumber, - otherComplaintDescription: otherComplaintTypeDescription, - ).toString(), - ); + additionalDetail: PgrAdditionalDetails( + supervisorName: complaintDetailsModel.supervisorName, + supervisorContactNumber: + complaintDetailsModel.supervisorContactNumber, + otherComplaintDescription: otherComplaintTypeDescription, + ).toString(), + clientAuditDetails: ClientAuditDetails( + createdBy: event.userId, + createdTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: event.userId, + )); await pgrServiceRepository.create(pgrServiceModel); emit(value.copyWith(loading: false)); diff --git a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/entity_mapper.dart b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/entity_mapper.dart index 7e88da736..d44596109 100644 --- a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/entity_mapper.dart +++ b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/entity_mapper.dart @@ -76,6 +76,10 @@ class EntityMapper extends EntityMapperListener { final entity = AttendanceLogModelMapper.fromJson(entityString); return entity; + case "complaints": + final entity = PgrServiceModelMapper.fromJson(entityString); + return entity; + default: final entity = EntityModelMapper.fromJson(entityString); return entity; diff --git a/apps/health_campaign_field_worker_app/lib/models/entities/additional_fields_type.dart b/apps/health_campaign_field_worker_app/lib/models/entities/additional_fields_type.dart index efda497cc..1fbf8da3e 100644 --- a/apps/health_campaign_field_worker_app/lib/models/entities/additional_fields_type.dart +++ b/apps/health_campaign_field_worker_app/lib/models/entities/additional_fields_type.dart @@ -2,24 +2,45 @@ import 'package:dart_mappable/dart_mappable.dart'; part 'additional_fields_type.mapper.dart'; + @MappableEnum(caseStyle: CaseStyle.upperCase) enum AdditionalFieldsType { - @MappableValue("deliveryStrategy") deliveryStrategy, - @MappableValue("cycleIndex") cycleIndex, - @MappableValue("doseIndex") doseIndex, - @MappableValue("dateOfVerification") dateOfVerification, - @MappableValue("dateOfAdministration") dateOfAdministration, - @MappableValue("dateOfDelivery") dateOfDelivery, - @MappableValue("referralComments") referralComments, - @MappableValue("cycle") cycle, - @MappableValue("hfCoordinator") hFCoordinator, - @MappableValue("referredBy") referredBy, - @MappableValue("dateOfEvaluation") dateOfEvaluation, - @MappableValue("nameOfReferral") nameOfReferral, - @MappableValue("gender") gender, - @MappableValue("age") age, - @MappableValue("deliveryComment") deliveryComment, - @MappableValue("latitude") latitude, - @MappableValue("longitude") longitude, - ; -} \ No newline at end of file + @MappableValue("deliveryStrategy") + deliveryStrategy, + @MappableValue("cycleIndex") + cycleIndex, + @MappableValue("doseIndex") + doseIndex, + @MappableValue("dateOfVerification") + dateOfVerification, + @MappableValue("dateOfAdministration") + dateOfAdministration, + @MappableValue("dateOfDelivery") + dateOfDelivery, + @MappableValue("referralComments") + referralComments, + @MappableValue("cycle") + cycle, + @MappableValue("hfCoordinator") + hFCoordinator, + @MappableValue("referredBy") + referredBy, + @MappableValue("dateOfEvaluation") + dateOfEvaluation, + @MappableValue("nameOfReferral") + nameOfReferral, + @MappableValue("gender") + gender, + @MappableValue("age") + age, + @MappableValue("deliveryComment") + deliveryComment, + @MappableValue("latitude") + latitude, + @MappableValue("longitude") + longitude, + @MappableValue("EMPLOYEE") + employee, + @MappableValue("mobile") + mobile, +} diff --git a/apps/health_campaign_field_worker_app/lib/models/entities/additional_fields_type.mapper.dart b/apps/health_campaign_field_worker_app/lib/models/entities/additional_fields_type.mapper.dart index 8e1f6fec5..18199581f 100644 --- a/apps/health_campaign_field_worker_app/lib/models/entities/additional_fields_type.mapper.dart +++ b/apps/health_campaign_field_worker_app/lib/models/entities/additional_fields_type.mapper.dart @@ -59,6 +59,10 @@ class AdditionalFieldsTypeMapper extends EnumMapper { return AdditionalFieldsType.latitude; case "longitude": return AdditionalFieldsType.longitude; + case "EMPLOYEE": + return AdditionalFieldsType.employee; + case "mobile": + return AdditionalFieldsType.mobile; default: throw MapperException.unknownEnumValue(value); } @@ -101,6 +105,10 @@ class AdditionalFieldsTypeMapper extends EnumMapper { return "latitude"; case AdditionalFieldsType.longitude: return "longitude"; + case AdditionalFieldsType.employee: + return "EMPLOYEE"; + case AdditionalFieldsType.mobile: + return "mobile"; } } } diff --git a/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart b/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart index 8a08e6fdc..8e558b214 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart @@ -153,7 +153,6 @@ class _BoundarySelectionPageState }, onSelected: (value) { if (value == null) return; - value as BoundaryModel; context.read().add( BoundarySearchEvent( diff --git a/apps/health_campaign_field_worker_app/lib/pages/qr_details_page.dart b/apps/health_campaign_field_worker_app/lib/pages/qr_details_page.dart index f952c591d..682b783ae 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/qr_details_page.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/qr_details_page.dart @@ -31,7 +31,7 @@ class _UserQRDetailsPageState extends LocalizedState { Widget build(BuildContext context) { return PopScope( onPopInvoked: (didPop) { - context.router.popUntilRouteWithName(HomeRoute.name); + context.router.replaceAll([HomeRoute()]); }, child: Scaffold( body: BlocBuilder( diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index ebbc2a366..0e27019bf 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -18,7 +18,7 @@ dependencies: sqlite3_flutter_libs: ^0.5.10 path_provider: ^2.0.11 path: ^1.8.2 - digit_components: ^1.0.0 + digit_components: ^1.0.0+1 auto_route: ^7.8.4 flutter_bloc: ^8.1.1 collection: ^1.16.0 diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index 3eba801d1..ace9c459b 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0 + digit_components: ^1.0.0+1 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 diff --git a/packages/digit_components/CHANGELOG.md b/packages/digit_components/CHANGELOG.md index ce683796f..10dedda45 100644 --- a/packages/digit_components/CHANGELOG.md +++ b/packages/digit_components/CHANGELOG.md @@ -102,4 +102,8 @@ * Removed flutter_localizations dependency ## 1.0.0 -* Stable release \ No newline at end of file +* Stable release + + +## 1.0.0+1 +* Stable release with searchable dropdown fix \ No newline at end of file diff --git a/packages/digit_components/lib/widgets/atoms/digit_reactive_search_dropdown.dart b/packages/digit_components/lib/widgets/atoms/digit_reactive_search_dropdown.dart index eb0d85926..225d9b3f3 100644 --- a/packages/digit_components/lib/widgets/atoms/digit_reactive_search_dropdown.dart +++ b/packages/digit_components/lib/widgets/atoms/digit_reactive_search_dropdown.dart @@ -11,7 +11,7 @@ class DigitReactiveSearchDropdown extends StatefulWidget { final String formControlName; final bool isRequired; final bool enabled; - final String Function(T value) valueMapper; + final String Function(dynamic value) valueMapper; final String? validationMessage; final EdgeInsets? padding; final void Function(dynamic)? onSelected; @@ -73,13 +73,13 @@ class _DigitReactiveSearchDropdownState : const DigitColors().woodsmokeBlack), ), findFn: (dynamic str) async => widget.menuItems, - filterFn: (dynamic item, str) => widget + filterFn: (T item, str) => widget .valueMapper(item) .toLowerCase() .contains(str.toLowerCase()), dropdownItemSeparator: const DigitDivider(), - dropdownItemFn: - (dynamic item, position, focused, selected, onTap) => ListTile( + dropdownItemFn: (T item, position, focused, selected, onTap) => + ListTile( title: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, @@ -88,7 +88,7 @@ class _DigitReactiveSearchDropdownState height: 8, ), Text( - widget.valueMapper(item), + widget.valueMapper(item as dynamic).toString(), style: TextStyle( color: selected ? DigitTheme.instance.colorScheme.secondary @@ -129,7 +129,7 @@ class _DigitReactiveSearchDropdownState .setErrors({'': true}); } if (widget.onFieldTap != null) { - widget.onFieldTap!(null); + widget.onFieldTap; } }, ), diff --git a/packages/digit_components/lib/widgets/atoms/searchable_dropdown_field.dart b/packages/digit_components/lib/widgets/atoms/searchable_dropdown_field.dart index d33489a7a..e6ef894b8 100644 --- a/packages/digit_components/lib/widgets/atoms/searchable_dropdown_field.dart +++ b/packages/digit_components/lib/widgets/atoms/searchable_dropdown_field.dart @@ -473,8 +473,8 @@ class SearchDropdownFormFieldState extends State } _clearValue() { - var item = ''; - _effectiveController!.value = item; + T? item; + _effectiveController?.value = item; if (widget.onChanged != null) { widget.onChanged!(_selectedItem); diff --git a/packages/digit_components/pubspec.yaml b/packages/digit_components/pubspec.yaml index c3fd090f3..dad5e89b5 100644 --- a/packages/digit_components/pubspec.yaml +++ b/packages/digit_components/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_components description: Digit UI Design specification Flutter widgets. Import this package by adding digit_components in respective pubspec.yaml dependencies. -version: 1.0.0 +version: 1.0.0+1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_components repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/digit_data_model/lib/data/repositories/remote/pgr_service.dart b/packages/digit_data_model/lib/data/repositories/remote/pgr_service.dart index 76c9ec2f7..0e11a5a89 100644 --- a/packages/digit_data_model/lib/data/repositories/remote/pgr_service.dart +++ b/packages/digit_data_model/lib/data/repositories/remote/pgr_service.dart @@ -39,8 +39,8 @@ class PgrServiceRemoteRepository } FutureOr> searchWithoutClientReferenceId( - PgrServiceSearchModel query, - {int? offSet, + PgrServiceSearchModel query, { + int? offSet, int? limit, }) async { Response response; diff --git a/packages/digit_data_model/lib/models/pgr_complaints/pgr_complaints.dart b/packages/digit_data_model/lib/models/pgr_complaints/pgr_complaints.dart index 6cbf93258..a28dbf64f 100644 --- a/packages/digit_data_model/lib/models/pgr_complaints/pgr_complaints.dart +++ b/packages/digit_data_model/lib/models/pgr_complaints/pgr_complaints.dart @@ -1,8 +1,8 @@ import 'dart:convert'; import 'package:dart_mappable/dart_mappable.dart'; -import 'package:drift/drift.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:drift/drift.dart'; part 'pgr_complaints.mapper.dart'; @@ -14,8 +14,8 @@ class PgrComplaintModel extends EntityModel with PgrComplaintModelMappable { const PgrComplaintModel({ required this.service, this.workflow, - super.isDeleted = false, - super.auditDetails, + super.isDeleted = false, + super.auditDetails, }) : super(); } @@ -53,7 +53,7 @@ class PgrComplainantModel extends EntityModel with PgrComplainantModelMappable { this.isDeleted = false, this.rowVersion = 1, super.auditDetails, - + super.clientAuditDetails, }) : super(); PgrComplainantCompanion get companion { @@ -87,13 +87,14 @@ class PgrRolesModel extends EntityModel with PgrRolesModelMappable { const PgrRolesModel({ required this.name, required this.code, - super.isDeleted = false, - super.auditDetails, + super.isDeleted = false, + super.auditDetails, }) : super(); } @MappableClass(ignoreNull: true) -class PgrServiceSearchModel extends EntitySearchModel with PgrServiceSearchModelMappable { +class PgrServiceSearchModel extends EntitySearchModel + with PgrServiceSearchModelMappable { final String? tenantId; final String? serviceRequestId; final String? clientReferenceId; @@ -116,10 +117,10 @@ class PgrServiceSearchModel extends EntitySearchModel with PgrServiceSearchModel this.clientReferenceId, this.complainantMobileNumber, this.complaintNumber, - super.isDeleted = false, - super.auditDetails, - super.additionalFields, - super.boundaryCode, + super.isDeleted = false, + super.auditDetails, + super.additionalFields, + super.boundaryCode, }) : super(); } @@ -142,8 +143,7 @@ class PgrServiceModel extends EntityModel with PgrServiceModelMappable { final PgrAddressModel address; final String? additionalDetail; - - const PgrServiceModel( { + const PgrServiceModel({ required this.clientReferenceId, this.active = true, this.id, @@ -160,7 +160,7 @@ class PgrServiceModel extends EntityModel with PgrServiceModelMappable { required this.address, this.additionalDetail, super.auditDetails, - + super.clientAuditDetails, }) : super(isDeleted: false); PgrServiceCompanion get companion { @@ -199,7 +199,8 @@ class PgrWorkflowModel extends EntityModel with PgrWorkflowModelMappable { @MappableField(key: 'assignes') this.assignees = const [], required this.comments, super.auditDetails, - super.isDeleted = false, + super.clientAuditDetails, + super.isDeleted = false, }) : super(); } diff --git a/packages/digit_scanner/lib/pages/qr_scanner.dart b/packages/digit_scanner/lib/pages/qr_scanner.dart index f14e9b6af..297151349 100644 --- a/packages/digit_scanner/lib/pages/qr_scanner.dart +++ b/packages/digit_scanner/lib/pages/qr_scanner.dart @@ -193,6 +193,8 @@ class _DigitScannerPageState extends LocalizedState { ); setState(() { manualCode = true; + _resourceController.value = + const TextEditingValue(); }); }, child: Padding( @@ -226,8 +228,11 @@ class _DigitScannerPageState extends LocalizedState { onPressed: () async { if (widget.isGS1code && result.length < widget.quantity) { - DigitScannerUtils() - .buildDialog(context, localizations); + DigitScannerUtils().buildDialog( + context, + localizations, + widget.quantity, + ); } else { final bloc = context.read(); bloc.add(DigitScannerEvent.handleScanner( @@ -246,12 +251,12 @@ class _DigitScannerPageState extends LocalizedState { Positioned( bottom: (kPadding * 7.5), height: widget.isGS1code - ? state.barCodes.length < 10 + ? state.barCodes.length < 3 ? (state.barCodes.length * 60) + 80 - : MediaQuery.of(context).size.height / 2.2 - : state.qrCodes.length < 10 - ? (state.qrCodes.length * 60) + 80 - : MediaQuery.of(context).size.height / 2, + : MediaQuery.of(context).size.height / 3 + : state.qrCodes.length < 2 + ? ((state.qrCodes.length + 1) * 60) + : MediaQuery.of(context).size.height / 4, width: MediaQuery.of(context).size.width, child: Container( width: 100, @@ -421,22 +426,28 @@ class _DigitScannerPageState extends LocalizedState { ), footer: DigitElevatedButton( onPressed: () async { - final bloc = context.read(); - codes.add(_resourceController.value.text); - bloc.add( - DigitScannerEvent.handleScanner( - barCode: state.barCodes, - qrCode: codes, - ), - ); - if (widget.isGS1code && - result.length < widget.quantity) { - DigitScannerUtils().buildDialog( - context, - localizations, - ); - } - }, + final bloc = context.read(); + codes.add(_resourceController.value.text); + bloc.add( + DigitScannerEvent.handleScanner( + barCode: state.barCodes, + qrCode: codes, + ), + ); + if (widget.isGS1code && + result.length < widget.quantity) { + DigitScannerUtils().buildDialog( + context, + localizations, + widget.quantity, + ); + } + + setState(() { + manualCode = false; + initializeCameras(); + }); + }, child: Text(localizations.translate( i18.common.coreCommonSubmit, )), diff --git a/packages/digit_scanner/lib/utils/scanner_utils.dart b/packages/digit_scanner/lib/utils/scanner_utils.dart index 6e8583cd9..97f9cc158 100644 --- a/packages/digit_scanner/lib/utils/scanner_utils.dart +++ b/packages/digit_scanner/lib/utils/scanner_utils.dart @@ -16,16 +16,22 @@ import 'constants.dart'; class DigitScannerUtils { void buildDialog( - BuildContext context, ScannerLocalization localizations) async { + BuildContext context, + ScannerLocalization localizations, + int quantity, + ) async { + var contentLocalization = localizations + .translate( + i18.scanner.scannerDialogContent, + ) + .replaceAll('{quantity}', quantity.toString()); await DigitDialog.show( context, options: DigitDialogOptions( titleText: localizations.translate( i18.scanner.scannerDialogTitle, ), - contentText: localizations.translate( - i18.scanner.scannerDialogContent, - ), + contentText: contentLocalization, primaryAction: DigitDialogActions( label: localizations.translate( i18.scanner.scannerDialogPrimaryAction, diff --git a/packages/digit_scanner/pubspec.yaml b/packages/digit_scanner/pubspec.yaml index 9fc821418..4a2027885 100644 --- a/packages/digit_scanner/pubspec.yaml +++ b/packages/digit_scanner/pubspec.yaml @@ -38,7 +38,7 @@ dependencies: google_mlkit_barcode_scanning: ^0.10.0 camera: ^0.10.5+7 gs1_barcode_parser: ^1.0.5 - digit_components: ^1.0.0 + digit_components: ^1.0.0+1 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 overlay_builder: ^1.1.0 diff --git a/packages/inventory_management/lib/blocs/stock_reconciliation.dart b/packages/inventory_management/lib/blocs/stock_reconciliation.dart index 710d17be2..0d18c99e3 100644 --- a/packages/inventory_management/lib/blocs/stock_reconciliation.dart +++ b/packages/inventory_management/lib/blocs/stock_reconciliation.dart @@ -72,9 +72,9 @@ class StockReconciliationBloc // Fetching the stock reconciliation details final receivedStocks = (await stockRepository.search( StockSearchModel( - productVariantId: productVariantId, - receiverId: facilityId, - ), + productVariantId: productVariantId, + receiverId: facilityId, + transactionType: [TransactionType.received.toValue()]), )) .where((element) => element.auditDetails != null && @@ -83,9 +83,9 @@ class StockReconciliationBloc .toList(); final sentStocks = (await stockRepository.search( StockSearchModel( - productVariantId: productVariantId, - senderId: facilityId, - ), + productVariantId: productVariantId, + senderId: facilityId, + transactionType: [TransactionType.dispatched.toValue()]), )) .where((element) => element.auditDetails != null && @@ -205,16 +205,19 @@ class StockReconciliationState with _$StockReconciliationState { num get stockLost => _getQuantityCount( stockModels.where((e) => e.transactionType == TransactionType.dispatched.toValue() && - (e.transactionReason == TransactionReason.lostInTransit.toValue()|| - e.transactionReason == TransactionReason.lostInStorage.toValue())), + (e.transactionReason == TransactionReason.lostInTransit.toValue() || + e.transactionReason == + TransactionReason.lostInStorage.toValue())), ); // Getter for damaged stock num get stockDamaged => _getQuantityCount( stockModels.where((e) => e.transactionType == TransactionType.dispatched.toValue() && - (e.transactionReason == TransactionReason.damagedInTransit.toValue() || - e.transactionReason == TransactionReason.damagedInStorage.toValue())), + (e.transactionReason == + TransactionReason.damagedInTransit.toValue() || + e.transactionReason == + TransactionReason.damagedInStorage.toValue())), ); // Getter for in-hand stock @@ -229,4 +232,4 @@ class StockReconciliationState with _$StockReconciliationState { (old, e) => (num.tryParse(e.quantity ?? '') ?? 0.0) + old, ); } -} \ No newline at end of file +} diff --git a/packages/inventory_management/lib/data/repositories/local/stock.dart b/packages/inventory_management/lib/data/repositories/local/stock.dart index abfdc6355..be9590c6f 100644 --- a/packages/inventory_management/lib/data/repositories/local/stock.dart +++ b/packages/inventory_management/lib/data/repositories/local/stock.dart @@ -56,12 +56,15 @@ class StockLocalRepository sql.stock.auditCreatedBy.equals( userId, ), - if (query.transactionReason != null) - query.transactionReason!.isEmpty - ? sql.stock.transactionReason.isNull() - : sql.stock.transactionReason.isIn( - query.transactionReason!, - ), + if (query.transactionType != null) + sql.stock.transactionType.isIn( + query.transactionType!, + ), + if (query.transactionReason != null && + query.transactionReason!.isNotEmpty) + sql.stock.transactionReason.isIn( + query.transactionReason!, + ), ], ), )) diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index 065a455a0..afb5f3cba 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0 + digit_components: ^1.0.0+1 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 diff --git a/packages/referral_reconciliation/lib/blocs/referral_recon_service.dart b/packages/referral_reconciliation/lib/blocs/referral_recon_service.dart deleted file mode 100644 index 90069ce0f..000000000 --- a/packages/referral_reconciliation/lib/blocs/referral_recon_service.dart +++ /dev/null @@ -1,134 +0,0 @@ -import 'dart:async'; - -import 'package:digit_data_model/data_model.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:referral_reconciliation/utils/typedefs.dart'; - -part 'referral_recon_service.freezed.dart'; - -// Define a typedef for the emitter function used to emit state changes. -typedef ReferralReconServiceEmitter = Emitter; - -// Define the Bloc responsible for managing ReferralReconService events and states. -class ReferralReconServiceBloc - extends Bloc { - final ServiceDataRepository serviceDataRepository; - // Constructor initializes the Bloc with an initial state and sets up event handlers. - ReferralReconServiceBloc(super.initialState, - {required this.serviceDataRepository}) { - on(_handleCreate); - on(_multichecklistChanged); - on(_handleSearch); - on(_handlereset); - on(_handleSelect); - } - - // Event handler for when the multichecklist changes. - FutureOr _multichecklistChanged( - ReferralReconServiceChecklistEvent event, - ReferralReconServiceEmitter emit, - ) async { - emit(ReferralReconServiceState.multiCheckListChanged( - value: event.value, - submitTriggered: event.submitTriggered, - )); - } - - // Event handler for creating a new service. - FutureOr _handleCreate( - ReferralReconServiceCreateEvent event, - ReferralReconServiceEmitter emit, - ) async { - try { - await serviceDataRepository.create(event.serviceModel); - } catch (e) { - print(e); - } - } - - // Event handler for resetting selected services. - FutureOr _handlereset( - ReferralReconServiceResetEvent event, - ReferralReconServiceEmitter emit, - ) async { - emit(ReferralReconServiceSearchState( - selectedService: null, - serviceList: event.serviceList, - )); - } - - // Event handler for searching services. - FutureOr _handleSearch( - ReferralReconServiceSearchEvent event, - ReferralReconServiceEmitter emit, - ) async { - final selectedChecklist = - await serviceDataRepository.search(event.serviceSearchModel); - emit(ReferralReconServiceSearchState( - serviceList: selectedChecklist.isNotEmpty ? selectedChecklist : [])); - } - - // Event handler for selecting a service. - FutureOr _handleSelect( - ReferralReconServiceSelectionEvent event, - ReferralReconServiceEmitter emit, - ) async { - state.mapOrNull( - serviceSearch: (value) => emit(value.copyWith( - selectedService: event.service, - )), - ); - } -} - -// Define freezed classes for the ReferralReconService events. -@freezed -class ReferralReconServiceEvent with _$ReferralReconServiceEvent { - const factory ReferralReconServiceEvent.create( - {required ServiceModel serviceModel}) = ReferralReconServiceCreateEvent; - - const factory ReferralReconServiceEvent.search({ - required ServiceSearchModel serviceSearchModel, - }) = ReferralReconServiceSearchEvent; - - const factory ReferralReconServiceEvent.multichecklistChanged({ - required String value, - required bool submitTriggered, - }) = ReferralReconServiceChecklistEvent; - const factory ReferralReconServiceEvent.selectService({ - required ServiceModel service, - }) = ReferralReconServiceSelectionEvent; - - const factory ReferralReconServiceEvent.resetSelected({ - required List serviceList, - }) = ReferralReconServiceResetEvent; -} - -// Define freezed classes for the ReferralReconService states. -@freezed -class ReferralReconServiceState with _$ReferralReconServiceState { - const factory ReferralReconServiceState.empty() = - ReferralReconServiceEmptyState; - - const factory ReferralReconServiceState.isLoading() = - ReferralReconServiceIsloadingState; - - const factory ReferralReconServiceState.multiCheckListChanged({ - @Default('') String value, - @Default(false) bool submitTriggered, - }) = ReferralReconServiceMultichecklistChangedState; - - const factory ReferralReconServiceState.serviceCreate({ - required ServiceModel serviceList, - ServiceModel? selectedService, - @Default(false) bool loading, - @Default(false) bool isEditing, - }) = ReferralReconServiceCreateState; - - const factory ReferralReconServiceState.serviceSearch({ - required List serviceList, - ServiceModel? selectedService, - @Default(false) bool loading, - }) = ReferralReconServiceSearchState; -} diff --git a/packages/referral_reconciliation/lib/blocs/referral_recon_service.freezed.dart b/packages/referral_reconciliation/lib/blocs/referral_recon_service.freezed.dart deleted file mode 100644 index 96710b003..000000000 --- a/packages/referral_reconciliation/lib/blocs/referral_recon_service.freezed.dart +++ /dev/null @@ -1,2007 +0,0 @@ -// coverage:ignore-file -// GENERATED CODE - DO NOT MODIFY BY HAND -// ignore_for_file: type=lint -// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark - -part of 'referral_recon_service.dart'; - -// ************************************************************************** -// FreezedGenerator -// ************************************************************************** - -T _$identity(T value) => value; - -final _privateConstructorUsedError = UnsupportedError( - 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); - -/// @nodoc -mixin _$ReferralReconServiceEvent { - @optionalTypeArgs - TResult when({ - required TResult Function(ServiceModel serviceModel) create, - required TResult Function(ServiceSearchModel serviceSearchModel) search, - required TResult Function(String value, bool submitTriggered) - multichecklistChanged, - required TResult Function(ServiceModel service) selectService, - required TResult Function(List serviceList) resetSelected, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult? whenOrNull({ - TResult? Function(ServiceModel serviceModel)? create, - TResult? Function(ServiceSearchModel serviceSearchModel)? search, - TResult? Function(String value, bool submitTriggered)? - multichecklistChanged, - TResult? Function(ServiceModel service)? selectService, - TResult? Function(List serviceList)? resetSelected, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(ServiceModel serviceModel)? create, - TResult Function(ServiceSearchModel serviceSearchModel)? search, - TResult Function(String value, bool submitTriggered)? multichecklistChanged, - TResult Function(ServiceModel service)? selectService, - TResult Function(List serviceList)? resetSelected, - required TResult orElse(), - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult map({ - required TResult Function(ReferralReconServiceCreateEvent value) create, - required TResult Function(ReferralReconServiceSearchEvent value) search, - required TResult Function(ReferralReconServiceChecklistEvent value) - multichecklistChanged, - required TResult Function(ReferralReconServiceSelectionEvent value) - selectService, - required TResult Function(ReferralReconServiceResetEvent value) - resetSelected, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(ReferralReconServiceCreateEvent value)? create, - TResult? Function(ReferralReconServiceSearchEvent value)? search, - TResult? Function(ReferralReconServiceChecklistEvent value)? - multichecklistChanged, - TResult? Function(ReferralReconServiceSelectionEvent value)? selectService, - TResult? Function(ReferralReconServiceResetEvent value)? resetSelected, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult maybeMap({ - TResult Function(ReferralReconServiceCreateEvent value)? create, - TResult Function(ReferralReconServiceSearchEvent value)? search, - TResult Function(ReferralReconServiceChecklistEvent value)? - multichecklistChanged, - TResult Function(ReferralReconServiceSelectionEvent value)? selectService, - TResult Function(ReferralReconServiceResetEvent value)? resetSelected, - required TResult orElse(), - }) => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $ReferralReconServiceEventCopyWith<$Res> { - factory $ReferralReconServiceEventCopyWith(ReferralReconServiceEvent value, - $Res Function(ReferralReconServiceEvent) then) = - _$ReferralReconServiceEventCopyWithImpl<$Res, ReferralReconServiceEvent>; -} - -/// @nodoc -class _$ReferralReconServiceEventCopyWithImpl<$Res, - $Val extends ReferralReconServiceEvent> - implements $ReferralReconServiceEventCopyWith<$Res> { - _$ReferralReconServiceEventCopyWithImpl(this._value, this._then); - - // ignore: unused_field - final $Val _value; - // ignore: unused_field - final $Res Function($Val) _then; -} - -/// @nodoc -abstract class _$$ReferralReconServiceCreateEventImplCopyWith<$Res> { - factory _$$ReferralReconServiceCreateEventImplCopyWith( - _$ReferralReconServiceCreateEventImpl value, - $Res Function(_$ReferralReconServiceCreateEventImpl) then) = - __$$ReferralReconServiceCreateEventImplCopyWithImpl<$Res>; - @useResult - $Res call({ServiceModel serviceModel}); -} - -/// @nodoc -class __$$ReferralReconServiceCreateEventImplCopyWithImpl<$Res> - extends _$ReferralReconServiceEventCopyWithImpl<$Res, - _$ReferralReconServiceCreateEventImpl> - implements _$$ReferralReconServiceCreateEventImplCopyWith<$Res> { - __$$ReferralReconServiceCreateEventImplCopyWithImpl( - _$ReferralReconServiceCreateEventImpl _value, - $Res Function(_$ReferralReconServiceCreateEventImpl) _then) - : super(_value, _then); - - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? serviceModel = null, - }) { - return _then(_$ReferralReconServiceCreateEventImpl( - serviceModel: null == serviceModel - ? _value.serviceModel - : serviceModel // ignore: cast_nullable_to_non_nullable - as ServiceModel, - )); - } -} - -/// @nodoc - -class _$ReferralReconServiceCreateEventImpl - implements ReferralReconServiceCreateEvent { - const _$ReferralReconServiceCreateEventImpl({required this.serviceModel}); - - @override - final ServiceModel serviceModel; - - @override - String toString() { - return 'ReferralReconServiceEvent.create(serviceModel: $serviceModel)'; - } - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$ReferralReconServiceCreateEventImpl && - (identical(other.serviceModel, serviceModel) || - other.serviceModel == serviceModel)); - } - - @override - int get hashCode => Object.hash(runtimeType, serviceModel); - - @JsonKey(ignore: true) - @override - @pragma('vm:prefer-inline') - _$$ReferralReconServiceCreateEventImplCopyWith< - _$ReferralReconServiceCreateEventImpl> - get copyWith => __$$ReferralReconServiceCreateEventImplCopyWithImpl< - _$ReferralReconServiceCreateEventImpl>(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function(ServiceModel serviceModel) create, - required TResult Function(ServiceSearchModel serviceSearchModel) search, - required TResult Function(String value, bool submitTriggered) - multichecklistChanged, - required TResult Function(ServiceModel service) selectService, - required TResult Function(List serviceList) resetSelected, - }) { - return create(serviceModel); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult? Function(ServiceModel serviceModel)? create, - TResult? Function(ServiceSearchModel serviceSearchModel)? search, - TResult? Function(String value, bool submitTriggered)? - multichecklistChanged, - TResult? Function(ServiceModel service)? selectService, - TResult? Function(List serviceList)? resetSelected, - }) { - return create?.call(serviceModel); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(ServiceModel serviceModel)? create, - TResult Function(ServiceSearchModel serviceSearchModel)? search, - TResult Function(String value, bool submitTriggered)? multichecklistChanged, - TResult Function(ServiceModel service)? selectService, - TResult Function(List serviceList)? resetSelected, - required TResult orElse(), - }) { - if (create != null) { - return create(serviceModel); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(ReferralReconServiceCreateEvent value) create, - required TResult Function(ReferralReconServiceSearchEvent value) search, - required TResult Function(ReferralReconServiceChecklistEvent value) - multichecklistChanged, - required TResult Function(ReferralReconServiceSelectionEvent value) - selectService, - required TResult Function(ReferralReconServiceResetEvent value) - resetSelected, - }) { - return create(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(ReferralReconServiceCreateEvent value)? create, - TResult? Function(ReferralReconServiceSearchEvent value)? search, - TResult? Function(ReferralReconServiceChecklistEvent value)? - multichecklistChanged, - TResult? Function(ReferralReconServiceSelectionEvent value)? selectService, - TResult? Function(ReferralReconServiceResetEvent value)? resetSelected, - }) { - return create?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(ReferralReconServiceCreateEvent value)? create, - TResult Function(ReferralReconServiceSearchEvent value)? search, - TResult Function(ReferralReconServiceChecklistEvent value)? - multichecklistChanged, - TResult Function(ReferralReconServiceSelectionEvent value)? selectService, - TResult Function(ReferralReconServiceResetEvent value)? resetSelected, - required TResult orElse(), - }) { - if (create != null) { - return create(this); - } - return orElse(); - } -} - -abstract class ReferralReconServiceCreateEvent - implements ReferralReconServiceEvent { - const factory ReferralReconServiceCreateEvent( - {required final ServiceModel serviceModel}) = - _$ReferralReconServiceCreateEventImpl; - - ServiceModel get serviceModel; - @JsonKey(ignore: true) - _$$ReferralReconServiceCreateEventImplCopyWith< - _$ReferralReconServiceCreateEventImpl> - get copyWith => throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class _$$ReferralReconServiceSearchEventImplCopyWith<$Res> { - factory _$$ReferralReconServiceSearchEventImplCopyWith( - _$ReferralReconServiceSearchEventImpl value, - $Res Function(_$ReferralReconServiceSearchEventImpl) then) = - __$$ReferralReconServiceSearchEventImplCopyWithImpl<$Res>; - @useResult - $Res call({ServiceSearchModel serviceSearchModel}); -} - -/// @nodoc -class __$$ReferralReconServiceSearchEventImplCopyWithImpl<$Res> - extends _$ReferralReconServiceEventCopyWithImpl<$Res, - _$ReferralReconServiceSearchEventImpl> - implements _$$ReferralReconServiceSearchEventImplCopyWith<$Res> { - __$$ReferralReconServiceSearchEventImplCopyWithImpl( - _$ReferralReconServiceSearchEventImpl _value, - $Res Function(_$ReferralReconServiceSearchEventImpl) _then) - : super(_value, _then); - - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? serviceSearchModel = null, - }) { - return _then(_$ReferralReconServiceSearchEventImpl( - serviceSearchModel: null == serviceSearchModel - ? _value.serviceSearchModel - : serviceSearchModel // ignore: cast_nullable_to_non_nullable - as ServiceSearchModel, - )); - } -} - -/// @nodoc - -class _$ReferralReconServiceSearchEventImpl - implements ReferralReconServiceSearchEvent { - const _$ReferralReconServiceSearchEventImpl( - {required this.serviceSearchModel}); - - @override - final ServiceSearchModel serviceSearchModel; - - @override - String toString() { - return 'ReferralReconServiceEvent.search(serviceSearchModel: $serviceSearchModel)'; - } - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$ReferralReconServiceSearchEventImpl && - (identical(other.serviceSearchModel, serviceSearchModel) || - other.serviceSearchModel == serviceSearchModel)); - } - - @override - int get hashCode => Object.hash(runtimeType, serviceSearchModel); - - @JsonKey(ignore: true) - @override - @pragma('vm:prefer-inline') - _$$ReferralReconServiceSearchEventImplCopyWith< - _$ReferralReconServiceSearchEventImpl> - get copyWith => __$$ReferralReconServiceSearchEventImplCopyWithImpl< - _$ReferralReconServiceSearchEventImpl>(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function(ServiceModel serviceModel) create, - required TResult Function(ServiceSearchModel serviceSearchModel) search, - required TResult Function(String value, bool submitTriggered) - multichecklistChanged, - required TResult Function(ServiceModel service) selectService, - required TResult Function(List serviceList) resetSelected, - }) { - return search(serviceSearchModel); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult? Function(ServiceModel serviceModel)? create, - TResult? Function(ServiceSearchModel serviceSearchModel)? search, - TResult? Function(String value, bool submitTriggered)? - multichecklistChanged, - TResult? Function(ServiceModel service)? selectService, - TResult? Function(List serviceList)? resetSelected, - }) { - return search?.call(serviceSearchModel); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(ServiceModel serviceModel)? create, - TResult Function(ServiceSearchModel serviceSearchModel)? search, - TResult Function(String value, bool submitTriggered)? multichecklistChanged, - TResult Function(ServiceModel service)? selectService, - TResult Function(List serviceList)? resetSelected, - required TResult orElse(), - }) { - if (search != null) { - return search(serviceSearchModel); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(ReferralReconServiceCreateEvent value) create, - required TResult Function(ReferralReconServiceSearchEvent value) search, - required TResult Function(ReferralReconServiceChecklistEvent value) - multichecklistChanged, - required TResult Function(ReferralReconServiceSelectionEvent value) - selectService, - required TResult Function(ReferralReconServiceResetEvent value) - resetSelected, - }) { - return search(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(ReferralReconServiceCreateEvent value)? create, - TResult? Function(ReferralReconServiceSearchEvent value)? search, - TResult? Function(ReferralReconServiceChecklistEvent value)? - multichecklistChanged, - TResult? Function(ReferralReconServiceSelectionEvent value)? selectService, - TResult? Function(ReferralReconServiceResetEvent value)? resetSelected, - }) { - return search?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(ReferralReconServiceCreateEvent value)? create, - TResult Function(ReferralReconServiceSearchEvent value)? search, - TResult Function(ReferralReconServiceChecklistEvent value)? - multichecklistChanged, - TResult Function(ReferralReconServiceSelectionEvent value)? selectService, - TResult Function(ReferralReconServiceResetEvent value)? resetSelected, - required TResult orElse(), - }) { - if (search != null) { - return search(this); - } - return orElse(); - } -} - -abstract class ReferralReconServiceSearchEvent - implements ReferralReconServiceEvent { - const factory ReferralReconServiceSearchEvent( - {required final ServiceSearchModel serviceSearchModel}) = - _$ReferralReconServiceSearchEventImpl; - - ServiceSearchModel get serviceSearchModel; - @JsonKey(ignore: true) - _$$ReferralReconServiceSearchEventImplCopyWith< - _$ReferralReconServiceSearchEventImpl> - get copyWith => throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class _$$ReferralReconServiceChecklistEventImplCopyWith<$Res> { - factory _$$ReferralReconServiceChecklistEventImplCopyWith( - _$ReferralReconServiceChecklistEventImpl value, - $Res Function(_$ReferralReconServiceChecklistEventImpl) then) = - __$$ReferralReconServiceChecklistEventImplCopyWithImpl<$Res>; - @useResult - $Res call({String value, bool submitTriggered}); -} - -/// @nodoc -class __$$ReferralReconServiceChecklistEventImplCopyWithImpl<$Res> - extends _$ReferralReconServiceEventCopyWithImpl<$Res, - _$ReferralReconServiceChecklistEventImpl> - implements _$$ReferralReconServiceChecklistEventImplCopyWith<$Res> { - __$$ReferralReconServiceChecklistEventImplCopyWithImpl( - _$ReferralReconServiceChecklistEventImpl _value, - $Res Function(_$ReferralReconServiceChecklistEventImpl) _then) - : super(_value, _then); - - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? value = null, - Object? submitTriggered = null, - }) { - return _then(_$ReferralReconServiceChecklistEventImpl( - value: null == value - ? _value.value - : value // ignore: cast_nullable_to_non_nullable - as String, - submitTriggered: null == submitTriggered - ? _value.submitTriggered - : submitTriggered // ignore: cast_nullable_to_non_nullable - as bool, - )); - } -} - -/// @nodoc - -class _$ReferralReconServiceChecklistEventImpl - implements ReferralReconServiceChecklistEvent { - const _$ReferralReconServiceChecklistEventImpl( - {required this.value, required this.submitTriggered}); - - @override - final String value; - @override - final bool submitTriggered; - - @override - String toString() { - return 'ReferralReconServiceEvent.multichecklistChanged(value: $value, submitTriggered: $submitTriggered)'; - } - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$ReferralReconServiceChecklistEventImpl && - (identical(other.value, value) || other.value == value) && - (identical(other.submitTriggered, submitTriggered) || - other.submitTriggered == submitTriggered)); - } - - @override - int get hashCode => Object.hash(runtimeType, value, submitTriggered); - - @JsonKey(ignore: true) - @override - @pragma('vm:prefer-inline') - _$$ReferralReconServiceChecklistEventImplCopyWith< - _$ReferralReconServiceChecklistEventImpl> - get copyWith => __$$ReferralReconServiceChecklistEventImplCopyWithImpl< - _$ReferralReconServiceChecklistEventImpl>(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function(ServiceModel serviceModel) create, - required TResult Function(ServiceSearchModel serviceSearchModel) search, - required TResult Function(String value, bool submitTriggered) - multichecklistChanged, - required TResult Function(ServiceModel service) selectService, - required TResult Function(List serviceList) resetSelected, - }) { - return multichecklistChanged(value, submitTriggered); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult? Function(ServiceModel serviceModel)? create, - TResult? Function(ServiceSearchModel serviceSearchModel)? search, - TResult? Function(String value, bool submitTriggered)? - multichecklistChanged, - TResult? Function(ServiceModel service)? selectService, - TResult? Function(List serviceList)? resetSelected, - }) { - return multichecklistChanged?.call(value, submitTriggered); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(ServiceModel serviceModel)? create, - TResult Function(ServiceSearchModel serviceSearchModel)? search, - TResult Function(String value, bool submitTriggered)? multichecklistChanged, - TResult Function(ServiceModel service)? selectService, - TResult Function(List serviceList)? resetSelected, - required TResult orElse(), - }) { - if (multichecklistChanged != null) { - return multichecklistChanged(value, submitTriggered); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(ReferralReconServiceCreateEvent value) create, - required TResult Function(ReferralReconServiceSearchEvent value) search, - required TResult Function(ReferralReconServiceChecklistEvent value) - multichecklistChanged, - required TResult Function(ReferralReconServiceSelectionEvent value) - selectService, - required TResult Function(ReferralReconServiceResetEvent value) - resetSelected, - }) { - return multichecklistChanged(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(ReferralReconServiceCreateEvent value)? create, - TResult? Function(ReferralReconServiceSearchEvent value)? search, - TResult? Function(ReferralReconServiceChecklistEvent value)? - multichecklistChanged, - TResult? Function(ReferralReconServiceSelectionEvent value)? selectService, - TResult? Function(ReferralReconServiceResetEvent value)? resetSelected, - }) { - return multichecklistChanged?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(ReferralReconServiceCreateEvent value)? create, - TResult Function(ReferralReconServiceSearchEvent value)? search, - TResult Function(ReferralReconServiceChecklistEvent value)? - multichecklistChanged, - TResult Function(ReferralReconServiceSelectionEvent value)? selectService, - TResult Function(ReferralReconServiceResetEvent value)? resetSelected, - required TResult orElse(), - }) { - if (multichecklistChanged != null) { - return multichecklistChanged(this); - } - return orElse(); - } -} - -abstract class ReferralReconServiceChecklistEvent - implements ReferralReconServiceEvent { - const factory ReferralReconServiceChecklistEvent( - {required final String value, required final bool submitTriggered}) = - _$ReferralReconServiceChecklistEventImpl; - - String get value; - bool get submitTriggered; - @JsonKey(ignore: true) - _$$ReferralReconServiceChecklistEventImplCopyWith< - _$ReferralReconServiceChecklistEventImpl> - get copyWith => throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class _$$ReferralReconServiceSelectionEventImplCopyWith<$Res> { - factory _$$ReferralReconServiceSelectionEventImplCopyWith( - _$ReferralReconServiceSelectionEventImpl value, - $Res Function(_$ReferralReconServiceSelectionEventImpl) then) = - __$$ReferralReconServiceSelectionEventImplCopyWithImpl<$Res>; - @useResult - $Res call({ServiceModel service}); -} - -/// @nodoc -class __$$ReferralReconServiceSelectionEventImplCopyWithImpl<$Res> - extends _$ReferralReconServiceEventCopyWithImpl<$Res, - _$ReferralReconServiceSelectionEventImpl> - implements _$$ReferralReconServiceSelectionEventImplCopyWith<$Res> { - __$$ReferralReconServiceSelectionEventImplCopyWithImpl( - _$ReferralReconServiceSelectionEventImpl _value, - $Res Function(_$ReferralReconServiceSelectionEventImpl) _then) - : super(_value, _then); - - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? service = null, - }) { - return _then(_$ReferralReconServiceSelectionEventImpl( - service: null == service - ? _value.service - : service // ignore: cast_nullable_to_non_nullable - as ServiceModel, - )); - } -} - -/// @nodoc - -class _$ReferralReconServiceSelectionEventImpl - implements ReferralReconServiceSelectionEvent { - const _$ReferralReconServiceSelectionEventImpl({required this.service}); - - @override - final ServiceModel service; - - @override - String toString() { - return 'ReferralReconServiceEvent.selectService(service: $service)'; - } - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$ReferralReconServiceSelectionEventImpl && - (identical(other.service, service) || other.service == service)); - } - - @override - int get hashCode => Object.hash(runtimeType, service); - - @JsonKey(ignore: true) - @override - @pragma('vm:prefer-inline') - _$$ReferralReconServiceSelectionEventImplCopyWith< - _$ReferralReconServiceSelectionEventImpl> - get copyWith => __$$ReferralReconServiceSelectionEventImplCopyWithImpl< - _$ReferralReconServiceSelectionEventImpl>(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function(ServiceModel serviceModel) create, - required TResult Function(ServiceSearchModel serviceSearchModel) search, - required TResult Function(String value, bool submitTriggered) - multichecklistChanged, - required TResult Function(ServiceModel service) selectService, - required TResult Function(List serviceList) resetSelected, - }) { - return selectService(service); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult? Function(ServiceModel serviceModel)? create, - TResult? Function(ServiceSearchModel serviceSearchModel)? search, - TResult? Function(String value, bool submitTriggered)? - multichecklistChanged, - TResult? Function(ServiceModel service)? selectService, - TResult? Function(List serviceList)? resetSelected, - }) { - return selectService?.call(service); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(ServiceModel serviceModel)? create, - TResult Function(ServiceSearchModel serviceSearchModel)? search, - TResult Function(String value, bool submitTriggered)? multichecklistChanged, - TResult Function(ServiceModel service)? selectService, - TResult Function(List serviceList)? resetSelected, - required TResult orElse(), - }) { - if (selectService != null) { - return selectService(service); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(ReferralReconServiceCreateEvent value) create, - required TResult Function(ReferralReconServiceSearchEvent value) search, - required TResult Function(ReferralReconServiceChecklistEvent value) - multichecklistChanged, - required TResult Function(ReferralReconServiceSelectionEvent value) - selectService, - required TResult Function(ReferralReconServiceResetEvent value) - resetSelected, - }) { - return selectService(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(ReferralReconServiceCreateEvent value)? create, - TResult? Function(ReferralReconServiceSearchEvent value)? search, - TResult? Function(ReferralReconServiceChecklistEvent value)? - multichecklistChanged, - TResult? Function(ReferralReconServiceSelectionEvent value)? selectService, - TResult? Function(ReferralReconServiceResetEvent value)? resetSelected, - }) { - return selectService?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(ReferralReconServiceCreateEvent value)? create, - TResult Function(ReferralReconServiceSearchEvent value)? search, - TResult Function(ReferralReconServiceChecklistEvent value)? - multichecklistChanged, - TResult Function(ReferralReconServiceSelectionEvent value)? selectService, - TResult Function(ReferralReconServiceResetEvent value)? resetSelected, - required TResult orElse(), - }) { - if (selectService != null) { - return selectService(this); - } - return orElse(); - } -} - -abstract class ReferralReconServiceSelectionEvent - implements ReferralReconServiceEvent { - const factory ReferralReconServiceSelectionEvent( - {required final ServiceModel service}) = - _$ReferralReconServiceSelectionEventImpl; - - ServiceModel get service; - @JsonKey(ignore: true) - _$$ReferralReconServiceSelectionEventImplCopyWith< - _$ReferralReconServiceSelectionEventImpl> - get copyWith => throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class _$$ReferralReconServiceResetEventImplCopyWith<$Res> { - factory _$$ReferralReconServiceResetEventImplCopyWith( - _$ReferralReconServiceResetEventImpl value, - $Res Function(_$ReferralReconServiceResetEventImpl) then) = - __$$ReferralReconServiceResetEventImplCopyWithImpl<$Res>; - @useResult - $Res call({List serviceList}); -} - -/// @nodoc -class __$$ReferralReconServiceResetEventImplCopyWithImpl<$Res> - extends _$ReferralReconServiceEventCopyWithImpl<$Res, - _$ReferralReconServiceResetEventImpl> - implements _$$ReferralReconServiceResetEventImplCopyWith<$Res> { - __$$ReferralReconServiceResetEventImplCopyWithImpl( - _$ReferralReconServiceResetEventImpl _value, - $Res Function(_$ReferralReconServiceResetEventImpl) _then) - : super(_value, _then); - - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? serviceList = null, - }) { - return _then(_$ReferralReconServiceResetEventImpl( - serviceList: null == serviceList - ? _value._serviceList - : serviceList // ignore: cast_nullable_to_non_nullable - as List, - )); - } -} - -/// @nodoc - -class _$ReferralReconServiceResetEventImpl - implements ReferralReconServiceResetEvent { - const _$ReferralReconServiceResetEventImpl( - {required final List serviceList}) - : _serviceList = serviceList; - - final List _serviceList; - @override - List get serviceList { - if (_serviceList is EqualUnmodifiableListView) return _serviceList; - // ignore: implicit_dynamic_type - return EqualUnmodifiableListView(_serviceList); - } - - @override - String toString() { - return 'ReferralReconServiceEvent.resetSelected(serviceList: $serviceList)'; - } - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$ReferralReconServiceResetEventImpl && - const DeepCollectionEquality() - .equals(other._serviceList, _serviceList)); - } - - @override - int get hashCode => Object.hash( - runtimeType, const DeepCollectionEquality().hash(_serviceList)); - - @JsonKey(ignore: true) - @override - @pragma('vm:prefer-inline') - _$$ReferralReconServiceResetEventImplCopyWith< - _$ReferralReconServiceResetEventImpl> - get copyWith => __$$ReferralReconServiceResetEventImplCopyWithImpl< - _$ReferralReconServiceResetEventImpl>(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function(ServiceModel serviceModel) create, - required TResult Function(ServiceSearchModel serviceSearchModel) search, - required TResult Function(String value, bool submitTriggered) - multichecklistChanged, - required TResult Function(ServiceModel service) selectService, - required TResult Function(List serviceList) resetSelected, - }) { - return resetSelected(serviceList); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult? Function(ServiceModel serviceModel)? create, - TResult? Function(ServiceSearchModel serviceSearchModel)? search, - TResult? Function(String value, bool submitTriggered)? - multichecklistChanged, - TResult? Function(ServiceModel service)? selectService, - TResult? Function(List serviceList)? resetSelected, - }) { - return resetSelected?.call(serviceList); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(ServiceModel serviceModel)? create, - TResult Function(ServiceSearchModel serviceSearchModel)? search, - TResult Function(String value, bool submitTriggered)? multichecklistChanged, - TResult Function(ServiceModel service)? selectService, - TResult Function(List serviceList)? resetSelected, - required TResult orElse(), - }) { - if (resetSelected != null) { - return resetSelected(serviceList); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(ReferralReconServiceCreateEvent value) create, - required TResult Function(ReferralReconServiceSearchEvent value) search, - required TResult Function(ReferralReconServiceChecklistEvent value) - multichecklistChanged, - required TResult Function(ReferralReconServiceSelectionEvent value) - selectService, - required TResult Function(ReferralReconServiceResetEvent value) - resetSelected, - }) { - return resetSelected(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(ReferralReconServiceCreateEvent value)? create, - TResult? Function(ReferralReconServiceSearchEvent value)? search, - TResult? Function(ReferralReconServiceChecklistEvent value)? - multichecklistChanged, - TResult? Function(ReferralReconServiceSelectionEvent value)? selectService, - TResult? Function(ReferralReconServiceResetEvent value)? resetSelected, - }) { - return resetSelected?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(ReferralReconServiceCreateEvent value)? create, - TResult Function(ReferralReconServiceSearchEvent value)? search, - TResult Function(ReferralReconServiceChecklistEvent value)? - multichecklistChanged, - TResult Function(ReferralReconServiceSelectionEvent value)? selectService, - TResult Function(ReferralReconServiceResetEvent value)? resetSelected, - required TResult orElse(), - }) { - if (resetSelected != null) { - return resetSelected(this); - } - return orElse(); - } -} - -abstract class ReferralReconServiceResetEvent - implements ReferralReconServiceEvent { - const factory ReferralReconServiceResetEvent( - {required final List serviceList}) = - _$ReferralReconServiceResetEventImpl; - - List get serviceList; - @JsonKey(ignore: true) - _$$ReferralReconServiceResetEventImplCopyWith< - _$ReferralReconServiceResetEventImpl> - get copyWith => throw _privateConstructorUsedError; -} - -/// @nodoc -mixin _$ReferralReconServiceState { - @optionalTypeArgs - TResult when({ - required TResult Function() empty, - required TResult Function() isLoading, - required TResult Function(String value, bool submitTriggered) - multiCheckListChanged, - required TResult Function(ServiceModel serviceList, - ServiceModel? selectedService, bool loading, bool isEditing) - serviceCreate, - required TResult Function(List serviceList, - ServiceModel? selectedService, bool loading) - serviceSearch, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult? whenOrNull({ - TResult? Function()? empty, - TResult? Function()? isLoading, - TResult? Function(String value, bool submitTriggered)? - multiCheckListChanged, - TResult? Function(ServiceModel serviceList, ServiceModel? selectedService, - bool loading, bool isEditing)? - serviceCreate, - TResult? Function(List serviceList, - ServiceModel? selectedService, bool loading)? - serviceSearch, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult maybeWhen({ - TResult Function()? empty, - TResult Function()? isLoading, - TResult Function(String value, bool submitTriggered)? multiCheckListChanged, - TResult Function(ServiceModel serviceList, ServiceModel? selectedService, - bool loading, bool isEditing)? - serviceCreate, - TResult Function(List serviceList, - ServiceModel? selectedService, bool loading)? - serviceSearch, - required TResult orElse(), - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult map({ - required TResult Function(ReferralReconServiceEmptyState value) empty, - required TResult Function(ReferralReconServiceIsloadingState value) - isLoading, - required TResult Function( - ReferralReconServiceMultichecklistChangedState value) - multiCheckListChanged, - required TResult Function(ReferralReconServiceCreateState value) - serviceCreate, - required TResult Function(ReferralReconServiceSearchState value) - serviceSearch, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(ReferralReconServiceEmptyState value)? empty, - TResult? Function(ReferralReconServiceIsloadingState value)? isLoading, - TResult? Function(ReferralReconServiceMultichecklistChangedState value)? - multiCheckListChanged, - TResult? Function(ReferralReconServiceCreateState value)? serviceCreate, - TResult? Function(ReferralReconServiceSearchState value)? serviceSearch, - }) => - throw _privateConstructorUsedError; - @optionalTypeArgs - TResult maybeMap({ - TResult Function(ReferralReconServiceEmptyState value)? empty, - TResult Function(ReferralReconServiceIsloadingState value)? isLoading, - TResult Function(ReferralReconServiceMultichecklistChangedState value)? - multiCheckListChanged, - TResult Function(ReferralReconServiceCreateState value)? serviceCreate, - TResult Function(ReferralReconServiceSearchState value)? serviceSearch, - required TResult orElse(), - }) => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $ReferralReconServiceStateCopyWith<$Res> { - factory $ReferralReconServiceStateCopyWith(ReferralReconServiceState value, - $Res Function(ReferralReconServiceState) then) = - _$ReferralReconServiceStateCopyWithImpl<$Res, ReferralReconServiceState>; -} - -/// @nodoc -class _$ReferralReconServiceStateCopyWithImpl<$Res, - $Val extends ReferralReconServiceState> - implements $ReferralReconServiceStateCopyWith<$Res> { - _$ReferralReconServiceStateCopyWithImpl(this._value, this._then); - - // ignore: unused_field - final $Val _value; - // ignore: unused_field - final $Res Function($Val) _then; -} - -/// @nodoc -abstract class _$$ReferralReconServiceEmptyStateImplCopyWith<$Res> { - factory _$$ReferralReconServiceEmptyStateImplCopyWith( - _$ReferralReconServiceEmptyStateImpl value, - $Res Function(_$ReferralReconServiceEmptyStateImpl) then) = - __$$ReferralReconServiceEmptyStateImplCopyWithImpl<$Res>; -} - -/// @nodoc -class __$$ReferralReconServiceEmptyStateImplCopyWithImpl<$Res> - extends _$ReferralReconServiceStateCopyWithImpl<$Res, - _$ReferralReconServiceEmptyStateImpl> - implements _$$ReferralReconServiceEmptyStateImplCopyWith<$Res> { - __$$ReferralReconServiceEmptyStateImplCopyWithImpl( - _$ReferralReconServiceEmptyStateImpl _value, - $Res Function(_$ReferralReconServiceEmptyStateImpl) _then) - : super(_value, _then); -} - -/// @nodoc - -class _$ReferralReconServiceEmptyStateImpl - implements ReferralReconServiceEmptyState { - const _$ReferralReconServiceEmptyStateImpl(); - - @override - String toString() { - return 'ReferralReconServiceState.empty()'; - } - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$ReferralReconServiceEmptyStateImpl); - } - - @override - int get hashCode => runtimeType.hashCode; - - @override - @optionalTypeArgs - TResult when({ - required TResult Function() empty, - required TResult Function() isLoading, - required TResult Function(String value, bool submitTriggered) - multiCheckListChanged, - required TResult Function(ServiceModel serviceList, - ServiceModel? selectedService, bool loading, bool isEditing) - serviceCreate, - required TResult Function(List serviceList, - ServiceModel? selectedService, bool loading) - serviceSearch, - }) { - return empty(); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult? Function()? empty, - TResult? Function()? isLoading, - TResult? Function(String value, bool submitTriggered)? - multiCheckListChanged, - TResult? Function(ServiceModel serviceList, ServiceModel? selectedService, - bool loading, bool isEditing)? - serviceCreate, - TResult? Function(List serviceList, - ServiceModel? selectedService, bool loading)? - serviceSearch, - }) { - return empty?.call(); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function()? empty, - TResult Function()? isLoading, - TResult Function(String value, bool submitTriggered)? multiCheckListChanged, - TResult Function(ServiceModel serviceList, ServiceModel? selectedService, - bool loading, bool isEditing)? - serviceCreate, - TResult Function(List serviceList, - ServiceModel? selectedService, bool loading)? - serviceSearch, - required TResult orElse(), - }) { - if (empty != null) { - return empty(); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(ReferralReconServiceEmptyState value) empty, - required TResult Function(ReferralReconServiceIsloadingState value) - isLoading, - required TResult Function( - ReferralReconServiceMultichecklistChangedState value) - multiCheckListChanged, - required TResult Function(ReferralReconServiceCreateState value) - serviceCreate, - required TResult Function(ReferralReconServiceSearchState value) - serviceSearch, - }) { - return empty(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(ReferralReconServiceEmptyState value)? empty, - TResult? Function(ReferralReconServiceIsloadingState value)? isLoading, - TResult? Function(ReferralReconServiceMultichecklistChangedState value)? - multiCheckListChanged, - TResult? Function(ReferralReconServiceCreateState value)? serviceCreate, - TResult? Function(ReferralReconServiceSearchState value)? serviceSearch, - }) { - return empty?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(ReferralReconServiceEmptyState value)? empty, - TResult Function(ReferralReconServiceIsloadingState value)? isLoading, - TResult Function(ReferralReconServiceMultichecklistChangedState value)? - multiCheckListChanged, - TResult Function(ReferralReconServiceCreateState value)? serviceCreate, - TResult Function(ReferralReconServiceSearchState value)? serviceSearch, - required TResult orElse(), - }) { - if (empty != null) { - return empty(this); - } - return orElse(); - } -} - -abstract class ReferralReconServiceEmptyState - implements ReferralReconServiceState { - const factory ReferralReconServiceEmptyState() = - _$ReferralReconServiceEmptyStateImpl; -} - -/// @nodoc -abstract class _$$ReferralReconServiceIsloadingStateImplCopyWith<$Res> { - factory _$$ReferralReconServiceIsloadingStateImplCopyWith( - _$ReferralReconServiceIsloadingStateImpl value, - $Res Function(_$ReferralReconServiceIsloadingStateImpl) then) = - __$$ReferralReconServiceIsloadingStateImplCopyWithImpl<$Res>; -} - -/// @nodoc -class __$$ReferralReconServiceIsloadingStateImplCopyWithImpl<$Res> - extends _$ReferralReconServiceStateCopyWithImpl<$Res, - _$ReferralReconServiceIsloadingStateImpl> - implements _$$ReferralReconServiceIsloadingStateImplCopyWith<$Res> { - __$$ReferralReconServiceIsloadingStateImplCopyWithImpl( - _$ReferralReconServiceIsloadingStateImpl _value, - $Res Function(_$ReferralReconServiceIsloadingStateImpl) _then) - : super(_value, _then); -} - -/// @nodoc - -class _$ReferralReconServiceIsloadingStateImpl - implements ReferralReconServiceIsloadingState { - const _$ReferralReconServiceIsloadingStateImpl(); - - @override - String toString() { - return 'ReferralReconServiceState.isLoading()'; - } - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$ReferralReconServiceIsloadingStateImpl); - } - - @override - int get hashCode => runtimeType.hashCode; - - @override - @optionalTypeArgs - TResult when({ - required TResult Function() empty, - required TResult Function() isLoading, - required TResult Function(String value, bool submitTriggered) - multiCheckListChanged, - required TResult Function(ServiceModel serviceList, - ServiceModel? selectedService, bool loading, bool isEditing) - serviceCreate, - required TResult Function(List serviceList, - ServiceModel? selectedService, bool loading) - serviceSearch, - }) { - return isLoading(); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult? Function()? empty, - TResult? Function()? isLoading, - TResult? Function(String value, bool submitTriggered)? - multiCheckListChanged, - TResult? Function(ServiceModel serviceList, ServiceModel? selectedService, - bool loading, bool isEditing)? - serviceCreate, - TResult? Function(List serviceList, - ServiceModel? selectedService, bool loading)? - serviceSearch, - }) { - return isLoading?.call(); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function()? empty, - TResult Function()? isLoading, - TResult Function(String value, bool submitTriggered)? multiCheckListChanged, - TResult Function(ServiceModel serviceList, ServiceModel? selectedService, - bool loading, bool isEditing)? - serviceCreate, - TResult Function(List serviceList, - ServiceModel? selectedService, bool loading)? - serviceSearch, - required TResult orElse(), - }) { - if (isLoading != null) { - return isLoading(); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(ReferralReconServiceEmptyState value) empty, - required TResult Function(ReferralReconServiceIsloadingState value) - isLoading, - required TResult Function( - ReferralReconServiceMultichecklistChangedState value) - multiCheckListChanged, - required TResult Function(ReferralReconServiceCreateState value) - serviceCreate, - required TResult Function(ReferralReconServiceSearchState value) - serviceSearch, - }) { - return isLoading(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(ReferralReconServiceEmptyState value)? empty, - TResult? Function(ReferralReconServiceIsloadingState value)? isLoading, - TResult? Function(ReferralReconServiceMultichecklistChangedState value)? - multiCheckListChanged, - TResult? Function(ReferralReconServiceCreateState value)? serviceCreate, - TResult? Function(ReferralReconServiceSearchState value)? serviceSearch, - }) { - return isLoading?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(ReferralReconServiceEmptyState value)? empty, - TResult Function(ReferralReconServiceIsloadingState value)? isLoading, - TResult Function(ReferralReconServiceMultichecklistChangedState value)? - multiCheckListChanged, - TResult Function(ReferralReconServiceCreateState value)? serviceCreate, - TResult Function(ReferralReconServiceSearchState value)? serviceSearch, - required TResult orElse(), - }) { - if (isLoading != null) { - return isLoading(this); - } - return orElse(); - } -} - -abstract class ReferralReconServiceIsloadingState - implements ReferralReconServiceState { - const factory ReferralReconServiceIsloadingState() = - _$ReferralReconServiceIsloadingStateImpl; -} - -/// @nodoc -abstract class _$$ReferralReconServiceMultichecklistChangedStateImplCopyWith< - $Res> { - factory _$$ReferralReconServiceMultichecklistChangedStateImplCopyWith( - _$ReferralReconServiceMultichecklistChangedStateImpl value, - $Res Function(_$ReferralReconServiceMultichecklistChangedStateImpl) - then) = - __$$ReferralReconServiceMultichecklistChangedStateImplCopyWithImpl<$Res>; - @useResult - $Res call({String value, bool submitTriggered}); -} - -/// @nodoc -class __$$ReferralReconServiceMultichecklistChangedStateImplCopyWithImpl<$Res> - extends _$ReferralReconServiceStateCopyWithImpl<$Res, - _$ReferralReconServiceMultichecklistChangedStateImpl> - implements - _$$ReferralReconServiceMultichecklistChangedStateImplCopyWith<$Res> { - __$$ReferralReconServiceMultichecklistChangedStateImplCopyWithImpl( - _$ReferralReconServiceMultichecklistChangedStateImpl _value, - $Res Function(_$ReferralReconServiceMultichecklistChangedStateImpl) _then) - : super(_value, _then); - - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? value = null, - Object? submitTriggered = null, - }) { - return _then(_$ReferralReconServiceMultichecklistChangedStateImpl( - value: null == value - ? _value.value - : value // ignore: cast_nullable_to_non_nullable - as String, - submitTriggered: null == submitTriggered - ? _value.submitTriggered - : submitTriggered // ignore: cast_nullable_to_non_nullable - as bool, - )); - } -} - -/// @nodoc - -class _$ReferralReconServiceMultichecklistChangedStateImpl - implements ReferralReconServiceMultichecklistChangedState { - const _$ReferralReconServiceMultichecklistChangedStateImpl( - {this.value = '', this.submitTriggered = false}); - - @override - @JsonKey() - final String value; - @override - @JsonKey() - final bool submitTriggered; - - @override - String toString() { - return 'ReferralReconServiceState.multiCheckListChanged(value: $value, submitTriggered: $submitTriggered)'; - } - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$ReferralReconServiceMultichecklistChangedStateImpl && - (identical(other.value, value) || other.value == value) && - (identical(other.submitTriggered, submitTriggered) || - other.submitTriggered == submitTriggered)); - } - - @override - int get hashCode => Object.hash(runtimeType, value, submitTriggered); - - @JsonKey(ignore: true) - @override - @pragma('vm:prefer-inline') - _$$ReferralReconServiceMultichecklistChangedStateImplCopyWith< - _$ReferralReconServiceMultichecklistChangedStateImpl> - get copyWith => - __$$ReferralReconServiceMultichecklistChangedStateImplCopyWithImpl< - _$ReferralReconServiceMultichecklistChangedStateImpl>( - this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function() empty, - required TResult Function() isLoading, - required TResult Function(String value, bool submitTriggered) - multiCheckListChanged, - required TResult Function(ServiceModel serviceList, - ServiceModel? selectedService, bool loading, bool isEditing) - serviceCreate, - required TResult Function(List serviceList, - ServiceModel? selectedService, bool loading) - serviceSearch, - }) { - return multiCheckListChanged(value, submitTriggered); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult? Function()? empty, - TResult? Function()? isLoading, - TResult? Function(String value, bool submitTriggered)? - multiCheckListChanged, - TResult? Function(ServiceModel serviceList, ServiceModel? selectedService, - bool loading, bool isEditing)? - serviceCreate, - TResult? Function(List serviceList, - ServiceModel? selectedService, bool loading)? - serviceSearch, - }) { - return multiCheckListChanged?.call(value, submitTriggered); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function()? empty, - TResult Function()? isLoading, - TResult Function(String value, bool submitTriggered)? multiCheckListChanged, - TResult Function(ServiceModel serviceList, ServiceModel? selectedService, - bool loading, bool isEditing)? - serviceCreate, - TResult Function(List serviceList, - ServiceModel? selectedService, bool loading)? - serviceSearch, - required TResult orElse(), - }) { - if (multiCheckListChanged != null) { - return multiCheckListChanged(value, submitTriggered); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(ReferralReconServiceEmptyState value) empty, - required TResult Function(ReferralReconServiceIsloadingState value) - isLoading, - required TResult Function( - ReferralReconServiceMultichecklistChangedState value) - multiCheckListChanged, - required TResult Function(ReferralReconServiceCreateState value) - serviceCreate, - required TResult Function(ReferralReconServiceSearchState value) - serviceSearch, - }) { - return multiCheckListChanged(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(ReferralReconServiceEmptyState value)? empty, - TResult? Function(ReferralReconServiceIsloadingState value)? isLoading, - TResult? Function(ReferralReconServiceMultichecklistChangedState value)? - multiCheckListChanged, - TResult? Function(ReferralReconServiceCreateState value)? serviceCreate, - TResult? Function(ReferralReconServiceSearchState value)? serviceSearch, - }) { - return multiCheckListChanged?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(ReferralReconServiceEmptyState value)? empty, - TResult Function(ReferralReconServiceIsloadingState value)? isLoading, - TResult Function(ReferralReconServiceMultichecklistChangedState value)? - multiCheckListChanged, - TResult Function(ReferralReconServiceCreateState value)? serviceCreate, - TResult Function(ReferralReconServiceSearchState value)? serviceSearch, - required TResult orElse(), - }) { - if (multiCheckListChanged != null) { - return multiCheckListChanged(this); - } - return orElse(); - } -} - -abstract class ReferralReconServiceMultichecklistChangedState - implements ReferralReconServiceState { - const factory ReferralReconServiceMultichecklistChangedState( - {final String value, final bool submitTriggered}) = - _$ReferralReconServiceMultichecklistChangedStateImpl; - - String get value; - bool get submitTriggered; - @JsonKey(ignore: true) - _$$ReferralReconServiceMultichecklistChangedStateImplCopyWith< - _$ReferralReconServiceMultichecklistChangedStateImpl> - get copyWith => throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class _$$ReferralReconServiceCreateStateImplCopyWith<$Res> { - factory _$$ReferralReconServiceCreateStateImplCopyWith( - _$ReferralReconServiceCreateStateImpl value, - $Res Function(_$ReferralReconServiceCreateStateImpl) then) = - __$$ReferralReconServiceCreateStateImplCopyWithImpl<$Res>; - @useResult - $Res call( - {ServiceModel serviceList, - ServiceModel? selectedService, - bool loading, - bool isEditing}); -} - -/// @nodoc -class __$$ReferralReconServiceCreateStateImplCopyWithImpl<$Res> - extends _$ReferralReconServiceStateCopyWithImpl<$Res, - _$ReferralReconServiceCreateStateImpl> - implements _$$ReferralReconServiceCreateStateImplCopyWith<$Res> { - __$$ReferralReconServiceCreateStateImplCopyWithImpl( - _$ReferralReconServiceCreateStateImpl _value, - $Res Function(_$ReferralReconServiceCreateStateImpl) _then) - : super(_value, _then); - - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? serviceList = null, - Object? selectedService = freezed, - Object? loading = null, - Object? isEditing = null, - }) { - return _then(_$ReferralReconServiceCreateStateImpl( - serviceList: null == serviceList - ? _value.serviceList - : serviceList // ignore: cast_nullable_to_non_nullable - as ServiceModel, - selectedService: freezed == selectedService - ? _value.selectedService - : selectedService // ignore: cast_nullable_to_non_nullable - as ServiceModel?, - loading: null == loading - ? _value.loading - : loading // ignore: cast_nullable_to_non_nullable - as bool, - isEditing: null == isEditing - ? _value.isEditing - : isEditing // ignore: cast_nullable_to_non_nullable - as bool, - )); - } -} - -/// @nodoc - -class _$ReferralReconServiceCreateStateImpl - implements ReferralReconServiceCreateState { - const _$ReferralReconServiceCreateStateImpl( - {required this.serviceList, - this.selectedService, - this.loading = false, - this.isEditing = false}); - - @override - final ServiceModel serviceList; - @override - final ServiceModel? selectedService; - @override - @JsonKey() - final bool loading; - @override - @JsonKey() - final bool isEditing; - - @override - String toString() { - return 'ReferralReconServiceState.serviceCreate(serviceList: $serviceList, selectedService: $selectedService, loading: $loading, isEditing: $isEditing)'; - } - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$ReferralReconServiceCreateStateImpl && - (identical(other.serviceList, serviceList) || - other.serviceList == serviceList) && - (identical(other.selectedService, selectedService) || - other.selectedService == selectedService) && - (identical(other.loading, loading) || other.loading == loading) && - (identical(other.isEditing, isEditing) || - other.isEditing == isEditing)); - } - - @override - int get hashCode => Object.hash( - runtimeType, serviceList, selectedService, loading, isEditing); - - @JsonKey(ignore: true) - @override - @pragma('vm:prefer-inline') - _$$ReferralReconServiceCreateStateImplCopyWith< - _$ReferralReconServiceCreateStateImpl> - get copyWith => __$$ReferralReconServiceCreateStateImplCopyWithImpl< - _$ReferralReconServiceCreateStateImpl>(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function() empty, - required TResult Function() isLoading, - required TResult Function(String value, bool submitTriggered) - multiCheckListChanged, - required TResult Function(ServiceModel serviceList, - ServiceModel? selectedService, bool loading, bool isEditing) - serviceCreate, - required TResult Function(List serviceList, - ServiceModel? selectedService, bool loading) - serviceSearch, - }) { - return serviceCreate(serviceList, selectedService, loading, isEditing); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult? Function()? empty, - TResult? Function()? isLoading, - TResult? Function(String value, bool submitTriggered)? - multiCheckListChanged, - TResult? Function(ServiceModel serviceList, ServiceModel? selectedService, - bool loading, bool isEditing)? - serviceCreate, - TResult? Function(List serviceList, - ServiceModel? selectedService, bool loading)? - serviceSearch, - }) { - return serviceCreate?.call( - serviceList, selectedService, loading, isEditing); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function()? empty, - TResult Function()? isLoading, - TResult Function(String value, bool submitTriggered)? multiCheckListChanged, - TResult Function(ServiceModel serviceList, ServiceModel? selectedService, - bool loading, bool isEditing)? - serviceCreate, - TResult Function(List serviceList, - ServiceModel? selectedService, bool loading)? - serviceSearch, - required TResult orElse(), - }) { - if (serviceCreate != null) { - return serviceCreate(serviceList, selectedService, loading, isEditing); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(ReferralReconServiceEmptyState value) empty, - required TResult Function(ReferralReconServiceIsloadingState value) - isLoading, - required TResult Function( - ReferralReconServiceMultichecklistChangedState value) - multiCheckListChanged, - required TResult Function(ReferralReconServiceCreateState value) - serviceCreate, - required TResult Function(ReferralReconServiceSearchState value) - serviceSearch, - }) { - return serviceCreate(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(ReferralReconServiceEmptyState value)? empty, - TResult? Function(ReferralReconServiceIsloadingState value)? isLoading, - TResult? Function(ReferralReconServiceMultichecklistChangedState value)? - multiCheckListChanged, - TResult? Function(ReferralReconServiceCreateState value)? serviceCreate, - TResult? Function(ReferralReconServiceSearchState value)? serviceSearch, - }) { - return serviceCreate?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(ReferralReconServiceEmptyState value)? empty, - TResult Function(ReferralReconServiceIsloadingState value)? isLoading, - TResult Function(ReferralReconServiceMultichecklistChangedState value)? - multiCheckListChanged, - TResult Function(ReferralReconServiceCreateState value)? serviceCreate, - TResult Function(ReferralReconServiceSearchState value)? serviceSearch, - required TResult orElse(), - }) { - if (serviceCreate != null) { - return serviceCreate(this); - } - return orElse(); - } -} - -abstract class ReferralReconServiceCreateState - implements ReferralReconServiceState { - const factory ReferralReconServiceCreateState( - {required final ServiceModel serviceList, - final ServiceModel? selectedService, - final bool loading, - final bool isEditing}) = _$ReferralReconServiceCreateStateImpl; - - ServiceModel get serviceList; - ServiceModel? get selectedService; - bool get loading; - bool get isEditing; - @JsonKey(ignore: true) - _$$ReferralReconServiceCreateStateImplCopyWith< - _$ReferralReconServiceCreateStateImpl> - get copyWith => throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class _$$ReferralReconServiceSearchStateImplCopyWith<$Res> { - factory _$$ReferralReconServiceSearchStateImplCopyWith( - _$ReferralReconServiceSearchStateImpl value, - $Res Function(_$ReferralReconServiceSearchStateImpl) then) = - __$$ReferralReconServiceSearchStateImplCopyWithImpl<$Res>; - @useResult - $Res call( - {List serviceList, - ServiceModel? selectedService, - bool loading}); -} - -/// @nodoc -class __$$ReferralReconServiceSearchStateImplCopyWithImpl<$Res> - extends _$ReferralReconServiceStateCopyWithImpl<$Res, - _$ReferralReconServiceSearchStateImpl> - implements _$$ReferralReconServiceSearchStateImplCopyWith<$Res> { - __$$ReferralReconServiceSearchStateImplCopyWithImpl( - _$ReferralReconServiceSearchStateImpl _value, - $Res Function(_$ReferralReconServiceSearchStateImpl) _then) - : super(_value, _then); - - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? serviceList = null, - Object? selectedService = freezed, - Object? loading = null, - }) { - return _then(_$ReferralReconServiceSearchStateImpl( - serviceList: null == serviceList - ? _value._serviceList - : serviceList // ignore: cast_nullable_to_non_nullable - as List, - selectedService: freezed == selectedService - ? _value.selectedService - : selectedService // ignore: cast_nullable_to_non_nullable - as ServiceModel?, - loading: null == loading - ? _value.loading - : loading // ignore: cast_nullable_to_non_nullable - as bool, - )); - } -} - -/// @nodoc - -class _$ReferralReconServiceSearchStateImpl - implements ReferralReconServiceSearchState { - const _$ReferralReconServiceSearchStateImpl( - {required final List serviceList, - this.selectedService, - this.loading = false}) - : _serviceList = serviceList; - - final List _serviceList; - @override - List get serviceList { - if (_serviceList is EqualUnmodifiableListView) return _serviceList; - // ignore: implicit_dynamic_type - return EqualUnmodifiableListView(_serviceList); - } - - @override - final ServiceModel? selectedService; - @override - @JsonKey() - final bool loading; - - @override - String toString() { - return 'ReferralReconServiceState.serviceSearch(serviceList: $serviceList, selectedService: $selectedService, loading: $loading)'; - } - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$ReferralReconServiceSearchStateImpl && - const DeepCollectionEquality() - .equals(other._serviceList, _serviceList) && - (identical(other.selectedService, selectedService) || - other.selectedService == selectedService) && - (identical(other.loading, loading) || other.loading == loading)); - } - - @override - int get hashCode => Object.hash( - runtimeType, - const DeepCollectionEquality().hash(_serviceList), - selectedService, - loading); - - @JsonKey(ignore: true) - @override - @pragma('vm:prefer-inline') - _$$ReferralReconServiceSearchStateImplCopyWith< - _$ReferralReconServiceSearchStateImpl> - get copyWith => __$$ReferralReconServiceSearchStateImplCopyWithImpl< - _$ReferralReconServiceSearchStateImpl>(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function() empty, - required TResult Function() isLoading, - required TResult Function(String value, bool submitTriggered) - multiCheckListChanged, - required TResult Function(ServiceModel serviceList, - ServiceModel? selectedService, bool loading, bool isEditing) - serviceCreate, - required TResult Function(List serviceList, - ServiceModel? selectedService, bool loading) - serviceSearch, - }) { - return serviceSearch(serviceList, selectedService, loading); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult? Function()? empty, - TResult? Function()? isLoading, - TResult? Function(String value, bool submitTriggered)? - multiCheckListChanged, - TResult? Function(ServiceModel serviceList, ServiceModel? selectedService, - bool loading, bool isEditing)? - serviceCreate, - TResult? Function(List serviceList, - ServiceModel? selectedService, bool loading)? - serviceSearch, - }) { - return serviceSearch?.call(serviceList, selectedService, loading); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function()? empty, - TResult Function()? isLoading, - TResult Function(String value, bool submitTriggered)? multiCheckListChanged, - TResult Function(ServiceModel serviceList, ServiceModel? selectedService, - bool loading, bool isEditing)? - serviceCreate, - TResult Function(List serviceList, - ServiceModel? selectedService, bool loading)? - serviceSearch, - required TResult orElse(), - }) { - if (serviceSearch != null) { - return serviceSearch(serviceList, selectedService, loading); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(ReferralReconServiceEmptyState value) empty, - required TResult Function(ReferralReconServiceIsloadingState value) - isLoading, - required TResult Function( - ReferralReconServiceMultichecklistChangedState value) - multiCheckListChanged, - required TResult Function(ReferralReconServiceCreateState value) - serviceCreate, - required TResult Function(ReferralReconServiceSearchState value) - serviceSearch, - }) { - return serviceSearch(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(ReferralReconServiceEmptyState value)? empty, - TResult? Function(ReferralReconServiceIsloadingState value)? isLoading, - TResult? Function(ReferralReconServiceMultichecklistChangedState value)? - multiCheckListChanged, - TResult? Function(ReferralReconServiceCreateState value)? serviceCreate, - TResult? Function(ReferralReconServiceSearchState value)? serviceSearch, - }) { - return serviceSearch?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(ReferralReconServiceEmptyState value)? empty, - TResult Function(ReferralReconServiceIsloadingState value)? isLoading, - TResult Function(ReferralReconServiceMultichecklistChangedState value)? - multiCheckListChanged, - TResult Function(ReferralReconServiceCreateState value)? serviceCreate, - TResult Function(ReferralReconServiceSearchState value)? serviceSearch, - required TResult orElse(), - }) { - if (serviceSearch != null) { - return serviceSearch(this); - } - return orElse(); - } -} - -abstract class ReferralReconServiceSearchState - implements ReferralReconServiceState { - const factory ReferralReconServiceSearchState( - {required final List serviceList, - final ServiceModel? selectedService, - final bool loading}) = _$ReferralReconServiceSearchStateImpl; - - List get serviceList; - ServiceModel? get selectedService; - bool get loading; - @JsonKey(ignore: true) - _$$ReferralReconServiceSearchStateImplCopyWith< - _$ReferralReconServiceSearchStateImpl> - get copyWith => throw _privateConstructorUsedError; -} diff --git a/packages/referral_reconciliation/lib/pages/create_referral/create_hf_referral_wrapper.dart b/packages/referral_reconciliation/lib/pages/create_referral/create_hf_referral_wrapper.dart index a947d5fa5..c0c2c108a 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/create_hf_referral_wrapper.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/create_hf_referral_wrapper.dart @@ -8,7 +8,6 @@ import 'package:referral_reconciliation/models/entities/hf_referral.dart'; import 'package:referral_reconciliation/utils/extensions/extensions.dart'; import '../../../utils/i18_key_constants.dart' as i18; -import '../../blocs/referral_recon_service.dart'; import '../../blocs/referral_recon_service_definition.dart'; import '../../widgets/localized.dart'; import '../../widgets/project_facility_bloc_wrapper.dart'; @@ -57,11 +56,11 @@ class _HFCreateReferralWrapperPageState ServiceDefinitionModel, ServiceDefinitionSearchModel>(context), )..add(const ReferralReconServiceDefinitionFetchEvent()), child: BlocProvider( - create: (_) => ReferralReconServiceBloc( - const ReferralReconServiceEmptyState(), + create: (_) => ServiceBloc( + const ServiceEmptyState(), serviceDataRepository: context.repository(context), - )..add(ReferralReconServiceSearchEvent( + )..add(ServiceSearchEvent( serviceSearchModel: ServiceSearchModel( clientId: widget.referralReconciliation?.clientReferenceId, ))), diff --git a/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart b/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart index e7a13063b..02ca9eb26 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart @@ -1,12 +1,12 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/widgets/atoms/digit_divider.dart'; +import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:intl/intl.dart'; import 'package:referral_reconciliation/utils/constants.dart'; -import '../../blocs/referral_recon_service.dart'; import '../../blocs/referral_recon_service_definition.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../widgets/back_navigation_help_header.dart'; @@ -35,8 +35,7 @@ class _ReferralReasonChecklistPreviewPageState header: const Column(children: [ BackNavigationHelpHeaderWidget(), ]), - footer: - BlocBuilder( + footer: BlocBuilder( builder: (context, state) { return state.maybeWhen( orElse: () => const Offstage(), @@ -45,9 +44,8 @@ class _ReferralReasonChecklistPreviewPageState ? DigitCard( child: DigitElevatedButton( onPressed: () { - context.read().add( - ReferralReconServiceResetEvent( - serviceList: serviceList), + context.read().add( + ServiceResetEvent(serviceList: serviceList), ); }, child: Text( @@ -61,8 +59,7 @@ class _ReferralReasonChecklistPreviewPageState }, ), children: [ - BlocBuilder( - builder: (context, state) { + BlocBuilder(builder: (context, state) { return state.maybeWhen( orElse: () => const Offstage(), serviceSearch: (value1, value2, value3) { @@ -104,11 +101,8 @@ class _ReferralReasonChecklistPreviewPageState .iconLabel, ), onPressed: () { - context - .read< - ReferralReconServiceBloc>() - .add( - ReferralReconServiceSelectionEvent( + context.read().add( + ServiceSelectionEvent( service: e, ), ); diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart index 2cb2280aa..d3a497112 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart @@ -11,7 +11,6 @@ import 'package:group_radio_button/group_radio_button.dart'; import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart'; import 'package:referral_reconciliation/utils/constants.dart'; -import '../../blocs/referral_recon_service.dart'; import '../../blocs/referral_recon_service_definition.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; @@ -45,8 +44,8 @@ class _ReferralReasonChecklistPageState @override void initState() { - context.read().add( - ReferralReconServiceChecklistEvent( + context.read().add( + ServiceChecklistEvent( value: Random().nextInt(100).toString(), submitTriggered: true, ), @@ -93,8 +92,8 @@ class _ReferralReasonChecklistPageState final router = context.router; submitTriggered = true; - context.read().add( - const ReferralReconServiceChecklistEvent( + context.read().add( + const ServiceChecklistEvent( value: '', submitTriggered: true, ), @@ -161,8 +160,8 @@ class _ReferralReasonChecklistPageState additionalDetails: null)); } - context.read().add( - ReferralReconServiceCreateEvent( + context.read().add( + ServiceCreateEvent( serviceModel: ServiceModel( createdAt: DigitDateUtils .getDateFromTimestamp( @@ -325,8 +324,7 @@ class _ReferralReasonChecklistPageState ), ), ), - BlocBuilder( + BlocBuilder( builder: (context, state) { return Column( children: e.values! @@ -338,10 +336,9 @@ class _ReferralReasonChecklistPageState .contains(e), onChanged: (value) { context - .read< - ReferralReconServiceBloc>() + .read() .add( - ReferralReconServiceChecklistEvent( + ServiceChecklistEvent( value: e.toString(), submitTriggered: submitTriggered, @@ -444,13 +441,13 @@ class _ReferralReasonChecklistPageState ), Column( children: [ - BlocBuilder( + BlocBuilder( builder: (context, state) { return RadioGroup.builder( groupValue: controller[index].text.trim(), onChanged: (value) { - context.read().add( - ReferralReconServiceChecklistEvent( + context.read().add( + ServiceChecklistEvent( value: Random().nextInt(100).toString(), submitTriggered: submitTriggered, ), @@ -478,14 +475,12 @@ class _ReferralReasonChecklistPageState if (excludedIndexes.isNotEmpty) { for (int i = 0; i < excludedIndexes.length; i++) { // Clear excluded child controllers - if (item.dataType != 'SingleValueList') { - // controller[excludedIndexes[i]].value = - // TextEditingController.fromValue( - // const TextEditingValue( - // text: '', - // ), - // ).value; - } + controller[excludedIndexes[i]].value = + TextEditingController.fromValue( + const TextEditingValue( + text: '', + ), + ).value; } } @@ -505,7 +500,7 @@ class _ReferralReasonChecklistPageState ); }, ), - BlocBuilder( + BlocBuilder( builder: (context, state) { final hasError = (item.required == true && controller[index].text.isEmpty && @@ -621,7 +616,7 @@ class _ReferralReasonChecklistPageState ), ), ), - BlocBuilder( + BlocBuilder( builder: (context, state) { return Column( children: item.values! @@ -629,8 +624,8 @@ class _ReferralReasonChecklistPageState label: e, value: controller[index].text.split('.').contains(e), onChanged: (value) { - context.read().add( - ReferralReconServiceChecklistEvent( + context.read().add( + ServiceChecklistEvent( value: e.toString(), submitTriggered: submitTriggered, ), diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart index f4f492290..f80e23055 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart @@ -13,7 +13,6 @@ import 'package:referral_reconciliation/utils/extensions/extensions.dart'; import '../../../utils/i18_key_constants.dart' as i18; import '../../blocs/referral_recon_record.dart'; -import '../../blocs/referral_recon_service.dart'; import '../../blocs/referral_recon_service_definition.dart'; import '../../models/entities/hf_referral.dart'; import '../../utils/utils.dart'; @@ -99,8 +98,7 @@ class _RecordReferralDetailsPageState header: const Column(children: [ BackNavigationHelpHeaderWidget(), ]), - footer: BlocBuilder( + footer: BlocBuilder( builder: (context, serviceState) { return serviceState.maybeWhen( orElse: () => DigitCard( @@ -155,11 +153,8 @@ class _RecordReferralDetailsPageState symptom, ), ); - context - .read< - ReferralReconServiceBloc>() - .add( - ReferralReconServiceSearchEvent( + context.read().add( + ServiceSearchEvent( serviceSearchModel: ServiceSearchModel( clientId: recordState @@ -470,10 +465,9 @@ class _RecordReferralDetailsPageState symptom), ); context - .read< - ReferralReconServiceBloc>() + .read() .add( - ReferralReconServiceSearchEvent( + ServiceSearchEvent( serviceSearchModel: ServiceSearchModel( clientId: diff --git a/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart b/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart index e61b3517d..e15cf0c7a 100644 --- a/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart +++ b/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart @@ -8,7 +8,6 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart'; import 'package:referral_reconciliation/utils/extensions/extensions.dart'; -import '../blocs/referral_recon_service.dart'; import '../blocs/search_referral_reconciliations.dart'; import '../models/entities/hf_referral.dart'; import '../router/referral_reconciliation_router.gm.dart'; @@ -72,8 +71,8 @@ class _SearchReferralReconciliationsPageState } }, child: BlocProvider( - create: (_) => ReferralReconServiceBloc( - const ReferralReconServiceEmptyState(), + create: (_) => ServiceBloc( + const ServiceEmptyState(), serviceDataRepository: context.repository< ServiceModel, ServiceSearchModel>(context), ), @@ -162,10 +161,8 @@ class _SearchReferralReconciliationsPageState child: ViewReferralCard( hfReferralModel: i, onOpenPressed: () { - context - .read() - .add( - ReferralReconServiceSearchEvent( + context.read().add( + ServiceSearchEvent( serviceSearchModel: ServiceSearchModel( clientId: @@ -180,7 +177,8 @@ class _SearchReferralReconciliationsPageState projectId: ReferralReconSingleton() .projectId, - cycles: ReferralReconSingleton().cycles, + cycles: ReferralReconSingleton() + .cycles, ), ); }, diff --git a/packages/referral_reconciliation/pubspec.yaml b/packages/referral_reconciliation/pubspec.yaml index f41f54119..093f43dbd 100644 --- a/packages/referral_reconciliation/pubspec.yaml +++ b/packages/referral_reconciliation/pubspec.yaml @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0 + digit_components: ^1.0.0+1 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 diff --git a/packages/referral_reconciliation/test/blocs/referral_recon_service_test.dart b/packages/referral_reconciliation/test/blocs/referral_recon_service_test.dart deleted file mode 100644 index 29602c269..000000000 --- a/packages/referral_reconciliation/test/blocs/referral_recon_service_test.dart +++ /dev/null @@ -1,89 +0,0 @@ -// Importing necessary packages and modules -import 'package:bloc_test/bloc_test.dart'; -import 'package:digit_data_model/data_model.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mocktail/mocktail.dart'; -import 'package:referral_reconciliation/blocs/referral_recon_service.dart'; -import 'package:referral_reconciliation/utils/typedefs.dart'; -import 'package:referral_reconciliation/utils/utils.dart'; - -import '../constants/test_constants.dart'; - -// Mock class for ReferralReconSingleton -class MockReferralReconSingleton extends Mock - implements ReferralReconSingleton {} - -class MockServiceDataRepository extends Mock implements ServiceDataRepository {} - -// Fake classes for the search models. -class FakeServiceSearchModel extends Fake implements ServiceSearchModel {} - -void main() { - setUpAll(() { - registerFallbackValue(FakeServiceSearchModel()); - }); - group('ReferralReconServiceBloc', () { - // Declare variables for MockInventorySingleton and FacilityBloc - late MockReferralReconSingleton mockReferralReconSingleton; - late ReferralReconServiceBloc serviceBloc; - late MockServiceDataRepository mockServiceDataRepository; - late String mockProjectId; - late ServiceSearchModel mockServiceSearchModel; - late ServiceModel mockServiceModel; - - setUp(() { - // Initialize MockReferralReconSingleton and ReferralReconServiceBloc before each test - mockReferralReconSingleton = MockReferralReconSingleton(); - mockServiceDataRepository = MockServiceDataRepository(); - serviceBloc = ReferralReconServiceBloc( - const ReferralReconServiceState.empty(), - serviceDataRepository: mockServiceDataRepository, - ); - mockServiceSearchModel = - ReferralReconTestConstants().reconServiceSearchModel; - mockServiceModel = ReferralReconTestConstants().reconServiceModel; - // Initialize mockProjectId - mockProjectId = ReferralReconTestConstants().projectId; - }); - - // Test for when getSavedChecklist returns null - blocTest( - // Description of the test - 'emits [ReferralReconServiceSearchState] when getSavedChecklist returns null', - build: () { - // Mock the method getSavedChecklist to return null - when(() => mockServiceDataRepository.search(any())) - .thenAnswer((_) async => []); - return serviceBloc; - }, - act: (bloc) => bloc.add(ReferralReconServiceEvent.search( - serviceSearchModel: mockServiceSearchModel)), - expect: () => [ - // Expected states after the action - const ReferralReconServiceSearchState(serviceList: []), - ], - ); - // Test for when getSavedChecklist returns a non-null list of service Requests - - blocTest( - // Description of the test - 'emits [ReferralReconServiceSearchState] when getSavedChecklist returns non-null List', - build: () { - // Mock the method getSavedChecklist to return a single List - when(() => mockServiceDataRepository.search(any())).thenAnswer( - (_) async => [ReferralReconTestConstants().reconServiceModel]); - return serviceBloc; - }, - act: (bloc) => bloc.add(ReferralReconServiceEvent.search( - serviceSearchModel: mockServiceSearchModel)), - expect: () => [ - // Expected states after the action - ReferralReconServiceSearchState( - serviceList: [ - ReferralReconTestConstants().reconServiceModel, - ], - ), - ], - ); - }); -} diff --git a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart index 778db633e..1a0aa5708 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart @@ -196,15 +196,15 @@ class _DeliverInterventionPageState onPressed: isClicked ? null : () async { - if (((form.control( + final deliveredProducts = + ((form.control( _resourceDeliveredKey, ) as FormArray) .value as List< - ProductVariantModel?>) - .any((ele) => - ele?.productId == - null)) { + ProductVariantModel?>); + if (hasDuplicatesOrEmptyResource( + deliveredProducts)) { await DigitToast .show( context, @@ -555,16 +555,54 @@ class _DeliverInterventionPageState .toList(), Center( child: DigitIconButton( - onPressed: () async { - addController(form); - setState(() { - _controllers.add( - _controllers - .length, - ); - }); - }, + onPressed: ((form.control(_resourceDeliveredKey) + as FormArray) + .value ?? + []) + .length < + (productVariants ?? + []) + .length + ? () async { + print( + _controllers); + addController( + form); + setState(() { + _controllers + .add( + _controllers + .length, + ); + }); + } + : null, icon: Icons.add_circle, + iconColor: ((form.control(_resourceDeliveredKey) + as FormArray) + .value ?? + []) + .length < + (productVariants ?? + []) + .length + ? theme.colorScheme + .secondary + : theme.colorScheme + .outline, + iconTextColor: + ((form.control(_resourceDeliveredKey) as FormArray).value ?? + []) + .length < + (productVariants ?? + []) + .length + ? theme + .colorScheme + .secondary + : theme + .colorScheme + .outline, iconText: localizations .translate( i18.deliverIntervention @@ -645,6 +683,27 @@ class _DeliverInterventionPageState .add(FormControl(value: 0, validators: [Validators.min(1)])); } + bool hasDuplicatesOrEmptyResource( + List deliveredProducts) { + final Map> groupedVariants = {}; + if (deliveredProducts.isNotEmpty) { + for (final variant in deliveredProducts) { + final productId = variant?.productId; + if (productId != null) { + groupedVariants.putIfAbsent(productId, () => []); + groupedVariants[productId]?.add(variant); + } + } + bool hasDuplicateProductIdOrNoProductId = + groupedVariants.values.any((variants) => variants.length > 1) || + deliveredProducts.any((ele) => ele?.productId == null); + + return hasDuplicateProductIdOrNoProductId; + } + + return true; + } + // ignore: long-parameter-list TaskModel _getTaskModel( BuildContext context, { diff --git a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart index 6e8956e8d..01bf74fa1 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart @@ -257,6 +257,14 @@ class _ViewBeneficiaryCardState extends LocalizedState { final isBeneficiaryRefused = checkIfBeneficiaryRefused(householdMember.tasks); + final projectBeneficiary = householdMember.projectBeneficiaries + .where((p) => + p.beneficiaryClientReferenceId == + householdMember.headOfHousehold.clientReferenceId) + .firstOrNull; + final tasks = householdMember.tasks?.where((t) => + t.projectBeneficiaryClientReferenceId == + projectBeneficiary?.clientReferenceId); return DigitCard( child: Column( @@ -281,12 +289,12 @@ class _ViewBeneficiaryCardState extends LocalizedState { : '${householdMember.members.length ?? 1} ${householdMember.members.length == 1 ? 'Household Member' : 'Household Members'}', status: RegistrationDeliverySingleton().beneficiaryType == BeneficiaryType.individual - ? (householdMember.tasks ?? []).isNotEmpty && + ? (tasks ?? []).isNotEmpty && !isNotEligible && !isBeneficiaryRefused ? Status.visited.toValue() : Status.notVisited.toValue() - : (householdMember.tasks ?? []).isNotEmpty + : (tasks ?? []).isNotEmpty ? Status.visited.toValue() : Status.notVisited.toValue(), title: [ diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index bd7f1457e..0e8f7797b 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^0.0.3+16 + digit_components: ^1.0.0+1 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 From 1c6e00d0701bfe05ae9957023433a1d53fda5cc2 Mon Sep 17 00:00:00 2001 From: Ramkrishna-egov Date: Wed, 5 Jun 2024 11:33:38 +0530 Subject: [PATCH 010/241] Additional Fields json updated for mapper generation --- .../entities/additional_fields_type.dart | 61 ++++++--------- .../additional_fields_type.mapper.dart | 8 +- .../model_configs/enum_additional_fields.json | 8 ++ .../pgr_complaints/pgr_complaints.mapper.dart | 74 ++++++++++++++----- 4 files changed, 90 insertions(+), 61 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/models/entities/additional_fields_type.dart b/apps/health_campaign_field_worker_app/lib/models/entities/additional_fields_type.dart index 1fbf8da3e..e275738e8 100644 --- a/apps/health_campaign_field_worker_app/lib/models/entities/additional_fields_type.dart +++ b/apps/health_campaign_field_worker_app/lib/models/entities/additional_fields_type.dart @@ -2,45 +2,26 @@ import 'package:dart_mappable/dart_mappable.dart'; part 'additional_fields_type.mapper.dart'; - @MappableEnum(caseStyle: CaseStyle.upperCase) enum AdditionalFieldsType { - @MappableValue("deliveryStrategy") - deliveryStrategy, - @MappableValue("cycleIndex") - cycleIndex, - @MappableValue("doseIndex") - doseIndex, - @MappableValue("dateOfVerification") - dateOfVerification, - @MappableValue("dateOfAdministration") - dateOfAdministration, - @MappableValue("dateOfDelivery") - dateOfDelivery, - @MappableValue("referralComments") - referralComments, - @MappableValue("cycle") - cycle, - @MappableValue("hfCoordinator") - hFCoordinator, - @MappableValue("referredBy") - referredBy, - @MappableValue("dateOfEvaluation") - dateOfEvaluation, - @MappableValue("nameOfReferral") - nameOfReferral, - @MappableValue("gender") - gender, - @MappableValue("age") - age, - @MappableValue("deliveryComment") - deliveryComment, - @MappableValue("latitude") - latitude, - @MappableValue("longitude") - longitude, - @MappableValue("EMPLOYEE") - employee, - @MappableValue("mobile") - mobile, -} + @MappableValue("deliveryStrategy") deliveryStrategy, + @MappableValue("cycleIndex") cycleIndex, + @MappableValue("doseIndex") doseIndex, + @MappableValue("dateOfVerification") dateOfVerification, + @MappableValue("dateOfAdministration") dateOfAdministration, + @MappableValue("dateOfDelivery") dateOfDelivery, + @MappableValue("referralComments") referralComments, + @MappableValue("cycle") cycle, + @MappableValue("hfCoordinator") hFCoordinator, + @MappableValue("referredBy") referredBy, + @MappableValue("dateOfEvaluation") dateOfEvaluation, + @MappableValue("nameOfReferral") nameOfReferral, + @MappableValue("gender") gender, + @MappableValue("age") age, + @MappableValue("deliveryComment") deliveryComment, + @MappableValue("latitude") latitude, + @MappableValue("longitude") longitude, + @MappableValue("mobile") mobile, + @MappableValue("EMPLOYEE") employee, + ; +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/lib/models/entities/additional_fields_type.mapper.dart b/apps/health_campaign_field_worker_app/lib/models/entities/additional_fields_type.mapper.dart index 18199581f..9d30d89b3 100644 --- a/apps/health_campaign_field_worker_app/lib/models/entities/additional_fields_type.mapper.dart +++ b/apps/health_campaign_field_worker_app/lib/models/entities/additional_fields_type.mapper.dart @@ -59,10 +59,10 @@ class AdditionalFieldsTypeMapper extends EnumMapper { return AdditionalFieldsType.latitude; case "longitude": return AdditionalFieldsType.longitude; - case "EMPLOYEE": - return AdditionalFieldsType.employee; case "mobile": return AdditionalFieldsType.mobile; + case "EMPLOYEE": + return AdditionalFieldsType.employee; default: throw MapperException.unknownEnumValue(value); } @@ -105,10 +105,10 @@ class AdditionalFieldsTypeMapper extends EnumMapper { return "latitude"; case AdditionalFieldsType.longitude: return "longitude"; - case AdditionalFieldsType.employee: - return "EMPLOYEE"; case AdditionalFieldsType.mobile: return "mobile"; + case AdditionalFieldsType.employee: + return "EMPLOYEE"; } } } diff --git a/apps/health_campaign_field_worker_app/lib/models/model_configs/enum_additional_fields.json b/apps/health_campaign_field_worker_app/lib/models/model_configs/enum_additional_fields.json index ebab15b9c..979e53529 100644 --- a/apps/health_campaign_field_worker_app/lib/models/model_configs/enum_additional_fields.json +++ b/apps/health_campaign_field_worker_app/lib/models/model_configs/enum_additional_fields.json @@ -68,6 +68,14 @@ { "name": "longitude", "value": "longitude" + }, + { + "name": "mobile", + "value": "mobile" + }, + { + "name": "employee", + "value": "EMPLOYEE" } ], "isEnum": true diff --git a/packages/digit_data_model/lib/models/pgr_complaints/pgr_complaints.mapper.dart b/packages/digit_data_model/lib/models/pgr_complaints/pgr_complaints.mapper.dart index 1541fa906..87d606df4 100644 --- a/packages/digit_data_model/lib/models/pgr_complaints/pgr_complaints.mapper.dart +++ b/packages/digit_data_model/lib/models/pgr_complaints/pgr_complaints.mapper.dart @@ -302,7 +302,7 @@ class PgrServiceModelMapper extends ClassMapperBase { v.clientAuditDetails; static const Field _f$clientAuditDetails = - Field('clientAuditDetails', _$clientAuditDetails, mode: FieldMode.member); + Field('clientAuditDetails', _$clientAuditDetails, opt: true); @override final MappableFields fields = const { @@ -344,7 +344,8 @@ class PgrServiceModelMapper extends ClassMapperBase { rowVersion: data.dec(_f$rowVersion), address: data.dec(_f$address), additionalDetail: data.dec(_f$additionalDetail), - auditDetails: data.dec(_f$auditDetails)); + auditDetails: data.dec(_f$auditDetails), + clientAuditDetails: data.dec(_f$clientAuditDetails)); } @override @@ -408,6 +409,9 @@ abstract class PgrServiceModelCopyWith<$R, $In extends PgrServiceModel, $Out> @override AuditDetailsCopyWith<$R, AuditDetails, AuditDetails>? get auditDetails; @override + ClientAuditDetailsCopyWith<$R, ClientAuditDetails, ClientAuditDetails>? + get clientAuditDetails; + @override $R call( {String? clientReferenceId, bool? active, @@ -424,7 +428,8 @@ abstract class PgrServiceModelCopyWith<$R, $In extends PgrServiceModel, $Out> int? rowVersion, PgrAddressModel? address, String? additionalDetail, - AuditDetails? auditDetails}); + AuditDetails? auditDetails, + ClientAuditDetails? clientAuditDetails}); PgrServiceModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>( Then<$Out2, $R2> t); } @@ -447,6 +452,10 @@ class _PgrServiceModelCopyWithImpl<$R, $Out> AuditDetailsCopyWith<$R, AuditDetails, AuditDetails>? get auditDetails => $value.auditDetails?.copyWith.$chain((v) => call(auditDetails: v)); @override + ClientAuditDetailsCopyWith<$R, ClientAuditDetails, ClientAuditDetails>? + get clientAuditDetails => $value.clientAuditDetails?.copyWith + .$chain((v) => call(clientAuditDetails: v)); + @override $R call( {String? clientReferenceId, bool? active, @@ -463,7 +472,8 @@ class _PgrServiceModelCopyWithImpl<$R, $Out> int? rowVersion, PgrAddressModel? address, Object? additionalDetail = $none, - Object? auditDetails = $none}) => + Object? auditDetails = $none, + Object? clientAuditDetails = $none}) => $apply(FieldCopyWithData({ if (clientReferenceId != null) #clientReferenceId: clientReferenceId, if (active != null) #active: active, @@ -480,7 +490,8 @@ class _PgrServiceModelCopyWithImpl<$R, $Out> if (rowVersion != null) #rowVersion: rowVersion, if (address != null) #address: address, if (additionalDetail != $none) #additionalDetail: additionalDetail, - if (auditDetails != $none) #auditDetails: auditDetails + if (auditDetails != $none) #auditDetails: auditDetails, + if (clientAuditDetails != $none) #clientAuditDetails: clientAuditDetails })); @override PgrServiceModel $make(CopyWithData data) => PgrServiceModel( @@ -503,7 +514,9 @@ class _PgrServiceModelCopyWithImpl<$R, $Out> address: data.get(#address, or: $value.address), additionalDetail: data.get(#additionalDetail, or: $value.additionalDetail), - auditDetails: data.get(#auditDetails, or: $value.auditDetails)); + auditDetails: data.get(#auditDetails, or: $value.auditDetails), + clientAuditDetails: + data.get(#clientAuditDetails, or: $value.clientAuditDetails)); @override PgrServiceModelCopyWith<$R2, PgrServiceModel, $Out2> $chain<$R2, $Out2>( @@ -578,7 +591,7 @@ class PgrComplainantModelMapper extends ClassMapperBase { v.clientAuditDetails; static const Field _f$clientAuditDetails = - Field('clientAuditDetails', _$clientAuditDetails, mode: FieldMode.member); + Field('clientAuditDetails', _$clientAuditDetails, opt: true); @override final MappableFields fields = const { @@ -618,7 +631,8 @@ class PgrComplainantModelMapper extends ClassMapperBase { active: data.dec(_f$active), isDeleted: data.dec(_f$isDeleted), rowVersion: data.dec(_f$rowVersion), - auditDetails: data.dec(_f$auditDetails)); + auditDetails: data.dec(_f$auditDetails), + clientAuditDetails: data.dec(_f$clientAuditDetails)); } @override @@ -683,6 +697,9 @@ abstract class PgrComplainantModelCopyWith<$R, $In extends PgrComplainantModel, @override AuditDetailsCopyWith<$R, AuditDetails, AuditDetails>? get auditDetails; @override + ClientAuditDetailsCopyWith<$R, ClientAuditDetails, ClientAuditDetails>? + get clientAuditDetails; + @override $R call( {int? id, String? clientReferenceId, @@ -698,7 +715,8 @@ abstract class PgrComplainantModelCopyWith<$R, $In extends PgrComplainantModel, bool? active, covariant bool? isDeleted, int? rowVersion, - AuditDetails? auditDetails}); + AuditDetails? auditDetails, + ClientAuditDetails? clientAuditDetails}); PgrComplainantModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>( Then<$Out2, $R2> t); } @@ -720,6 +738,10 @@ class _PgrComplainantModelCopyWithImpl<$R, $Out> AuditDetailsCopyWith<$R, AuditDetails, AuditDetails>? get auditDetails => $value.auditDetails?.copyWith.$chain((v) => call(auditDetails: v)); @override + ClientAuditDetailsCopyWith<$R, ClientAuditDetails, ClientAuditDetails>? + get clientAuditDetails => $value.clientAuditDetails?.copyWith + .$chain((v) => call(clientAuditDetails: v)); + @override $R call( {Object? id = $none, String? clientReferenceId, @@ -735,7 +757,8 @@ class _PgrComplainantModelCopyWithImpl<$R, $Out> bool? active, bool? isDeleted, int? rowVersion, - Object? auditDetails = $none}) => + Object? auditDetails = $none, + Object? clientAuditDetails = $none}) => $apply(FieldCopyWithData({ if (id != $none) #id: id, if (clientReferenceId != null) #clientReferenceId: clientReferenceId, @@ -752,7 +775,8 @@ class _PgrComplainantModelCopyWithImpl<$R, $Out> if (active != null) #active: active, if (isDeleted != null) #isDeleted: isDeleted, if (rowVersion != null) #rowVersion: rowVersion, - if (auditDetails != $none) #auditDetails: auditDetails + if (auditDetails != $none) #auditDetails: auditDetails, + if (clientAuditDetails != $none) #clientAuditDetails: clientAuditDetails })); @override PgrComplainantModel $make(CopyWithData data) => PgrComplainantModel( @@ -772,7 +796,9 @@ class _PgrComplainantModelCopyWithImpl<$R, $Out> active: data.get(#active, or: $value.active), isDeleted: data.get(#isDeleted, or: $value.isDeleted), rowVersion: data.get(#rowVersion, or: $value.rowVersion), - auditDetails: data.get(#auditDetails, or: $value.auditDetails)); + auditDetails: data.get(#auditDetails, or: $value.auditDetails), + clientAuditDetails: + data.get(#clientAuditDetails, or: $value.clientAuditDetails)); @override PgrComplainantModelCopyWith<$R2, PgrComplainantModel, $Out2> @@ -959,14 +985,14 @@ class PgrWorkflowModelMapper extends ClassMapperBase { static AuditDetails? _$auditDetails(PgrWorkflowModel v) => v.auditDetails; static const Field _f$auditDetails = Field('auditDetails', _$auditDetails, opt: true); - static bool? _$isDeleted(PgrWorkflowModel v) => v.isDeleted; - static const Field _f$isDeleted = - Field('isDeleted', _$isDeleted, opt: true, def: false); static ClientAuditDetails? _$clientAuditDetails(PgrWorkflowModel v) => v.clientAuditDetails; static const Field _f$clientAuditDetails = - Field('clientAuditDetails', _$clientAuditDetails, mode: FieldMode.member); + Field('clientAuditDetails', _$clientAuditDetails, opt: true); + static bool? _$isDeleted(PgrWorkflowModel v) => v.isDeleted; + static const Field _f$isDeleted = + Field('isDeleted', _$isDeleted, opt: true, def: false); @override final MappableFields fields = const { @@ -974,8 +1000,8 @@ class PgrWorkflowModelMapper extends ClassMapperBase { #assignees: _f$assignees, #comments: _f$comments, #auditDetails: _f$auditDetails, - #isDeleted: _f$isDeleted, #clientAuditDetails: _f$clientAuditDetails, + #isDeleted: _f$isDeleted, }; @override final bool ignoreNull = true; @@ -986,6 +1012,7 @@ class PgrWorkflowModelMapper extends ClassMapperBase { assignees: data.dec(_f$assignees), comments: data.dec(_f$comments), auditDetails: data.dec(_f$auditDetails), + clientAuditDetails: data.dec(_f$clientAuditDetails), isDeleted: data.dec(_f$isDeleted)); } @@ -1049,11 +1076,15 @@ abstract class PgrWorkflowModelCopyWith<$R, $In extends PgrWorkflowModel, $Out> @override AuditDetailsCopyWith<$R, AuditDetails, AuditDetails>? get auditDetails; @override + ClientAuditDetailsCopyWith<$R, ClientAuditDetails, ClientAuditDetails>? + get clientAuditDetails; + @override $R call( {String? action, List? assignees, String? comments, AuditDetails? auditDetails, + ClientAuditDetails? clientAuditDetails, bool? isDeleted}); PgrWorkflowModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>( Then<$Out2, $R2> t); @@ -1075,17 +1106,24 @@ class _PgrWorkflowModelCopyWithImpl<$R, $Out> AuditDetailsCopyWith<$R, AuditDetails, AuditDetails>? get auditDetails => $value.auditDetails?.copyWith.$chain((v) => call(auditDetails: v)); @override + ClientAuditDetailsCopyWith<$R, ClientAuditDetails, ClientAuditDetails>? + get clientAuditDetails => $value.clientAuditDetails?.copyWith + .$chain((v) => call(clientAuditDetails: v)); + @override $R call( {String? action, List? assignees, String? comments, Object? auditDetails = $none, + Object? clientAuditDetails = $none, Object? isDeleted = $none}) => $apply(FieldCopyWithData({ if (action != null) #action: action, if (assignees != null) #assignees: assignees, if (comments != null) #comments: comments, if (auditDetails != $none) #auditDetails: auditDetails, + if (clientAuditDetails != $none) + #clientAuditDetails: clientAuditDetails, if (isDeleted != $none) #isDeleted: isDeleted })); @override @@ -1094,6 +1132,8 @@ class _PgrWorkflowModelCopyWithImpl<$R, $Out> assignees: data.get(#assignees, or: $value.assignees), comments: data.get(#comments, or: $value.comments), auditDetails: data.get(#auditDetails, or: $value.auditDetails), + clientAuditDetails: + data.get(#clientAuditDetails, or: $value.clientAuditDetails), isDeleted: data.get(#isDeleted, or: $value.isDeleted)); @override From 6a35d6755e9f2b0ab1fb575df7c650e24013a707 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Wed, 5 Jun 2024 11:41:19 +0530 Subject: [PATCH 011/241] added index to tables --- .../local_store/sql_store/sql_store.g.dart | 96 ++++++++++++++++++- .../tables/package_tables/attendance.dart | 14 +-- .../tables/package_tables/hf_referral.dart | 4 + .../package_tables/household_member.dart | 25 +++-- .../tables/package_tables/referral.dart | 25 +++-- .../tables/package_tables/side_effect.dart | 19 ++-- .../tables/package_tables/stock.dart | 3 + .../package_tables/stock_reconciliation.dart | 17 +++- .../sql_store/tables/package_tables/task.dart | 28 ++++-- .../tables/package_tables/task_resource.dart | 25 +++-- .../sql_store/tables/project_beneficiary.dart | 21 ++-- .../pgr_complaints/pgr_complaints.mapper.dart | 74 ++++++++++---- 12 files changed, 286 insertions(+), 65 deletions(-) diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart index b6c80b49a..e742720b6 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart @@ -38747,6 +38747,71 @@ abstract class _$LocalSqlDataStore extends GeneratedDatabase { late final $TaskResourceTable taskResource = $TaskResourceTable(this); late final $SideEffectTable sideEffect = $SideEffectTable(this); late final $ReferralTable referral = $ReferralTable(this); + late final Index attendanceClientref = Index('attendance_clientref', + 'CREATE INDEX attendance_clientref ON attendance (client_reference_id)'); + late final Index attendanceIndividualid = Index('attendance_individualid', + 'CREATE INDEX attendance_individualid ON attendance (individual_id)'); + late final Index projectClinetref = Index('project_clinetref', + 'CREATE INDEX project_clinetref ON project_beneficiary (client_reference_id)'); + late final Index projectProjectid = Index('project_projectid', + 'CREATE INDEX project_projectid ON project_beneficiary (project_id)'); + late final Index projectProjectbeneficiaryclientref = Index( + 'project_projectbeneficiaryclientref', + 'CREATE INDEX project_projectbeneficiaryclientref ON project_beneficiary (beneficiary_client_reference_id)'); + late final Index stockClientref = Index('stock_clientref', + 'CREATE INDEX stock_clientref ON stock (client_reference_id)'); + late final Index stockProductvariantid = Index('stock_productvariantid', + 'CREATE INDEX stock_productvariantid ON stock (product_variant_id)'); + late final Index stockFacilityid = Index('stock_facilityid', + 'CREATE INDEX stock_facilityid ON stock (facility_id)'); + late final Index stockreconClientref = Index('stockrecon_clientref', + 'CREATE INDEX stockrecon_clientref ON stock_reconciliation (client_reference_id)'); + late final Index stockreconFacilityid = Index('stockrecon_facilityid', + 'CREATE INDEX stockrecon_facilityid ON stock_reconciliation (facility_id)'); + late final Index stockreconProductvariantid = Index( + 'stockrecon_productvariantid', + 'CREATE INDEX stockrecon_productvariantid ON stock_reconciliation (product_variant_id)'); + late final Index hfreferralClientref = Index('hfreferral_clientref', + 'CREATE INDEX hfreferral_clientref ON h_f_referral (client_reference_id)'); + late final Index hfreferralProjectid = Index('hfreferral_projectid', + 'CREATE INDEX hfreferral_projectid ON h_f_referral (project_id)'); + late final Index householdmemberClinetref = Index('householdmember_clinetref', + 'CREATE INDEX householdmember_clinetref ON household_member (client_reference_id)'); + late final Index householdClientref = Index('household_clientref', + 'CREATE INDEX household_clientref ON household_member (household_client_reference_id)'); + late final Index householdmemberIndividualid = Index( + 'householdmember_individualid', + 'CREATE INDEX householdmember_individualid ON household_member (individual_client_reference_id)'); + late final Index taskClinetref = Index('task_clinetref', + 'CREATE INDEX task_clinetref ON task (client_reference_id)'); + late final Index taskProjectid = Index( + 'task_projectid', 'CREATE INDEX task_projectid ON task (project_id)'); + late final Index taskProjectbeneficiaryid = Index('task_projectbeneficiaryid', + 'CREATE INDEX task_projectbeneficiaryid ON task (project_beneficiary_id)'); + late final Index taskProjectbeneficiaryclientref = Index( + 'task_projectbeneficiaryclientref', + 'CREATE INDEX task_projectbeneficiaryclientref ON task (project_beneficiary_client_reference_id)'); + late final Index taskresourceclinetref = Index('taskresourceclinetref', + 'CREATE INDEX taskresourceclinetref ON task_resource (client_reference_id)'); + late final Index taskresourceTaskclientref = Index( + 'taskresource_taskclientref', + 'CREATE INDEX taskresource_taskclientref ON task_resource (taskclient_reference_id)'); + late final Index taskresourceProductvariantid = Index( + 'taskresource_productvariantid', + 'CREATE INDEX taskresource_productvariantid ON task_resource (product_variant_id)'); + late final Index sideeffectClinetref = Index('sideeffect_clinetref', + 'CREATE INDEX sideeffect_clinetref ON side_effect (client_reference_id)'); + late final Index sideeffectProjectid = Index('sideeffect_projectid', + 'CREATE INDEX sideeffect_projectid ON side_effect (project_id)'); + late final Index sideeffectTaskclientref = Index('sideeffect_taskclientref', + 'CREATE INDEX sideeffect_taskclientref ON side_effect (task_client_reference_id)'); + late final Index referralClinetref = Index('referral_clinetref', + 'CREATE INDEX referral_clinetref ON referral (client_reference_id)'); + late final Index referralProjectid = Index('referral_projectid', + 'CREATE INDEX referral_projectid ON referral (project_id)'); + late final Index referralProjectbeneficiaryclientref = Index( + 'referral_projectbeneficiaryclientref', + 'CREATE INDEX referral_projectbeneficiaryclientref ON referral (project_beneficiary_client_reference_id)'); @override Iterable> get allTables => allSchemaEntities.whereType>(); @@ -38791,6 +38856,35 @@ abstract class _$LocalSqlDataStore extends GeneratedDatabase { task, taskResource, sideEffect, - referral + referral, + attendanceClientref, + attendanceIndividualid, + projectClinetref, + projectProjectid, + projectProjectbeneficiaryclientref, + stockClientref, + stockProductvariantid, + stockFacilityid, + stockreconClientref, + stockreconFacilityid, + stockreconProductvariantid, + hfreferralClientref, + hfreferralProjectid, + householdmemberClinetref, + householdClientref, + householdmemberIndividualid, + taskClinetref, + taskProjectid, + taskProjectbeneficiaryid, + taskProjectbeneficiaryclientref, + taskresourceclinetref, + taskresourceTaskclientref, + taskresourceProductvariantid, + sideeffectClinetref, + sideeffectProjectid, + sideeffectTaskclientref, + referralClinetref, + referralProjectid, + referralProjectbeneficiaryclientref ]; } diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/attendance.dart b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/attendance.dart index a06f78cf1..b8e0ea58d 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/attendance.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/attendance.dart @@ -1,5 +1,7 @@ import 'package:drift/drift.dart'; +@TableIndex(name: 'attendance_clientref', columns: {#clientReferenceId}) +@TableIndex(name: 'attendance_individualid', columns: {#individualId}) class Attendance extends Table { TextColumn get id => text().nullable()(); TextColumn get clientReferenceId => text().nullable()(); @@ -27,10 +29,10 @@ class Attendance extends Table { boolean().nullable().withDefault(const Constant(false))(); @override Set get primaryKey => { - registerId, - individualId, - tenantId, - type, - clientReferenceId, - }; + registerId, + individualId, + tenantId, + type, + clientReferenceId, + }; } diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/hf_referral.dart b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/hf_referral.dart index 9906a619f..e5ec3411b 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/hf_referral.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/hf_referral.dart @@ -2,6 +2,10 @@ import 'package:drift/drift.dart'; +@TableIndex( + name: 'hfreferral_clientref', columns: {#clientReferenceId}) +@TableIndex( + name: 'hfreferral_projectid', columns: {#projectId}) class HFReferral extends Table { TextColumn get id => text().nullable()(); TextColumn get tenantId => text().nullable()(); diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/household_member.dart b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/household_member.dart index 75f6a8563..1de65597f 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/household_member.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/household_member.dart @@ -2,7 +2,15 @@ import 'package:drift/drift.dart'; - +@TableIndex(name: 'householdmember_clinetref', columns: { + #clientReferenceId, +}) +@TableIndex(name: 'household_clientref', columns: { + #householdClientReferenceId, +}) +@TableIndex(name: 'householdmember_individualid', columns: { + #individualClientReferenceId, +}) class HouseholdMember extends Table { TextColumn get id => text().nullable()(); TextColumn get householdId => text().nullable()(); @@ -11,7 +19,8 @@ class HouseholdMember extends Table { TextColumn get individualClientReferenceId => text().nullable()(); BoolColumn get isHeadOfHousehold => boolean()(); TextColumn get auditCreatedBy => text().nullable()(); - BoolColumn get nonRecoverableError => boolean().nullable().withDefault(const Constant(false))(); + BoolColumn get nonRecoverableError => + boolean().nullable().withDefault(const Constant(false))(); IntColumn get auditCreatedTime => integer().nullable()(); IntColumn get clientCreatedTime => integer().nullable()(); TextColumn get clientModifiedBy => text().nullable()(); @@ -21,11 +30,15 @@ class HouseholdMember extends Table { IntColumn get auditModifiedTime => integer().nullable()(); TextColumn get clientReferenceId => text()(); TextColumn get tenantId => text().nullable()(); - BoolColumn get isDeleted => boolean().nullable().withDefault(const Constant(false))(); + BoolColumn get isDeleted => + boolean().nullable().withDefault(const Constant(false))(); IntColumn get rowVersion => integer().nullable()(); - + TextColumn get additionalFields => text().nullable()(); @override - Set get primaryKey => { auditCreatedBy, clientReferenceId, }; -} \ No newline at end of file + Set get primaryKey => { + auditCreatedBy, + clientReferenceId, + }; +} diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/referral.dart b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/referral.dart index 17cf46479..63453e70b 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/referral.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/referral.dart @@ -2,7 +2,15 @@ import 'package:drift/drift.dart'; - +@TableIndex(name: 'referral_clinetref', columns: { + #clientReferenceId, +}) +@TableIndex(name: 'referral_projectid', columns: { + #projectId, +}) +@TableIndex(name: 'referral_projectbeneficiaryclientref', columns: { + #projectBeneficiaryClientReferenceId, +}) class Referral extends Table { TextColumn get id => text().nullable()(); TextColumn get projectId => text().nullable()(); @@ -12,7 +20,8 @@ class Referral extends Table { TextColumn get recipientId => text().nullable()(); TextColumn get reasons => text().nullable()(); TextColumn get auditCreatedBy => text().nullable()(); - BoolColumn get nonRecoverableError => boolean().nullable().withDefault(const Constant(false))(); + BoolColumn get nonRecoverableError => + boolean().nullable().withDefault(const Constant(false))(); IntColumn get auditCreatedTime => integer().nullable()(); IntColumn get clientCreatedTime => integer().nullable()(); TextColumn get clientModifiedBy => text().nullable()(); @@ -22,11 +31,15 @@ class Referral extends Table { IntColumn get auditModifiedTime => integer().nullable()(); TextColumn get clientReferenceId => text()(); TextColumn get tenantId => text().nullable()(); - BoolColumn get isDeleted => boolean().nullable().withDefault(const Constant(false))(); + BoolColumn get isDeleted => + boolean().nullable().withDefault(const Constant(false))(); IntColumn get rowVersion => integer().nullable()(); - + TextColumn get additionalFields => text().nullable()(); @override - Set get primaryKey => { auditCreatedBy, clientReferenceId, }; -} \ No newline at end of file + Set get primaryKey => { + auditCreatedBy, + clientReferenceId, + }; +} diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/side_effect.dart b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/side_effect.dart index 32f6f729d..bc048e1f5 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/side_effect.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/side_effect.dart @@ -2,7 +2,9 @@ import 'package:drift/drift.dart'; - +@TableIndex(name: 'sideeffect_clinetref', columns: {#clientReferenceId}) +@TableIndex(name: 'sideeffect_projectid', columns: {#projectId}) +@TableIndex(name: 'sideeffect_taskclientref', columns: {#taskClientReferenceId}) class SideEffect extends Table { TextColumn get id => text().nullable()(); TextColumn get projectId => text().nullable()(); @@ -10,7 +12,8 @@ class SideEffect extends Table { IntColumn get reAttempts => integer().nullable()(); TextColumn get symptoms => text().nullable()(); TextColumn get auditCreatedBy => text().nullable()(); - BoolColumn get nonRecoverableError => boolean().nullable().withDefault(const Constant(false))(); + BoolColumn get nonRecoverableError => + boolean().nullable().withDefault(const Constant(false))(); IntColumn get auditCreatedTime => integer().nullable()(); IntColumn get clientCreatedTime => integer().nullable()(); TextColumn get clientModifiedBy => text().nullable()(); @@ -20,11 +23,15 @@ class SideEffect extends Table { IntColumn get auditModifiedTime => integer().nullable()(); TextColumn get clientReferenceId => text()(); TextColumn get tenantId => text().nullable()(); - BoolColumn get isDeleted => boolean().nullable().withDefault(const Constant(false))(); + BoolColumn get isDeleted => + boolean().nullable().withDefault(const Constant(false))(); IntColumn get rowVersion => integer().nullable()(); - + TextColumn get additionalFields => text().nullable()(); @override - Set get primaryKey => { auditCreatedBy, clientReferenceId, }; -} \ No newline at end of file + Set get primaryKey => { + auditCreatedBy, + clientReferenceId, + }; +} diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/stock.dart b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/stock.dart index 66989b015..f40613c14 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/stock.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/stock.dart @@ -2,6 +2,9 @@ import 'package:drift/drift.dart'; +@TableIndex(name: 'stock_clientref', columns: {#clientReferenceId}) +@TableIndex(name: 'stock_productvariantid', columns: {#productVariantId}) +@TableIndex(name: 'stock_facilityid', columns: {#facilityId}) class Stock extends Table { TextColumn get id => text().nullable()(); TextColumn get tenantId => text().nullable()(); diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/stock_reconciliation.dart b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/stock_reconciliation.dart index 2768c1e13..eca80e41c 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/stock_reconciliation.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/stock_reconciliation.dart @@ -2,7 +2,9 @@ import 'package:drift/drift.dart'; - +@TableIndex(name: 'stockrecon_clientref', columns: {#clientReferenceId}) +@TableIndex(name: 'stockrecon_facilityid', columns: {#facilityId}) +@TableIndex(name: 'stockrecon_productvariantid', columns: {#productVariantId}) class StockReconciliation extends Table { TextColumn get id => text().nullable()(); TextColumn get tenantId => text().nullable()(); @@ -14,7 +16,8 @@ class StockReconciliation extends Table { IntColumn get calculatedCount => integer().nullable()(); TextColumn get commentsOnReconciliation => text().nullable()(); TextColumn get auditCreatedBy => text().nullable()(); - BoolColumn get nonRecoverableError => boolean().nullable().withDefault(const Constant(false))(); + BoolColumn get nonRecoverableError => + boolean().nullable().withDefault(const Constant(false))(); IntColumn get auditCreatedTime => integer().nullable()(); IntColumn get clientCreatedTime => integer().nullable()(); TextColumn get clientModifiedBy => text().nullable()(); @@ -23,12 +26,16 @@ class StockReconciliation extends Table { TextColumn get auditModifiedBy => text().nullable()(); IntColumn get auditModifiedTime => integer().nullable()(); TextColumn get clientReferenceId => text()(); - BoolColumn get isDeleted => boolean().nullable().withDefault(const Constant(false))(); + BoolColumn get isDeleted => + boolean().nullable().withDefault(const Constant(false))(); IntColumn get rowVersion => integer().nullable()(); IntColumn get dateOfReconciliation => integer()(); TextColumn get additionalFields => text().nullable()(); @override - Set get primaryKey => { auditCreatedBy, clientReferenceId, }; -} \ No newline at end of file + Set get primaryKey => { + auditCreatedBy, + clientReferenceId, + }; +} diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/task.dart b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/task.dart index f1481d58d..0dca85b6e 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/task.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/task.dart @@ -2,7 +2,18 @@ import 'package:drift/drift.dart'; - +@TableIndex(name: 'task_clinetref', columns: { + #clientReferenceId, +}) +@TableIndex(name: 'task_projectid', columns: { + #projectId, +}) +@TableIndex(name: 'task_projectbeneficiaryid', columns: { + #projectBeneficiaryId, +}) +@TableIndex(name: 'task_projectbeneficiaryclientref', columns: { + #projectBeneficiaryClientReferenceId, +}) class Task extends Table { TextColumn get id => text().nullable()(); TextColumn get projectId => text().nullable()(); @@ -11,7 +22,8 @@ class Task extends Table { TextColumn get createdBy => text().nullable()(); TextColumn get status => text().nullable()(); TextColumn get auditCreatedBy => text().nullable()(); - BoolColumn get nonRecoverableError => boolean().nullable().withDefault(const Constant(false))(); + BoolColumn get nonRecoverableError => + boolean().nullable().withDefault(const Constant(false))(); IntColumn get auditCreatedTime => integer().nullable()(); IntColumn get clientCreatedTime => integer().nullable()(); TextColumn get clientModifiedBy => text().nullable()(); @@ -21,16 +33,20 @@ class Task extends Table { IntColumn get auditModifiedTime => integer().nullable()(); TextColumn get clientReferenceId => text()(); TextColumn get tenantId => text().nullable()(); - BoolColumn get isDeleted => boolean().nullable().withDefault(const Constant(false))(); + BoolColumn get isDeleted => + boolean().nullable().withDefault(const Constant(false))(); IntColumn get rowVersion => integer().nullable()(); IntColumn get plannedStartDate => integer().nullable()(); IntColumn get plannedEndDate => integer().nullable()(); IntColumn get actualStartDate => integer().nullable()(); IntColumn get actualEndDate => integer().nullable()(); IntColumn get createdDate => integer().nullable()(); - + TextColumn get additionalFields => text().nullable()(); @override - Set get primaryKey => { auditCreatedBy, clientReferenceId, }; -} \ No newline at end of file + Set get primaryKey => { + auditCreatedBy, + clientReferenceId, + }; +} diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/task_resource.dart b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/task_resource.dart index f656d5070..4cecb3919 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/task_resource.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/task_resource.dart @@ -2,7 +2,15 @@ import 'package:drift/drift.dart'; - +@TableIndex(name: 'taskresourceclinetref', columns: { + #clientReferenceId, +}) +@TableIndex(name: 'taskresource_taskclientref', columns: { + #taskclientReferenceId, +}) +@TableIndex(name: 'taskresource_productvariantid', columns: { + #productVariantId, +}) class TaskResource extends Table { TextColumn get clientReferenceId => text()(); TextColumn get taskclientReferenceId => text().nullable()(); @@ -13,7 +21,8 @@ class TaskResource extends Table { BoolColumn get isDelivered => boolean().nullable()(); TextColumn get deliveryComment => text().nullable()(); TextColumn get auditCreatedBy => text().nullable()(); - BoolColumn get nonRecoverableError => boolean().nullable().withDefault(const Constant(false))(); + BoolColumn get nonRecoverableError => + boolean().nullable().withDefault(const Constant(false))(); IntColumn get auditCreatedTime => integer().nullable()(); IntColumn get clientCreatedTime => integer().nullable()(); TextColumn get clientModifiedBy => text().nullable()(); @@ -22,11 +31,15 @@ class TaskResource extends Table { TextColumn get auditModifiedBy => text().nullable()(); IntColumn get auditModifiedTime => integer().nullable()(); TextColumn get tenantId => text().nullable()(); - BoolColumn get isDeleted => boolean().nullable().withDefault(const Constant(false))(); + BoolColumn get isDeleted => + boolean().nullable().withDefault(const Constant(false))(); IntColumn get rowVersion => integer().nullable()(); - + TextColumn get additionalFields => text().nullable()(); @override - Set get primaryKey => { clientReferenceId, auditCreatedBy, }; -} \ No newline at end of file + Set get primaryKey => { + clientReferenceId, + auditCreatedBy, + }; +} diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/tables/project_beneficiary.dart b/packages/digit_data_model/lib/data/local_store/sql_store/tables/project_beneficiary.dart index 93ece0a1c..01a73a9bd 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/tables/project_beneficiary.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/tables/project_beneficiary.dart @@ -2,7 +2,11 @@ import 'package:drift/drift.dart'; - +@TableIndex(name: 'project_clinetref', columns: {#clientReferenceId}) +@TableIndex(name: 'project_projectid', columns: {#projectId}) +@TableIndex( + name: 'project_projectbeneficiaryclientref', + columns: {#beneficiaryClientReferenceId}) class ProjectBeneficiary extends Table { TextColumn get id => text().nullable()(); TextColumn get projectId => text().nullable()(); @@ -10,7 +14,8 @@ class ProjectBeneficiary extends Table { TextColumn get tag => text().nullable()(); TextColumn get beneficiaryClientReferenceId => text().nullable()(); TextColumn get auditCreatedBy => text().nullable()(); - BoolColumn get nonRecoverableError => boolean().nullable().withDefault(const Constant(false))(); + BoolColumn get nonRecoverableError => + boolean().nullable().withDefault(const Constant(false))(); IntColumn get auditCreatedTime => integer().nullable()(); IntColumn get clientCreatedTime => integer().nullable()(); TextColumn get clientModifiedBy => text().nullable()(); @@ -20,12 +25,16 @@ class ProjectBeneficiary extends Table { IntColumn get auditModifiedTime => integer().nullable()(); TextColumn get clientReferenceId => text()(); TextColumn get tenantId => text().nullable()(); - BoolColumn get isDeleted => boolean().nullable().withDefault(const Constant(false))(); + BoolColumn get isDeleted => + boolean().nullable().withDefault(const Constant(false))(); IntColumn get rowVersion => integer().nullable()(); IntColumn get dateOfRegistration => integer()(); - + TextColumn get additionalFields => text().nullable()(); @override - Set get primaryKey => { auditCreatedBy, clientReferenceId, }; -} \ No newline at end of file + Set get primaryKey => { + auditCreatedBy, + clientReferenceId, + }; +} diff --git a/packages/digit_data_model/lib/models/pgr_complaints/pgr_complaints.mapper.dart b/packages/digit_data_model/lib/models/pgr_complaints/pgr_complaints.mapper.dart index 1541fa906..87d606df4 100644 --- a/packages/digit_data_model/lib/models/pgr_complaints/pgr_complaints.mapper.dart +++ b/packages/digit_data_model/lib/models/pgr_complaints/pgr_complaints.mapper.dart @@ -302,7 +302,7 @@ class PgrServiceModelMapper extends ClassMapperBase { v.clientAuditDetails; static const Field _f$clientAuditDetails = - Field('clientAuditDetails', _$clientAuditDetails, mode: FieldMode.member); + Field('clientAuditDetails', _$clientAuditDetails, opt: true); @override final MappableFields fields = const { @@ -344,7 +344,8 @@ class PgrServiceModelMapper extends ClassMapperBase { rowVersion: data.dec(_f$rowVersion), address: data.dec(_f$address), additionalDetail: data.dec(_f$additionalDetail), - auditDetails: data.dec(_f$auditDetails)); + auditDetails: data.dec(_f$auditDetails), + clientAuditDetails: data.dec(_f$clientAuditDetails)); } @override @@ -408,6 +409,9 @@ abstract class PgrServiceModelCopyWith<$R, $In extends PgrServiceModel, $Out> @override AuditDetailsCopyWith<$R, AuditDetails, AuditDetails>? get auditDetails; @override + ClientAuditDetailsCopyWith<$R, ClientAuditDetails, ClientAuditDetails>? + get clientAuditDetails; + @override $R call( {String? clientReferenceId, bool? active, @@ -424,7 +428,8 @@ abstract class PgrServiceModelCopyWith<$R, $In extends PgrServiceModel, $Out> int? rowVersion, PgrAddressModel? address, String? additionalDetail, - AuditDetails? auditDetails}); + AuditDetails? auditDetails, + ClientAuditDetails? clientAuditDetails}); PgrServiceModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>( Then<$Out2, $R2> t); } @@ -447,6 +452,10 @@ class _PgrServiceModelCopyWithImpl<$R, $Out> AuditDetailsCopyWith<$R, AuditDetails, AuditDetails>? get auditDetails => $value.auditDetails?.copyWith.$chain((v) => call(auditDetails: v)); @override + ClientAuditDetailsCopyWith<$R, ClientAuditDetails, ClientAuditDetails>? + get clientAuditDetails => $value.clientAuditDetails?.copyWith + .$chain((v) => call(clientAuditDetails: v)); + @override $R call( {String? clientReferenceId, bool? active, @@ -463,7 +472,8 @@ class _PgrServiceModelCopyWithImpl<$R, $Out> int? rowVersion, PgrAddressModel? address, Object? additionalDetail = $none, - Object? auditDetails = $none}) => + Object? auditDetails = $none, + Object? clientAuditDetails = $none}) => $apply(FieldCopyWithData({ if (clientReferenceId != null) #clientReferenceId: clientReferenceId, if (active != null) #active: active, @@ -480,7 +490,8 @@ class _PgrServiceModelCopyWithImpl<$R, $Out> if (rowVersion != null) #rowVersion: rowVersion, if (address != null) #address: address, if (additionalDetail != $none) #additionalDetail: additionalDetail, - if (auditDetails != $none) #auditDetails: auditDetails + if (auditDetails != $none) #auditDetails: auditDetails, + if (clientAuditDetails != $none) #clientAuditDetails: clientAuditDetails })); @override PgrServiceModel $make(CopyWithData data) => PgrServiceModel( @@ -503,7 +514,9 @@ class _PgrServiceModelCopyWithImpl<$R, $Out> address: data.get(#address, or: $value.address), additionalDetail: data.get(#additionalDetail, or: $value.additionalDetail), - auditDetails: data.get(#auditDetails, or: $value.auditDetails)); + auditDetails: data.get(#auditDetails, or: $value.auditDetails), + clientAuditDetails: + data.get(#clientAuditDetails, or: $value.clientAuditDetails)); @override PgrServiceModelCopyWith<$R2, PgrServiceModel, $Out2> $chain<$R2, $Out2>( @@ -578,7 +591,7 @@ class PgrComplainantModelMapper extends ClassMapperBase { v.clientAuditDetails; static const Field _f$clientAuditDetails = - Field('clientAuditDetails', _$clientAuditDetails, mode: FieldMode.member); + Field('clientAuditDetails', _$clientAuditDetails, opt: true); @override final MappableFields fields = const { @@ -618,7 +631,8 @@ class PgrComplainantModelMapper extends ClassMapperBase { active: data.dec(_f$active), isDeleted: data.dec(_f$isDeleted), rowVersion: data.dec(_f$rowVersion), - auditDetails: data.dec(_f$auditDetails)); + auditDetails: data.dec(_f$auditDetails), + clientAuditDetails: data.dec(_f$clientAuditDetails)); } @override @@ -683,6 +697,9 @@ abstract class PgrComplainantModelCopyWith<$R, $In extends PgrComplainantModel, @override AuditDetailsCopyWith<$R, AuditDetails, AuditDetails>? get auditDetails; @override + ClientAuditDetailsCopyWith<$R, ClientAuditDetails, ClientAuditDetails>? + get clientAuditDetails; + @override $R call( {int? id, String? clientReferenceId, @@ -698,7 +715,8 @@ abstract class PgrComplainantModelCopyWith<$R, $In extends PgrComplainantModel, bool? active, covariant bool? isDeleted, int? rowVersion, - AuditDetails? auditDetails}); + AuditDetails? auditDetails, + ClientAuditDetails? clientAuditDetails}); PgrComplainantModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>( Then<$Out2, $R2> t); } @@ -720,6 +738,10 @@ class _PgrComplainantModelCopyWithImpl<$R, $Out> AuditDetailsCopyWith<$R, AuditDetails, AuditDetails>? get auditDetails => $value.auditDetails?.copyWith.$chain((v) => call(auditDetails: v)); @override + ClientAuditDetailsCopyWith<$R, ClientAuditDetails, ClientAuditDetails>? + get clientAuditDetails => $value.clientAuditDetails?.copyWith + .$chain((v) => call(clientAuditDetails: v)); + @override $R call( {Object? id = $none, String? clientReferenceId, @@ -735,7 +757,8 @@ class _PgrComplainantModelCopyWithImpl<$R, $Out> bool? active, bool? isDeleted, int? rowVersion, - Object? auditDetails = $none}) => + Object? auditDetails = $none, + Object? clientAuditDetails = $none}) => $apply(FieldCopyWithData({ if (id != $none) #id: id, if (clientReferenceId != null) #clientReferenceId: clientReferenceId, @@ -752,7 +775,8 @@ class _PgrComplainantModelCopyWithImpl<$R, $Out> if (active != null) #active: active, if (isDeleted != null) #isDeleted: isDeleted, if (rowVersion != null) #rowVersion: rowVersion, - if (auditDetails != $none) #auditDetails: auditDetails + if (auditDetails != $none) #auditDetails: auditDetails, + if (clientAuditDetails != $none) #clientAuditDetails: clientAuditDetails })); @override PgrComplainantModel $make(CopyWithData data) => PgrComplainantModel( @@ -772,7 +796,9 @@ class _PgrComplainantModelCopyWithImpl<$R, $Out> active: data.get(#active, or: $value.active), isDeleted: data.get(#isDeleted, or: $value.isDeleted), rowVersion: data.get(#rowVersion, or: $value.rowVersion), - auditDetails: data.get(#auditDetails, or: $value.auditDetails)); + auditDetails: data.get(#auditDetails, or: $value.auditDetails), + clientAuditDetails: + data.get(#clientAuditDetails, or: $value.clientAuditDetails)); @override PgrComplainantModelCopyWith<$R2, PgrComplainantModel, $Out2> @@ -959,14 +985,14 @@ class PgrWorkflowModelMapper extends ClassMapperBase { static AuditDetails? _$auditDetails(PgrWorkflowModel v) => v.auditDetails; static const Field _f$auditDetails = Field('auditDetails', _$auditDetails, opt: true); - static bool? _$isDeleted(PgrWorkflowModel v) => v.isDeleted; - static const Field _f$isDeleted = - Field('isDeleted', _$isDeleted, opt: true, def: false); static ClientAuditDetails? _$clientAuditDetails(PgrWorkflowModel v) => v.clientAuditDetails; static const Field _f$clientAuditDetails = - Field('clientAuditDetails', _$clientAuditDetails, mode: FieldMode.member); + Field('clientAuditDetails', _$clientAuditDetails, opt: true); + static bool? _$isDeleted(PgrWorkflowModel v) => v.isDeleted; + static const Field _f$isDeleted = + Field('isDeleted', _$isDeleted, opt: true, def: false); @override final MappableFields fields = const { @@ -974,8 +1000,8 @@ class PgrWorkflowModelMapper extends ClassMapperBase { #assignees: _f$assignees, #comments: _f$comments, #auditDetails: _f$auditDetails, - #isDeleted: _f$isDeleted, #clientAuditDetails: _f$clientAuditDetails, + #isDeleted: _f$isDeleted, }; @override final bool ignoreNull = true; @@ -986,6 +1012,7 @@ class PgrWorkflowModelMapper extends ClassMapperBase { assignees: data.dec(_f$assignees), comments: data.dec(_f$comments), auditDetails: data.dec(_f$auditDetails), + clientAuditDetails: data.dec(_f$clientAuditDetails), isDeleted: data.dec(_f$isDeleted)); } @@ -1049,11 +1076,15 @@ abstract class PgrWorkflowModelCopyWith<$R, $In extends PgrWorkflowModel, $Out> @override AuditDetailsCopyWith<$R, AuditDetails, AuditDetails>? get auditDetails; @override + ClientAuditDetailsCopyWith<$R, ClientAuditDetails, ClientAuditDetails>? + get clientAuditDetails; + @override $R call( {String? action, List? assignees, String? comments, AuditDetails? auditDetails, + ClientAuditDetails? clientAuditDetails, bool? isDeleted}); PgrWorkflowModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>( Then<$Out2, $R2> t); @@ -1075,17 +1106,24 @@ class _PgrWorkflowModelCopyWithImpl<$R, $Out> AuditDetailsCopyWith<$R, AuditDetails, AuditDetails>? get auditDetails => $value.auditDetails?.copyWith.$chain((v) => call(auditDetails: v)); @override + ClientAuditDetailsCopyWith<$R, ClientAuditDetails, ClientAuditDetails>? + get clientAuditDetails => $value.clientAuditDetails?.copyWith + .$chain((v) => call(clientAuditDetails: v)); + @override $R call( {String? action, List? assignees, String? comments, Object? auditDetails = $none, + Object? clientAuditDetails = $none, Object? isDeleted = $none}) => $apply(FieldCopyWithData({ if (action != null) #action: action, if (assignees != null) #assignees: assignees, if (comments != null) #comments: comments, if (auditDetails != $none) #auditDetails: auditDetails, + if (clientAuditDetails != $none) + #clientAuditDetails: clientAuditDetails, if (isDeleted != $none) #isDeleted: isDeleted })); @override @@ -1094,6 +1132,8 @@ class _PgrWorkflowModelCopyWithImpl<$R, $Out> assignees: data.get(#assignees, or: $value.assignees), comments: data.get(#comments, or: $value.comments), auditDetails: data.get(#auditDetails, or: $value.auditDetails), + clientAuditDetails: + data.get(#clientAuditDetails, or: $value.clientAuditDetails), isDeleted: data.get(#isDeleted, or: $value.isDeleted)); @override From 69343af42cebfefa84fb326dc4a7379385cacc70 Mon Sep 17 00:00:00 2001 From: Ramkrishna-egov Date: Wed, 5 Jun 2024 12:52:09 +0530 Subject: [PATCH 012/241] Added referral reconciliation utils to export --- .../referral_reconciliation/lib/referral_reconciliation.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/referral_reconciliation/lib/referral_reconciliation.dart b/packages/referral_reconciliation/lib/referral_reconciliation.dart index 0f262c088..f6b434186 100644 --- a/packages/referral_reconciliation/lib/referral_reconciliation.dart +++ b/packages/referral_reconciliation/lib/referral_reconciliation.dart @@ -11,3 +11,4 @@ export 'data/repositories/remote/hf_referral.dart'; export 'models/entities/hf_referral.dart'; export 'referral_reconciliation.init.dart'; export 'router/referral_reconciliation_router.dart'; +export 'utils/utils.dart'; From 9d9f153fc1350652bd2b5ae48841dd898ae94354 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Wed, 5 Jun 2024 14:53:10 +0530 Subject: [PATCH 013/241] script updates --- tools/attendance_package_imports.dart | 84 ++++++++++------------ tools/referral_reconciliation_imports.dart | 2 +- tools/registration_delivery_imports.dart | 7 +- 3 files changed, 42 insertions(+), 51 deletions(-) diff --git a/tools/attendance_package_imports.dart b/tools/attendance_package_imports.dart index 65c273c63..647858b2b 100644 --- a/tools/attendance_package_imports.dart +++ b/tools/attendance_package_imports.dart @@ -86,7 +86,7 @@ void _updateHome(String homeFilePath) { icon: Icons.fingerprint_outlined, label: i18.home.manageAttendanceLabel, onPressed: () { - // context.router.push(const ManageAttendanceRoute()); + context.router.push(const ManageAttendanceRoute()); }, ), ), @@ -526,7 +526,8 @@ AttendanceSingleton().setTenantId(envConfig.variables.tenantId); '''; // Define the local and remote repositories - var localRepository = ''' + var localRepository = [ + ''' AttendanceLocalRepository( sql, AttendanceOpLogManager(isar), @@ -535,14 +536,17 @@ AttendanceLogsLocalRepository( sql, AttendanceLogOpLogManager(isar), ), - '''; + ''' + ]; - var remoteRepository = ''' + var remoteRepository = [ + ''' if (value == DataModelType.attendanceRegister) AttendanceRemoteRepository(dio, actionMap: actions), if (value == DataModelType.attendance) AttendanceLogRemoteRepository(dio, actionMap: actions), - '''; + ''' + ]; // Check if the constants.dart file exists var constantsFile = File(constantsFilePath); @@ -591,50 +595,36 @@ if (value == DataModelType.attendance) } // Add the local and remote repositories to the getLocalRepositories and getRemoteRepositories methods - if (!normalizedFileContent - .contains(localRepository.replaceAll(RegExp(r'\s'), ''))) { - var getLocalRepositoriesIndex = - constantsFileContent.indexOf('getLocalRepositories('); - if (getLocalRepositoriesIndex != -1) { - var endOfGetLocalRepositories = getLocalRepositoriesIndex + - constantsFileContent - .substring(getLocalRepositoriesIndex) - .indexOf('addAll(') + - 'addAll('.length; - var endOfAddAll = constantsFileContent - .substring(endOfGetLocalRepositories) - .indexOf(']') + - endOfGetLocalRepositories; - constantsFileContent = constantsFileContent.substring(0, endOfAddAll) + - localRepository + - constantsFileContent.substring(endOfAddAll); - print('The local repositories were added.'); - } - } else { - print('The local repositories already exist.'); + var getLocalRepositoriesIndex = + constantsFileContent.indexOf('getLocalRepositories('); + if (getLocalRepositoriesIndex != -1) { + var endOfGetLocalRepositories = getLocalRepositoriesIndex + + constantsFileContent.substring(getLocalRepositoriesIndex).indexOf(']') + + 1; + constantsFileContent = + constantsFileContent.substring(0, endOfGetLocalRepositories - 1) + + '\n' + + localRepository.join('\n') + + constantsFileContent.substring(endOfGetLocalRepositories - 1); + print('The local repositories were added.'); } - if (!normalizedFileContent - .contains(remoteRepository.replaceAll(RegExp(r'\s'), ''))) { - var getRemoteRepositoriesIndex = - constantsFileContent.indexOf('getRemoteRepositories('); - if (getRemoteRepositoriesIndex != -1) { - var endOfGetRemoteRepositories = getRemoteRepositoriesIndex + - constantsFileContent - .substring(getRemoteRepositoriesIndex) - .indexOf('addAll(') + - 'addAll('.length; - var endOfAddAll = constantsFileContent - .substring(endOfGetRemoteRepositories) - .indexOf(']') + - endOfGetRemoteRepositories; - constantsFileContent = constantsFileContent.substring(0, endOfAddAll) + - remoteRepository + - constantsFileContent.substring(endOfAddAll); - print('The remote repositories were added.'); - } - } else { - print('The remote repositories already exist.'); + var getRemoteRepositoriesIndex = + constantsFileContent.indexOf('getRemoteRepositories('); + if (getRemoteRepositoriesIndex != -1) { + var endOfGetRemoteRepositories = getRemoteRepositoriesIndex + + constantsFileContent + .substring(getRemoteRepositoriesIndex) + .indexOf('addAll(') + + 'addAll('.length; + var endOfAddAll = constantsFileContent + .substring(endOfGetRemoteRepositories) + .indexOf(']') + + endOfGetRemoteRepositories; + constantsFileContent = constantsFileContent.substring(0, endOfAddAll) + + remoteRepository.join('\n') + + constantsFileContent.substring(endOfAddAll); + print('The remote repositories were added.'); } // Write the updated content back to the constants.dart file diff --git a/tools/referral_reconciliation_imports.dart b/tools/referral_reconciliation_imports.dart index 93f5dd9d4..0d4dcb91f 100644 --- a/tools/referral_reconciliation_imports.dart +++ b/tools/referral_reconciliation_imports.dart @@ -164,7 +164,7 @@ void _setBoundaryInContextUtilityFile( void _updateHome(String homeFilePath) { var importStatement = ''' import 'package:referral_reconciliation/referral_reconciliation.dart'; - import 'package:referral_reconciliation/router/referral_reconciliation.gm.dart'; + import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart'; '''; var homeItemsData = ''' diff --git a/tools/registration_delivery_imports.dart b/tools/registration_delivery_imports.dart index 915bbd37a..01b55034a 100644 --- a/tools/registration_delivery_imports.dart +++ b/tools/registration_delivery_imports.dart @@ -371,7 +371,7 @@ void _updateSyncDownFile(String syncDownFilePath) { final addressAdditionalId = responseEntity?.address?.id == null ? null : AdditionalId( - idType: householdAddressIdKey, + idType: 'householdAddressId', id: responseEntity!.address!.id!, ); @@ -618,7 +618,7 @@ void _updateSyncDownFile(String syncDownFilePath) { if (id == null) return null; return AdditionalId( - idType: taskResourceIdKey, + idType: 'taskResourceId', id: id, ); }) @@ -1160,6 +1160,7 @@ void _addRepoToNetworkManagerProviderWrapper( "RepositoryProvider>(create: (_) => TaskLocalRepository(sql,TaskOpLogManager(isar),),),", "RepositoryProvider>(create: (_) => ReferralLocalRepository(sql,ReferralOpLogManager(isar),),),", "RepositoryProvider>(create: (_) => SideEffectLocalRepository(sql,SideEffectOpLogManager(isar),),),", + "RepositoryProvider(create: (_) => RegistrationDeliveryAddressRepo(sql,AddressOpLogManager(isar),),),", ]; // Define the remote repositories of DataModel @@ -1240,7 +1241,7 @@ void _addRepoToNetworkManagerProviderWrapper( // Add the remote repository of DataModel to the _getRemoteRepositories method var replacementString = networkManagerProviderWrapperFileContent.contains(']);') - ? ' $remoteRepositoryOfRegistrationDelivery,\n]);' + ? ' $remoteRepositoryOfRegistrationDelivery\n]);' : ' $remoteRepositoryOfRegistrationDelivery\n]);'; networkManagerProviderWrapperFileContent = networkManagerProviderWrapperFileContent.replaceFirst( From 9c4c9b635de47a8171b42cc99adecda278517dee Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Wed, 5 Jun 2024 16:28:58 +0530 Subject: [PATCH 014/241] added missing translate for localizations added keyboard type for waybill quantity --- packages/digit_scanner/lib/utils/scanner_utils.dart | 12 ++++++++---- .../lib/pages/record_stock/stock_details.dart | 4 ++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/digit_scanner/lib/utils/scanner_utils.dart b/packages/digit_scanner/lib/utils/scanner_utils.dart index 97f9cc158..d44ebab10 100644 --- a/packages/digit_scanner/lib/utils/scanner_utils.dart +++ b/packages/digit_scanner/lib/utils/scanner_utils.dart @@ -120,23 +120,27 @@ class DigitScannerUtils { if (alreadyScanned) { // Handle error if the barcode is already scanned - await handleError(i18.scanner.resourceAlreadyScanned); + await handleError( + localizations.translate(i18.scanner.resourceAlreadyScanned)); } else if (quantity > result.length) { // Store the parsed result if the quantity is greater than result length await storeValue(parsedResult); } else { // Handle error if there is a mismatch in the scanned resource count - await handleError(i18.scanner.scannedResourceCountMisMatch); + await handleError(localizations + .translate(i18.scanner.scannedResourceCountMisMatch)); } } catch (e) { // Handle error if parsing fails - await handleError(i18.scanner.scannedResourceCountMisMatch); + await handleError(localizations + .translate(i18.scanner.scannedResourceCountMisMatch)); } } else { // For non-GS1 codes if (bloc.state.qrCodes.contains(barcodes.first.displayValue)) { // Handle error if the QR code is already scanned - await handleError(i18.scanner.resourceAlreadyScanned); + await handleError( + localizations.translate(i18.scanner.resourceAlreadyScanned)); return; } else { // Store the QR code if not already scanned diff --git a/packages/inventory_management/lib/pages/record_stock/stock_details.dart b/packages/inventory_management/lib/pages/record_stock/stock_details.dart index d1a132b2e..66f5a11e2 100644 --- a/packages/inventory_management/lib/pages/record_stock/stock_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/stock_details.dart @@ -787,6 +787,10 @@ class _StockDetailsPageState extends LocalizedState { i18.stockDetails.waybillNumberLabel, ), formControlName: _waybillNumberKey, + keyboardType: + const TextInputType.numberWithOptions( + decimal: true, + ), ), if (isWareHouseMgr) DigitTextFormField( From e1fbc30268d6428d32b1ea97a4550270aaca6f08 Mon Sep 17 00:00:00 2001 From: Ramkrishna-egov Date: Wed, 5 Jun 2024 18:19:35 +0530 Subject: [PATCH 015/241] HLM-6157::Warehouse and Product variant mandatory selection --- .../lib/blocs/inventory_report.dart | 152 +++++++++--------- .../lib/pages/reports/report_details.dart | 6 +- .../lib/utils/i18_key_constants.dart | 7 +- .../record_reason_checklist.dart | 2 +- 4 files changed, 89 insertions(+), 78 deletions(-) diff --git a/packages/inventory_management/lib/blocs/inventory_report.dart b/packages/inventory_management/lib/blocs/inventory_report.dart index 7fefdaf77..29c2bdf7f 100644 --- a/packages/inventory_management/lib/blocs/inventory_report.dart +++ b/packages/inventory_management/lib/blocs/inventory_report.dart @@ -39,83 +39,87 @@ class InventoryReportBloc final facilityId = event.facilityId; final productVariantId = event.productVariantId; - if (reportType == InventoryReportType.reconciliation) { - throw AppException( - 'Invalid report type: ${event.reportType}', + if (facilityId.trim().isEmpty || productVariantId.trim().isEmpty) { + emit(const InventoryReportEmptyState()); + } else { + if (reportType == InventoryReportType.reconciliation) { + throw AppException( + 'Invalid report type: ${event.reportType}', + ); + } + emit(const InventoryReportLoadingState()); + + List? transactionReason; + List? transactionType; + String? senderId; + String? receiverId; + + if (reportType == InventoryReportType.receipt) { + transactionType = [TransactionType.received.toValue()]; + transactionReason = [TransactionReason.received.toValue()]; + receiverId = facilityId; + senderId = null; + } else if (reportType == InventoryReportType.dispatch) { + transactionType = [TransactionType.dispatched.toValue()]; + transactionReason = []; + receiverId = null; + senderId = facilityId; + } else if (reportType == InventoryReportType.returned) { + transactionType = [TransactionType.received.toValue()]; + transactionReason = [TransactionReason.returned.toValue()]; + receiverId = null; + senderId = facilityId; + } else if (reportType == InventoryReportType.damage) { + transactionType = [TransactionType.dispatched.toValue()]; + transactionReason = [ + TransactionReason.damagedInStorage.toValue(), + TransactionReason.damagedInTransit.toValue(), + ]; + receiverId = facilityId; + senderId = null; + } else if (reportType == InventoryReportType.loss) { + transactionType = [TransactionType.dispatched.toValue()]; + transactionReason = [ + TransactionReason.lostInStorage.toValue(), + TransactionReason.lostInTransit.toValue(), + ]; + receiverId = facilityId; + senderId = null; + } + final data = (receiverId != null + ? await stockRepository.search( + StockSearchModel( + transactionType: transactionType, + tenantId: InventorySingleton().tenantId, + receiverId: receiverId, + productVariantId: productVariantId, + transactionReason: transactionReason, + ), + ) + : await stockRepository.search( + StockSearchModel( + transactionType: transactionType, + tenantId: InventorySingleton().tenantId, + senderId: senderId, + productVariantId: productVariantId, + transactionReason: transactionReason, + ), + )) + .where((element) => + element.auditDetails != null && + element.auditDetails?.createdBy == + InventorySingleton().loggedInUserUuid); + + final groupedData = data.groupListsBy( + (element) => DateFormat('dd MMM yyyy').format( + DateTime.fromMillisecondsSinceEpoch( + element.auditDetails!.createdTime, + ), + ), ); - } - emit(const InventoryReportLoadingState()); - List? transactionReason; - List? transactionType; - String? senderId; - String? receiverId; - - if (reportType == InventoryReportType.receipt) { - transactionType = [TransactionType.received.toValue()]; - transactionReason = [TransactionReason.received.toValue()]; - receiverId = facilityId; - senderId = null; - } else if (reportType == InventoryReportType.dispatch) { - transactionType = [TransactionType.dispatched.toValue()]; - transactionReason = []; - receiverId = null; - senderId = facilityId; - } else if (reportType == InventoryReportType.returned) { - transactionType = [TransactionType.received.toValue()]; - transactionReason = [TransactionReason.returned.toValue()]; - receiverId = null; - senderId = facilityId; - } else if (reportType == InventoryReportType.damage) { - transactionType = [TransactionType.dispatched.toValue()]; - transactionReason = [ - TransactionReason.damagedInStorage.toValue(), - TransactionReason.damagedInTransit.toValue(), - ]; - receiverId = facilityId; - senderId = null; - } else if (reportType == InventoryReportType.loss) { - transactionType = [TransactionType.dispatched.toValue()]; - transactionReason = [ - TransactionReason.lostInStorage.toValue(), - TransactionReason.lostInTransit.toValue(), - ]; - receiverId = facilityId; - senderId = null; + emit(InventoryReportStockState(stockData: groupedData)); } - final data = (receiverId != null - ? await stockRepository.search( - StockSearchModel( - transactionType: transactionType, - tenantId: InventorySingleton().tenantId, - receiverId: receiverId, - productVariantId: productVariantId, - transactionReason: transactionReason, - ), - ) - : await stockRepository.search( - StockSearchModel( - transactionType: transactionType, - tenantId: InventorySingleton().tenantId, - senderId: senderId, - productVariantId: productVariantId, - transactionReason: transactionReason, - ), - )) - .where((element) => - element.auditDetails != null && - element.auditDetails?.createdBy == - InventorySingleton().loggedInUserUuid); - - final groupedData = data.groupListsBy( - (element) => DateFormat('dd MMM yyyy').format( - DateTime.fromMillisecondsSinceEpoch( - element.auditDetails!.createdTime, - ), - ), - ); - - emit(InventoryReportStockState(stockData: groupedData)); } Future _handleLoadingEvent( diff --git a/packages/inventory_management/lib/pages/reports/report_details.dart b/packages/inventory_management/lib/pages/reports/report_details.dart index 1e4780651..83d248577 100644 --- a/packages/inventory_management/lib/pages/reports/report_details.dart +++ b/packages/inventory_management/lib/pages/reports/report_details.dart @@ -1,4 +1,5 @@ import 'package:auto_route/auto_route.dart'; +import 'package:collection/collection.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; @@ -6,7 +7,6 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:inventory_management/router/inventory_router.gm.dart'; import 'package:inventory_management/utils/extensions/extensions.dart'; import 'package:reactive_forms/reactive_forms.dart'; -import 'package:collection/collection.dart'; import '../../../utils/i18_key_constants.dart' as i18; import '../../../widgets/component_wrapper/facility_bloc_wrapper.dart'; @@ -135,7 +135,9 @@ class _InventoryReportDetailsPageState i18.inventoryReportDetails.noRecordsMessage, ); final noFilterMessage = localizations.translate( - i18.inventoryReportDetails.noFilterMessage, + InventorySingleton().isDistributor && !InventorySingleton().isWareHouseMgr + ? i18.inventoryReportDetails.noFilterMessageDistributor + : i18.inventoryReportDetails.noFilterMessage, ); return ScrollableContent( diff --git a/packages/inventory_management/lib/utils/i18_key_constants.dart b/packages/inventory_management/lib/utils/i18_key_constants.dart index 487f91fa1..f3f237bcc 100644 --- a/packages/inventory_management/lib/utils/i18_key_constants.dart +++ b/packages/inventory_management/lib/utils/i18_key_constants.dart @@ -133,7 +133,8 @@ class WarehouseDetails { String get noFacilitiesAssigned => 'NO_FACILITIES_ASSIGNED'; - String get noFacilitiesAssignedDescription => 'NO_FACILITIES_ASSIGNED_DESCRIPTION'; + String get noFacilitiesAssignedDescription => + 'NO_FACILITIES_ASSIGNED_DESCRIPTION'; } class StockDetails { @@ -481,6 +482,10 @@ class InventoryReportDetails { String get noFilterMessage { return 'INVENTORY_REPORT_DETAILS_NO_FILTER_MESSAGE'; } + + String get noFilterMessageDistributor { + return 'INVENTORY_REPORT_DETAILS_NO_PRODUCT_SELECTED'; + } } class IndividualDetails { diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart index d3a497112..5a5303e09 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart @@ -458,7 +458,7 @@ class _ReferralReasonChecklistPageState final childIndex = initialAttributes?.indexOf(matchingChildItem); if (childIndex != null) { - // controller[childIndex].clear(); + controller[childIndex].clear(); visibleChecklistIndexes .removeWhere((v) => v == childIndex); } From 01f9f9bc1006a8e246fa8d424a2c5da495d497cc Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Thu, 6 Jun 2024 16:25:42 +0530 Subject: [PATCH 016/241] changed package id to com.digit.hcm added firebase config in app config and mdms removed unused files in attendance and inventory and updated test case in inventory --- .../android/app/build.gradle | 2 +- .../android/app/src/debug/AndroidManifest.xml | 2 +- .../android/app/src/main/AndroidManifest.xml | 2 +- .../MainActivity.kt | 2 +- .../no_sql/schema/app_configuration.dart | 7 +- .../lib/data/repositories/remote/mdms.dart | 7 +- .../models/app_config/app_config_model.dart | 12 + .../app_config/app_config_model.freezed.dart | 214 +++++++++++++++++- .../models/app_config/app_config_model.g.dart | 17 ++ .../lib/pages/home.dart | 1 - .../lib/utils/constants.dart | 12 + .../pubspec.yaml | 2 +- .../lib/attendance_management.dart | 1 - .../lib/blocs/attendance_listeners.dart | 1 - .../digit_components/example/pubspec.lock | 2 +- packages/inventory_management/CHANGELOG.md | 6 +- .../lib/blocs/inventory_listener.dart | 34 --- .../lib/inventory_management.dart | 1 - .../lib/pages/manage_stocks.dart | 2 - .../record_stock/record_stock_wrapper.dart | 2 - .../pages/record_stock/warehouse_details.dart | 1 - packages/inventory_management/pubspec.lock | 4 +- packages/inventory_management/pubspec.yaml | 2 +- .../test/blocs/record_stock_test.dart | 22 +- 24 files changed, 276 insertions(+), 82 deletions(-) delete mode 100644 packages/attendance_management/lib/blocs/attendance_listeners.dart delete mode 100644 packages/inventory_management/lib/blocs/inventory_listener.dart diff --git a/apps/health_campaign_field_worker_app/android/app/build.gradle b/apps/health_campaign_field_worker_app/android/app/build.gradle index 14507c909..7ed3cf689 100644 --- a/apps/health_campaign_field_worker_app/android/app/build.gradle +++ b/apps/health_campaign_field_worker_app/android/app/build.gradle @@ -47,7 +47,7 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "org.egov.salama" + applicationId "com.digit.hcm" // You can update the following values to match your application needs. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. minSdkVersion 21 diff --git a/apps/health_campaign_field_worker_app/android/app/src/debug/AndroidManifest.xml b/apps/health_campaign_field_worker_app/android/app/src/debug/AndroidManifest.xml index 83e090f37..83bb44a80 100644 --- a/apps/health_campaign_field_worker_app/android/app/src/debug/AndroidManifest.xml +++ b/apps/health_campaign_field_worker_app/android/app/src/debug/AndroidManifest.xml @@ -1,5 +1,5 @@ + package="com.digit.hcm"> downSyncLocalRepository; - final NetworkManager networkManager; final BandwidthCheckRepository bandwidthCheckRepository; final LocalRepository - householdLocalRepository; + householdLocalRepository; final LocalRepository - householdMemberLocalRepository; + householdMemberLocalRepository; final LocalRepository - projectBeneficiaryLocalRepository; + projectBeneficiaryLocalRepository; final LocalRepository taskLocalRepository; final LocalRepository - sideEffectLocalRepository; + sideEffectLocalRepository; final LocalRepository - referralLocalRepository; + referralLocalRepository; BeneficiaryDownSyncBloc({ required this.individualLocalRepository, required this.downSyncRemoteRepository, required this.downSyncLocalRepository, - required this.networkManager, required this.bandwidthCheckRepository, required this.householdLocalRepository, required this.householdMemberLocalRepository, @@ -202,7 +200,9 @@ class BeneficiaryDownSyncBloc ); // check if the API response is there or it failed if (downSyncResults.isNotEmpty) { - await networkManager.writeToEntityDB(downSyncResults, [ + await SyncServiceSingleton() + .entityMapper + ?.writeToEntityDB(downSyncResults, [ individualLocalRepository, householdLocalRepository, householdMemberLocalRepository, diff --git a/apps/health_campaign_field_worker_app/lib/data/data_manager.dart b/apps/health_campaign_field_worker_app/lib/data/data_manager.dart deleted file mode 100644 index 7d649d73e..000000000 --- a/apps/health_campaign_field_worker_app/lib/data/data_manager.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'dart:async'; - -import 'package:digit_data_model/data_model.dart'; - -class DataManager { - final RemoteRepository remoteRepository; - final LocalRepository localRepository; - final PersistenceConfiguration configuration; - - const DataManager({ - required this.localRepository, - required this.remoteRepository, - required this.configuration, - }); - - DataRepository _getRepository(PersistenceConfiguration configuration) { - switch (configuration) { - case PersistenceConfiguration.offline: - return localRepository; - case PersistenceConfiguration.online: - return remoteRepository; - } - } - - FutureOr> search(R query) => - _getRepository(configuration).search(query); - - FutureOr create(D entity) => - _getRepository(configuration).create(entity); - - FutureOr update(D entity) => - _getRepository(configuration).update(entity); -} - -enum PersistenceConfiguration { offline, online } diff --git a/apps/health_campaign_field_worker_app/lib/data/network_manager.dart b/apps/health_campaign_field_worker_app/lib/data/network_manager.dart index 649e8391a..77c232625 100644 --- a/apps/health_campaign_field_worker_app/lib/data/network_manager.dart +++ b/apps/health_campaign_field_worker_app/lib/data/network_manager.dart @@ -1,19 +1,7 @@ -import 'dart:async'; -import 'dart:convert'; - import 'package:digit_data_model/data_model.dart'; import 'package:flutter/cupertino.dart'; -import 'package:flutter_background_service/flutter_background_service.dart'; -import 'package:registration_delivery/registration_delivery.dart'; - -import 'repositories/sync/remote_type.dart'; import 'package:provider/provider.dart'; -import '../models/bandwidth/bandwidth_model.dart'; -import '../utils/constants.dart'; -import 'local_store/secure_store/secure_store.dart'; -import 'repositories/sync/sync_down.dart'; -import 'repositories/sync/sync_up.dart'; class NetworkManager { final NetworkManagerConfiguration configuration; @@ -31,191 +19,6 @@ class NetworkManager { return context.read>(); } } - -/* This function will read the params and get the records which are not synced - and pushes to the sync-up and sync-down methods */ - - FutureOr performSync({ - required List localRepositories, - required List remoteRepositories, - required BandwidthModel bandwidthModel, - ServiceInstance? service, - }) async { - if (configuration.persistenceConfig == - PersistenceConfiguration.onlineOnly) { - throw Exception('Sync up is not valid for online only configuration'); - } - bool isSyncCompleted = false; - - final futuresSyncDown = await Future.wait( - localRepositories - .map((e) => e.getItemsToBeSyncedDown(bandwidthModel.userId)), - ); - final pendingSyncDownEntries = futuresSyncDown.expand((e) => e).toList(); - - final futuresSyncUp = await Future.wait( - localRepositories - .map((e) => e.getItemsToBeSyncedUp(bandwidthModel.userId)), - ); - final pendingSyncUpEntries = futuresSyncUp.expand((e) => e).toList(); - - SyncError? syncError; - -// Perform the sync Down Operation - - try { - await PerformSyncDown.syncDown( - bandwidthModel: bandwidthModel, - localRepositories: localRepositories.toSet().toList(), - remoteRepositories: remoteRepositories.toSet().toList(), - configuration: configuration, - ); - } catch (e) { - syncError = SyncDownError(e); - service?.stopSelf(); - } - -// Perform the sync up Operation - - try { - await PerformSyncUp.syncUp( - bandwidthModel: bandwidthModel, - localRepositories: localRepositories.toSet().toList(), - remoteRepositories: remoteRepositories.toSet().toList(), - ); - } catch (e) { - syncError ??= SyncUpError(e); - service?.stopSelf(); - } - - if (syncError != null) throw syncError; - - // Recursive function which will call the Perfom Sync - - if (pendingSyncUpEntries.isNotEmpty || pendingSyncDownEntries.isNotEmpty) { - await Future.delayed(const Duration(seconds: 3)); - isSyncCompleted = await performSync( - bandwidthModel: bandwidthModel, - localRepositories: localRepositories, - remoteRepositories: remoteRepositories, - ); - } else if (pendingSyncUpEntries.isEmpty && pendingSyncDownEntries.isEmpty) { - await LocalSecureStore.instance.setManualSyncTrigger(false); - isSyncCompleted = true; - } - - return isSyncCompleted; - } - - // - FutureOr writeToEntityDB( - Map response, - List localRepositories, - ) async { - try { - for (int i = 0; i <= response.keys.length - 1; i++) { - if (response.keys.elementAt(i) != 'DownsyncCriteria') { - final local = RepositoryType.getLocalForType( - DataModels.getDataModelForEntityName(response.keys.elementAt(i)), - localRepositories, - ); - final List entityResponse = - response[response.keys.elementAt(i)] ?? []; - - final entityList = - entityResponse.whereType>().toList(); - - switch (response.keys.elementAt(i)) { - case "Individuals": - final entity = entityList - .map((e) => IndividualModelMapper.fromJson(jsonEncode(e))) - .toList(); - await local.bulkCreate(entity); - case "Households": - final entity = entityList - .map((e) => HouseholdModelMapper.fromJson(jsonEncode(e))) - .toList(); - await local.bulkCreate(entity); - case "HouseholdMembers": - final entity = entityList - .map( - (e) => HouseholdMemberModelMapper.fromJson( - jsonEncode(e), - ), - ) - .toList(); - await local.bulkCreate(entity); - case "ProjectBeneficiaries": - final entity = entityList - .map((e) => - ProjectBeneficiaryModelMapper.fromJson(jsonEncode(e))) - .toList(); - await local.bulkCreate(entity); - case "Tasks": - final entity = entityList - .map((e) => TaskModelMapper.fromJson(jsonEncode(e))) - .toList(); - await local.bulkCreate(entity); - case "SideEffects": - final entity = entityList - .map((e) => SideEffectModelMapper.fromJson(jsonEncode(e))) - .toList(); - await local.bulkCreate(entity); - case "Referrals": - final entity = entityList - .map((e) => ReferralModelMapper.fromJson(jsonEncode(e))) - .toList(); - await local.bulkCreate(entity); - default: - final entity = entityList - .map((e) => EntityModelMapper.fromJson(jsonEncode(e))) - .toList(); - await local.bulkCreate(entity); - } - } - } - } catch (e) { - rethrow; - } - } - - FutureOr getPendingSyncRecordsCount( - List localRepositories, - String userId, - ) async => - (await Future.wait(localRepositories.map((e) { - return e.getItemsToBeSyncedUp(userId); - }))) - .expand((element) => element) - .length; -} - -FutureOr> filterEntitybyBandwidth( - int batchSize, - List entities, -) async { - final List items = []; - final int size = batchSize < entities.length ? batchSize : entities.length; - - for (var i = 0; i < size; i++) { - items.add(entities[i]); - } - - return items; -} - -Future>> filterOpLogByBandwidth( - int batchSize, - List> entities, -) async { - final List> items = []; - final int size = batchSize < entities.length ? batchSize : entities.length; - - for (var i = 0; i < size; i++) { - items.add(entities[i]); - } - - return items; } class NetworkManagerConfiguration { @@ -225,17 +28,3 @@ class NetworkManagerConfiguration { this.persistenceConfig = PersistenceConfiguration.offlineFirst, }); } - -abstract class SyncError implements Exception { - final dynamic error; - - const SyncError([this.error]); -} - -class SyncUpError extends SyncError { - const SyncUpError([dynamic error]) : super(error); -} - -class SyncDownError extends SyncError { - const SyncDownError([dynamic error]) : super(error); -} diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/sync/sync_down.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/sync/sync_down.dart deleted file mode 100644 index 5fed9317b..000000000 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/sync/sync_down.dart +++ /dev/null @@ -1,737 +0,0 @@ -import 'dart:async'; - -import 'package:attendance_management/attendance_management.dart'; -import 'package:collection/collection.dart'; -import 'package:digit_data_model/data_model.dart'; -import 'package:inventory_management/models/entities/stock.dart'; -import 'package:inventory_management/models/entities/stock_reconciliation.dart'; -import 'package:referral_reconciliation/referral_reconciliation.dart'; -import 'package:registration_delivery/models/entities/household.dart'; -import 'package:registration_delivery/models/entities/household_member.dart'; -import 'package:registration_delivery/models/entities/project_beneficiary.dart'; -import 'package:registration_delivery/models/entities/referral.dart'; -import 'package:registration_delivery/models/entities/side_effect.dart'; -import 'package:registration_delivery/models/entities/task.dart'; - -import '../../../models/bandwidth/bandwidth_model.dart'; -import '../../../utils/environment_config.dart'; -import '../../network_manager.dart'; -import './remote_type.dart'; - -class PerformSyncDown { - static FutureOr syncDown({ - required BandwidthModel bandwidthModel, - required List localRepositories, - required List remoteRepositories, - required NetworkManagerConfiguration configuration, - }) async { - const taskResourceIdKey = 'taskResourceId'; - const individualIdentifierIdKey = 'individualIdentifierId'; - const householdAddressIdKey = 'householdAddressId'; - const individualAddressIdKey = 'individualAddressId'; - - if (configuration.persistenceConfig == - PersistenceConfiguration.onlineOnly) { - throw Exception('Sync down is not valid for online only configuration'); - } - - final futures = await Future.wait( - localRepositories - .map((e) => e.getItemsToBeSyncedDown(bandwidthModel.userId)), - ); - - final pendingSyncEntries = futures.expand((e) => e).toList(); - pendingSyncEntries.sort((a, b) => a.createdAt.compareTo(b.createdAt)); - - final groupedEntries = pendingSyncEntries - .where((element) => element.type != DataModelType.service) - .toList() - .groupListsBy( - (element) => element.type, - ); - - for (final typeGroupedEntity in groupedEntries.entries) { - final groupedOperations = typeGroupedEntity.value.groupListsBy( - (element) => element.operation, - ); - - final remote = RepositoryType.getRemoteForType( - typeGroupedEntity.key, - remoteRepositories, - ); - - final local = RepositoryType.getLocalForType( - typeGroupedEntity.key, - localRepositories, - ); - - for (final operationGroupedEntity in groupedOperations.entries) { - final entities = operationGroupedEntity.value.map((e) { - final serverGeneratedId = e.serverGeneratedId; - final rowVersion = e.rowVersion; - if (serverGeneratedId != null && !e.nonRecoverableError) { - return local.opLogManager.applyServerGeneratedIdToEntity( - e.entity, - serverGeneratedId, - rowVersion, - ); - } - - return e.entity; - }).toList(); - - List responseEntities = []; - - switch (typeGroupedEntity.key) { - case DataModelType.individual: - responseEntities = await remote.search(IndividualSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - - for (var element in operationGroupedEntity.value) { - if (element.id == null) return; - final entity = element.entity as IndividualModel; - final responseEntity = responseEntities - .whereType() - .firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId, - ); - - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - final identifierAdditionalIds = responseEntity?.identifiers - ?.map((e) { - final id = e.id; - - if (id == null) return null; - - return AdditionalId( - idType: individualIdentifierIdKey, - id: id, - ); - }) - .whereNotNull() - .toList(); - - final addressAdditionalIds = responseEntity?.address - ?.map((e) { - final id = e.id; - - if (id == null) return null; - - return AdditionalId( - idType: individualAddressIdKey, - id: id, - ); - }) - .whereNotNull() - .toList(); - - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - nonRecoverableError: entity.nonRecoverableError, - additionalIds: [ - if (identifierAdditionalIds != null) - ...identifierAdditionalIds, - if (addressAdditionalIds != null) ...addressAdditionalIds, - ], - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - - if (markAsNonRecoverable) { - await local.update( - entity.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - break; - - case DataModelType.household: - responseEntities = await remote.search(HouseholdSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - - for (var element in operationGroupedEntity.value) { - if (element.id == null) return; - final entity = element.entity as HouseholdModel; - final responseEntity = - responseEntities.whereType().firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId, - ); - - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - final addressAdditionalId = responseEntity?.address?.id == null - ? null - : AdditionalId( - idType: householdAddressIdKey, - id: responseEntity!.address!.id!, - ); - - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - additionalIds: [ - if (addressAdditionalId != null) addressAdditionalId, - ], - dataOperation: element.operation, - rowVersion: rowVersion, - nonRecoverableError: element.nonRecoverableError, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - - if (markAsNonRecoverable) { - await local.update( - entity.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - break; - - case DataModelType.householdMember: - responseEntities = await remote.search(HouseholdMemberSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - - for (var element in operationGroupedEntity.value) { - if (element.id == null) return; - final entity = element.entity as HouseholdMemberModel; - final responseEntity = responseEntities - .whereType() - .firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId, - ); - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - - if (markAsNonRecoverable) { - await local.update( - entity.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - break; - - case DataModelType.sideEffect: - responseEntities = await remote.search(SideEffectSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - - for (var element in typeGroupedEntity.value) { - if (element.id == null) return; - final entity = element.entity as SideEffectModel; - var responseEntity = responseEntities - .whereType() - .firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId, - ); - - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - - if (markAsNonRecoverable) { - await local.update( - entity.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - case DataModelType.referral: - responseEntities = await remote.search(ReferralSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - - for (var element in typeGroupedEntity.value) { - if (element.id == null) return; - final entity = element.entity as ReferralModel; - var responseEntity = - responseEntities.whereType().firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId, - ); - - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - - if (markAsNonRecoverable) { - await local.update( - entity.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - case DataModelType.projectBeneficiary: - responseEntities = - await remote.search(ProjectBeneficiarySearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - - for (var element in operationGroupedEntity.value) { - if (element.id == null) return; - final entity = element.entity as ProjectBeneficiaryModel; - final responseEntity = responseEntities - .whereType() - .firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId, - ); - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - - if (markAsNonRecoverable) { - await local.update( - entity.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - break; - case DataModelType.task: - responseEntities = await remote.search(TaskSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - - for (var element in operationGroupedEntity.value) { - if (element.id == null) return; - final taskModel = element.entity as TaskModel; - var responseEntity = - responseEntities.whereType().firstWhereOrNull( - (e) => - e.clientReferenceId == taskModel.clientReferenceId, - ); - - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - - if (serverGeneratedId != null) { - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: taskModel.clientReferenceId, - serverGeneratedId: serverGeneratedId, - additionalIds: responseEntity?.resources - ?.map((e) { - final id = e.id; - if (id == null) return null; - - return AdditionalId( - idType: taskResourceIdKey, - id: id, - ); - }) - .whereNotNull() - .toList(), - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(taskModel.clientReferenceId); - - if (markAsNonRecoverable) { - await local.update( - taskModel.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - break; - case DataModelType.hFReferral: - responseEntities = await remote.search( - HFReferralSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - ), - ); - - for (var element in operationGroupedEntity.value) { - if (element.id == null) return; - final entity = element.entity as HFReferralModel; - final responseEntity = responseEntities - .whereType() - .firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId, - ); - - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - nonRecoverableError: entity.nonRecoverableError, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - - if (markAsNonRecoverable) { - await local.update( - entity.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - break; - - case DataModelType.attendance: - responseEntities = await remote.search(AttendanceLogSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId!) - .whereNotNull() - .toList(), - tenantId: envConfig.variables.tenantId, - )); - - for (var element in operationGroupedEntity.value) { - if (element.id == null) return; - final entity = element.entity as AttendanceLogModel; - final responseEntity = responseEntities - .whereType() - .firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId, - ); - - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId.toString(), - serverGeneratedId: serverGeneratedId, - nonRecoverableError: entity.nonRecoverableError, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = - await local.opLogManager.updateSyncDownRetry( - entity.clientReferenceId.toString(), - ); - - if (markAsNonRecoverable) { - await local.update( - entity.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - break; - - case DataModelType.stock: - responseEntities = await remote.search( - StockSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - ), - ); - - for (var element in operationGroupedEntity.value) { - if (element.id == null) return; - final entity = element.entity as StockModel; - final responseEntity = - responseEntities.whereType().firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId, - ); - - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - - if (serverGeneratedId != null) { - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId!, - serverGeneratedId: serverGeneratedId, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - - if (markAsNonRecoverable) { - await local.update( - entity.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - break; - - case DataModelType.stockReconciliation: - responseEntities = - await remote.search(StockReconciliationSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - )); - - for (var element in operationGroupedEntity.value) { - if (element.id == null) return; - final entity = element.entity as StockReconciliationModel; - final responseEntity = responseEntities - .whereType() - .firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId, - ); - - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - - if (serverGeneratedId != null) { - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - - if (markAsNonRecoverable) { - await local.update( - entity.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - break; - - case DataModelType.complaints: - if (remote is! PgrServiceRemoteRepository) continue; - - final futures = entities - .whereType() - .map((e) => e.serviceRequestId) - .whereNotNull() - .map( - (e) { - final future = remote.searchWithoutClientReferenceId( - PgrServiceSearchModel( - serviceRequestId: e, - ), - ); - - return Future.sync(() => future); - }, - ); - - final resolvedFutures = await Future.wait(futures); - - responseEntities = resolvedFutures - .expand((element) => element) - .whereType() - // We only need serviceRequestId and application status - .map((e) => PgrServiceModel( - clientReferenceId: '', - tenantId: e.tenantId ?? '', - serviceCode: e.serviceCode ?? '', - description: e.description ?? '', - serviceRequestId: e.serviceRequestId, - applicationStatus: e.applicationStatus ?? - PgrServiceApplicationStatus.pendingAssignment, - user: PgrComplainantModel( - clientReferenceId: '', - tenantId: '', - complaintClientReferenceId: e.serviceRequestId ?? '', - ), - address: PgrAddressModel(), - )) - .toList(); - - for (var element in operationGroupedEntity.value) { - if (element.id == null) return; - final entity = element.entity as PgrServiceModel; - final responseEntity = responseEntities - .whereType() - .firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId, - ); - - final serverGeneratedId = responseEntity?.serviceRequestId; - final rowVersion = responseEntity?.rowVersion; - - if (serverGeneratedId != null) { - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } - } - - break; - - default: - continue; - } - - for (var element in responseEntities) { - await local.update(element, createOpLog: false); - } - } - } - } -} diff --git a/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart b/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart new file mode 100644 index 000000000..bc715c8ee --- /dev/null +++ b/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart @@ -0,0 +1,842 @@ +import 'dart:async'; +import 'dart:convert'; + +import 'package:attendance_management/attendance_management.dart'; +import 'package:collection/collection.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:inventory_management/inventory_management.dart'; +import 'package:referral_reconciliation/referral_reconciliation.dart'; +import 'package:registration_delivery/registration_delivery.dart'; +import 'package:sync_service/data/sync_entity_mapper_listener.dart'; +import 'package:sync_service/data/repositories/sync/remote_type.dart'; + +import '../utils/environment_config.dart'; + +class SyncServiceMapper extends SyncEntityMapperListener { + @override + FutureOr writeToEntityDB( + Map response, + List> + localRepositories) async { + try { + for (int i = 0; i <= response.keys.length - 1; i++) { + if (response.keys.elementAt(i) != 'DownsyncCriteria') { + final local = RepositoryType.getLocalForType( + DataModels.getDataModelForEntityName(response.keys.elementAt(i)), + localRepositories, + ); + final List entityResponse = + response[response.keys.elementAt(i)] ?? []; + + final entityList = + entityResponse.whereType>().toList(); + + switch (response.keys.elementAt(i)) { + case "Individuals": + final entity = entityList + .map((e) => IndividualModelMapper.fromJson(jsonEncode(e))) + .toList(); + await local.bulkCreate(entity); + case "Households": + final entity = entityList + .map((e) => HouseholdModelMapper.fromJson(jsonEncode(e))) + .toList(); + await local.bulkCreate(entity); + case "HouseholdMembers": + final entity = entityList + .map( + (e) => HouseholdMemberModelMapper.fromJson( + jsonEncode(e), + ), + ) + .toList(); + await local.bulkCreate(entity); + case "ProjectBeneficiaries": + final entity = entityList + .map((e) => + ProjectBeneficiaryModelMapper.fromJson(jsonEncode(e))) + .toList(); + await local.bulkCreate(entity); + case "Tasks": + final entity = entityList + .map((e) => TaskModelMapper.fromJson(jsonEncode(e))) + .toList(); + await local.bulkCreate(entity); + case "SideEffects": + final entity = entityList + .map((e) => SideEffectModelMapper.fromJson(jsonEncode(e))) + .toList(); + await local.bulkCreate(entity); + case "Referrals": + final entity = entityList + .map((e) => ReferralModelMapper.fromJson(jsonEncode(e))) + .toList(); + await local.bulkCreate(entity); + default: + final entity = entityList + .map((e) => EntityModelMapper.fromJson(jsonEncode(e))) + .toList(); + await local.bulkCreate(entity); + } + } + } + } catch (e) { + rethrow; + } + } + + @override + int getSyncCount(List opLogs) { + int count = opLogs.where((element) { + switch (element.entityType) { + case DataModelType.household: + case DataModelType.individual: + case DataModelType.householdMember: + case DataModelType.projectBeneficiary: + case DataModelType.task: + case DataModelType.stock: + case DataModelType.stockReconciliation: + case DataModelType.service: + case DataModelType.complaints: + case DataModelType.sideEffect: + case DataModelType.referral: + case DataModelType.hFReferral: + case DataModelType.attendance: + return true; + default: + return false; + } + }).length; + + return count; + } + + @override + Future> entityResponse( + MapEntry>> typeGroupedEntity, + MapEntry>> + operationGroupedEntity, + List entities, + RemoteRepository remote, + LocalRepository local) async { + List responseEntities = []; + const taskResourceIdKey = 'taskResourceId'; + const individualIdentifierIdKey = 'individualIdentifierId'; + const householdAddressIdKey = 'householdAddressId'; + const individualAddressIdKey = 'individualAddressId'; + + switch (typeGroupedEntity.key) { + case DataModelType.individual: + responseEntities = await remote.search(IndividualSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as IndividualModel; + final responseEntity = + responseEntities.whereType().firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + final identifierAdditionalIds = responseEntity?.identifiers + ?.map((e) { + final id = e.id; + + if (id == null) return null; + + return AdditionalId( + idType: individualIdentifierIdKey, + id: id, + ); + }) + .whereNotNull() + .toList(); + + final addressAdditionalIds = responseEntity?.address + ?.map((e) { + final id = e.id; + + if (id == null) return null; + + return AdditionalId( + idType: individualAddressIdKey, + id: id, + ); + }) + .whereNotNull() + .toList(); + + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + nonRecoverableError: entity.nonRecoverableError, + additionalIds: [ + if (identifierAdditionalIds != null) + ...identifierAdditionalIds, + if (addressAdditionalIds != null) ...addressAdditionalIds, + ], + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; + + case DataModelType.household: + responseEntities = await remote.search(HouseholdSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as HouseholdModel; + final responseEntity = + responseEntities.whereType().firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + final addressAdditionalId = responseEntity?.address?.id == null + ? null + : AdditionalId( + idType: householdAddressIdKey, + id: responseEntity!.address!.id!, + ); + + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + additionalIds: [ + if (addressAdditionalId != null) addressAdditionalId, + ], + dataOperation: element.operation, + rowVersion: rowVersion, + nonRecoverableError: element.nonRecoverableError, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; + + case DataModelType.householdMember: + responseEntities = await remote.search(HouseholdMemberSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as HouseholdMemberModel; + final responseEntity = responseEntities + .whereType() + .firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; + + case DataModelType.sideEffect: + responseEntities = await remote.search(SideEffectSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + + for (var element in typeGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as SideEffectModel; + var responseEntity = + responseEntities.whereType().firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + case DataModelType.referral: + responseEntities = await remote.search(ReferralSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + + for (var element in typeGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as ReferralModel; + var responseEntity = + responseEntities.whereType().firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + case DataModelType.projectBeneficiary: + responseEntities = await remote.search(ProjectBeneficiarySearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as ProjectBeneficiaryModel; + final responseEntity = responseEntities + .whereType() + .firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; + case DataModelType.task: + responseEntities = await remote.search(TaskSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final taskModel = element.entity as TaskModel; + var responseEntity = + responseEntities.whereType().firstWhereOrNull( + (e) => e.clientReferenceId == taskModel.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: taskModel.clientReferenceId, + serverGeneratedId: serverGeneratedId, + additionalIds: responseEntity?.resources + ?.map((e) { + final id = e.id; + if (id == null) return null; + + return AdditionalId( + idType: taskResourceIdKey, + id: id, + ); + }) + .whereNotNull() + .toList(), + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(taskModel.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + taskModel.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; + case DataModelType.hFReferral: + responseEntities = await remote.search( + HFReferralSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + ), + ); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as HFReferralModel; + final responseEntity = + responseEntities.whereType().firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + nonRecoverableError: entity.nonRecoverableError, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; + + case DataModelType.attendance: + responseEntities = await remote.search(AttendanceLogSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId!) + .whereNotNull() + .toList(), + tenantId: envConfig.variables.tenantId, + )); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as AttendanceLogModel; + final responseEntity = + responseEntities.whereType().firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId.toString(), + serverGeneratedId: serverGeneratedId, + nonRecoverableError: entity.nonRecoverableError, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = + await local.opLogManager.updateSyncDownRetry( + entity.clientReferenceId.toString(), + ); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; + + case DataModelType.stock: + responseEntities = await remote.search( + StockSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + ), + ); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as StockModel; + final responseEntity = + responseEntities.whereType().firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId!, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; + + case DataModelType.stockReconciliation: + responseEntities = await remote.search(StockReconciliationSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + )); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as StockReconciliationModel; + final responseEntity = responseEntities + .whereType() + .firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; + + case DataModelType.complaints: + if (remote is! PgrServiceRemoteRepository) return responseEntities; + + final futures = entities + .whereType() + .map((e) => e.serviceRequestId) + .whereNotNull() + .map( + (e) { + final future = remote.searchWithoutClientReferenceId( + PgrServiceSearchModel( + serviceRequestId: e, + ), + ); + + return Future.sync(() => future); + }, + ); + + final resolvedFutures = await Future.wait(futures); + + responseEntities = resolvedFutures + .expand((element) => element) + .whereType() + // We only need serviceRequestId and application status + .map((e) => PgrServiceModel( + clientReferenceId: '', + tenantId: e.tenantId ?? '', + serviceCode: e.serviceCode ?? '', + description: e.description ?? '', + serviceRequestId: e.serviceRequestId, + applicationStatus: e.applicationStatus ?? + PgrServiceApplicationStatus.pendingAssignment, + user: PgrComplainantModel( + clientReferenceId: '', + tenantId: '', + complaintClientReferenceId: e.serviceRequestId ?? '', + ), + address: PgrAddressModel(), + )) + .toList(); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as PgrServiceModel; + final responseEntity = + responseEntities.whereType().firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.serviceRequestId; + final rowVersion = responseEntity?.rowVersion; + + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } + } + break; + + default: + break; + } + + return responseEntities; + } + + @override + EntityModel updatedEntity(EntityModel entity, OpLogEntry e, + String? serverGeneratedId) { + var updatedEntity = entity; + + const taskResourceIdKey = 'taskResourceId'; + const individualIdentifierIdKey = 'individualIdentifierId'; + const householdAddressIdKey = 'householdAddressId'; + const individualAddressIdKey = 'individualAddressId'; + + if (updatedEntity is HouseholdModel) { + final addressId = e.additionalIds.firstWhereOrNull( + (element) { + return element.idType == householdAddressIdKey; + }, + )?.id; + + updatedEntity = updatedEntity.copyWith( + address: updatedEntity.address?.copyWith( + id: updatedEntity.address?.id ?? addressId, + ), + ); + } + + if (updatedEntity is IndividualModel) { + final identifierId = e.additionalIds.firstWhereOrNull( + (element) { + return element.idType == individualIdentifierIdKey; + }, + )?.id; + + final addressId = e.additionalIds.firstWhereOrNull( + (element) { + return element.idType == individualAddressIdKey; + }, + )?.id; + + updatedEntity = updatedEntity.copyWith( + identifiers: updatedEntity.identifiers?.map((e) { + return e.copyWith( + id: e.id ?? identifierId, + ); + }).toList(), + address: updatedEntity.address?.map((e) { + return e.copyWith( + id: e.id ?? addressId, + ); + }).toList(), + ); + } + + if (updatedEntity is TaskModel) { + final resourceId = e.additionalIds + .firstWhereOrNull( + (element) => element.idType == taskResourceIdKey, + ) + ?.id; + + updatedEntity = updatedEntity.copyWith( + resources: updatedEntity.resources?.map((e) { + if (resourceId != null) { + return e.copyWith( + taskId: serverGeneratedId, + id: e.id ?? resourceId, + ); + } + + return e.copyWith(taskId: serverGeneratedId); + }).toList(), + ); + } + + return updatedEntity; + } +} diff --git a/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart b/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart index 3cb217497..1494742df 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart @@ -9,10 +9,10 @@ import 'package:flutter_portal/flutter_portal.dart'; import 'package:isar/isar.dart'; import 'package:location/location.dart'; import 'package:registration_delivery/registration_delivery.dart'; +import 'package:sync_service/sync_service_lib.dart'; import '../blocs/localization/app_localization.dart'; import '../blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart'; -import '../blocs/sync/sync.dart'; import '../data/remote_client.dart'; import '../data/repositories/remote/bandwidth_check.dart'; import '../models/downsync/downsync.dart'; @@ -43,7 +43,7 @@ class AuthenticatedPageWrapper extends StatelessWidget { return Portal( child: Scaffold( - backgroundColor: DigitTheme.instance.colorScheme.background, + backgroundColor: DigitTheme.instance.colorScheme.surface, appBar: AppBar( backgroundColor: DigitTheme.instance.colorScheme.primary, actions: showDrawer @@ -107,14 +107,16 @@ class AuthenticatedPageWrapper extends StatelessWidget { drawer: showDrawer ? const Drawer(child: SideBar()) : null, body: MultiBlocProvider( providers: [ + // INFO : Need to add bloc of package Here BlocProvider( create: (context) { final userId = context.loggedInUserUuid; final isar = context.read(); - final bloc = SyncBloc( + final bloc = SyncBloc + ( isar: isar, - networkManager: context.read(), + syncService: SyncService(), ); if (!bloc.isClosed) { @@ -133,7 +135,9 @@ class AuthenticatedPageWrapper extends StatelessWidget { bloc.add( SyncRefreshEvent( userId, - getSyncCount(event), + SyncServiceSingleton() + .entityMapper! + .getSyncCount(event), ), ); } @@ -152,7 +156,9 @@ class AuthenticatedPageWrapper extends StatelessWidget { bloc.add( SyncRefreshEvent( userId, - getSyncCount(event), + SyncServiceSingleton() + .entityMapper! + .getSyncCount(event), ), ); } @@ -182,7 +188,6 @@ class AuthenticatedPageWrapper extends StatelessWidget { downSyncLocalRepository: ctx.read< LocalRepository>(), - networkManager: ctx.read(), householdLocalRepository: ctx.read< LocalRepository>(), diff --git a/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart b/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart index 8e558b214..778d534e5 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart @@ -10,10 +10,10 @@ import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; +import 'package:sync_service/sync_service_lib.dart'; import '../blocs/app_initialization/app_initialization.dart'; import '../blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart'; -import '../blocs/sync/sync.dart'; import '../models/entities/roles_type.dart'; import '../router/app_router.dart'; import '../utils/i18_key_constants.dart' as i18; @@ -42,14 +42,17 @@ class _BoundarySelectionPageState StreamController downloadProgress = StreamController(); Map dropdownControllers = {}; + SyncBloc? syncBloc; @override void initState() { - context.read().add(SyncRefreshEvent(context.loggedInUserUuid)); + syncBloc = context.read(); + syncBloc!.add(SyncRefreshEvent(context.loggedInUserUuid)); context.read().add( const DownSyncResetStateEvent(), ); super.initState(); + listenToSyncBloc(); } @override @@ -483,95 +486,83 @@ class _BoundarySelectionPageState padding: const EdgeInsets.fromLTRB( kPadding, 0, kPadding, 0), child: SafeArea( - child: BlocListener( - listener: (context, syncState) { - setState(() { - pendingSyncCount = syncState.maybeWhen( - orElse: () => 0, - pendingSync: (count) => count, - ); - }); - }, - child: ValueListenableBuilder( - valueListenable: clickedStatus, - builder: (context, bool isClicked, _) { - return DigitElevatedButton( - onPressed: selectedBoundary == null || - isClicked - ? null - : () async { - if (!form.valid || - validateAllBoundarySelection()) { - clickedStatus.value = false; - await DigitToast.show( - context, - options: - DigitToastOptions( - localizations.translate(i18 - .common - .corecommonRequired), - true, - Theme.of(context), - ), - ); - } else { - setState(() { - shouldPop = true; - }); - - context - .read() - .add( - const BoundarySubmitEvent(), - ); - bool isOnline = - await getIsConnected(); - - if (context.mounted) { - if (isOnline && - isDistributor) { - context - .read< - BeneficiaryDownSyncBloc>() - .add( - DownSyncGetBatchSizeEvent( - appConfiguration: [ - appConfiguration, - ], - projectId: context - .projectId, - boundaryCode: - selectedBoundary - .value! - .code - .toString(), - pendingSyncCount: - pendingSyncCount, - boundaryName: - selectedBoundary - .value! - .name - .toString(), - ), - ); - } else { - Future.delayed( - const Duration( - milliseconds: 100, - ), - () => context.router - .maybePop(), - ); - } - clickedStatus.value = - true; + child: ValueListenableBuilder( + valueListenable: clickedStatus, + builder: (context, bool isClicked, _) { + return DigitElevatedButton( + onPressed: selectedBoundary == null || + isClicked + ? null + : () async { + if (!form.valid || + validateAllBoundarySelection()) { + clickedStatus.value = false; + await DigitToast.show( + context, + options: DigitToastOptions( + localizations.translate(i18 + .common + .corecommonRequired), + true, + Theme.of(context), + ), + ); + } else { + setState(() { + shouldPop = true; + }); + + context + .read() + .add( + const BoundarySubmitEvent(), + ); + bool isOnline = + await getIsConnected(); + + if (context.mounted) { + if (isOnline && + isDistributor) { + context + .read< + BeneficiaryDownSyncBloc>() + .add( + DownSyncGetBatchSizeEvent( + appConfiguration: [ + appConfiguration, + ], + projectId: context + .projectId, + boundaryCode: + selectedBoundary + .value! + .code + .toString(), + pendingSyncCount: + pendingSyncCount, + boundaryName: + selectedBoundary + .value! + .name + .toString(), + ), + ); + } else { + Future.delayed( + const Duration( + milliseconds: 100, + ), + () => context.router + .maybePop(), + ); } + clickedStatus.value = true; } - }, - child: const Text('Submit'), - ); - }, - ), + } + }, + child: const Text('Submit'), + ); + }, ), ), ), @@ -631,4 +622,17 @@ class _BoundarySelectionPageState // Return false if none of the form controls have a null value return false; } + + void listenToSyncBloc() { + syncBloc!.stream.listen((state) { + state.maybeWhen( + orElse: () {}, + pendingSync: (count) { + setState(() { + pendingSyncCount = count; + }); + }, + ); + }); + } } diff --git a/apps/health_campaign_field_worker_app/lib/pages/home.dart b/apps/health_campaign_field_worker_app/lib/pages/home.dart index d2aa49204..24021c2fa 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/home.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/home.dart @@ -18,10 +18,10 @@ import 'package:referral_reconciliation/referral_reconciliation.dart'; import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart'; import 'package:registration_delivery/registration_delivery.dart'; import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; +import 'package:sync_service/sync_service_lib.dart'; import '../blocs/app_initialization/app_initialization.dart'; import '../blocs/auth/auth.dart'; -import '../blocs/sync/sync.dart'; import '../data/local_store/no_sql/schema/app_configuration.dart'; import '../data/local_store/secure_store/secure_store.dart'; import '../models/entities/roles_type.dart'; @@ -90,7 +90,6 @@ class _HomePageState extends LocalizedState { return e.code; }); - //[TODO: Add below roles to enum] if (!(roles.contains(RolesType.distributor.toValue()) || roles.contains(RolesType.registrar.toValue()))) { skipProgressBar = true; @@ -105,172 +104,165 @@ class _HomePageState extends LocalizedState { ]; return Scaffold( - backgroundColor: DigitTheme.instance.colorScheme.background, - body: BlocListener( - listener: (context, state) { - state.maybeWhen( - orElse: () {}, - pendingSync: (count) { - final debouncer = Debouncer(seconds: 5); - debouncer.run(() async { - if (count != 0) { - await localSecureStore.setManualSyncTrigger(false); - if (context.mounted) { - await performBackgroundService( - isBackground: false, - stopService: false, - context: context, - ); - } - } else { - await localSecureStore.setManualSyncTrigger(true); - } - }); - }, - ); - }, - child: SizedBox( - height: MediaQuery.of(context).size.height, - child: ScrollableContent( - slivers: [ - SliverGrid( - delegate: SliverChildBuilderDelegate( - (context, index) { - return homeItems.elementAt(index); - }, - childCount: homeItems.length, - ), - gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent( - maxCrossAxisExtent: 145, - childAspectRatio: 104 / 128, - ), + backgroundColor: DigitTheme.instance.colorScheme.surface, + body: SizedBox( + height: MediaQuery.of(context).size.height, + child: ScrollableContent( + slivers: [ + SliverGrid( + delegate: SliverChildBuilderDelegate( + (context, index) { + return homeItems.elementAt(index); + }, + childCount: homeItems.length, ), - ], - header: Column( - children: [ - BackNavigationHelpHeaderWidget( - showBackNavigation: false, - showHelp: false, - showcaseButton: ShowcaseButton( - showcaseFor: showcaseKeys.toSet().toList(), - ), + gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent( + maxCrossAxisExtent: 145, + childAspectRatio: 104 / 128, + ), + ), + ], + header: Column( + children: [ + BackNavigationHelpHeaderWidget( + showBackNavigation: false, + showHelp: false, + showcaseButton: ShowcaseButton( + showcaseFor: showcaseKeys.toSet().toList(), ), - skipProgressBar - ? const SizedBox.shrink() - : homeShowcaseData.distributorProgressBar.buildWith( - child: BeneficiaryProgressBar( - label: localizations.translate( - i18.home.progressIndicatorTitle, - ), - prefixLabel: localizations.translate( - i18.home.progressIndicatorPrefixLabel, - ), + ), + skipProgressBar + ? const SizedBox.shrink() + : homeShowcaseData.distributorProgressBar.buildWith( + child: BeneficiaryProgressBar( + label: localizations.translate( + i18.home.progressIndicatorTitle, + ), + prefixLabel: localizations.translate( + i18.home.progressIndicatorPrefixLabel, ), ), - ], - ), - footer: PoweredByDigit( - version: Constants().version, - ), - children: [ - const SizedBox(height: kPadding * 2), - BlocConsumer( - listener: (context, state) { - state.maybeWhen( - orElse: () => null, - syncInProgress: () async { - await localSecureStore.setManualSyncTrigger(false); - if (context.mounted) { - DigitSyncDialog.show( - context, - type: DigitSyncDialogType.inProgress, - label: localizations.translate( - i18.syncDialog.syncInProgressTitle, - ), - barrierDismissible: false, - ); + ), + ], + ), + footer: PoweredByDigit( + version: Constants().version, + ), + children: [ + const SizedBox(height: kPadding * 2), + BlocConsumer( + listener: (context, state) { + state.maybeWhen( + orElse: () => null, + pendingSync: (count) { + final debouncer = Debouncer(seconds: 5); + debouncer.run(() async { + if (count != 0) { + await localSecureStore.setManualSyncTrigger(false); + if (context.mounted) { + await performBackgroundService( + isBackground: false, + stopService: false, + context: context, + ); + } + } else { + await localSecureStore.setManualSyncTrigger(true); } - }, - completedSync: () async { - Navigator.of(context, rootNavigator: true).pop(); - await localSecureStore.setManualSyncTrigger(true); - if (context.mounted) { - DigitSyncDialog.show( - context, - type: DigitSyncDialogType.complete, + }); + }, + syncInProgress: () async { + await localSecureStore.setManualSyncTrigger(false); + if (context.mounted) { + DigitSyncDialog.show( + context, + type: DigitSyncDialogType.inProgress, + label: localizations.translate( + i18.syncDialog.syncInProgressTitle, + ), + barrierDismissible: false, + ); + } + }, + completedSync: () async { + Navigator.of(context, rootNavigator: true).pop(); + await localSecureStore.setManualSyncTrigger(true); + if (context.mounted) { + DigitSyncDialog.show( + context, + type: DigitSyncDialogType.complete, + label: localizations.translate( + i18.syncDialog.dataSyncedTitle, + ), + primaryAction: DigitDialogActions( label: localizations.translate( - i18.syncDialog.dataSyncedTitle, + i18.syncDialog.closeButtonLabel, ), - primaryAction: DigitDialogActions( - label: localizations.translate( - i18.syncDialog.closeButtonLabel, + action: (ctx) { + Navigator.pop(ctx); + }, + ), + ); + } + }, + failedSync: () async { + await localSecureStore.setManualSyncTrigger(true); + if (context.mounted) { + _showSyncFailedDialog( + context, + message: localizations.translate( + i18.syncDialog.syncFailedTitle, + ), + ); + } + }, + failedDownSync: () async { + await localSecureStore.setManualSyncTrigger(true); + if (context.mounted) { + _showSyncFailedDialog( + context, + message: localizations.translate( + i18.syncDialog.downSyncFailedTitle, + ), + ); + } + }, + failedUpSync: () async { + await localSecureStore.setManualSyncTrigger(true); + if (context.mounted) { + _showSyncFailedDialog( + context, + message: localizations.translate( + i18.syncDialog.upSyncFailedTitle, + ), + ); + } + }, + ); + }, + builder: (context, state) { + return state.maybeWhen( + orElse: () => const Offstage(), + pendingSync: (count) { + return count == 0 + ? const Offstage() + : DigitInfoCard( + icon: Icons.info, + backgroundColor: + theme.colorScheme.tertiaryContainer, + iconColor: theme.colorScheme.surfaceTint, + description: localizations + .translate(i18.home.dataSyncInfoContent) + .replaceAll('{}', count.toString()), + title: localizations.translate( + i18.home.dataSyncInfoLabel, ), - action: (ctx) { - Navigator.pop(ctx); - }, - ), - ); - } - }, - failedSync: () async { - await localSecureStore.setManualSyncTrigger(true); - if (context.mounted) { - _showSyncFailedDialog( - context, - message: localizations.translate( - i18.syncDialog.syncFailedTitle, - ), - ); - } - }, - failedDownSync: () async { - await localSecureStore.setManualSyncTrigger(true); - if (context.mounted) { - _showSyncFailedDialog( - context, - message: localizations.translate( - i18.syncDialog.downSyncFailedTitle, - ), - ); - } - }, - failedUpSync: () async { - await localSecureStore.setManualSyncTrigger(true); - if (context.mounted) { - _showSyncFailedDialog( - context, - message: localizations.translate( - i18.syncDialog.upSyncFailedTitle, - ), - ); - } - }, - ); - }, - builder: (context, state) { - return state.maybeWhen( - orElse: () => const Offstage(), - pendingSync: (count) { - return count == 0 - ? const Offstage() - : DigitInfoCard( - icon: Icons.info, - backgroundColor: - theme.colorScheme.tertiaryContainer, - iconColor: theme.colorScheme.surfaceTint, - description: localizations - .translate(i18.home.dataSyncInfoContent) - .replaceAll('{}', count.toString()), - title: localizations.translate( - i18.home.dataSyncInfoLabel, - ), - ); - }, - ); - }, - ), - ], - ), + ); + }, + ); + }, + ), + ], ), ), ); diff --git a/apps/health_campaign_field_worker_app/lib/pages/reports/beneficiary/beneficaries_report.dart b/apps/health_campaign_field_worker_app/lib/pages/reports/beneficiary/beneficaries_report.dart index 4440e7d0e..550dc37b1 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/reports/beneficiary/beneficaries_report.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/reports/beneficiary/beneficaries_report.dart @@ -7,10 +7,10 @@ import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:sync_service/sync_service_lib.dart'; import '../../../blocs/app_initialization/app_initialization.dart'; import '../../../blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart'; -import '../../../blocs/sync/sync.dart'; import '../../../models/downsync/downsync.dart'; import '../../../router/app_router.dart'; import '../../../utils/i18_key_constants.dart' as i18; diff --git a/apps/health_campaign_field_worker_app/lib/utils/background_service.dart b/apps/health_campaign_field_worker_app/lib/utils/background_service.dart index 3da2b7155..20da6a31e 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/background_service.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/background_service.dart @@ -13,6 +13,8 @@ import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:isar/isar.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:recase/recase.dart'; +import 'package:sync_service/data/sync_service.dart'; +import 'package:sync_service/models/bandwidth/bandwidth_model.dart'; import '../data/local_store/no_sql/schema/app_configuration.dart'; import '../data/local_store/no_sql/schema/service_registry.dart'; @@ -20,7 +22,6 @@ import '../data/local_store/secure_store/secure_store.dart'; import '../data/network_manager.dart'; import '../data/remote_client.dart'; import '../data/repositories/remote/bandwidth_check.dart'; -import '../models/bandwidth/bandwidth_model.dart'; import '../widgets/network_manager_provider_wrapper.dart'; import 'environment_config.dart'; import 'utils.dart'; @@ -169,10 +170,6 @@ void onStart(ServiceInstance service) async { sum / speedArray.length, appConfiguration, ); - final BandwidthModel bandwidthModel = BandwidthModel.fromJson({ - 'userId': userRequestModel!.uuid, - 'batchSize': configuredBatchSize, - }); flutterLocalNotificationsPlugin.show( 888, 'Auto Sync', @@ -186,11 +183,11 @@ void onStart(ServiceInstance service) async { ), ), ); - final isSyncCompleted = await const NetworkManager( - configuration: NetworkManagerConfiguration( - persistenceConfig: PersistenceConfiguration.offlineFirst, - ), - ).performSync( + final BandwidthModel bandwidthModel = BandwidthModel.fromJson({ + 'userId': userRequestModel!.uuid, + 'batchSize': configuredBatchSize, + }); + final isSyncCompleted = await SyncService().performSync( localRepositories: Constants.getLocalRepositories( _sql, _isar, diff --git a/apps/health_campaign_field_worker_app/lib/utils/constants.dart b/apps/health_campaign_field_worker_app/lib/utils/constants.dart index 9907f3dc0..8790a908b 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/constants.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/constants.dart @@ -8,10 +8,10 @@ import 'package:inventory_management/inventory_management.dart'; import 'package:isar/isar.dart'; import 'package:path_provider/path_provider.dart'; import 'package:referral_reconciliation/referral_reconciliation.dart'; -import 'package:referral_reconciliation/utils/utils.dart'; import 'package:registration_delivery/registration_delivery.dart'; import 'package:digit_firebase_services/digit_firebase_services.dart' as firebase_services; +import 'package:sync_service/sync_service_lib.dart'; import '../blocs/app_initialization/app_initialization.dart'; import '../data/local_store/no_sql/schema/app_configuration.dart'; @@ -21,6 +21,7 @@ import '../data/local_store/no_sql/schema/project_types.dart'; import '../data/local_store/no_sql/schema/row_versions.dart'; import '../data/local_store/no_sql/schema/service_registry.dart'; import '../data/repositories/remote/downsync.dart'; +import '../data/sync_service_mapper.dart'; import '../firebase_options.dart'; import 'environment_config.dart'; import 'utils.dart'; @@ -264,6 +265,10 @@ class Constants { AttendanceSingleton().setTenantId(envConfig.variables.tenantId); ReferralReconSingleton().setTenantId(envConfig.variables.tenantId); InventorySingleton().setTenantId(tenantId: envConfig.variables.tenantId); + SyncServiceSingleton().setData( + syncDownRetryCount: envConfig.variables.syncDownRetryCount, + persistenceConfiguration: PersistenceConfiguration.offlineFirst, + entityMapper: SyncServiceMapper()); } } diff --git a/apps/health_campaign_field_worker_app/lib/utils/utils.dart b/apps/health_campaign_field_worker_app/lib/utils/utils.dart index 8bfcf05eb..77b710d16 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/utils.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/utils.dart @@ -357,29 +357,4 @@ initializeAllMappers() async { Future(() => registration_delivery_mappers.initializeMappers()), ]; await Future.wait(initializations); -} - -int getSyncCount(List oplogs) { - int count = oplogs.where((element) { - switch (element.entityType) { - case DataModelType.household: - case DataModelType.individual: - case DataModelType.householdMember: - case DataModelType.projectBeneficiary: - case DataModelType.task: - case DataModelType.stock: - case DataModelType.stockReconciliation: - case DataModelType.service: - case DataModelType.complaints: - case DataModelType.sideEffect: - case DataModelType.referral: - case DataModelType.hFReferral: - case DataModelType.attendance: - return true; - default: - return false; - } - }).length; - - return count; -} +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 70c3c7ac6..0e6f42ef0 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -13,10 +13,10 @@ packages: dependency: transitive description: name: _flutterfire_internals - sha256: "4eec93681221723a686ad580c2e7d960e1017cf1a4e0a263c2573c2c6b0bf5cd" + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" url: "https://pub.dev" source: hosted - version: "1.3.25" + version: "1.3.35" analyzer: dependency: transitive description: @@ -45,10 +45,10 @@ packages: dependency: transitive description: name: archive - sha256: "6bd38d335f0954f5fad9c79e614604fbf03a0e5b975923dd001b6ea965ef5b4b" + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d url: "https://pub.dev" source: hosted - version: "3.6.0" + version: "3.6.1" args: dependency: transitive description: @@ -68,91 +68,90 @@ packages: attendance_management: dependency: "direct main" description: - name: attendance_management - sha256: "4ee87621bdcfb088c0bd9b5938fdb09feb6c09059e8aa550910b5befaa1de2df" - url: "https://pub.dev" - source: hosted + path: "../../packages/attendance_management" + relative: true + source: path version: "1.0.0+2" audioplayers: - dependency: "direct main" + dependency: transitive description: name: audioplayers - sha256: c05c6147124cd63e725e861335a8b4d57300b80e6e92cea7c145c739223bbaef + sha256: "752039d6aa752597c98ec212e9759519061759e402e7da59a511f39d43aa07d2" url: "https://pub.dev" source: hosted - version: "5.2.1" + version: "6.0.0" audioplayers_android: dependency: transitive description: name: audioplayers_android - sha256: b00e1a0e11365d88576320ec2d8c192bc21f1afb6c0e5995d1c57ae63156acb5 + sha256: de576b890befe27175c2f511ba8b742bec83765fa97c3ce4282bba46212f58e4 url: "https://pub.dev" source: hosted - version: "4.0.3" + version: "5.0.0" audioplayers_darwin: dependency: transitive description: name: audioplayers_darwin - sha256: "3034e99a6df8d101da0f5082dcca0a2a99db62ab1d4ddb3277bed3f6f81afe08" + sha256: e507887f3ff18d8e5a10a668d7bedc28206b12e10b98347797257c6ae1019c3b url: "https://pub.dev" source: hosted - version: "5.0.2" + version: "6.0.0" audioplayers_linux: dependency: transitive description: name: audioplayers_linux - sha256: "60787e73fefc4d2e0b9c02c69885402177e818e4e27ef087074cf27c02246c9e" + sha256: "3d3d244c90436115417f170426ce768856d8fe4dfc5ed66a049d2890acfa82f9" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "4.0.0" audioplayers_platform_interface: dependency: transitive description: name: audioplayers_platform_interface - sha256: "365c547f1bb9e77d94dd1687903a668d8f7ac3409e48e6e6a3668a1ac2982adb" + sha256: "6834dd48dfb7bc6c2404998ebdd161f79cd3774a7e6779e1348d54a3bfdcfaa5" url: "https://pub.dev" source: hosted - version: "6.1.0" + version: "7.0.0" audioplayers_web: dependency: transitive description: name: audioplayers_web - sha256: "22cd0173e54d92bd9b2c80b1204eb1eb159ece87475ab58c9788a70ec43c2a62" + sha256: db8fc420dadf80da18e2286c18e746fb4c3b2c5adbf0c963299dde046828886d url: "https://pub.dev" source: hosted - version: "4.1.0" + version: "5.0.0" audioplayers_windows: dependency: transitive description: name: audioplayers_windows - sha256: "9536812c9103563644ada2ef45ae523806b0745f7a78e89d1b5fb1951de90e1a" + sha256: "8605762dddba992138d476f6a0c3afd9df30ac5b96039929063eceed416795c2" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "4.0.0" auto_route: dependency: "direct main" description: name: auto_route - sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 + sha256: "6cad3f408863ffff2b5757967c802b18415dac4acb1b40c5cdd45d0a26e5080f" url: "https://pub.dev" source: hosted - version: "7.9.2" + version: "8.1.3" auto_route_generator: dependency: "direct dev" description: name: auto_route_generator - sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" + sha256: ba28133d3a3bf0a66772bcc98dade5843753cd9f1a8fb4802b842895515b67d3 url: "https://pub.dev" source: hosted - version: "7.3.2" + version: "8.0.0" battery_plus: dependency: "direct main" description: name: battery_plus - sha256: ba605aeafd6609cb5f8020c609a51941803a5fb2b6a7576f7c7eeeb52d29e750 + sha256: ca67f5457a473f132fec42a4445c8c19a98205c1bc20f8feaa5a7f50d42f750f url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.1" battery_plus_platform_interface: dependency: transitive description: @@ -213,10 +212,10 @@ packages: dependency: transitive description: name: build_daemon - sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" + sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9" url: "https://pub.dev" source: hosted - version: "4.0.1" + version: "4.0.2" build_resolvers: dependency: transitive description: @@ -229,18 +228,18 @@ packages: dependency: "direct dev" description: name: build_runner - sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" url: "https://pub.dev" source: hosted - version: "2.4.9" + version: "2.4.11" build_runner_core: dependency: transitive description: name: build_runner_core - sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" + sha256: e3c79f69a64bdfcd8a776a3c28db4eb6e3fb5356d013ae5eb2e52007706d5dbe url: "https://pub.dev" source: hosted - version: "7.3.0" + version: "7.3.1" built_collection: dependency: transitive description: @@ -258,29 +257,29 @@ packages: source: hosted version: "8.9.2" camera: - dependency: "direct main" + dependency: transitive description: name: camera - sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" + sha256: "2170a943dcb67be2af2c6bcda8775e74b41d4c02d6a4eb10bdc832ee185c4eea" url: "https://pub.dev" source: hosted - version: "0.10.5+9" - camera_android: + version: "0.11.0+1" + camera_android_camerax: dependency: transitive description: - name: camera_android - sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 + name: camera_android_camerax + sha256: "7d84815edbb8304b51c10deba3c20f44eef80aa46ff156ec45428ed16600b49a" url: "https://pub.dev" source: hosted - version: "0.10.9+2" + version: "0.6.5+5" camera_avfoundation: dependency: transitive description: name: camera_avfoundation - sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" + sha256: "7d021e8cd30d9b71b8b92b4ad669e80af432d722d18d6aac338572754a786c15" url: "https://pub.dev" source: hosted - version: "0.9.13+10" + version: "0.9.16" camera_platform_interface: dependency: transitive description: @@ -357,18 +356,18 @@ packages: dependency: "direct main" description: name: connectivity_plus - sha256: "224a77051d52a11fbad53dd57827594d3bd24f945af28bd70bab376d68d437f0" + sha256: db7a4e143dc72cc3cb2044ef9b052a7ebfe729513e6a82943bc3526f784365b8 url: "https://pub.dev" source: hosted - version: "5.0.2" + version: "6.0.3" connectivity_plus_platform_interface: dependency: transitive description: name: connectivity_plus_platform_interface - sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a + sha256: b6a56efe1e6675be240de39107281d4034b64ac23438026355b4234042a35adb url: "https://pub.dev" source: hosted - version: "1.2.4" + version: "2.0.0" convert: dependency: transitive description: @@ -381,18 +380,18 @@ packages: dependency: transitive description: name: coverage - sha256: "595a29b55ce82d53398e1bcc2cba525d7bd7c59faeb2d2540e9d42c390cfeeeb" + sha256: "3945034e86ea203af7a056d98e98e42a5518fff200d6e8e6647e1886b07e936e" url: "https://pub.dev" source: hosted - version: "1.6.4" + version: "1.8.0" cross_file: dependency: transitive description: name: cross_file - sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e + sha256: "55d7b444feb71301ef6b8838dbc1ae02e63dd48c8773f3810ff53bb1e2945b32" url: "https://pub.dev" source: hosted - version: "0.3.3+8" + version: "0.3.4+1" crypto: dependency: transitive description: @@ -460,10 +459,10 @@ packages: dependency: "direct main" description: name: device_info_plus - sha256: "77f757b789ff68e4eaf9c56d1752309bd9f7ad557cb105b938a7f8eb89e59110" + sha256: eead12d1a1ed83d8283ab4c2f3fca23ac4082f29f25f29dff0f758f57d06ec91 url: "https://pub.dev" source: hosted - version: "9.1.2" + version: "10.1.0" device_info_plus_platform_interface: dependency: transitive description: @@ -483,18 +482,16 @@ packages: digit_components: dependency: "direct main" description: - name: digit_components - sha256: "31c9c45bdbad9fb4c3ed5ce1c2f95c983eaea4967ed0dcf9c36e467a77a97008" - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_components" + relative: true + source: path version: "1.0.0+1" digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "2d033990f03f7a0ea651e08c37933b4ed5ea76bf3a6a2ac3ff652c2286d04912" - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_data_model" + relative: true + source: path version: "1.0.1" digit_firebase_services: dependency: "direct main" @@ -506,18 +503,16 @@ packages: digit_scanner: dependency: "direct main" description: - name: digit_scanner - sha256: abd9dcc5c2d39d7d81277a3437262e2ebc6a3c4a3862a51844c8ebf29a795f22 - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_scanner" + relative: true + source: path version: "1.0.1" digit_showcase: dependency: "direct main" description: - name: digit_showcase - sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_showcase" + relative: true + source: path version: "1.0.0" dio: dependency: "direct main" @@ -527,22 +522,22 @@ packages: url: "https://pub.dev" source: hosted version: "5.4.3+1" - disk_space: + disk_space_update: dependency: "direct main" description: - name: disk_space - sha256: fb27eb2d09ac04784f45b95b1355538b2355c76a081eeaa8439d1a5cfa263888 + name: disk_space_update + sha256: "65e19384334779537f7ec83a939c5991bf56bfe016672335ea47d62374f08a3c" url: "https://pub.dev" source: hosted - version: "0.2.1" + version: "0.0.2" drift: dependency: "direct main" description: name: drift - sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + sha256: "6acedc562ffeed308049f78fb1906abad3d65714580b6745441ee6d50ec564cd" url: "https://pub.dev" source: hosted - version: "2.15.0" + version: "2.18.0" drift_db_viewer: dependency: "direct main" description: @@ -555,18 +550,18 @@ packages: dependency: "direct dev" description: name: drift_dev - sha256: c037d9431b6f8dc633652b1469e5f53aaec6e4eb405ed29dd232fa888ef10d88 + sha256: d9b020736ea85fff1568699ce18b89fabb3f0f042e8a7a05e84a3ec20d39acde url: "https://pub.dev" source: hosted - version: "2.15.0" + version: "2.18.0" easy_stepper: dependency: transitive description: name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + sha256: d09e974ec9148480072f8a7d3b0779dfdbc1a3ec1ff7daa7fbda95b0c1fe7453 url: "https://pub.dev" source: hosted - version: "0.5.2+1" + version: "0.8.5" equatable: dependency: transitive description: @@ -595,26 +590,26 @@ packages: dependency: transitive description: name: ffi - sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.2" file: dependency: transitive description: name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "7.0.0" firebase_core: dependency: transitive description: name: firebase_core - sha256: "53316975310c8af75a96e365f9fccb67d1c544ef0acdbf0d88bbe30eedd1c4f9" + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" url: "https://pub.dev" source: hosted - version: "2.27.0" + version: "2.32.0" firebase_core_platform_interface: dependency: transitive description: @@ -627,26 +622,26 @@ packages: dependency: transitive description: name: firebase_core_web - sha256: c8e1d59385eee98de63c92f961d2a7062c5d9a65e7f45bdc7f1b0b205aab2492 + sha256: "22fcb352744908224fc7be3caae254836099786acfe5df6e9fe901e9c2575a41" url: "https://pub.dev" source: hosted - version: "2.11.5" + version: "2.17.1" firebase_crashlytics: dependency: transitive description: name: firebase_crashlytics - sha256: c4f1b723d417bc9c4774810e774ff91df8fb0032d33fb2888b2c887e865581b8 + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" url: "https://pub.dev" source: hosted - version: "3.4.18" + version: "3.5.7" firebase_crashlytics_platform_interface: dependency: transitive description: name: firebase_crashlytics_platform_interface - sha256: c5a11fca3df76a98e3fa68fde8b10a08aacb9a7639f619fbfd4dad6c67a08643 + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" url: "https://pub.dev" source: hosted - version: "3.6.25" + version: "3.6.35" fixnum: dependency: transitive description: @@ -781,18 +776,18 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" + sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "4.0.0" flutter_local_notifications: dependency: "direct main" description: name: flutter_local_notifications - sha256: "55b9b229307a10974b26296ff29f2e132256ba4bd74266939118eaefa941cb00" + sha256: "40e6fbd2da7dcc7ed78432c5cdab1559674b4af035fddbfb2f9a8f9c2112fcef" url: "https://pub.dev" source: hosted - version: "16.3.3" + version: "17.1.2" flutter_local_notifications_linux: dependency: transitive description: @@ -818,10 +813,10 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: "8cf40eebf5dec866a6d1956ad7b4f7016e6c0cc69847ab946833b7d43743809f" + sha256: c6b0b4c05c458e1c01ad9bcc14041dd7b1f6783d487be4386f793f47a8a4d03e url: "https://pub.dev" source: hosted - version: "2.0.19" + version: "2.0.20" flutter_portal: dependency: "direct main" description: @@ -913,13 +908,13 @@ packages: source: sdk version: "0.0.0" fluttertoast: - dependency: "direct main" + dependency: transitive description: name: fluttertoast - sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" + sha256: "7eae679e596a44fdf761853a706f74979f8dd3cd92cf4e23cae161fda091b847" url: "https://pub.dev" source: hosted - version: "8.2.5" + version: "8.2.6" formula_parser: dependency: transitive description: @@ -948,10 +943,10 @@ packages: dependency: transitive description: name: frontend_server_client - sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "4.0.0" fuchsia_remote_debug_protocol: dependency: transitive description: flutter @@ -969,26 +964,26 @@ packages: dependency: transitive description: name: google_fonts - sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 url: "https://pub.dev" source: hosted - version: "4.0.5" + version: "6.2.1" google_mlkit_barcode_scanning: - dependency: "direct main" + dependency: transitive description: name: google_mlkit_barcode_scanning - sha256: "965183a8cd5cef8477ceea5dbdf29c34a739cf0cfbf1bdad54cd3f9f1807afe5" + sha256: f1a2a39cf1730b9a5e2784a07efa1ca5bfdfdde6aa00b193b3f8cd1953c638ec url: "https://pub.dev" source: hosted - version: "0.10.0" + version: "0.12.0" google_mlkit_commons: dependency: transitive description: name: google_mlkit_commons - sha256: "046586b381cdd139f7f6a05ad6998f7e339d061bd70158249907358394b5f496" + sha256: "27d626c66a181351a953eba5b6ff1ff123aadb891b4dab085b292118f039d6ac" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.1" graphs: dependency: transitive description: @@ -998,7 +993,7 @@ packages: source: hosted version: "2.3.1" group_radio_button: - dependency: "direct main" + dependency: transitive description: name: group_radio_button sha256: "204de8d16b224be7fc72dade0c3afd410ff5a34417d89f74f0fd8be7a8c2b4d6" @@ -1006,7 +1001,7 @@ packages: source: hosted version: "1.3.0" gs1_barcode_parser: - dependency: "direct main" + dependency: transitive description: name: gs1_barcode_parser sha256: "9aaff47bdab7177deaf9248cc861ef41cf611d3f828498cb40b64bedcbf53391" @@ -1049,10 +1044,10 @@ packages: dependency: transitive description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" http_multi_server: dependency: transitive description: @@ -1073,10 +1068,10 @@ packages: dependency: transitive description: name: image - sha256: "4c68bfd5ae83e700b5204c1e74451e7bf3cf750e6843c6e158289cf56bda018e" + sha256: "2237616a36c0d69aef7549ab439b833fb7f9fb9fc861af2cc9ac3eedddd69ca8" url: "https://pub.dev" source: hosted - version: "4.1.7" + version: "4.2.0" integration_test: dependency: "direct dev" description: flutter @@ -1086,17 +1081,16 @@ packages: dependency: "direct main" description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" inventory_management: dependency: "direct main" description: - name: inventory_management - sha256: "894bbf8193041d096d301c8bc8fd4e6dfa8205176d9430a60f2c80656000bfe6" - url: "https://pub.dev" - source: hosted + path: "../../packages/inventory_management" + relative: true + source: path version: "1.0.1" io: dependency: transitive @@ -1154,38 +1148,62 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: name: lints - sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "4.0.0" location: dependency: "direct main" description: name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.0" location_web: dependency: transitive description: name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + sha256: "15ad7b4c8a9f55abee513373755e093a40c04d7e24fc1b4f89676fe99523d034" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "5.0.1" logging: dependency: transitive description: @@ -1198,26 +1216,26 @@ packages: dependency: transitive description: name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + sha256: "6a24ade5d3d918c306bb1c21a6b9a04aab0489d51a2582522eea820b4093b62b" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "3.1.2" matcher: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" material_design_icons_flutter: dependency: "direct main" description: @@ -1230,10 +1248,10 @@ packages: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -1294,26 +1312,26 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + sha256: b93d8b4d624b4ea19b0a5a208b2d6eff06004bc3ce74c06040b120eeadd00ce0 url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "8.0.0" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + sha256: f49918f3433a3146047372f9d4f1f847511f2acd5cd030e1f44fe5a50036b70e url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.0" path: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_parsing: dependency: transitive description: @@ -1334,18 +1352,18 @@ packages: dependency: transitive description: name: path_provider_android - sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d + sha256: "9c96da072b421e98183f9ea7464898428e764bc0ce5567f27ec8693442e72514" url: "https://pub.dev" source: hosted - version: "2.2.4" + version: "2.2.5" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" + sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16 url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.0" path_provider_linux: dependency: transitive description: @@ -1370,14 +1388,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.2.1" - pedantic: - dependency: transitive - description: - name: pedantic - sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" - url: "https://pub.dev" - source: hosted - version: "1.11.1" petitparser: dependency: transitive description: @@ -1390,10 +1400,10 @@ packages: dependency: transitive description: name: platform - sha256: ae68c7bfcd7383af3629daafb32fb4e8681c7154428da4febcff06200585f102 + sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "3.1.4" plugin_platform_interface: dependency: transitive description: @@ -1406,10 +1416,10 @@ packages: dependency: "direct main" description: name: pluto_grid - sha256: e77c34a33dd9d74abbe20ba1df96474dded150dd042c7f7495be1bc2c26bd37f + sha256: "1d4cd9d2652742b556aa9b3230cc64672a3f63c34a9acc80fef794ab36ad903b" url: "https://pub.dev" source: hosted - version: "7.0.2" + version: "8.0.0" pointer_interceptor: dependency: transitive description: @@ -1438,10 +1448,10 @@ packages: dependency: transitive description: name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + sha256: "21e54fd2faf1b5bdd5102afd25012184a6793927648ea81eea80552ac9405b32" url: "https://pub.dev" source: hosted - version: "4.2.4" + version: "5.0.2" provider: dependency: "direct main" description: @@ -1462,10 +1472,10 @@ packages: dependency: transitive description: name: pubspec_parse - sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 + sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 url: "https://pub.dev" source: hosted - version: "1.2.3" + version: "1.3.0" qr: dependency: transitive description: @@ -1486,18 +1496,18 @@ packages: dependency: transitive description: name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 + sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a url: "https://pub.dev" source: hosted - version: "0.8.1" + version: "2.1.1" reactive_forms: dependency: "direct main" description: name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "17.0.1" recase: dependency: "direct main" description: @@ -1509,18 +1519,16 @@ packages: referral_reconciliation: dependency: "direct main" description: - name: referral_reconciliation - sha256: "8e5a0b922f7ec13e298de53ae9b7bc72236787930e9da98c1ec94da09d200cb4" - url: "https://pub.dev" - source: hosted + path: "../../packages/referral_reconciliation" + relative: true + source: path version: "1.0.1" registration_delivery: dependency: "direct main" description: - name: registration_delivery - sha256: f27ac7213aac505eb468123b34b59e80eecaa341b1328b1d65fc950fa3ede5b8 - url: "https://pub.dev" - source: hosted + path: "../../packages/registration_delivery" + relative: true + source: path version: "1.0.1" remove_emoji_input_formatter: dependency: transitive @@ -1550,18 +1558,18 @@ packages: dependency: transitive description: name: shared_preferences_android - sha256: "1ee8bf911094a1b592de7ab29add6f826a7331fb854273d55918693d5364a1f2" + sha256: "93d0ec9dd902d85f326068e6a899487d1f65ffcd5798721a95330b26c8131577" url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.2.3" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c" + sha256: "0a8a893bf4fd1152f93fec03a415d11c27c74454d96e2318a7ac38dd18683ab7" url: "https://pub.dev" source: hosted - version: "2.3.5" + version: "2.4.0" shared_preferences_linux: dependency: transitive description: @@ -1582,10 +1590,10 @@ packages: dependency: transitive description: name: shared_preferences_web - sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21" + sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a" url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.3.0" shared_preferences_windows: dependency: transitive description: @@ -1671,54 +1679,38 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" - speech_to_text: - dependency: "direct main" - description: - name: speech_to_text - sha256: "57fef1d41bdebe298e84842c89bb4ac91f31cdbec7830c8cb1fc6b91d03abd42" - url: "https://pub.dev" - source: hosted - version: "6.6.0" - speech_to_text_macos: - dependency: transitive - description: - name: speech_to_text_macos - sha256: e685750f7542fcaa087a5396ee471e727ec648bf681f4da83c84d086322173f6 - url: "https://pub.dev" - source: hosted - version: "1.1.0" - speech_to_text_platform_interface: + sprintf: dependency: transitive description: - name: speech_to_text_platform_interface - sha256: a0df1a907091ea09880077dc25aae02af9f79811264e6e97ddb08639b7f771c2 + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "7.0.0" sqlite3: dependency: transitive description: name: sqlite3 - sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" + sha256: b384f598b813b347c5a7e5ffad82cbaff1bec3d1561af267041e66f6f0899295 url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.3" sqlite3_flutter_libs: dependency: "direct main" description: name: sqlite3_flutter_libs - sha256: fb2a106a2ea6042fe57de2c47074cc31539a941819c91e105b864744605da3f5 + sha256: "9f89a7e7dc36eac2035808427eba1c3fbd79e59c3a22093d8dace6d36b1fe89e" url: "https://pub.dev" source: hosted - version: "0.5.21" + version: "0.5.23" sqlparser: dependency: transitive description: name: sqlparser - sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" + sha256: ade9a67fd70d0369329ed3373208de7ebd8662470e8c396fc8d0d60f9acdfc9f url: "https://pub.dev" source: hosted - version: "0.34.1" + version: "0.36.0" stack_trace: dependency: transitive description: @@ -1736,7 +1728,7 @@ packages: source: hosted version: "2.1.2" stream_transform: - dependency: "direct main" + dependency: transitive description: name: stream_transform sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" @@ -1759,6 +1751,13 @@ packages: url: "https://pub.dev" source: hosted version: "0.3.1" + sync_service: + dependency: "direct main" + description: + path: "../../packages/sync_service" + relative: true + source: path + version: "0.0.1" synchronized: dependency: transitive description: @@ -1779,26 +1778,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" time: dependency: transitive description: @@ -1847,78 +1846,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.0" - url_launcher: - dependency: "direct main" - description: - name: url_launcher - sha256: "6ce1e04375be4eed30548f10a315826fd933c1e493206eab82eed01f438c8d2e" - url: "https://pub.dev" - source: hosted - version: "6.2.6" - url_launcher_android: - dependency: transitive - description: - name: url_launcher_android - sha256: "17cd5e205ea615e2c6ea7a77323a11712dffa0720a8a90540db57a01347f9ad9" - url: "https://pub.dev" - source: hosted - version: "6.3.2" - url_launcher_ios: - dependency: transitive - description: - name: url_launcher_ios - sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" - url: "https://pub.dev" - source: hosted - version: "6.2.4" - url_launcher_linux: - dependency: transitive - description: - name: url_launcher_linux - sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 - url: "https://pub.dev" - source: hosted - version: "3.1.1" - url_launcher_macos: - dependency: transitive - description: - name: url_launcher_macos - sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" - url: "https://pub.dev" - source: hosted - version: "3.2.0" - url_launcher_platform_interface: - dependency: transitive - description: - name: url_launcher_platform_interface - sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - url_launcher_web: - dependency: transitive - description: - name: url_launcher_web - sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b - url: "https://pub.dev" - source: hosted - version: "2.2.3" - url_launcher_windows: - dependency: transitive - description: - name: url_launcher_windows - sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7 - url: "https://pub.dev" - source: hosted - version: "3.1.1" uuid: dependency: "direct main" description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8" url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.4.0" vector_graphics: dependency: transitive description: @@ -1955,10 +1890,10 @@ packages: dependency: transitive description: name: vm_service - sha256: c538be99af830f478718b51630ec1b6bee5e74e52c8a802d328d9e71d35d2583 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "11.10.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1971,26 +1906,26 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.5.1" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + sha256: "58c6666b342a38816b2e7e50ed0f1e261959630becd4c879c4f26bfa14aa5a42" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.5" webdriver: dependency: transitive description: name: webdriver - sha256: "3c923e918918feeb90c4c9fdf1fe39220fa4c0e8e2c0fffaded174498ef86c49" + sha256: "003d7da9519e1e5f329422b36c4dcdf18d7d2978d1ba099ea4e45ba490ed845e" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.3" webkit_inspection_protocol: dependency: transitive description: @@ -2003,18 +1938,18 @@ packages: dependency: transitive description: name: win32 - sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" + sha256: a79dbe579cb51ecd6d30b17e0cae4e0ea15e2c0e66f69ad4198f22a6789e94f4 url: "https://pub.dev" source: hosted - version: "5.2.0" + version: "5.5.1" win32_registry: dependency: transitive description: name: win32_registry - sha256: "41fd8a189940d8696b1b810efb9abcf60827b6cbfab90b0c43e8439e3a39d85a" + sha256: "10589e0d7f4e053f2c61023a31c9ce01146656a70b7b7f0828c0b46d7da2a9bb" url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.1.3" workmanager: dependency: "direct main" description: @@ -2056,5 +1991,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.22.0" diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index f02cdd87f..b08cc7a36 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -10,83 +10,75 @@ dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.2 - freezed_annotation: ^2.1.0 - json_annotation: ^4.7.0 - uuid: ^3.0.6 - intl: ^0.18.0 - drift: ^2.0.0 - sqlite3_flutter_libs: ^0.5.10 - path_provider: ^2.0.11 - path: ^1.8.2 + freezed_annotation: ^2.4.1 + json_annotation: ^4.9.0 + uuid: ^4.4.0 + intl: ^0.19.0 + drift: ^2.18.0 + sqlite3_flutter_libs: ^0.5.11+1 + path_provider: ^2.1.3 + path: ^1.9.0 digit_components: ^1.0.0+1 - auto_route: ^7.8.4 - flutter_bloc: ^8.1.1 - collection: ^1.16.0 - reactive_forms: ^14.1.0 - location: ^5.0.0 + auto_route: ^8.1.3 + flutter_bloc: ^8.1.5 + collection: ^1.18.0 + reactive_forms: ^17.0.0 + location: ^6.0.2 dart_mappable: ^4.2.0 - dio: ^5.1.2 - flutter_keyboard_visibility: ^5.4.0 - isar: ^3.0.5 - isar_flutter_libs: ^3.0.5 + dio: ^5.4.3+1 + flutter_keyboard_visibility: ^5.4.1 + isar: ^3.1.0+1 + isar_flutter_libs: ^3.1.0+1 nested: ^1.0.0 - flutter_dotenv: ^5.0.2 + flutter_dotenv: ^5.1.0 flutter_localizations: sdk: flutter - provider: ^6.0.5 + provider: ^6.1.2 recase: ^4.1.0 - drift_db_viewer: ^2.0.0 - bloc_concurrency: ^0.2.1 - stream_transform: ^2.1.0 - fluttertoast: ^8.1.2 - flutter_secure_storage: ^9.0.0 - group_radio_button: ^1.3.0 - flutter_portal: ^1.1.3 - url_launcher: ^6.1.10 - connectivity_plus: ^5.0.2 + drift_db_viewer: ^2.1.0 + bloc_concurrency: ^0.2.5 + flutter_secure_storage: ^9.2.2 + connectivity_plus: ^6.0.3 material_design_icons_flutter: ^7.0.7296 - shared_preferences: ^2.1.0 - pretty_dio_logger: ^1.2.0-beta-1 - pluto_grid: ^7.0.1 - speech_to_text: ^6.1.1 + shared_preferences: ^2.2.3 + pretty_dio_logger: ^1.3.1 + pluto_grid: ^8.0.0 + flutter_portal: ^1.1.4 flutter_background_service: ^5.0.5 - flutter_local_notifications: ^16.3.0 - device_info_plus: ^9.0.1 - battery_plus: ^5.0.2 - workmanager: ^0.5.1 + flutter_local_notifications: ^17.1.2 + device_info_plus: ^10.1.0 + battery_plus: ^6.0.1 + workmanager: ^0.5.2 digit_firebase_services: ^0.0.1 - package_info_plus: ^5.0.1 + package_info_plus: ^8.0.0 expandable: ^5.0.1 - flutter_svg: ^2.0.8 + flutter_svg: ^2.0.10+1 digit_showcase: ^1.0.0 - audioplayers: ^5.2.0 - gs1_barcode_parser: ^1.0.5 qr_flutter: ^4.1.0 - disk_space: ^0.2.1 - google_mlkit_barcode_scanning: ^0.10.0 - camera: ^0.10.5+7 - attendance_management: ^1.0.0+2 - digit_scanner: ^1.0.1 - inventory_management: ^1.0.1 - referral_reconciliation: ^1.0.1 + disk_space_update: ^0.0.2 digit_data_model: ^1.0.1 - registration_delivery: ^1.0.1 + digit_scanner: ^1.0.0+1 + attendance_management: ^1.0.0+1 + inventory_management: ^1.0.0 + referral_reconciliation: ^1.0.0 + registration_delivery: ^1.0.0+1 + sync_service: ^1.0.0 dev_dependencies: flutter_test: sdk: flutter integration_test: sdk: flutter - flutter_lints: ^3.0.1 - freezed: ^2.1.0+1 - build_runner: ^2.4.7 - json_serializable: ^6.4.0 - drift_dev: ^2.14.1 - auto_route_generator: ^7.3.2 + flutter_lints: ^4.0.0 + freezed: ^2.5.2 + build_runner: ^2.4.11 + json_serializable: ^6.8.0 + drift_dev: ^2.18.0 + auto_route_generator: ^8.0.0 bloc_test: ^9.1.0 mocktail: ^1.0.2 dart_mappable_builder: ^4.2.0 - isar_generator: ^3.0.5 + isar_generator: ^3.1.0+1 flutter_launcher_icons: ^0.13.1 hrk_flutter_test_batteries: ^0.8.0 diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index 62623c661..973ac7bea 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -130,7 +130,7 @@ packages: source: hosted version: "2.4.2" build_runner: - dependency: "direct dev" + dependency: "direct main" description: name: build_runner sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" @@ -320,7 +320,7 @@ packages: source: hosted version: "2.18.0" drift_db_viewer: - dependency: transitive + dependency: "direct main" description: name: drift_db_viewer sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" @@ -492,7 +492,7 @@ packages: source: sdk version: "0.0.0" fluttertoast: - dependency: transitive + dependency: "direct main" description: name: fluttertoast sha256: "7eae679e596a44fdf761853a706f74979f8dd3cd92cf4e23cae161fda091b847" @@ -764,7 +764,7 @@ packages: source: hosted version: "2.0.2" overlay_builder: - dependency: transitive + dependency: "direct main" description: name: overlay_builder sha256: "58b97bc5f67a2e2bb7006dd88e697ac757dfffc9dbd1e7dfc1917fb510a4b5c8" @@ -796,7 +796,7 @@ packages: source: hosted version: "3.0.0" path: - dependency: transitive + dependency: "direct main" description: name: path sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" @@ -812,7 +812,7 @@ packages: source: hosted version: "1.0.1" path_provider: - dependency: transitive + dependency: "direct main" description: name: path_provider sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 @@ -1041,7 +1041,7 @@ packages: source: hosted version: "2.4.3" sqlite3_flutter_libs: - dependency: transitive + dependency: "direct main" description: name: sqlite3_flutter_libs sha256: "9f89a7e7dc36eac2035808427eba1c3fbd79e59c3a22093d8dace6d36b1fe89e" diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index 4a298d134..f782b1e87 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -12,38 +12,38 @@ dependencies: flutter: sdk: flutter digit_components: ^1.0.0+1 - flutter_bloc: ^8.1.1 - freezed_annotation: ^2.1.0 + flutter_bloc: ^8.1.5 + freezed_annotation: ^2.4.1 + intl: ^0.19.0 + flutter_svg: ^2.0.10+1 + dart_mappable: ^4.2.2 + drift: ^2.18.0 + auto_route: ^8.1.3 + collection: ^1.18.0 + dio: ^5.4.3+1 + location: ^6.0.2 build_runner: ^2.2.1 - reactive_forms: ^14.1.0 fluttertoast: ^8.1.2 overlay_builder: ^1.1.0 - intl: ^0.18.0 - flutter_svg: ^2.0.8 - dart_mappable: ^4.2.0 - drift: ^2.0.0 sqlite3_flutter_libs: ^0.5.10 path_provider: ^2.0.11 path: ^1.8.2 drift_db_viewer: ^2.0.0 - auto_route: ^7.8.4 digit_data_model: ^1.0.1 - connectivity_plus: ^5.0.2 - collection: ^1.16.0 - location: ^5.0.0 - dio: ^5.1.2 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^2.0.0 + flutter_lints: ^4.0.0 + lints: ^4.0.0 json_serializable: ^6.4.0 - freezed: ^2.2.0 + freezed: ^2.5.2 + build_runner: ^2.4.11 bloc_test: ^9.1.0 mocktail: ^1.0.2 dart_mappable_builder: ^4.2.0 - drift_dev: ^2.14.1 - auto_route_generator: ^7.3.2 + drift_dev: ^2.18.0 + auto_route_generator: 8.0.0 flutter: assets: diff --git a/packages/digit_components/lib/theme/digit_theme.dart b/packages/digit_components/lib/theme/digit_theme.dart index f6fa1b73a..7352ebda3 100644 --- a/packages/digit_components/lib/theme/digit_theme.dart +++ b/packages/digit_components/lib/theme/digit_theme.dart @@ -32,7 +32,7 @@ class DigitTheme { return ThemeData( colorScheme: colorScheme, useMaterial3: false, - scaffoldBackgroundColor: colorScheme.background, + scaffoldBackgroundColor: colorScheme.surface, textTheme: mobileTypography.textTheme, appBarTheme: const AppBarTheme(elevation: 0), elevatedButtonTheme: elevatedButtonTheme, @@ -52,9 +52,7 @@ class DigitTheme { onSecondary: colors.white, error: colors.lavaRed, onError: colors.white, - background: colors.seaShellGray, - onBackground: colors.woodsmokeBlack, - surface: colors.alabasterWhite, + surface: colors.seaShellGray, onSurface: colors.woodsmokeBlack, onSurfaceVariant: colors.darkSpringGreen, tertiaryContainer: colors.tropicalBlue, diff --git a/packages/digit_components/lib/widgets/atoms/digit_integer_form_picker.dart b/packages/digit_components/lib/widgets/atoms/digit_integer_form_picker.dart index 7f93e5da5..99a313eca 100644 --- a/packages/digit_components/lib/widgets/atoms/digit_integer_form_picker.dart +++ b/packages/digit_components/lib/widgets/atoms/digit_integer_form_picker.dart @@ -90,7 +90,7 @@ class DigitIntegerFormPicker extends StatelessWidget { aspectRatio: 1, child: Material( shape: border, - color: Theme.of(context).colorScheme.background, + color: Theme.of(context).colorScheme.surface, child: InkWell(onTap: onPressed, child: Icon(icon)), ), ); diff --git a/packages/digit_components/lib/widgets/molecules/digit_table.dart b/packages/digit_components/lib/widgets/molecules/digit_table.dart index 1d51f5033..c5ed64f06 100644 --- a/packages/digit_components/lib/widgets/molecules/digit_table.dart +++ b/packages/digit_components/lib/widgets/molecules/digit_table.dart @@ -111,7 +111,7 @@ class DigitTable extends StatelessWidget { color: index == selectedIndex ? DigitTheme.instance.colorScheme.tertiary : index % 2 == 0 - ? DigitTheme.instance.colorScheme.background + ? DigitTheme.instance.colorScheme.surface : DigitTheme.instance.colorScheme.surface, child: Row( mainAxisAlignment: centerData == null @@ -175,7 +175,7 @@ class DigitTable extends StatelessWidget { color: selectedIndex == index ? DigitTheme.instance.colorScheme.tertiary : index % 2 == 0 - ? DigitTheme.instance.colorScheme.background + ? DigitTheme.instance.colorScheme.surface : DigitTheme.instance.colorScheme.surface, border: Border( left: tableCellBorder, diff --git a/packages/digit_scanner/example/pubspec.lock b/packages/digit_scanner/example/pubspec.lock index 6dc08b448..68e0b3441 100644 --- a/packages/digit_scanner/example/pubspec.lock +++ b/packages/digit_scanner/example/pubspec.lock @@ -318,7 +318,7 @@ packages: path: ".." relative: true source: path - version: "1.0.0+1" + version: "1.0.1" easy_stepper: dependency: transitive description: diff --git a/packages/forms_engine/lib/widgets/integer_builder.dart b/packages/forms_engine/lib/widgets/integer_builder.dart index 77a7c8b56..1d9c13a46 100644 --- a/packages/forms_engine/lib/widgets/integer_builder.dart +++ b/packages/forms_engine/lib/widgets/integer_builder.dart @@ -73,7 +73,7 @@ class JsonSchemaIntegerBuilder extends JsonSchemaBuilder { aspectRatio: 1, child: Material( shape: border, - color: Theme.of(context).colorScheme.background, + color: Theme.of(context).colorScheme.surface, child: InkWell(onTap: onPressed, child: Icon(icon)), ), ); diff --git a/packages/forms_engine/pubspec.lock b/packages/forms_engine/pubspec.lock index 1fbd7a910..a52776731 100644 --- a/packages/forms_engine/pubspec.lock +++ b/packages/forms_engine/pubspec.lock @@ -504,6 +504,30 @@ packages: url: "https://pub.dev" source: hosted version: "6.7.1" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -556,26 +580,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -644,10 +668,10 @@ packages: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_provider: dependency: transitive description: @@ -905,26 +929,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" timing: dependency: transitive description: @@ -953,10 +977,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1014,5 +1038,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.3.0 <3.9.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index 50cddf12e..d564aa923 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -61,74 +61,74 @@ packages: dependency: transitive description: name: audioplayers - sha256: c05c6147124cd63e725e861335a8b4d57300b80e6e92cea7c145c739223bbaef + sha256: "752039d6aa752597c98ec212e9759519061759e402e7da59a511f39d43aa07d2" url: "https://pub.dev" source: hosted - version: "5.2.1" + version: "6.0.0" audioplayers_android: dependency: transitive description: name: audioplayers_android - sha256: b00e1a0e11365d88576320ec2d8c192bc21f1afb6c0e5995d1c57ae63156acb5 + sha256: de576b890befe27175c2f511ba8b742bec83765fa97c3ce4282bba46212f58e4 url: "https://pub.dev" source: hosted - version: "4.0.3" + version: "5.0.0" audioplayers_darwin: dependency: transitive description: name: audioplayers_darwin - sha256: "3034e99a6df8d101da0f5082dcca0a2a99db62ab1d4ddb3277bed3f6f81afe08" + sha256: e507887f3ff18d8e5a10a668d7bedc28206b12e10b98347797257c6ae1019c3b url: "https://pub.dev" source: hosted - version: "5.0.2" + version: "6.0.0" audioplayers_linux: dependency: transitive description: name: audioplayers_linux - sha256: "60787e73fefc4d2e0b9c02c69885402177e818e4e27ef087074cf27c02246c9e" + sha256: "3d3d244c90436115417f170426ce768856d8fe4dfc5ed66a049d2890acfa82f9" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "4.0.0" audioplayers_platform_interface: dependency: transitive description: name: audioplayers_platform_interface - sha256: "365c547f1bb9e77d94dd1687903a668d8f7ac3409e48e6e6a3668a1ac2982adb" + sha256: "6834dd48dfb7bc6c2404998ebdd161f79cd3774a7e6779e1348d54a3bfdcfaa5" url: "https://pub.dev" source: hosted - version: "6.1.0" + version: "7.0.0" audioplayers_web: dependency: transitive description: name: audioplayers_web - sha256: "22cd0173e54d92bd9b2c80b1204eb1eb159ece87475ab58c9788a70ec43c2a62" + sha256: db8fc420dadf80da18e2286c18e746fb4c3b2c5adbf0c963299dde046828886d url: "https://pub.dev" source: hosted - version: "4.1.0" + version: "5.0.0" audioplayers_windows: dependency: transitive description: name: audioplayers_windows - sha256: "9536812c9103563644ada2ef45ae523806b0745f7a78e89d1b5fb1951de90e1a" + sha256: "8605762dddba992138d476f6a0c3afd9df30ac5b96039929063eceed416795c2" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "4.0.0" auto_route: dependency: "direct main" description: name: auto_route - sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 + sha256: "6cad3f408863ffff2b5757967c802b18415dac4acb1b40c5cdd45d0a26e5080f" url: "https://pub.dev" source: hosted - version: "7.9.2" + version: "8.1.3" auto_route_generator: dependency: "direct dev" description: name: auto_route_generator - sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" + sha256: ba28133d3a3bf0a66772bcc98dade5843753cd9f1a8fb4802b842895515b67d3 url: "https://pub.dev" source: hosted - version: "7.3.2" + version: "8.0.0" bloc: dependency: transitive description: @@ -186,13 +186,13 @@ packages: source: hosted version: "2.4.2" build_runner: - dependency: "direct main" + dependency: "direct dev" description: name: build_runner - sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" url: "https://pub.dev" source: hosted - version: "2.4.9" + version: "2.4.11" build_runner_core: dependency: transitive description: @@ -221,26 +221,26 @@ packages: dependency: transitive description: name: camera - sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" + sha256: "2170a943dcb67be2af2c6bcda8775e74b41d4c02d6a4eb10bdc832ee185c4eea" url: "https://pub.dev" source: hosted - version: "0.10.5+9" - camera_android: + version: "0.11.0+1" + camera_android_camerax: dependency: transitive description: - name: camera_android - sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 + name: camera_android_camerax + sha256: "7d84815edbb8304b51c10deba3c20f44eef80aa46ff156ec45428ed16600b49a" url: "https://pub.dev" source: hosted - version: "0.10.9+2" + version: "0.6.5+5" camera_avfoundation: dependency: transitive description: name: camera_avfoundation - sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" + sha256: "7d021e8cd30d9b71b8b92b4ad669e80af432d722d18d6aac338572754a786c15" url: "https://pub.dev" source: hosted - version: "0.9.13+10" + version: "0.9.16" camera_platform_interface: dependency: transitive description: @@ -333,10 +333,10 @@ packages: dependency: transitive description: name: cross_file - sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e + sha256: "55d7b444feb71301ef6b8838dbc1ae02e63dd48c8773f3810ff53bb1e2945b32" url: "https://pub.dev" source: hosted - version: "0.3.3+8" + version: "0.3.4+1" crypto: dependency: transitive description: @@ -345,14 +345,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" - csslib: - dependency: transitive - description: - name: csslib - sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" - url: "https://pub.dev" - source: hosted - version: "1.0.0" cupertino_icons: dependency: transitive description: @@ -361,22 +353,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_code_metrics: - dependency: "direct dev" - description: - name: dart_code_metrics - sha256: "3dede3f7abc077a4181ec7445448a289a9ce08e2981e6a4d49a3fb5099d47e1f" - url: "https://pub.dev" - source: hosted - version: "5.7.6" - dart_code_metrics_presets: - dependency: transitive - description: - name: dart_code_metrics_presets - sha256: b71eadf02a3787ebd5c887623f83f6fdc204d45c75a081bd636c4104b3fd8b73 - url: "https://pub.dev" - source: hosted - version: "1.8.0" dart_mappable: dependency: "direct main" description: @@ -419,29 +395,26 @@ packages: digit_components: dependency: "direct main" description: - name: digit_components - sha256: "31c9c45bdbad9fb4c3ed5ce1c2f95c983eaea4967ed0dcf9c36e467a77a97008" - url: "https://pub.dev" - source: hosted + path: "../digit_components" + relative: true + source: path version: "1.0.0+1" digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "2d033990f03f7a0ea651e08c37933b4ed5ea76bf3a6a2ac3ff652c2286d04912" - url: "https://pub.dev" - source: hosted + path: "../digit_data_model" + relative: true + source: path version: "1.0.1" digit_scanner: dependency: "direct main" description: - name: digit_scanner - sha256: abd9dcc5c2d39d7d81277a3437262e2ebc6a3c4a3862a51844c8ebf29a795f22 - url: "https://pub.dev" - source: hosted + path: "../digit_scanner" + relative: true + source: path version: "1.0.1" dio: - dependency: transitive + dependency: "direct main" description: name: dio sha256: "11e40df547d418cc0c4900a9318b26304e665da6fa4755399a9ff9efd09034b5" @@ -452,10 +425,10 @@ packages: dependency: "direct main" description: name: drift - sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + sha256: "6acedc562ffeed308049f78fb1906abad3d65714580b6745441ee6d50ec564cd" url: "https://pub.dev" source: hosted - version: "2.15.0" + version: "2.18.0" drift_db_viewer: dependency: "direct main" description: @@ -468,18 +441,18 @@ packages: dependency: "direct dev" description: name: drift_dev - sha256: c037d9431b6f8dc633652b1469e5f53aaec6e4eb405ed29dd232fa888ef10d88 + sha256: d9b020736ea85fff1568699ce18b89fabb3f0f042e8a7a05e84a3ec20d39acde url: "https://pub.dev" source: hosted - version: "2.15.0" + version: "2.18.0" easy_stepper: dependency: transitive description: name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + sha256: d09e974ec9148480072f8a7d3b0779dfdbc1a3ec1ff7daa7fbda95b0c1fe7453 url: "https://pub.dev" source: hosted - version: "0.5.2+1" + version: "0.8.5" fake_async: dependency: transitive description: @@ -585,10 +558,15 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" + sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "4.0.0" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -609,10 +587,10 @@ packages: dependency: "direct main" description: name: flutter_svg - sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c + sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" url: "https://pub.dev" source: hosted - version: "2.0.9" + version: "2.0.10+1" flutter_test: dependency: "direct dev" description: flutter @@ -635,10 +613,10 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" + sha256: "7eae679e596a44fdf761853a706f74979f8dd3cd92cf4e23cae161fda091b847" url: "https://pub.dev" source: hosted - version: "8.2.5" + version: "8.2.6" freezed: dependency: "direct dev" description: @@ -675,26 +653,26 @@ packages: dependency: transitive description: name: google_fonts - sha256: "6b6f10f0ce3c42f6552d1c70d2c28d764cf22bb487f50f66cca31dcd5194f4d6" + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 url: "https://pub.dev" source: hosted - version: "4.0.4" + version: "6.2.1" google_mlkit_barcode_scanning: dependency: transitive description: name: google_mlkit_barcode_scanning - sha256: "965183a8cd5cef8477ceea5dbdf29c34a739cf0cfbf1bdad54cd3f9f1807afe5" + sha256: f1a2a39cf1730b9a5e2784a07efa1ca5bfdfdde6aa00b193b3f8cd1953c638ec url: "https://pub.dev" source: hosted - version: "0.10.0" + version: "0.12.0" google_mlkit_commons: dependency: transitive description: name: google_mlkit_commons - sha256: "046586b381cdd139f7f6a05ad6998f7e339d061bd70158249907358394b5f496" + sha256: "27d626c66a181351a953eba5b6ff1ff123aadb891b4dab085b292118f039d6ac" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.1" graphs: dependency: transitive description: @@ -719,22 +697,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.3.1" - html: - dependency: transitive - description: - name: html - sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" - url: "https://pub.dev" - source: hosted - version: "0.15.4" http: dependency: transitive description: name: http - sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" url: "https://pub.dev" source: hosted - version: "0.13.6" + version: "1.2.1" http_multi_server: dependency: transitive description: @@ -755,10 +725,10 @@ packages: dependency: "direct main" description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" io: dependency: transitive description: @@ -807,38 +777,62 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: name: lints - sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "4.0.0" location: - dependency: transitive + dependency: "direct main" description: name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.0" location_web: dependency: transitive description: name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + sha256: "15ad7b4c8a9f55abee513373755e093a40c04d7e24fc1b4f89676fe99523d034" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "5.0.1" logging: dependency: transitive description: @@ -851,34 +845,34 @@ packages: dependency: transitive description: name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + sha256: "6a24ade5d3d918c306bb1c21a6b9a04aab0489d51a2582522eea820b4093b62b" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "3.1.2" matcher: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -931,26 +925,26 @@ packages: dependency: transitive description: name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + sha256: b93d8b4d624b4ea19b0a5a208b2d6eff06004bc3ce74c06040b120eeadd00ce0 url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "8.0.0" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + sha256: f49918f3433a3146047372f9d4f1f847511f2acd5cd030e1f44fe5a50036b70e url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.0" path: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_parsing: dependency: transitive description: @@ -1035,10 +1029,10 @@ packages: dependency: "direct main" description: name: pluto_grid - sha256: e77c34a33dd9d74abbe20ba1df96474dded150dd042c7f7495be1bc2c26bd37f + sha256: "1d4cd9d2652742b556aa9b3230cc64672a3f63c34a9acc80fef794ab36ad903b" url: "https://pub.dev" source: hosted - version: "7.0.2" + version: "8.0.0" pointer_interceptor: dependency: transitive description: @@ -1055,14 +1049,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.1" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" provider: dependency: transitive description: @@ -1079,14 +1065,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - pub_updater: - dependency: transitive - description: - name: pub_updater - sha256: "05ae70703e06f7fdeb05f7f02dd680b8aad810e87c756a618f33e1794635115c" - url: "https://pub.dev" - source: hosted - version: "0.3.0" pubspec_parse: dependency: transitive description: @@ -1099,18 +1077,18 @@ packages: dependency: transitive description: name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 + sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a url: "https://pub.dev" source: hosted - version: "0.8.1" + version: "2.1.1" reactive_forms: dependency: "direct main" description: name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "17.0.1" recase: dependency: "direct main" description: @@ -1212,6 +1190,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqlite3: dependency: transitive description: @@ -1224,18 +1210,18 @@ packages: dependency: "direct main" description: name: sqlite3_flutter_libs - sha256: fb2a106a2ea6042fe57de2c47074cc31539a941819c91e105b864744605da3f5 + sha256: "9f89a7e7dc36eac2035808427eba1c3fbd79e59c3a22093d8dace6d36b1fe89e" url: "https://pub.dev" source: hosted - version: "0.5.21" + version: "0.5.23" sqlparser: dependency: transitive description: name: sqlparser - sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" + sha256: ade9a67fd70d0369329ed3373208de7ebd8662470e8c396fc8d0d60f9acdfc9f url: "https://pub.dev" source: hosted - version: "0.34.1" + version: "0.36.0" stack_trace: dependency: transitive description: @@ -1288,26 +1274,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" timing: dependency: transitive description: @@ -1336,34 +1322,34 @@ packages: dependency: "direct main" description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8" url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.4.0" vector_graphics: dependency: transitive description: name: vector_graphics - sha256: "4ac59808bbfca6da38c99f415ff2d3a5d7ca0a6b4809c71d9cf30fba5daf9752" + sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: f3247e7ab0ec77dc759263e68394990edc608fb2b480b80db8aa86ed09279e33 + sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "18489bdd8850de3dd7ca8a34e0c446f719ec63e2bab2e7a8cc66a9028dd76c5a" + sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_math: dependency: transitive description: @@ -1376,10 +1362,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1392,10 +1378,10 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.5.1" web_socket_channel: dependency: transitive description: @@ -1445,5 +1431,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.22.0" diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index 0350851bd..6bc208ff5 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -12,41 +12,42 @@ dependencies: flutter: sdk: flutter digit_components: ^1.0.0+1 - flutter_bloc: ^8.1.1 - freezed_annotation: ^2.1.0 - build_runner: ^2.2.1 - reactive_forms: ^14.1.0 + flutter_bloc: ^8.1.5 + freezed_annotation: ^2.4.1 + reactive_forms: ^17.0.0 + intl: ^0.19.0 + flutter_svg: ^2.0.10+1 + dart_mappable: ^4.2.2 + drift: ^2.18.0 + auto_route: ^8.1.3 + digit_data_model: ^1.0.1 + collection: ^1.18.0 + dio: ^5.4.3+1 + location: ^6.0.2 + gs1_barcode_parser: ^1.0.5 + uuid: ^4.4.0 fluttertoast: ^8.1.2 overlay_builder: ^1.1.0 - intl: ^0.18.0 - flutter_svg: ^2.0.8 - dart_mappable: ^4.2.0 - drift: ^2.0.0 sqlite3_flutter_libs: ^0.5.10 path_provider: ^2.0.11 path: ^1.8.2 drift_db_viewer: ^2.0.0 - uuid: ^3.0.6 recase: ^4.1.0 - pluto_grid: ^7.0.1 - digit_scanner: ^1.0.1 - gs1_barcode_parser: ^1.0.5 - auto_route: ^7.8.4 - digit_data_model: ^1.0.1 - collection: ^1.16.0 + pluto_grid: ^8.0.0 + digit_scanner: ^1.0.0+1 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^3.0.1 - dart_code_metrics: ^5.7.6 + flutter_lints: ^4.0.0 freezed: ^2.1.0+1 json_serializable: ^6.4.0 drift_dev: ^2.14.1 bloc_test: ^9.1.0 + build_runner: ^2.4.11 mocktail: ^1.0.2 dart_mappable_builder: ^4.2.0 - auto_route_generator: ^7.3.2 + auto_route_generator: ^8.0.0 flutter: assets: diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index af9446590..246c709de 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -412,7 +412,7 @@ packages: path: "../digit_scanner" relative: true source: path - version: "1.0.0+1" + version: "1.0.1" dio: dependency: "direct main" description: @@ -507,7 +507,7 @@ packages: source: hosted version: "2.0.0" flutter_keyboard_visibility: - dependency: transitive + dependency: "direct main" description: name: flutter_keyboard_visibility sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" diff --git a/packages/referral_reconciliation/pubspec.yaml b/packages/referral_reconciliation/pubspec.yaml index ad86353bb..666360ba1 100644 --- a/packages/referral_reconciliation/pubspec.yaml +++ b/packages/referral_reconciliation/pubspec.yaml @@ -12,43 +12,45 @@ dependencies: flutter: sdk: flutter digit_components: ^1.0.0+1 - flutter_bloc: ^8.1.1 - freezed_annotation: ^2.1.0 - reactive_forms: ^14.1.0 + flutter_bloc: ^8.1.5 + freezed_annotation: ^2.4.1 + reactive_forms: ^17.0.0 + intl: ^0.19.0 + flutter_svg: ^2.0.10+1 + dart_mappable: ^4.2.2 + drift: ^2.18.0 + auto_route: ^8.1.3 + digit_data_model: ^1.0.1 + collection: ^1.18.0 + dio: ^5.4.3+1 + location: ^6.0.2 + uuid: ^4.4.0 + recase: ^4.1.0 + pluto_grid: ^8.0.0 + digit_scanner: ^1.0.0+1 + build_runner: ^2.2.1 fluttertoast: ^8.1.2 overlay_builder: ^1.1.0 - intl: ^0.18.0 - flutter_svg: ^2.0.8 - dart_mappable: ^4.2.0 - drift: ^2.0.0 sqlite3_flutter_libs: ^0.5.10 path_provider: ^2.0.11 path: ^1.8.2 drift_db_viewer: ^2.0.0 - uuid: ^3.0.6 - recase: ^4.1.0 - pluto_grid: ^7.0.1 - digit_scanner: ^1.0.1 group_radio_button: ^1.3.0 flutter_keyboard_visibility: ^5.4.0 - auto_route: ^7.8.4 - collection: ^1.16.0 - digit_data_model: ^1.0.1 stream_transform: ^2.1.0 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^3.0.1 - dart_code_metrics: ^5.7.6 + flutter_lints: ^4.0.0 freezed: ^2.1.0+1 - build_runner: ^2.4.7 + build_runner: ^2.4.11 json_serializable: ^6.4.0 drift_dev: ^2.14.1 bloc_test: ^9.1.0 mocktail: ^1.0.2 dart_mappable_builder: ^4.2.0 - auto_route_generator: ^7.3.2 + auto_route_generator: ^8.0.0 flutter: assets: diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 073177d82..18520d2a5 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -61,74 +61,74 @@ packages: dependency: transitive description: name: audioplayers - sha256: c05c6147124cd63e725e861335a8b4d57300b80e6e92cea7c145c739223bbaef + sha256: "752039d6aa752597c98ec212e9759519061759e402e7da59a511f39d43aa07d2" url: "https://pub.dev" source: hosted - version: "5.2.1" + version: "6.0.0" audioplayers_android: dependency: transitive description: name: audioplayers_android - sha256: b00e1a0e11365d88576320ec2d8c192bc21f1afb6c0e5995d1c57ae63156acb5 + sha256: de576b890befe27175c2f511ba8b742bec83765fa97c3ce4282bba46212f58e4 url: "https://pub.dev" source: hosted - version: "4.0.3" + version: "5.0.0" audioplayers_darwin: dependency: transitive description: name: audioplayers_darwin - sha256: "3034e99a6df8d101da0f5082dcca0a2a99db62ab1d4ddb3277bed3f6f81afe08" + sha256: e507887f3ff18d8e5a10a668d7bedc28206b12e10b98347797257c6ae1019c3b url: "https://pub.dev" source: hosted - version: "5.0.2" + version: "6.0.0" audioplayers_linux: dependency: transitive description: name: audioplayers_linux - sha256: "60787e73fefc4d2e0b9c02c69885402177e818e4e27ef087074cf27c02246c9e" + sha256: "3d3d244c90436115417f170426ce768856d8fe4dfc5ed66a049d2890acfa82f9" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "4.0.0" audioplayers_platform_interface: dependency: transitive description: name: audioplayers_platform_interface - sha256: "365c547f1bb9e77d94dd1687903a668d8f7ac3409e48e6e6a3668a1ac2982adb" + sha256: "6834dd48dfb7bc6c2404998ebdd161f79cd3774a7e6779e1348d54a3bfdcfaa5" url: "https://pub.dev" source: hosted - version: "6.1.0" + version: "7.0.0" audioplayers_web: dependency: transitive description: name: audioplayers_web - sha256: "22cd0173e54d92bd9b2c80b1204eb1eb159ece87475ab58c9788a70ec43c2a62" + sha256: db8fc420dadf80da18e2286c18e746fb4c3b2c5adbf0c963299dde046828886d url: "https://pub.dev" source: hosted - version: "4.1.0" + version: "5.0.0" audioplayers_windows: dependency: transitive description: name: audioplayers_windows - sha256: "9536812c9103563644ada2ef45ae523806b0745f7a78e89d1b5fb1951de90e1a" + sha256: "8605762dddba992138d476f6a0c3afd9df30ac5b96039929063eceed416795c2" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "4.0.0" auto_route: dependency: "direct main" description: name: auto_route - sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 + sha256: "6cad3f408863ffff2b5757967c802b18415dac4acb1b40c5cdd45d0a26e5080f" url: "https://pub.dev" source: hosted - version: "7.9.2" + version: "8.1.3" auto_route_generator: dependency: "direct dev" description: name: auto_route_generator - sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" + sha256: ba28133d3a3bf0a66772bcc98dade5843753cd9f1a8fb4802b842895515b67d3 url: "https://pub.dev" source: hosted - version: "7.3.2" + version: "8.0.0" bloc: dependency: transitive description: @@ -189,10 +189,10 @@ packages: dependency: "direct main" description: name: build_runner - sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" url: "https://pub.dev" source: hosted - version: "2.4.9" + version: "2.4.11" build_runner_core: dependency: transitive description: @@ -221,26 +221,26 @@ packages: dependency: transitive description: name: camera - sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" + sha256: "2170a943dcb67be2af2c6bcda8775e74b41d4c02d6a4eb10bdc832ee185c4eea" url: "https://pub.dev" source: hosted - version: "0.10.5+9" - camera_android: + version: "0.11.0+1" + camera_android_camerax: dependency: transitive description: - name: camera_android - sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 + name: camera_android_camerax + sha256: "7d84815edbb8304b51c10deba3c20f44eef80aa46ff156ec45428ed16600b49a" url: "https://pub.dev" source: hosted - version: "0.10.9+2" + version: "0.6.5+5" camera_avfoundation: dependency: transitive description: name: camera_avfoundation - sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" + sha256: "7d021e8cd30d9b71b8b92b4ad669e80af432d722d18d6aac338572754a786c15" url: "https://pub.dev" source: hosted - version: "0.9.13+10" + version: "0.9.16" camera_platform_interface: dependency: transitive description: @@ -333,10 +333,10 @@ packages: dependency: transitive description: name: cross_file - sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e + sha256: "55d7b444feb71301ef6b8838dbc1ae02e63dd48c8773f3810ff53bb1e2945b32" url: "https://pub.dev" source: hosted - version: "0.3.3+8" + version: "0.3.4+1" crypto: dependency: transitive description: @@ -345,14 +345,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" - csslib: - dependency: transitive - description: - name: csslib - sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" - url: "https://pub.dev" - source: hosted - version: "1.0.0" cupertino_icons: dependency: transitive description: @@ -361,22 +353,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_code_metrics: - dependency: "direct dev" - description: - name: dart_code_metrics - sha256: "3dede3f7abc077a4181ec7445448a289a9ce08e2981e6a4d49a3fb5099d47e1f" - url: "https://pub.dev" - source: hosted - version: "5.7.6" - dart_code_metrics_presets: - dependency: transitive - description: - name: dart_code_metrics_presets - sha256: b71eadf02a3787ebd5c887623f83f6fdc204d45c75a081bd636c4104b3fd8b73 - url: "https://pub.dev" - source: hosted - version: "1.8.0" dart_mappable: dependency: "direct main" description: @@ -419,37 +395,33 @@ packages: digit_components: dependency: "direct main" description: - name: digit_components - sha256: "31c9c45bdbad9fb4c3ed5ce1c2f95c983eaea4967ed0dcf9c36e467a77a97008" - url: "https://pub.dev" - source: hosted + path: "../digit_components" + relative: true + source: path version: "1.0.0+1" digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "2d033990f03f7a0ea651e08c37933b4ed5ea76bf3a6a2ac3ff652c2286d04912" - url: "https://pub.dev" - source: hosted + path: "../digit_data_model" + relative: true + source: path version: "1.0.1" digit_scanner: dependency: "direct main" description: - name: digit_scanner - sha256: abd9dcc5c2d39d7d81277a3437262e2ebc6a3c4a3862a51844c8ebf29a795f22 - url: "https://pub.dev" - source: hosted + path: "../digit_scanner" + relative: true + source: path version: "1.0.1" digit_showcase: dependency: "direct main" description: - name: digit_showcase - sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" - url: "https://pub.dev" - source: hosted + path: "../digit_showcase" + relative: true + source: path version: "1.0.0" dio: - dependency: transitive + dependency: "direct main" description: name: dio sha256: "11e40df547d418cc0c4900a9318b26304e665da6fa4755399a9ff9efd09034b5" @@ -460,10 +432,10 @@ packages: dependency: "direct main" description: name: drift - sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + sha256: "6acedc562ffeed308049f78fb1906abad3d65714580b6745441ee6d50ec564cd" url: "https://pub.dev" source: hosted - version: "2.15.0" + version: "2.18.0" drift_db_viewer: dependency: "direct main" description: @@ -476,18 +448,18 @@ packages: dependency: "direct dev" description: name: drift_dev - sha256: c037d9431b6f8dc633652b1469e5f53aaec6e4eb405ed29dd232fa888ef10d88 + sha256: d9b020736ea85fff1568699ce18b89fabb3f0f042e8a7a05e84a3ec20d39acde url: "https://pub.dev" source: hosted - version: "2.15.0" + version: "2.18.0" easy_stepper: dependency: transitive description: name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + sha256: d09e974ec9148480072f8a7d3b0779dfdbc1a3ec1ff7daa7fbda95b0c1fe7453 url: "https://pub.dev" source: hosted - version: "0.5.2+1" + version: "0.8.5" fake_async: dependency: transitive description: @@ -593,10 +565,15 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" + sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "4.0.0" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -617,10 +594,10 @@ packages: dependency: "direct main" description: name: flutter_svg - sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c + sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" url: "https://pub.dev" source: hosted - version: "2.0.9" + version: "2.0.10+1" flutter_test: dependency: "direct dev" description: flutter @@ -643,10 +620,10 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" + sha256: "7eae679e596a44fdf761853a706f74979f8dd3cd92cf4e23cae161fda091b847" url: "https://pub.dev" source: hosted - version: "8.2.5" + version: "8.2.6" formula_parser: dependency: "direct main" description: @@ -691,26 +668,26 @@ packages: dependency: transitive description: name: google_fonts - sha256: "6b6f10f0ce3c42f6552d1c70d2c28d764cf22bb487f50f66cca31dcd5194f4d6" + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 url: "https://pub.dev" source: hosted - version: "4.0.4" + version: "6.2.1" google_mlkit_barcode_scanning: dependency: transitive description: name: google_mlkit_barcode_scanning - sha256: "965183a8cd5cef8477ceea5dbdf29c34a739cf0cfbf1bdad54cd3f9f1807afe5" + sha256: f1a2a39cf1730b9a5e2784a07efa1ca5bfdfdde6aa00b193b3f8cd1953c638ec url: "https://pub.dev" source: hosted - version: "0.10.0" + version: "0.12.0" google_mlkit_commons: dependency: transitive description: name: google_mlkit_commons - sha256: "046586b381cdd139f7f6a05ad6998f7e339d061bd70158249907358394b5f496" + sha256: "27d626c66a181351a953eba5b6ff1ff123aadb891b4dab085b292118f039d6ac" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.1" graphs: dependency: transitive description: @@ -735,22 +712,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.3.1" - html: - dependency: transitive - description: - name: html - sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" - url: "https://pub.dev" - source: hosted - version: "0.15.4" http: dependency: transitive description: name: http - sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" url: "https://pub.dev" source: hosted - version: "0.13.6" + version: "1.2.1" http_multi_server: dependency: transitive description: @@ -771,10 +740,10 @@ packages: dependency: "direct main" description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" io: dependency: transitive description: @@ -823,38 +792,62 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: name: lints - sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "4.0.0" location: - dependency: transitive + dependency: "direct main" description: name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.0" location_web: dependency: transitive description: name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + sha256: "15ad7b4c8a9f55abee513373755e093a40c04d7e24fc1b4f89676fe99523d034" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "5.0.1" logging: dependency: transitive description: @@ -867,34 +860,34 @@ packages: dependency: transitive description: name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + sha256: "6a24ade5d3d918c306bb1c21a6b9a04aab0489d51a2582522eea820b4093b62b" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "3.1.2" matcher: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -947,26 +940,26 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + sha256: b93d8b4d624b4ea19b0a5a208b2d6eff06004bc3ce74c06040b120eeadd00ce0 url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "8.0.0" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + sha256: f49918f3433a3146047372f9d4f1f847511f2acd5cd030e1f44fe5a50036b70e url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.0" path: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_parsing: dependency: transitive description: @@ -1051,10 +1044,10 @@ packages: dependency: "direct main" description: name: pluto_grid - sha256: e77c34a33dd9d74abbe20ba1df96474dded150dd042c7f7495be1bc2c26bd37f + sha256: "1d4cd9d2652742b556aa9b3230cc64672a3f63c34a9acc80fef794ab36ad903b" url: "https://pub.dev" source: hosted - version: "7.0.2" + version: "8.0.0" pointer_interceptor: dependency: transitive description: @@ -1071,14 +1064,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.1" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" provider: dependency: transitive description: @@ -1095,14 +1080,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - pub_updater: - dependency: transitive - description: - name: pub_updater - sha256: "05ae70703e06f7fdeb05f7f02dd680b8aad810e87c756a618f33e1794635115c" - url: "https://pub.dev" - source: hosted - version: "0.3.0" pubspec_parse: dependency: transitive description: @@ -1115,18 +1092,18 @@ packages: dependency: transitive description: name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 + sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a url: "https://pub.dev" source: hosted - version: "0.8.1" + version: "2.1.1" reactive_forms: dependency: "direct main" description: name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "17.0.1" recase: dependency: "direct main" description: @@ -1228,6 +1205,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqlite3: dependency: transitive description: @@ -1240,18 +1225,18 @@ packages: dependency: "direct main" description: name: sqlite3_flutter_libs - sha256: fb2a106a2ea6042fe57de2c47074cc31539a941819c91e105b864744605da3f5 + sha256: "9f89a7e7dc36eac2035808427eba1c3fbd79e59c3a22093d8dace6d36b1fe89e" url: "https://pub.dev" source: hosted - version: "0.5.21" + version: "0.5.23" sqlparser: dependency: transitive description: name: sqlparser - sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" + sha256: ade9a67fd70d0369329ed3373208de7ebd8662470e8c396fc8d0d60f9acdfc9f url: "https://pub.dev" source: hosted - version: "0.34.1" + version: "0.36.0" stack_trace: dependency: transitive description: @@ -1304,26 +1289,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" timing: dependency: transitive description: @@ -1352,34 +1337,34 @@ packages: dependency: "direct main" description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8" url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.4.0" vector_graphics: dependency: transitive description: name: vector_graphics - sha256: "4ac59808bbfca6da38c99f415ff2d3a5d7ca0a6b4809c71d9cf30fba5daf9752" + sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: f3247e7ab0ec77dc759263e68394990edc608fb2b480b80db8aa86ed09279e33 + sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "18489bdd8850de3dd7ca8a34e0c446f719ec63e2bab2e7a8cc66a9028dd76c5a" + sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_math: dependency: transitive description: @@ -1392,10 +1377,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1408,10 +1393,10 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.5.1" web_socket_channel: dependency: transitive description: @@ -1461,5 +1446,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.22.0" diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index b364d7ba2..f2d500772 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -11,31 +11,33 @@ environment: dependencies: flutter: sdk: flutter + flutter_bloc: ^8.1.5 + freezed_annotation: ^2.4.1 + reactive_forms: ^17.0.0 + intl: ^0.19.0 + flutter_svg: ^2.0.10+1 + dart_mappable: ^4.2.2 + drift: ^2.18.0 + auto_route: ^8.1.3 + digit_data_model: ^1.0.1 + collection: ^1.18.0 + dio: ^5.4.3+1 + location: ^6.0.2 + gs1_barcode_parser: ^1.0.5 + uuid: ^4.4.0 + recase: ^4.1.0 + pluto_grid: ^8.0.0 + digit_scanner: ^1.0.0+1 digit_components: ^1.0.0+1 - flutter_bloc: ^8.1.1 - freezed_annotation: ^2.1.0 build_runner: ^2.2.1 - reactive_forms: ^14.1.0 fluttertoast: ^8.1.2 overlay_builder: ^1.1.0 - intl: ^0.18.0 - flutter_svg: ^2.0.8 - dart_mappable: ^4.2.0 - drift: ^2.0.0 sqlite3_flutter_libs: ^0.5.10 path_provider: ^2.0.11 path: ^1.8.2 drift_db_viewer: ^2.0.0 - uuid: ^3.0.6 - recase: ^4.1.0 - pluto_grid: ^7.0.1 - digit_scanner: ^1.0.0+1 - gs1_barcode_parser: ^1.0.5 - auto_route: ^7.8.4 - digit_data_model: ^1.0.1 - package_info_plus: ^5.0.1 + package_info_plus: ^8.0.0 digit_showcase: ^1.0.0 - collection: ^1.16.0 flutter_keyboard_visibility: ^5.4.0 stream_transform: ^2.1.0 async: ^2.11.0 @@ -45,15 +47,15 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^3.0.1 - dart_code_metrics: ^5.7.6 + flutter_lints: ^4.0.0 freezed: ^2.1.0+1 json_serializable: ^6.4.0 drift_dev: ^2.14.1 bloc_test: ^9.1.0 mocktail: ^1.0.2 + build_runner: ^2.4.11 dart_mappable_builder: ^4.2.0 - auto_route_generator: ^7.3.2 + auto_route_generator: ^8.0.0 flutter: assets: diff --git a/packages/sync_service/.gitignore b/packages/sync_service/.gitignore new file mode 100644 index 000000000..ac5aa9893 --- /dev/null +++ b/packages/sync_service/.gitignore @@ -0,0 +1,29 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. +/pubspec.lock +**/doc/api/ +.dart_tool/ +build/ diff --git a/packages/sync_service/.metadata b/packages/sync_service/.metadata new file mode 100644 index 000000000..d36dfbcc1 --- /dev/null +++ b/packages/sync_service/.metadata @@ -0,0 +1,10 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "a14f74ff3a1cbd521163c5f03d68113d50af93d3" + channel: "stable" + +project_type: package diff --git a/packages/sync_service/CHANGELOG.md b/packages/sync_service/CHANGELOG.md new file mode 100644 index 000000000..41cc7d819 --- /dev/null +++ b/packages/sync_service/CHANGELOG.md @@ -0,0 +1,3 @@ +## 0.0.1 + +* TODO: Describe initial release. diff --git a/packages/sync_service/LICENSE b/packages/sync_service/LICENSE new file mode 100644 index 000000000..ba75c69f7 --- /dev/null +++ b/packages/sync_service/LICENSE @@ -0,0 +1 @@ +TODO: Add your license here. diff --git a/packages/sync_service/README.md b/packages/sync_service/README.md new file mode 100644 index 000000000..02fe8ecab --- /dev/null +++ b/packages/sync_service/README.md @@ -0,0 +1,39 @@ + + +TODO: Put a short description of the package here that helps potential users +know whether this package might be useful for them. + +## Features + +TODO: List what your package can do. Maybe include images, gifs, or videos. + +## Getting started + +TODO: List prerequisites and provide or point to information on how to +start using the package. + +## Usage + +TODO: Include short and useful examples for package users. Add longer examples +to `/example` folder. + +```dart +const like = 'sample'; +``` + +## Additional information + +TODO: Tell users more about the package: where to find more information, how to +contribute to the package, how to file issues, what response they can expect +from the package authors, and more. diff --git a/packages/sync_service/analysis_options.yaml b/packages/sync_service/analysis_options.yaml new file mode 100644 index 000000000..a5744c1cf --- /dev/null +++ b/packages/sync_service/analysis_options.yaml @@ -0,0 +1,4 @@ +include: package:flutter_lints/flutter.yaml + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/packages/sync_service/build.yaml b/packages/sync_service/build.yaml new file mode 100644 index 000000000..05310222d --- /dev/null +++ b/packages/sync_service/build.yaml @@ -0,0 +1,5 @@ +targets: + $default: + builders: + dart_mappable_builder: + generate_for: \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/lib/blocs/sync/sync.dart b/packages/sync_service/lib/blocs/sync/sync.dart similarity index 88% rename from apps/health_campaign_field_worker_app/lib/blocs/sync/sync.dart rename to packages/sync_service/lib/blocs/sync/sync.dart index fccc5cf44..f54b7adda 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/sync/sync.dart +++ b/packages/sync_service/lib/blocs/sync/sync.dart @@ -5,10 +5,10 @@ import 'package:digit_data_model/data_model.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:isar/isar.dart'; +import 'package:sync_service/utils/utils.dart'; -import '../../data/network_manager.dart'; +import '../../data/sync_service.dart'; import '../../models/bandwidth/bandwidth_model.dart'; -import '../../utils/utils.dart'; part 'sync.freezed.dart'; @@ -16,11 +16,11 @@ typedef SyncEmitter = Emitter; class SyncBloc extends Bloc { final Isar isar; - final NetworkManager networkManager; + final SyncService syncService; SyncBloc({ required this.isar, - required this.networkManager, + required this.syncService, }) : super(const SyncPendingState()) { on(_handleRefresh); on(_handleSyncUp); @@ -38,17 +38,18 @@ class SyncBloc extends Bloc { int? length = event.count; emit(const SyncState.loading()); try { - length ??= getSyncCount(await isar.opLogs + length ??= (SyncServiceSingleton().entityMapper!.getSyncCount(await isar + .opLogs .filter() .createdByEqualTo(event.createdBy) .syncedUpEqualTo(false) .findAll()) + - getSyncCount(await isar.opLogs + SyncServiceSingleton().entityMapper!.getSyncCount(await isar.opLogs .filter() .createdByEqualTo(event.createdBy) .syncedUpEqualTo(true) .syncedDownEqualTo(false) - .findAll()); + .findAll())); } catch (_) { rethrow; } finally { @@ -66,7 +67,7 @@ class SyncBloc extends Bloc { 'batchSize': 5, }); emit(const SyncInProgressState()); - await networkManager.performSync( + await syncService.performSync( localRepositories: event.localRepositories, remoteRepositories: event.remoteRepositories, bandwidthModel: bandwidthModel, diff --git a/apps/health_campaign_field_worker_app/lib/blocs/sync/sync.freezed.dart b/packages/sync_service/lib/blocs/sync/sync.freezed.dart similarity index 100% rename from apps/health_campaign_field_worker_app/lib/blocs/sync/sync.freezed.dart rename to packages/sync_service/lib/blocs/sync/sync.freezed.dart diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/sync/remote_type.dart b/packages/sync_service/lib/data/repositories/sync/remote_type.dart similarity index 84% rename from apps/health_campaign_field_worker_app/lib/data/repositories/sync/remote_type.dart rename to packages/sync_service/lib/data/repositories/sync/remote_type.dart index c1217f919..35a068e99 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/sync/remote_type.dart +++ b/packages/sync_service/lib/data/repositories/sync/remote_type.dart @@ -13,7 +13,7 @@ class RepositoryType { if (repository == null) { throw Exception( - 'Remote repository is not configured in the network manager', + 'Remote repository is not passed to sync service', ); } @@ -30,7 +30,7 @@ class RepositoryType { if (repository == null) { throw Exception( - 'Local repository is not configured in the network manager', + 'Local repository is not passed to sync service', ); } diff --git a/packages/sync_service/lib/data/repositories/sync/sync_down.dart b/packages/sync_service/lib/data/repositories/sync/sync_down.dart new file mode 100644 index 000000000..dde22729a --- /dev/null +++ b/packages/sync_service/lib/data/repositories/sync/sync_down.dart @@ -0,0 +1,80 @@ +import 'dart:async'; + +import 'package:collection/collection.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:sync_service/utils/utils.dart'; + +import '../../../models/bandwidth/bandwidth_model.dart'; +import '../../sync_service.dart'; +import 'remote_type.dart'; + +class PerformSyncDown { + static FutureOr syncDown({ + required BandwidthModel bandwidthModel, + required List localRepositories, + required List remoteRepositories, + required PersistenceConfiguration configuration, + }) async { + if (configuration == PersistenceConfiguration.onlineOnly) { + throw Exception('Sync down is not valid for online only configuration'); + } + + final futures = await Future.wait( + localRepositories + .map((e) => e.getItemsToBeSyncedDown(bandwidthModel.userId)), + ); + + final pendingSyncEntries = futures.expand((e) => e).toList(); + pendingSyncEntries.sort((a, b) => a.createdAt.compareTo(b.createdAt)); + + final groupedEntries = pendingSyncEntries + .where((element) => element.type != DataModelType.service) + .toList() + .groupListsBy( + (element) => element.type, + ); + + for (final typeGroupedEntity in groupedEntries.entries) { + final groupedOperations = typeGroupedEntity.value.groupListsBy( + (element) => element.operation, + ); + + final remote = RepositoryType.getRemoteForType( + typeGroupedEntity.key, + remoteRepositories, + ); + + final local = RepositoryType.getLocalForType( + typeGroupedEntity.key, + localRepositories, + ); + + for (final operationGroupedEntity in groupedOperations.entries) { + final entities = operationGroupedEntity.value.map((e) { + final serverGeneratedId = e.serverGeneratedId; + final rowVersion = e.rowVersion; + if (serverGeneratedId != null && !e.nonRecoverableError) { + return local.opLogManager.applyServerGeneratedIdToEntity( + e.entity, + serverGeneratedId, + rowVersion, + ); + } + + return e.entity; + }).toList(); + + List? responseEntities = []; + + responseEntities = await SyncServiceSingleton() + .entityMapper + ?.entityResponse(typeGroupedEntity, operationGroupedEntity, + entities, remote, local); + + for (var element in responseEntities!) { + await local.update(element, createOpLog: false); + } + } + } + } +} diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/sync/sync_up.dart b/packages/sync_service/lib/data/repositories/sync/sync_up.dart similarity index 77% rename from apps/health_campaign_field_worker_app/lib/data/repositories/sync/sync_up.dart rename to packages/sync_service/lib/data/repositories/sync/sync_up.dart index 1d2180f8c..35111327e 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/sync/sync_up.dart +++ b/packages/sync_service/lib/data/repositories/sync/sync_up.dart @@ -3,11 +3,9 @@ import 'dart:async'; import 'package:collection/collection.dart'; import 'package:digit_components/utils/app_logger.dart'; import 'package:digit_data_model/data_model.dart'; -import 'package:registration_delivery/models/entities/household.dart'; -import 'package:registration_delivery/models/entities/task.dart'; +import 'package:sync_service/utils/utils.dart'; import '../../../models/bandwidth/bandwidth_model.dart'; -import '../../../utils/environment_config.dart'; import 'remote_type.dart'; class PerformSyncUp { @@ -16,11 +14,6 @@ class PerformSyncUp { required List localRepositories, required List remoteRepositories, }) async { - const taskResourceIdKey = 'taskResourceId'; - const individualIdentifierIdKey = 'individualIdentifierId'; - const householdAddressIdKey = 'householdAddressId'; - const individualAddressIdKey = 'individualAddressId'; - List getEntityModel( List> opLogList, LocalRepository local, @@ -32,74 +25,16 @@ class PerformSyncUp { final serverGeneratedId = e.serverGeneratedId; final rowVersion = e.rowVersion; if (serverGeneratedId != null) { - var updatedEntity = + EntityModel? updatedEntity = local.opLogManager.applyServerGeneratedIdToEntity( oplogEntryEntity, serverGeneratedId, rowVersion, ); - if (updatedEntity is HouseholdModel) { - final addressId = e.additionalIds.firstWhereOrNull( - (element) { - return element.idType == householdAddressIdKey; - }, - )?.id; - - updatedEntity = updatedEntity.copyWith( - address: updatedEntity.address?.copyWith( - id: updatedEntity.address?.id ?? addressId, - ), - ); - } - - if (updatedEntity is IndividualModel) { - final identifierId = e.additionalIds.firstWhereOrNull( - (element) { - return element.idType == individualIdentifierIdKey; - }, - )?.id; - - final addressId = e.additionalIds.firstWhereOrNull( - (element) { - return element.idType == individualAddressIdKey; - }, - )?.id; - - updatedEntity = updatedEntity.copyWith( - identifiers: updatedEntity.identifiers?.map((e) { - return e.copyWith( - id: e.id ?? identifierId, - ); - }).toList(), - address: updatedEntity.address?.map((e) { - return e.copyWith( - id: e.id ?? addressId, - ); - }).toList(), - ); - } - - if (updatedEntity is TaskModel) { - final resourceId = e.additionalIds - .firstWhereOrNull( - (element) => element.idType == taskResourceIdKey, - ) - ?.id; - - updatedEntity = updatedEntity.copyWith( - resources: updatedEntity.resources?.map((e) { - if (resourceId != null) { - return e.copyWith( - taskId: serverGeneratedId, - id: e.id ?? resourceId, - ); - } - - return e.copyWith(taskId: serverGeneratedId); - }).toList(), - ); - } + updatedEntity = SyncServiceSingleton() + .entityMapper + ?.updatedEntity(updatedEntity, e, serverGeneratedId); return updatedEntity; } @@ -154,12 +89,12 @@ class PerformSyncUp { .where((element) => element.nonRecoverableError) .toList(); - // [returns list of oplogs whose nonRecoverableError is false and retry count is equal to configured value] + // [returns list of opLogs whose nonRecoverableError is false and retry count is equal to configured value] final nonRecoverableErrorList = operationGroupedEntity.value .where((element) => !element.nonRecoverableError && element.syncDownRetryCount >= - envConfig.variables.syncDownRetryCount) + SyncServiceSingleton().syncDownRetryCount) .toList(); final List>> listOfBatchedOpLogList = diff --git a/packages/sync_service/lib/data/sync_entity_mapper_listener.dart b/packages/sync_service/lib/data/sync_entity_mapper_listener.dart new file mode 100644 index 000000000..4e8fbab50 --- /dev/null +++ b/packages/sync_service/lib/data/sync_entity_mapper_listener.dart @@ -0,0 +1,23 @@ +import 'dart:async'; + +import 'package:digit_data_model/data_model.dart'; + +abstract class SyncEntityMapperListener { + FutureOr writeToEntityDB( + Map response, + List localRepositories, + ); + + int getSyncCount(List opLogs); + + Future> entityResponse( + MapEntry>> typeGroupedEntity, + MapEntry>> + operationGroupedEntity, + List entities, + RemoteRepository remote, + LocalRepository local); + + EntityModel updatedEntity( + EntityModel entity, OpLogEntry e, String? serverGeneratedId); +} diff --git a/packages/sync_service/lib/data/sync_service.dart b/packages/sync_service/lib/data/sync_service.dart new file mode 100644 index 000000000..ff7b37ca5 --- /dev/null +++ b/packages/sync_service/lib/data/sync_service.dart @@ -0,0 +1,151 @@ +import 'dart:async'; + +import 'package:digit_data_model/data_model.dart'; +import 'package:flutter_background_service/flutter_background_service.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:sync_service/data/repositories/sync/sync_down.dart'; +import 'package:sync_service/data/repositories/sync/sync_up.dart'; +import 'package:sync_service/utils/utils.dart'; + +import '../models/bandwidth/bandwidth_model.dart'; + +class SyncService { +/* This function will read the params and get the records which are not synced + and pushes to the sync-up and sync-down methods */ + + FutureOr performSync({ + required List localRepositories, + required List remoteRepositories, + required BandwidthModel bandwidthModel, + ServiceInstance? service, + }) async { + final configuration = SyncServiceSingleton().persistenceConfiguration; + + if (configuration == PersistenceConfiguration.onlineOnly) { + throw Exception('Sync up is not valid for online only configuration'); + } + bool isSyncCompleted = false; + + final futuresSyncDown = await Future.wait( + localRepositories + .map((e) => e.getItemsToBeSyncedDown(bandwidthModel.userId)), + ); + final pendingSyncDownEntries = futuresSyncDown.expand((e) => e).toList(); + + final futuresSyncUp = await Future.wait( + localRepositories + .map((e) => e.getItemsToBeSyncedUp(bandwidthModel.userId)), + ); + final pendingSyncUpEntries = futuresSyncUp.expand((e) => e).toList(); + + SyncError? syncError; + +// Perform the sync Down Operation + + try { + await PerformSyncDown.syncDown( + bandwidthModel: bandwidthModel, + localRepositories: localRepositories.toSet().toList(), + remoteRepositories: remoteRepositories.toSet().toList(), + configuration: configuration!, + ); + } catch (e) { + syncError = SyncDownError(e); + service?.stopSelf(); + } + +// Perform the sync up Operation + + try { + await PerformSyncUp.syncUp( + bandwidthModel: bandwidthModel, + localRepositories: localRepositories.toSet().toList(), + remoteRepositories: remoteRepositories.toSet().toList(), + ); + } catch (e) { + syncError ??= SyncUpError(e); + service?.stopSelf(); + } + + if (syncError != null) throw syncError; + + // Recursive function which will call the Perform Sync + + if (pendingSyncUpEntries.isNotEmpty || pendingSyncDownEntries.isNotEmpty) { + await Future.delayed(const Duration(seconds: 3)); + isSyncCompleted = await performSync( + bandwidthModel: bandwidthModel, + localRepositories: localRepositories, + remoteRepositories: remoteRepositories, + ); + } else if (pendingSyncUpEntries.isEmpty && pendingSyncDownEntries.isEmpty) { + await const FlutterSecureStorage() + .write(key: 'manualSyncKey', value: false.toString()); + isSyncCompleted = true; + } + + return isSyncCompleted; + } + + FutureOr writeToEntityDB( + Map response, + List localRepositories, + ) async { + SyncServiceSingleton().entityMapper?.writeToEntityDB( + response, + localRepositories, + ); + } + + FutureOr getPendingSyncRecordsCount( + List localRepositories, + String userId, + ) async => + (await Future.wait(localRepositories.map((e) { + return e.getItemsToBeSyncedUp(userId); + }))) + .expand((element) => element) + .length; +} + +FutureOr> filterEntityByBandwidth( + int batchSize, + List entities, +) async { + final List items = []; + final int size = batchSize < entities.length ? batchSize : entities.length; + + for (var i = 0; i < size; i++) { + items.add(entities[i]); + } + + return items; +} + +Future>> filterOpLogByBandwidth( + int batchSize, + List> entities, +) async { + final List> items = []; + final int size = batchSize < entities.length ? batchSize : entities.length; + + for (var i = 0; i < size; i++) { + items.add(entities[i]); + } + + return items; +} + +abstract class SyncError implements Exception { + final dynamic error; + + const SyncError([this.error]); +} + +class SyncUpError extends SyncError { + const SyncUpError([super.error]); +} + +class SyncDownError extends SyncError { + const SyncDownError([super.error]); +} diff --git a/apps/health_campaign_field_worker_app/lib/models/bandwidth/bandwidth_model.dart b/packages/sync_service/lib/models/bandwidth/bandwidth_model.dart similarity index 90% rename from apps/health_campaign_field_worker_app/lib/models/bandwidth/bandwidth_model.dart rename to packages/sync_service/lib/models/bandwidth/bandwidth_model.dart index 7a1b455dd..ce37289f0 100644 --- a/apps/health_campaign_field_worker_app/lib/models/bandwidth/bandwidth_model.dart +++ b/packages/sync_service/lib/models/bandwidth/bandwidth_model.dart @@ -1,4 +1,3 @@ -import 'package:flutter/material.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; part 'bandwidth_model.freezed.dart'; diff --git a/apps/health_campaign_field_worker_app/lib/models/bandwidth/bandwidth_model.freezed.dart b/packages/sync_service/lib/models/bandwidth/bandwidth_model.freezed.dart similarity index 100% rename from apps/health_campaign_field_worker_app/lib/models/bandwidth/bandwidth_model.freezed.dart rename to packages/sync_service/lib/models/bandwidth/bandwidth_model.freezed.dart diff --git a/apps/health_campaign_field_worker_app/lib/models/bandwidth/bandwidth_model.g.dart b/packages/sync_service/lib/models/bandwidth/bandwidth_model.g.dart similarity index 100% rename from apps/health_campaign_field_worker_app/lib/models/bandwidth/bandwidth_model.g.dart rename to packages/sync_service/lib/models/bandwidth/bandwidth_model.g.dart diff --git a/packages/sync_service/lib/sync_service_lib.dart b/packages/sync_service/lib/sync_service_lib.dart new file mode 100644 index 000000000..af8e0319b --- /dev/null +++ b/packages/sync_service/lib/sync_service_lib.dart @@ -0,0 +1,10 @@ +library sync_service; + +export 'data/sync_entity_mapper_listener.dart'; +export 'data/sync_service.dart'; +export 'data/repositories/sync/remote_type.dart'; +export 'data/repositories/sync/sync_down.dart'; +export 'data/repositories/sync/sync_up.dart'; +export 'models/bandwidth/bandwidth_model.dart'; +export 'blocs/sync/sync.dart'; +export 'utils/utils.dart'; \ No newline at end of file diff --git a/packages/sync_service/lib/utils/utils.dart b/packages/sync_service/lib/utils/utils.dart new file mode 100644 index 000000000..fb686321c --- /dev/null +++ b/packages/sync_service/lib/utils/utils.dart @@ -0,0 +1,31 @@ +import 'package:digit_data_model/data_model.dart'; + +import '../data/sync_entity_mapper_listener.dart'; + +class SyncServiceSingleton { + static final SyncServiceSingleton _instance = + SyncServiceSingleton._internal(); + factory SyncServiceSingleton() => _instance; + SyncServiceSingleton._internal(); + static SyncServiceSingleton get instance => _instance; + + SyncEntityMapperListener? _entityListener; + late int _syncDownRetryCount = 0; + PersistenceConfiguration? _persistenceConfiguration = PersistenceConfiguration + .offlineFirst; // Default to offline first persistence configuration + + void setData({ + required int syncDownRetryCount, + required PersistenceConfiguration persistenceConfiguration, + required SyncEntityMapperListener entityMapper, + }) { + _syncDownRetryCount = syncDownRetryCount; + _persistenceConfiguration = persistenceConfiguration; + _entityListener = entityMapper; + } + + SyncEntityMapperListener? get entityMapper => _entityListener; + int get syncDownRetryCount => _syncDownRetryCount; + PersistenceConfiguration? get persistenceConfiguration => + _persistenceConfiguration; +} diff --git a/packages/sync_service/pubspec.yaml b/packages/sync_service/pubspec.yaml new file mode 100644 index 000000000..d4dc167ac --- /dev/null +++ b/packages/sync_service/pubspec.yaml @@ -0,0 +1,84 @@ +name: sync_service +description: "A new Flutter package project." +version: 0.0.1 +homepage: + +environment: + sdk: '>=3.4.1 <4.0.0' + flutter: ">=1.17.0" + +dependencies: + flutter: + sdk: flutter + flutter_bloc: ^8.1.5 + freezed_annotation: ^2.4.1 + dart_mappable: ^4.2.0 + drift: ^2.18.0 + sqlite3_flutter_libs: ^0.5.23 + path_provider: ^2.1.3 + path: ^1.9.0 + uuid: ^4.4.0 + recase: ^4.1.0 + isar: ^3.1.0+1 + isar_flutter_libs: ^3.1.0+1 + dio: ^5.4.3+1 + mocktail: ^1.0.3 + collection: ^1.18.0 + flutter_background_service: ^5.0.5 + provider: ^6.1.2 + flutter_secure_storage: ^9.2.2 + digit_data_model: ^1.0.1 + digit_components: ^1.0.1 + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^4.0.0 + freezed: ^2.1.0+1 + build_runner: ^2.4.11 + json_serializable: ^6.4.0 + drift_dev: ^2.18.0 + bloc_test: ^9.1.0 + dart_mappable_builder: + git: + url: https://github.com/egovernments/health-campaign-field-worker-app/ + ref: master + path: ./packages/dart_mappable_builder + isar_generator: ^3.0.5 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + + # To add assets to your package, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + # + # For details regarding assets in packages, see + # https://flutter.dev/assets-and-images/#from-packages + # + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware + + # To add custom fonts to your package, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts in packages, see + # https://flutter.dev/custom-fonts/#from-packages diff --git a/packages/sync_service/test/sync_service_test.dart b/packages/sync_service/test/sync_service_test.dart new file mode 100644 index 000000000..436611c68 --- /dev/null +++ b/packages/sync_service/test/sync_service_test.dart @@ -0,0 +1,7 @@ +import 'package:flutter_test/flutter_test.dart'; + +import 'package:sync_service/sync_service_lib.dart'; + +void main() { + +} From a48ecdfbe1ef9015d33e68f0568bffd3fd05613f Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Mon, 17 Jun 2024 13:13:00 +0530 Subject: [PATCH 027/241] documentation in sync package added subscription listener in boundary and reports from utils --- .../lib/pages/boundary_selection.dart | 25 +- .../lib/pages/home.dart | 153 ++-- .../beneficiary/beneficaries_report.dart | 660 +++++++++--------- .../lib/utils/background_service.dart | 3 +- .../lib/utils/extensions/context_utility.dart | 12 + .../lib/utils/extensions/extensions.dart | 3 + .../pubspec.yaml | 2 +- .../sync_service/lib/blocs/sync/sync.dart | 23 + .../data/repositories/sync/remote_type.dart | 14 +- .../lib/data/repositories/sync/sync_down.dart | 15 +- .../lib/data/repositories/sync/sync_up.dart | 18 +- .../lib/data/sync_entity_mapper_listener.dart | 21 + .../sync_service/lib/data/sync_service.dart | 35 +- .../lib/models/bandwidth/bandwidth_model.dart | 7 + packages/sync_service/lib/utils/utils.dart | 47 ++ tools/attendance_package_imports.dart | 55 +- tools/inventory_package_imports.dart | 48 +- tools/referral_reconciliation_imports.dart | 48 +- tools/registration_delivery_imports.dart | 51 +- 19 files changed, 712 insertions(+), 528 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart b/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart index 778d534e5..3591e9229 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart @@ -10,7 +10,6 @@ import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; -import 'package:sync_service/sync_service_lib.dart'; import '../blocs/app_initialization/app_initialization.dart'; import '../blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart'; @@ -38,21 +37,19 @@ class _BoundarySelectionPageState int i = 0; int pendingSyncCount = 0; final clickedStatus = ValueNotifier(false); - var expenseTypeCtrl = TextEditingController(); StreamController downloadProgress = StreamController(); Map dropdownControllers = {}; - SyncBloc? syncBloc; + late StreamSubscription syncSubscription; @override void initState() { - syncBloc = context.read(); - syncBloc!.add(SyncRefreshEvent(context.loggedInUserUuid)); + context.syncRefresh(); context.read().add( const DownSyncResetStateEvent(), ); super.initState(); - listenToSyncBloc(); + listenToSyncCount(); } @override @@ -66,6 +63,7 @@ class _BoundarySelectionPageState @override void dispose() { clickedStatus.dispose(); + syncSubscription.cancel(); super.dispose(); } @@ -623,16 +621,15 @@ class _BoundarySelectionPageState return false; } - void listenToSyncBloc() { - syncBloc!.stream.listen((state) { + void listenToSyncCount() async { + syncSubscription = context.syncCount().listen((state) { state.maybeWhen( - orElse: () {}, - pendingSync: (count) { - setState(() { - pendingSyncCount = count; + orElse: () {}, + pendingSync: (count) { + setState(() { + pendingSyncCount = count; + }); }); - }, - ); }); } } diff --git a/apps/health_campaign_field_worker_app/lib/pages/home.dart b/apps/health_campaign_field_worker_app/lib/pages/home.dart index 24021c2fa..72c5ae61b 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/home.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/home.dart @@ -61,9 +61,7 @@ class _HomePageState extends LocalizedState { .listen((List result) async { if (result.firstOrNull == ConnectivityResult.none) { if (context.mounted) { - context - .read() - .add(SyncRefreshEvent(context.loggedInUserUuid)); + context.syncRefresh(); } } }); @@ -150,6 +148,7 @@ class _HomePageState extends LocalizedState { ), children: [ const SizedBox(height: kPadding * 2), + // INFO : Need to add sync bloc of package Here BlocConsumer( listener: (context, state) { state.maybeWhen( @@ -297,6 +296,80 @@ class _HomePageState extends LocalizedState { ); } + void _attemptSyncUp(BuildContext context) async { + await LocalSecureStore.instance.setManualSyncTrigger(true); + + if (context.mounted) { + context.read().add( + SyncSyncUpEvent( + userId: context.loggedInUserUuid, + localRepositories: [ + // INFO : Need to add local repo of package Here + context.read< + LocalRepository>(), + context.read< + LocalRepository>(), + context.read< + LocalRepository>(), + context.read< + LocalRepository>(), + context.read>(), + context.read< + LocalRepository>(), + context.read< + LocalRepository>(), + context + .read>(), + context.read>(), + context.read< + LocalRepository>(), + context.read< + LocalRepository>(), + context.read< + LocalRepository>(), + context.read< + LocalRepository>(), + ], + remoteRepositories: [ + // INFO : Need to add repo repo of package Here + context.read< + RemoteRepository>(), + context.read< + RemoteRepository>(), + context.read< + RemoteRepository>(), + context.read< + RemoteRepository>(), + context.read>(), + context.read< + RemoteRepository>(), + context.read< + RemoteRepository>(), + context + .read>(), + context.read>(), + context.read< + RemoteRepository>(), + context.read< + RemoteRepository>(), + context.read< + RemoteRepository>(), + context.read< + RemoteRepository>(), + ], + ), + ); + } + } + _HomeItemDataModel? _getItems(BuildContext context) { final state = context.read().state; if (state is! AuthAuthenticatedState) { @@ -508,80 +581,6 @@ class _HomePageState extends LocalizedState { showcaseKeys, ); } - - void _attemptSyncUp(BuildContext context) async { - await LocalSecureStore.instance.setManualSyncTrigger(true); - - if (context.mounted) { - context.read().add( - SyncSyncUpEvent( - userId: context.loggedInUserUuid, - localRepositories: [ - // INFO : Need to add local repo of package Here - context.read< - LocalRepository>(), - context.read< - LocalRepository>(), - context.read< - LocalRepository>(), - context.read< - LocalRepository>(), - context.read>(), - context.read< - LocalRepository>(), - context.read< - LocalRepository>(), - context - .read>(), - context.read>(), - context.read< - LocalRepository>(), - context.read< - LocalRepository>(), - context.read< - LocalRepository>(), - context.read< - LocalRepository>(), - ], - remoteRepositories: [ - // INFO : Need to add repo repo of package Here - context.read< - RemoteRepository>(), - context.read< - RemoteRepository>(), - context.read< - RemoteRepository>(), - context.read< - RemoteRepository>(), - context.read>(), - context.read< - RemoteRepository>(), - context.read< - RemoteRepository>(), - context - .read>(), - context.read>(), - context.read< - RemoteRepository>(), - context.read< - RemoteRepository>(), - context.read< - RemoteRepository>(), - context.read< - RemoteRepository>(), - ], - ), - ); - } - } } // Function to set initial Data required for the packages to run diff --git a/apps/health_campaign_field_worker_app/lib/pages/reports/beneficiary/beneficaries_report.dart b/apps/health_campaign_field_worker_app/lib/pages/reports/beneficiary/beneficaries_report.dart index 550dc37b1..2b4d2a3b5 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/reports/beneficiary/beneficaries_report.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/reports/beneficiary/beneficaries_report.dart @@ -7,7 +7,6 @@ import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:sync_service/sync_service_lib.dart'; import '../../../blocs/app_initialization/app_initialization.dart'; import '../../../blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart'; @@ -34,27 +33,33 @@ class BeneficiariesReportState extends LocalizedState { int pendingSyncCount = 0; BoundaryModel? selectedBoundary; StreamController downloadProgress = StreamController(); + late StreamSubscription? syncSubscription; @override void initState() { - final syncBloc = context.read(); - syncBloc.add(SyncRefreshEvent(context.loggedInUserUuid)); - + context.syncRefresh(); final bloc = context.read(); bloc.add( const BeneficiaryDownSyncEvent.downSyncReport(), ); super.initState(); + listenToSyncCount(); } @override void deactivate() { context.read().add( - const DownSyncResetStateEvent(), - ); + const DownSyncResetStateEvent(), + ); super.deactivate(); } + @override + void dispose() { + syncSubscription?.cancel(); + super.dispose(); + } + @override Widget build(BuildContext context) { final theme = Theme.of(context); @@ -81,352 +86,333 @@ class BeneficiariesReportState extends LocalizedState { ), header: const BackNavigationHelpHeaderWidget(), children: [ - BlocListener( - listener: (ctx, syncState) { - setState(() { - pendingSyncCount = syncState.maybeWhen( - orElse: () => 0, - pendingSync: (count) => count, - ); - }); - }, - child: BlocListener( - listener: (ctx, state) { - state.maybeWhen( - orElse: () => false, - loading: (isPop) => { - if (isPop) - { - Navigator.of(context, rootNavigator: true) - .popUntil((route) => route is! PopupRoute), - }, - DigitSyncDialog.show( - context, - type: DigitSyncDialogType.inProgress, - label: 'Loading', - barrierDismissible: false, - ), - }, - getBatchSize: ( - batchSize, - projectId, - boundaryCode, - pendingSync, - boundaryName, - ) => - context.read().add( - DownSyncCheckTotalCountEvent( - projectId: context.projectId, - boundaryCode: boundaryCode, - pendingSyncCount: pendingSyncCount, - boundaryName: boundaryName, - batchSize: batchSize, - ), - ), - report: (downSyncCriteriaList) { - setState(() { - downSyncList = downSyncCriteriaList; - }); - }, - pendingSync: () => showDownloadDialog( + BlocListener( + listener: (ctx, state) { + state.maybeWhen( + orElse: () => false, + loading: (isPop) => { + if (isPop) + { + Navigator.of(context, rootNavigator: true) + .popUntil((route) => route is! PopupRoute), + }, + DigitSyncDialog.show( context, - model: DownloadBeneficiary( - title: localizations.translate( - i18.syncDialog.pendingSyncLabel, - ), - projectId: context.projectId, - appConfiguartion: appConfiguration, - boundary: selectedBoundary!.code.toString(), - batchSize: 5, - totalCount: 0, - content: localizations.translate( - i18.syncDialog.pendingSyncContent, - ), - primaryButtonLabel: localizations.translate( - i18.acknowledgementSuccess.goToHome, - ), - boundaryName: selectedBoundary!.name.toString(), - ), - dialogType: DigitProgressDialogType.pendingSync, - isPop: true, + type: DigitSyncDialogType.inProgress, + label: 'Loading', + barrierDismissible: false, ), - dataFound: (initialServerCount, batchSize) => - showDownloadDialog( - context, - model: DownloadBeneficiary( - title: localizations.translate( - initialServerCount > 0 - ? i18.beneficiaryDetails.dataFound - : i18.beneficiaryDetails.noDataFound, - ), - projectId: context.projectId, - appConfiguartion: appConfiguration, - boundary: selectedBoundary!.code.toString(), - batchSize: 5, - totalCount: initialServerCount, - content: localizations.translate( - initialServerCount > 0 - ? i18.beneficiaryDetails.dataFoundContent - : i18.beneficiaryDetails.noDataFoundContent, + }, + getBatchSize: ( + batchSize, + projectId, + boundaryCode, + pendingSync, + boundaryName, + ) => + context.read().add( + DownSyncCheckTotalCountEvent( + projectId: context.projectId, + boundaryCode: boundaryCode, + pendingSyncCount: pendingSyncCount, + boundaryName: boundaryName, + batchSize: batchSize, ), - primaryButtonLabel: localizations.translate( - initialServerCount > 0 - ? i18.common.coreCommonDownload - : i18.common.coreCommonGoback, - ), - secondaryButtonLabel: localizations.translate( - initialServerCount > 0 - ? i18.beneficiaryDetails - .proceedWithoutDownloading - : i18.acknowledgementSuccess.goToHome, - ), - boundaryName: selectedBoundary!.name.toString(), ), - dialogType: DigitProgressDialogType.dataFound, - isPop: true, - ), - inProgress: (syncCount, totalCount) { - downloadProgress.add( - min( - (syncCount) / (totalCount), - 1, + report: (downSyncCriteriaList) { + setState(() { + downSyncList = downSyncCriteriaList; + }); + }, + pendingSync: () => showDownloadDialog( + context, + model: DownloadBeneficiary( + title: localizations.translate( + i18.syncDialog.pendingSyncLabel, + ), + projectId: context.projectId, + appConfiguartion: appConfiguration, + boundary: selectedBoundary!.code.toString(), + batchSize: 5, + totalCount: 0, + content: localizations.translate( + i18.syncDialog.pendingSyncContent, + ), + primaryButtonLabel: localizations.translate( + i18.acknowledgementSuccess.goToHome, + ), + boundaryName: selectedBoundary!.name.toString(), + ), + dialogType: DigitProgressDialogType.pendingSync, + isPop: true, + ), + dataFound: (initialServerCount, batchSize) => + showDownloadDialog( + context, + model: DownloadBeneficiary( + title: localizations.translate( + initialServerCount > 0 + ? i18.beneficiaryDetails.dataFound + : i18.beneficiaryDetails.noDataFound, + ), + projectId: context.projectId, + appConfiguartion: appConfiguration, + boundary: selectedBoundary!.code.toString(), + batchSize: 5, + totalCount: initialServerCount, + content: localizations.translate( + initialServerCount > 0 + ? i18.beneficiaryDetails.dataFoundContent + : i18.beneficiaryDetails.noDataFoundContent, + ), + primaryButtonLabel: localizations.translate( + initialServerCount > 0 + ? i18.common.coreCommonDownload + : i18.common.coreCommonGoback, + ), + secondaryButtonLabel: localizations.translate( + initialServerCount > 0 + ? i18.beneficiaryDetails + .proceedWithoutDownloading + : i18.acknowledgementSuccess.goToHome, + ), + boundaryName: selectedBoundary!.name.toString(), + ), + dialogType: DigitProgressDialogType.dataFound, + isPop: true, + ), + inProgress: (syncCount, totalCount) { + downloadProgress.add( + min( + (syncCount) / (totalCount), + 1, + ), + ); + if (syncCount < 1) { + showDownloadDialog( + context, + model: DownloadBeneficiary( + title: localizations.translate( + i18.beneficiaryDetails.dataDownloadInProgress, + ), + projectId: context.projectId, + boundary: selectedBoundary!.code.toString(), + appConfiguartion: appConfiguration, + syncCount: syncCount, + totalCount: totalCount, + prefixLabel: syncCount.toString(), + suffixLabel: totalCount.toString(), + boundaryName: selectedBoundary!.name.toString(), ), + dialogType: DigitProgressDialogType.inProgress, + isPop: true, + downloadProgressController: downloadProgress, ); - if (syncCount < 1) { - showDownloadDialog( - context, - model: DownloadBeneficiary( - title: localizations.translate( - i18.beneficiaryDetails.dataDownloadInProgress, - ), - projectId: context.projectId, - boundary: selectedBoundary!.code.toString(), - appConfiguartion: appConfiguration, - syncCount: syncCount, - totalCount: totalCount, - prefixLabel: syncCount.toString(), - suffixLabel: totalCount.toString(), - boundaryName: selectedBoundary!.name.toString(), - ), - dialogType: DigitProgressDialogType.inProgress, - isPop: true, - downloadProgressController: downloadProgress, - ); - } - }, - success: (result) { - int? epochTime = result.lastSyncedTime; + } + }, + success: (result) { + int? epochTime = result.lastSyncedTime; - String date = - '${DigitDateUtils.getTimeFromTimestamp(epochTime!)} on ${DigitDateUtils.getDateFromTimestamp(epochTime)}'; - String dataDescription = "${localizations.translate( - i18.beneficiaryDetails.downloadreport, - )}\n\n\n${localizations.translate( - i18.beneficiaryDetails.boundary, - )} ${result.boundaryName}\n${localizations.translate( - i18.beneficiaryDetails.status, - )} ${localizations.translate( - i18.beneficiaryDetails.downloadcompleted, - )}\n${localizations.translate( - i18.beneficiaryDetails.downloadedon, - )} $date\n${localizations.translate( - i18.beneficiaryDetails.recordsdownload, - )} ${result.totalCount}/${result.totalCount}"; - Navigator.of(context, rootNavigator: true).pop(); - context.router.popAndPush((AcknowledgementRoute( - isDataRecordSuccess: true, - description: dataDescription, - descriptionTableData: { - localizations.translate( - i18.beneficiaryDetails.boundary, - ): result.boundaryName!, - localizations.translate( - i18.beneficiaryDetails.status, - ): localizations.translate( - i18.beneficiaryDetails.downloadcompleted, - ), - localizations.translate( - i18.beneficiaryDetails.downloadtime, - ): date, - localizations.translate( - i18.beneficiaryDetails.totalrecorddownload, - ): '${result.totalCount}/${result.totalCount}', - }, - label: localizations.translate(i18 - .acknowledgementSuccess - .dataDownloadedSuccessLabel), - ))); - }, - failed: () => showDownloadDialog( - context, - model: DownloadBeneficiary( - title: localizations.translate( - i18.common.coreCommonDownloadFailed, - ), - projectId: context.projectId, - pendingSyncCount: pendingSyncCount, - appConfiguartion: appConfiguration, - boundary: selectedBoundary!.code.toString(), - content: localizations.translate( - i18.beneficiaryDetails.dataFoundContent, - ), - primaryButtonLabel: localizations.translate( - i18.syncDialog.retryButtonLabel, - ), - secondaryButtonLabel: localizations.translate( - i18.beneficiaryDetails.proceedWithoutDownloading, + String date = + '${DigitDateUtils.getTimeFromTimestamp(epochTime!)} on ${DigitDateUtils.getDateFromTimestamp(epochTime)}'; + String dataDescription = "${localizations.translate( + i18.beneficiaryDetails.downloadreport, + )}\n\n\n${localizations.translate( + i18.beneficiaryDetails.boundary, + )} ${result.boundaryName}\n${localizations.translate( + i18.beneficiaryDetails.status, + )} ${localizations.translate( + i18.beneficiaryDetails.downloadcompleted, + )}\n${localizations.translate( + i18.beneficiaryDetails.downloadedon, + )} $date\n${localizations.translate( + i18.beneficiaryDetails.recordsdownload, + )} ${result.totalCount}/${result.totalCount}"; + Navigator.of(context, rootNavigator: true).pop(); + context.router.popAndPush((AcknowledgementRoute( + isDataRecordSuccess: true, + description: dataDescription, + descriptionTableData: { + localizations.translate( + i18.beneficiaryDetails.boundary, + ): result.boundaryName!, + localizations.translate( + i18.beneficiaryDetails.status, + ): localizations.translate( + i18.beneficiaryDetails.downloadcompleted, ), - boundaryName: selectedBoundary!.name.toString(), + localizations.translate( + i18.beneficiaryDetails.downloadtime, + ): date, + localizations.translate( + i18.beneficiaryDetails.totalrecorddownload, + ): '${result.totalCount}/${result.totalCount}', + }, + label: localizations.translate(i18 + .acknowledgementSuccess + .dataDownloadedSuccessLabel), + ))); + }, + failed: () => showDownloadDialog( + context, + model: DownloadBeneficiary( + title: localizations.translate( + i18.common.coreCommonDownloadFailed, + ), + projectId: context.projectId, + pendingSyncCount: pendingSyncCount, + appConfiguartion: appConfiguration, + boundary: selectedBoundary!.code.toString(), + content: localizations.translate( + i18.beneficiaryDetails.dataFoundContent, ), - dialogType: DigitProgressDialogType.failed, - isPop: true, + primaryButtonLabel: localizations.translate( + i18.syncDialog.retryButtonLabel, + ), + secondaryButtonLabel: localizations.translate( + i18.beneficiaryDetails.proceedWithoutDownloading, + ), + boundaryName: selectedBoundary!.name.toString(), ), - totalCountCheckFailed: () => showDownloadDialog( - context, - model: DownloadBeneficiary( - title: localizations.translate( - i18.beneficiaryDetails.unableToCheckDataInServer, - ), - projectId: context.projectId, - pendingSyncCount: pendingSyncCount, - appConfiguartion: appConfiguration, - boundary: selectedBoundary!.code.toString(), - primaryButtonLabel: localizations.translate( - i18.syncDialog.retryButtonLabel, - ), - secondaryButtonLabel: localizations.translate( - i18.beneficiaryDetails.proceedWithoutDownloading, - ), - boundaryName: selectedBoundary!.name.toString(), + dialogType: DigitProgressDialogType.failed, + isPop: true, + ), + totalCountCheckFailed: () => showDownloadDialog( + context, + model: DownloadBeneficiary( + title: localizations.translate( + i18.beneficiaryDetails.unableToCheckDataInServer, + ), + projectId: context.projectId, + pendingSyncCount: pendingSyncCount, + appConfiguartion: appConfiguration, + boundary: selectedBoundary!.code.toString(), + primaryButtonLabel: localizations.translate( + i18.syncDialog.retryButtonLabel, ), - dialogType: DigitProgressDialogType.checkFailed, - isPop: true, + secondaryButtonLabel: localizations.translate( + i18.beneficiaryDetails.proceedWithoutDownloading, + ), + boundaryName: selectedBoundary!.name.toString(), ), - insufficientStorage: () => showDownloadDialog( - context, - model: DownloadBeneficiary( - title: localizations.translate( - i18.beneficiaryDetails.insufficientStorage, - ), - content: localizations.translate(i18 - .beneficiaryDetails.insufficientStorageContent), - projectId: context.projectId, - appConfiguartion: appConfiguration, - boundary: selectedBoundary!.code.toString(), - primaryButtonLabel: localizations.translate( - i18.common.coreCommonOk, - ), - boundaryName: selectedBoundary!.name.toString(), + dialogType: DigitProgressDialogType.checkFailed, + isPop: true, + ), + insufficientStorage: () => showDownloadDialog( + context, + model: DownloadBeneficiary( + title: localizations.translate( + i18.beneficiaryDetails.insufficientStorage, + ), + content: localizations.translate(i18 + .beneficiaryDetails.insufficientStorageContent), + projectId: context.projectId, + appConfiguartion: appConfiguration, + boundary: selectedBoundary!.code.toString(), + primaryButtonLabel: localizations.translate( + i18.common.coreCommonOk, ), - dialogType: - DigitProgressDialogType.insufficientStorage, - isPop: true, + boundaryName: selectedBoundary!.name.toString(), ), - ); - }, - child: Column(children: [ - Padding( - padding: const EdgeInsets.all(kPadding), - child: Align( - alignment: Alignment.centerLeft, - child: Text( - localizations.translate( - i18.beneficiaryDetails.datadownloadreport, - ), - style: theme.textTheme.displayMedium, - overflow: TextOverflow.ellipsis, + dialogType: DigitProgressDialogType.insufficientStorage, + isPop: true, + ), + ); + }, + child: Column(children: [ + Padding( + padding: const EdgeInsets.all(kPadding), + child: Align( + alignment: Alignment.centerLeft, + child: Text( + localizations.translate( + i18.beneficiaryDetails.datadownloadreport, ), + style: theme.textTheme.displayMedium, + overflow: TextOverflow.ellipsis, ), ), - ...downSyncList - .map( - (e) => DigitCard( - child: Column( - children: [ - DigitTableCard( - element: { - localizations.translate( - i18.beneficiaryDetails.boundary, - ): e.boundaryName!, - localizations.translate( - i18.beneficiaryDetails.status, - ): e.offset == 0 && e.limit == 0 - ? localizations.translate( - i18.beneficiaryDetails - .downloadcompleted, - ) - : localizations.translate( - i18.beneficiaryDetails - .partialdownloaded, - ), - localizations.translate( - i18.beneficiaryDetails.downloadtime, - ): e.lastSyncedTime != null - ? '${DigitDateUtils.getTimeFromTimestamp(e.lastSyncedTime!)} on ${DigitDateUtils.getDateFromTimestamp(e.lastSyncedTime!)}' - : '--', - localizations.translate( - i18.beneficiaryDetails - .totalrecorddownload, - ): e.offset == 0 && e.limit == 0 - ? '${e.totalCount}/${e.totalCount}' - : '${e.offset}/${e.totalCount}', - }, + ), + ...downSyncList.map( + (e) => DigitCard( + child: Column( + children: [ + DigitTableCard( + element: { + localizations.translate( + i18.beneficiaryDetails.boundary, + ): e.boundaryName!, + localizations.translate( + i18.beneficiaryDetails.status, + ): e.offset == 0 && e.limit == 0 + ? localizations.translate( + i18.beneficiaryDetails + .downloadcompleted, + ) + : localizations.translate( + i18.beneficiaryDetails + .partialdownloaded, + ), + localizations.translate( + i18.beneficiaryDetails.downloadtime, + ): e.lastSyncedTime != null + ? '${DigitDateUtils.getTimeFromTimestamp(e.lastSyncedTime!)} on ${DigitDateUtils.getDateFromTimestamp(e.lastSyncedTime!)}' + : '--', + localizations.translate( + i18.beneficiaryDetails.totalrecorddownload, + ): e.offset == 0 && e.limit == 0 + ? '${e.totalCount}/${e.totalCount}' + : '${e.offset}/${e.totalCount}', + }, + ), + DigitOutLineButton( + label: localizations.translate( + i18.beneficiaryDetails.download, ), - DigitOutLineButton( - label: localizations.translate( - i18.beneficiaryDetails.download, + buttonStyle: OutlinedButton.styleFrom( + backgroundColor: Colors.white, + side: BorderSide( + width: 1.0, + color: theme.colorScheme.secondary, ), - buttonStyle: OutlinedButton.styleFrom( - backgroundColor: Colors.white, - side: BorderSide( - width: 1.0, - color: theme.colorScheme.secondary, - ), - minimumSize: Size( - MediaQuery.of(context).size.width, - 50, - ), + minimumSize: Size( + MediaQuery.of(context).size.width, + 50, ), - onPressed: () { - setState(() { - selectedBoundary = BoundaryModel( - code: e.locality, - name: e.boundaryName, - ); - }); - context - .read() - .add( - DownSyncGetBatchSizeEvent( - appConfiguration: [ - appConfiguration, - ], - projectId: context.projectId, - boundaryCode: e.locality!, - pendingSyncCount: - pendingSyncCount, - boundaryName: - e.boundaryName.toString(), - ), - ); - }, ), - ], - ), - ), - ) - , - downSyncList.isEmpty - ? NoResultCard( - align: Alignment.center, - label: localizations.translate( - i18.common.noResultsFound, + onPressed: () { + setState(() { + selectedBoundary = BoundaryModel( + code: e.locality, + name: e.boundaryName, + ); + }); + context.read().add( + DownSyncGetBatchSizeEvent( + appConfiguration: [ + appConfiguration, + ], + projectId: context.projectId, + boundaryCode: e.locality!, + pendingSyncCount: pendingSyncCount, + boundaryName: e.boundaryName.toString(), + ), + ); + }, + ), + ], ), - ) - : const SizedBox.shrink(), - ]), - ), + ), + ), + downSyncList.isEmpty + ? NoResultCard( + align: Alignment.center, + label: localizations.translate( + i18.common.noResultsFound, + ), + ) + : const SizedBox.shrink(), + ]), ), ], ), @@ -435,4 +421,16 @@ class BeneficiariesReportState extends LocalizedState { ), ); } -} \ No newline at end of file + + void listenToSyncCount() async { + syncSubscription = context.syncCount().listen((state) { + state.maybeWhen( + orElse: () {}, + pendingSync: (count) { + setState(() { + pendingSyncCount = count; + }); + }); + }); + } +} diff --git a/apps/health_campaign_field_worker_app/lib/utils/background_service.dart b/apps/health_campaign_field_worker_app/lib/utils/background_service.dart index 20da6a31e..4da92feb7 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/background_service.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/background_service.dart @@ -19,7 +19,6 @@ import 'package:sync_service/models/bandwidth/bandwidth_model.dart'; import '../data/local_store/no_sql/schema/app_configuration.dart'; import '../data/local_store/no_sql/schema/service_registry.dart'; import '../data/local_store/secure_store/secure_store.dart'; -import '../data/network_manager.dart'; import '../data/remote_client.dart'; import '../data/repositories/remote/bandwidth_check.dart'; import '../widgets/network_manager_provider_wrapper.dart'; @@ -183,6 +182,8 @@ void onStart(ServiceInstance service) async { ), ), ); + + // Insert sync logic here final BandwidthModel bandwidthModel = BandwidthModel.fromJson({ 'userId': userRequestModel!.uuid, 'batchSize': configuredBatchSize, diff --git a/apps/health_campaign_field_worker_app/lib/utils/extensions/context_utility.dart b/apps/health_campaign_field_worker_app/lib/utils/extensions/context_utility.dart index 50f92e1b9..137c7593c 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/extensions/context_utility.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/extensions/context_utility.dart @@ -205,4 +205,16 @@ extension ContextUtilityExtensions on BuildContext { throw AppException('Could not fetch ${T.runtimeType}'); } } + + // sync refresh + void syncRefresh() { + final syncBloc = _get(); + syncBloc.add(SyncRefreshEvent(loggedInUserUuid)); + } + + // insert sync count + Stream syncCount() { + final syncBloc = _get(); + return syncBloc.stream; + } } diff --git a/apps/health_campaign_field_worker_app/lib/utils/extensions/extensions.dart b/apps/health_campaign_field_worker_app/lib/utils/extensions/extensions.dart index ae6f6bc98..207ab825a 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/extensions/extensions.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/extensions/extensions.dart @@ -1,4 +1,6 @@ // Importing necessary packages and files +import 'dart:async'; + import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; @@ -8,6 +10,7 @@ import 'package:inventory_management/utils/utils.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:referral_reconciliation/utils/utils.dart'; import 'package:registration_delivery/registration_delivery.dart'; +import 'package:sync_service/sync_service_lib.dart'; import '../../blocs/auth/auth.dart'; import '../../blocs/project/project.dart'; diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index b08cc7a36..6f165a6d7 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -62,7 +62,7 @@ dependencies: inventory_management: ^1.0.0 referral_reconciliation: ^1.0.0 registration_delivery: ^1.0.0+1 - sync_service: ^1.0.0 + sync_service: ^0.0.1 dev_dependencies: flutter_test: diff --git a/packages/sync_service/lib/blocs/sync/sync.dart b/packages/sync_service/lib/blocs/sync/sync.dart index f54b7adda..833bec2ea 100644 --- a/packages/sync_service/lib/blocs/sync/sync.dart +++ b/packages/sync_service/lib/blocs/sync/sync.dart @@ -14,18 +14,28 @@ part 'sync.freezed.dart'; typedef SyncEmitter = Emitter; +// This is the `SyncBloc` class which extends `Bloc`. +// +// It handles the state management for sync operations. class SyncBloc extends Bloc { + // The `Isar` instance used for database operations. final Isar isar; + // The `SyncService` instance used for sync operations. final SyncService syncService; + // The constructor for `SyncBloc`. + // It requires an `Isar` instance and a `SyncService` instance. SyncBloc({ required this.isar, required this.syncService, }) : super(const SyncPendingState()) { + // Registering event handlers. on(_handleRefresh); on(_handleSyncUp); } + // This method handles the `SyncRefreshEvent`. + // It emits a new state based on the result of the refresh operation. FutureOr _handleRefresh( SyncRefreshEvent event, SyncEmitter emit, @@ -57,6 +67,8 @@ class SyncBloc extends Bloc { } } + // This method handles the `SyncSyncUpEvent`. + // It emits a new state based on the result of the sync up operation. FutureOr _handleSyncUp( SyncSyncUpEvent event, SyncEmitter emit, @@ -90,11 +102,14 @@ class SyncBloc extends Bloc { } } +// This is the `SyncEvent` class which is a freezed union of different types of sync events. @freezed class SyncEvent with _$SyncEvent { + // The `SyncRefreshEvent` represents a refresh event. const factory SyncEvent.refresh(String createdBy, [int? count]) = SyncRefreshEvent; + // The `SyncSyncUpEvent` represents a sync up event. const factory SyncEvent.syncUp({ required String userId, required List localRepositories, @@ -102,20 +117,28 @@ class SyncEvent with _$SyncEvent { }) = SyncSyncUpEvent; } +// This is the `SyncState` class which is a freezed union of different types of sync states. @freezed class SyncState with _$SyncState { + // The `SyncLoadingState` represents a loading state. const factory SyncState.loading() = SyncLoadingState; + // The `SyncInProgressState` represents a sync in progress state. const factory SyncState.syncInProgress() = SyncInProgressState; + // The `SyncPendingState` represents a pending sync state. const factory SyncState.pendingSync({@Default(0) int count}) = SyncPendingState; + // The `SyncCompletedState` represents a completed sync state. const factory SyncState.completedSync() = SyncCompletedState; + // The `SyncFailedState` represents a failed sync state. const factory SyncState.failedSync() = SyncFailedState; + // The `DownSyncFailedState` represents a failed down sync state. const factory SyncState.failedDownSync() = DownSyncFailedState; + // The `UpSyncFailedState` represents a failed up sync state. const factory SyncState.failedUpSync() = UpSyncFailedState; } diff --git a/packages/sync_service/lib/data/repositories/sync/remote_type.dart b/packages/sync_service/lib/data/repositories/sync/remote_type.dart index 35a068e99..9faf15d7a 100644 --- a/packages/sync_service/lib/data/repositories/sync/remote_type.dart +++ b/packages/sync_service/lib/data/repositories/sync/remote_type.dart @@ -1,8 +1,14 @@ +// Importing necessary packages import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; - +/// The `RepositoryType` class provides methods to get the remote and local repositories for a given data model type. class RepositoryType { + /// Returns the remote repository for the given data model type. + /// + /// This method accepts a `DataModelType` and a list of `RemoteRepository` objects as parameters. + /// It returns the first `RemoteRepository` object in the list that matches the given data model type. + /// If no matching repository is found, it throws an exception. static RemoteRepository getRemoteForType( DataModelType type, List remoteRepositories, @@ -10,7 +16,6 @@ class RepositoryType { final repository = remoteRepositories.firstWhereOrNull( (e) => e.type == type, ); - if (repository == null) { throw Exception( 'Remote repository is not passed to sync service', @@ -20,6 +25,11 @@ class RepositoryType { return repository; } + /// Returns the local repository for the given data model type. + /// + /// This method accepts a `DataModelType` and a list of `LocalRepository` objects as parameters. + /// It returns the first `LocalRepository` object in the list that matches the given data model type. + /// If no matching repository is found, it throws an exception. static LocalRepository getLocalForType( DataModelType type, List localRepositories, diff --git a/packages/sync_service/lib/data/repositories/sync/sync_down.dart b/packages/sync_service/lib/data/repositories/sync/sync_down.dart index dde22729a..fdaa14385 100644 --- a/packages/sync_service/lib/data/repositories/sync/sync_down.dart +++ b/packages/sync_service/lib/data/repositories/sync/sync_down.dart @@ -8,7 +8,15 @@ import '../../../models/bandwidth/bandwidth_model.dart'; import '../../sync_service.dart'; import 'remote_type.dart'; +/// The `PerformSyncDown` class provides a method to perform a sync down operation. class PerformSyncDown { + /// Performs a sync down operation. + /// + /// This method accepts a `BandwidthModel`, a list of `LocalRepository` objects, a list of `RemoteRepository` objects, and a `PersistenceConfiguration` as parameters. + /// It throws an exception if the persistence configuration is `onlineOnly`. + /// It gets the items to be synced down from each local repository and groups them by type and operation. + /// It then gets the remote and local repositories for each type and applies the server generated ID to each entity. + /// Finally, it updates each entity in the local repository. static FutureOr syncDown({ required BandwidthModel bandwidthModel, required List localRepositories, @@ -18,7 +26,6 @@ class PerformSyncDown { if (configuration == PersistenceConfiguration.onlineOnly) { throw Exception('Sync down is not valid for online only configuration'); } - final futures = await Future.wait( localRepositories .map((e) => e.getItemsToBeSyncedDown(bandwidthModel.userId)), @@ -32,11 +39,11 @@ class PerformSyncDown { .toList() .groupListsBy( (element) => element.type, - ); + ); for (final typeGroupedEntity in groupedEntries.entries) { final groupedOperations = typeGroupedEntity.value.groupListsBy( - (element) => element.operation, + (element) => element.operation, ); final remote = RepositoryType.getRemoteForType( @@ -69,7 +76,7 @@ class PerformSyncDown { responseEntities = await SyncServiceSingleton() .entityMapper ?.entityResponse(typeGroupedEntity, operationGroupedEntity, - entities, remote, local); + entities, remote, local); for (var element in responseEntities!) { await local.update(element, createOpLog: false); diff --git a/packages/sync_service/lib/data/repositories/sync/sync_up.dart b/packages/sync_service/lib/data/repositories/sync/sync_up.dart index 35111327e..019b22061 100644 --- a/packages/sync_service/lib/data/repositories/sync/sync_up.dart +++ b/packages/sync_service/lib/data/repositories/sync/sync_up.dart @@ -8,12 +8,20 @@ import 'package:sync_service/utils/utils.dart'; import '../../../models/bandwidth/bandwidth_model.dart'; import 'remote_type.dart'; +/// The `PerformSyncUp` class provides a method to perform a sync up operation. class PerformSyncUp { + /// Performs a sync up operation. + /// + /// This method accepts a `BandwidthModel`, a list of `LocalRepository` objects, and a list of `RemoteRepository` objects as parameters. + /// It gets the items to be synced up from each local repository and groups them by type and operation. + /// It then gets the remote and local repositories for each type and applies the server generated ID to each entity. + /// Finally, it updates each entity in the local repository. static FutureOr syncUp({ required BandwidthModel bandwidthModel, required List localRepositories, required List remoteRepositories, }) async { + // Helper function to get the entity model from a list of operation log entries List getEntityModel( List> opLogList, LocalRepository local, @@ -45,23 +53,26 @@ class PerformSyncUp { .toList(); } + // Get the items to be synced up from each local repository final futures = await Future.wait( localRepositories .map((e) => e.getItemsToBeSyncedUp(bandwidthModel.userId)), ); + // Group the items by type and operation final pendingSyncEntries = futures.expand((e) => e).toList(); pendingSyncEntries.sort((a, b) => a.createdAt.compareTo(b.createdAt)); final groupedEntries = pendingSyncEntries.groupListsBy( (element) => element.type, ); -// Note : Sort the entries by DataModelType enum + // Sort the entries by DataModelType enum final entries = groupedEntries.entries.toList(); entries.sort((a, b) => DataModelType.values .indexOf(a.key) .compareTo(DataModelType.values.indexOf(b.key))); + // For each type and operation, get the remote and local repositories and apply the server generated ID to each entity for (final typeGroupedEntity in entries) { final groupedOperations = typeGroupedEntity.value.groupListsBy( (element) => element.operation, @@ -77,6 +88,7 @@ class PerformSyncUp { localRepositories, ); + // For each operation, update each entity in the local repository for (final operationGroupedEntity in groupedOperations.entries) { // [returns list of oplogs whose nonRecoverableError is false and syncedup is false] final opLogList = operationGroupedEntity.value @@ -107,6 +119,7 @@ class PerformSyncUp { listOfBatchedNonRecoverableErrorList = nonRecoverableErrorList.slices(bandwidthModel.batchSize).toList(); + // Handle non-recoverable errors if (listOfBatchedNonRecoverableErrorList.isNotEmpty) { for (final sublist in listOfBatchedNonRecoverableErrorList) { final nonRecoverableErrorEntities = getEntityModel(sublist, local); @@ -126,6 +139,7 @@ class PerformSyncUp { } } + // Handle errors if (listOfBatchedOpLogErrorList.isNotEmpty) { for (final sublist in listOfBatchedOpLogErrorList) { final errorEntities = getEntityModel(sublist, local); @@ -143,6 +157,8 @@ class PerformSyncUp { } } } + + // Handle successful operations if (listOfBatchedOpLogList.isNotEmpty) { for (final sublist in listOfBatchedOpLogList) { final entities = getEntityModel(sublist, local); diff --git a/packages/sync_service/lib/data/sync_entity_mapper_listener.dart b/packages/sync_service/lib/data/sync_entity_mapper_listener.dart index 4e8fbab50..1366bf4de 100644 --- a/packages/sync_service/lib/data/sync_entity_mapper_listener.dart +++ b/packages/sync_service/lib/data/sync_entity_mapper_listener.dart @@ -2,14 +2,30 @@ import 'dart:async'; import 'package:digit_data_model/data_model.dart'; +/// The `SyncEntityMapperListener` is an abstract class that defines methods for handling sync entity mapping. +/// +/// This class provides methods for writing to the entity database, getting the sync count, handling entity responses, and updating entities. abstract class SyncEntityMapperListener { + /// Writes the given response to the entity database. + /// + /// This method accepts a `Map` response and a list of `LocalRepository` objects as parameters. + /// It is expected to be overridden in a concrete implementation of `SyncEntityMapperListener`. FutureOr writeToEntityDB( Map response, List localRepositories, ); + /// Returns the sync count for the given list of `OpLog` objects. + /// + /// This method accepts a list of `OpLog` objects as a parameter. + /// It is expected to be overridden in a concrete implementation of `SyncEntityMapperListener`. int getSyncCount(List opLogs); + /// Handles the entity response. + /// + /// This method accepts a `MapEntry` of `DataModelType` and a list of `OpLogEntry` objects, another `MapEntry` of `DataOperation` and a list of `OpLogEntry` objects, a list of `EntityModel` objects, a `RemoteRepository` object, and a `LocalRepository` object as parameters. + /// It returns a `Future` that resolves to a list of `EntityModel` objects. + /// It is expected to be overridden in a concrete implementation of `SyncEntityMapperListener`. Future> entityResponse( MapEntry>> typeGroupedEntity, MapEntry>> @@ -18,6 +34,11 @@ abstract class SyncEntityMapperListener { RemoteRepository remote, LocalRepository local); + /// Updates the given entity. + /// + /// This method accepts an `EntityModel` object, an `OpLogEntry` object, and a `String` server generated ID as parameters. + /// It returns an updated `EntityModel` object. + /// It is expected to be overridden in a concrete implementation of `SyncEntityMapperListener`. EntityModel updatedEntity( EntityModel entity, OpLogEntry e, String? serverGeneratedId); } diff --git a/packages/sync_service/lib/data/sync_service.dart b/packages/sync_service/lib/data/sync_service.dart index ff7b37ca5..2174adae3 100644 --- a/packages/sync_service/lib/data/sync_service.dart +++ b/packages/sync_service/lib/data/sync_service.dart @@ -9,10 +9,14 @@ import 'package:sync_service/utils/utils.dart'; import '../models/bandwidth/bandwidth_model.dart'; +/// The `SyncService` class provides methods to perform sync operations. class SyncService { -/* This function will read the params and get the records which are not synced - and pushes to the sync-up and sync-down methods */ - + /// This function reads the params and gets the records which are not synced + /// and pushes to the sync-up and sync-down methods. + /// + /// It accepts a list of `LocalRepository` objects, a list of `RemoteRepository` objects, + /// a `BandwidthModel`, and an optional `ServiceInstance` as parameters. + /// It returns a `Future` that resolves to a `bool` indicating whether the sync operation is completed. FutureOr performSync({ required List localRepositories, required List remoteRepositories, @@ -87,6 +91,10 @@ class SyncService { return isSyncCompleted; } + /// Writes the given response to the entity database. + /// + /// This method accepts a `Map` response and a list of `LocalRepository` objects as parameters. + /// It is a `FutureOr` function. FutureOr writeToEntityDB( Map response, List localRepositories, @@ -97,6 +105,10 @@ class SyncService { ); } + /// Returns the count of pending sync records for the given user. + /// + /// This method accepts a list of `LocalRepository` objects and a `String` user ID as parameters. + /// It returns a `FutureOr` that resolves to the count of pending sync records. FutureOr getPendingSyncRecordsCount( List localRepositories, String userId, @@ -108,6 +120,10 @@ class SyncService { .length; } +/// This function filters the entities by the given bandwidth. +/// +/// It accepts an integer `batchSize` and a list of `EntityModel` objects as parameters. +/// It returns a `FutureOr>` that resolves to a list of filtered `EntityModel` objects. FutureOr> filterEntityByBandwidth( int batchSize, List entities, @@ -122,6 +138,10 @@ FutureOr> filterEntityByBandwidth( return items; } +/// This function filters the operation log entries by the given bandwidth. +/// +/// It accepts an integer `batchSize` and a list of `OpLogEntry` objects as parameters. +/// It returns a `Future>>` that resolves to a list of filtered `OpLogEntry` objects. Future>> filterOpLogByBandwidth( int batchSize, List> entities, @@ -136,16 +156,25 @@ Future>> filterOpLogByBandwidth( return items; } +/// The `SyncError` class is an abstract class that represents a sync error. +/// +/// It extends the `Exception` class and includes a dynamic `error` property. abstract class SyncError implements Exception { final dynamic error; const SyncError([this.error]); } +/// The `SyncUpError` class represents a sync up error. +/// +/// It extends the `SyncError` class. class SyncUpError extends SyncError { const SyncUpError([super.error]); } +/// The `SyncDownError` class represents a sync down error. +/// +/// It extends the `SyncError` class. class SyncDownError extends SyncError { const SyncDownError([super.error]); } diff --git a/packages/sync_service/lib/models/bandwidth/bandwidth_model.dart b/packages/sync_service/lib/models/bandwidth/bandwidth_model.dart index ce37289f0..7e8d724f3 100644 --- a/packages/sync_service/lib/models/bandwidth/bandwidth_model.dart +++ b/packages/sync_service/lib/models/bandwidth/bandwidth_model.dart @@ -1,15 +1,22 @@ +// Importing the necessary packages import 'package:freezed_annotation/freezed_annotation.dart'; +// Part statements are used in Dart to create libraries that can spread over several files part 'bandwidth_model.freezed.dart'; part 'bandwidth_model.g.dart'; +// The @freezed annotation marks this class as immutable and generates the necessary code @freezed +// BandwidthModel class with a mixin of _$BandwidthModel class BandwidthModel with _$BandwidthModel { + // Factory constructor for creating a new BandwidthModel instance + // The required keyword means that the parameter is mandatory const factory BandwidthModel({ required String userId, required int batchSize, }) = _BandwidthModel; + // Factory constructor for creating a new BandwidthModel instance from a JSON map factory BandwidthModel.fromJson(Map json) => _$BandwidthModelFromJson(json); } diff --git a/packages/sync_service/lib/utils/utils.dart b/packages/sync_service/lib/utils/utils.dart index fb686321c..7db4d94d4 100644 --- a/packages/sync_service/lib/utils/utils.dart +++ b/packages/sync_service/lib/utils/utils.dart @@ -1,19 +1,40 @@ import 'package:digit_data_model/data_model.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:provider/provider.dart'; +import '../blocs/sync/sync.dart'; import '../data/sync_entity_mapper_listener.dart'; +/// The `SyncServiceSingleton` class is a singleton that provides access to sync service related configurations and listeners. +/// +/// This class provides methods to set and get sync service related data such as `syncDownRetryCount`, `persistenceConfiguration`, and `entityMapper`. class SyncServiceSingleton { + // Singleton instance static final SyncServiceSingleton _instance = SyncServiceSingleton._internal(); + + // Factory constructor that returns the singleton instance factory SyncServiceSingleton() => _instance; + + // Private named constructor SyncServiceSingleton._internal(); + + // Getter for the singleton instance static SyncServiceSingleton get instance => _instance; + // Listener for sync entity mapper events SyncEntityMapperListener? _entityListener; + + // Number of times to retry sync down operation late int _syncDownRetryCount = 0; + + // Configuration for persistence of data PersistenceConfiguration? _persistenceConfiguration = PersistenceConfiguration .offlineFirst; // Default to offline first persistence configuration + /// Sets the sync service related data. + /// + /// This method accepts `syncDownRetryCount`, `persistenceConfiguration`, and `entityMapper` as parameters and sets the corresponding properties. void setData({ required int syncDownRetryCount, required PersistenceConfiguration persistenceConfiguration, @@ -24,8 +45,34 @@ class SyncServiceSingleton { _entityListener = entityMapper; } + // Getter for the sync entity mapper listener SyncEntityMapperListener? get entityMapper => _entityListener; + + // Getter for the sync down retry count int get syncDownRetryCount => _syncDownRetryCount; + + // Getter for the persistence configuration PersistenceConfiguration? get persistenceConfiguration => _persistenceConfiguration; } + +class SyncUtils { + // sync refresh + void syncRefresh(BuildContext context, String loggedInUserUuid) { + final syncBloc = context.read(); + syncBloc.add(SyncRefreshEvent(loggedInUserUuid)); + } + +// insert sync count + SyncState? syncCount( + BuildContext context, + ) { + SyncState? state; + final syncBloc = context.read(); + syncBloc.stream.listen((state) { + state = state; + }); + + return state; + } +} diff --git a/tools/attendance_package_imports.dart b/tools/attendance_package_imports.dart index 647858b2b..a41e99b4f 100644 --- a/tools/attendance_package_imports.dart +++ b/tools/attendance_package_imports.dart @@ -29,14 +29,15 @@ void main() { var routerFilePath = appRoot + '/router/app_router.dart'; var entityMapperFilePath = appRoot + '/data/local_store/no_sql/schema/entity_mapper.dart'; - var syncDownFilePath = appRoot + '/data/repositories/sync/sync_down.dart'; + var syncServiceMapperFilePath = + appRoot + '/data/repositories/sync_service_mapper.dart'; var homeFilePath = appRoot + '/pages/home.dart'; // Add attendance to home file _updateHome(homeFilePath); - // Update the sync_down.dart file - _updateSyncDownFile(syncDownFilePath); + // Update the sync_service_mapper.dart file + _updateSyncServiceMapperDownFile(syncServiceMapperFilePath); // Add attendance routes and import to the router file _addAttendanceRoutesAndImportToRouterFile(routerFilePath); @@ -56,7 +57,7 @@ void main() { _formatFiles([ homeFilePath, - syncDownFilePath, + syncServiceMapperFilePath, entityMapperFilePath, routerFilePath, constantsFilePath, @@ -174,7 +175,7 @@ String insertData(String fileContent, String marker, String data) { return fileContent; } -void _updateSyncDownFile(String syncDownFilePath) { +void _updateSyncServiceMapperDownFile(String syncServiceMapperFilePath) { // Define the import statement and the new case statements var importStatement = "import 'package:attendance_management/attendance_management.dart';"; @@ -229,56 +230,58 @@ void _updateSyncDownFile(String syncDownFilePath) { break; '''; - // Check if the sync_down file exists - var syncDownFile = File(syncDownFilePath); + // Check if the sync_service_mapper file exists + var syncServiceMapperFile = File(syncServiceMapperFilePath); - if (!syncDownFile.existsSync()) { - print('Error: Sync Down file does not exist at path: $syncDownFilePath'); + if (!syncServiceMapperFile.existsSync()) { + print( + 'Error: Sync Service Mapper file does not exist at path: $syncServiceMapperFilePath'); return; } - // Read the sync_down file - var syncDownFileContent = syncDownFile.readAsStringSync(); + // Read the sync_service_mapper file + var syncServiceMapperFileContent = syncServiceMapperFile.readAsStringSync(); // Check if the import statement already exists and add it if not - if (!syncDownFileContent + if (!syncServiceMapperFileContent .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { - syncDownFileContent = importStatement + '\n' + syncDownFileContent; - print('The import statement was added to sync_down.dart.'); + syncServiceMapperFileContent = importStatement + '\n' + syncServiceMapperFileContent; + print('The import statement was added to sync_service_mapper.dart.'); } else { - print('The import statement already exists in sync_down.dart.'); + print('The import statement already exists in sync_service_mapper.dart.'); } // Insert the new case statements - if (!syncDownFileContent + if (!syncServiceMapperFileContent .contains('DataModelType.attendance'.replaceAll(RegExp(r'\s'), ''))) { // Find the position to insert the new cases within the switch statement var switchIndex = - syncDownFileContent.indexOf('switch (typeGroupedEntity.key) {'); + syncServiceMapperFileContent.indexOf('switch (typeGroupedEntity.key) {'); if (switchIndex != -1) { var caseInsertionIndex = - syncDownFileContent.indexOf('default:', switchIndex); + syncServiceMapperFileContent.indexOf('default:', switchIndex); if (caseInsertionIndex != -1) { - syncDownFileContent = - syncDownFileContent.substring(0, caseInsertionIndex) + + syncServiceMapperFileContent = + syncServiceMapperFileContent.substring(0, caseInsertionIndex) + newCases + '\n' + - syncDownFileContent.substring(caseInsertionIndex); - print('The new cases were added to sync_down.dart.'); + syncServiceMapperFileContent.substring(caseInsertionIndex); + print('The new cases were added to sync_service_mapper.dart.'); // Write the updated content back to the file - syncDownFile.writeAsStringSync(syncDownFileContent); + syncServiceMapperFile.writeAsStringSync(syncServiceMapperFileContent); } else { print( - 'Error: Could not find the default case in the switch statement in sync_down.dart.'); + 'Error: Could not find the default case in the switch statement in sync_service_mapper.dart.'); return; } } else { - print('Error: Could not find the switch statement in sync_down.dart.'); + print( + 'Error: Could not find the switch statement in sync_service_mapper.dart.'); return; } } else { - print('The new cases already exist in sync_down.dart.'); + print('The new cases already exist in sync_service_mapper.dart.'); } } diff --git a/tools/inventory_package_imports.dart b/tools/inventory_package_imports.dart index 56c5ff5f8..7d02e230d 100644 --- a/tools/inventory_package_imports.dart +++ b/tools/inventory_package_imports.dart @@ -27,7 +27,8 @@ void main() { var routerFilePath = appRoot + '/router/app_router.dart'; var entityMapperFilePath = appRoot + '/data/local_store/no_sql/schema/entity_mapper.dart'; - var syncDownFilePath = appRoot + '/data/repositories/sync/sync_down.dart'; + var syncServiceMapperFilePath = + appRoot + '/data/repositories/sync_service_mapper.dart'; var homeFilePath = appRoot + '/pages/home.dart'; var extensionsFilePath = appRoot + '/utils/extensions/extensions.dart'; var contextUtilityFilePath = @@ -60,8 +61,8 @@ void main() { // Add new case statements to the entity_mapper.dart file _updateEntityMapperFile(entityMapperFilePath); - // Update the sync_down.dart file - _updateSyncDownFile(syncDownFilePath); + // Update the sync_service_mapper.dart file + _updateSyncServiceMapperDownFile(syncServiceMapperFilePath); // Add inventory to home file _updateHome(homeFilePath); @@ -74,7 +75,7 @@ void main() { utilsFilePath, routerFilePath, entityMapperFilePath, - syncDownFilePath, + syncServiceMapperFilePath, homeFilePath, extensionsFilePath, contextUtilityFilePath, @@ -309,7 +310,7 @@ String insertData(String fileContent, String marker, String data) { return fileContent; } -void _updateSyncDownFile(String syncDownFilePath) { +void _updateSyncServiceMapperDownFile(String syncServiceMapperFilePath) { // Define the import statement and the new case statements var importStatement = "import 'package:inventory_management/inventory_management.dart';"; @@ -411,44 +412,47 @@ void _updateSyncDownFile(String syncDownFilePath) { break; '''; - // Check if the sync_down file exists - var syncDownFile = File(syncDownFilePath); + // Check if the sync_service_mapper file exists + var syncServiceMapperFile = File(syncServiceMapperFilePath); - if (!syncDownFile.existsSync()) { - print('Error: Sync Down file does not exist at path: $syncDownFilePath'); + if (!syncServiceMapperFile.existsSync()) { + print( + 'Error: Sync Service Mapper file does not exist at path: $syncServiceMapperFilePath'); return; } - // Read the sync_down file - var syncDownFileContent = syncDownFile.readAsStringSync(); + // Read the sync_service_mapper file + var syncServiceMapperFileContent = syncServiceMapperFile.readAsStringSync(); // Check if the import statement already exists and add it if not - if (!syncDownFileContent.contains(importStatement)) { - syncDownFileContent = importStatement + '\n' + syncDownFileContent; + if (!syncServiceMapperFileContent.contains(importStatement)) { + syncServiceMapperFileContent = + importStatement + '\n' + syncServiceMapperFileContent; print('The import statement was added to sync_down.dart.'); } else { print('The import statement already exists in sync_down.dart.'); } // Insert the new case statements - if (!syncDownFileContent.contains('DataModelType.stock') && - !syncDownFileContent.contains('DataModelType.stockReconciliation')) { + if (!syncServiceMapperFileContent.contains('DataModelType.stock') && + !syncServiceMapperFileContent + .contains('DataModelType.stockReconciliation')) { // Find the position to insert the new cases within the switch statement - var switchIndex = - syncDownFileContent.indexOf('switch (typeGroupedEntity.key) {'); + var switchIndex = syncServiceMapperFileContent + .indexOf('switch (typeGroupedEntity.key) {'); if (switchIndex != -1) { var caseInsertionIndex = - syncDownFileContent.indexOf('default:', switchIndex); + syncServiceMapperFileContent.indexOf('default:', switchIndex); if (caseInsertionIndex != -1) { - syncDownFileContent = - syncDownFileContent.substring(0, caseInsertionIndex) + + syncServiceMapperFileContent = + syncServiceMapperFileContent.substring(0, caseInsertionIndex) + newCases + '\n' + - syncDownFileContent.substring(caseInsertionIndex); + syncServiceMapperFileContent.substring(caseInsertionIndex); print('The new cases were added to sync_down.dart.'); // Write the updated content back to the file - syncDownFile.writeAsStringSync(syncDownFileContent); + syncServiceMapperFile.writeAsStringSync(syncServiceMapperFileContent); } else { print( 'Error: Could not find the default case in the switch statement in sync_down.dart.'); diff --git a/tools/referral_reconciliation_imports.dart b/tools/referral_reconciliation_imports.dart index 0d4dcb91f..bc25e2f65 100644 --- a/tools/referral_reconciliation_imports.dart +++ b/tools/referral_reconciliation_imports.dart @@ -30,7 +30,8 @@ void main() { var routerFilePath = appRoot + '/router/app_router.dart'; var entityMapperFilePath = appRoot + '/data/local_store/no_sql/schema/entity_mapper.dart'; - var syncDownFilePath = appRoot + '/data/repositories/sync/sync_down.dart'; + var syncServiceMapperFilePath = + appRoot + '/data/repositories/sync_service_mapper.dart'; var homeFilePath = appRoot + '/pages/home.dart'; var extensionsFilePath = appRoot + '/utils/extensions/extensions.dart'; var contextUtilityFilePath = @@ -66,8 +67,8 @@ void main() { // Add referral_recon related import and initialization to the utils.dart file _addReferralReconMapperToUtilsFile(utilsFilePath: utilsFilePath); - // Update the sync_down.dart file - _updateSyncDownFile(syncDownFilePath); + // Update the sync_service_mapper.dart file + _updateSyncServiceMapperDownFile(syncServiceMapperFilePath); _formatFiles([ localizationDelegatesFilePath, @@ -76,7 +77,7 @@ void main() { utilsFilePath, routerFilePath, entityMapperFilePath, - syncDownFilePath, + syncServiceMapperFilePath, homeFilePath, extensionsFilePath, contextUtilityFilePath, @@ -284,7 +285,7 @@ String insertData(String fileContent, String marker, String data) { return fileContent; } -void _updateSyncDownFile(String syncDownFilePath) { +void _updateSyncServiceMapperDownFile(String syncServiceMapperFilePath) { // Define the import statement and the new case statements var importStatement = "import 'package:referral_reconciliation/referral_reconciliation.dart';"; @@ -338,44 +339,47 @@ void _updateSyncDownFile(String syncDownFilePath) { break; '''; - // Check if the sync_down file exists - var syncDownFile = File(syncDownFilePath); + // Check if the sync_service_mapper file exists + var syncServiceMapperFile = File(syncServiceMapperFilePath); - if (!syncDownFile.existsSync()) { - print('Error: Sync Down file does not exist at path: $syncDownFilePath'); + if (!syncServiceMapperFile.existsSync()) { + print( + 'Error: Sync Service Mapper file does not exist at path: $syncServiceMapperFilePath'); return; } - // Read the sync_down file - var syncDownFileContent = syncDownFile.readAsStringSync(); + // Read the sync_service_mapper file + var syncServiceMapperFileContent = syncServiceMapperFile.readAsStringSync(); // Check if the import statement already exists and add it if not - if (!syncDownFileContent.contains(importStatement)) { - syncDownFileContent = importStatement + '\n' + syncDownFileContent; + if (!syncServiceMapperFileContent.contains(importStatement)) { + syncServiceMapperFileContent = + importStatement + '\n' + syncServiceMapperFileContent; print('The import statement was added to sync_down.dart.'); } else { print('The import statement already exists in sync_down.dart.'); } // Insert the new case statements - if (!syncDownFileContent.contains('DataModelType.stock') && - !syncDownFileContent.contains('DataModelType.stockReconciliation')) { + if (!syncServiceMapperFileContent.contains('DataModelType.stock') && + !syncServiceMapperFileContent + .contains('DataModelType.stockReconciliation')) { // Find the position to insert the new cases within the switch statement - var switchIndex = - syncDownFileContent.indexOf('switch (typeGroupedEntity.key) {'); + var switchIndex = syncServiceMapperFileContent + .indexOf('switch (typeGroupedEntity.key) {'); if (switchIndex != -1) { var caseInsertionIndex = - syncDownFileContent.indexOf('default:', switchIndex); + syncServiceMapperFileContent.indexOf('default:', switchIndex); if (caseInsertionIndex != -1) { - syncDownFileContent = - syncDownFileContent.substring(0, caseInsertionIndex) + + syncServiceMapperFileContent = + syncServiceMapperFileContent.substring(0, caseInsertionIndex) + newCases + '\n' + - syncDownFileContent.substring(caseInsertionIndex); + syncServiceMapperFileContent.substring(caseInsertionIndex); print('The new cases were added to sync_down.dart.'); // Write the updated content back to the file - syncDownFile.writeAsStringSync(syncDownFileContent); + syncServiceMapperFile.writeAsStringSync(syncServiceMapperFileContent); } else { print( 'Error: Could not find the default case in the switch statement in sync_down.dart.'); diff --git a/tools/registration_delivery_imports.dart b/tools/registration_delivery_imports.dart index 01b55034a..19db2ca90 100644 --- a/tools/registration_delivery_imports.dart +++ b/tools/registration_delivery_imports.dart @@ -30,7 +30,8 @@ void main() { var routerFilePath = appRoot + '/router/app_router.dart'; var entityMapperFilePath = appRoot + '/data/local_store/no_sql/schema/entity_mapper.dart'; - var syncDownFilePath = appRoot + '/data/repositories/sync/sync_down.dart'; + var syncServiceMapperFilePath = + appRoot + '/data/repositories/sync_service_mapper.dart'; var homeFilePath = appRoot + '/pages/home.dart'; var extensionsFilePath = appRoot + '/utils/extensions/extensions.dart'; var contextUtilityFilePath = @@ -48,8 +49,8 @@ void main() { // Add registration to home file _updateHome(homeFilePath); - // Update the sync_down.dart file - _updateSyncDownFile(syncDownFilePath); + // Update the sync_service_mapper.dart file + _updateSyncServiceMapperDownFile(syncServiceMapperFilePath); // Add registration routes and import to the router file _addRegistrationRoutesAndImportToRouterFile(routerFilePath); @@ -77,7 +78,7 @@ void main() { utilsFilePath, routerFilePath, entityMapperFilePath, - syncDownFilePath, + syncServiceMapperFilePath, homeFilePath, extensionsFilePath, contextUtilityFilePath, @@ -298,7 +299,7 @@ void _createLocalizationDelegatesFile(String localizationDelegatesFilePath) { // Define the import statement and delegate for localization var importStatement = "import 'package:registration_delivery/blocs/app_localization.dart' as registration_delivery_localization;"; - var delegate = ''' + var delegate = ''' registration_delivery_localization.RegistrationDeliveryLocalization .getDelegate( getLocalizationString( @@ -342,7 +343,7 @@ void _createLocalizationDelegatesFile(String localizationDelegatesFilePath) { localizationDelegatesFile.writeAsStringSync(localizationDelegatesFileContent); } -void _updateSyncDownFile(String syncDownFilePath) { +void _updateSyncServiceMapperDownFile(String syncServiceMapperFilePath) { // Define the import statement and the new case statements var importStatement = "import 'package:registration_delivery/registration_delivery.dart';"; @@ -646,45 +647,47 @@ void _updateSyncDownFile(String syncDownFilePath) { break; '''; - // Check if the sync_down file exists - var syncDownFile = File(syncDownFilePath); + // Check if the sync_service_mapper file exists + var syncServiceMapperFile = File(syncServiceMapperFilePath); - if (!syncDownFile.existsSync()) { - print('Error: Sync Down file does not exist at path: $syncDownFilePath'); + if (!syncServiceMapperFile.existsSync()) { + print( + 'Error: Sync Service Mapper file does not exist at path: $syncServiceMapperFilePath'); return; } - // Read the sync_down file - var syncDownFileContent = syncDownFile.readAsStringSync(); + // Read the sync_service_mapper file + var syncServiceMapperFileContent = syncServiceMapperFile.readAsStringSync(); // Check if the import statement already exists and add it if not - if (!syncDownFileContent - .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { - syncDownFileContent = importStatement + '\n' + syncDownFileContent; + if (!syncServiceMapperFileContent.contains(importStatement)) { + syncServiceMapperFileContent = + importStatement + '\n' + syncServiceMapperFileContent; print('The import statement was added to sync_down.dart.'); } else { print('The import statement already exists in sync_down.dart.'); } // Insert the new case statements - if (!syncDownFileContent.contains('DataModelType.stock') && - !syncDownFileContent.contains('DataModelType.stockReconciliation')) { + if (!syncServiceMapperFileContent.contains('DataModelType.stock') && + !syncServiceMapperFileContent + .contains('DataModelType.stockReconciliation')) { // Find the position to insert the new cases within the switch statement - var switchIndex = - syncDownFileContent.indexOf('switch (typeGroupedEntity.key) {'); + var switchIndex = syncServiceMapperFileContent + .indexOf('switch (typeGroupedEntity.key) {'); if (switchIndex != -1) { var caseInsertionIndex = - syncDownFileContent.indexOf('default:', switchIndex); + syncServiceMapperFileContent.indexOf('default:', switchIndex); if (caseInsertionIndex != -1) { - syncDownFileContent = - syncDownFileContent.substring(0, caseInsertionIndex) + + syncServiceMapperFileContent = + syncServiceMapperFileContent.substring(0, caseInsertionIndex) + newCases + '\n' + - syncDownFileContent.substring(caseInsertionIndex); + syncServiceMapperFileContent.substring(caseInsertionIndex); print('The new cases were added to sync_down.dart.'); // Write the updated content back to the file - syncDownFile.writeAsStringSync(syncDownFileContent); + syncServiceMapperFile.writeAsStringSync(syncServiceMapperFileContent); } else { print( 'Error: Could not find the default case in the switch statement in sync_down.dart.'); From 2fc523b48ee12ae90a3850d5c5b53f76f4803a65 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Tue, 18 Jun 2024 10:20:54 +0530 Subject: [PATCH 028/241] HLM-6246 fix added permissions for data sync --- .../android/app/src/main/AndroidManifest.xml | 4 ++++ .../pages/beneficiary_registration/household_location.dart | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml b/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml index 0adfdeff4..4ba7b8263 100644 --- a/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml +++ b/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml @@ -2,6 +2,7 @@ package="com.digit.hcm"> + @@ -57,6 +58,9 @@ + (value: addressModel?.latitude, validators: [ - Validators.min(2), + Validators.minLength(2), ]), _lngKey: FormControl( value: addressModel?.longitude, From ce06249c27705f09af89f320738c219ac35502bc Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Tue, 18 Jun 2024 10:51:39 +0530 Subject: [PATCH 029/241] updated dart_mappable_builder to latest version updated hcm and packages version to latest dart_mappable_builder and generated mappers for the new version dart analyze issue fixes --- .../android/app/src/main/AndroidManifest.xml | 6 +- .../lib/models/downsync/downsync.mapper.dart | 20 ++-- .../additional_fields_type.mapper.dart | 2 +- .../entities/mdms_master_enums.mapper.dart | 2 +- .../entities/mdms_module_enums.mapper.dart | 2 +- .../lib/models/entities/roles.mapper.dart | 2 +- .../models/entities/roles_type.mapper.dart | 2 +- .../models/entities/scanner_type.mapper.dart | 2 +- .../lib/models/entities/status.mapper.dart | 2 +- .../lib/utils/utils.dart | 4 +- .../header/back_navigation_help_header.dart | 4 +- .../pubspec.lock | 11 +-- .../pubspec.yaml | 2 +- .../lib/blocs/attendance_individual_bloc.dart | 4 +- .../entities/attendance_log.mapper.dart | 14 +-- .../entities/attendance_register.mapper.dart | 14 +-- .../lib/models/entities/attendee.mapper.dart | 20 ++-- .../models/entities/enum_values.mapper.dart | 2 +- .../entities/register_status.mapper.dart | 2 +- .../lib/models/entities/staff.mapper.dart | 20 ++-- packages/attendance_management/pubspec.lock | 16 ++-- packages/attendance_management/pubspec.yaml | 15 ++- packages/dart_mappable_builder/CHANGELOG.md | 15 ++- .../lib/src/builders/mappable_builder.dart | 2 +- .../src/generators/mixins/decoding_mixin.dart | 2 +- .../src/generators/mixins/equals_mixin.dart | 5 +- packages/dart_mappable_builder/pubspec.yaml | 4 +- .../test/utils/temp_asset_writer.dart | 2 +- .../digit_data_model/lib/blocs/user/user.dart | 2 +- .../lib/data/repositories/local/facility.dart | 3 - .../repositories/local/project_staff.dart | 5 +- .../data/repositories/remote/attributes.dart | 1 - .../lib/data/repositories/remote/product.dart | 2 - .../repositories/remote/project_staff.dart | 2 - .../lib/data/repositories/remote/service.dart | 1 - .../remote/service_attributes.dart | 1 - .../remote/service_definition.dart | 1 - .../lib/data/repositories/remote/user.dart | 2 - .../lib/data_model.mapper.dart | 20 ++-- .../lib/models/entities/address.dart | 1 - .../lib/models/entities/address.mapper.dart | 20 ++-- .../models/entities/address_type.mapper.dart | 2 +- .../lib/models/entities/attributes.dart | 3 - .../models/entities/attributes.mapper.dart | 20 ++-- .../entities/beneficiary_type.mapper.dart | 2 +- .../models/entities/blood_group.mapper.dart | 2 +- .../lib/models/entities/boundary.mapper.dart | 14 +-- .../lib/models/entities/document.dart | 3 - .../lib/models/entities/document.mapper.dart | 20 ++-- .../lib/models/entities/facility.dart | 3 - .../lib/models/entities/facility.mapper.dart | 20 ++-- .../lib/models/entities/gender.mapper.dart | 2 +- .../lib/models/entities/identifier.dart | 3 - .../models/entities/identifier.mapper.dart | 20 ++-- .../lib/models/entities/individual.dart | 3 - .../models/entities/individual.mapper.dart | 20 ++-- .../lib/models/entities/locality.dart | 1 - .../lib/models/entities/locality.mapper.dart | 20 ++-- .../lib/models/entities/name.dart | 3 - .../lib/models/entities/name.mapper.dart | 20 ++-- .../lib/models/entities/product.mapper.dart | 20 ++-- .../lib/models/entities/product_variant.dart | 3 - .../entities/product_variant.mapper.dart | 20 ++-- .../lib/models/entities/project.dart | 1 - .../lib/models/entities/project.mapper.dart | 26 ++--- .../entities/project_facility.mapper.dart | 20 ++-- .../entities/project_product_variant.dart | 3 - .../project_product_variant.mapper.dart | 21 ++--- .../entities/project_resource.mapper.dart | 20 ++-- .../lib/models/entities/project_staff.dart | 1 - .../models/entities/project_staff.mapper.dart | 20 ++-- .../models/entities/project_type.mapper.dart | 38 +++----- .../lib/models/entities/service.dart | 3 - .../lib/models/entities/service.mapper.dart | 20 ++-- .../models/entities/service_attributes.dart | 31 +++--- .../entities/service_attributes.mapper.dart | 21 ++--- .../models/entities/service_definition.dart | 4 - .../entities/service_definition.mapper.dart | 21 ++--- .../lib/models/entities/target.dart | 1 - .../lib/models/entities/target.mapper.dart | 20 ++-- .../lib/models/entities/user.mapper.dart | 20 ++-- .../lib/models/oplog/oplog_entry.mapper.dart | 14 +-- .../pgr_complaints/pgr_address.mapper.dart | 14 +-- .../pgr_complaints/pgr_complaints.mapper.dart | 56 ++++------- .../pgr_complaints_response.mapper.dart | 26 ++--- packages/digit_data_model/pubspec.lock | 2 +- .../lib/models/entities/stock.mapper.dart | 20 ++-- .../entities/stock_reconciliation.mapper.dart | 21 ++--- .../entities/transaction_reason.mapper.dart | 2 +- .../entities/transaction_type.mapper.dart | 2 +- .../lib/pages/reports/report_details.dart | 94 +++++++------------ .../stock_reconciliation.dart | 1 - .../inventory_management/lib/utils/utils.dart | 1 - packages/inventory_management/pubspec.lock | 2 +- packages/inventory_management/pubspec.yaml | 2 +- .../lib/blocs/referral_recon_record.dart | 26 +++-- .../search_referral_reconciliations.dart | 2 +- .../entities/hf_additional_fields.mapper.dart | 2 +- .../models/entities/hf_referral.mapper.dart | 20 ++-- .../entities/referral_recon_enums.mapper.dart | 2 +- .../record_referral_details.dart | 60 +++++------- .../project_facility_selection.dart | 2 +- .../referral_reconciliation_router.dart | 2 - .../widgets/back_navigation_help_header.dart | 2 +- packages/referral_reconciliation/pubspec.lock | 6 +- packages/referral_reconciliation/pubspec.yaml | 4 +- .../search_households/proximity_search.dart | 6 +- .../search_households/search_by_head.dart | 24 ++--- .../search_households/search_households.dart | 4 +- .../search_households/tag_by_search.dart | 2 +- .../local/project_beneficiary.dart | 3 +- .../additional_fields_type.mapper.dart | 2 +- .../deliver_strategy_type.mapper.dart | 2 +- .../lib/models/entities/household.mapper.dart | 20 ++-- .../entities/household_member.mapper.dart | 20 ++-- .../entities/project_beneficiary.mapper.dart | 21 ++--- .../lib/models/entities/referral.mapper.dart | 20 ++-- .../reg_form_validations_type.mapper.dart | 2 +- .../models/entities/side_effect.mapper.dart | 20 ++-- .../lib/models/entities/status.mapper.dart | 2 +- .../lib/models/entities/task.mapper.dart | 20 ++-- .../models/entities/task_resource.mapper.dart | 20 ++-- .../lib/pages/beneficiary/side_effects.dart | 44 ++++----- .../household_location.dart | 2 +- .../lib/pages/search_beneficiary.dart | 34 ++++--- packages/registration_delivery/pubspec.lock | 9 +- packages/registration_delivery/pubspec.yaml | 2 +- 127 files changed, 543 insertions(+), 895 deletions(-) diff --git a/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml b/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml index 0adfdeff4..9a8a11bc0 100644 --- a/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml +++ b/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml @@ -2,6 +2,7 @@ package="com.digit.hcm"> + @@ -54,9 +55,10 @@ - - + logResponse, List attendees, - AttendanceIndividualLogSearchEvent event) async { + AttendanceIndividualLogSearchEvent event) async* { bool anyLogPresent = false; final currentDate = DateTime.fromMillisecondsSinceEpoch(event.currentDate); int twelvePM = @@ -291,7 +291,7 @@ class AttendanceIndividualBloc : 1); }).toList(); - emit(AttendanceIndividualState.loaded( + yield (AttendanceIndividualState.loaded( attendanceCollectionModel: attendees, viewOnly: anyLogPresent)); } diff --git a/packages/attendance_management/lib/models/entities/attendance_log.mapper.dart b/packages/attendance_management/lib/models/entities/attendance_log.mapper.dart index 8b69af9a6..adda2fee0 100644 --- a/packages/attendance_management/lib/models/entities/attendance_log.mapper.dart +++ b/packages/attendance_management/lib/models/entities/attendance_log.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'attendance_log.dart'; @@ -149,10 +149,8 @@ mixin AttendanceLogSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - AttendanceLogSearchModelMapper.ensureInitialized() - .isValueEqual(this as AttendanceLogSearchModel, other)); + return AttendanceLogSearchModelMapper.ensureInitialized() + .equalsValue(this as AttendanceLogSearchModel, other); } @override @@ -416,10 +414,8 @@ mixin AttendanceLogModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - AttendanceLogModelMapper.ensureInitialized() - .isValueEqual(this as AttendanceLogModel, other)); + return AttendanceLogModelMapper.ensureInitialized() + .equalsValue(this as AttendanceLogModel, other); } @override diff --git a/packages/attendance_management/lib/models/entities/attendance_register.mapper.dart b/packages/attendance_management/lib/models/entities/attendance_register.mapper.dart index 53331fead..ef49e4603 100644 --- a/packages/attendance_management/lib/models/entities/attendance_register.mapper.dart +++ b/packages/attendance_management/lib/models/entities/attendance_register.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'attendance_register.dart'; @@ -140,10 +140,8 @@ mixin AttendanceRegisterSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - AttendanceRegisterSearchModelMapper.ensureInitialized() - .isValueEqual(this as AttendanceRegisterSearchModel, other)); + return AttendanceRegisterSearchModelMapper.ensureInitialized() + .equalsValue(this as AttendanceRegisterSearchModel, other); } @override @@ -414,10 +412,8 @@ mixin AttendanceRegisterModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - AttendanceRegisterModelMapper.ensureInitialized() - .isValueEqual(this as AttendanceRegisterModel, other)); + return AttendanceRegisterModelMapper.ensureInitialized() + .equalsValue(this as AttendanceRegisterModel, other); } @override diff --git a/packages/attendance_management/lib/models/entities/attendee.mapper.dart b/packages/attendance_management/lib/models/entities/attendee.mapper.dart index c4f7680a5..49bd9c081 100644 --- a/packages/attendance_management/lib/models/entities/attendee.mapper.dart +++ b/packages/attendance_management/lib/models/entities/attendee.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'attendee.dart'; @@ -92,10 +92,8 @@ mixin AttendeeSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - AttendeeSearchModelMapper.ensureInitialized() - .isValueEqual(this as AttendeeSearchModel, other)); + return AttendeeSearchModelMapper.ensureInitialized() + .equalsValue(this as AttendeeSearchModel, other); } @override @@ -295,10 +293,8 @@ mixin AttendeeModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - AttendeeModelMapper.ensureInitialized() - .isValueEqual(this as AttendeeModel, other)); + return AttendeeModelMapper.ensureInitialized() + .equalsValue(this as AttendeeModel, other); } @override @@ -509,10 +505,8 @@ mixin AttendeeAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - AttendeeAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as AttendeeAdditionalFields, other)); + return AttendeeAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as AttendeeAdditionalFields, other); } @override diff --git a/packages/attendance_management/lib/models/entities/enum_values.mapper.dart b/packages/attendance_management/lib/models/entities/enum_values.mapper.dart index 5dc0405f8..2a047a51f 100644 --- a/packages/attendance_management/lib/models/entities/enum_values.mapper.dart +++ b/packages/attendance_management/lib/models/entities/enum_values.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'enum_values.dart'; diff --git a/packages/attendance_management/lib/models/entities/register_status.mapper.dart b/packages/attendance_management/lib/models/entities/register_status.mapper.dart index 159b11caf..476d9bfd6 100644 --- a/packages/attendance_management/lib/models/entities/register_status.mapper.dart +++ b/packages/attendance_management/lib/models/entities/register_status.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'register_status.dart'; diff --git a/packages/attendance_management/lib/models/entities/staff.mapper.dart b/packages/attendance_management/lib/models/entities/staff.mapper.dart index 299ed1d01..134b80c4b 100644 --- a/packages/attendance_management/lib/models/entities/staff.mapper.dart +++ b/packages/attendance_management/lib/models/entities/staff.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'staff.dart'; @@ -97,10 +97,8 @@ mixin StaffSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - StaffSearchModelMapper.ensureInitialized() - .isValueEqual(this as StaffSearchModel, other)); + return StaffSearchModelMapper.ensureInitialized() + .equalsValue(this as StaffSearchModel, other); } @override @@ -290,10 +288,8 @@ mixin StaffModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - StaffModelMapper.ensureInitialized() - .isValueEqual(this as StaffModel, other)); + return StaffModelMapper.ensureInitialized() + .equalsValue(this as StaffModel, other); } @override @@ -492,10 +488,8 @@ mixin StaffAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - StaffAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as StaffAdditionalFields, other)); + return StaffAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as StaffAdditionalFields, other); } @override diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index 62623c661..b3beb198b 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -263,7 +263,7 @@ packages: path: "../dart_mappable_builder" relative: true source: path - version: "4.2.0" + version: "4.2.3" dart_style: dependency: transitive description: @@ -320,7 +320,7 @@ packages: source: hosted version: "2.18.0" drift_db_viewer: - dependency: transitive + dependency: "direct main" description: name: drift_db_viewer sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" @@ -492,7 +492,7 @@ packages: source: sdk version: "0.0.0" fluttertoast: - dependency: transitive + dependency: "direct main" description: name: fluttertoast sha256: "7eae679e596a44fdf761853a706f74979f8dd3cd92cf4e23cae161fda091b847" @@ -764,7 +764,7 @@ packages: source: hosted version: "2.0.2" overlay_builder: - dependency: transitive + dependency: "direct main" description: name: overlay_builder sha256: "58b97bc5f67a2e2bb7006dd88e697ac757dfffc9dbd1e7dfc1917fb510a4b5c8" @@ -796,7 +796,7 @@ packages: source: hosted version: "3.0.0" path: - dependency: transitive + dependency: "direct main" description: name: path sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" @@ -812,7 +812,7 @@ packages: source: hosted version: "1.0.1" path_provider: - dependency: transitive + dependency: "direct main" description: name: path_provider sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 @@ -932,7 +932,7 @@ packages: source: hosted version: "2.1.1" reactive_forms: - dependency: transitive + dependency: "direct main" description: name: reactive_forms sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" @@ -1041,7 +1041,7 @@ packages: source: hosted version: "2.4.3" sqlite3_flutter_libs: - dependency: transitive + dependency: "direct main" description: name: sqlite3_flutter_libs sha256: "9f89a7e7dc36eac2035808427eba1c3fbd79e59c3a22093d8dace6d36b1fe89e" diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index 9297b14c1..4842c7ae9 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -1,6 +1,6 @@ name: attendance_management -description: Digit UI attendance_management specification -version: 1.0.0+1 +description: Digit UI attendance management specification - This tool is designed for tracking user attendance with customizable session counts per day. +version: 1.0.0+2 homepage: "https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/attendance_management" repository: "https://github.com/egovernments/health-campaign-field-worker-app" @@ -19,10 +19,17 @@ dependencies: dart_mappable: ^4.2.2 drift: ^2.18.0 auto_route: ^8.1.3 - digit_data_model: ^1.0.1 collection: ^1.18.0 dio: ^5.4.3+1 location: ^6.0.2 + reactive_forms: ^17.0.0 + fluttertoast: ^8.1.2 + overlay_builder: ^1.1.0 + sqlite3_flutter_libs: ^0.5.10 + path_provider: ^2.0.11 + path: ^1.8.2 + drift_db_viewer: ^2.0.0 + digit_data_model: ^1.0.1 dev_dependencies: flutter_test: @@ -34,7 +41,7 @@ dev_dependencies: build_runner: ^2.4.11 bloc_test: ^9.1.0 mocktail: ^1.0.2 - dart_mappable_builder: ^4.2.0 + dart_mappable_builder: ^4.2.2 drift_dev: ^2.18.0 auto_route_generator: 8.0.0 diff --git a/packages/dart_mappable_builder/CHANGELOG.md b/packages/dart_mappable_builder/CHANGELOG.md index f7193e5e2..3a56b9e64 100644 --- a/packages/dart_mappable_builder/CHANGELOG.md +++ b/packages/dart_mappable_builder/CHANGELOG.md @@ -1,3 +1,16 @@ +# 4.2.3 + +- Added lint ignores for 'override_on_non_overriding_member'. + +# 4.2.2 + +- Fixed issues with adding unnecessary '__type' property for nullable generics. +- Improved serialization consistency and equality handling. + +# 4.2.1 + +- Performance improvements. + # 4.2.0 - Added custom typedef for mapping fields to resolve naming conflict. @@ -16,7 +29,7 @@ # 4.0.1 - Added support for generic typed parameters for deep copyWith. -- Added lint ignores for 'unnecessary_cast', 'strict_raw_type' and 'inference_failure_on_untyped_parameter' +- Added lint ignores for 'unnecessary_cast', 'strict_raw_type' and 'inference_failure_on_untyped_parameter'. # 4.0.0 diff --git a/packages/dart_mappable_builder/lib/src/builders/mappable_builder.dart b/packages/dart_mappable_builder/lib/src/builders/mappable_builder.dart index 7948974c0..b9ea0c084 100644 --- a/packages/dart_mappable_builder/lib/src/builders/mappable_builder.dart +++ b/packages/dart_mappable_builder/lib/src/builders/mappable_builder.dart @@ -101,7 +101,7 @@ class MappableBuilder implements Builder { '// coverage:ignore-file\n' '// GENERATED CODE - DO NOT MODIFY BY HAND\n' '// ignore_for_file: type=lint\n' - '// ignore_for_file: unused_element, unnecessary_cast\n' + '// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member\n' '// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter\n\n' 'part of \'$libraryPath\';\n\n' '${output.join('\n\n')}\n' //, diff --git a/packages/dart_mappable_builder/lib/src/generators/mixins/decoding_mixin.dart b/packages/dart_mappable_builder/lib/src/generators/mixins/decoding_mixin.dart index 33999abab..0a0948d3a 100644 --- a/packages/dart_mappable_builder/lib/src/generators/mixins/decoding_mixin.dart +++ b/packages/dart_mappable_builder/lib/src/generators/mixins/decoding_mixin.dart @@ -74,7 +74,7 @@ mixin DecodingMixin on MapperGenerator { output.write(''' @override DecodingContext inherit(DecodingContext context) { - return context.inherit(args: [${args.join(', ')}]); + return context.inherit(args: () => [${args.join(', ')}]); } '''); } diff --git a/packages/dart_mappable_builder/lib/src/generators/mixins/equals_mixin.dart b/packages/dart_mappable_builder/lib/src/generators/mixins/equals_mixin.dart index 6bf327061..245661e15 100644 --- a/packages/dart_mappable_builder/lib/src/generators/mixins/equals_mixin.dart +++ b/packages/dart_mappable_builder/lib/src/generators/mixins/equals_mixin.dart @@ -12,10 +12,7 @@ mixin EqualsMixin on MapperGenerator { return ''' @override bool operator ==(Object other) { - return identical(this, other) || ( - runtimeType == other.runtimeType && - ${element.mapperName}.ensureInitialized().isValueEqual(this as ${element.selfTypeParam}, other) - ); + return ${element.mapperName}.ensureInitialized().equalsValue(this as ${element.selfTypeParam}, other); } @override diff --git a/packages/dart_mappable_builder/pubspec.yaml b/packages/dart_mappable_builder/pubspec.yaml index e9060e895..fd1a7e646 100644 --- a/packages/dart_mappable_builder/pubspec.yaml +++ b/packages/dart_mappable_builder/pubspec.yaml @@ -1,6 +1,6 @@ name: dart_mappable_builder description: Improved json serialization and data classes with full support for generics, inheritance, customization and more. -version: 4.2.0 +version: 4.2.3 repository: https://github.com/schultek/dart_mappable issue_tracker: https://github.com/schultek/dart_mappable/issues funding: @@ -14,7 +14,7 @@ dependencies: ansicolor: ^2.0.1 build: ^2.0.0 collection: ^1.15.0 - dart_mappable: ^4.2.0 + dart_mappable: ^4.2.2 dart_style: ^2.2.4 glob: ^2.1.0 path: ^1.8.0 diff --git a/packages/dart_mappable_builder/test/utils/temp_asset_writer.dart b/packages/dart_mappable_builder/test/utils/temp_asset_writer.dart index d16954bf0..4e0a02a5f 100644 --- a/packages/dart_mappable_builder/test/utils/temp_asset_writer.dart +++ b/packages/dart_mappable_builder/test/utils/temp_asset_writer.dart @@ -46,7 +46,7 @@ class TempAssetWriter implements RecordingAssetWriter { } Stream _run(String code) async* { - var main = File(path.join(dir.path, 'lib/digit_scanner.dart')); + var main = File(path.join(dir.path, 'lib/main.dart')); main.writeAsStringSync(code); diff --git a/packages/digit_data_model/lib/blocs/user/user.dart b/packages/digit_data_model/lib/blocs/user/user.dart index bec64e861..9ecb49728 100644 --- a/packages/digit_data_model/lib/blocs/user/user.dart +++ b/packages/digit_data_model/lib/blocs/user/user.dart @@ -52,7 +52,7 @@ class UserBloc extends Bloc { final results = entityList.map((e) => UserModelMapper.fromMap(e)).toList(); emit(UserState.user(userModel: results.first)); - } on DioError catch (error) { + } on DioException catch (error) { // [TODO]- Need to create a model mapper for error; final String errorCode = error.response?.data['Errors'][0]['code']; emit(UserErrorState(errorCode)); diff --git a/packages/digit_data_model/lib/data/repositories/local/facility.dart b/packages/digit_data_model/lib/data/repositories/local/facility.dart index 4bc649d8d..a28835d24 100644 --- a/packages/digit_data_model/lib/data/repositories/local/facility.dart +++ b/packages/digit_data_model/lib/data/repositories/local/facility.dart @@ -1,11 +1,8 @@ import 'dart:async'; import 'package:digit_data_model/data_model.dart'; -import 'package:digit_data_model/models/oplog/oplog_entry.dart'; import 'package:drift/drift.dart'; -import '../../../utils/utils.dart'; - class FacilityLocalRepository extends LocalRepository { FacilityLocalRepository(super.sql, super.opLogManager); diff --git a/packages/digit_data_model/lib/data/repositories/local/project_staff.dart b/packages/digit_data_model/lib/data/repositories/local/project_staff.dart index ade18df85..7728a9138 100644 --- a/packages/digit_data_model/lib/data/repositories/local/project_staff.dart +++ b/packages/digit_data_model/lib/data/repositories/local/project_staff.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; +import 'package:flutter/foundation.dart'; class ProjectStaffLocalRepository extends LocalRepository { @@ -28,7 +29,9 @@ class ProjectStaffLocalRepository createOpLog: createOpLog, ); } catch (e) { - print('Error creating project staff table: $e'); + if (kDebugMode) { + print('Error creating project staff table: $e'); + } } } diff --git a/packages/digit_data_model/lib/data/repositories/remote/attributes.dart b/packages/digit_data_model/lib/data/repositories/remote/attributes.dart index 2f4ceb4b0..7e6179356 100644 --- a/packages/digit_data_model/lib/data/repositories/remote/attributes.dart +++ b/packages/digit_data_model/lib/data/repositories/remote/attributes.dart @@ -1,7 +1,6 @@ // Generated using mason. Do not modify by hand import 'package:digit_data_model/data_model.dart'; -import '../../../models/entities/attributes.dart'; class AttributesRemoteRepository extends RemoteRepository { AttributesRemoteRepository( diff --git a/packages/digit_data_model/lib/data/repositories/remote/product.dart b/packages/digit_data_model/lib/data/repositories/remote/product.dart index e36138872..90ad1d2a6 100644 --- a/packages/digit_data_model/lib/data/repositories/remote/product.dart +++ b/packages/digit_data_model/lib/data/repositories/remote/product.dart @@ -2,8 +2,6 @@ import 'package:digit_data_model/data_model.dart'; -import '../../../models/entities/product.dart'; - class ProductRemoteRepository extends RemoteRepository { ProductRemoteRepository( diff --git a/packages/digit_data_model/lib/data/repositories/remote/project_staff.dart b/packages/digit_data_model/lib/data/repositories/remote/project_staff.dart index 671dcba84..4d6a30046 100644 --- a/packages/digit_data_model/lib/data/repositories/remote/project_staff.dart +++ b/packages/digit_data_model/lib/data/repositories/remote/project_staff.dart @@ -2,8 +2,6 @@ import 'package:digit_data_model/data_model.dart'; -import '../../../models/entities/project_staff.dart'; - class ProjectStaffRemoteRepository extends RemoteRepository { ProjectStaffRemoteRepository( diff --git a/packages/digit_data_model/lib/data/repositories/remote/service.dart b/packages/digit_data_model/lib/data/repositories/remote/service.dart index dc2a937cb..d1b71fce3 100644 --- a/packages/digit_data_model/lib/data/repositories/remote/service.dart +++ b/packages/digit_data_model/lib/data/repositories/remote/service.dart @@ -1,7 +1,6 @@ // Generated using mason. Do not modify by hand import 'package:digit_data_model/data_model.dart'; -import '../../../models/entities/service.dart'; class ServiceRemoteRepository extends RemoteRepository { ServiceRemoteRepository( diff --git a/packages/digit_data_model/lib/data/repositories/remote/service_attributes.dart b/packages/digit_data_model/lib/data/repositories/remote/service_attributes.dart index b3ec8a608..d6404775c 100644 --- a/packages/digit_data_model/lib/data/repositories/remote/service_attributes.dart +++ b/packages/digit_data_model/lib/data/repositories/remote/service_attributes.dart @@ -1,7 +1,6 @@ // Generated using mason. Do not modify by hand import 'package:digit_data_model/data_model.dart'; -import '../../../models/entities/service_attributes.dart'; class ServiceAttributesRemoteRepository extends RemoteRepository { ServiceAttributesRemoteRepository( diff --git a/packages/digit_data_model/lib/data/repositories/remote/service_definition.dart b/packages/digit_data_model/lib/data/repositories/remote/service_definition.dart index 24d69707b..0b1c4efbc 100644 --- a/packages/digit_data_model/lib/data/repositories/remote/service_definition.dart +++ b/packages/digit_data_model/lib/data/repositories/remote/service_definition.dart @@ -1,7 +1,6 @@ // Generated using mason. Do not modify by hand import 'package:digit_data_model/data_model.dart'; -import '../../../models/entities/service_definition.dart'; class ServiceDefinitionRemoteRepository extends RemoteRepository { ServiceDefinitionRemoteRepository( diff --git a/packages/digit_data_model/lib/data/repositories/remote/user.dart b/packages/digit_data_model/lib/data/repositories/remote/user.dart index e22f40b43..25b5182af 100644 --- a/packages/digit_data_model/lib/data/repositories/remote/user.dart +++ b/packages/digit_data_model/lib/data/repositories/remote/user.dart @@ -2,8 +2,6 @@ import 'package:digit_data_model/data_model.dart'; -import '../../../models/entities/user.dart'; - class UserRemoteRepository extends RemoteRepository { UserRemoteRepository( diff --git a/packages/digit_data_model/lib/data_model.mapper.dart b/packages/digit_data_model/lib/data_model.mapper.dart index e4376db08..6e29b4079 100644 --- a/packages/digit_data_model/lib/data_model.mapper.dart +++ b/packages/digit_data_model/lib/data_model.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'data_model.dart'; @@ -194,10 +194,8 @@ mixin AdditionalFieldMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - AdditionalFieldMapper.ensureInitialized() - .isValueEqual(this as AdditionalField, other)); + return AdditionalFieldMapper.ensureInitialized() + .equalsValue(this as AdditionalField, other); } @override @@ -317,10 +315,8 @@ mixin AuditDetailsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - AuditDetailsMapper.ensureInitialized() - .isValueEqual(this as AuditDetails, other)); + return AuditDetailsMapper.ensureInitialized() + .equalsValue(this as AuditDetails, other); } @override @@ -458,10 +454,8 @@ mixin ClientAuditDetailsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ClientAuditDetailsMapper.ensureInitialized() - .isValueEqual(this as ClientAuditDetails, other)); + return ClientAuditDetailsMapper.ensureInitialized() + .equalsValue(this as ClientAuditDetails, other); } @override diff --git a/packages/digit_data_model/lib/models/entities/address.dart b/packages/digit_data_model/lib/models/entities/address.dart index 9c88211c2..b704c2204 100644 --- a/packages/digit_data_model/lib/models/entities/address.dart +++ b/packages/digit_data_model/lib/models/entities/address.dart @@ -2,7 +2,6 @@ import 'package:dart_mappable/dart_mappable.dart'; import 'package:drift/drift.dart'; -import '../../data/local_store/sql_store/sql_store.dart'; import '../../data_model.dart'; import 'address_type.dart'; diff --git a/packages/digit_data_model/lib/models/entities/address.mapper.dart b/packages/digit_data_model/lib/models/entities/address.mapper.dart index 89fcaaa67..28507a4cd 100644 --- a/packages/digit_data_model/lib/models/entities/address.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/address.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'address.dart'; @@ -123,10 +123,8 @@ mixin AddressSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - AddressSearchModelMapper.ensureInitialized() - .isValueEqual(this as AddressSearchModel, other)); + return AddressSearchModelMapper.ensureInitialized() + .equalsValue(this as AddressSearchModel, other); } @override @@ -290,10 +288,8 @@ mixin AddressAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - AddressAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as AddressAdditionalFields, other)); + return AddressAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as AddressAdditionalFields, other); } @override @@ -546,10 +542,8 @@ mixin AddressModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - AddressModelMapper.ensureInitialized() - .isValueEqual(this as AddressModel, other)); + return AddressModelMapper.ensureInitialized() + .equalsValue(this as AddressModel, other); } @override diff --git a/packages/digit_data_model/lib/models/entities/address_type.mapper.dart b/packages/digit_data_model/lib/models/entities/address_type.mapper.dart index 38b8d7007..6b1f6bee8 100644 --- a/packages/digit_data_model/lib/models/entities/address_type.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/address_type.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'address_type.dart'; diff --git a/packages/digit_data_model/lib/models/entities/attributes.dart b/packages/digit_data_model/lib/models/entities/attributes.dart index 9bbf3b6d4..ea081ea22 100644 --- a/packages/digit_data_model/lib/models/entities/attributes.dart +++ b/packages/digit_data_model/lib/models/entities/attributes.dart @@ -1,11 +1,8 @@ // Generated using mason. Do not modify by hand import 'package:dart_mappable/dart_mappable.dart'; import 'package:drift/drift.dart'; - import 'package:digit_data_model/data_model.dart'; -import '../../data/local_store/sql_store/sql_store.dart'; - part 'attributes.mapper.dart'; @MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) diff --git a/packages/digit_data_model/lib/models/entities/attributes.mapper.dart b/packages/digit_data_model/lib/models/entities/attributes.mapper.dart index 48d5f0b92..c0923de41 100644 --- a/packages/digit_data_model/lib/models/entities/attributes.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/attributes.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'attributes.dart'; @@ -136,10 +136,8 @@ mixin AttributesSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - AttributesSearchModelMapper.ensureInitialized() - .isValueEqual(this as AttributesSearchModel, other)); + return AttributesSearchModelMapper.ensureInitialized() + .equalsValue(this as AttributesSearchModel, other); } @override @@ -381,10 +379,8 @@ mixin AttributesModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - AttributesModelMapper.ensureInitialized() - .isValueEqual(this as AttributesModel, other)); + return AttributesModelMapper.ensureInitialized() + .equalsValue(this as AttributesModel, other); } @override @@ -612,10 +608,8 @@ mixin AttributesAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - AttributesAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as AttributesAdditionalFields, other)); + return AttributesAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as AttributesAdditionalFields, other); } @override diff --git a/packages/digit_data_model/lib/models/entities/beneficiary_type.mapper.dart b/packages/digit_data_model/lib/models/entities/beneficiary_type.mapper.dart index 76e592df1..349f9b2d5 100644 --- a/packages/digit_data_model/lib/models/entities/beneficiary_type.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/beneficiary_type.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'beneficiary_type.dart'; diff --git a/packages/digit_data_model/lib/models/entities/blood_group.mapper.dart b/packages/digit_data_model/lib/models/entities/blood_group.mapper.dart index 733eba168..32f4c16b5 100644 --- a/packages/digit_data_model/lib/models/entities/blood_group.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/blood_group.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'blood_group.dart'; diff --git a/packages/digit_data_model/lib/models/entities/boundary.mapper.dart b/packages/digit_data_model/lib/models/entities/boundary.mapper.dart index 8c97c5c8b..2032b0d27 100644 --- a/packages/digit_data_model/lib/models/entities/boundary.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/boundary.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'boundary.dart'; @@ -127,10 +127,8 @@ mixin BoundarySearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - BoundarySearchModelMapper.ensureInitialized() - .isValueEqual(this as BoundarySearchModel, other)); + return BoundarySearchModelMapper.ensureInitialized() + .equalsValue(this as BoundarySearchModel, other); } @override @@ -361,10 +359,8 @@ mixin BoundaryModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - BoundaryModelMapper.ensureInitialized() - .isValueEqual(this as BoundaryModel, other)); + return BoundaryModelMapper.ensureInitialized() + .equalsValue(this as BoundaryModel, other); } @override diff --git a/packages/digit_data_model/lib/models/entities/document.dart b/packages/digit_data_model/lib/models/entities/document.dart index 81f253c85..ce00e17c0 100644 --- a/packages/digit_data_model/lib/models/entities/document.dart +++ b/packages/digit_data_model/lib/models/entities/document.dart @@ -1,11 +1,8 @@ // Generated using mason. Do not modify by hand import 'package:dart_mappable/dart_mappable.dart'; import 'package:drift/drift.dart'; - import 'package:digit_data_model/data_model.dart'; -import '../../data/local_store/sql_store/sql_store.dart'; - part 'document.mapper.dart'; @MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) diff --git a/packages/digit_data_model/lib/models/entities/document.mapper.dart b/packages/digit_data_model/lib/models/entities/document.mapper.dart index eee399a0a..35b3ded04 100644 --- a/packages/digit_data_model/lib/models/entities/document.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/document.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'document.dart'; @@ -101,10 +101,8 @@ mixin DocumentSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - DocumentSearchModelMapper.ensureInitialized() - .isValueEqual(this as DocumentSearchModel, other)); + return DocumentSearchModelMapper.ensureInitialized() + .equalsValue(this as DocumentSearchModel, other); } @override @@ -306,10 +304,8 @@ mixin DocumentModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - DocumentModelMapper.ensureInitialized() - .isValueEqual(this as DocumentModel, other)); + return DocumentModelMapper.ensureInitialized() + .equalsValue(this as DocumentModel, other); } @override @@ -511,10 +507,8 @@ mixin DocumentAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - DocumentAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as DocumentAdditionalFields, other)); + return DocumentAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as DocumentAdditionalFields, other); } @override diff --git a/packages/digit_data_model/lib/models/entities/facility.dart b/packages/digit_data_model/lib/models/entities/facility.dart index cc2347c48..214550c49 100644 --- a/packages/digit_data_model/lib/models/entities/facility.dart +++ b/packages/digit_data_model/lib/models/entities/facility.dart @@ -1,11 +1,8 @@ // Generated using mason. Do not modify by hand import 'package:dart_mappable/dart_mappable.dart'; import 'package:drift/drift.dart'; - import 'package:digit_data_model/data_model.dart'; -import '../../data/local_store/sql_store/sql_store.dart'; - part 'facility.mapper.dart'; @MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) diff --git a/packages/digit_data_model/lib/models/entities/facility.mapper.dart b/packages/digit_data_model/lib/models/entities/facility.mapper.dart index 1ef9e0118..d36b12e3c 100644 --- a/packages/digit_data_model/lib/models/entities/facility.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/facility.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'facility.dart'; @@ -115,10 +115,8 @@ mixin FacilitySearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - FacilitySearchModelMapper.ensureInitialized() - .isValueEqual(this as FacilitySearchModel, other)); + return FacilitySearchModelMapper.ensureInitialized() + .equalsValue(this as FacilitySearchModel, other); } @override @@ -327,10 +325,8 @@ mixin FacilityModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - FacilityModelMapper.ensureInitialized() - .isValueEqual(this as FacilityModel, other)); + return FacilityModelMapper.ensureInitialized() + .equalsValue(this as FacilityModel, other); } @override @@ -535,10 +531,8 @@ mixin FacilityAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - FacilityAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as FacilityAdditionalFields, other)); + return FacilityAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as FacilityAdditionalFields, other); } @override diff --git a/packages/digit_data_model/lib/models/entities/gender.mapper.dart b/packages/digit_data_model/lib/models/entities/gender.mapper.dart index 36baec89d..c74bca2e7 100644 --- a/packages/digit_data_model/lib/models/entities/gender.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/gender.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'gender.dart'; diff --git a/packages/digit_data_model/lib/models/entities/identifier.dart b/packages/digit_data_model/lib/models/entities/identifier.dart index a9535705a..7f1bef489 100644 --- a/packages/digit_data_model/lib/models/entities/identifier.dart +++ b/packages/digit_data_model/lib/models/entities/identifier.dart @@ -1,11 +1,8 @@ // Generated using mason. Do not modify by hand import 'package:dart_mappable/dart_mappable.dart'; import 'package:drift/drift.dart'; - import 'package:digit_data_model/data_model.dart'; -import '../../data/local_store/sql_store/sql_store.dart'; - part 'identifier.mapper.dart'; @MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) class IdentifierSearchModel extends EntitySearchModel with IdentifierSearchModelMappable { diff --git a/packages/digit_data_model/lib/models/entities/identifier.mapper.dart b/packages/digit_data_model/lib/models/entities/identifier.mapper.dart index bf319ec4c..558e5b5d7 100644 --- a/packages/digit_data_model/lib/models/entities/identifier.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/identifier.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'identifier.dart'; @@ -117,10 +117,8 @@ mixin IdentifierSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - IdentifierSearchModelMapper.ensureInitialized() - .isValueEqual(this as IdentifierSearchModel, other)); + return IdentifierSearchModelMapper.ensureInitialized() + .equalsValue(this as IdentifierSearchModel, other); } @override @@ -332,10 +330,8 @@ mixin IdentifierModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - IdentifierModelMapper.ensureInitialized() - .isValueEqual(this as IdentifierModel, other)); + return IdentifierModelMapper.ensureInitialized() + .equalsValue(this as IdentifierModel, other); } @override @@ -537,10 +533,8 @@ mixin IdentifierAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - IdentifierAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as IdentifierAdditionalFields, other)); + return IdentifierAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as IdentifierAdditionalFields, other); } @override diff --git a/packages/digit_data_model/lib/models/entities/individual.dart b/packages/digit_data_model/lib/models/entities/individual.dart index 2da1478ed..53178d784 100644 --- a/packages/digit_data_model/lib/models/entities/individual.dart +++ b/packages/digit_data_model/lib/models/entities/individual.dart @@ -1,11 +1,8 @@ // Generated using mason. Do not modify by hand import 'package:dart_mappable/dart_mappable.dart'; import 'package:drift/drift.dart'; - import 'package:digit_data_model/data_model.dart'; -import '../../data/local_store/sql_store/sql_store.dart'; - part 'individual.mapper.dart'; @MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) diff --git a/packages/digit_data_model/lib/models/entities/individual.mapper.dart b/packages/digit_data_model/lib/models/entities/individual.mapper.dart index cc22920b7..35c441d5d 100644 --- a/packages/digit_data_model/lib/models/entities/individual.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/individual.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'individual.dart'; @@ -143,10 +143,8 @@ mixin IndividualSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - IndividualSearchModelMapper.ensureInitialized() - .isValueEqual(this as IndividualSearchModel, other)); + return IndividualSearchModelMapper.ensureInitialized() + .equalsValue(this as IndividualSearchModel, other); } @override @@ -478,10 +476,8 @@ mixin IndividualModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - IndividualModelMapper.ensureInitialized() - .isValueEqual(this as IndividualModel, other)); + return IndividualModelMapper.ensureInitialized() + .equalsValue(this as IndividualModel, other); } @override @@ -759,10 +755,8 @@ mixin IndividualAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - IndividualAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as IndividualAdditionalFields, other)); + return IndividualAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as IndividualAdditionalFields, other); } @override diff --git a/packages/digit_data_model/lib/models/entities/locality.dart b/packages/digit_data_model/lib/models/entities/locality.dart index 5a1ff3997..2751a6425 100644 --- a/packages/digit_data_model/lib/models/entities/locality.dart +++ b/packages/digit_data_model/lib/models/entities/locality.dart @@ -2,7 +2,6 @@ import 'package:dart_mappable/dart_mappable.dart'; import 'package:drift/drift.dart'; -import '../../data/local_store/sql_store/sql_store.dart'; import '../../data_model.dart'; part 'locality.mapper.dart'; diff --git a/packages/digit_data_model/lib/models/entities/locality.mapper.dart b/packages/digit_data_model/lib/models/entities/locality.mapper.dart index 8aa1db256..61bd36ade 100644 --- a/packages/digit_data_model/lib/models/entities/locality.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/locality.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'locality.dart'; @@ -105,10 +105,8 @@ mixin LocalitySearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - LocalitySearchModelMapper.ensureInitialized() - .isValueEqual(this as LocalitySearchModel, other)); + return LocalitySearchModelMapper.ensureInitialized() + .equalsValue(this as LocalitySearchModel, other); } @override @@ -282,10 +280,8 @@ mixin LocalityModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - LocalityModelMapper.ensureInitialized() - .isValueEqual(this as LocalityModel, other)); + return LocalityModelMapper.ensureInitialized() + .equalsValue(this as LocalityModel, other); } @override @@ -474,10 +470,8 @@ mixin LocalityAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - LocalityAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as LocalityAdditionalFields, other)); + return LocalityAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as LocalityAdditionalFields, other); } @override diff --git a/packages/digit_data_model/lib/models/entities/name.dart b/packages/digit_data_model/lib/models/entities/name.dart index 46b582136..36285fb68 100644 --- a/packages/digit_data_model/lib/models/entities/name.dart +++ b/packages/digit_data_model/lib/models/entities/name.dart @@ -1,11 +1,8 @@ // Generated using mason. Do not modify by hand import 'package:dart_mappable/dart_mappable.dart'; import 'package:drift/drift.dart'; - import 'package:digit_data_model/data_model.dart'; -import '../../data/local_store/sql_store/sql_store.dart'; - part 'name.mapper.dart'; @MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) diff --git a/packages/digit_data_model/lib/models/entities/name.mapper.dart b/packages/digit_data_model/lib/models/entities/name.mapper.dart index a93c89a05..4e5f20855 100644 --- a/packages/digit_data_model/lib/models/entities/name.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/name.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'name.dart'; @@ -122,10 +122,8 @@ mixin NameSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - NameSearchModelMapper.ensureInitialized() - .isValueEqual(this as NameSearchModel, other)); + return NameSearchModelMapper.ensureInitialized() + .equalsValue(this as NameSearchModel, other); } @override @@ -332,10 +330,8 @@ mixin NameModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - NameModelMapper.ensureInitialized() - .isValueEqual(this as NameModel, other)); + return NameModelMapper.ensureInitialized() + .equalsValue(this as NameModel, other); } @override @@ -534,10 +530,8 @@ mixin NameAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - NameAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as NameAdditionalFields, other)); + return NameAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as NameAdditionalFields, other); } @override diff --git a/packages/digit_data_model/lib/models/entities/product.mapper.dart b/packages/digit_data_model/lib/models/entities/product.mapper.dart index 42026801f..8e54975cc 100644 --- a/packages/digit_data_model/lib/models/entities/product.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/product.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'product.dart'; @@ -119,10 +119,8 @@ mixin ProductSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProductSearchModelMapper.ensureInitialized() - .isValueEqual(this as ProductSearchModel, other)); + return ProductSearchModelMapper.ensureInitialized() + .equalsValue(this as ProductSearchModel, other); } @override @@ -354,10 +352,8 @@ mixin ProductModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProductModelMapper.ensureInitialized() - .isValueEqual(this as ProductModel, other)); + return ProductModelMapper.ensureInitialized() + .equalsValue(this as ProductModel, other); } @override @@ -559,10 +555,8 @@ mixin ProductAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProductAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as ProductAdditionalFields, other)); + return ProductAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as ProductAdditionalFields, other); } @override diff --git a/packages/digit_data_model/lib/models/entities/product_variant.dart b/packages/digit_data_model/lib/models/entities/product_variant.dart index 914beede2..c66237896 100644 --- a/packages/digit_data_model/lib/models/entities/product_variant.dart +++ b/packages/digit_data_model/lib/models/entities/product_variant.dart @@ -1,11 +1,8 @@ // Generated using mason. Do not modify by hand import 'package:dart_mappable/dart_mappable.dart'; import 'package:drift/drift.dart'; - import 'package:digit_data_model/data_model.dart'; -import '../../data/local_store/sql_store/sql_store.dart'; - part 'product_variant.mapper.dart'; @MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) diff --git a/packages/digit_data_model/lib/models/entities/product_variant.mapper.dart b/packages/digit_data_model/lib/models/entities/product_variant.mapper.dart index 3b637633d..892f9fae1 100644 --- a/packages/digit_data_model/lib/models/entities/product_variant.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/product_variant.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'product_variant.dart'; @@ -119,10 +119,8 @@ mixin ProductVariantSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProductVariantSearchModelMapper.ensureInitialized() - .isValueEqual(this as ProductVariantSearchModel, other)); + return ProductVariantSearchModelMapper.ensureInitialized() + .equalsValue(this as ProductVariantSearchModel, other); } @override @@ -342,10 +340,8 @@ mixin ProductVariantModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProductVariantModelMapper.ensureInitialized() - .isValueEqual(this as ProductVariantModel, other)); + return ProductVariantModelMapper.ensureInitialized() + .equalsValue(this as ProductVariantModel, other); } @override @@ -547,10 +543,8 @@ mixin ProductVariantAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProductVariantAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as ProductVariantAdditionalFields, other)); + return ProductVariantAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as ProductVariantAdditionalFields, other); } @override diff --git a/packages/digit_data_model/lib/models/entities/project.dart b/packages/digit_data_model/lib/models/entities/project.dart index 9a552bd9c..f1b32cc94 100644 --- a/packages/digit_data_model/lib/models/entities/project.dart +++ b/packages/digit_data_model/lib/models/entities/project.dart @@ -1,7 +1,6 @@ // Generated using mason. Do not modify by hand import 'package:dart_mappable/dart_mappable.dart'; import 'package:digit_data_model/data_model.dart'; -import 'package:digit_data_model/models/entities/project_type.dart'; import 'package:drift/drift.dart'; part 'project.mapper.dart'; diff --git a/packages/digit_data_model/lib/models/entities/project.mapper.dart b/packages/digit_data_model/lib/models/entities/project.mapper.dart index 3298e7d88..22c303986 100644 --- a/packages/digit_data_model/lib/models/entities/project.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/project.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'project.dart'; @@ -151,10 +151,8 @@ mixin ProjectSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectSearchModelMapper.ensureInitialized() - .isValueEqual(this as ProjectSearchModel, other)); + return ProjectSearchModelMapper.ensureInitialized() + .equalsValue(this as ProjectSearchModel, other); } @override @@ -448,10 +446,8 @@ mixin ProjectModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectModelMapper.ensureInitialized() - .isValueEqual(this as ProjectModel, other)); + return ProjectModelMapper.ensureInitialized() + .equalsValue(this as ProjectModel, other); } @override @@ -732,10 +728,8 @@ mixin ProjectAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as ProjectAdditionalFields, other)); + return ProjectAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as ProjectAdditionalFields, other); } @override @@ -865,10 +859,8 @@ mixin ProjectAdditionalDetailsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectAdditionalDetailsMapper.ensureInitialized() - .isValueEqual(this as ProjectAdditionalDetails, other)); + return ProjectAdditionalDetailsMapper.ensureInitialized() + .equalsValue(this as ProjectAdditionalDetails, other); } @override diff --git a/packages/digit_data_model/lib/models/entities/project_facility.mapper.dart b/packages/digit_data_model/lib/models/entities/project_facility.mapper.dart index 1b891440d..3353c030a 100644 --- a/packages/digit_data_model/lib/models/entities/project_facility.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/project_facility.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'project_facility.dart'; @@ -115,10 +115,8 @@ mixin ProjectFacilitySearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectFacilitySearchModelMapper.ensureInitialized() - .isValueEqual(this as ProjectFacilitySearchModel, other)); + return ProjectFacilitySearchModelMapper.ensureInitialized() + .equalsValue(this as ProjectFacilitySearchModel, other); } @override @@ -339,10 +337,8 @@ mixin ProjectFacilityModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectFacilityModelMapper.ensureInitialized() - .isValueEqual(this as ProjectFacilityModel, other)); + return ProjectFacilityModelMapper.ensureInitialized() + .equalsValue(this as ProjectFacilityModel, other); } @override @@ -543,10 +539,8 @@ mixin ProjectFacilityAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectFacilityAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as ProjectFacilityAdditionalFields, other)); + return ProjectFacilityAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as ProjectFacilityAdditionalFields, other); } @override diff --git a/packages/digit_data_model/lib/models/entities/project_product_variant.dart b/packages/digit_data_model/lib/models/entities/project_product_variant.dart index a1e687a51..0dd6ea6ea 100644 --- a/packages/digit_data_model/lib/models/entities/project_product_variant.dart +++ b/packages/digit_data_model/lib/models/entities/project_product_variant.dart @@ -1,11 +1,8 @@ // Generated using mason. Do not modify by hand import 'package:dart_mappable/dart_mappable.dart'; import 'package:drift/drift.dart'; - import 'package:digit_data_model/data_model.dart'; -import '../../data/local_store/sql_store/sql_store.dart'; - part 'project_product_variant.mapper.dart'; @MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) diff --git a/packages/digit_data_model/lib/models/entities/project_product_variant.mapper.dart b/packages/digit_data_model/lib/models/entities/project_product_variant.mapper.dart index dd63099a7..c19cb4a16 100644 --- a/packages/digit_data_model/lib/models/entities/project_product_variant.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/project_product_variant.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'project_product_variant.dart'; @@ -110,10 +110,8 @@ mixin ProjectProductVariantSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectProductVariantSearchModelMapper.ensureInitialized() - .isValueEqual(this as ProjectProductVariantSearchModel, other)); + return ProjectProductVariantSearchModelMapper.ensureInitialized() + .equalsValue(this as ProjectProductVariantSearchModel, other); } @override @@ -310,10 +308,8 @@ mixin ProjectProductVariantModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectProductVariantModelMapper.ensureInitialized() - .isValueEqual(this as ProjectProductVariantModel, other)); + return ProjectProductVariantModelMapper.ensureInitialized() + .equalsValue(this as ProjectProductVariantModel, other); } @override @@ -530,11 +526,8 @@ mixin ProjectProductVariantAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectProductVariantAdditionalFieldsMapper.ensureInitialized() - .isValueEqual( - this as ProjectProductVariantAdditionalFields, other)); + return ProjectProductVariantAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as ProjectProductVariantAdditionalFields, other); } @override diff --git a/packages/digit_data_model/lib/models/entities/project_resource.mapper.dart b/packages/digit_data_model/lib/models/entities/project_resource.mapper.dart index e0c425dca..a34218678 100644 --- a/packages/digit_data_model/lib/models/entities/project_resource.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/project_resource.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'project_resource.dart'; @@ -109,10 +109,8 @@ mixin ProjectResourceSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectResourceSearchModelMapper.ensureInitialized() - .isValueEqual(this as ProjectResourceSearchModel, other)); + return ProjectResourceSearchModelMapper.ensureInitialized() + .equalsValue(this as ProjectResourceSearchModel, other); } @override @@ -322,10 +320,8 @@ mixin ProjectResourceModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectResourceModelMapper.ensureInitialized() - .isValueEqual(this as ProjectResourceModel, other)); + return ProjectResourceModelMapper.ensureInitialized() + .equalsValue(this as ProjectResourceModel, other); } @override @@ -532,10 +528,8 @@ mixin ProjectResourceAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectResourceAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as ProjectResourceAdditionalFields, other)); + return ProjectResourceAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as ProjectResourceAdditionalFields, other); } @override diff --git a/packages/digit_data_model/lib/models/entities/project_staff.dart b/packages/digit_data_model/lib/models/entities/project_staff.dart index 6172bd4c4..1bb606f3c 100644 --- a/packages/digit_data_model/lib/models/entities/project_staff.dart +++ b/packages/digit_data_model/lib/models/entities/project_staff.dart @@ -1,7 +1,6 @@ // Generated using mason. Do not modify by hand import 'package:dart_mappable/dart_mappable.dart'; import 'package:drift/drift.dart'; - import 'package:digit_data_model/data_model.dart'; part 'project_staff.mapper.dart'; diff --git a/packages/digit_data_model/lib/models/entities/project_staff.mapper.dart b/packages/digit_data_model/lib/models/entities/project_staff.mapper.dart index b53029adf..892f4c054 100644 --- a/packages/digit_data_model/lib/models/entities/project_staff.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/project_staff.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'project_staff.dart'; @@ -136,10 +136,8 @@ mixin ProjectStaffSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectStaffSearchModelMapper.ensureInitialized() - .isValueEqual(this as ProjectStaffSearchModel, other)); + return ProjectStaffSearchModelMapper.ensureInitialized() + .equalsValue(this as ProjectStaffSearchModel, other); } @override @@ -391,10 +389,8 @@ mixin ProjectStaffModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectStaffModelMapper.ensureInitialized() - .isValueEqual(this as ProjectStaffModel, other)); + return ProjectStaffModelMapper.ensureInitialized() + .equalsValue(this as ProjectStaffModel, other); } @override @@ -608,10 +604,8 @@ mixin ProjectStaffAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectStaffAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as ProjectStaffAdditionalFields, other)); + return ProjectStaffAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as ProjectStaffAdditionalFields, other); } @override diff --git a/packages/digit_data_model/lib/models/entities/project_type.mapper.dart b/packages/digit_data_model/lib/models/entities/project_type.mapper.dart index 01597308f..ca2942c61 100644 --- a/packages/digit_data_model/lib/models/entities/project_type.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/project_type.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'project_type.dart'; @@ -171,10 +171,8 @@ mixin ProjectTypeModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectTypeModelMapper.ensureInitialized() - .isValueEqual(this as ProjectTypeModel, other)); + return ProjectTypeModelMapper.ensureInitialized() + .equalsValue(this as ProjectTypeModel, other); } @override @@ -450,10 +448,8 @@ mixin ProjectTypeAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectTypeAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as ProjectTypeAdditionalFields, other)); + return ProjectTypeAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as ProjectTypeAdditionalFields, other); } @override @@ -606,10 +602,8 @@ mixin ProjectCycleMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectCycleMapper.ensureInitialized() - .isValueEqual(this as ProjectCycle, other)); + return ProjectCycleMapper.ensureInitialized() + .equalsValue(this as ProjectCycle, other); } @override @@ -776,10 +770,8 @@ mixin ProjectCycleDeliveryMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectCycleDeliveryMapper.ensureInitialized() - .isValueEqual(this as ProjectCycleDelivery, other)); + return ProjectCycleDeliveryMapper.ensureInitialized() + .equalsValue(this as ProjectCycleDelivery, other); } @override @@ -946,10 +938,8 @@ mixin DeliveryDoseCriteriaMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - DeliveryDoseCriteriaMapper.ensureInitialized() - .isValueEqual(this as DeliveryDoseCriteria, other)); + return DeliveryDoseCriteriaMapper.ensureInitialized() + .equalsValue(this as DeliveryDoseCriteria, other); } @override @@ -1099,10 +1089,8 @@ mixin DeliveryProductVariantMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - DeliveryProductVariantMapper.ensureInitialized() - .isValueEqual(this as DeliveryProductVariant, other)); + return DeliveryProductVariantMapper.ensureInitialized() + .equalsValue(this as DeliveryProductVariant, other); } @override diff --git a/packages/digit_data_model/lib/models/entities/service.dart b/packages/digit_data_model/lib/models/entities/service.dart index 87eccc440..fc2aae9d0 100644 --- a/packages/digit_data_model/lib/models/entities/service.dart +++ b/packages/digit_data_model/lib/models/entities/service.dart @@ -1,11 +1,8 @@ // Generated using mason. Do not modify by hand import 'package:dart_mappable/dart_mappable.dart'; import 'package:drift/drift.dart'; - import 'package:digit_data_model/data_model.dart'; -import '../../data/local_store/sql_store/sql_store.dart'; - part 'service.mapper.dart'; @MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) diff --git a/packages/digit_data_model/lib/models/entities/service.mapper.dart b/packages/digit_data_model/lib/models/entities/service.mapper.dart index 57c1b57b3..289373d22 100644 --- a/packages/digit_data_model/lib/models/entities/service.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/service.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'service.dart'; @@ -118,10 +118,8 @@ mixin ServiceSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ServiceSearchModelMapper.ensureInitialized() - .isValueEqual(this as ServiceSearchModel, other)); + return ServiceSearchModelMapper.ensureInitialized() + .equalsValue(this as ServiceSearchModel, other); } @override @@ -341,10 +339,8 @@ mixin ServiceModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ServiceModelMapper.ensureInitialized() - .isValueEqual(this as ServiceModel, other)); + return ServiceModelMapper.ensureInitialized() + .equalsValue(this as ServiceModel, other); } @override @@ -572,10 +568,8 @@ mixin ServiceAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ServiceAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as ServiceAdditionalFields, other)); + return ServiceAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as ServiceAdditionalFields, other); } @override diff --git a/packages/digit_data_model/lib/models/entities/service_attributes.dart b/packages/digit_data_model/lib/models/entities/service_attributes.dart index 4cec2d732..87046a5a1 100644 --- a/packages/digit_data_model/lib/models/entities/service_attributes.dart +++ b/packages/digit_data_model/lib/models/entities/service_attributes.dart @@ -1,43 +1,41 @@ // Generated using mason. Do not modify by hand import 'package:dart_mappable/dart_mappable.dart'; import 'package:drift/drift.dart'; - import 'package:digit_data_model/data_model.dart'; -import '../../data/local_store/sql_store/sql_store.dart'; - part 'service_attributes.mapper.dart'; @MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) -class ServiceAttributesSearchModel extends EntitySearchModel with ServiceAttributesSearchModelMappable { +class ServiceAttributesSearchModel extends EntitySearchModel + with ServiceAttributesSearchModelMappable { final List? clientReferenceId; final String? tenantId; - + ServiceAttributesSearchModel({ this.clientReferenceId, this.tenantId, super.boundaryCode, super.isDeleted, - }): super(); + }) : super(); @MappableConstructor() ServiceAttributesSearchModel.ignoreDeleted({ this.clientReferenceId, this.tenantId, super.boundaryCode, - }): super(isDeleted: false); + }) : super(isDeleted: false); } @MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) -class ServiceAttributesModel extends EntityModel with ServiceAttributesModelMappable { - +class ServiceAttributesModel extends EntityModel + with ServiceAttributesModelMappable { static const schemaName = 'ServiceAttributes'; final String? attributeCode; - final dynamic? value; + final dynamic value; final String? dataType; final String? referenceId; - final dynamic? additionalDetails; + final dynamic additionalDetails; final bool? nonRecoverableError; final String clientReferenceId; final String? tenantId; @@ -55,9 +53,10 @@ class ServiceAttributesModel extends EntityModel with ServiceAttributesModelMapp required this.clientReferenceId, this.tenantId, this.rowVersion, - super.auditDetails,super.clientAuditDetails, + super.auditDetails, + super.clientAuditDetails, super.isDeleted = false, - }): super(); + }) : super(); ServiceAttributesCompanion get companion { return ServiceAttributesCompanion( @@ -80,16 +79,16 @@ class ServiceAttributesModel extends EntityModel with ServiceAttributesModelMapp clientReferenceId: Value(clientReferenceId), tenantId: Value(tenantId), rowVersion: Value(rowVersion), - ); + ); } } @MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) -class ServiceAttributesAdditionalFields extends AdditionalFields with ServiceAttributesAdditionalFieldsMappable { +class ServiceAttributesAdditionalFields extends AdditionalFields + with ServiceAttributesAdditionalFieldsMappable { ServiceAttributesAdditionalFields({ super.schema = 'ServiceAttributes', required super.version, super.fields, }); } - diff --git a/packages/digit_data_model/lib/models/entities/service_attributes.mapper.dart b/packages/digit_data_model/lib/models/entities/service_attributes.mapper.dart index f06beaea4..43b2d3d24 100644 --- a/packages/digit_data_model/lib/models/entities/service_attributes.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/service_attributes.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'service_attributes.dart'; @@ -108,10 +108,8 @@ mixin ServiceAttributesSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ServiceAttributesSearchModelMapper.ensureInitialized() - .isValueEqual(this as ServiceAttributesSearchModel, other)); + return ServiceAttributesSearchModelMapper.ensureInitialized() + .equalsValue(this as ServiceAttributesSearchModel, other); } @override @@ -330,10 +328,8 @@ mixin ServiceAttributesModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ServiceAttributesModelMapper.ensureInitialized() - .isValueEqual(this as ServiceAttributesModel, other)); + return ServiceAttributesModelMapper.ensureInitialized() + .equalsValue(this as ServiceAttributesModel, other); } @override @@ -552,11 +548,8 @@ mixin ServiceAttributesAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ServiceAttributesAdditionalFieldsMapper.ensureInitialized() - .isValueEqual( - this as ServiceAttributesAdditionalFields, other)); + return ServiceAttributesAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as ServiceAttributesAdditionalFields, other); } @override diff --git a/packages/digit_data_model/lib/models/entities/service_definition.dart b/packages/digit_data_model/lib/models/entities/service_definition.dart index 238c4304d..7a4606c99 100644 --- a/packages/digit_data_model/lib/models/entities/service_definition.dart +++ b/packages/digit_data_model/lib/models/entities/service_definition.dart @@ -1,12 +1,8 @@ // Generated using mason. Do not modify by hand import 'package:dart_mappable/dart_mappable.dart'; import 'package:drift/drift.dart'; - import 'package:digit_data_model/data_model.dart'; -import '../../data/local_store/sql_store/sql_store.dart'; -import 'attributes.dart'; - part 'service_definition.mapper.dart'; @MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) diff --git a/packages/digit_data_model/lib/models/entities/service_definition.mapper.dart b/packages/digit_data_model/lib/models/entities/service_definition.mapper.dart index 29a8d7c7c..100fc5329 100644 --- a/packages/digit_data_model/lib/models/entities/service_definition.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/service_definition.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'service_definition.dart'; @@ -116,10 +116,8 @@ mixin ServiceDefinitionSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ServiceDefinitionSearchModelMapper.ensureInitialized() - .isValueEqual(this as ServiceDefinitionSearchModel, other)); + return ServiceDefinitionSearchModelMapper.ensureInitialized() + .equalsValue(this as ServiceDefinitionSearchModel, other); } @override @@ -331,10 +329,8 @@ mixin ServiceDefinitionModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ServiceDefinitionModelMapper.ensureInitialized() - .isValueEqual(this as ServiceDefinitionModel, other)); + return ServiceDefinitionModelMapper.ensureInitialized() + .equalsValue(this as ServiceDefinitionModel, other); } @override @@ -553,11 +549,8 @@ mixin ServiceDefinitionAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ServiceDefinitionAdditionalFieldsMapper.ensureInitialized() - .isValueEqual( - this as ServiceDefinitionAdditionalFields, other)); + return ServiceDefinitionAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as ServiceDefinitionAdditionalFields, other); } @override diff --git a/packages/digit_data_model/lib/models/entities/target.dart b/packages/digit_data_model/lib/models/entities/target.dart index ace5f79d0..9f1ed47eb 100644 --- a/packages/digit_data_model/lib/models/entities/target.dart +++ b/packages/digit_data_model/lib/models/entities/target.dart @@ -2,7 +2,6 @@ import 'package:dart_mappable/dart_mappable.dart'; import 'package:drift/drift.dart'; import 'package:digit_data_model/data_model.dart'; -import 'beneficiary_type.dart'; part 'target.mapper.dart'; diff --git a/packages/digit_data_model/lib/models/entities/target.mapper.dart b/packages/digit_data_model/lib/models/entities/target.mapper.dart index 1502ade6d..968b78a98 100644 --- a/packages/digit_data_model/lib/models/entities/target.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/target.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'target.dart'; @@ -93,10 +93,8 @@ mixin TargetSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - TargetSearchModelMapper.ensureInitialized() - .isValueEqual(this as TargetSearchModel, other)); + return TargetSearchModelMapper.ensureInitialized() + .equalsValue(this as TargetSearchModel, other); } @override @@ -274,10 +272,8 @@ mixin TargetModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - TargetModelMapper.ensureInitialized() - .isValueEqual(this as TargetModel, other)); + return TargetModelMapper.ensureInitialized() + .equalsValue(this as TargetModel, other); } @override @@ -477,10 +473,8 @@ mixin TargetAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - TargetAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as TargetAdditionalFields, other)); + return TargetAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as TargetAdditionalFields, other); } @override diff --git a/packages/digit_data_model/lib/models/entities/user.mapper.dart b/packages/digit_data_model/lib/models/entities/user.mapper.dart index 3f2bb616a..f492b70df 100644 --- a/packages/digit_data_model/lib/models/entities/user.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/user.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'user.dart'; @@ -102,10 +102,8 @@ mixin UserSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - UserSearchModelMapper.ensureInitialized() - .isValueEqual(this as UserSearchModel, other)); + return UserSearchModelMapper.ensureInitialized() + .equalsValue(this as UserSearchModel, other); } @override @@ -435,10 +433,8 @@ mixin UserModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - UserModelMapper.ensureInitialized() - .isValueEqual(this as UserModel, other)); + return UserModelMapper.ensureInitialized() + .equalsValue(this as UserModel, other); } @override @@ -759,10 +755,8 @@ mixin UserAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - UserAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as UserAdditionalFields, other)); + return UserAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as UserAdditionalFields, other); } @override diff --git a/packages/digit_data_model/lib/models/oplog/oplog_entry.mapper.dart b/packages/digit_data_model/lib/models/oplog/oplog_entry.mapper.dart index 3fcb7836d..79d1bb093 100644 --- a/packages/digit_data_model/lib/models/oplog/oplog_entry.mapper.dart +++ b/packages/digit_data_model/lib/models/oplog/oplog_entry.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'oplog_entry.dart'; @@ -276,10 +276,8 @@ mixin OpLogEntryMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - OpLogEntryMapper.ensureInitialized() - .isValueEqual(this as OpLogEntry, other)); + return OpLogEntryMapper.ensureInitialized() + .equalsValue(this as OpLogEntry, other); } @override @@ -465,10 +463,8 @@ mixin AdditionalIdMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - AdditionalIdMapper.ensureInitialized() - .isValueEqual(this as AdditionalId, other)); + return AdditionalIdMapper.ensureInitialized() + .equalsValue(this as AdditionalId, other); } @override diff --git a/packages/digit_data_model/lib/models/pgr_complaints/pgr_address.mapper.dart b/packages/digit_data_model/lib/models/pgr_complaints/pgr_address.mapper.dart index 9eeb30f87..3bfdb6804 100644 --- a/packages/digit_data_model/lib/models/pgr_complaints/pgr_address.mapper.dart +++ b/packages/digit_data_model/lib/models/pgr_complaints/pgr_address.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'pgr_address.dart'; @@ -181,10 +181,8 @@ mixin PgrAddressModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - PgrAddressModelMapper.ensureInitialized() - .isValueEqual(this as PgrAddressModel, other)); + return PgrAddressModelMapper.ensureInitialized() + .equalsValue(this as PgrAddressModel, other); } @override @@ -408,10 +406,8 @@ mixin GeoLocationMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - GeoLocationMapper.ensureInitialized() - .isValueEqual(this as GeoLocation, other)); + return GeoLocationMapper.ensureInitialized() + .equalsValue(this as GeoLocation, other); } @override diff --git a/packages/digit_data_model/lib/models/pgr_complaints/pgr_complaints.mapper.dart b/packages/digit_data_model/lib/models/pgr_complaints/pgr_complaints.mapper.dart index 87d606df4..9738478a7 100644 --- a/packages/digit_data_model/lib/models/pgr_complaints/pgr_complaints.mapper.dart +++ b/packages/digit_data_model/lib/models/pgr_complaints/pgr_complaints.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'pgr_complaints.dart'; @@ -154,10 +154,8 @@ mixin PgrComplaintModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - PgrComplaintModelMapper.ensureInitialized() - .isValueEqual(this as PgrComplaintModel, other)); + return PgrComplaintModelMapper.ensureInitialized() + .equalsValue(this as PgrComplaintModel, other); } @override @@ -382,10 +380,8 @@ mixin PgrServiceModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - PgrServiceModelMapper.ensureInitialized() - .isValueEqual(this as PgrServiceModel, other)); + return PgrServiceModelMapper.ensureInitialized() + .equalsValue(this as PgrServiceModel, other); } @override @@ -670,10 +666,8 @@ mixin PgrComplainantModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - PgrComplainantModelMapper.ensureInitialized() - .isValueEqual(this as PgrComplainantModel, other)); + return PgrComplainantModelMapper.ensureInitialized() + .equalsValue(this as PgrComplainantModel, other); } @override @@ -889,10 +883,8 @@ mixin PgrRolesModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - PgrRolesModelMapper.ensureInitialized() - .isValueEqual(this as PgrRolesModel, other)); + return PgrRolesModelMapper.ensureInitialized() + .equalsValue(this as PgrRolesModel, other); } @override @@ -1050,10 +1042,8 @@ mixin PgrWorkflowModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - PgrWorkflowModelMapper.ensureInitialized() - .isValueEqual(this as PgrWorkflowModel, other)); + return PgrWorkflowModelMapper.ensureInitialized() + .equalsValue(this as PgrWorkflowModel, other); } @override @@ -1287,10 +1277,8 @@ mixin PgrServiceSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - PgrServiceSearchModelMapper.ensureInitialized() - .isValueEqual(this as PgrServiceSearchModel, other)); + return PgrServiceSearchModelMapper.ensureInitialized() + .equalsValue(this as PgrServiceSearchModel, other); } @override @@ -1511,10 +1499,8 @@ mixin PgrFiltersMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - PgrFiltersMapper.ensureInitialized() - .isValueEqual(this as PgrFilters, other)); + return PgrFiltersMapper.ensureInitialized() + .equalsValue(this as PgrFilters, other); } @override @@ -1662,10 +1648,8 @@ mixin PgrSearchKeysMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - PgrSearchKeysMapper.ensureInitialized() - .isValueEqual(this as PgrSearchKeys, other)); + return PgrSearchKeysMapper.ensureInitialized() + .equalsValue(this as PgrSearchKeys, other); } @override @@ -1795,10 +1779,8 @@ mixin PgrAdditionalDetailsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - PgrAdditionalDetailsMapper.ensureInitialized() - .isValueEqual(this as PgrAdditionalDetails, other)); + return PgrAdditionalDetailsMapper.ensureInitialized() + .equalsValue(this as PgrAdditionalDetails, other); } @override diff --git a/packages/digit_data_model/lib/models/pgr_complaints/pgr_complaints_response.mapper.dart b/packages/digit_data_model/lib/models/pgr_complaints/pgr_complaints_response.mapper.dart index be1b0230e..7a21f6b75 100644 --- a/packages/digit_data_model/lib/models/pgr_complaints/pgr_complaints_response.mapper.dart +++ b/packages/digit_data_model/lib/models/pgr_complaints/pgr_complaints_response.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'pgr_complaints_response.dart'; @@ -98,10 +98,8 @@ mixin PgrServiceCreateResponseModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - PgrServiceCreateResponseModelMapper.ensureInitialized() - .isValueEqual(this as PgrServiceCreateResponseModel, other)); + return PgrServiceCreateResponseModelMapper.ensureInitialized() + .equalsValue(this as PgrServiceCreateResponseModel, other); } @override @@ -281,10 +279,8 @@ mixin PgrComplaintResponseModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - PgrComplaintResponseModelMapper.ensureInitialized() - .isValueEqual(this as PgrComplaintResponseModel, other)); + return PgrComplaintResponseModelMapper.ensureInitialized() + .equalsValue(this as PgrComplaintResponseModel, other); } @override @@ -507,10 +503,8 @@ mixin PgrServiceResponseModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - PgrServiceResponseModelMapper.ensureInitialized() - .isValueEqual(this as PgrServiceResponseModel, other)); + return PgrServiceResponseModelMapper.ensureInitialized() + .equalsValue(this as PgrServiceResponseModel, other); } @override @@ -763,10 +757,8 @@ mixin PgrComplainantResponseModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - PgrComplainantResponseModelMapper.ensureInitialized() - .isValueEqual(this as PgrComplainantResponseModel, other)); + return PgrComplainantResponseModelMapper.ensureInitialized() + .equalsValue(this as PgrComplainantResponseModel, other); } @override diff --git a/packages/digit_data_model/pubspec.lock b/packages/digit_data_model/pubspec.lock index a1850c91a..6dc94fb78 100644 --- a/packages/digit_data_model/pubspec.lock +++ b/packages/digit_data_model/pubspec.lock @@ -231,7 +231,7 @@ packages: path: "../dart_mappable_builder" relative: true source: path - version: "4.2.0" + version: "4.2.3" dart_style: dependency: transitive description: diff --git a/packages/inventory_management/lib/models/entities/stock.mapper.dart b/packages/inventory_management/lib/models/entities/stock.mapper.dart index c34205004..86dfbf2f3 100644 --- a/packages/inventory_management/lib/models/entities/stock.mapper.dart +++ b/packages/inventory_management/lib/models/entities/stock.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'stock.dart'; @@ -167,10 +167,8 @@ mixin StockSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - StockSearchModelMapper.ensureInitialized() - .isValueEqual(this as StockSearchModel, other)); + return StockSearchModelMapper.ensureInitialized() + .equalsValue(this as StockSearchModel, other); } @override @@ -500,10 +498,8 @@ mixin StockModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - StockModelMapper.ensureInitialized() - .isValueEqual(this as StockModel, other)); + return StockModelMapper.ensureInitialized() + .equalsValue(this as StockModel, other); } @override @@ -753,10 +749,8 @@ mixin StockAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - StockAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as StockAdditionalFields, other)); + return StockAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as StockAdditionalFields, other); } @override diff --git a/packages/inventory_management/lib/models/entities/stock_reconciliation.mapper.dart b/packages/inventory_management/lib/models/entities/stock_reconciliation.mapper.dart index a4b0c3724..9f0670c03 100644 --- a/packages/inventory_management/lib/models/entities/stock_reconciliation.mapper.dart +++ b/packages/inventory_management/lib/models/entities/stock_reconciliation.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'stock_reconciliation.dart'; @@ -141,10 +141,8 @@ mixin StockReconciliationSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - StockReconciliationSearchModelMapper.ensureInitialized() - .isValueEqual(this as StockReconciliationSearchModel, other)); + return StockReconciliationSearchModelMapper.ensureInitialized() + .equalsValue(this as StockReconciliationSearchModel, other); } @override @@ -417,10 +415,8 @@ mixin StockReconciliationModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - StockReconciliationModelMapper.ensureInitialized() - .isValueEqual(this as StockReconciliationModel, other)); + return StockReconciliationModelMapper.ensureInitialized() + .equalsValue(this as StockReconciliationModel, other); } @override @@ -664,11 +660,8 @@ mixin StockReconciliationAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - StockReconciliationAdditionalFieldsMapper.ensureInitialized() - .isValueEqual( - this as StockReconciliationAdditionalFields, other)); + return StockReconciliationAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as StockReconciliationAdditionalFields, other); } @override diff --git a/packages/inventory_management/lib/models/entities/transaction_reason.mapper.dart b/packages/inventory_management/lib/models/entities/transaction_reason.mapper.dart index 24c1feb4f..71851923b 100644 --- a/packages/inventory_management/lib/models/entities/transaction_reason.mapper.dart +++ b/packages/inventory_management/lib/models/entities/transaction_reason.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'transaction_reason.dart'; diff --git a/packages/inventory_management/lib/models/entities/transaction_type.mapper.dart b/packages/inventory_management/lib/models/entities/transaction_type.mapper.dart index 2582c989a..e6c25cc67 100644 --- a/packages/inventory_management/lib/models/entities/transaction_type.mapper.dart +++ b/packages/inventory_management/lib/models/entities/transaction_type.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'transaction_type.dart'; diff --git a/packages/inventory_management/lib/pages/reports/report_details.dart b/packages/inventory_management/lib/pages/reports/report_details.dart index 83d248577..ee79ec1f9 100644 --- a/packages/inventory_management/lib/pages/reports/report_details.dart +++ b/packages/inventory_management/lib/pages/reports/report_details.dart @@ -135,8 +135,9 @@ class _InventoryReportDetailsPageState i18.inventoryReportDetails.noRecordsMessage, ); final noFilterMessage = localizations.translate( - InventorySingleton().isDistributor && !InventorySingleton().isWareHouseMgr - ? i18.inventoryReportDetails.noFilterMessageDistributor + InventorySingleton().isDistributor && + !InventorySingleton().isWareHouseMgr + ? i18.inventoryReportDetails.noFilterMessageDistributor : i18.inventoryReportDetails.noFilterMessage, ); @@ -212,35 +213,9 @@ class _InventoryReportDetailsPageState []; return InkWell( - onTap: () async { - final stockReconciliationBloc = - context.read< - StockReconciliationBloc>(); - - final facility = await context - .router - .push(InventoryFacilitySelectionRoute( - facilities: - facilities)) - as FacilityModel?; - - if (facility == null) { - return; - } - form - .control(_facilityKey) - .value = facility; - stockReconciliationBloc.add( - StockReconciliationSelectFacilityEvent( - facility, - ), - ); - - handleSelection( - form, - context.read< - InventoryReportBloc>()); - }, + onTap: + handleFacilitySelection( + form, facilities), child: IgnorePointer( child: DigitTextFormField( key: const Key( @@ -264,37 +239,9 @@ class _InventoryReportDetailsPageState _facilityKey, readOnly: false, isRequired: true, - onTap: () async { - final stockReconciliationBloc = - context.read< - StockReconciliationBloc>(); - - final facility = await context - .router - .push(InventoryFacilitySelectionRoute( - facilities: - facilities)) - as FacilityModel?; - - if (facility == null) { - return; - } - form - .control( - _facilityKey) - .value = facility; - stockReconciliationBloc - .add( - StockReconciliationSelectFacilityEvent( - facility, - ), - ); - - handleSelection( - form, - context.read< - InventoryReportBloc>()); - }, + onTap: + handleFacilitySelection( + form, facilities), ), ), ); @@ -782,6 +729,29 @@ class _InventoryReportDetailsPageState } return (double.tryParse(count.value.toString()) ?? 0.0).toStringAsFixed(0); } + + handleFacilitySelection( + FormGroup form, List facilities) async { + final stockReconciliationBloc = context.read(); + + final facility = await context.router + .push(InventoryFacilitySelectionRoute(facilities: facilities)) + as FacilityModel?; + + if (facility == null) { + return; + } + form.control(_facilityKey).value = facility; + stockReconciliationBloc.add( + StockReconciliationSelectFacilityEvent( + facility, + ), + ); + + if (mounted) { + handleSelection(form, context.read()); + } + } } class _ReportDetailsContent extends StatelessWidget { diff --git a/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart b/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart index 0aea2700b..0f6f4e603 100644 --- a/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart +++ b/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart @@ -1,5 +1,4 @@ import 'package:auto_route/auto_route.dart'; -import 'package:collection/collection.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/widgets/atoms/digit_divider.dart'; import 'package:digit_data_model/data_model.dart'; diff --git a/packages/inventory_management/lib/utils/utils.dart b/packages/inventory_management/lib/utils/utils.dart index 6c39655aa..b7aacacc4 100644 --- a/packages/inventory_management/lib/utils/utils.dart +++ b/packages/inventory_management/lib/utils/utils.dart @@ -1,6 +1,5 @@ // Importing necessary packages and modules import 'package:digit_data_model/data_model.dart'; -import 'package:reactive_forms/reactive_forms.dart'; import '../models/entities/inventory_transport_type.dart'; diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index 81a9ff51e..5d932466f 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -367,7 +367,7 @@ packages: path: "../dart_mappable_builder" relative: true source: path - version: "4.2.0" + version: "4.2.3" dart_style: dependency: transitive description: diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index 071b4a759..311b5c637 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -40,7 +40,7 @@ dev_dependencies: bloc_test: ^9.1.0 build_runner: ^2.4.11 mocktail: ^1.0.2 - dart_mappable_builder: ^4.2.0 + dart_mappable_builder: ^4.2.2 auto_route_generator: ^8.0.0 flutter: diff --git a/packages/referral_reconciliation/lib/blocs/referral_recon_record.dart b/packages/referral_reconciliation/lib/blocs/referral_recon_record.dart index 477a7dd1a..bb8c7b13d 100644 --- a/packages/referral_reconciliation/lib/blocs/referral_recon_record.dart +++ b/packages/referral_reconciliation/lib/blocs/referral_recon_record.dart @@ -91,20 +91,18 @@ class RecordHFReferralBloc emit(value.copyWith(loading: true)); try { - if (event.hfReferralModel != null) { - referralReconDataRepository?.create(event.hfReferralModel); - emit( - RecordHFReferralPersistedState( - hfReferralModel: event.hfReferralModel, - projectId: value.projectId, - facilityId: value.facilityId, - dateOfEvaluation: value.dateOfEvaluation, - healthFacilityCord: value.healthFacilityCord, - referredBy: value.referredBy, - ), - ); - } - } catch (error) { + referralReconDataRepository?.create(event.hfReferralModel); + emit( + RecordHFReferralPersistedState( + hfReferralModel: event.hfReferralModel, + projectId: value.projectId, + facilityId: value.facilityId, + dateOfEvaluation: value.dateOfEvaluation, + healthFacilityCord: value.healthFacilityCord, + referredBy: value.referredBy, + ), + ); + } catch (error) { emit(value.copyWith(loading: false)); rethrow; } diff --git a/packages/referral_reconciliation/lib/blocs/search_referral_reconciliations.dart b/packages/referral_reconciliation/lib/blocs/search_referral_reconciliations.dart index 3de05f833..4be5d9693 100644 --- a/packages/referral_reconciliation/lib/blocs/search_referral_reconciliations.dart +++ b/packages/referral_reconciliation/lib/blocs/search_referral_reconciliations.dart @@ -53,7 +53,7 @@ class SearchReferralsBloc ); // Update state with fetched referrals. emit(state.copyWith( - referrals: beneficiaries ?? [], + referrals: beneficiaries, loading: false, tag: event.tag, )); diff --git a/packages/referral_reconciliation/lib/models/entities/hf_additional_fields.mapper.dart b/packages/referral_reconciliation/lib/models/entities/hf_additional_fields.mapper.dart index 37aee54c8..9477d3596 100644 --- a/packages/referral_reconciliation/lib/models/entities/hf_additional_fields.mapper.dart +++ b/packages/referral_reconciliation/lib/models/entities/hf_additional_fields.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'hf_additional_fields.dart'; diff --git a/packages/referral_reconciliation/lib/models/entities/hf_referral.mapper.dart b/packages/referral_reconciliation/lib/models/entities/hf_referral.mapper.dart index 8ac04e2ae..35caf2b29 100644 --- a/packages/referral_reconciliation/lib/models/entities/hf_referral.mapper.dart +++ b/packages/referral_reconciliation/lib/models/entities/hf_referral.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'hf_referral.dart'; @@ -152,10 +152,8 @@ mixin HFReferralSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - HFReferralSearchModelMapper.ensureInitialized() - .isValueEqual(this as HFReferralSearchModel, other)); + return HFReferralSearchModelMapper.ensureInitialized() + .equalsValue(this as HFReferralSearchModel, other); } @override @@ -500,10 +498,8 @@ mixin HFReferralModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - HFReferralModelMapper.ensureInitialized() - .isValueEqual(this as HFReferralModel, other)); + return HFReferralModelMapper.ensureInitialized() + .equalsValue(this as HFReferralModel, other); } @override @@ -730,10 +726,8 @@ mixin HFReferralAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - HFReferralAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as HFReferralAdditionalFields, other)); + return HFReferralAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as HFReferralAdditionalFields, other); } @override diff --git a/packages/referral_reconciliation/lib/models/entities/referral_recon_enums.mapper.dart b/packages/referral_reconciliation/lib/models/entities/referral_recon_enums.mapper.dart index 3d6a27c56..4a6a244b6 100644 --- a/packages/referral_reconciliation/lib/models/entities/referral_recon_enums.mapper.dart +++ b/packages/referral_reconciliation/lib/models/entities/referral_recon_enums.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'referral_recon_enums.dart'; diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart index f80e23055..26d76e96a 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart @@ -41,9 +41,7 @@ class RecordReferralDetailsPage extends LocalizedStatefulWidget { class _RecordReferralDetailsPageState extends LocalizedState { static const _nameOfChildKey = 'nameOfChild'; - static const _evaluationFacilityKey = 'evaluationFacility'; static const _referralReason = 'referralReason'; - static const _referredByKey = 'referredBy'; static const _genderKey = 'gender'; static const _cycleKey = 'cycle'; static const _beneficiaryIdKey = 'beneficiaryId'; @@ -60,7 +58,6 @@ class _RecordReferralDetailsPageState @override Widget build(BuildContext context) { final theme = Theme.of(context); - // final router = context.router; return BlocBuilder( @@ -326,34 +323,30 @@ class _RecordReferralDetailsPageState .toValue(), dateOfEvaluation, ), - if (nameOfChild != - null && - nameOfChild - .toString() - .trim() - .isNotEmpty) + if (nameOfChild + .toString() + .trim() + .isNotEmpty) AdditionalField( ReferralReconEnums .nameOfReferral .toValue(), nameOfChild, ), - if (age != null && - age - .toString() - .trim() - .isNotEmpty) + if (age + .toString() + .trim() + .isNotEmpty) AdditionalField( ReferralReconEnums .age .toValue(), age, ), - if (gender != null && - gender - .toString() - .trim() - .isNotEmpty) + if (gender + .toString() + .trim() + .isNotEmpty) AdditionalField( ReferralReconEnums .gender @@ -666,35 +659,30 @@ class _RecordReferralDetailsPageState .toValue(), dateOfEvaluation, ), - if (nameOfChild != - null && - nameOfChild - .toString() - .trim() - .isNotEmpty) + if (nameOfChild + .toString() + .trim() + .isNotEmpty) AdditionalField( ReferralReconEnums .nameOfReferral .toValue(), nameOfChild, ), - if (age != null && - age - .toString() - .trim() - .isNotEmpty) + if (age + .toString() + .trim() + .isNotEmpty) AdditionalField( ReferralReconEnums .age .toValue(), age, ), - if (gender != - null && - gender - .toString() - .trim() - .isNotEmpty) + if (gender + .toString() + .trim() + .isNotEmpty) AdditionalField( ReferralReconEnums .gender diff --git a/packages/referral_reconciliation/lib/pages/project_facility/project_facility_selection.dart b/packages/referral_reconciliation/lib/pages/project_facility/project_facility_selection.dart index 66a0b2891..3d780ed9f 100644 --- a/packages/referral_reconciliation/lib/pages/project_facility/project_facility_selection.dart +++ b/packages/referral_reconciliation/lib/pages/project_facility/project_facility_selection.dart @@ -40,7 +40,7 @@ class ReferralReconProjectFacilitySelectionPage extends StatelessWidget { body: ReactiveFormConsumer( builder: (context, form, _) { final filteredProjectFacilities = - (projectFacilities ?? []).isNotEmpty + (projectFacilities).isNotEmpty ? projectFacilities.where((element) { final query = form.control(_facilityName).value as String?; diff --git a/packages/referral_reconciliation/lib/router/referral_reconciliation_router.dart b/packages/referral_reconciliation/lib/router/referral_reconciliation_router.dart index 161831916..e382a5ca0 100644 --- a/packages/referral_reconciliation/lib/router/referral_reconciliation_router.dart +++ b/packages/referral_reconciliation/lib/router/referral_reconciliation_router.dart @@ -4,10 +4,8 @@ import 'referral_reconciliation_router.gm.dart'; @AutoRouterConfig.module() class ReferralReconciliationRoute extends $ReferralReconciliationRoute { - @override RouteType get defaultRouteType => const RouteType.material(); - @override List routes = [ AutoRoute( page: SearchReferralReconciliationsRoute.page, diff --git a/packages/referral_reconciliation/lib/widgets/back_navigation_help_header.dart b/packages/referral_reconciliation/lib/widgets/back_navigation_help_header.dart index e5ee13230..22088daf4 100644 --- a/packages/referral_reconciliation/lib/widgets/back_navigation_help_header.dart +++ b/packages/referral_reconciliation/lib/widgets/back_navigation_help_header.dart @@ -36,7 +36,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { Flexible( child: TextButton.icon( style: TextButton.styleFrom( - foregroundColor: theme.colorScheme.onBackground, + foregroundColor: theme.colorScheme.onSurface, padding: EdgeInsets.zero, ), onPressed: () { diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index af9446590..684b330cd 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -186,7 +186,7 @@ packages: source: hosted version: "2.4.2" build_runner: - dependency: "direct main" + dependency: "direct dev" description: name: build_runner sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" @@ -367,7 +367,7 @@ packages: path: "../dart_mappable_builder" relative: true source: path - version: "4.2.0" + version: "4.2.3" dart_style: dependency: transitive description: @@ -507,7 +507,7 @@ packages: source: hosted version: "2.0.0" flutter_keyboard_visibility: - dependency: transitive + dependency: "direct main" description: name: flutter_keyboard_visibility sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" diff --git a/packages/referral_reconciliation/pubspec.yaml b/packages/referral_reconciliation/pubspec.yaml index 1d5b8b35a..dfdd7ed4e 100644 --- a/packages/referral_reconciliation/pubspec.yaml +++ b/packages/referral_reconciliation/pubspec.yaml @@ -28,7 +28,6 @@ dependencies: recase: ^4.1.0 pluto_grid: ^8.0.0 digit_scanner: ^1.0.0+1 - build_runner: ^2.2.1 fluttertoast: ^8.1.2 overlay_builder: ^1.1.0 sqlite3_flutter_libs: ^0.5.10 @@ -37,6 +36,7 @@ dependencies: drift_db_viewer: ^2.0.0 group_radio_button: ^1.3.0 stream_transform: ^2.1.0 + flutter_keyboard_visibility: ^5.4.1 dev_dependencies: flutter_test: @@ -48,7 +48,7 @@ dev_dependencies: drift_dev: ^2.14.1 bloc_test: ^9.1.0 mocktail: ^1.0.2 - dart_mappable_builder: ^4.2.0 + dart_mappable_builder: ^4.2.2 auto_route_generator: ^8.0.0 flutter: diff --git a/packages/registration_delivery/lib/blocs/search_households/proximity_search.dart b/packages/registration_delivery/lib/blocs/search_households/proximity_search.dart index 771582ea8..6acd1606b 100644 --- a/packages/registration_delivery/lib/blocs/search_households/proximity_search.dart +++ b/packages/registration_delivery/lib/blocs/search_households/proximity_search.dart @@ -69,7 +69,7 @@ class ProximitySearchBloc extends SearchHouseholdsBloc { ); if (projectBeneficiariesList.isNotEmpty) { // Search for tasks and side effects based on project beneficiaries. - taskList = await fetchTaskbyProjectBeneficiary(projectBeneficiariesList); + taskList = await fetchTaskByProjectBeneficiary(projectBeneficiariesList); sideEffectsList = await sideEffectDataRepository.search(SideEffectSearchModel( taskClientReferenceId: @@ -153,14 +153,12 @@ class ProximitySearchBloc extends SearchHouseholdsBloc { projectBeneficiaries: filteredBeneficiaries, tasks: filteredTasks.isEmpty ? null : filteredTasks, sideEffects: sideEffectsList.isEmpty ? null : sideEffectsList, - //TODO Need to added the side effects referrals: referralsList.isEmpty ? null : referralsList, - //TODO Need to addevid the referrals ), ); } } - // Update the state with the results and mark the search as completed. + // Update the state with the results and mark the search as completed. emit(state.copyWith( householdMembers: containers, loading: false, diff --git a/packages/registration_delivery/lib/blocs/search_households/search_by_head.dart b/packages/registration_delivery/lib/blocs/search_households/search_by_head.dart index e055edfdb..721311c7d 100644 --- a/packages/registration_delivery/lib/blocs/search_households/search_by_head.dart +++ b/packages/registration_delivery/lib/blocs/search_households/search_by_head.dart @@ -109,30 +109,30 @@ class SearchByHeadBloc extends SearchHouseholdsBloc { null, ); - final househHoldIds = + final houseHoldIds = householdMembers.map((e) => e.householdClientReferenceId!).toList(); - final List allhouseholdMembers = + final List allHouseHoldMembers = await fetchHouseholdMembersBulk( null, - househHoldIds, + houseHoldIds, ); final List individualMembers = await individual.search(IndividualSearchModel( - clientReferenceId: allhouseholdMembers + clientReferenceId: allHouseHoldMembers .map((e) => e.individualClientReferenceId.toString()) .toList(), )); final List houseHolds = await household.search( HouseholdSearchModel( - clientReferenceId: househHoldIds, + clientReferenceId: houseHoldIds, ), ); final projectBeneficiaries = await fetchProjectBeneficiary( beneficiaryType != BeneficiaryType.individual - ? househHoldIds - : allhouseholdMembers + ? houseHoldIds + : allHouseHoldMembers .map((e) => e.individualClientReferenceId.toString()) .toList(), ); @@ -141,7 +141,7 @@ class SearchByHeadBloc extends SearchHouseholdsBloc { if (projectBeneficiaries.isNotEmpty) { // Search for tasks and side effects based on project beneficiaries. - tasks = await fetchTaskbyProjectBeneficiary(projectBeneficiaries); + tasks = await fetchTaskByProjectBeneficiary(projectBeneficiaries); sideEffects = await sideEffectDataRepository.search(SideEffectSearchModel( taskClientReferenceId: tasks.map((e) => e.clientReferenceId).toList(), @@ -154,7 +154,7 @@ class SearchByHeadBloc extends SearchHouseholdsBloc { } // Initialize a list to store household members. - final groupedHouseholds = allhouseholdMembers + final groupedHouseholds = allHouseHoldMembers .where((hm) => projectBeneficiaries .map((p) => p.beneficiaryClientReferenceId) .toList() @@ -169,7 +169,7 @@ class SearchByHeadBloc extends SearchHouseholdsBloc { if (householdId == null) continue; // Retrieve the first household result. - final householdresult = + final houseHoldResult = houseHolds.firstWhere((e) => e.clientReferenceId == householdId); // Search for individuals based on proximity, beneficiary type, and search text. final List membersIds = @@ -181,7 +181,7 @@ class SearchByHeadBloc extends SearchHouseholdsBloc { .where((element) => beneficiaryType == BeneficiaryType.individual ? individualClientReferenceIds .contains(element.beneficiaryClientReferenceId) - : (househHoldIds).contains(element.beneficiaryClientReferenceId)) + : (houseHoldIds).contains(element.beneficiaryClientReferenceId)) .toList(); final beneficiaryClientReferenceIds = projectBeneficiaries .map((e) => e.beneficiaryClientReferenceId) @@ -221,7 +221,7 @@ class SearchByHeadBloc extends SearchHouseholdsBloc { // Create a container for household members and associated data. containers.add( HouseholdMemberWrapper( - household: householdresult, + household: houseHoldResult, headOfHousehold: head, members: beneficiaryType == BeneficiaryType.individual ? beneficiaryIndividuals diff --git a/packages/registration_delivery/lib/blocs/search_households/search_households.dart b/packages/registration_delivery/lib/blocs/search_households/search_households.dart index 983e552b4..4852fa7f2 100644 --- a/packages/registration_delivery/lib/blocs/search_households/search_households.dart +++ b/packages/registration_delivery/lib/blocs/search_households/search_households.dart @@ -93,7 +93,7 @@ class SearchHouseholdsBloc }, )?.individualClientReferenceId, ); - final tasks = await fetchTaskbyProjectBeneficiary(projectBeneficiaries); + final tasks = await fetchTaskByProjectBeneficiary(projectBeneficiaries); final sideEffects = await sideEffectDataRepository.search(SideEffectSearchModel( @@ -182,7 +182,7 @@ class SearchHouseholdsBloc } // Fetch the task - Future> fetchTaskbyProjectBeneficiary( + Future> fetchTaskByProjectBeneficiary( List projectBeneficiaries, ) async { return await taskDataRepository.search(TaskSearchModel( diff --git a/packages/registration_delivery/lib/blocs/search_households/tag_by_search.dart b/packages/registration_delivery/lib/blocs/search_households/tag_by_search.dart index bb0bbb1f1..ac1ca4a59 100644 --- a/packages/registration_delivery/lib/blocs/search_households/tag_by_search.dart +++ b/packages/registration_delivery/lib/blocs/search_households/tag_by_search.dart @@ -100,7 +100,7 @@ class TagSearchBloc extends SearchHouseholdsBloc { )); // Search for tasks and side effects based on project beneficiaries. - final tasks = await fetchTaskbyProjectBeneficiary(beneficiaries); + final tasks = await fetchTaskByProjectBeneficiary(beneficiaries); final referrals = await referralDataRepository.search(ReferralSearchModel( projectBeneficiaryClientReferenceId: diff --git a/packages/registration_delivery/lib/data/repositories/local/project_beneficiary.dart b/packages/registration_delivery/lib/data/repositories/local/project_beneficiary.dart index 0414871c5..dac86784d 100644 --- a/packages/registration_delivery/lib/data/repositories/local/project_beneficiary.dart +++ b/packages/registration_delivery/lib/data/repositories/local/project_beneficiary.dart @@ -191,8 +191,7 @@ class ProjectBeneficiaryLocalRepository extends LocalRepository< final updated = entity.copyWith( isDeleted: true, rowVersion: entity.rowVersion, - clientAuditDetails: (entity.clientAuditDetails?.createdBy != null && - entity.clientAuditDetails!.createdTime != null) + clientAuditDetails: (entity.clientAuditDetails?.createdBy != null) ? ClientAuditDetails( createdBy: entity.clientAuditDetails!.createdBy, createdTime: entity.clientAuditDetails!.createdTime, diff --git a/packages/registration_delivery/lib/models/entities/additional_fields_type.mapper.dart b/packages/registration_delivery/lib/models/entities/additional_fields_type.mapper.dart index 8e1f6fec5..bf283f6de 100644 --- a/packages/registration_delivery/lib/models/entities/additional_fields_type.mapper.dart +++ b/packages/registration_delivery/lib/models/entities/additional_fields_type.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'additional_fields_type.dart'; diff --git a/packages/registration_delivery/lib/models/entities/deliver_strategy_type.mapper.dart b/packages/registration_delivery/lib/models/entities/deliver_strategy_type.mapper.dart index d51b33c6a..ea054fe4b 100644 --- a/packages/registration_delivery/lib/models/entities/deliver_strategy_type.mapper.dart +++ b/packages/registration_delivery/lib/models/entities/deliver_strategy_type.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'deliver_strategy_type.dart'; diff --git a/packages/registration_delivery/lib/models/entities/household.mapper.dart b/packages/registration_delivery/lib/models/entities/household.mapper.dart index 17d2a4ef9..442a81e82 100644 --- a/packages/registration_delivery/lib/models/entities/household.mapper.dart +++ b/packages/registration_delivery/lib/models/entities/household.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'household.dart'; @@ -132,10 +132,8 @@ mixin HouseholdSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - HouseholdSearchModelMapper.ensureInitialized() - .isValueEqual(this as HouseholdSearchModel, other)); + return HouseholdSearchModelMapper.ensureInitialized() + .equalsValue(this as HouseholdSearchModel, other); } @override @@ -376,10 +374,8 @@ mixin HouseholdModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - HouseholdModelMapper.ensureInitialized() - .isValueEqual(this as HouseholdModel, other)); + return HouseholdModelMapper.ensureInitialized() + .equalsValue(this as HouseholdModel, other); } @override @@ -593,10 +589,8 @@ mixin HouseholdAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - HouseholdAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as HouseholdAdditionalFields, other)); + return HouseholdAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as HouseholdAdditionalFields, other); } @override diff --git a/packages/registration_delivery/lib/models/entities/household_member.mapper.dart b/packages/registration_delivery/lib/models/entities/household_member.mapper.dart index 83b8174d6..5856ef4cd 100644 --- a/packages/registration_delivery/lib/models/entities/household_member.mapper.dart +++ b/packages/registration_delivery/lib/models/entities/household_member.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'household_member.dart'; @@ -165,10 +165,8 @@ mixin HouseholdMemberSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - HouseholdMemberSearchModelMapper.ensureInitialized() - .isValueEqual(this as HouseholdMemberSearchModel, other)); + return HouseholdMemberSearchModelMapper.ensureInitialized() + .equalsValue(this as HouseholdMemberSearchModel, other); } @override @@ -500,10 +498,8 @@ mixin HouseholdMemberModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - HouseholdMemberModelMapper.ensureInitialized() - .isValueEqual(this as HouseholdMemberModel, other)); + return HouseholdMemberModelMapper.ensureInitialized() + .equalsValue(this as HouseholdMemberModel, other); } @override @@ -726,10 +722,8 @@ mixin HouseholdMemberAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - HouseholdMemberAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as HouseholdMemberAdditionalFields, other)); + return HouseholdMemberAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as HouseholdMemberAdditionalFields, other); } @override diff --git a/packages/registration_delivery/lib/models/entities/project_beneficiary.mapper.dart b/packages/registration_delivery/lib/models/entities/project_beneficiary.mapper.dart index 81ad3c276..dd6b0bd74 100644 --- a/packages/registration_delivery/lib/models/entities/project_beneficiary.mapper.dart +++ b/packages/registration_delivery/lib/models/entities/project_beneficiary.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'project_beneficiary.dart'; @@ -183,10 +183,8 @@ mixin ProjectBeneficiarySearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectBeneficiarySearchModelMapper.ensureInitialized() - .isValueEqual(this as ProjectBeneficiarySearchModel, other)); + return ProjectBeneficiarySearchModelMapper.ensureInitialized() + .equalsValue(this as ProjectBeneficiarySearchModel, other); } @override @@ -516,10 +514,8 @@ mixin ProjectBeneficiaryModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectBeneficiaryModelMapper.ensureInitialized() - .isValueEqual(this as ProjectBeneficiaryModel, other)); + return ProjectBeneficiaryModelMapper.ensureInitialized() + .equalsValue(this as ProjectBeneficiaryModel, other); } @override @@ -748,11 +744,8 @@ mixin ProjectBeneficiaryAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ProjectBeneficiaryAdditionalFieldsMapper.ensureInitialized() - .isValueEqual( - this as ProjectBeneficiaryAdditionalFields, other)); + return ProjectBeneficiaryAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as ProjectBeneficiaryAdditionalFields, other); } @override diff --git a/packages/registration_delivery/lib/models/entities/referral.mapper.dart b/packages/registration_delivery/lib/models/entities/referral.mapper.dart index 7fd1e1e76..ca225ff86 100644 --- a/packages/registration_delivery/lib/models/entities/referral.mapper.dart +++ b/packages/registration_delivery/lib/models/entities/referral.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'referral.dart'; @@ -143,10 +143,8 @@ mixin ReferralSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ReferralSearchModelMapper.ensureInitialized() - .isValueEqual(this as ReferralSearchModel, other)); + return ReferralSearchModelMapper.ensureInitialized() + .equalsValue(this as ReferralSearchModel, other); } @override @@ -428,10 +426,8 @@ mixin ReferralModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ReferralModelMapper.ensureInitialized() - .isValueEqual(this as ReferralModel, other)); + return ReferralModelMapper.ensureInitialized() + .equalsValue(this as ReferralModel, other); } @override @@ -658,10 +654,8 @@ mixin ReferralAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ReferralAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as ReferralAdditionalFields, other)); + return ReferralAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as ReferralAdditionalFields, other); } @override diff --git a/packages/registration_delivery/lib/models/entities/reg_form_validations_type.mapper.dart b/packages/registration_delivery/lib/models/entities/reg_form_validations_type.mapper.dart index aa90cca7b..6892165ce 100644 --- a/packages/registration_delivery/lib/models/entities/reg_form_validations_type.mapper.dart +++ b/packages/registration_delivery/lib/models/entities/reg_form_validations_type.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'reg_form_validations_type.dart'; diff --git a/packages/registration_delivery/lib/models/entities/side_effect.mapper.dart b/packages/registration_delivery/lib/models/entities/side_effect.mapper.dart index ad644a277..429c80d26 100644 --- a/packages/registration_delivery/lib/models/entities/side_effect.mapper.dart +++ b/packages/registration_delivery/lib/models/entities/side_effect.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'side_effect.dart'; @@ -129,10 +129,8 @@ mixin SideEffectSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - SideEffectSearchModelMapper.ensureInitialized() - .isValueEqual(this as SideEffectSearchModel, other)); + return SideEffectSearchModelMapper.ensureInitialized() + .equalsValue(this as SideEffectSearchModel, other); } @override @@ -392,10 +390,8 @@ mixin SideEffectModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - SideEffectModelMapper.ensureInitialized() - .isValueEqual(this as SideEffectModel, other)); + return SideEffectModelMapper.ensureInitialized() + .equalsValue(this as SideEffectModel, other); } @override @@ -616,10 +612,8 @@ mixin SideEffectAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - SideEffectAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as SideEffectAdditionalFields, other)); + return SideEffectAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as SideEffectAdditionalFields, other); } @override diff --git a/packages/registration_delivery/lib/models/entities/status.mapper.dart b/packages/registration_delivery/lib/models/entities/status.mapper.dart index dffb822cc..2581632e6 100644 --- a/packages/registration_delivery/lib/models/entities/status.mapper.dart +++ b/packages/registration_delivery/lib/models/entities/status.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'status.dart'; diff --git a/packages/registration_delivery/lib/models/entities/task.mapper.dart b/packages/registration_delivery/lib/models/entities/task.mapper.dart index b334f9db3..2200cf74b 100644 --- a/packages/registration_delivery/lib/models/entities/task.mapper.dart +++ b/packages/registration_delivery/lib/models/entities/task.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'task.dart'; @@ -188,10 +188,8 @@ mixin TaskSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - TaskSearchModelMapper.ensureInitialized() - .isValueEqual(this as TaskSearchModel, other)); + return TaskSearchModelMapper.ensureInitialized() + .equalsValue(this as TaskSearchModel, other); } @override @@ -543,10 +541,8 @@ mixin TaskModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - TaskModelMapper.ensureInitialized() - .isValueEqual(this as TaskModel, other)); + return TaskModelMapper.ensureInitialized() + .equalsValue(this as TaskModel, other); } @override @@ -801,10 +797,8 @@ mixin TaskAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - TaskAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as TaskAdditionalFields, other)); + return TaskAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as TaskAdditionalFields, other); } @override diff --git a/packages/registration_delivery/lib/models/entities/task_resource.mapper.dart b/packages/registration_delivery/lib/models/entities/task_resource.mapper.dart index e8d69a39b..bad4526c4 100644 --- a/packages/registration_delivery/lib/models/entities/task_resource.mapper.dart +++ b/packages/registration_delivery/lib/models/entities/task_resource.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'task_resource.dart'; @@ -102,10 +102,8 @@ mixin TaskResourceSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - TaskResourceSearchModelMapper.ensureInitialized() - .isValueEqual(this as TaskResourceSearchModel, other)); + return TaskResourceSearchModelMapper.ensureInitialized() + .equalsValue(this as TaskResourceSearchModel, other); } @override @@ -315,10 +313,8 @@ mixin TaskResourceModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - TaskResourceModelMapper.ensureInitialized() - .isValueEqual(this as TaskResourceModel, other)); + return TaskResourceModelMapper.ensureInitialized() + .equalsValue(this as TaskResourceModel, other); } @override @@ -540,10 +536,8 @@ mixin TaskResourceAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - TaskResourceAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as TaskResourceAdditionalFields, other)); + return TaskResourceAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as TaskResourceAdditionalFields, other); } @override diff --git a/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart b/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart index 02bacb784..25f46f8bb 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart @@ -192,28 +192,7 @@ class _SideEffectsPageState extends LocalizedState { ); if (shouldSubmit ?? false) { - final reloadState = context - .read(); - - Future.delayed( - const Duration(milliseconds: 500), - () { - reloadState.add( - HouseholdOverviewReloadEvent( - projectId: - RegistrationDeliverySingleton() - .projectId!, - projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, - ), - ); - }, - ).then((value) => context.router.push( - HouseholdAcknowledgementRoute( - enableViewHousehold: true, - ), - )); + submitSideEffects(); } } else { setState(() { @@ -358,4 +337,25 @@ class _SideEffectsPageState extends LocalizedState { ), ); } + + void submitSideEffects() async { + final reloadState = context.read(); + + Future.delayed( + const Duration(milliseconds: 500), + () { + reloadState.add( + HouseholdOverviewReloadEvent( + projectId: RegistrationDeliverySingleton().projectId!, + projectBeneficiaryType: + RegistrationDeliverySingleton().beneficiaryType!, + ), + ); + }, + ).then((value) => context.router.push( + HouseholdAcknowledgementRoute( + enableViewHousehold: true, + ), + )); + } } diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index b9283ba31..438b88dc2 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -383,7 +383,7 @@ class _HouseholdLocationPageState Validators.maxLength(6), ]), _latKey: FormControl(value: addressModel?.latitude, validators: [ - Validators.min(2), + Validators.minLength(2), ]), _lngKey: FormControl( value: addressModel?.longitude, diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index 0918f89fd..ef455e7c8 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -87,8 +87,8 @@ class _SearchBeneficiaryPageState longititude: long, projectId: RegistrationDeliverySingleton().projectId!, maxRadius: RegistrationDeliverySingleton().maxRadius!, - offset: blocWrapper.state.offset + blocWrapper.state.limit, - limit: blocWrapper.state.limit, + offset: blocWrapper.proximitySearchBloc.state.offset, + limit: blocWrapper.proximitySearchBloc.state.limit, )); } else if (metrics.atEdge && searchController.text != '' && @@ -98,8 +98,8 @@ class _SearchBeneficiaryPageState searchText: searchController.text, projectId: RegistrationDeliverySingleton().projectId!, isProximityEnabled: isProximityEnabled, - offset: blocWrapper.state.offset + blocWrapper.state.limit, - limit: blocWrapper.state.limit, + offset: blocWrapper.searchByHeadBloc.state.offset, + limit: blocWrapper.searchByHeadBloc.state.limit, )); } } @@ -166,9 +166,8 @@ class _SearchBeneficiaryPageState maxRadius: RegistrationDeliverySingleton() .maxRadius!, - offset: blocWrapper.state.offset + - blocWrapper.state.limit, - limit: blocWrapper.state.limit, + offset: offset, + limit: limit, ), ); } else { @@ -233,9 +232,8 @@ class _SearchBeneficiaryPageState maxRadius: RegistrationDeliverySingleton() .maxRadius!, - offset: 0, - limit: - blocWrapper.state.limit, + offset: offset, + limit: limit, ), ); } else { @@ -279,14 +277,14 @@ class _SearchBeneficiaryPageState ), BlocListener( listener: (context, scannerState) { - context.read().tagSearchBloc.add( - SearchHouseholdsEvent.searchByTag( - tag: scannerState.qrCodes.isNotEmpty - ? scannerState.qrCodes.lastOrNull! - : '', - projectId: RegistrationDeliverySingleton().projectId!, - ), - ); + blocWrapper.tagSearchBloc.add( + SearchHouseholdsEvent.searchByTag( + tag: scannerState.qrCodes.isNotEmpty + ? scannerState.qrCodes.lastOrNull! + : '', + projectId: RegistrationDeliverySingleton().projectId!, + ), + ); }, child: BlocBuilder( builder: (context, locationState) { diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index f95d8b685..d18e4048e 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -367,7 +367,7 @@ packages: path: "../dart_mappable_builder" relative: true source: path - version: "4.2.0" + version: "4.2.3" dart_style: dependency: transitive description: @@ -408,10 +408,9 @@ packages: digit_showcase: dependency: "direct main" description: - name: digit_showcase - sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" - url: "https://pub.dev" - source: hosted + path: "../digit_showcase" + relative: true + source: path version: "1.0.0" dio: dependency: "direct main" diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index a0aa4775c..fbc387bfe 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -48,7 +48,7 @@ dev_dependencies: bloc_test: ^9.1.0 build_runner: ^2.4.11 mocktail: ^1.0.2 - dart_mappable_builder: ^4.2.0 + dart_mappable_builder: ^4.2.2 auto_route_generator: ^8.0.0 flutter: From 6b23f21cdf3d15b90c4b96e7944898383bcccb7d Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Tue, 18 Jun 2024 11:18:20 +0530 Subject: [PATCH 030/241] Updated scripts --- tools/attendance_package_imports.dart | 4 ++-- tools/inventory_package_imports.dart | 16 ++++++++-------- tools/referral_reconciliation_imports.dart | 16 ++++++++-------- tools/registration_delivery_imports.dart | 16 ++++++++-------- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/tools/attendance_package_imports.dart b/tools/attendance_package_imports.dart index a41e99b4f..55a2018d1 100644 --- a/tools/attendance_package_imports.dart +++ b/tools/attendance_package_imports.dart @@ -37,7 +37,7 @@ void main() { _updateHome(homeFilePath); // Update the sync_service_mapper.dart file - _updateSyncServiceMapperDownFile(syncServiceMapperFilePath); + _updateSyncServiceMapperFile(syncServiceMapperFilePath); // Add attendance routes and import to the router file _addAttendanceRoutesAndImportToRouterFile(routerFilePath); @@ -175,7 +175,7 @@ String insertData(String fileContent, String marker, String data) { return fileContent; } -void _updateSyncServiceMapperDownFile(String syncServiceMapperFilePath) { +void _updateSyncServiceMapperFile(String syncServiceMapperFilePath) { // Define the import statement and the new case statements var importStatement = "import 'package:attendance_management/attendance_management.dart';"; diff --git a/tools/inventory_package_imports.dart b/tools/inventory_package_imports.dart index 7d02e230d..5e7cd9db3 100644 --- a/tools/inventory_package_imports.dart +++ b/tools/inventory_package_imports.dart @@ -62,7 +62,7 @@ void main() { _updateEntityMapperFile(entityMapperFilePath); // Update the sync_service_mapper.dart file - _updateSyncServiceMapperDownFile(syncServiceMapperFilePath); + _updateSyncServiceMapperFile(syncServiceMapperFilePath); // Add inventory to home file _updateHome(homeFilePath); @@ -310,7 +310,7 @@ String insertData(String fileContent, String marker, String data) { return fileContent; } -void _updateSyncServiceMapperDownFile(String syncServiceMapperFilePath) { +void _updateSyncServiceMapperFile(String syncServiceMapperFilePath) { // Define the import statement and the new case statements var importStatement = "import 'package:inventory_management/inventory_management.dart';"; @@ -428,9 +428,9 @@ void _updateSyncServiceMapperDownFile(String syncServiceMapperFilePath) { if (!syncServiceMapperFileContent.contains(importStatement)) { syncServiceMapperFileContent = importStatement + '\n' + syncServiceMapperFileContent; - print('The import statement was added to sync_down.dart.'); + print('The import statement was added to sync_service_mapper.dart.'); } else { - print('The import statement already exists in sync_down.dart.'); + print('The import statement already exists in sync_service_mapper.dart.'); } // Insert the new case statements @@ -449,21 +449,21 @@ void _updateSyncServiceMapperDownFile(String syncServiceMapperFilePath) { newCases + '\n' + syncServiceMapperFileContent.substring(caseInsertionIndex); - print('The new cases were added to sync_down.dart.'); + print('The new cases were added to sync_service_mapper.dart.'); // Write the updated content back to the file syncServiceMapperFile.writeAsStringSync(syncServiceMapperFileContent); } else { print( - 'Error: Could not find the default case in the switch statement in sync_down.dart.'); + 'Error: Could not find the default case in the switch statement in sync_service_mapper.dart.'); return; } } else { - print('Error: Could not find the switch statement in sync_down.dart.'); + print('Error: Could not find the switch statement in sync_service_mapper.dart.'); return; } } else { - print('The new cases already exist in sync_down.dart.'); + print('The new cases already exist in sync_service_mapper.dart.'); } } diff --git a/tools/referral_reconciliation_imports.dart b/tools/referral_reconciliation_imports.dart index bc25e2f65..46c92f66b 100644 --- a/tools/referral_reconciliation_imports.dart +++ b/tools/referral_reconciliation_imports.dart @@ -68,7 +68,7 @@ void main() { _addReferralReconMapperToUtilsFile(utilsFilePath: utilsFilePath); // Update the sync_service_mapper.dart file - _updateSyncServiceMapperDownFile(syncServiceMapperFilePath); + _updateSyncServiceMapperFile(syncServiceMapperFilePath); _formatFiles([ localizationDelegatesFilePath, @@ -285,7 +285,7 @@ String insertData(String fileContent, String marker, String data) { return fileContent; } -void _updateSyncServiceMapperDownFile(String syncServiceMapperFilePath) { +void _updateSyncServiceMapperFile(String syncServiceMapperFilePath) { // Define the import statement and the new case statements var importStatement = "import 'package:referral_reconciliation/referral_reconciliation.dart';"; @@ -355,9 +355,9 @@ void _updateSyncServiceMapperDownFile(String syncServiceMapperFilePath) { if (!syncServiceMapperFileContent.contains(importStatement)) { syncServiceMapperFileContent = importStatement + '\n' + syncServiceMapperFileContent; - print('The import statement was added to sync_down.dart.'); + print('The import statement was added to sync_service_mapper.dart.'); } else { - print('The import statement already exists in sync_down.dart.'); + print('The import statement already exists in sync_service_mapper.dart.'); } // Insert the new case statements @@ -376,21 +376,21 @@ void _updateSyncServiceMapperDownFile(String syncServiceMapperFilePath) { newCases + '\n' + syncServiceMapperFileContent.substring(caseInsertionIndex); - print('The new cases were added to sync_down.dart.'); + print('The new cases were added to sync_service_mapper.dart.'); // Write the updated content back to the file syncServiceMapperFile.writeAsStringSync(syncServiceMapperFileContent); } else { print( - 'Error: Could not find the default case in the switch statement in sync_down.dart.'); + 'Error: Could not find the default case in the switch statement in sync_service_mapper.dart.'); return; } } else { - print('Error: Could not find the switch statement in sync_down.dart.'); + print('Error: Could not find the switch statement in sync_service_mapper.dart.'); return; } } else { - print('The new cases already exist in sync_down.dart.'); + print('The new cases already exist in sync_service_mapper.dart.'); } } diff --git a/tools/registration_delivery_imports.dart b/tools/registration_delivery_imports.dart index 19db2ca90..c0645d55f 100644 --- a/tools/registration_delivery_imports.dart +++ b/tools/registration_delivery_imports.dart @@ -50,7 +50,7 @@ void main() { _updateHome(homeFilePath); // Update the sync_service_mapper.dart file - _updateSyncServiceMapperDownFile(syncServiceMapperFilePath); + _updateSyncServiceMapperFile(syncServiceMapperFilePath); // Add registration routes and import to the router file _addRegistrationRoutesAndImportToRouterFile(routerFilePath); @@ -343,7 +343,7 @@ void _createLocalizationDelegatesFile(String localizationDelegatesFilePath) { localizationDelegatesFile.writeAsStringSync(localizationDelegatesFileContent); } -void _updateSyncServiceMapperDownFile(String syncServiceMapperFilePath) { +void _updateSyncServiceMapperFile(String syncServiceMapperFilePath) { // Define the import statement and the new case statements var importStatement = "import 'package:registration_delivery/registration_delivery.dart';"; @@ -663,9 +663,9 @@ void _updateSyncServiceMapperDownFile(String syncServiceMapperFilePath) { if (!syncServiceMapperFileContent.contains(importStatement)) { syncServiceMapperFileContent = importStatement + '\n' + syncServiceMapperFileContent; - print('The import statement was added to sync_down.dart.'); + print('The import statement was added to sync_service_mapper.dart.'); } else { - print('The import statement already exists in sync_down.dart.'); + print('The import statement already exists in sync_service_mapper.dart.'); } // Insert the new case statements @@ -684,21 +684,21 @@ void _updateSyncServiceMapperDownFile(String syncServiceMapperFilePath) { newCases + '\n' + syncServiceMapperFileContent.substring(caseInsertionIndex); - print('The new cases were added to sync_down.dart.'); + print('The new cases were added to sync_service_mapper.dart.'); // Write the updated content back to the file syncServiceMapperFile.writeAsStringSync(syncServiceMapperFileContent); } else { print( - 'Error: Could not find the default case in the switch statement in sync_down.dart.'); + 'Error: Could not find the default case in the switch statement in sync_service_mapper.dart.'); return; } } else { - print('Error: Could not find the switch statement in sync_down.dart.'); + print('Error: Could not find the switch statement in sync_service_mapper.dart.'); return; } } else { - print('The new cases already exist in sync_down.dart.'); + print('The new cases already exist in sync_service_mapper.dart.'); } } From 91e9cbb83308ccbec6faef3a7df87b8a130feedd Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Fri, 21 Jun 2024 12:07:25 +0530 Subject: [PATCH 031/241] added translator for administration area --- .../lib/pages/checklist/checklist_boundary_view.dart | 3 ++- .../lib/pages/beneficiary/refer_beneficiary.dart | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_boundary_view.dart b/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_boundary_view.dart index d20ed164a..40f2f05f4 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_boundary_view.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_boundary_view.dart @@ -72,7 +72,8 @@ class _ChecklistBoundaryViewPageState i18.householdLocation.administrationAreaFormLabel, ), controller: TextEditingController( - text: context.boundary.name, + text: localizations + .translate(context.boundary.code.toString()), ), ), ], diff --git a/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart b/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart index f0ab5c886..1dd998341 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart @@ -380,7 +380,8 @@ class _ReferBeneficiaryPageState extends LocalizedState { return fb.group({ _dateOfReferralKey: FormControl(value: DateTime.now()), _administrativeUnitKey: FormControl( - value: RegistrationDeliverySingleton().boundary!.name), + value: localizations.translate( + RegistrationDeliverySingleton().boundary!.name.toString())), _referredByKey: FormControl( value: RegistrationDeliverySingleton().loggedInUserUuid, validators: [Validators.required], From 3e70663c8e15a5af49327a44c52f595ff3f4bcdb Mon Sep 17 00:00:00 2001 From: Ramkrishna-egov Date: Thu, 27 Jun 2024 14:20:25 +0530 Subject: [PATCH 032/241] Fixed Facility search based on tenant ID --- .../lib/blocs/project/project.dart | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart b/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart index 55d0dbe0e..04a43af5c 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart @@ -364,9 +364,7 @@ class ProjectBloc extends Bloc { await projectFacilityLocalRepository.bulkCreate(projectFacilities); final facilities = await facilityRemoteRepository.search( - FacilitySearchModel( - id: null, - ), + FacilitySearchModel(tenantId: envConfig.variables.tenantId), ); await facilityLocalRepository.bulkCreate(facilities); From 48131901fd7ccd945483b51296d25fe66de1b74a Mon Sep 17 00:00:00 2001 From: Ramkrishna-egov Date: Thu, 27 Jun 2024 14:21:11 +0530 Subject: [PATCH 033/241] Added disable battery optimization permission for background service --- .../android/app/src/main/AndroidManifest.xml | 69 ++++++++++--------- .../lib/app.dart | 16 +++++ .../pubspec.yaml | 1 + 3 files changed, 52 insertions(+), 34 deletions(-) diff --git a/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml b/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml index 0adfdeff4..6bdfc6e86 100644 --- a/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml +++ b/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml @@ -1,45 +1,47 @@ - - - - - - - - - + + + + + + + + + + + - - + + - - - - - + + + + + - - - + + + android:icon="@mipmap/ic_launcher" + android:label="HCM"> android:allowBackup="false" android:fullBackupOnly="false" android:fullBackupContent="false" + android:turnScreenOn="true" + android:windowSoftInputMode="adjustResize"> + android:name="io.flutter.embedding.android.NormalTheme" + android:resource="@style/NormalTheme" /> - - + + - + diff --git a/apps/health_campaign_field_worker_app/lib/app.dart b/apps/health_campaign_field_worker_app/lib/app.dart index 8c576af11..936e3c751 100644 --- a/apps/health_campaign_field_worker_app/lib/app.dart +++ b/apps/health_campaign_field_worker_app/lib/app.dart @@ -3,6 +3,7 @@ import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_scanner/blocs/scanner.dart'; import 'package:dio/dio.dart'; +import 'package:disable_battery_optimization/disable_battery_optimization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:inventory_management/inventory_management.dart'; @@ -46,6 +47,21 @@ class MainApplication extends StatefulWidget { class MainApplicationState extends State with WidgetsBindingObserver { + @override + void initState() { + super.initState(); + _requestDisableBatteryOptimization(); + } + + Future _requestDisableBatteryOptimization() async { + bool isIgnoringBatteryOptimizations = + await DisableBatteryOptimization.isBatteryOptimizationDisabled ?? false; + + if (!isIgnoringBatteryOptimizations) { + await DisableBatteryOptimization.showDisableBatteryOptimizationSettings(); + } + } + @override Widget build(BuildContext context) { return MultiRepositoryProvider( diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 74375bbd8..d314af823 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -71,6 +71,7 @@ dependencies: referral_reconciliation: ^1.0.2 digit_data_model: ^1.0.2 registration_delivery: ^1.0.2 + disable_battery_optimization: ^1.1.1 dev_dependencies: flutter_test: From 069e5305ad9e20fdff14b32dfb8a0b93d8d2cfea Mon Sep 17 00:00:00 2001 From: Ramkrishna-egov Date: Fri, 28 Jun 2024 10:28:40 +0530 Subject: [PATCH 034/241] Added disable battery optimization ask permission on App start and background service start --- .../lib/app.dart | 12 +--------- .../lib/utils/background_service.dart | 2 +- .../lib/utils/utils.dart | 23 ++++++++++++++----- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/app.dart b/apps/health_campaign_field_worker_app/lib/app.dart index 936e3c751..0337a49b5 100644 --- a/apps/health_campaign_field_worker_app/lib/app.dart +++ b/apps/health_campaign_field_worker_app/lib/app.dart @@ -3,7 +3,6 @@ import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_scanner/blocs/scanner.dart'; import 'package:dio/dio.dart'; -import 'package:disable_battery_optimization/disable_battery_optimization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:inventory_management/inventory_management.dart'; @@ -50,16 +49,7 @@ class MainApplicationState extends State @override void initState() { super.initState(); - _requestDisableBatteryOptimization(); - } - - Future _requestDisableBatteryOptimization() async { - bool isIgnoringBatteryOptimizations = - await DisableBatteryOptimization.isBatteryOptimizationDisabled ?? false; - - if (!isIgnoringBatteryOptimizations) { - await DisableBatteryOptimization.showDisableBatteryOptimizationSettings(); - } + requestDisableBatteryOptimization(); } @override diff --git a/apps/health_campaign_field_worker_app/lib/utils/background_service.dart b/apps/health_campaign_field_worker_app/lib/utils/background_service.dart index 3da2b7155..413bbc572 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/background_service.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/background_service.dart @@ -62,7 +62,7 @@ Future initializeService(dio, isar) async { AndroidFlutterLocalNotificationsPlugin>() ?.createNotificationChannel(channel); } - + requestDisableBatteryOptimization(); await service.configure( androidConfiguration: AndroidConfiguration( // this will be executed when app is in foreground or background in separated isolate diff --git a/apps/health_campaign_field_worker_app/lib/utils/utils.dart b/apps/health_campaign_field_worker_app/lib/utils/utils.dart index eb4ec0a1c..ebcf613f8 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/utils.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/utils.dart @@ -1,10 +1,5 @@ library app_utils; -import 'package:registration_delivery/registration_delivery.init.dart' - as registration_delivery_mappers; -import 'package:digit_data_model/data_model.init.dart' as data_model_mappers; -import 'package:inventory_management/inventory_management.init.dart' - as inventory_mappers; import 'dart:async'; import 'dart:io'; @@ -16,13 +11,19 @@ import 'package:digit_components/widgets/atoms/digit_toaster.dart'; import 'package:digit_components/widgets/digit_dialog.dart'; import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_data_model/data_model.init.dart' as data_model_mappers; +import 'package:disable_battery_optimization/disable_battery_optimization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_background_service/flutter_background_service.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:inventory_management/inventory_management.init.dart' + as inventory_mappers; import 'package:isar/isar.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:referral_reconciliation/referral_reconciliation.dart' as referral_reconciliation_mappers; +import 'package:registration_delivery/registration_delivery.init.dart' + as registration_delivery_mappers; import '../blocs/app_initialization/app_initialization.dart'; import '../blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart'; @@ -69,6 +70,15 @@ class CustomValidator { } } +Future requestDisableBatteryOptimization() async { + bool isIgnoringBatteryOptimizations = + await DisableBatteryOptimization.isBatteryOptimizationDisabled ?? false; + + if (!isIgnoringBatteryOptimizations) { + await DisableBatteryOptimization.showDisableBatteryOptimizationSettings(); + } +} + setBgRunning(bool isBgRunning) async { final localSecureStore = LocalSecureStore.instance; await localSecureStore.setBackgroundService(isBgRunning); @@ -104,7 +114,8 @@ performBackgroundService({ } else { if (!isRunning && isOnline) { service.startService(); - if (context != null) { + if (context != null && context.mounted) { + requestDisableBatteryOptimization(); DigitToast.show( context, options: DigitToastOptions( From b1005a38c987f91eef2d1255892f86b394afe182 Mon Sep 17 00:00:00 2001 From: Ramkrishna-egov Date: Tue, 2 Jul 2024 02:15:27 +0530 Subject: [PATCH 035/241] HLM-5984:: Get Precise location on Submitting latitude longitude details --- .../pubspec.yaml | 2 +- packages/attendance_management/CHANGELOG.md | 3 + .../lib/pages/mark_attendance.dart | 188 +-- .../lib/utils/i18_key_constants.dart | 4 + packages/attendance_management/pubspec.yaml | 2 +- packages/digit_components/CHANGELOG.md | 5 +- .../lib/digit_components.dart | 3 +- .../digit_components/lib/utils/utils.dart | 22 + packages/digit_components/pubspec.yaml | 2 +- packages/inventory_management/CHANGELOG.md | 4 + .../lib/pages/record_stock/stock_details.dart | 540 ++++---- .../lib/utils/i18_key_constants.dart | 4 + packages/inventory_management/pubspec.yaml | 2 +- packages/registration_delivery/CHANGELOG.md | 6 +- .../beneficiary/deliver_intervention.dart | 1128 ++++++++--------- .../household_location.dart | 271 ++-- .../lib/pages/search_beneficiary.dart | 2 +- .../lib/utils/i18_key_constants.dart | 2 + packages/registration_delivery/pubspec.yaml | 2 +- tools/install_bricks.sh | 16 +- 20 files changed, 1194 insertions(+), 1014 deletions(-) create mode 100644 packages/digit_components/lib/utils/utils.dart diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index d314af823..9806f2247 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -25,7 +25,7 @@ dependencies: reactive_forms: ^14.1.0 location: ^5.0.0 dart_mappable: ^4.2.0 - dio: ^5.1.2 + dio: ^5.4.2+1 flutter_keyboard_visibility: ^5.4.0 isar: ^3.0.5 isar_flutter_libs: ^3.0.5 diff --git a/packages/attendance_management/CHANGELOG.md b/packages/attendance_management/CHANGELOG.md index a0a7ae29f..2beff873a 100644 --- a/packages/attendance_management/CHANGELOG.md +++ b/packages/attendance_management/CHANGELOG.md @@ -38,3 +38,6 @@ ## 1.0.1 * Added try catch for local repository to handle db lock + +## 1.0.1+1 +* Get Precise location on Submitting latitude longitude details diff --git a/packages/attendance_management/lib/pages/mark_attendance.dart b/packages/attendance_management/lib/pages/mark_attendance.dart index 8c1e828c9..582ac3846 100644 --- a/packages/attendance_management/lib/pages/mark_attendance.dart +++ b/packages/attendance_management/lib/pages/mark_attendance.dart @@ -6,6 +6,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/models/digit_table_model.dart'; import 'package:digit_components/widgets/atoms/digit_toaster.dart'; +import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_data_model/data/data_repository.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -56,6 +57,7 @@ class _MarkAttendancePageState extends State { void initState() { controller = TextEditingController(); controller.addListener(searchByName); + context.read().add(const LoadLocationEvent()); individualLogBloc = AttendanceIndividualBloc( const AttendanceIndividualState.loading(), attendanceLogDataRepository: context @@ -177,6 +179,7 @@ class _MarkAttendancePageState extends State { EnumValues.draft.toValue(), locationState.latitude, locationState.longitude, + context, ); }, icon: Icons.drafts_outlined, @@ -196,6 +199,7 @@ class _MarkAttendancePageState extends State { .toValue(), locationState.latitude, locationState.longitude, + context, ); } : () { @@ -436,89 +440,107 @@ class _MarkAttendancePageState extends State { ThemeData theme, String type, double? latitude, - double? longitude) { - state.maybeWhen( - orElse: () {}, - loaded: ( - attendanceSearchModelList, - attendanceCollectionModel, - offsetData, - currentOffset, - countData, - limitData, - flag, - ) async { - if (((attendanceCollectionModel ?? []) - .any((a) => a.status == -1 || a.status == null) && - type != EnumValues.draft.toValue()) || - ((attendanceCollectionModel ?? []) - .every((a) => a.status == -1 || a.status == null) && - type == EnumValues.draft.toValue())) { - DigitToast.show( - context, - options: DigitToastOptions( - localizations - .translate(i18.attendance.pleaseMarkAttForIndividuals), - true, - theme, - ), - ); - } else { - if (type == EnumValues.draft.toValue()) { - individualLogBloc?.add(SaveAsDraftEvent( - entryTime: widget.entryTime, - exitTime: widget.exitTime, - selectedDate: widget.dateTime, - isSingleSession: widget.session == null, - createOplog: type != EnumValues.draft.toValue(), - latitude: latitude, - longitude: longitude, - )); - DigitToast.show( - context, - options: DigitToastOptions( - localizations.translate(i18.attendance.draftSavedMessage), - false, - theme, - ), - ); - } else { - DigitDialog.show(context, - options: DigitDialogOptions( - titleText: localizations.translate( - i18.attendance.confirmationLabel, - ), - contentText: - '${localizations.translate(i18.attendance.confirmationDesc)} \n\n${localizations.translate(i18.attendance.confirmationDescNote)}', - primaryAction: DigitDialogActions( - label: localizations.translate( - i18.attendance.proceed, - ), - action: (context) { - individualLogBloc?.add(SaveAsDraftEvent( - entryTime: widget.entryTime, - exitTime: widget.exitTime, - selectedDate: widget.dateTime, - isSingleSession: widget.session == null, - createOplog: type != EnumValues.draft.toValue(), - latitude: latitude, - longitude: longitude, - )); - Navigator.of(context).pop(); - navigateToAcknowledgement(localizations); - }, - ), - secondaryAction: DigitDialogActions( - label: - localizations.translate(i18.common.coreCommonGoback), - action: (context) { - Navigator.of(context).pop(); - }, - ), - )); - } - } - }); + double? longitude, + BuildContext context) { + context.read().add(const LoadLocationEvent()); + DigitComponentsUtils().showLocationCapturingDialog( + context, + localizations.translate(i18.common.locationCapturing), + DigitSyncDialogType.inProgress); + Future.delayed(const Duration(seconds: 2), () async { + DigitComponentsUtils().hideLocationDialog(context); + await DigitSyncDialog.show(context, + type: DigitSyncDialogType.complete, + label: localizations.translate(i18.common.locationCaptured), + primaryAction: DigitDialogActions( + label: localizations.translate(i18.common.ctaProceed), + action: (ctx) async { + state.maybeWhen( + orElse: () {}, + loaded: ( + attendanceSearchModelList, + attendanceCollectionModel, + offsetData, + currentOffset, + countData, + limitData, + flag, + ) async { + if (((attendanceCollectionModel ?? []).any( + (a) => a.status == -1 || a.status == null) && + type != EnumValues.draft.toValue()) || + ((attendanceCollectionModel ?? []).every( + (a) => a.status == -1 || a.status == null) && + type == EnumValues.draft.toValue())) { + DigitToast.show( + context, + options: DigitToastOptions( + localizations.translate( + i18.attendance.pleaseMarkAttForIndividuals), + true, + theme, + ), + ); + } else { + if (type == EnumValues.draft.toValue()) { + individualLogBloc?.add(SaveAsDraftEvent( + entryTime: widget.entryTime, + exitTime: widget.exitTime, + selectedDate: widget.dateTime, + isSingleSession: widget.session == null, + createOplog: type != EnumValues.draft.toValue(), + latitude: latitude, + longitude: longitude, + )); + DigitToast.show( + context, + options: DigitToastOptions( + localizations + .translate(i18.attendance.draftSavedMessage), + false, + theme, + ), + ); + } else { + DigitDialog.show(context, + options: DigitDialogOptions( + titleText: localizations.translate( + i18.attendance.confirmationLabel, + ), + contentText: + '${localizations.translate(i18.attendance.confirmationDesc)} \n\n${localizations.translate(i18.attendance.confirmationDescNote)}', + primaryAction: DigitDialogActions( + label: localizations.translate( + i18.attendance.proceed, + ), + action: (context) { + individualLogBloc?.add(SaveAsDraftEvent( + entryTime: widget.entryTime, + exitTime: widget.exitTime, + selectedDate: widget.dateTime, + isSingleSession: widget.session == null, + createOplog: + type != EnumValues.draft.toValue(), + latitude: latitude, + longitude: longitude, + )); + Navigator.of(context).pop(); + navigateToAcknowledgement(localizations); + }, + ), + secondaryAction: DigitDialogActions( + label: localizations + .translate(i18.common.coreCommonGoback), + action: (context) { + Navigator.of(context).pop(); + }, + ), + )); + } + } + }); + })); + }); } void navigateToAcknowledgement(AttendanceLocalization localizations) { diff --git a/packages/attendance_management/lib/utils/i18_key_constants.dart b/packages/attendance_management/lib/utils/i18_key_constants.dart index 9b6bf714c..56bf1453c 100644 --- a/packages/attendance_management/lib/utils/i18_key_constants.dart +++ b/packages/attendance_management/lib/utils/i18_key_constants.dart @@ -97,6 +97,10 @@ class Common { String get ageInMonths => 'AGE_IN_MONTHS_LABEL'; String get inactive => 'INACTIVE'; + + String get locationCapturing => 'CAPTURING_LOCATION'; + String get locationCaptured => 'LOCATION_CAPTURED'; + String get ctaProceed => 'PROCEED'; } class AcknowledgementSuccess { diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index 43a353baa..824586ad1 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -1,6 +1,6 @@ name: attendance_management description: Digit UI attendance management specification - This tool is designed for tracking user attendance with customizable session counts per day. -version: 1.0.1 +version: 1.0.1+1 homepage: "https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/attendance_management" repository: "https://github.com/egovernments/health-campaign-field-worker-app" diff --git a/packages/digit_components/CHANGELOG.md b/packages/digit_components/CHANGELOG.md index 03c6603f6..e5a78855a 100644 --- a/packages/digit_components/CHANGELOG.md +++ b/packages/digit_components/CHANGELOG.md @@ -106,4 +106,7 @@ * Stable release with searchable dropdown fix ## 1.0.0+2 -* DigitTextField component update \ No newline at end of file +* DigitTextField component update + +## 1.0.0+3 +* Capture and Hide Location Dialog added to utils \ No newline at end of file diff --git a/packages/digit_components/lib/digit_components.dart b/packages/digit_components/lib/digit_components.dart index c777381b5..78a5a21fe 100644 --- a/packages/digit_components/lib/digit_components.dart +++ b/packages/digit_components/lib/digit_components.dart @@ -4,8 +4,9 @@ library digit_components; export 'blocs/location/location.dart'; export 'theme/theme.dart'; -export 'widgets/widgets.dart'; export 'utils/app_logger.dart'; +export 'utils/utils.dart'; +export 'widgets/widgets.dart'; class DigitUi { static const DigitUi _instance = DigitUi._internal(); diff --git a/packages/digit_components/lib/utils/utils.dart b/packages/digit_components/lib/utils/utils.dart new file mode 100644 index 000000000..7c54568be --- /dev/null +++ b/packages/digit_components/lib/utils/utils.dart @@ -0,0 +1,22 @@ +import 'package:digit_components/widgets/digit_sync_dialog.dart'; +import 'package:flutter/material.dart'; + +class DigitComponentsUtils { + void hideLocationDialog(BuildContext context) { + Navigator.of( + context, + rootNavigator: true, + ).popUntil( + (route) => route is! PopupRoute, + ); + } + + void showLocationCapturingDialog( + BuildContext context, String label, DigitSyncDialogType dialogType) { + DigitSyncDialog.show( + context, + type: dialogType, + label: label, + ); + } +} diff --git a/packages/digit_components/pubspec.yaml b/packages/digit_components/pubspec.yaml index a3c0bf789..8a336891f 100644 --- a/packages/digit_components/pubspec.yaml +++ b/packages/digit_components/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_components description: Digit UI Design specification Flutter widgets. Import this package by adding digit_components in respective pubspec.yaml dependencies. -version: 1.0.0+2 +version: 1.0.0+3 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_components repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/inventory_management/CHANGELOG.md b/packages/inventory_management/CHANGELOG.md index 1e9156c4a..e976b52c4 100644 --- a/packages/inventory_management/CHANGELOG.md +++ b/packages/inventory_management/CHANGELOG.md @@ -48,3 +48,7 @@ * Localization support added for missing fields * Added try catch for local repository to handle db lock + +## 1.0.2+1 + +* Get Precise location on Submitting latitude longitude details diff --git a/packages/inventory_management/lib/pages/record_stock/stock_details.dart b/packages/inventory_management/lib/pages/record_stock/stock_details.dart index f509436f5..748265e48 100644 --- a/packages/inventory_management/lib/pages/record_stock/stock_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/stock_details.dart @@ -1,6 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/widgets/atoms/digit_toaster.dart'; +import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_scanner/blocs/scanner.dart'; import 'package:digit_scanner/pages/qr_scanner.dart'; @@ -76,6 +77,7 @@ class _StockDetailsPageState extends LocalizedState { void initState() { clearQRCodes(); transportTypes = InventorySingleton().transportType; + context.read().add(const LoadLocationEvent()); super.initState(); } @@ -275,246 +277,340 @@ class _StockDetailsPageState extends LocalizedState { } else { FocusManager.instance.primaryFocus ?.unfocus(); + context + .read() + .add(const LoadLocationEvent()); + DigitComponentsUtils() + .showLocationCapturingDialog( + context, + localizations.translate(i18 + .common.locationCapturing), + DigitSyncDialogType.inProgress); + Future.delayed( + const Duration(seconds: 2), + () async { + DigitComponentsUtils() + .hideLocationDialog(context); + await DigitSyncDialog.show(context, + type: + DigitSyncDialogType.complete, + label: localizations.translate( + i18.common.locationCaptured), + primaryAction: DigitDialogActions( + label: localizations + .translate(i18 + .common.ctaProceed), + action: (ctx) async { + DigitComponentsUtils() + .hideLocationDialog( + context); + final bloc = context.read< + RecordStockBloc>(); - final bloc = - context.read(); - - final productVariant = form - .control(_productVariantKey) - .value as ProductVariantModel; - - switch (entryType) { - case StockRecordEntryType.receipt: - transactionReason = - TransactionReason.received - .toValue(); - break; - case StockRecordEntryType.dispatch: - transactionReason = null; - break; - case StockRecordEntryType.returned: - transactionReason = - TransactionReason.returned - .toValue(); - break; - default: - transactionReason = form - .control( - _transactionReasonKey, - ) - .value as String?; - break; - } + final productVariant = form + .control( + _productVariantKey) + .value + as ProductVariantModel; - final quantity = form - .control(_transactionQuantityKey) - .value; + switch (entryType) { + case StockRecordEntryType + .receipt: + transactionReason = + TransactionReason + .received + .toValue(); + break; + case StockRecordEntryType + .dispatch: + transactionReason = + null; + break; + case StockRecordEntryType + .returned: + transactionReason = + TransactionReason + .returned + .toValue(); + break; + default: + transactionReason = form + .control( + _transactionReasonKey, + ) + .value as String?; + break; + } - final waybillNumber = form - .control(_waybillNumberKey) - .value as String?; + final quantity = form + .control( + _transactionQuantityKey) + .value; - final waybillQuantity = form - .control(_waybillQuantityKey) - .value as String?; + final waybillNumber = form + .control( + _waybillNumberKey) + .value as String?; - final vehicleNumber = form - .control(_vehicleNumberKey) - .value as String?; + final waybillQuantity = form + .control( + _waybillQuantityKey) + .value as String?; - final lat = locationState.latitude; - final lng = locationState.longitude; + final vehicleNumber = form + .control( + _vehicleNumberKey) + .value as String?; - final hasLocationData = - lat != null && lng != null; + final lat = + locationState.latitude; + final lng = + locationState.longitude; - final comments = form - .control(_commentsKey) - .value as String?; + final hasLocationData = + lat != null && + lng != null; - final deliveryTeamName = form - .control(_deliveryTeamKey) - .value as String?; + final comments = form + .control(_commentsKey) + .value as String?; - String? senderId; - String? senderType; - String? receiverId; - String? receiverType; + final deliveryTeamName = form + .control( + _deliveryTeamKey) + .value as String?; - final primaryType = - BlocProvider.of( - context, - ).state.primaryType; + String? senderId; + String? senderType; + String? receiverId; + String? receiverType; - final primaryId = - BlocProvider.of( - context, - ).state.primaryId; - - switch (entryType) { - case StockRecordEntryType.receipt: - case StockRecordEntryType.loss: - case StockRecordEntryType.damaged: - if (deliveryTeamSelected) { - senderId = deliveryTeamName; - senderType = "STAFF"; - } else { - senderId = secondaryParty?.id; - senderType = "WAREHOUSE"; - } - receiverId = primaryId; - receiverType = primaryType; - - break; - case StockRecordEntryType.dispatch: - case StockRecordEntryType.returned: - if (deliveryTeamSelected) { - receiverId = deliveryTeamName; - receiverType = "STAFF"; - } else { - receiverId = secondaryParty?.id; - receiverType = "WAREHOUSE"; - } - senderId = primaryId; - senderType = primaryType; - break; - } + final primaryType = + BlocProvider.of< + RecordStockBloc>( + context, + ).state.primaryType; - final stockModel = StockModel( - clientReferenceId: IdGen.i.identifier, - productVariantId: productVariant.id, - transactionReason: transactionReason, - transactionType: transactionType, - referenceId: stockState.projectId, - referenceIdType: 'PROJECT', - quantity: quantity.toString(), - waybillNumber: waybillNumber, - receiverId: receiverId, - receiverType: receiverType, - senderId: senderId, - senderType: senderType, - auditDetails: AuditDetails( - createdBy: InventorySingleton() - .loggedInUserUuid, - createdTime: context - .millisecondsSinceEpoch(), - ), - clientAuditDetails: - ClientAuditDetails( - createdBy: InventorySingleton() - .loggedInUserUuid, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: InventorySingleton() - .loggedInUserUuid, - lastModifiedTime: context - .millisecondsSinceEpoch(), - ), - additionalFields: [ - waybillQuantity, - vehicleNumber, - comments, - ].any((element) => - element != null) || - hasLocationData - ? StockAdditionalFields( - version: 1, - fields: [ - if (waybillQuantity != - null && - waybillQuantity - .trim() - .isNotEmpty) - AdditionalField( - 'waybill_quantity', - waybillQuantity, - ), - if (vehicleNumber != null && - vehicleNumber - .trim() - .isNotEmpty) - AdditionalField( - 'vehicle_number', - vehicleNumber, - ), - if (comments != null && - comments - .trim() - .isNotEmpty) - AdditionalField( - 'comments', - comments, - ), - if (deliveryTeamName != - null && - deliveryTeamName - .trim() - .isNotEmpty) - AdditionalField( - 'deliveryTeam', - deliveryTeamName, - ), - if (hasLocationData) ...[ - AdditionalField( - 'lat', - lat, + final primaryId = + BlocProvider.of< + RecordStockBloc>( + context, + ).state.primaryId; + + switch (entryType) { + case StockRecordEntryType + .receipt: + case StockRecordEntryType + .loss: + case StockRecordEntryType + .damaged: + if (deliveryTeamSelected) { + senderId = + deliveryTeamName; + senderType = "STAFF"; + } else { + senderId = + secondaryParty + ?.id; + senderType = + "WAREHOUSE"; + } + receiverId = primaryId; + receiverType = + primaryType; + + break; + case StockRecordEntryType + .dispatch: + case StockRecordEntryType + .returned: + if (deliveryTeamSelected) { + receiverId = + deliveryTeamName; + receiverType = + "STAFF"; + } else { + receiverId = + secondaryParty + ?.id; + receiverType = + "WAREHOUSE"; + } + senderId = primaryId; + senderType = + primaryType; + break; + } + + final stockModel = + StockModel( + clientReferenceId: + IdGen.i.identifier, + productVariantId: + productVariant.id, + transactionReason: + transactionReason, + transactionType: + transactionType, + referenceId: + stockState.projectId, + referenceIdType: + 'PROJECT', + quantity: + quantity.toString(), + waybillNumber: + waybillNumber, + receiverId: receiverId, + receiverType: + receiverType, + senderId: senderId, + senderType: senderType, + auditDetails: + AuditDetails( + createdBy: + InventorySingleton() + .loggedInUserUuid, + createdTime: context + .millisecondsSinceEpoch(), ), - AdditionalField( - 'lng', - lng, + clientAuditDetails: + ClientAuditDetails( + createdBy: + InventorySingleton() + .loggedInUserUuid, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: + InventorySingleton() + .loggedInUserUuid, + lastModifiedTime: context + .millisecondsSinceEpoch(), ), - ], - ], - ) - : null, - ); + additionalFields: [ + waybillQuantity, + vehicleNumber, + comments, + ].any((element) => + element != + null) || + hasLocationData + ? StockAdditionalFields( + version: 1, + fields: [ + if (waybillQuantity != + null && + waybillQuantity + .trim() + .isNotEmpty) + AdditionalField( + 'waybill_quantity', + waybillQuantity, + ), + if (vehicleNumber != + null && + vehicleNumber + .trim() + .isNotEmpty) + AdditionalField( + 'vehicle_number', + vehicleNumber, + ), + if (comments != + null && + comments + .trim() + .isNotEmpty) + AdditionalField( + 'comments', + comments, + ), + if (deliveryTeamName != + null && + deliveryTeamName + .trim() + .isNotEmpty) + AdditionalField( + 'deliveryTeam', + deliveryTeamName, + ), + if (hasLocationData) ...[ + AdditionalField( + 'lat', + lat, + ), + AdditionalField( + 'lng', + lng, + ), + ], + ], + ) + : null, + ); - bloc.add( - RecordStockSaveStockDetailsEvent( - stockModel: stockModel, - ), - ); + bloc.add( + RecordStockSaveStockDetailsEvent( + stockModel: stockModel, + ), + ); - final submit = - await DigitDialog.show( - context, - options: DigitDialogOptions( - key: const Key('submitDialog'), - titleText: localizations.translate( - i18.stockDetails.dialogTitle, - ), - contentText: - localizations.translate( - i18.stockDetails.dialogContent, - ), - primaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonSubmit, - ), - action: (context) { - Navigator.of( - context, - rootNavigator: true, - ).pop(true); - }, - ), - secondaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonCancel, - ), - action: (context) => Navigator.of( - context, - rootNavigator: true, - ).pop(false), - ), - ), - ); + final submit = + await DigitDialog.show< + bool>( + context, + options: + DigitDialogOptions( + key: const Key( + 'submitDialog'), + titleText: localizations + .translate( + i18.stockDetails + .dialogTitle, + ), + contentText: + localizations + .translate( + i18.stockDetails + .dialogContent, + ), + primaryAction: + DigitDialogActions( + label: localizations + .translate( + i18.common + .coreCommonSubmit, + ), + action: (context) { + Navigator.of( + context, + rootNavigator: + true, + ).pop(true); + }, + ), + secondaryAction: + DigitDialogActions( + label: localizations + .translate( + i18.common + .coreCommonCancel, + ), + action: (context) => + Navigator.of( + context, + rootNavigator: true, + ).pop(false), + ), + ), + ); - if (submit ?? false) { - bloc.add( - const RecordStockCreateStockEntryEvent(), - ); - } + if (submit ?? false) { + bloc.add( + const RecordStockCreateStockEntryEvent(), + ); + } + })); + }); } }, child: Center( diff --git a/packages/inventory_management/lib/utils/i18_key_constants.dart b/packages/inventory_management/lib/utils/i18_key_constants.dart index f3f237bcc..b6fdc6cd4 100644 --- a/packages/inventory_management/lib/utils/i18_key_constants.dart +++ b/packages/inventory_management/lib/utils/i18_key_constants.dart @@ -103,6 +103,10 @@ class Common { String get scanBales => 'CORE_COMMON_SCAN_BALES'; String get ageInMonths => 'AGE_IN_MONTHS_LABEL'; + + String get locationCapturing => 'CAPTURING_LOCATION'; + String get locationCaptured => 'LOCATION_CAPTURED'; + String get ctaProceed => 'PROCEED'; } class AcknowledgementSuccess { diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index 5898cc07f..ea58227b5 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -1,6 +1,6 @@ name: inventory_management description: This package offers inventory management features, allowing users to view stock reports and perform inventory resource reconciliation. -version: 1.0.2 +version: 1.0.2+1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/inventory_management repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration_delivery/CHANGELOG.md index fa5188825..3a4dd237c 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration_delivery/CHANGELOG.md @@ -45,4 +45,8 @@ * Added try catch for local repository to handle db lock * Localisation support added for missing fields -* Bug fixes and enhancements \ No newline at end of file +* Bug fixes and enhancements + +## 1.0.2+1 + +* Get Precise location on Submitting latitude longitude details diff --git a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart index 59341ffba..7bd21fef3 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart @@ -3,20 +3,18 @@ import 'package:collection/collection.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/widgets/atoms/digit_stepper.dart'; import 'package:digit_components/widgets/atoms/digit_toaster.dart'; +import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; +import 'package:registration_delivery/models/entities/deliver_strategy_type.dart'; +import 'package:registration_delivery/registration_delivery.dart'; +import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; -import '../../blocs/delivery_intervention/deliver_intervention.dart'; -import '../../blocs/household_overview/household_overview.dart'; import '../../models/entities/additional_fields_type.dart'; -import '../../models/entities/deliver_strategy_type.dart'; import '../../models/entities/status.dart'; -import '../../models/entities/task.dart'; -import '../../models/entities/task_resource.dart'; -import '../../router/registration_delivery_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; @@ -48,6 +46,8 @@ class _DeliverInterventionPageState static const _doseAdministrationKey = 'doseAdministered'; static const _dateOfAdministrationKey = 'dateOfAdministration'; final clickedStatus = ValueNotifier(false); + bool? shouldSubmit = false; + // Variable to track dose administration status bool doseAdministered = false; @@ -57,6 +57,154 @@ class _DeliverInterventionPageState // Initialize the currentStep variable to keep track of the current step in a process. int currentStep = 0; + @override + void initState() { + context.read().add(const LoadLocationEvent()); + super.initState(); + } + + Future handleCapturedLocationState( + LocationState locationState, + BuildContext context, + DeliverInterventionState deliverInterventionState, + FormGroup form, + HouseholdMemberWrapper householdMember, + ProjectBeneficiaryModel projectBeneficiary) async { + if (shouldSubmit == false) { + await DigitSyncDialog.show(context, + type: DigitSyncDialogType.complete, + label: localizations.translate(i18.common.locationCaptured), + primaryAction: DigitDialogActions( + label: localizations.translate( + i18.beneficiaryDetails.ctaProceed, + ), + action: (ctx) async { + DigitComponentsUtils().hideLocationDialog(context); + final lat = locationState.latitude; + final long = locationState.longitude; + shouldSubmit = await DigitDialog.show( + context, + options: DigitDialogOptions( + titleText: localizations + .translate(i18.deliverIntervention.dialogTitle), + contentText: localizations + .translate(i18.deliverIntervention.dialogContent), + primaryAction: DigitDialogActions( + label: localizations.translate(i18.common.coreCommonSubmit), + action: (ctx) { + clickedStatus.value = true; + Navigator.of(context, rootNavigator: true).pop(true); + }, + ), + secondaryAction: DigitDialogActions( + label: localizations.translate(i18.common.coreCommonCancel), + action: (context) => + Navigator.of(context, rootNavigator: true).pop(false), + ), + ), + ); + if (shouldSubmit ?? false) { + if (context.mounted) { + context.read().add( + DeliverInterventionSubmitEvent( + task: _getTaskModel( + context, + form: form, + oldTask: null, + projectBeneficiaryClientReferenceId: + projectBeneficiary.clientReferenceId, + dose: deliverInterventionState.dose, + cycle: deliverInterventionState.cycle, + deliveryStrategy: + DeliverStrategyType.direct.toValue(), + address: + householdMember.members.first.address?.first, + latitude: lat, + longitude: long, + ), + isEditing: false, + boundaryModel: + RegistrationDeliverySingleton().boundary!, + ), + ); + + if (deliverInterventionState.futureDeliveries != null && + deliverInterventionState.futureDeliveries!.isNotEmpty && + RegistrationDeliverySingleton() + .projectType + ?.cycles + ?.isNotEmpty == + true) { + context.router.popUntilRouteWithName( + BeneficiaryWrapperRoute.name, + ); + context.router.push( + SplashAcknowledgementRoute( + enableBackToSearch: false, + ), + ); + } else { + final reloadState = context.read(); + + Future.delayed( + const Duration( + milliseconds: 1000, + ), + () { + reloadState.add( + HouseholdOverviewReloadEvent( + projectId: + RegistrationDeliverySingleton().projectId!, + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType!, + ), + ); + }, + ).then( + (value) { + context.router.popAndPush( + HouseholdAcknowledgementRoute( + enableViewHousehold: true, + ), + ); + }, + ); + } + } + } + }, + )); + } + } + + void handleLocationState( + LocationState locationState, + BuildContext context, + DeliverInterventionState deliverInterventionState, + FormGroup form, + HouseholdMemberWrapper householdMember, + ProjectBeneficiaryModel projectBeneficiary) { + if (context.mounted) { + DigitComponentsUtils().showLocationCapturingDialog( + context, + localizations.translate(i18.common.locationCapturing), + DigitSyncDialogType.inProgress); + + Future.delayed(const Duration(seconds: 2), () { + // After delay, hide the initial dialog + DigitComponentsUtils().hideLocationDialog(context); + handleCapturedLocationState( + locationState, + context, + deliverInterventionState, + form, + householdMember, + projectBeneficiary); + }); + } + } + @override Widget build(BuildContext context) { final theme = Theme.of(context); @@ -71,609 +219,433 @@ class _DeliverInterventionPageState }); } - return BlocBuilder( - builder: (context, locationState) { - return ProductVariantBlocWrapper( - child: BlocBuilder( - builder: (context, state) { - final householdMemberWrapper = state.householdMemberWrapper; - - final projectBeneficiary = - RegistrationDeliverySingleton().beneficiaryType != - BeneficiaryType.individual - ? [householdMemberWrapper.projectBeneficiaries.first] - : householdMemberWrapper.projectBeneficiaries - .where( - (element) => - element.beneficiaryClientReferenceId == - state.selectedIndividual?.clientReferenceId, - ) - .toList(); - - return Scaffold( - body: state.loading - ? const Center(child: CircularProgressIndicator()) - : BlocBuilder( - builder: (context, deliveryInterventionState) { - List? productVariants = - RegistrationDeliverySingleton() - .selectedProject - ?.additionalDetails - ?.projectType - ?.cycles - ?.isNotEmpty == - true - ? (fetchProductVariant( - RegistrationDeliverySingleton() - .selectedProject - ?.additionalDetails - ?.projectType - ?.cycles![ - deliveryInterventionState - .cycle - - 1] - .deliveries?[ - deliveryInterventionState.dose - 1], - state.selectedIndividual, - )?.productVariants) - : RegistrationDeliverySingleton() + return ProductVariantBlocWrapper( + child: BlocBuilder( + builder: (context, state) { + final householdMemberWrapper = state.householdMemberWrapper; + + final projectBeneficiary = + RegistrationDeliverySingleton().beneficiaryType != + BeneficiaryType.individual + ? [householdMemberWrapper.projectBeneficiaries.first] + : householdMemberWrapper.projectBeneficiaries + .where( + (element) => + element.beneficiaryClientReferenceId == + state.selectedIndividual?.clientReferenceId, + ) + .toList(); + + return Scaffold( + body: state.loading + ? const Center(child: CircularProgressIndicator()) + : BlocBuilder( + builder: (context, deliveryInterventionState) { + List? productVariants = + RegistrationDeliverySingleton() .selectedProject ?.additionalDetails ?.projectType - ?.resources - ?.map((r) => DeliveryProductVariant( - productVariantId: r.productVariantId)) - .toList(); - - final int numberOfDoses = - (RegistrationDeliverySingleton() - .projectType - ?.cycles - ?.isNotEmpty == - true) - ? (RegistrationDeliverySingleton() - .projectType - ?.cycles?[ - deliveryInterventionState.cycle - - 1] - .deliveries - ?.length) ?? - 0 - : 0; - - final steps = generateSteps(numberOfDoses); - if ((productVariants ?? []).isEmpty) { - DigitToast.show( - context, - options: DigitToastOptions( - localizations.translate( - i18.deliverIntervention - .checkForProductVariantsConfig, - ), - true, - theme, - ), - ); - } - - return BlocBuilder( - builder: (context, productState) { - return productState.maybeWhen( - orElse: () => const Offstage(), - fetched: (productVariantsValue) { - final variant = productState.whenOrNull( - fetched: (productVariants) { - return productVariants; - }, - ); + ?.cycles + ?.isNotEmpty == + true + ? (fetchProductVariant( + RegistrationDeliverySingleton() + .selectedProject + ?.additionalDetails + ?.projectType + ?.cycles![deliveryInterventionState + .cycle - + 1] + .deliveries?[ + deliveryInterventionState.dose - 1], + state.selectedIndividual, + )?.productVariants) + : RegistrationDeliverySingleton() + .selectedProject + ?.additionalDetails + ?.projectType + ?.resources + ?.map((r) => DeliveryProductVariant( + productVariantId: r.productVariantId)) + .toList(); - return ReactiveFormBuilder( - form: () => buildForm( - context, - productVariants, - variant, - ), - builder: (context, form, child) { - return ScrollableContent( - enableFixedButton: true, - footer: BlocBuilder< - DeliverInterventionBloc, - DeliverInterventionState>( - builder: (context, state) { - return DigitCard( - margin: - const EdgeInsets.fromLTRB( - 0, kPadding, 0, 0), - padding: - const EdgeInsets.fromLTRB( - kPadding, - 0, - kPadding, - 0), - child: ValueListenableBuilder( - valueListenable: - clickedStatus, - builder: (context, - bool isClicked, _) { - return DigitElevatedButton( - onPressed: isClicked - ? null - : () async { - final deliveredProducts = ((form - .control( - _resourceDeliveredKey, - ) as FormArray) + final int numberOfDoses = (RegistrationDeliverySingleton() + .projectType + ?.cycles + ?.isNotEmpty == + true) + ? (RegistrationDeliverySingleton() + .projectType + ?.cycles?[deliveryInterventionState.cycle - 1] + .deliveries + ?.length) ?? + 0 + : 0; + + final steps = generateSteps(numberOfDoses); + if ((productVariants ?? []).isEmpty) { + DigitToast.show( + context, + options: DigitToastOptions( + localizations.translate( + i18.deliverIntervention + .checkForProductVariantsConfig, + ), + true, + theme, + ), + ); + } + + return BlocBuilder( + builder: (context, productState) { + return productState.maybeWhen( + orElse: () => const Offstage(), + fetched: (productVariantsValue) { + final variant = productState.whenOrNull( + fetched: (productVariants) { + return productVariants; + }, + ); + + return ReactiveFormBuilder( + form: () => buildForm( + context, + productVariants, + variant, + ), + builder: (context, form, child) { + return ScrollableContent( + enableFixedButton: true, + footer: BlocBuilder( + builder: (context, state) { + return DigitCard( + margin: const EdgeInsets.fromLTRB( + 0, kPadding, 0, 0), + padding: const EdgeInsets.fromLTRB( + kPadding, 0, kPadding, 0), + child: ValueListenableBuilder( + valueListenable: clickedStatus, + builder: + (context, bool isClicked, _) { + return BlocBuilder( + builder: + (context, locationState) { + return DigitElevatedButton( + onPressed: isClicked + ? null + : () async { + final deliveredProducts = + ((form.control( + _resourceDeliveredKey, + ) as FormArray) .value as List< ProductVariantModel?>); - if (hasDuplicatesOrEmptyResource( - deliveredProducts)) { - await DigitToast - .show( - context, - options: - DigitToastOptions( - localizations.translate(i18 + if (hasDuplicatesOrEmptyResource( + deliveredProducts)) { + await DigitToast + .show( + context, + options: + DigitToastOptions( + localizations + .translate(i18 .deliverIntervention .resourceDeliveredValidation), - true, - theme, - ), - ); - } else if ((((form - .control( - _quantityDistributedKey, - ) as FormArray) - .value) ?? - []) - .any((e) => e == 0)) { - await DigitToast - .show( - context, - options: - DigitToastOptions( - localizations.translate(i18 + true, + theme, + ), + ); + } else if ((((form + .control( + _quantityDistributedKey, + ) as FormArray) + .value) ?? + []) + .any((e) => e == 0)) { + await DigitToast + .show( + context, + options: + DigitToastOptions( + localizations + .translate(i18 .deliverIntervention .resourceCannotBeZero), - true, - theme, - ), - ); - } else { - final lat = - locationState - .latitude; - final long = - locationState - .longitude; - final shouldSubmit = - await DigitDialog - .show< - bool>( - context, - options: - DigitDialogOptions( - titleText: - localizations - .translate( - i18.deliverIntervention - .dialogTitle, - ), - contentText: - localizations - .translate( - i18.deliverIntervention - .dialogContent, - ), - primaryAction: - DigitDialogActions( - label: localizations - .translate( - i18.common - .coreCommonSubmit, - ), - action: - (ctx) { - clickedStatus.value = - true; - Navigator - .of( - context, - rootNavigator: - true, - ).pop( - true); - }, - ), - secondaryAction: - DigitDialogActions( - label: localizations - .translate( - i18.common - .coreCommonCancel, - ), - action: (context) => - Navigator - .of( - context, - rootNavigator: - true, - ).pop(false), - ), - ), - ); - - if (shouldSubmit ?? - false) { - if (context - .mounted) { - context - .read< - DeliverInterventionBloc>() - .add( - DeliverInterventionSubmitEvent( - task: - _getTaskModel( - context, - form: form, - oldTask: null, - projectBeneficiaryClientReferenceId: projectBeneficiary.first.clientReferenceId, - dose: deliveryInterventionState.dose, - cycle: deliveryInterventionState.cycle, - deliveryStrategy: DeliverStrategyType.direct.toValue(), - address: householdMemberWrapper.members.first.address?.first, - latitude: lat, - longitude: long, - ), - isEditing: - false, - boundaryModel: - RegistrationDeliverySingleton().boundary!, - ), - ); - - if (state - .futureDeliveries != - null && - state - .futureDeliveries! - .isNotEmpty && - RegistrationDeliverySingleton().projectType?.cycles?.isNotEmpty == - true) { - context - .router - .popUntilRouteWithName( - BeneficiaryWrapperRoute - .name, - ); - context - .router - .push( - SplashAcknowledgementRoute( - enableBackToSearch: - false, - ), - ); - } else { - final reloadState = - context - .read(); - - Future - .delayed( - const Duration( - milliseconds: - 1000, - ), - () { - reloadState - .add( - HouseholdOverviewReloadEvent( - projectId: RegistrationDeliverySingleton().projectId!, - projectBeneficiaryType: RegistrationDeliverySingleton().beneficiaryType!, - ), - ); - }, - ).then( - (value) { - context - .router - .popAndPush( - HouseholdAcknowledgementRoute( - enableViewHousehold: true, - ), - ); - }, - ); - } - } - } - } - }, - child: Center( - child: Text( - localizations - .translate( - i18.common - .coreCommonSubmit, - ), - ), + true, + theme, + ), + ); + } else { + context + .read< + LocationBloc>() + .add( + const LoadLocationEvent()); + handleLocationState( + locationState, + context, + deliveryInterventionState, + form, + householdMemberWrapper, + projectBeneficiary + .first); + } + }, + child: Center( + child: Text( + localizations.translate( + i18.common + .coreCommonSubmit, ), - ); - }, - ), - ); + ), + ), + ); + }); }, ), - header: const Column(children: [ - BackNavigationHelpHeaderWidget( - showHelp: false, + ); + }, + ), + header: const Column(children: [ + BackNavigationHelpHeaderWidget( + showHelp: false, + ), + ]), + children: [ + Column( + children: [ + DigitCard( + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + localizations.translate( + i18.deliverIntervention + .deliverInterventionLabel, + ), + style: theme + .textTheme.displayMedium, + ), + if (RegistrationDeliverySingleton() + .beneficiaryType == + BeneficiaryType.individual) + DigitTextFormField( + readOnly: true, + formControlName: + _doseAdministrationKey, + keyboardType: + TextInputType.number, + label: localizations + .translate(i18 + .deliverIntervention + .currentCycle), + ), + DigitStepper( + activeStep: + deliveryInterventionState + .dose - + 1, + stepRadius: 12.5, + steps: steps, + maxStepReached: 3, + lineLength: + (MediaQuery.of(context) + .size + .width - + 12.5 * + 2 * + steps.length - + 50) / + (steps.length - 1), + ), + DigitDateFormPicker( + isEnabled: false, + formControlName: + _dateOfAdministrationKey, + label: + localizations.translate( + i18.householdDetails + .dateOfRegistrationLabel, + ), + confirmText: + localizations.translate( + i18.common.coreCommonOk, + ), + cancelText: + localizations.translate( + i18.common.coreCommonCancel, + ), + isRequired: false, + padding: + const EdgeInsets.only( + top: kPadding, + ), + ), + ], ), - ]), - children: [ - Column( + ), + DigitCard( + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, children: [ - DigitCard( - child: Column( - crossAxisAlignment: - CrossAxisAlignment - .start, - mainAxisSize: - MainAxisSize.min, - children: [ - Text( - localizations.translate( - i18.deliverIntervention - .deliverInterventionLabel, - ), - style: theme.textTheme - .displayMedium, - ), - if (RegistrationDeliverySingleton() - .beneficiaryType == - BeneficiaryType - .individual) - DigitTextFormField( - readOnly: true, - formControlName: - _doseAdministrationKey, - keyboardType: - TextInputType - .number, - label: localizations - .translate(i18 - .deliverIntervention - .currentCycle), - ), - DigitStepper( - activeStep: - deliveryInterventionState - .dose - - 1, - stepRadius: 12.5, - steps: steps, - maxStepReached: 3, - lineLength: (MediaQuery.of( - context) - .size - .width - - 12.5 * - 2 * - steps - .length - - 50) / - (steps.length - 1), - ), - DigitDateFormPicker( - isEnabled: false, - formControlName: - _dateOfAdministrationKey, - label: localizations - .translate( - i18.householdDetails - .dateOfRegistrationLabel, - ), - confirmText: - localizations - .translate( - i18.common - .coreCommonOk, - ), - cancelText: - localizations - .translate( - i18.common - .coreCommonCancel, - ), - isRequired: false, - padding: - const EdgeInsets - .only( - top: kPadding, - ), - ), - ], + Text( + localizations.translate( + i18.deliverIntervention + .deliverInterventionResourceLabel, ), + style: theme + .textTheme.headlineLarge, ), - DigitCard( - child: Column( - crossAxisAlignment: - CrossAxisAlignment - .start, - mainAxisSize: - MainAxisSize.min, - children: [ - Text( - localizations.translate( - i18.deliverIntervention - .deliverInterventionResourceLabel, - ), - style: theme.textTheme - .headlineLarge, - ), - ..._controllers.map((e) => - ResourceBeneficiaryCard( - form: form, - cardIndex: - _controllers - .indexOf(e), - totalItems: + ..._controllers.map((e) => + ResourceBeneficiaryCard( + form: form, + cardIndex: _controllers + .indexOf(e), + totalItems: + _controllers.length, + onDelete: (index) { + (form.control( + _resourceDeliveredKey, + ) as FormArray) + .removeAt( + index, + ); + (form.control( + _quantityDistributedKey, + ) as FormArray) + .removeAt( + index, + ); + _controllers.removeAt( + index, + ); + setState(() { + _controllers; + }); + }, + )), + Center( + child: DigitIconButton( + onPressed: ((form.control(_resourceDeliveredKey) + as FormArray) + .value ?? + []) + .length < + (productVariants ?? + []) + .length + ? () async { + addController(form); + setState(() { + _controllers.add( _controllers .length, - onDelete: (index) { - (form.control( - _resourceDeliveredKey, - ) as FormArray) - .removeAt( - index, ); - (form.control( - _quantityDistributedKey, - ) as FormArray) - .removeAt( - index, - ); - _controllers - .removeAt( - index, - ); - setState(() { - _controllers; - }); - }, - )), - Center( - child: DigitIconButton( - onPressed: ((form.control(_resourceDeliveredKey) as FormArray) - .value ?? - []) - .length < - (productVariants ?? - []) - .length - ? () async { - addController( - form); - setState(() { - _controllers - .add( - _controllers - .length, - ); - }); - } - : null, - icon: - Icons.add_circle, - iconColor: ((form.control(_resourceDeliveredKey) as FormArray) - .value ?? - []) - .length < - (productVariants ?? - []) - .length - ? theme - .colorScheme - .secondary - : theme - .colorScheme - .outline, - iconTextColor: ((form.control(_resourceDeliveredKey) as FormArray) - .value ?? - []) - .length < - (productVariants ?? - []) - .length - ? theme - .colorScheme - .secondary - : theme - .colorScheme - .outline, - iconText: - localizations - .translate( - i18.deliverIntervention - .resourceAddBeneficiary, - ), - ), - ), - ], + }); + } + : null, + icon: Icons.add_circle, + iconColor: ((form.control(_resourceDeliveredKey) + as FormArray) + .value ?? + []) + .length < + (productVariants ?? + []) + .length + ? theme.colorScheme + .secondary + : theme.colorScheme + .outline, + iconTextColor: ((form.control(_resourceDeliveredKey) + as FormArray) + .value ?? + []) + .length < + (productVariants ?? + []) + .length + ? theme.colorScheme + .secondary + : theme.colorScheme + .outline, + iconText: + localizations.translate( + i18.deliverIntervention + .resourceAddBeneficiary, + ), ), ), - DigitCard( - child: Column( - crossAxisAlignment: - CrossAxisAlignment - .start, - mainAxisSize: - MainAxisSize.min, - children: [ - Text( - localizations.translate( - i18.deliverIntervention - .deliveryCommentLabel, - ), - style: theme.textTheme - .headlineLarge, - ), - DigitReactiveSearchDropdown< - String>( - label: localizations - .translate( - i18.deliverIntervention - .deliveryCommentLabel, - ), - form: form, - menuItems: - RegistrationDeliverySingleton() - .deliveryCommentOptions! - .map((e) { - return localizations - .translate(e); - }).toList() - ..sort((a, b) => - a.compareTo( - b)), - formControlName: - _deliveryCommentKey, - valueMapper: (value) => - value, - emptyText: localizations - .translate(i18 - .common - .noMatchFound), - ) - ], + ], + ), + ), + DigitCard( + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + localizations.translate( + i18.deliverIntervention + .deliveryCommentLabel, ), + style: theme + .textTheme.headlineLarge, ), + DigitReactiveSearchDropdown< + String>( + label: + localizations.translate( + i18.deliverIntervention + .deliveryCommentLabel, + ), + form: form, + menuItems: + RegistrationDeliverySingleton() + .deliveryCommentOptions! + .map((e) { + return localizations + .translate(e); + }).toList() + ..sort((a, b) => + a.compareTo(b)), + formControlName: + _deliveryCommentKey, + valueMapper: (value) => value, + emptyText: localizations + .translate(i18 + .common.noMatchFound), + ) ], ), - ], - ); - }, - ); - }, - empty: () => Center( - child: Text( - localizations.translate( - i18.deliverIntervention - .checkForProductVariantsConfig, ), - ), - )); + ], + ), + ], + ); + }, + ); }, ); }, - ), - ); - }, - ), - ); - }, + ); + }, + ), + ); + }, + ), ); } diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index 87d9c9642..8c54358be 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -1,5 +1,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; +import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/models/entities/address_type.dart'; import 'package:flutter/material.dart'; @@ -40,6 +41,12 @@ class _HouseholdLocationPageState static const _accuracyKey = 'accuracy'; static const maxLength = 64; + @override + void initState() { + context.read().add(const LoadLocationEvent()); + super.initState(); + } + @override Widget build(BuildContext context) { final theme = Theme.of(context); @@ -99,122 +106,158 @@ class _HouseholdLocationPageState form.control(_landmarkKey).value as String?; final postalCode = form.control(_postalCodeKey).value as String?; + context + .read() + .add(const LoadLocationEvent()); + DigitComponentsUtils().showLocationCapturingDialog( + context, + localizations + .translate(i18.common.locationCapturing), + DigitSyncDialogType.inProgress); + Future.delayed(const Duration(seconds: 2), () async { + // After delay, hide the initial dialog + DigitComponentsUtils().hideLocationDialog(context); + await DigitSyncDialog.show(context, + type: DigitSyncDialogType.complete, + label: localizations + .translate(i18.common.locationCaptured), + primaryAction: DigitDialogActions( + label: localizations.translate( + i18.beneficiaryDetails.ctaProceed, + ), + action: (ctx) async { + DigitComponentsUtils() + .hideLocationDialog(context); + registrationState.maybeWhen( + orElse: () { + return; + }, + create: ( + address, + householdModel, + individualModel, + registrationDate, + searchQuery, + loading, + isHeadOfHousehold, + ) { + var addressModel = AddressModel( + addressLine1: addressLine1 != null && + addressLine1.trim().isNotEmpty + ? addressLine1 + : null, + addressLine2: addressLine2 != null && + addressLine2.trim().isNotEmpty + ? addressLine2 + : null, + landmark: landmark != null && + landmark.trim().isNotEmpty + ? landmark + : null, + pincode: postalCode != null && + postalCode.trim().isNotEmpty + ? postalCode + : null, + type: AddressType.correspondence, + latitude: + form.control(_latKey).value ?? + locationState.latitude, + longitude: + form.control(_lngKey).value ?? + locationState.longitude, + locationAccuracy: form + .control(_accuracyKey) + .value ?? + locationState.accuracy, + locality: LocalityModel( + code: + RegistrationDeliverySingleton() + .boundary! + .code!, + name: + RegistrationDeliverySingleton() + .boundary! + .name, + ), + tenantId: + RegistrationDeliverySingleton() + .tenantId, + rowVersion: 1, + auditDetails: AuditDetails( + createdBy: + RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: context + .millisecondsSinceEpoch(), + ), + clientAuditDetails: + ClientAuditDetails( + createdBy: + RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: context + .millisecondsSinceEpoch(), + ), + ); - registrationState.maybeWhen( - orElse: () { - return; - }, - create: ( - address, - householdModel, - individualModel, - registrationDate, - searchQuery, - loading, - isHeadOfHousehold, - ) { - var addressModel = AddressModel( - addressLine1: addressLine1 != null && - addressLine1.trim().isNotEmpty - ? addressLine1 - : null, - addressLine2: addressLine2 != null && - addressLine2.trim().isNotEmpty - ? addressLine2 - : null, - landmark: landmark != null && - landmark.trim().isNotEmpty - ? landmark - : null, - pincode: postalCode != null && - postalCode.trim().isNotEmpty - ? postalCode - : null, - type: AddressType.correspondence, - latitude: form.control(_latKey).value ?? - locationState.latitude, - longitude: form.control(_lngKey).value ?? - locationState.longitude, - locationAccuracy: - form.control(_accuracyKey).value ?? - locationState.accuracy, - locality: LocalityModel( - code: RegistrationDeliverySingleton() - .boundary! - .code!, - name: RegistrationDeliverySingleton() - .boundary! - .name, - ), - tenantId: - RegistrationDeliverySingleton().tenantId, - rowVersion: 1, - auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context.millisecondsSinceEpoch(), - ), - clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context.millisecondsSinceEpoch(), - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: - context.millisecondsSinceEpoch(), - ), - ); - - bloc.add( - BeneficiaryRegistrationSaveAddressEvent( - addressModel, - ), - ); - router.push(HouseHoldDetailsRoute()); - }, - editHousehold: ( - address, - householdModel, - individuals, - registrationDate, - projectBeneficiaryModel, - loading, - ) { - var addressModel = address.copyWith( - addressLine1: addressLine1 != null && - addressLine1.trim().isNotEmpty - ? addressLine1 - : null, - addressLine2: addressLine2 != null && - addressLine2.trim().isNotEmpty - ? addressLine2 - : null, - landmark: landmark != null && - landmark.trim().isNotEmpty - ? landmark - : null, - locality: address.locality, - pincode: postalCode != null && - postalCode.trim().isNotEmpty - ? postalCode - : null, - type: AddressType.correspondence, - latitude: form.control(_latKey).value, - longitude: form.control(_lngKey).value, - locationAccuracy: - form.control(_accuracyKey).value, - ); - // TODO [Linking of Voucher for Household based project need to be handled] + bloc.add( + BeneficiaryRegistrationSaveAddressEvent( + addressModel, + ), + ); + router.push(HouseHoldDetailsRoute()); + }, + editHousehold: ( + address, + householdModel, + individuals, + registrationDate, + projectBeneficiaryModel, + loading, + ) { + var addressModel = address.copyWith( + addressLine1: addressLine1 != null && + addressLine1.trim().isNotEmpty + ? addressLine1 + : null, + addressLine2: addressLine2 != null && + addressLine2.trim().isNotEmpty + ? addressLine2 + : null, + landmark: landmark != null && + landmark.trim().isNotEmpty + ? landmark + : null, + locality: address.locality, + pincode: postalCode != null && + postalCode.trim().isNotEmpty + ? postalCode + : null, + type: AddressType.correspondence, + latitude: form.control(_latKey).value, + longitude: + form.control(_lngKey).value, + locationAccuracy: + form.control(_accuracyKey).value, + ); + // TODO [Linking of Voucher for Household based project need to be handled] - bloc.add( - BeneficiaryRegistrationSaveAddressEvent( - addressModel, - ), - ); - router.push(HouseHoldDetailsRoute()); - }, - ); + bloc.add( + BeneficiaryRegistrationSaveAddressEvent( + addressModel, + ), + ); + router.push(HouseHoldDetailsRoute()); + }, + ); + }, + )); + }); }, child: Center( child: Text( diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index 95e7f3172..d30bccdca 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -47,7 +47,7 @@ class _SearchBeneficiaryPageState void initState() { // Initialize the BlocWrapper with instances of SearchHouseholdsBloc, SearchMemberBloc, and ProximitySearchBloc blocWrapper = context.read(); - + context.read().add(const LoadLocationEvent()); // Listen to state changes blocWrapper.stateChanges.listen((state) { if (mounted) { diff --git a/packages/registration_delivery/lib/utils/i18_key_constants.dart b/packages/registration_delivery/lib/utils/i18_key_constants.dart index 5fa02c710..3731ac8aa 100644 --- a/packages/registration_delivery/lib/utils/i18_key_constants.dart +++ b/packages/registration_delivery/lib/utils/i18_key_constants.dart @@ -113,6 +113,8 @@ class Common { String get scanBales => 'CORE_COMMON_SCAN_BALES'; String get ageInMonths => 'AGE_IN_MONTHS_LABEL'; + String get locationCapturing => 'CAPTURING_LOCATION'; + String get locationCaptured => 'LOCATION_CAPTURED'; } class SearchBeneficiary { diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index 03f360778..cce3bb27d 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -1,6 +1,6 @@ name: registration_delivery description: This package enables health facility workers to register a household and individual members and deliver the resources. -version: 1.0.2 +version: 1.0.2+1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/registration_delivery repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/tools/install_bricks.sh b/tools/install_bricks.sh index a5d0a831e..539db9714 100755 --- a/tools/install_bricks.sh +++ b/tools/install_bricks.sh @@ -1,12 +1,12 @@ home="$PWD" -dart pub global activate mason_cli -dart pub global activate melos +flutter pub global activate mason_cli +flutter pub global activate melos -melos run generate-hooks +melos.bat run generate-hooks -mason add digit_entity --path ./mason_templates/digit_entity -g -mason add freezed_bloc --path ./mason_templates/freezed_bloc -g +mason.bat add digit_entity --path ./mason_templates/digit_entity -g +mason.bat add freezed_bloc --path ./mason_templates/freezed_bloc -g cd apps/health_campaign_field_worker_app/lib || exit app_root="$PWD" @@ -15,14 +15,14 @@ cd models/model_configs || exit for file in *.json ; do echo "$file" - mason make digit_entity -c "$file" --on-conflict overwrite -o "$app_root" + mason.bat make digit_entity -c "$file" --on-conflict overwrite -o "$app_root" done cd "$home" || exit echo "$PWD" -melos clean -melos bootstrap +melos.bat clean +melos.bat bootstrap cd tools || exit From 64fe3759b695d1e83890aebc0c383bc3c708d46c Mon Sep 17 00:00:00 2001 From: Ramkrishna-egov Date: Tue, 2 Jul 2024 02:56:58 +0530 Subject: [PATCH 036/241] Reverted install_bricks.sh --- tools/install_bricks.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tools/install_bricks.sh b/tools/install_bricks.sh index 539db9714..a5d0a831e 100755 --- a/tools/install_bricks.sh +++ b/tools/install_bricks.sh @@ -1,12 +1,12 @@ home="$PWD" -flutter pub global activate mason_cli -flutter pub global activate melos +dart pub global activate mason_cli +dart pub global activate melos -melos.bat run generate-hooks +melos run generate-hooks -mason.bat add digit_entity --path ./mason_templates/digit_entity -g -mason.bat add freezed_bloc --path ./mason_templates/freezed_bloc -g +mason add digit_entity --path ./mason_templates/digit_entity -g +mason add freezed_bloc --path ./mason_templates/freezed_bloc -g cd apps/health_campaign_field_worker_app/lib || exit app_root="$PWD" @@ -15,14 +15,14 @@ cd models/model_configs || exit for file in *.json ; do echo "$file" - mason.bat make digit_entity -c "$file" --on-conflict overwrite -o "$app_root" + mason make digit_entity -c "$file" --on-conflict overwrite -o "$app_root" done cd "$home" || exit echo "$PWD" -melos.bat clean -melos.bat bootstrap +melos clean +melos bootstrap cd tools || exit From a1f30f28825662be06a919b6a8af0b6571049294 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Thu, 4 Jul 2024 16:55:00 +0530 Subject: [PATCH 037/241] removed validation for latitude for HLM-6246 fix --- apps/health_campaign_field_worker_app/pubspec.lock | 7 +++---- packages/digit_data_model/pubspec.lock | 8 +++++--- .../beneficiary_registration/household_location.dart | 4 +--- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 1d7251375..60fa7bc65 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -510,10 +510,9 @@ packages: digit_showcase: dependency: "direct main" description: - name: digit_showcase - sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_showcase" + relative: true + source: path version: "1.0.0" dio: dependency: "direct main" diff --git a/packages/digit_data_model/pubspec.lock b/packages/digit_data_model/pubspec.lock index a1850c91a..2b7fff90a 100644 --- a/packages/digit_data_model/pubspec.lock +++ b/packages/digit_data_model/pubspec.lock @@ -228,9 +228,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "145091c3b5f05ccea22ec7520f5b9f4e50ff6106" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index 438b88dc2..53bda9091 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -382,9 +382,7 @@ class _HouseholdLocationPageState Validators.minLength(2), Validators.maxLength(6), ]), - _latKey: FormControl(value: addressModel?.latitude, validators: [ - Validators.minLength(2), - ]), + _latKey: FormControl(value: addressModel?.latitude), _lngKey: FormControl( value: addressModel?.longitude, ), From a60bac3cb928ca6ba864a6fce9515465528759da Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Fri, 5 Jul 2024 16:49:55 +0530 Subject: [PATCH 038/241] mobile number validation in individual_details.dart as per new version of reactive forms --- .../pubspec.lock | 22 ++++++---- .../household_location.dart | 4 +- .../individual_details.dart | 14 ++++--- .../lib/utils/constants.dart | 3 +- .../lib/utils/utils.dart | 40 ------------------- packages/registration_delivery/pubspec.lock | 13 +++--- 6 files changed, 33 insertions(+), 63 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 60fa7bc65..65d4a94ba 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -71,7 +71,7 @@ packages: path: "../../packages/attendance_management" relative: true source: path - version: "1.0.0+1" + version: "1.0.1+1" audioplayers: dependency: transitive description: @@ -485,14 +485,14 @@ packages: path: "../../packages/digit_components" relative: true source: path - version: "1.0.0+1" + version: "1.0.0+3" digit_data_model: dependency: "direct main" description: path: "../../packages/digit_data_model" relative: true source: path - version: "1.0.1" + version: "1.0.2" digit_firebase_services: dependency: "direct main" description: @@ -506,7 +506,7 @@ packages: path: "../../packages/digit_scanner" relative: true source: path - version: "1.0.0+1" + version: "1.0.2" digit_showcase: dependency: "direct main" description: @@ -522,6 +522,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.4.3+1" + disable_battery_optimization: + dependency: "direct main" + description: + name: disable_battery_optimization + sha256: "6b2ba802f984af141faf1b6b5fb956d5ef01f9cd555597c35b9cc335a03185ba" + url: "https://pub.dev" + source: hosted + version: "1.1.1" disk_space_update: dependency: "direct main" description: @@ -1091,7 +1099,7 @@ packages: path: "../../packages/inventory_management" relative: true source: path - version: "1.0.0+1" + version: "1.0.2+1" io: dependency: transitive description: @@ -1522,14 +1530,14 @@ packages: path: "../../packages/referral_reconciliation" relative: true source: path - version: "1.0.0" + version: "1.0.2" registration_delivery: dependency: "direct main" description: path: "../../packages/registration_delivery" relative: true source: path - version: "1.0.1" + version: "1.0.2+1" remove_emoji_input_formatter: dependency: transitive description: diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index 2bea1243a..8c17aefb5 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -400,8 +400,8 @@ class _HouseholdLocationPageState return fb.group({ _administrationAreaKey: FormControl( - value: localizations.translate( - RegistrationDeliverySingleton().boundary!.code.toString()), + value: localizations + .translate(RegistrationDeliverySingleton().boundary!.name!), validators: [Validators.required], ), _addressLine1Key: diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index 709807ae8..349d99ac9 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -807,12 +807,14 @@ class _IndividualDetailsPageState : null, ), _genderKey: FormControl(value: getGenderOptions(individual)), - _mobileNumberKey: - FormControl(value: individual?.mobileNumber, validators: [ - CustomValidator.validMobileNumber, - CustomValidator.minPhoneNumValidation, - Validators.maxLength(10) - ]), + _mobileNumberKey: FormControl( + value: individual?.mobileNumber, + validators: [ + Validators.pattern(Constants.mobileNumberRegExp, + validationMessage: + localizations.translate(i18.common.coreCommonMobileNumber)) + ], + ) }); } diff --git a/packages/registration_delivery/lib/utils/constants.dart b/packages/registration_delivery/lib/utils/constants.dart index 973ddda76..066a43f05 100644 --- a/packages/registration_delivery/lib/utils/constants.dart +++ b/packages/registration_delivery/lib/utils/constants.dart @@ -3,7 +3,8 @@ class Constants { KeyValue('CORE_COMMON_YES', true), KeyValue('CORE_COMMON_NO', false), ]; - + static RegExp mobileNumberRegExp = + RegExp(r'^(?=.{10}$)[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\./0-9]*$'); final String dateFormat = 'dd/MM/yyyy'; final String communityHealthWorker = 'Community Health Worker'; final String deliveryTeam = 'Delivery Team'; diff --git a/packages/registration_delivery/lib/utils/utils.dart b/packages/registration_delivery/lib/utils/utils.dart index ed299fa2b..80258ad81 100644 --- a/packages/registration_delivery/lib/utils/utils.dart +++ b/packages/registration_delivery/lib/utils/utils.dart @@ -13,46 +13,6 @@ import '../models/entities/side_effect.dart'; import '../models/entities/status.dart'; import '../models/entities/task.dart'; -/// This class contains custom validators for form controls. -class CustomValidator { - /// Validates that control's value must be `true` - static Map? requiredMin( - AbstractControl control, - ) { - return control.value == null || - control.value.toString().length >= 2 || - control.value.toString().trim().isEmpty - ? null - : {'required': true}; - } - - static Map? validMobileNumber( - AbstractControl control, - ) { - if (control.value == null || control.value.toString().isEmpty) { - return null; - } - - const pattern = r'^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\./0-9]*$'; - - if (RegExp(pattern).hasMatch(control.value.toString())) return null; - - if (control.value.toString().length < 10) return {'mobileNumber': true}; - - return {'mobileNumber': true}; - } - - static Map? minPhoneNumValidation( - AbstractControl control, - ) { - if (control.value != null && - control.value.toString().isNotEmpty && - control.value.toString().length < 10) { - return {'minLength': true}; - } - } -} - bool checkStatus(List? tasks, ProjectCycle? currentCycle) { if (currentCycle == null) { return false; diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index f95d8b685..22abcfac7 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -390,28 +390,27 @@ packages: path: "../digit_components" relative: true source: path - version: "1.0.0+1" + version: "1.0.0+3" digit_data_model: dependency: "direct main" description: path: "../digit_data_model" relative: true source: path - version: "1.0.1" + version: "1.0.2" digit_scanner: dependency: "direct main" description: path: "../digit_scanner" relative: true source: path - version: "1.0.0+1" + version: "1.0.2" digit_showcase: dependency: "direct main" description: - name: digit_showcase - sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" - url: "https://pub.dev" - source: hosted + path: "../digit_showcase" + relative: true + source: path version: "1.0.0" dio: dependency: "direct main" From 978baf52f90f4fc18b473b9b91445485fdc52d65 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Mon, 8 Jul 2024 14:15:55 +0530 Subject: [PATCH 039/241] added default curve for digit_stepper.dart --- packages/digit_components/example/pubspec.lock | 2 +- .../digit_components/lib/widgets/atoms/digit_stepper.dart | 2 +- packages/inventory_management/pubspec.lock | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/digit_components/example/pubspec.lock b/packages/digit_components/example/pubspec.lock index 6b788a16b..844aa6a9d 100644 --- a/packages/digit_components/example/pubspec.lock +++ b/packages/digit_components/example/pubspec.lock @@ -231,7 +231,7 @@ packages: path: ".." relative: true source: path - version: "1.0.0+1" + version: "1.0.0+3" easy_stepper: dependency: transitive description: diff --git a/packages/digit_components/lib/widgets/atoms/digit_stepper.dart b/packages/digit_components/lib/widgets/atoms/digit_stepper.dart index 77c1de4d1..4b45e2ff9 100644 --- a/packages/digit_components/lib/widgets/atoms/digit_stepper.dart +++ b/packages/digit_components/lib/widgets/atoms/digit_stepper.dart @@ -166,7 +166,7 @@ class DigitStepper extends StatelessWidget { loadingAnimation: loadingAnimation, padding: padding, showTitle: showTitle, - stepAnimationCurve: stepAnimationCurve!, + stepAnimationCurve: stepAnimationCurve ?? stepReachedAnimationEffect ?? Curves.easeInOut, stepAnimationDuration: stepAnimationDuration ?? stepReachedAnimationDuration, stepBorderRadius: stepBorderRadius, diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index 81a9ff51e..957cc5381 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -390,21 +390,21 @@ packages: path: "../digit_components" relative: true source: path - version: "1.0.0+1" + version: "1.0.0+3" digit_data_model: dependency: "direct main" description: path: "../digit_data_model" relative: true source: path - version: "1.0.1" + version: "1.0.2" digit_scanner: dependency: "direct main" description: path: "../digit_scanner" relative: true source: path - version: "1.0.0+1" + version: "1.0.2" dio: dependency: "direct main" description: From e8ca9c5fa76b32619f95c6b4f77dc4220a877119 Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Mon, 8 Jul 2024 16:32:23 +0530 Subject: [PATCH 040/241] Updated the integer form picker and added a new text block component (#441) * updated the integer picker and added a new text block component * added a field to change the width of button * modified text block component to conditionally render children --------- Co-authored-by: rachana-egov --- .../atoms/digit_integer_form_picker.dart | 25 ++++-- .../lib/widgets/atoms/text_block.dart | 83 +++++++++++++++++++ 2 files changed, 99 insertions(+), 9 deletions(-) create mode 100644 packages/digit_components/lib/widgets/atoms/text_block.dart diff --git a/packages/digit_components/lib/widgets/atoms/digit_integer_form_picker.dart b/packages/digit_components/lib/widgets/atoms/digit_integer_form_picker.dart index 7f93e5da5..dc9f00e5c 100644 --- a/packages/digit_components/lib/widgets/atoms/digit_integer_form_picker.dart +++ b/packages/digit_components/lib/widgets/atoms/digit_integer_form_picker.dart @@ -10,6 +10,7 @@ class DigitIntegerFormPicker extends StatelessWidget { final String label; final FormGroup form; final String formControlName; + final double? buttonWidth; const DigitIntegerFormPicker({ super.key, this.minimum, @@ -19,6 +20,7 @@ class DigitIntegerFormPicker extends StatelessWidget { this.hint, required this.form, required this.label, + this.buttonWidth, }); @override @@ -57,14 +59,18 @@ class DigitIntegerFormPicker extends StatelessWidget { : form.control(formControlName).value -= 1, ), Expanded( - child: ReactiveTextField( - readOnly: true, - textAlign: TextAlign.center, - formControlName: formControlName, - decoration: InputDecoration( - labelText: hint, + child: SizedBox( + height: kPadding*5, + child: ReactiveTextField( + + readOnly: true, + textAlign: TextAlign.center, + formControlName: formControlName, + decoration: InputDecoration( + labelText: hint, + ), + keyboardType: TextInputType.number, ), - keyboardType: TextInputType.number, ), ), _buildButton(context, @@ -86,8 +92,9 @@ class DigitIntegerFormPicker extends StatelessWidget { required IconData icon, VoidCallback? onPressed, }) => - AspectRatio( - aspectRatio: 1, + SizedBox( + width: buttonWidth ?? 100, + height: kPadding*5, child: Material( shape: border, color: Theme.of(context).colorScheme.background, diff --git a/packages/digit_components/lib/widgets/atoms/text_block.dart b/packages/digit_components/lib/widgets/atoms/text_block.dart new file mode 100644 index 000000000..124bb352b --- /dev/null +++ b/packages/digit_components/lib/widgets/atoms/text_block.dart @@ -0,0 +1,83 @@ +import 'package:digit_components/theme/digit_theme.dart'; +import 'package:flutter/material.dart'; +import '../../theme/colors.dart'; + +class TextBlock extends StatelessWidget { + final String? caption; + final TextStyle? captionStyle; + final String? heading; + final TextStyle? headingStyle; + final String? subHeading; + final TextStyle? subHeadingStyle; + final String? body; + final TextStyle? bodyStyle; + final EdgeInsets? padding; + final double spacing; + + const TextBlock({ + Key? key, + this.caption, + this.heading, + this.subHeading, + this.body, + this.captionStyle, + this.headingStyle, + this.subHeadingStyle, + this.bodyStyle, + this.padding, + this.spacing = kPadding, + }) : super(key: key); + + List _conditionalRender(String? text, TextStyle? style, {bool addSpacing = false}) { + if (text == null) return []; + List children = [ + Text( + text, + style: style, + ), + ]; + if (addSpacing) children.add(SizedBox(height: spacing)); + return children; + } + + List _buildTextBlocks(BuildContext context) { + final theme = Theme.of(context); + final List blocks = []; + + blocks.addAll(_conditionalRender( + caption, + captionStyle ?? theme.textTheme.labelSmall?.copyWith(color: const DigitColors().davyGray), + addSpacing: caption != null && (heading != null || subHeading != null || body != null), + )); + + blocks.addAll(_conditionalRender( + heading, + headingStyle ?? theme.textTheme.displayMedium?.copyWith(color: const DigitColors().woodsmokeBlack), + addSpacing: heading != null && (subHeading != null || body != null), + )); + + blocks.addAll(_conditionalRender( + subHeading, + subHeadingStyle ?? theme.textTheme.headlineMedium?.copyWith(color: const DigitColors().davyGray), + addSpacing: subHeading != null && body != null, + )); + + blocks.addAll(_conditionalRender( + body, + bodyStyle ?? theme.textTheme.bodyLarge?.copyWith(color: const DigitColors().davyGray), + )); + + return blocks; + } + + @override + Widget build(BuildContext context) { + return Padding( + padding: padding ?? const EdgeInsets.symmetric(vertical: kPadding), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: _buildTextBlocks(context), + ), + ); + } +} From 150c83e598674e16763a4bcec2f0701ad2eb76b1 Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Tue, 9 Jul 2024 10:07:35 +0530 Subject: [PATCH 041/241] updated description for household location and details page (#443) Co-authored-by: rachana-egov --- .../household_details.dart | 16 ++++++++------- .../household_location.dart | 20 ++++++++++--------- .../lib/utils/i18_key_constants.dart | 4 ++++ 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart index 385ac6363..8b610f9e0 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart @@ -1,5 +1,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; +import 'package:digit_components/widgets/atoms/text_block.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -214,13 +215,14 @@ class _HouseHoldDetailsPageState extends LocalizedState { crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ - Padding( - padding: const EdgeInsets.only(bottom: kPadding), - child: Text( - localizations.translate( - i18.householdDetails.householdDetailsLabel, - ), - style: theme.textTheme.displayMedium, + TextBlock( + padding: const EdgeInsets.only(top: kPadding), + heading: localizations.translate( + i18.householdDetails.householdDetailsLabel, + ), + headingStyle: theme.textTheme.displayMedium, + body: localizations.translate( + i18.householdDetails.householdDetailsDescription, ), ), Column(children: [ diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index 87d9c9642..f2a099f67 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -1,5 +1,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; +import 'package:digit_components/widgets/atoms/text_block.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/models/entities/address_type.dart'; import 'package:flutter/material.dart'; @@ -234,16 +235,17 @@ class _HouseholdLocationPageState crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ - Padding( - padding: - const EdgeInsets.fromLTRB(0, 0, 0, kPadding), - child: Text( - localizations.translate( - i18.householdLocation - .householdLocationLabelText, - ), - style: theme.textTheme.displayMedium, + TextBlock( + padding: const EdgeInsets.only(top: kPadding), + heading: localizations.translate( + i18.householdLocation + .householdLocationLabelText, ), + headingStyle: theme.textTheme.displayMedium, + body: localizations.translate( + i18.householdLocation + .householdLocationDescriptionText, + ) ), Column(children: [ householdLocationShowcaseData.administrativeArea diff --git a/packages/registration_delivery/lib/utils/i18_key_constants.dart b/packages/registration_delivery/lib/utils/i18_key_constants.dart index 5fa02c710..38388fd3e 100644 --- a/packages/registration_delivery/lib/utils/i18_key_constants.dart +++ b/packages/registration_delivery/lib/utils/i18_key_constants.dart @@ -283,6 +283,8 @@ class HouseholdLocation { String get householdLocationLabelText => 'HOUSEHOLD_LOCATION_LABEL_TEXT'; + String get householdLocationDescriptionText => 'HOUSEHOLD_LOCATION_DESCRIPTION_TEXT'; + String get administrationAreaFormLabel => 'ADMINISTRATION_AREA_FORM_LABEL'; String get administrationAreaRequiredValidation => @@ -321,6 +323,8 @@ class HouseholdDetails { String get householdDetailsLabel => 'HOUSEHOLD_DETAILS_LABEL'; + String get householdDetailsDescription => 'HOUSEHOLD_DETAILS_DESCRIPTION'; + String get actionLabel => 'HOUSEHOLD_ACTION_LABEL'; String get dateOfRegistrationLabel => From 63ec9aca5c7aa46e61480210cc213fdeae26ab04 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Tue, 9 Jul 2024 10:54:40 +0530 Subject: [PATCH 042/241] qr_scanner fix - HLM-6411 --- .../lib/utils/scanner_utils.dart | 9 ++++++++- .../vision_detector_views/camera_view.dart | 20 +++++++++++++++---- packages/digit_scanner/pubspec.yaml | 1 + 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/packages/digit_scanner/lib/utils/scanner_utils.dart b/packages/digit_scanner/lib/utils/scanner_utils.dart index e78bc7f52..8ca44ac45 100644 --- a/packages/digit_scanner/lib/utils/scanner_utils.dart +++ b/packages/digit_scanner/lib/utils/scanner_utils.dart @@ -96,7 +96,14 @@ class DigitScannerUtils { setText(''); // Process the image to detect barcodes - final barcodes = await barcodeScanner.processImage(inputImage); + final barcodes; + + try { + barcodes = await barcodeScanner.processImage(inputImage); + } catch (e) { + debugPrint('Error processing image: $e'); + return; + } // Check if the input image has valid metadata for size and rotation if (inputImage.metadata?.size != null && diff --git a/packages/digit_scanner/lib/widgets/vision_detector_views/camera_view.dart b/packages/digit_scanner/lib/widgets/vision_detector_views/camera_view.dart index 4fa3589d9..da842e14a 100644 --- a/packages/digit_scanner/lib/widgets/vision_detector_views/camera_view.dart +++ b/packages/digit_scanner/lib/widgets/vision_detector_views/camera_view.dart @@ -337,16 +337,28 @@ class _CameraViewState extends State { // * nv21 for Android // * bgra8888 for iOS if (format == null || - (Platform.isAndroid && format != InputImageFormat.nv21) || - (Platform.isIOS && format != InputImageFormat.bgra8888)) return null; + (Platform.isAndroid && + !(format == InputImageFormat.nv21 || + format == InputImageFormat.yv12 || + format == InputImageFormat.yuv_420_888)) || + (Platform.isIOS && + !(format == InputImageFormat.bgra8888 || + format == InputImageFormat.yuv420))) { + return null; + } // since format is constraint to nv21 or bgra8888, both only have one plane - if (image.planes.length != 1) return null; + if (image.planes.isEmpty) return null; final plane = image.planes.first; + final WriteBuffer allBytes = WriteBuffer(); + for (Plane plane in image.planes) { + allBytes.putUint8List(plane.bytes); + } + final bytes = allBytes.done().buffer.asUint8List(); // compose InputImage using bytes return InputImage.fromBytes( - bytes: plane.bytes, + bytes: bytes, metadata: InputImageMetadata( size: Size(image.width.toDouble(), image.height.toDouble()), rotation: rotation, // used only in Android diff --git a/packages/digit_scanner/pubspec.yaml b/packages/digit_scanner/pubspec.yaml index 5533923d8..c947cae32 100644 --- a/packages/digit_scanner/pubspec.yaml +++ b/packages/digit_scanner/pubspec.yaml @@ -73,5 +73,6 @@ dev_dependencies: flutter: uses-material-design: true assets: + - ./ - assets/audio/add.wav - assets/audio/buzzer.wav \ No newline at end of file From 9b7c6e11e48bddc190976bdc305107c4fca8583c Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Tue, 9 Jul 2024 12:57:34 +0530 Subject: [PATCH 043/241] updated custom validator for minlength 2 and not null check with updated reactive forms --- .../registration/complaints_location.dart | 15 ++++++++++----- .../lib/utils/utils.dart | 13 +++++++++++++ .../household_location.dart | 12 ++++++++---- .../individual_details.dart | 5 +++-- .../registration_delivery/lib/utils/utils.dart | 13 +++++++++++++ 5 files changed, 47 insertions(+), 11 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/pages/complaints/registration/complaints_location.dart b/apps/health_campaign_field_worker_app/lib/pages/complaints/registration/complaints_location.dart index d7824394a..d7a6f2cfe 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/complaints/registration/complaints_location.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/complaints/registration/complaints_location.dart @@ -234,7 +234,8 @@ class _ComplaintsLocationPageState value: addressModel?.buildingName, disabled: shouldDisableForm, validators: [ - Validators.min(2), + Validators.delegate( + (validator) => CustomValidator.requiredMin(validator)), Validators.maxLength(maxLength), ], ), @@ -242,7 +243,8 @@ class _ComplaintsLocationPageState value: addressModel?.street, disabled: shouldDisableForm, validators: [ - Validators.min(2), + Validators.delegate( + (validator) => CustomValidator.requiredMin(validator)), Validators.maxLength(maxLength), ], ), @@ -250,7 +252,8 @@ class _ComplaintsLocationPageState value: addressModel?.landmark, disabled: shouldDisableForm, validators: [ - Validators.min(2), + Validators.delegate( + (validator) => CustomValidator.requiredMin(validator)), Validators.maxLength(maxLength), ], ), @@ -258,14 +261,16 @@ class _ComplaintsLocationPageState value: addressModel?.pincode, disabled: shouldDisableForm, validators: [ - Validators.min(2), + Validators.delegate( + (validator) => CustomValidator.requiredMin(validator)), Validators.maxLength(6), ], ), _latKey: FormControl( value: addressModel?.geoLocation?.latitude, validators: [ - Validators.min(2), + Validators.delegate( + (validator) => CustomValidator.requiredMin(validator)), ], ), _lngKey: FormControl( diff --git a/apps/health_campaign_field_worker_app/lib/utils/utils.dart b/apps/health_campaign_field_worker_app/lib/utils/utils.dart index 572dddc25..d399987f0 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/utils.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/utils.dart @@ -41,6 +41,19 @@ export 'app_exception.dart'; export 'constants.dart'; export 'extensions/extensions.dart'; +class CustomValidator { + /// Validates that control's value must be `true` + static Map? requiredMin( + AbstractControl control, + ) { + return control.value == null || + control.value.toString().length >= 2 || + control.value.toString().trim().isEmpty + ? null + : {'required': true}; + } +} + Future requestDisableBatteryOptimization() async { bool isIgnoringBatteryOptimizations = await DisableBatteryOptimization.isBatteryOptimizationDisabled ?? false; diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index 8c17aefb5..a95db7fd6 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -406,24 +406,28 @@ class _HouseholdLocationPageState ), _addressLine1Key: FormControl(value: addressModel?.addressLine1, validators: [ - Validators.minLength(2), + Validators.delegate( + (validator) => CustomValidator.requiredMin(validator)), Validators.maxLength(64), ]), _addressLine2Key: FormControl( value: addressModel?.addressLine2, validators: [ - Validators.minLength(2), + Validators.delegate( + (validator) => CustomValidator.requiredMin(validator)), Validators.maxLength(64), ], ), _landmarkKey: FormControl(value: addressModel?.landmark, validators: [ - Validators.minLength(2), + Validators.delegate( + (validator) => CustomValidator.requiredMin(validator)), Validators.maxLength(64), ]), _postalCodeKey: FormControl(value: addressModel?.pincode, validators: [ - Validators.minLength(2), + Validators.delegate( + (validator) => CustomValidator.requiredMin(validator)), Validators.maxLength(6), ]), _latKey: FormControl(value: addressModel?.latitude), diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index 349d99ac9..70fdb5806 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -787,7 +787,8 @@ class _IndividualDetailsPageState _individualNameKey: FormControl( validators: [ Validators.required, - Validators.minLength(2), + Validators.delegate( + (validator) => CustomValidator.requiredMin(validator)), Validators.maxLength(200), ], value: individual?.name?.givenName ?? searchQuery, @@ -812,7 +813,7 @@ class _IndividualDetailsPageState validators: [ Validators.pattern(Constants.mobileNumberRegExp, validationMessage: - localizations.translate(i18.common.coreCommonMobileNumber)) + localizations.translate(i18.common.coreCommonMobileNumber)) ], ) }); diff --git a/packages/registration_delivery/lib/utils/utils.dart b/packages/registration_delivery/lib/utils/utils.dart index 80258ad81..ab3b0ffbb 100644 --- a/packages/registration_delivery/lib/utils/utils.dart +++ b/packages/registration_delivery/lib/utils/utils.dart @@ -13,6 +13,19 @@ import '../models/entities/side_effect.dart'; import '../models/entities/status.dart'; import '../models/entities/task.dart'; +class CustomValidator { + /// Validates that control's value must be `true` + static Map? requiredMin( + AbstractControl control, + ) { + return control.value == null || + control.value.toString().length >= 2 || + control.value.toString().trim().isEmpty + ? null + : {'required': true}; + } +} + bool checkStatus(List? tasks, ProjectCycle? currentCycle) { if (currentCycle == null) { return false; From b390081e85a519f0d25b060d5092e10d9e8f5cfd Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Wed, 10 Jul 2024 11:09:27 +0530 Subject: [PATCH 044/241] replaced product variant dropdown to selection card (#445) Co-authored-by: rachana-egov --- .../lib/widgets/atoms/selection_card.dart | 161 ++++++++++++++++++ .../resource_beneficiary_card.dart | 42 +++-- 2 files changed, 185 insertions(+), 18 deletions(-) create mode 100644 packages/digit_components/lib/widgets/atoms/selection_card.dart diff --git a/packages/digit_components/lib/widgets/atoms/selection_card.dart b/packages/digit_components/lib/widgets/atoms/selection_card.dart new file mode 100644 index 000000000..5bad49245 --- /dev/null +++ b/packages/digit_components/lib/widgets/atoms/selection_card.dart @@ -0,0 +1,161 @@ +import 'package:digit_components/digit_components.dart'; +import 'package:flutter/material.dart'; + +class SelectionBox extends StatefulWidget { + final double? width; + final String? errorMessage; + final List options; + final Function(List) onSelectionChanged; + final List initialSelection; + final bool allowMultipleSelection; + final String Function(T) valueMapper; + + const SelectionBox({ + Key? key, + this.width, + this.errorMessage, + required this.options, + required this.onSelectionChanged, + this.initialSelection = const [], + this.allowMultipleSelection = true, + required this.valueMapper, + }) : super(key: key); + + @override + _SelectionBoxState createState() => _SelectionBoxState(); +} + +class _SelectionBoxState extends State> { + late List _selectedOptions = []; + + @override + void initState() { + super.initState(); + _selectedOptions = widget.initialSelection; + } + + void _onOptionTap(T option) { + setState(() { + if (widget.allowMultipleSelection) { + if (_selectedOptions.contains(option)) { + _selectedOptions.remove(option); + } else { + _selectedOptions.add(option); + } + } else { + if (_selectedOptions.contains(option)) { + _selectedOptions.clear(); + } else { + _selectedOptions.clear(); + _selectedOptions.add(option); + } + } + widget.onSelectionChanged(_selectedOptions); + }); + } + + Widget _buildOption(T option) { + final theme = Theme.of(context); + final textTheme = theme.textTheme; + final isSelected = _selectedOptions.contains(option); + + return GestureDetector( + onTap: () => _onOptionTap(option), + child: Container( + width: widget.width, + padding: const EdgeInsets.symmetric( + vertical: kPadding, horizontal: kPadding * 2), + decoration: BoxDecoration( + color: isSelected + ? const DigitColors().burningOrange + : const DigitColors().white, + borderRadius: BorderRadius.circular(kPadding / 2), + border: Border.all( + color: const DigitColors().quillGray, + width: 1, + ), + ), + child: Center( + child: Text( + widget.valueMapper(option), + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.center, + style: isSelected + ? textTheme.bodyMedium?.copyWith( + color: const DigitColors().white, + fontWeight: FontWeight.w700, + ) + : textTheme.bodyMedium?.copyWith( + color: const DigitColors().woodsmokeBlack, + ), + ), + ), + ), + ); + } + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + final textTheme = theme.textTheme; + + return Column( + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + padding: const EdgeInsets.all(kPadding * 3), + decoration: BoxDecoration( + color: const DigitColors().alabasterWhite, + borderRadius: BorderRadius.circular(kPadding / 2), + border: Border.all( + color: const DigitColors().quillGray, + width: 1, + ), + ), + child: Wrap( + spacing: kPadding * 3, + runSpacing: kPadding * 3, + children: widget.options.map(_buildOption).toList(), + ), + ), + const SizedBox(height: kPadding / 2), + if (widget.errorMessage != null) + Row( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Column( + children: [ + const SizedBox( + height: 2, + ), + SizedBox( + height: kPadding * 2, + width: kPadding * 2, + child: Icon( + Icons.info, + color: const DigitColors().lavaRed, + size: kPadding * 2, + ), + ), + ], + ), + const SizedBox(width: kPadding / 2), + Flexible( + fit: FlexFit.tight, + child: Text( + widget.errorMessage!, + style: textTheme.bodySmall?.copyWith( + color: const DigitColors().lavaRed, + ), + ), + ), + ], + ), + ], + ); + } +} diff --git a/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart index 24a628d9f..41e472699 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart @@ -1,4 +1,5 @@ import 'package:digit_components/digit_components.dart'; +import 'package:digit_components/widgets/atoms/selection_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; @@ -54,24 +55,28 @@ class _ResourceBeneficiaryCardState return productState.maybeWhen( orElse: () => const Offstage(), fetched: (productVariants) { - return DigitReactiveSearchDropdown( - label: localizations.translate( - i18.individualDetails.idTypeLabelText, - ), - form: widget.form, - menuItems: productVariants, - formControlName: 'resourceDelivered.${widget.cardIndex}', - valueMapper: (value) { - return localizations.translate( - value.sku ?? value.id, - ); - }, - isRequired: true, - validationMessage: localizations.translate( - i18.common.corecommonRequired, - ), - emptyText: localizations.translate(i18.common.noMatchFound), - ); + return + SelectionBox( + width: 116, + options: productVariants, + onSelectionChanged: (selectedOptions) { + if (selectedOptions.isNotEmpty) { + var selectedOption = selectedOptions.first; + widget.form.control('resourceDelivered.${widget.cardIndex}').value = selectedOption; + }else{ + widget.form.control('resourceDelivered.${widget.cardIndex}').value = null; + } + }, + initialSelection: widget.form.control('resourceDelivered.${widget.cardIndex}').value != null ? [ + widget.form.control('resourceDelivered.${widget.cardIndex}').value + ] : [], + valueMapper: (value) { + return localizations.translate( + value.sku ?? value.id, + ); + }, + allowMultipleSelection: false, + ); }, ); }, @@ -84,6 +89,7 @@ class _ResourceBeneficiaryCardState i18.deliverIntervention.quantityDistributedLabel, ), minimum: 1, + ), SizedBox( child: Align( From a93df1467768bfb4ed49b78eedea34b4ec2bd77e Mon Sep 17 00:00:00 2001 From: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Date: Wed, 10 Jul 2024 12:00:32 +0530 Subject: [PATCH 045/241] HLM-6283:: IRS- Household Details Fields added (#444) --- .../entities/additional_fields_type.dart | 4 + .../additional_fields_type.mapper.dart | 8 + .../household_details.dart | 166 +++++++++++++++--- .../lib/utils/i18_key_constants.dart | 8 + .../showcase/config/household_details.dart | 9 + 5 files changed, 170 insertions(+), 25 deletions(-) diff --git a/packages/registration_delivery/lib/models/entities/additional_fields_type.dart b/packages/registration_delivery/lib/models/entities/additional_fields_type.dart index 62dc38b30..98481a9db 100644 --- a/packages/registration_delivery/lib/models/entities/additional_fields_type.dart +++ b/packages/registration_delivery/lib/models/entities/additional_fields_type.dart @@ -39,4 +39,8 @@ enum AdditionalFieldsType { latitude, @MappableValue("longitude") longitude, + @MappableValue("pregnantWomen") + pregnantWomen, + @MappableValue("children") + children, } diff --git a/packages/registration_delivery/lib/models/entities/additional_fields_type.mapper.dart b/packages/registration_delivery/lib/models/entities/additional_fields_type.mapper.dart index 8e1f6fec5..4d7dd8a96 100644 --- a/packages/registration_delivery/lib/models/entities/additional_fields_type.mapper.dart +++ b/packages/registration_delivery/lib/models/entities/additional_fields_type.mapper.dart @@ -59,6 +59,10 @@ class AdditionalFieldsTypeMapper extends EnumMapper { return AdditionalFieldsType.latitude; case "longitude": return AdditionalFieldsType.longitude; + case "pregnantWomen": + return AdditionalFieldsType.pregnantWomen; + case "children": + return AdditionalFieldsType.children; default: throw MapperException.unknownEnumValue(value); } @@ -101,6 +105,10 @@ class AdditionalFieldsTypeMapper extends EnumMapper { return "latitude"; case AdditionalFieldsType.longitude: return "longitude"; + case AdditionalFieldsType.pregnantWomen: + return "pregnantWomen"; + case AdditionalFieldsType.children: + return "children"; } } } diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart index 8b610f9e0..8a0600724 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart @@ -5,6 +5,7 @@ import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; +import 'package:registration_delivery/models/entities/additional_fields_type.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; import '../../blocs/beneficiary_registration/beneficiary_registration.dart'; @@ -31,6 +32,8 @@ class HouseHoldDetailsPage extends LocalizedStatefulWidget { class _HouseHoldDetailsPageState extends LocalizedState { static const _dateOfRegistrationKey = 'dateOfRegistration'; static const _memberCountKey = 'memberCount'; + static const _pregnantWomenCountKey = 'pregnantWomenCount'; + static const _childrenCountKey = 'childrenCount'; @override Widget build(BuildContext context) { @@ -64,6 +67,11 @@ class _HouseHoldDetailsPageState extends LocalizedState { final dateOfRegistration = form.control(_dateOfRegistrationKey).value as DateTime; + //[TODO: Use pregnant women form value based on project config + final pregnantWomen = + form.control(_pregnantWomenCountKey).value as int; + final children = + form.control(_childrenCountKey).value as int; registrationState.maybeWhen( orElse: () { @@ -102,13 +110,46 @@ class _HouseHoldDetailsPageState extends LocalizedState { ); household = household.copyWith( - memberCount: memberCount, - address: addressModel, - ); + memberCount: memberCount, + clientAuditDetails: ClientAuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid + .toString(), + createdTime: context.millisecondsSinceEpoch(), + lastModifiedBy: RegistrationDeliverySingleton() + .loggedInUserUuid + .toString(), + lastModifiedTime: + context.millisecondsSinceEpoch(), + ), + auditDetails: AuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid + .toString(), + createdTime: context.millisecondsSinceEpoch(), + lastModifiedBy: RegistrationDeliverySingleton() + .loggedInUserUuid + .toString(), + lastModifiedTime: + context.millisecondsSinceEpoch(), + ), + address: addressModel, + additionalFields: + HouseholdAdditionalFields(version: 1, fields: [ + //[TODO: Use pregnant women form value based on project config + AdditionalField( + AdditionalFieldsType.pregnantWomen.toValue(), + pregnantWomen, + ), + AdditionalField( + AdditionalFieldsType.children.toValue(), + children, + ) + ])); bloc.add( BeneficiaryRegistrationSaveHouseholdDetailsEvent( - household: household!, + household: household, registrationDate: dateOfRegistration, ), ); @@ -125,27 +166,59 @@ class _HouseHoldDetailsPageState extends LocalizedState { loading, ) { var household = householdModel.copyWith( - memberCount: memberCount, - address: addressModel, - clientAuditDetails: - (householdModel.clientAuditDetails?.createdBy != - null && - householdModel.clientAuditDetails - ?.createdTime != - null) - ? ClientAuditDetails( - createdBy: householdModel - .clientAuditDetails!.createdBy, - createdTime: householdModel - .clientAuditDetails!.createdTime, - lastModifiedBy: householdModel - .clientAuditDetails!.lastModifiedBy, - lastModifiedTime: - DateTime.now().millisecondsSinceEpoch, - ) - : null, - rowVersion: householdModel.rowVersion, - ); + memberCount: memberCount, + address: addressModel, + clientAuditDetails: (householdModel + .clientAuditDetails?.createdBy != + null && + householdModel + .clientAuditDetails?.createdTime != + null) + ? ClientAuditDetails( + createdBy: householdModel + .clientAuditDetails!.createdBy, + createdTime: householdModel + .clientAuditDetails!.createdTime, + lastModifiedBy: householdModel + .clientAuditDetails!.lastModifiedBy, + lastModifiedTime: + DateTime.now().millisecondsSinceEpoch, + ) + : null, + rowVersion: householdModel.rowVersion, + additionalFields: HouseholdAdditionalFields( + version: + householdModel.additionalFields?.version ?? + 1, + fields: [ + //[TODO: Use pregnant women form value based on project config + AdditionalField( + AdditionalFieldsType.pregnantWomen + .toValue(), + int.tryParse(householdModel + .additionalFields?.fields + .where((h) => + h.key == + AdditionalFieldsType + .pregnantWomen + .toValue()) + .first + .value) ?? + pregnantWomen, + ), + AdditionalField( + AdditionalFieldsType.children.toValue(), + int.tryParse(householdModel + .additionalFields?.fields + .where((h) => + h.key == + AdditionalFieldsType.children + .toValue()) + .first + .value) ?? + children, + ) + ])); bloc.add( BeneficiaryRegistrationUpdateHouseholdDetailsEvent( @@ -256,6 +329,35 @@ class _HouseHoldDetailsPageState extends LocalizedState { incrementer: true, ), ), + //[TODO: Use pregnant women form value based on project config + householdDetailsShowcaseData + .numberOfPregnantWomenInHousehold + .buildWith( + child: DigitIntegerFormPicker( + minimum: 1, + form: form, + formControlName: _pregnantWomenCountKey, + label: localizations.translate( + i18.householdDetails + .noOfPregnantWomenCountLabel, + ), + incrementer: true, + ), + ), + householdDetailsShowcaseData + .numberOfChildrenBelow5InHousehold + .buildWith( + child: DigitIntegerFormPicker( + minimum: 1, + form: form, + formControlName: _childrenCountKey, + label: localizations.translate( + i18.householdDetails + .noOfChildrenBelow5YearsLabel, + ), + incrementer: true, + ), + ), ]), const SizedBox(height: 16), ], @@ -288,6 +390,20 @@ class _HouseHoldDetailsPageState extends LocalizedState { _dateOfRegistrationKey: FormControl(value: registrationDate, validators: []), _memberCountKey: FormControl(value: household?.memberCount ?? 1), + _pregnantWomenCountKey: FormControl( + value: int.tryParse(household?.additionalFields?.fields + .where((h) => + h.key == AdditionalFieldsType.pregnantWomen.toValue()) + .first + .value) ?? + 0), + _childrenCountKey: FormControl( + value: int.tryParse(household?.additionalFields?.fields + .where( + (h) => h.key == AdditionalFieldsType.children.toValue()) + .first + .value) ?? + 0) }); } } diff --git a/packages/registration_delivery/lib/utils/i18_key_constants.dart b/packages/registration_delivery/lib/utils/i18_key_constants.dart index 38388fd3e..c48626f28 100644 --- a/packages/registration_delivery/lib/utils/i18_key_constants.dart +++ b/packages/registration_delivery/lib/utils/i18_key_constants.dart @@ -331,6 +331,8 @@ class HouseholdDetails { 'HOUSEHOLD_DETAILS_DATE_OF_REGISTRATION_LABEL'; String get noOfMembersCountLabel => 'NO_OF_MEMBERS_COUNT_LABEL'; + String get noOfPregnantWomenCountLabel => 'NO_OF_PREGNANT_WOMEN_LABEL'; + String get noOfChildrenBelow5YearsLabel => 'NO_OF_CHILDREN_BELOW_5_YR_LABEL'; String get viewHouseHoldDetailsAction => 'VIEW_HOUSEHOLD_DETAILS_ACTION_LABEL'; } @@ -674,6 +676,12 @@ class HouseholdDetailsShowcase { String get numberOfMembersLivingInHousehold { return 'HOUSEHOLD_DETAILS_SHOWCASE_NUMBER_OF_MEMBERS_LIVING_IN_HOUSEHOLD'; } + + String get numberOfPregnantWomenInHousehold => + 'HOUSEHOLD_DETAILS_SHOWCASE_NO_OF_PREGNANT_WOMEN_IN_HOUSEHOLD'; + + String get numberOfChildrenBelow5InHousehold => + 'HOUSEHOLD_DETAILS_SHOWCASE_NO_OF_CHILD_BELOW_5_IN_HOUSEHOLD'; } class IndividualDetailsShowcase { diff --git a/packages/registration_delivery/lib/widgets/showcase/config/household_details.dart b/packages/registration_delivery/lib/widgets/showcase/config/household_details.dart index 74e12a496..a8ca14ae5 100644 --- a/packages/registration_delivery/lib/widgets/showcase/config/household_details.dart +++ b/packages/registration_delivery/lib/widgets/showcase/config/household_details.dart @@ -21,4 +21,13 @@ class _HouseholdDetailsShowcaseData { messageLocalizationKey: i18.householdDetailsShowcase.numberOfMembersLivingInHousehold, ); + + final numberOfPregnantWomenInHousehold = ShowcaseItemBuilder( + messageLocalizationKey: + i18.householdDetailsShowcase.numberOfPregnantWomenInHousehold, + ); + final numberOfChildrenBelow5InHousehold = ShowcaseItemBuilder( + messageLocalizationKey: + i18.householdDetailsShowcase.numberOfChildrenBelow5InHousehold, + ); } From 86eb01aada8d9717336b3807c2a1b4912c255785 Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Wed, 10 Jul 2024 16:23:48 +0530 Subject: [PATCH 046/241] Updated checklist for a new type boolean (#446) * updated checklist for a new type boolean * added To Do to fix hard code options --------- Co-authored-by: rachana-egov --- .../lib/pages/checklist/checklist_view.dart | 123 +++++++++++++++++- .../lib/widgets/atoms/selection_card.dart | 12 +- 2 files changed, 128 insertions(+), 7 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_view.dart b/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_view.dart index 132fd0b79..8409fb29e 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_view.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_view.dart @@ -2,6 +2,7 @@ import 'dart:math'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/utils/date_utils.dart'; +import 'package:digit_components/widgets/atoms/selection_card.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -19,6 +20,7 @@ import '../../widgets/localized.dart'; @RoutePage() class ChecklistViewPage extends LocalizedStatefulWidget { final String? referralClientRefId; + const ChecklistViewPage({ Key? key, this.referralClientRefId, @@ -440,6 +442,65 @@ class _ChecklistViewPageState extends LocalizedState { context, ), ), + ]else if (e.dataType == 'Boolean') ...[ + if (!(e.code ?? '').contains('.')) + DigitCard( + child: Column( + children: [ + Align( + alignment: Alignment.topLeft, + child: Padding( + padding: const EdgeInsets.all(8), + child: Column( + children: [ + Text( + '${localizations.translate( + '${selectedServiceDefinition?.code}.${e.code}', + )} ${e.required == true ? '*' : ''}', + style: theme.textTheme.headlineSmall, + ), + ], + ), + ), + ), + BlocBuilder( + builder: (context, state) { + return SelectionBox( + //label: e, + allowMultipleSelection: false, + width: 110, + valueMapper: (value) { + return value ? localizations.translate( + i18.common.coreCommonYes, + ) : localizations.translate( + i18.common.coreCommonNo, + ); + }, + initialSelection: controller[index].text=='true' ? [true] : controller[index].text=='false' ?[false] : [], + options: const [true, false], // TODO: need to update + onSelectionChanged: (curValue) { + if(curValue.isNotEmpty){ + context + .read() + .add( + ServiceChecklistEvent( + value: curValue.toString(), + submitTriggered: + submitTriggered, + ), + ); + controller[index].value = TextEditingValue( + text: curValue.first.toString(), + ); + } + + }, + ); + }, + ), + ], + ), + ), ], ]); }), @@ -753,6 +814,64 @@ class _ChecklistViewPageState extends LocalizedState { ), ], ); + } else if (item.dataType == 'Boolean') { + return Column( + children: [ + Align( + alignment: Alignment.topLeft, + child: Padding( + padding: const EdgeInsets.all(8), + child: Column( + children: [ + Text( + '${localizations.translate( + '${selectedServiceDefinition?.code}.${item.code}', + )} ${item.required == true ? '*' : ''}', + style: theme.textTheme.headlineSmall, + ), + ], + ), + ), + ), + BlocBuilder( + builder: (context, state) { + return SelectionBox( + //label: e, + allowMultipleSelection: false, + width: 110, + valueMapper: (value) { + return value ? 'Yes' : 'No'; + }, + initialSelection: const [false], + options: const [true, false], + onSelectionChanged: (valuec) { + print(submitTriggered); + print(controller[index].text.split('.').contains(e)); + context.read().add( + ServiceChecklistEvent( + value: valuec.toString(), + submitTriggered: submitTriggered, + ), + ); + final String ele; + var val = controller[index].text.split('.'); + if (val.contains(e)) { + val.remove(e); + ele = val.join("."); + } else { + ele = "${controller[index].text}.$e"; + } + controller[index].value = TextEditingController.fromValue( + TextEditingValue( + text: ele, + ), + ).value; + }, + ); + }, + ), + ], + ); } else { return const SizedBox.shrink(); } @@ -783,8 +902,8 @@ class _ChecklistViewPageState extends LocalizedState { : const DigitColors().white, child: _buildChecklist( matchingChildItem, - initialAttributes?.indexOf(matchingChildItem) ?? - parentIndex, // Pass parentIndex here as we're building at the same level + initialAttributes?.indexOf(matchingChildItem) ?? parentIndex, + // Pass parentIndex here as we're building at the same level selectedServiceDefinition, context, ), diff --git a/packages/digit_components/lib/widgets/atoms/selection_card.dart b/packages/digit_components/lib/widgets/atoms/selection_card.dart index 5bad49245..c42811473 100644 --- a/packages/digit_components/lib/widgets/atoms/selection_card.dart +++ b/packages/digit_components/lib/widgets/atoms/selection_card.dart @@ -6,7 +6,7 @@ class SelectionBox extends StatefulWidget { final String? errorMessage; final List options; final Function(List) onSelectionChanged; - final List initialSelection; + final List? initialSelection; final bool allowMultipleSelection; final String Function(T) valueMapper; @@ -16,7 +16,7 @@ class SelectionBox extends StatefulWidget { this.errorMessage, required this.options, required this.onSelectionChanged, - this.initialSelection = const [], + this.initialSelection, this.allowMultipleSelection = true, required this.valueMapper, }) : super(key: key); @@ -26,12 +26,14 @@ class SelectionBox extends StatefulWidget { } class _SelectionBoxState extends State> { - late List _selectedOptions = []; + final List _selectedOptions = []; @override void initState() { super.initState(); - _selectedOptions = widget.initialSelection; + if(widget.initialSelection != null) { + _selectedOptions.addAll(widget.initialSelection!); + } } void _onOptionTap(T option) { @@ -50,8 +52,8 @@ class _SelectionBoxState extends State> { _selectedOptions.add(option); } } - widget.onSelectionChanged(_selectedOptions); }); + widget.onSelectionChanged(_selectedOptions); } Widget _buildOption(T option) { From 3b0ba14423608046a521af1f5348cdf67b105bb2 Mon Sep 17 00:00:00 2001 From: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Date: Thu, 11 Jul 2024 10:27:11 +0530 Subject: [PATCH 047/241] HLM-6282 and HLM-6283:: House Structure Details Page added (#447) * HLM-6283:: IRS- Household Details Fields added * HLM-6283:: House Structure Details Page --- .../app_initialization.dart | 1 + .../no_sql/schema/app_configuration.dart | 8 + .../no_sql/schema/app_configuration.g.dart | 547 +++++++++++++++++- .../lib/data/repositories/remote/mdms.dart | 9 + .../models/app_config/app_config_model.dart | 5 +- .../app_config/app_config_model.freezed.dart | 42 +- .../models/app_config/app_config_model.g.dart | 4 + .../models/entities/mdms_master_enums.dart | 2 + .../entities/mdms_master_enums.mapper.dart | 4 + .../lib/pages/home.dart | 54 +- .../lib/router/app_router.dart | 3 + .../beneficiary_registration.dart | 25 +- .../beneficiary_registration.freezed.dart | 355 ++++++++++++ .../data/repositories/local/household.dart | 3 +- .../entities/additional_fields_type.dart | 4 + .../additional_fields_type.mapper.dart | 8 + .../house_details.dart | 299 ++++++++++ .../household_details.dart | 78 +-- .../household_location.dart | 25 +- .../router/registration_delivery_router.dart | 3 + .../registration_delivery_router.gm.dart | 539 ++++++++++------- .../lib/utils/i18_key_constants.dart | 11 +- .../lib/utils/utils.dart | 33 +- .../showcase/config/house_details.dart | 23 + .../showcase/config/showcase_constants.dart | 2 + tools/registration_delivery_imports.dart | 3 + 26 files changed, 1773 insertions(+), 317 deletions(-) create mode 100644 packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart create mode 100644 packages/registration_delivery/lib/widgets/showcase/config/house_details.dart diff --git a/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.dart b/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.dart index 531e69143..c5c0ca0d3 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.dart @@ -85,6 +85,7 @@ class AppInitializationBloc MasterEnums.appConfig.toValue(), MasterEnums.symptomTypes.toValue(), MasterEnums.referralReasons.toValue(), + MasterEnums.houseStructureTypes.toValue(), MasterEnums.bandWidthBatchSize.toValue(), MasterEnums.downSyncBandwidthBatchSize.toValue(), MasterEnums.hhDelReasons.toValue(), diff --git a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.dart b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.dart index bd697b538..f9e6fc205 100644 --- a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.dart +++ b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.dart @@ -73,6 +73,7 @@ class AppConfiguration { late List? symptomsTypes; late List? referralReasons; + late List? houseStructureTypes; } @embedded @@ -197,3 +198,10 @@ class ReferralReasons { late String name; late bool active; } + +@embedded +class HouseStructureTypes { + late String code; + late String name; + late bool active; +} diff --git a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.g.dart b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.g.dart index bb695f257..7d63acf31 100644 --- a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.g.dart +++ b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.g.dart @@ -137,14 +137,20 @@ const AppConfigurationSchema = CollectionSchema( type: IsarType.objectList, target: r'TransportTypes', ), - r'referralReasons': PropertySchema( + r'houseStructureTypes': PropertySchema( id: 21, + name: r'houseStructureTypes', + type: IsarType.objectList, + target: r'HouseStructureTypes', + ), + r'referralReasons': PropertySchema( + id: 22, name: r'referralReasons', type: IsarType.objectList, target: r'ReferralReasons', ), r'symptomsTypes': PropertySchema( - id: 22, + id: 23, name: r'symptomsTypes', type: IsarType.objectList, target: r'SymptomsTypes', @@ -176,7 +182,8 @@ const AppConfigurationSchema = CollectionSchema( r'CallSupportList': CallSupportListSchema, r'FirebaseConfig': FirebaseConfigSchema, r'SymptomsTypes': SymptomsTypesSchema, - r'ReferralReasons': ReferralReasonsSchema + r'ReferralReasons': ReferralReasonsSchema, + r'HouseStructureTypes': HouseStructureTypesSchema }, getId: _appConfigurationGetId, getLinks: _appConfigurationGetLinks, @@ -412,6 +419,20 @@ int _appConfigurationEstimateSize( } } } + { + final list = object.houseStructureTypes; + if (list != null) { + bytesCount += 3 + list.length * 3; + { + final offsets = allOffsets[HouseStructureTypes]!; + for (var i = 0; i < list.length; i++) { + final value = list[i]; + bytesCount += HouseStructureTypesSchema.estimateSize( + value, offsets, allOffsets); + } + } + } + } { final list = object.referralReasons; if (list != null) { @@ -545,14 +566,20 @@ void _appConfigurationSerialize( TransportTypesSchema.serialize, object.transportTypes, ); - writer.writeObjectList( + writer.writeObjectList( offsets[21], allOffsets, + HouseStructureTypesSchema.serialize, + object.houseStructureTypes, + ); + writer.writeObjectList( + offsets[22], + allOffsets, ReferralReasonsSchema.serialize, object.referralReasons, ); writer.writeObjectList( - offsets[22], + offsets[23], allOffsets, SymptomsTypesSchema.serialize, object.symptomsTypes, @@ -662,15 +689,21 @@ AppConfiguration _appConfigurationDeserialize( allOffsets, TransportTypes(), ); + object.houseStructureTypes = reader.readObjectList( + offsets[21], + HouseStructureTypesSchema.deserialize, + allOffsets, + HouseStructureTypes(), + ); object.id = id; object.referralReasons = reader.readObjectList( - offsets[21], + offsets[22], ReferralReasonsSchema.deserialize, allOffsets, ReferralReasons(), ); object.symptomsTypes = reader.readObjectList( - offsets[22], + offsets[23], SymptomsTypesSchema.deserialize, allOffsets, SymptomsTypes(), @@ -800,13 +833,20 @@ P _appConfigurationDeserializeProp

( TransportTypes(), )) as P; case 21: + return (reader.readObjectList( + offset, + HouseStructureTypesSchema.deserialize, + allOffsets, + HouseStructureTypes(), + )) as P; + case 22: return (reader.readObjectList( offset, ReferralReasonsSchema.deserialize, allOffsets, ReferralReasons(), )) as P; - case 22: + case 23: return (reader.readObjectList( offset, SymptomsTypesSchema.deserialize, @@ -3104,6 +3144,113 @@ extension AppConfigurationQueryFilter }); } + QueryBuilder + houseStructureTypesIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'houseStructureTypes', + )); + }); + } + + QueryBuilder + houseStructureTypesIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'houseStructureTypes', + )); + }); + } + + QueryBuilder + houseStructureTypesLengthEqualTo(int length) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'houseStructureTypes', + length, + true, + length, + true, + ); + }); + } + + QueryBuilder + houseStructureTypesIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'houseStructureTypes', + 0, + true, + 0, + true, + ); + }); + } + + QueryBuilder + houseStructureTypesIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'houseStructureTypes', + 0, + false, + 999999, + true, + ); + }); + } + + QueryBuilder + houseStructureTypesLengthLessThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'houseStructureTypes', + 0, + true, + length, + include, + ); + }); + } + + QueryBuilder + houseStructureTypesLengthGreaterThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'houseStructureTypes', + length, + include, + 999999, + true, + ); + }); + } + + QueryBuilder + houseStructureTypesLengthBetween( + int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'houseStructureTypes', + lower, + includeLower, + upper, + includeUpper, + ); + }); + } + QueryBuilder idEqualTo(Id value) { return QueryBuilder.apply(this, (query) { @@ -3484,6 +3631,13 @@ extension AppConfigurationQueryObject }); } + QueryBuilder + houseStructureTypesElement(FilterQuery q) { + return QueryBuilder.apply(this, (query) { + return query.object(q, r'houseStructureTypes'); + }); + } + QueryBuilder referralReasonsElement(FilterQuery q) { return QueryBuilder.apply(this, (query) { @@ -3890,6 +4044,13 @@ extension AppConfigurationQueryProperty }); } + QueryBuilder?, QQueryOperations> + houseStructureTypesProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'houseStructureTypes'); + }); + } + QueryBuilder?, QQueryOperations> referralReasonsProperty() { return QueryBuilder.apply(this, (query) { @@ -9574,3 +9735,373 @@ extension ReferralReasonsQueryFilter extension ReferralReasonsQueryObject on QueryBuilder {} + +// coverage:ignore-file +// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types + +const HouseStructureTypesSchema = Schema( + name: r'HouseStructureTypes', + id: 7578394145153864404, + properties: { + r'active': PropertySchema( + id: 0, + name: r'active', + type: IsarType.bool, + ), + r'code': PropertySchema( + id: 1, + name: r'code', + type: IsarType.string, + ), + r'name': PropertySchema( + id: 2, + name: r'name', + type: IsarType.string, + ) + }, + estimateSize: _houseStructureTypesEstimateSize, + serialize: _houseStructureTypesSerialize, + deserialize: _houseStructureTypesDeserialize, + deserializeProp: _houseStructureTypesDeserializeProp, +); + +int _houseStructureTypesEstimateSize( + HouseStructureTypes object, + List offsets, + Map> allOffsets, +) { + var bytesCount = offsets.last; + bytesCount += 3 + object.code.length * 3; + bytesCount += 3 + object.name.length * 3; + return bytesCount; +} + +void _houseStructureTypesSerialize( + HouseStructureTypes object, + IsarWriter writer, + List offsets, + Map> allOffsets, +) { + writer.writeBool(offsets[0], object.active); + writer.writeString(offsets[1], object.code); + writer.writeString(offsets[2], object.name); +} + +HouseStructureTypes _houseStructureTypesDeserialize( + Id id, + IsarReader reader, + List offsets, + Map> allOffsets, +) { + final object = HouseStructureTypes(); + object.active = reader.readBool(offsets[0]); + object.code = reader.readString(offsets[1]); + object.name = reader.readString(offsets[2]); + return object; +} + +P _houseStructureTypesDeserializeProp

( + IsarReader reader, + int propertyId, + int offset, + Map> allOffsets, +) { + switch (propertyId) { + case 0: + return (reader.readBool(offset)) as P; + case 1: + return (reader.readString(offset)) as P; + case 2: + return (reader.readString(offset)) as P; + default: + throw IsarError('Unknown property with id $propertyId'); + } +} + +extension HouseStructureTypesQueryFilter on QueryBuilder { + QueryBuilder + activeEqualTo(bool value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'active', + value: value, + )); + }); + } + + QueryBuilder + codeEqualTo( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'code', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codeGreaterThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'code', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codeLessThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'code', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codeBetween( + String lower, + String upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'code', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codeStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'code', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codeEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'code', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codeContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'code', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codeMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'code', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codeIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'code', + value: '', + )); + }); + } + + QueryBuilder + codeIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'code', + value: '', + )); + }); + } + + QueryBuilder + nameEqualTo( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameGreaterThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameLessThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameBetween( + String lower, + String upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'name', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'name', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'name', + value: '', + )); + }); + } + + QueryBuilder + nameIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'name', + value: '', + )); + }); + } +} + +extension HouseStructureTypesQueryObject on QueryBuilder {} diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart index 2e318c257..f9d0815bf 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart @@ -309,6 +309,15 @@ class MdmsRepository { return reasonTypes; }).toList(); + appConfiguration.houseStructureTypes = + result.hcmWrapperModel?.houseStructureTypes?.map((e) { + final structureTypes = HouseStructureTypes() + ..name = e.name.toString() + ..code = e.code + ..active = e.active; + + return structureTypes; + }).toList(); await isar.writeTxn(() async { await isar.appConfigurations.put(appConfiguration); diff --git a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart index acd587b13..925241ffb 100644 --- a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart +++ b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart @@ -89,7 +89,10 @@ class HCMWrapperModel with _$HCMWrapperModel { @JsonKey(name: 'SYMPTOM_TYPES') List? symptomsTypeList, @JsonKey(name: 'REFERRAL_REASONS') List? referralReasonList, - @JsonKey(name: 'FIREBASE_CONFIG') required List? firebaseConfig, + @JsonKey(name: 'HOUSE_STRUCTURE_TYPES') + List? houseStructureTypes, + @JsonKey(name: 'FIREBASE_CONFIG') + required List? firebaseConfig, }) = _HCMWrapperModel; factory HCMWrapperModel.fromJson( diff --git a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.freezed.dart b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.freezed.dart index f7e20a68c..c296fe65a 100644 --- a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.freezed.dart +++ b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.freezed.dart @@ -955,6 +955,9 @@ mixin _$HCMWrapperModel { @JsonKey(name: 'REFERRAL_REASONS') List? get referralReasonList => throw _privateConstructorUsedError; + @JsonKey(name: 'HOUSE_STRUCTURE_TYPES') + List? get houseStructureTypes => + throw _privateConstructorUsedError; @JsonKey(name: 'FIREBASE_CONFIG') List? get firebaseConfig => throw _privateConstructorUsedError; @@ -995,6 +998,8 @@ abstract class $HCMWrapperModelCopyWith<$Res> { @JsonKey(name: 'SYMPTOM_TYPES') List? symptomsTypeList, @JsonKey(name: 'REFERRAL_REASONS') List? referralReasonList, + @JsonKey(name: 'HOUSE_STRUCTURE_TYPES') + List? houseStructureTypes, @JsonKey(name: 'FIREBASE_CONFIG') List? firebaseConfig}); } @@ -1025,6 +1030,7 @@ class _$HCMWrapperModelCopyWithImpl<$Res, $Val extends HCMWrapperModel> Object? transportTypes = null, Object? symptomsTypeList = freezed, Object? referralReasonList = freezed, + Object? houseStructureTypes = freezed, Object? firebaseConfig = freezed, }) { return _then(_value.copyWith( @@ -1085,6 +1091,10 @@ class _$HCMWrapperModelCopyWithImpl<$Res, $Val extends HCMWrapperModel> ? _value.referralReasonList : referralReasonList // ignore: cast_nullable_to_non_nullable as List?, + houseStructureTypes: freezed == houseStructureTypes + ? _value.houseStructureTypes + : houseStructureTypes // ignore: cast_nullable_to_non_nullable + as List?, firebaseConfig: freezed == firebaseConfig ? _value.firebaseConfig : firebaseConfig // ignore: cast_nullable_to_non_nullable @@ -1125,6 +1135,8 @@ abstract class _$$HCMWrapperModelImplCopyWith<$Res> @JsonKey(name: 'SYMPTOM_TYPES') List? symptomsTypeList, @JsonKey(name: 'REFERRAL_REASONS') List? referralReasonList, + @JsonKey(name: 'HOUSE_STRUCTURE_TYPES') + List? houseStructureTypes, @JsonKey(name: 'FIREBASE_CONFIG') List? firebaseConfig}); } @@ -1153,6 +1165,7 @@ class __$$HCMWrapperModelImplCopyWithImpl<$Res> Object? transportTypes = null, Object? symptomsTypeList = freezed, Object? referralReasonList = freezed, + Object? houseStructureTypes = freezed, Object? firebaseConfig = freezed, }) { return _then(_$HCMWrapperModelImpl( @@ -1213,6 +1226,10 @@ class __$$HCMWrapperModelImplCopyWithImpl<$Res> ? _value._referralReasonList : referralReasonList // ignore: cast_nullable_to_non_nullable as List?, + houseStructureTypes: freezed == houseStructureTypes + ? _value._houseStructureTypes + : houseStructureTypes // ignore: cast_nullable_to_non_nullable + as List?, firebaseConfig: freezed == firebaseConfig ? _value._firebaseConfig : firebaseConfig // ignore: cast_nullable_to_non_nullable @@ -1253,6 +1270,8 @@ class _$HCMWrapperModelImpl implements _HCMWrapperModel { final List? symptomsTypeList, @JsonKey(name: 'REFERRAL_REASONS') final List? referralReasonList, + @JsonKey(name: 'HOUSE_STRUCTURE_TYPES') + final List? houseStructureTypes, @JsonKey(name: 'FIREBASE_CONFIG') required final List? firebaseConfig}) : _appConfig = appConfig, @@ -1270,6 +1289,7 @@ class _$HCMWrapperModelImpl implements _HCMWrapperModel { _transportTypes = transportTypes, _symptomsTypeList = symptomsTypeList, _referralReasonList = referralReasonList, + _houseStructureTypes = houseStructureTypes, _firebaseConfig = firebaseConfig; factory _$HCMWrapperModelImpl.fromJson(Map json) => @@ -1419,6 +1439,18 @@ class _$HCMWrapperModelImpl implements _HCMWrapperModel { return EqualUnmodifiableListView(value); } + final List? _houseStructureTypes; + @override + @JsonKey(name: 'HOUSE_STRUCTURE_TYPES') + List? get houseStructureTypes { + final value = _houseStructureTypes; + if (value == null) return null; + if (_houseStructureTypes is EqualUnmodifiableListView) + return _houseStructureTypes; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); + } + final List? _firebaseConfig; @override @JsonKey(name: 'FIREBASE_CONFIG') @@ -1432,7 +1464,7 @@ class _$HCMWrapperModelImpl implements _HCMWrapperModel { @override String toString() { - return 'HCMWrapperModel(appConfig: $appConfig, bandWidthBatchSize: $bandWidthBatchSize, downSyncBandWidthBatchSize: $downSyncBandWidthBatchSize, householdDeletionReasonOptions: $householdDeletionReasonOptions, householdMemberDeletionReasonOptions: $householdMemberDeletionReasonOptions, backgroundServiceConfig: $backgroundServiceConfig, checklistTypes: $checklistTypes, idTypeOptions: $idTypeOptions, deliveryCommentOptions: $deliveryCommentOptions, backendInterface: $backendInterface, callSupportOptions: $callSupportOptions, transportTypes: $transportTypes, symptomsTypeList: $symptomsTypeList, referralReasonList: $referralReasonList, firebaseConfig: $firebaseConfig)'; + return 'HCMWrapperModel(appConfig: $appConfig, bandWidthBatchSize: $bandWidthBatchSize, downSyncBandWidthBatchSize: $downSyncBandWidthBatchSize, householdDeletionReasonOptions: $householdDeletionReasonOptions, householdMemberDeletionReasonOptions: $householdMemberDeletionReasonOptions, backgroundServiceConfig: $backgroundServiceConfig, checklistTypes: $checklistTypes, idTypeOptions: $idTypeOptions, deliveryCommentOptions: $deliveryCommentOptions, backendInterface: $backendInterface, callSupportOptions: $callSupportOptions, transportTypes: $transportTypes, symptomsTypeList: $symptomsTypeList, referralReasonList: $referralReasonList, houseStructureTypes: $houseStructureTypes, firebaseConfig: $firebaseConfig)'; } @override @@ -1471,6 +1503,8 @@ class _$HCMWrapperModelImpl implements _HCMWrapperModel { .equals(other._symptomsTypeList, _symptomsTypeList) && const DeepCollectionEquality() .equals(other._referralReasonList, _referralReasonList) && + const DeepCollectionEquality() + .equals(other._houseStructureTypes, _houseStructureTypes) && const DeepCollectionEquality() .equals(other._firebaseConfig, _firebaseConfig)); } @@ -1494,6 +1528,7 @@ class _$HCMWrapperModelImpl implements _HCMWrapperModel { const DeepCollectionEquality().hash(_transportTypes), const DeepCollectionEquality().hash(_symptomsTypeList), const DeepCollectionEquality().hash(_referralReasonList), + const DeepCollectionEquality().hash(_houseStructureTypes), const DeepCollectionEquality().hash(_firebaseConfig)); @JsonKey(ignore: true) @@ -1541,6 +1576,8 @@ abstract class _HCMWrapperModel implements HCMWrapperModel { final List? symptomsTypeList, @JsonKey(name: 'REFERRAL_REASONS') final List? referralReasonList, + @JsonKey(name: 'HOUSE_STRUCTURE_TYPES') + final List? houseStructureTypes, @JsonKey(name: 'FIREBASE_CONFIG') required final List? firebaseConfig}) = _$HCMWrapperModelImpl; @@ -1591,6 +1628,9 @@ abstract class _HCMWrapperModel implements HCMWrapperModel { @JsonKey(name: 'REFERRAL_REASONS') List? get referralReasonList; @override + @JsonKey(name: 'HOUSE_STRUCTURE_TYPES') + List? get houseStructureTypes; + @override @JsonKey(name: 'FIREBASE_CONFIG') List? get firebaseConfig; @override diff --git a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.g.dart b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.g.dart index 736861977..648e375a9 100644 --- a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.g.dart +++ b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.g.dart @@ -139,6 +139,9 @@ _$HCMWrapperModelImpl _$$HCMWrapperModelImplFromJson( referralReasonList: (json['REFERRAL_REASONS'] as List?) ?.map((e) => ReferralReasonType.fromJson(e as Map)) .toList(), + houseStructureTypes: (json['HOUSE_STRUCTURE_TYPES'] as List?) + ?.map((e) => CommonMasterModel.fromJson(e as Map)) + .toList(), firebaseConfig: (json['FIREBASE_CONFIG'] as List?) ?.map((e) => FirebaseConfig.fromJson(e as Map)) .toList(), @@ -163,6 +166,7 @@ Map _$$HCMWrapperModelImplToJson( 'TRANSPORT_TYPES': instance.transportTypes, 'SYMPTOM_TYPES': instance.symptomsTypeList, 'REFERRAL_REASONS': instance.referralReasonList, + 'HOUSE_STRUCTURE_TYPES': instance.houseStructureTypes, 'FIREBASE_CONFIG': instance.firebaseConfig, }; diff --git a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart index da1d99ada..67182864a 100644 --- a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart +++ b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart @@ -11,6 +11,8 @@ enum MasterEnums { symptomTypes, @MappableValue("REFERRAL_REASONS") referralReasons, + @MappableValue("HOUSE_STRUCTURE_TYPES") + houseStructureTypes, @MappableValue("BANDWIDTH_BATCH_SIZE") bandWidthBatchSize, @MappableValue("DOWNSYNC-BANDWIDTH_BATCH_SIZE") diff --git a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart index cc1fcc5ad..384d0c6d2 100644 --- a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart +++ b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart @@ -31,6 +31,8 @@ class MasterEnumsMapper extends EnumMapper { return MasterEnums.symptomTypes; case "REFERRAL_REASONS": return MasterEnums.referralReasons; + case "HOUSE_STRUCTURE_TYPES": + return MasterEnums.houseStructureTypes; case "BANDWIDTH_BATCH_SIZE": return MasterEnums.bandWidthBatchSize; case "DOWNSYNC-BANDWIDTH_BATCH_SIZE": @@ -77,6 +79,8 @@ class MasterEnumsMapper extends EnumMapper { return "SYMPTOM_TYPES"; case MasterEnums.referralReasons: return "REFERRAL_REASONS"; + case MasterEnums.houseStructureTypes: + return "HOUSE_STRUCTURE_TYPES"; case MasterEnums.bandWidthBatchSize: return "BANDWIDTH_BATCH_SIZE"; case MasterEnums.downSyncBandwidthBatchSize: diff --git a/apps/health_campaign_field_worker_app/lib/pages/home.dart b/apps/health_campaign_field_worker_app/lib/pages/home.dart index 53eff59a2..a6bc20cf0 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/home.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/home.dart @@ -601,32 +601,34 @@ void setPackagesSingleton(BuildContext context) { initialized: (AppConfiguration appConfiguration, _) { // INFO : Need to add singleton of package Here RegistrationDeliverySingleton().setInitialData( - loggedInUserUuid: context.loggedInUserUuid, - maxRadius: appConfiguration.maxRadius!, - projectId: context.projectId, - selectedBeneficiaryType: context.beneficiaryType, - projectType: context.selectedProjectType, - selectedProject: context.selectedProject, - genderOptions: - appConfiguration.genderOptions!.map((e) => e.code).toList(), - idTypeOptions: - appConfiguration.idTypeOptions!.map((e) => e.code).toList(), - householdDeletionReasonOptions: appConfiguration - .householdDeletionReasonOptions! - .map((e) => e.code) - .toList(), - householdMemberDeletionReasonOptions: appConfiguration - .householdMemberDeletionReasonOptions! - .map((e) => e.code) - .toList(), - deliveryCommentOptions: appConfiguration.deliveryCommentOptions! - .map((e) => e.code) - .toList(), - symptomsTypes: - appConfiguration.symptomsTypes!.map((e) => e.code).toList(), - referralReasons: - appConfiguration.referralReasons!.map((e) => e.code).toList(), - ); + loggedInUserUuid: context.loggedInUserUuid, + maxRadius: appConfiguration.maxRadius!, + projectId: context.projectId, + selectedBeneficiaryType: context.beneficiaryType, + projectType: context.selectedProjectType, + selectedProject: context.selectedProject, + genderOptions: + appConfiguration.genderOptions!.map((e) => e.code).toList(), + idTypeOptions: + appConfiguration.idTypeOptions!.map((e) => e.code).toList(), + householdDeletionReasonOptions: appConfiguration + .householdDeletionReasonOptions! + .map((e) => e.code) + .toList(), + householdMemberDeletionReasonOptions: appConfiguration + .householdMemberDeletionReasonOptions! + .map((e) => e.code) + .toList(), + deliveryCommentOptions: appConfiguration.deliveryCommentOptions! + .map((e) => e.code) + .toList(), + symptomsTypes: + appConfiguration.symptomsTypes?.map((e) => e.code).toList(), + referralReasons: + appConfiguration.referralReasons?.map((e) => e.code).toList(), + houseStructureTypes: appConfiguration.houseStructureTypes + ?.map((e) => e.code) + .toList()); AttendanceSingleton().setInitialData( projectId: context.projectId, diff --git a/apps/health_campaign_field_worker_app/lib/router/app_router.dart b/apps/health_campaign_field_worker_app/lib/router/app_router.dart index 2624a0807..7f309e3ef 100644 --- a/apps/health_campaign_field_worker_app/lib/router/app_router.dart +++ b/apps/health_campaign_field_worker_app/lib/router/app_router.dart @@ -106,6 +106,9 @@ class AppRouter extends _$AppRouter { AutoRoute( page: HouseHoldDetailsRoute.page, path: 'household-details'), + AutoRoute( + page: HouseDetailsRoute.page, + path: 'house-details'), AutoRoute( page: HouseholdLocationRoute.page, path: 'household-location', diff --git a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart index 5f494565f..298009d64 100644 --- a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart +++ b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart @@ -9,8 +9,8 @@ import 'package:registration_delivery/models/entities/household_member.dart'; import '../../models/entities/household.dart'; import '../../models/entities/project_beneficiary.dart'; -import '../../utils/utils.dart'; import '../../utils/typedefs.dart'; +import '../../utils/utils.dart'; part 'beneficiary_registration.freezed.dart'; @@ -38,6 +38,7 @@ class BeneficiaryRegistrationBloc required this.beneficiaryType, }) { on(_handleSaveAddress); + on(_handleSaveHouseDetails); on(_handleSaveHouseholdDetails); on(_handleSaveIndividualDetails); on(_handleCreate); @@ -64,6 +65,24 @@ class BeneficiaryRegistrationBloc ); } + //_handleSaveHouseDetails event can be used for saving house details to the form + FutureOr _handleSaveHouseDetails( + BeneficiaryRegistrationSaveHouseDetailsEvent event, + BeneficiaryRegistrationEmitter emit, + ) async { + state.maybeMap( + orElse: () { + throw const InvalidRegistrationStateException(); + }, + editHousehold: (value) { + emit(value.copyWith(householdModel: event.model)); + }, + create: (value) { + emit(value.copyWith(householdModel: event.model)); + }, + ); + } + FutureOr _handleSaveHouseholdDetails( BeneficiaryRegistrationSaveHouseholdDetailsEvent event, BeneficiaryRegistrationEmitter emit, @@ -455,6 +474,10 @@ class BeneficiaryRegistrationEvent with _$BeneficiaryRegistrationEvent { AddressModel model, ) = BeneficiaryRegistrationSaveAddressEvent; + const factory BeneficiaryRegistrationEvent.saveHouseDetails({ + required HouseholdModel model, + }) = BeneficiaryRegistrationSaveHouseDetailsEvent; + const factory BeneficiaryRegistrationEvent.saveHouseholdDetails({ required HouseholdModel household, required DateTime registrationDate, diff --git a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart index f3e0597d6..c64db5b8c 100644 --- a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart +++ b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart @@ -19,6 +19,7 @@ mixin _$BeneficiaryRegistrationEvent { @optionalTypeArgs TResult when({ required TResult Function(AddressModel model) saveAddress, + required TResult Function(HouseholdModel model) saveHouseDetails, required TResult Function( HouseholdModel household, DateTime registrationDate) saveHouseholdDetails, @@ -48,6 +49,7 @@ mixin _$BeneficiaryRegistrationEvent { @optionalTypeArgs TResult? whenOrNull({ TResult? Function(AddressModel model)? saveAddress, + TResult? Function(HouseholdModel model)? saveHouseDetails, TResult? Function(HouseholdModel household, DateTime registrationDate)? saveHouseholdDetails, TResult? Function(IndividualModel model, bool isHeadOfHousehold)? @@ -76,6 +78,7 @@ mixin _$BeneficiaryRegistrationEvent { @optionalTypeArgs TResult maybeWhen({ TResult Function(AddressModel model)? saveAddress, + TResult Function(HouseholdModel model)? saveHouseDetails, TResult Function(HouseholdModel household, DateTime registrationDate)? saveHouseholdDetails, TResult Function(IndividualModel model, bool isHeadOfHousehold)? @@ -106,6 +109,9 @@ mixin _$BeneficiaryRegistrationEvent { TResult map({ required TResult Function(BeneficiaryRegistrationSaveAddressEvent value) saveAddress, + required TResult Function( + BeneficiaryRegistrationSaveHouseDetailsEvent value) + saveHouseDetails, required TResult Function( BeneficiaryRegistrationSaveHouseholdDetailsEvent value) saveHouseholdDetails, @@ -128,6 +134,8 @@ mixin _$BeneficiaryRegistrationEvent { TResult? mapOrNull({ TResult? Function(BeneficiaryRegistrationSaveAddressEvent value)? saveAddress, + TResult? Function(BeneficiaryRegistrationSaveHouseDetailsEvent value)? + saveHouseDetails, TResult? Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? saveHouseholdDetails, TResult? Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? @@ -146,6 +154,8 @@ mixin _$BeneficiaryRegistrationEvent { TResult maybeMap({ TResult Function(BeneficiaryRegistrationSaveAddressEvent value)? saveAddress, + TResult Function(BeneficiaryRegistrationSaveHouseDetailsEvent value)? + saveHouseDetails, TResult Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? saveHouseholdDetails, TResult Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? @@ -255,6 +265,7 @@ class _$BeneficiaryRegistrationSaveAddressEventImpl @optionalTypeArgs TResult when({ required TResult Function(AddressModel model) saveAddress, + required TResult Function(HouseholdModel model) saveHouseDetails, required TResult Function( HouseholdModel household, DateTime registrationDate) saveHouseholdDetails, @@ -287,6 +298,7 @@ class _$BeneficiaryRegistrationSaveAddressEventImpl @optionalTypeArgs TResult? whenOrNull({ TResult? Function(AddressModel model)? saveAddress, + TResult? Function(HouseholdModel model)? saveHouseDetails, TResult? Function(HouseholdModel household, DateTime registrationDate)? saveHouseholdDetails, TResult? Function(IndividualModel model, bool isHeadOfHousehold)? @@ -318,6 +330,7 @@ class _$BeneficiaryRegistrationSaveAddressEventImpl @optionalTypeArgs TResult maybeWhen({ TResult Function(AddressModel model)? saveAddress, + TResult Function(HouseholdModel model)? saveHouseDetails, TResult Function(HouseholdModel household, DateTime registrationDate)? saveHouseholdDetails, TResult Function(IndividualModel model, bool isHeadOfHousehold)? @@ -354,6 +367,9 @@ class _$BeneficiaryRegistrationSaveAddressEventImpl TResult map({ required TResult Function(BeneficiaryRegistrationSaveAddressEvent value) saveAddress, + required TResult Function( + BeneficiaryRegistrationSaveHouseDetailsEvent value) + saveHouseDetails, required TResult Function( BeneficiaryRegistrationSaveHouseholdDetailsEvent value) saveHouseholdDetails, @@ -379,6 +395,8 @@ class _$BeneficiaryRegistrationSaveAddressEventImpl TResult? mapOrNull({ TResult? Function(BeneficiaryRegistrationSaveAddressEvent value)? saveAddress, + TResult? Function(BeneficiaryRegistrationSaveHouseDetailsEvent value)? + saveHouseDetails, TResult? Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? saveHouseholdDetails, TResult? Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? @@ -400,6 +418,8 @@ class _$BeneficiaryRegistrationSaveAddressEventImpl TResult maybeMap({ TResult Function(BeneficiaryRegistrationSaveAddressEvent value)? saveAddress, + TResult Function(BeneficiaryRegistrationSaveHouseDetailsEvent value)? + saveHouseDetails, TResult Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? saveHouseholdDetails, TResult Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? @@ -432,6 +452,271 @@ abstract class BeneficiaryRegistrationSaveAddressEvent get copyWith => throw _privateConstructorUsedError; } +/// @nodoc +abstract class _$$BeneficiaryRegistrationSaveHouseDetailsEventImplCopyWith< + $Res> { + factory _$$BeneficiaryRegistrationSaveHouseDetailsEventImplCopyWith( + _$BeneficiaryRegistrationSaveHouseDetailsEventImpl value, + $Res Function(_$BeneficiaryRegistrationSaveHouseDetailsEventImpl) + then) = + __$$BeneficiaryRegistrationSaveHouseDetailsEventImplCopyWithImpl<$Res>; + @useResult + $Res call({HouseholdModel model}); +} + +/// @nodoc +class __$$BeneficiaryRegistrationSaveHouseDetailsEventImplCopyWithImpl<$Res> + extends _$BeneficiaryRegistrationEventCopyWithImpl<$Res, + _$BeneficiaryRegistrationSaveHouseDetailsEventImpl> + implements + _$$BeneficiaryRegistrationSaveHouseDetailsEventImplCopyWith<$Res> { + __$$BeneficiaryRegistrationSaveHouseDetailsEventImplCopyWithImpl( + _$BeneficiaryRegistrationSaveHouseDetailsEventImpl _value, + $Res Function(_$BeneficiaryRegistrationSaveHouseDetailsEventImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? model = null, + }) { + return _then(_$BeneficiaryRegistrationSaveHouseDetailsEventImpl( + model: null == model + ? _value.model + : model // ignore: cast_nullable_to_non_nullable + as HouseholdModel, + )); + } +} + +/// @nodoc + +class _$BeneficiaryRegistrationSaveHouseDetailsEventImpl + implements BeneficiaryRegistrationSaveHouseDetailsEvent { + const _$BeneficiaryRegistrationSaveHouseDetailsEventImpl( + {required this.model}); + + @override + final HouseholdModel model; + + @override + String toString() { + return 'BeneficiaryRegistrationEvent.saveHouseDetails(model: $model)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$BeneficiaryRegistrationSaveHouseDetailsEventImpl && + (identical(other.model, model) || other.model == model)); + } + + @override + int get hashCode => Object.hash(runtimeType, model); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$BeneficiaryRegistrationSaveHouseDetailsEventImplCopyWith< + _$BeneficiaryRegistrationSaveHouseDetailsEventImpl> + get copyWith => + __$$BeneficiaryRegistrationSaveHouseDetailsEventImplCopyWithImpl< + _$BeneficiaryRegistrationSaveHouseDetailsEventImpl>( + this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function(AddressModel model) saveAddress, + required TResult Function(HouseholdModel model) saveHouseDetails, + required TResult Function( + HouseholdModel household, DateTime registrationDate) + saveHouseholdDetails, + required TResult Function(IndividualModel model, bool isHeadOfHousehold) + saveIndividualDetails, + required TResult Function( + HouseholdModel householdModel, + IndividualModel individualModel, + AddressModel addressModel, + String userUuid, + String projectId, + String? tag, + BeneficiaryType beneficiaryType) + addMember, + required TResult Function( + HouseholdModel household, AddressModel? addressModel, String? tag) + updateHouseholdDetails, + required TResult Function(IndividualModel model, String? tag, + HouseholdModel householdModel, AddressModel addressModel) + updateIndividualDetails, + required TResult Function(String userUuid, String projectId, + BoundaryModel boundary, String? tag) + create, + required TResult Function(String tag) validate, + }) { + return saveHouseDetails(model); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function(AddressModel model)? saveAddress, + TResult? Function(HouseholdModel model)? saveHouseDetails, + TResult? Function(HouseholdModel household, DateTime registrationDate)? + saveHouseholdDetails, + TResult? Function(IndividualModel model, bool isHeadOfHousehold)? + saveIndividualDetails, + TResult? Function( + HouseholdModel householdModel, + IndividualModel individualModel, + AddressModel addressModel, + String userUuid, + String projectId, + String? tag, + BeneficiaryType beneficiaryType)? + addMember, + TResult? Function( + HouseholdModel household, AddressModel? addressModel, String? tag)? + updateHouseholdDetails, + TResult? Function(IndividualModel model, String? tag, + HouseholdModel householdModel, AddressModel addressModel)? + updateIndividualDetails, + TResult? Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag)? + create, + TResult? Function(String tag)? validate, + }) { + return saveHouseDetails?.call(model); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function(AddressModel model)? saveAddress, + TResult Function(HouseholdModel model)? saveHouseDetails, + TResult Function(HouseholdModel household, DateTime registrationDate)? + saveHouseholdDetails, + TResult Function(IndividualModel model, bool isHeadOfHousehold)? + saveIndividualDetails, + TResult Function( + HouseholdModel householdModel, + IndividualModel individualModel, + AddressModel addressModel, + String userUuid, + String projectId, + String? tag, + BeneficiaryType beneficiaryType)? + addMember, + TResult Function( + HouseholdModel household, AddressModel? addressModel, String? tag)? + updateHouseholdDetails, + TResult Function(IndividualModel model, String? tag, + HouseholdModel householdModel, AddressModel addressModel)? + updateIndividualDetails, + TResult Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag)? + create, + TResult Function(String tag)? validate, + required TResult orElse(), + }) { + if (saveHouseDetails != null) { + return saveHouseDetails(model); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(BeneficiaryRegistrationSaveAddressEvent value) + saveAddress, + required TResult Function( + BeneficiaryRegistrationSaveHouseDetailsEvent value) + saveHouseDetails, + required TResult Function( + BeneficiaryRegistrationSaveHouseholdDetailsEvent value) + saveHouseholdDetails, + required TResult Function( + BeneficiaryRegistrationSaveIndividualDetailsEvent value) + saveIndividualDetails, + required TResult Function(BeneficiaryRegistrationAddMemberEvent value) + addMember, + required TResult Function( + BeneficiaryRegistrationUpdateHouseholdDetailsEvent value) + updateHouseholdDetails, + required TResult Function( + BeneficiaryRegistrationUpdateIndividualDetailsEvent value) + updateIndividualDetails, + required TResult Function(BeneficiaryRegistrationCreateEvent value) create, + required TResult Function(BeneficiaryRegistrationTagEvent value) validate, + }) { + return saveHouseDetails(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(BeneficiaryRegistrationSaveAddressEvent value)? + saveAddress, + TResult? Function(BeneficiaryRegistrationSaveHouseDetailsEvent value)? + saveHouseDetails, + TResult? Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? + saveHouseholdDetails, + TResult? Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? + saveIndividualDetails, + TResult? Function(BeneficiaryRegistrationAddMemberEvent value)? addMember, + TResult? Function(BeneficiaryRegistrationUpdateHouseholdDetailsEvent value)? + updateHouseholdDetails, + TResult? Function( + BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? + updateIndividualDetails, + TResult? Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult? Function(BeneficiaryRegistrationTagEvent value)? validate, + }) { + return saveHouseDetails?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(BeneficiaryRegistrationSaveAddressEvent value)? + saveAddress, + TResult Function(BeneficiaryRegistrationSaveHouseDetailsEvent value)? + saveHouseDetails, + TResult Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? + saveHouseholdDetails, + TResult Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? + saveIndividualDetails, + TResult Function(BeneficiaryRegistrationAddMemberEvent value)? addMember, + TResult Function(BeneficiaryRegistrationUpdateHouseholdDetailsEvent value)? + updateHouseholdDetails, + TResult Function(BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? + updateIndividualDetails, + TResult Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult Function(BeneficiaryRegistrationTagEvent value)? validate, + required TResult orElse(), + }) { + if (saveHouseDetails != null) { + return saveHouseDetails(this); + } + return orElse(); + } +} + +abstract class BeneficiaryRegistrationSaveHouseDetailsEvent + implements BeneficiaryRegistrationEvent { + const factory BeneficiaryRegistrationSaveHouseDetailsEvent( + {required final HouseholdModel model}) = + _$BeneficiaryRegistrationSaveHouseDetailsEventImpl; + + HouseholdModel get model; + @JsonKey(ignore: true) + _$$BeneficiaryRegistrationSaveHouseDetailsEventImplCopyWith< + _$BeneficiaryRegistrationSaveHouseDetailsEventImpl> + get copyWith => throw _privateConstructorUsedError; +} + /// @nodoc abstract class _$$BeneficiaryRegistrationSaveHouseholdDetailsEventImplCopyWith< $Res> { @@ -521,6 +806,7 @@ class _$BeneficiaryRegistrationSaveHouseholdDetailsEventImpl @optionalTypeArgs TResult when({ required TResult Function(AddressModel model) saveAddress, + required TResult Function(HouseholdModel model) saveHouseDetails, required TResult Function( HouseholdModel household, DateTime registrationDate) saveHouseholdDetails, @@ -553,6 +839,7 @@ class _$BeneficiaryRegistrationSaveHouseholdDetailsEventImpl @optionalTypeArgs TResult? whenOrNull({ TResult? Function(AddressModel model)? saveAddress, + TResult? Function(HouseholdModel model)? saveHouseDetails, TResult? Function(HouseholdModel household, DateTime registrationDate)? saveHouseholdDetails, TResult? Function(IndividualModel model, bool isHeadOfHousehold)? @@ -584,6 +871,7 @@ class _$BeneficiaryRegistrationSaveHouseholdDetailsEventImpl @optionalTypeArgs TResult maybeWhen({ TResult Function(AddressModel model)? saveAddress, + TResult Function(HouseholdModel model)? saveHouseDetails, TResult Function(HouseholdModel household, DateTime registrationDate)? saveHouseholdDetails, TResult Function(IndividualModel model, bool isHeadOfHousehold)? @@ -620,6 +908,9 @@ class _$BeneficiaryRegistrationSaveHouseholdDetailsEventImpl TResult map({ required TResult Function(BeneficiaryRegistrationSaveAddressEvent value) saveAddress, + required TResult Function( + BeneficiaryRegistrationSaveHouseDetailsEvent value) + saveHouseDetails, required TResult Function( BeneficiaryRegistrationSaveHouseholdDetailsEvent value) saveHouseholdDetails, @@ -645,6 +936,8 @@ class _$BeneficiaryRegistrationSaveHouseholdDetailsEventImpl TResult? mapOrNull({ TResult? Function(BeneficiaryRegistrationSaveAddressEvent value)? saveAddress, + TResult? Function(BeneficiaryRegistrationSaveHouseDetailsEvent value)? + saveHouseDetails, TResult? Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? saveHouseholdDetails, TResult? Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? @@ -666,6 +959,8 @@ class _$BeneficiaryRegistrationSaveHouseholdDetailsEventImpl TResult maybeMap({ TResult Function(BeneficiaryRegistrationSaveAddressEvent value)? saveAddress, + TResult Function(BeneficiaryRegistrationSaveHouseDetailsEvent value)? + saveHouseDetails, TResult Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? saveHouseholdDetails, TResult Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? @@ -791,6 +1086,7 @@ class _$BeneficiaryRegistrationSaveIndividualDetailsEventImpl @optionalTypeArgs TResult when({ required TResult Function(AddressModel model) saveAddress, + required TResult Function(HouseholdModel model) saveHouseDetails, required TResult Function( HouseholdModel household, DateTime registrationDate) saveHouseholdDetails, @@ -823,6 +1119,7 @@ class _$BeneficiaryRegistrationSaveIndividualDetailsEventImpl @optionalTypeArgs TResult? whenOrNull({ TResult? Function(AddressModel model)? saveAddress, + TResult? Function(HouseholdModel model)? saveHouseDetails, TResult? Function(HouseholdModel household, DateTime registrationDate)? saveHouseholdDetails, TResult? Function(IndividualModel model, bool isHeadOfHousehold)? @@ -854,6 +1151,7 @@ class _$BeneficiaryRegistrationSaveIndividualDetailsEventImpl @optionalTypeArgs TResult maybeWhen({ TResult Function(AddressModel model)? saveAddress, + TResult Function(HouseholdModel model)? saveHouseDetails, TResult Function(HouseholdModel household, DateTime registrationDate)? saveHouseholdDetails, TResult Function(IndividualModel model, bool isHeadOfHousehold)? @@ -890,6 +1188,9 @@ class _$BeneficiaryRegistrationSaveIndividualDetailsEventImpl TResult map({ required TResult Function(BeneficiaryRegistrationSaveAddressEvent value) saveAddress, + required TResult Function( + BeneficiaryRegistrationSaveHouseDetailsEvent value) + saveHouseDetails, required TResult Function( BeneficiaryRegistrationSaveHouseholdDetailsEvent value) saveHouseholdDetails, @@ -915,6 +1216,8 @@ class _$BeneficiaryRegistrationSaveIndividualDetailsEventImpl TResult? mapOrNull({ TResult? Function(BeneficiaryRegistrationSaveAddressEvent value)? saveAddress, + TResult? Function(BeneficiaryRegistrationSaveHouseDetailsEvent value)? + saveHouseDetails, TResult? Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? saveHouseholdDetails, TResult? Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? @@ -936,6 +1239,8 @@ class _$BeneficiaryRegistrationSaveIndividualDetailsEventImpl TResult maybeMap({ TResult Function(BeneficiaryRegistrationSaveAddressEvent value)? saveAddress, + TResult Function(BeneficiaryRegistrationSaveHouseDetailsEvent value)? + saveHouseDetails, TResult Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? saveHouseholdDetails, TResult Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? @@ -1111,6 +1416,7 @@ class _$BeneficiaryRegistrationAddMemberEventImpl @optionalTypeArgs TResult when({ required TResult Function(AddressModel model) saveAddress, + required TResult Function(HouseholdModel model) saveHouseDetails, required TResult Function( HouseholdModel household, DateTime registrationDate) saveHouseholdDetails, @@ -1144,6 +1450,7 @@ class _$BeneficiaryRegistrationAddMemberEventImpl @optionalTypeArgs TResult? whenOrNull({ TResult? Function(AddressModel model)? saveAddress, + TResult? Function(HouseholdModel model)? saveHouseDetails, TResult? Function(HouseholdModel household, DateTime registrationDate)? saveHouseholdDetails, TResult? Function(IndividualModel model, bool isHeadOfHousehold)? @@ -1176,6 +1483,7 @@ class _$BeneficiaryRegistrationAddMemberEventImpl @optionalTypeArgs TResult maybeWhen({ TResult Function(AddressModel model)? saveAddress, + TResult Function(HouseholdModel model)? saveHouseDetails, TResult Function(HouseholdModel household, DateTime registrationDate)? saveHouseholdDetails, TResult Function(IndividualModel model, bool isHeadOfHousehold)? @@ -1213,6 +1521,9 @@ class _$BeneficiaryRegistrationAddMemberEventImpl TResult map({ required TResult Function(BeneficiaryRegistrationSaveAddressEvent value) saveAddress, + required TResult Function( + BeneficiaryRegistrationSaveHouseDetailsEvent value) + saveHouseDetails, required TResult Function( BeneficiaryRegistrationSaveHouseholdDetailsEvent value) saveHouseholdDetails, @@ -1238,6 +1549,8 @@ class _$BeneficiaryRegistrationAddMemberEventImpl TResult? mapOrNull({ TResult? Function(BeneficiaryRegistrationSaveAddressEvent value)? saveAddress, + TResult? Function(BeneficiaryRegistrationSaveHouseDetailsEvent value)? + saveHouseDetails, TResult? Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? saveHouseholdDetails, TResult? Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? @@ -1259,6 +1572,8 @@ class _$BeneficiaryRegistrationAddMemberEventImpl TResult maybeMap({ TResult Function(BeneficiaryRegistrationSaveAddressEvent value)? saveAddress, + TResult Function(BeneficiaryRegistrationSaveHouseDetailsEvent value)? + saveHouseDetails, TResult Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? saveHouseholdDetails, TResult Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? @@ -1405,6 +1720,7 @@ class _$BeneficiaryRegistrationUpdateHouseholdDetailsEventImpl @optionalTypeArgs TResult when({ required TResult Function(AddressModel model) saveAddress, + required TResult Function(HouseholdModel model) saveHouseDetails, required TResult Function( HouseholdModel household, DateTime registrationDate) saveHouseholdDetails, @@ -1437,6 +1753,7 @@ class _$BeneficiaryRegistrationUpdateHouseholdDetailsEventImpl @optionalTypeArgs TResult? whenOrNull({ TResult? Function(AddressModel model)? saveAddress, + TResult? Function(HouseholdModel model)? saveHouseDetails, TResult? Function(HouseholdModel household, DateTime registrationDate)? saveHouseholdDetails, TResult? Function(IndividualModel model, bool isHeadOfHousehold)? @@ -1468,6 +1785,7 @@ class _$BeneficiaryRegistrationUpdateHouseholdDetailsEventImpl @optionalTypeArgs TResult maybeWhen({ TResult Function(AddressModel model)? saveAddress, + TResult Function(HouseholdModel model)? saveHouseDetails, TResult Function(HouseholdModel household, DateTime registrationDate)? saveHouseholdDetails, TResult Function(IndividualModel model, bool isHeadOfHousehold)? @@ -1504,6 +1822,9 @@ class _$BeneficiaryRegistrationUpdateHouseholdDetailsEventImpl TResult map({ required TResult Function(BeneficiaryRegistrationSaveAddressEvent value) saveAddress, + required TResult Function( + BeneficiaryRegistrationSaveHouseDetailsEvent value) + saveHouseDetails, required TResult Function( BeneficiaryRegistrationSaveHouseholdDetailsEvent value) saveHouseholdDetails, @@ -1529,6 +1850,8 @@ class _$BeneficiaryRegistrationUpdateHouseholdDetailsEventImpl TResult? mapOrNull({ TResult? Function(BeneficiaryRegistrationSaveAddressEvent value)? saveAddress, + TResult? Function(BeneficiaryRegistrationSaveHouseDetailsEvent value)? + saveHouseDetails, TResult? Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? saveHouseholdDetails, TResult? Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? @@ -1550,6 +1873,8 @@ class _$BeneficiaryRegistrationUpdateHouseholdDetailsEventImpl TResult maybeMap({ TResult Function(BeneficiaryRegistrationSaveAddressEvent value)? saveAddress, + TResult Function(BeneficiaryRegistrationSaveHouseDetailsEvent value)? + saveHouseDetails, TResult Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? saveHouseholdDetails, TResult Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? @@ -1704,6 +2029,7 @@ class _$BeneficiaryRegistrationUpdateIndividualDetailsEventImpl @optionalTypeArgs TResult when({ required TResult Function(AddressModel model) saveAddress, + required TResult Function(HouseholdModel model) saveHouseDetails, required TResult Function( HouseholdModel household, DateTime registrationDate) saveHouseholdDetails, @@ -1736,6 +2062,7 @@ class _$BeneficiaryRegistrationUpdateIndividualDetailsEventImpl @optionalTypeArgs TResult? whenOrNull({ TResult? Function(AddressModel model)? saveAddress, + TResult? Function(HouseholdModel model)? saveHouseDetails, TResult? Function(HouseholdModel household, DateTime registrationDate)? saveHouseholdDetails, TResult? Function(IndividualModel model, bool isHeadOfHousehold)? @@ -1768,6 +2095,7 @@ class _$BeneficiaryRegistrationUpdateIndividualDetailsEventImpl @optionalTypeArgs TResult maybeWhen({ TResult Function(AddressModel model)? saveAddress, + TResult Function(HouseholdModel model)? saveHouseDetails, TResult Function(HouseholdModel household, DateTime registrationDate)? saveHouseholdDetails, TResult Function(IndividualModel model, bool isHeadOfHousehold)? @@ -1804,6 +2132,9 @@ class _$BeneficiaryRegistrationUpdateIndividualDetailsEventImpl TResult map({ required TResult Function(BeneficiaryRegistrationSaveAddressEvent value) saveAddress, + required TResult Function( + BeneficiaryRegistrationSaveHouseDetailsEvent value) + saveHouseDetails, required TResult Function( BeneficiaryRegistrationSaveHouseholdDetailsEvent value) saveHouseholdDetails, @@ -1829,6 +2160,8 @@ class _$BeneficiaryRegistrationUpdateIndividualDetailsEventImpl TResult? mapOrNull({ TResult? Function(BeneficiaryRegistrationSaveAddressEvent value)? saveAddress, + TResult? Function(BeneficiaryRegistrationSaveHouseDetailsEvent value)? + saveHouseDetails, TResult? Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? saveHouseholdDetails, TResult? Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? @@ -1850,6 +2183,8 @@ class _$BeneficiaryRegistrationUpdateIndividualDetailsEventImpl TResult maybeMap({ TResult Function(BeneficiaryRegistrationSaveAddressEvent value)? saveAddress, + TResult Function(BeneficiaryRegistrationSaveHouseDetailsEvent value)? + saveHouseDetails, TResult Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? saveHouseholdDetails, TResult Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? @@ -1993,6 +2328,7 @@ class _$BeneficiaryRegistrationCreateEventImpl @optionalTypeArgs TResult when({ required TResult Function(AddressModel model) saveAddress, + required TResult Function(HouseholdModel model) saveHouseDetails, required TResult Function( HouseholdModel household, DateTime registrationDate) saveHouseholdDetails, @@ -2025,6 +2361,7 @@ class _$BeneficiaryRegistrationCreateEventImpl @optionalTypeArgs TResult? whenOrNull({ TResult? Function(AddressModel model)? saveAddress, + TResult? Function(HouseholdModel model)? saveHouseDetails, TResult? Function(HouseholdModel household, DateTime registrationDate)? saveHouseholdDetails, TResult? Function(IndividualModel model, bool isHeadOfHousehold)? @@ -2056,6 +2393,7 @@ class _$BeneficiaryRegistrationCreateEventImpl @optionalTypeArgs TResult maybeWhen({ TResult Function(AddressModel model)? saveAddress, + TResult Function(HouseholdModel model)? saveHouseDetails, TResult Function(HouseholdModel household, DateTime registrationDate)? saveHouseholdDetails, TResult Function(IndividualModel model, bool isHeadOfHousehold)? @@ -2092,6 +2430,9 @@ class _$BeneficiaryRegistrationCreateEventImpl TResult map({ required TResult Function(BeneficiaryRegistrationSaveAddressEvent value) saveAddress, + required TResult Function( + BeneficiaryRegistrationSaveHouseDetailsEvent value) + saveHouseDetails, required TResult Function( BeneficiaryRegistrationSaveHouseholdDetailsEvent value) saveHouseholdDetails, @@ -2117,6 +2458,8 @@ class _$BeneficiaryRegistrationCreateEventImpl TResult? mapOrNull({ TResult? Function(BeneficiaryRegistrationSaveAddressEvent value)? saveAddress, + TResult? Function(BeneficiaryRegistrationSaveHouseDetailsEvent value)? + saveHouseDetails, TResult? Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? saveHouseholdDetails, TResult? Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? @@ -2138,6 +2481,8 @@ class _$BeneficiaryRegistrationCreateEventImpl TResult maybeMap({ TResult Function(BeneficiaryRegistrationSaveAddressEvent value)? saveAddress, + TResult Function(BeneficiaryRegistrationSaveHouseDetailsEvent value)? + saveHouseDetails, TResult Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? saveHouseholdDetails, TResult Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? @@ -2247,6 +2592,7 @@ class _$BeneficiaryRegistrationTagEventImpl @optionalTypeArgs TResult when({ required TResult Function(AddressModel model) saveAddress, + required TResult Function(HouseholdModel model) saveHouseDetails, required TResult Function( HouseholdModel household, DateTime registrationDate) saveHouseholdDetails, @@ -2279,6 +2625,7 @@ class _$BeneficiaryRegistrationTagEventImpl @optionalTypeArgs TResult? whenOrNull({ TResult? Function(AddressModel model)? saveAddress, + TResult? Function(HouseholdModel model)? saveHouseDetails, TResult? Function(HouseholdModel household, DateTime registrationDate)? saveHouseholdDetails, TResult? Function(IndividualModel model, bool isHeadOfHousehold)? @@ -2310,6 +2657,7 @@ class _$BeneficiaryRegistrationTagEventImpl @optionalTypeArgs TResult maybeWhen({ TResult Function(AddressModel model)? saveAddress, + TResult Function(HouseholdModel model)? saveHouseDetails, TResult Function(HouseholdModel household, DateTime registrationDate)? saveHouseholdDetails, TResult Function(IndividualModel model, bool isHeadOfHousehold)? @@ -2346,6 +2694,9 @@ class _$BeneficiaryRegistrationTagEventImpl TResult map({ required TResult Function(BeneficiaryRegistrationSaveAddressEvent value) saveAddress, + required TResult Function( + BeneficiaryRegistrationSaveHouseDetailsEvent value) + saveHouseDetails, required TResult Function( BeneficiaryRegistrationSaveHouseholdDetailsEvent value) saveHouseholdDetails, @@ -2371,6 +2722,8 @@ class _$BeneficiaryRegistrationTagEventImpl TResult? mapOrNull({ TResult? Function(BeneficiaryRegistrationSaveAddressEvent value)? saveAddress, + TResult? Function(BeneficiaryRegistrationSaveHouseDetailsEvent value)? + saveHouseDetails, TResult? Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? saveHouseholdDetails, TResult? Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? @@ -2392,6 +2745,8 @@ class _$BeneficiaryRegistrationTagEventImpl TResult maybeMap({ TResult Function(BeneficiaryRegistrationSaveAddressEvent value)? saveAddress, + TResult Function(BeneficiaryRegistrationSaveHouseDetailsEvent value)? + saveHouseDetails, TResult Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? saveHouseholdDetails, TResult Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? diff --git a/packages/registration_delivery/lib/data/repositories/local/household.dart b/packages/registration_delivery/lib/data/repositories/local/household.dart index f058194d6..86b18991e 100644 --- a/packages/registration_delivery/lib/data/repositories/local/household.dart +++ b/packages/registration_delivery/lib/data/repositories/local/household.dart @@ -4,7 +4,6 @@ import 'dart:math' as math; import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; -import 'package:registration_delivery/utils/utils.dart'; import '../../../models/entities/household.dart'; @@ -76,6 +75,8 @@ class HouseholdLocalRepository memberCount: household.memberCount, rowVersion: household.rowVersion, isDeleted: household.isDeleted, + additionalFields: HouseholdAdditionalFieldsMapper.fromJson( + household.additionalFields.toString()), auditDetails: (household.auditCreatedBy != null && household.auditCreatedTime != null) ? AuditDetails( diff --git a/packages/registration_delivery/lib/models/entities/additional_fields_type.dart b/packages/registration_delivery/lib/models/entities/additional_fields_type.dart index 98481a9db..cef1dff0c 100644 --- a/packages/registration_delivery/lib/models/entities/additional_fields_type.dart +++ b/packages/registration_delivery/lib/models/entities/additional_fields_type.dart @@ -43,4 +43,8 @@ enum AdditionalFieldsType { pregnantWomen, @MappableValue("children") children, + @MappableValue("noOfRooms") + noOfRooms, + @MappableValue("houseStructureTypes") + houseStructureTypes, } diff --git a/packages/registration_delivery/lib/models/entities/additional_fields_type.mapper.dart b/packages/registration_delivery/lib/models/entities/additional_fields_type.mapper.dart index 4d7dd8a96..4e1b69830 100644 --- a/packages/registration_delivery/lib/models/entities/additional_fields_type.mapper.dart +++ b/packages/registration_delivery/lib/models/entities/additional_fields_type.mapper.dart @@ -63,6 +63,10 @@ class AdditionalFieldsTypeMapper extends EnumMapper { return AdditionalFieldsType.pregnantWomen; case "children": return AdditionalFieldsType.children; + case "noOfRooms": + return AdditionalFieldsType.noOfRooms; + case "houseStructureTypes": + return AdditionalFieldsType.houseStructureTypes; default: throw MapperException.unknownEnumValue(value); } @@ -109,6 +113,10 @@ class AdditionalFieldsTypeMapper extends EnumMapper { return "pregnantWomen"; case AdditionalFieldsType.children: return "children"; + case AdditionalFieldsType.noOfRooms: + return "noOfRooms"; + case AdditionalFieldsType.houseStructureTypes: + return "houseStructureTypes"; } } } diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart new file mode 100644 index 000000000..1b30fe123 --- /dev/null +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart @@ -0,0 +1,299 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:digit_components/digit_components.dart'; +import 'package:digit_components/widgets/atoms/digit_toaster.dart'; +import 'package:digit_components/widgets/atoms/selection_card.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:reactive_forms/reactive_forms.dart'; +import 'package:registration_delivery/registration_delivery.dart'; +import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; +import 'package:registration_delivery/utils/extensions/extensions.dart'; + +import '../../models/entities/additional_fields_type.dart'; +import '../../utils/i18_key_constants.dart' as i18; +import '../../widgets/back_navigation_help_header.dart'; +import '../../widgets/localized.dart'; +import '../../widgets/showcase/config/showcase_constants.dart'; +import '../../widgets/showcase/showcase_button.dart'; + +@RoutePage() +class HouseDetailsPage extends LocalizedStatefulWidget { + const HouseDetailsPage({ + super.key, + super.appLocalizations, + }); + + @override + State createState() => _HouseDetailsPageState(); +} + +class _HouseDetailsPageState extends LocalizedState { + static const _noOfRoomsKey = 'noOfRooms'; + List? selectedHouseStructureTypes; + + @override + void initState() { + final registrationState = context.read().state; + setState(() { + selectedHouseStructureTypes = registrationState + .householdModel?.additionalFields?.fields + .where((e) => + e.key == AdditionalFieldsType.houseStructureTypes.toValue()) + .first + .value + .toString() + .split("|"); + }); + + super.initState(); + } + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + final bloc = context.read(); + final router = context.router; + + return Scaffold( + body: ReactiveFormBuilder( + form: () => buildForm(bloc.state), + builder: (_, form, __) => BlocBuilder( + builder: (context, registrationState) { + return ScrollableContent( + enableFixedButton: true, + header: const Column( + children: [ + BackNavigationHelpHeaderWidget( + showcaseButton: ShowcaseButton(), + showHelp: false, + ), + ], + ), + footer: DigitCard( + margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), + padding: + const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), + child: DigitElevatedButton( + onPressed: () { + form.markAllAsTouched(); + if (!form.valid) return; + if ((selectedHouseStructureTypes ?? []).isEmpty) { + DigitToast.show(context, + options: DigitToastOptions( + localizations.translate(i18.householdDetails + .selectStructureTypeError), + true, + theme, + )); + } else { + final noOfRooms = + form.control(_noOfRoomsKey).value as int; + registrationState.maybeWhen( + orElse: () { + return; + }, + create: ( + address, + householdModel, + individualModel, + registrationDate, + searchQuery, + loading, + isHeadOfHousehold, + ) { + var houseModel = HouseholdModel( + clientReferenceId: IdGen.i.identifier, + tenantId: RegistrationDeliverySingleton() + .tenantId, + rowVersion: 1, + auditDetails: AuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: + context.millisecondsSinceEpoch(), + ), + clientAuditDetails: ClientAuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: + context.millisecondsSinceEpoch(), + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: + context.millisecondsSinceEpoch(), + ), + additionalFields: HouseholdAdditionalFields( + version: 1, + fields: [ + AdditionalField( + AdditionalFieldsType + .houseStructureTypes + .toValue(), + selectedHouseStructureTypes + ?.join("|") + .toString(), + ), + AdditionalField( + AdditionalFieldsType.noOfRooms + .toValue(), + noOfRooms, + ) + ])); + + bloc.add( + BeneficiaryRegistrationSaveHouseDetailsEvent( + model: houseModel, + ), + ); + router.push(HouseHoldDetailsRoute()); + }, + editHousehold: ( + address, + householdModel, + individuals, + registrationDate, + projectBeneficiaryModel, + loading, + ) { + var houseModel = householdModel.copyWith( + additionalFields: HouseholdAdditionalFields( + version: 1, + fields: [ + ...?householdModel + .additionalFields?.fields + .where((e) => + e.key != + AdditionalFieldsType + .houseStructureTypes + .toValue() && + e.key != + AdditionalFieldsType.noOfRooms + .toValue()), + AdditionalField( + AdditionalFieldsType.houseStructureTypes + .toValue(), + selectedHouseStructureTypes + ?.join("|") + .toString(), + ), + AdditionalField( + AdditionalFieldsType.noOfRooms + .toValue(), + noOfRooms, + ) + ])); + // TODO [Linking of Voucher for Household based project need to be handled] + + bloc.add( + BeneficiaryRegistrationSaveHouseDetailsEvent( + model: houseModel, + ), + ); + router.push(HouseHoldDetailsRoute()); + }, + ); + } + }, + child: Center( + child: Text( + localizations.translate( + i18.householdLocation.actionLabel, + ), + ), + ), + ), + ), + slivers: [ + SliverToBoxAdapter( + child: DigitCard( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB( + 0, 0, 0, kPadding), + child: Text( + localizations.translate( + i18.householdDetails.houseDetailsLabel, + ), + style: theme.textTheme.displayMedium, + ), + ), + Column(children: [ + houseShowcaseData.typeOfStructure.buildWith( + child: SelectionBox( + width: 120, + options: RegistrationDeliverySingleton() + .houseStructureTypes ?? + [], + initialSelection: registrationState + .householdModel + ?.additionalFields + ?.fields + .where((e) => + e.key == + AdditionalFieldsType + .houseStructureTypes + .toValue()) + .first + .value + .toString() + .split("|"), + onSelectionChanged: (values) { + setState(() { + selectedHouseStructureTypes = values; + }); + }, + valueMapper: (value) { + return localizations + .translate(value.toString()); + }, + ), + ), + houseShowcaseData.noOfRooms.buildWith( + child: DigitIntegerFormPicker( + minimum: 1, + form: form, + formControlName: _noOfRoomsKey, + label: localizations.translate( + i18.householdDetails.noOfRoomsLabel, + ), + incrementer: true, + ), + ), + ]), + ], + ), + ), + ), + ], + ); + }, + )), + ); + } + + FormGroup buildForm(BeneficiaryRegistrationState state) { + return fb.group({ + _noOfRoomsKey: FormControl( + value: state.householdModel?.additionalFields?.fields + .where((h) => + h.key == AdditionalFieldsType.noOfRooms.toValue()) + .firstOrNull + ?.value != + null + ? int.tryParse(state.householdModel?.additionalFields?.fields + .where((h) => + h.key == AdditionalFieldsType.noOfRooms.toValue()) + .firstOrNull + ?.value + .toString() ?? + '1') + : 1), + }); + } +} diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart index 8a0600724..ef5a507c7 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart @@ -54,6 +54,7 @@ class _HouseHoldDetailsPageState extends LocalizedState { showcaseButton: ShowcaseButton(), ), ]), + enableFixedButton: true, footer: DigitCard( margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), @@ -89,7 +90,9 @@ class _HouseHoldDetailsPageState extends LocalizedState { var household = householdModel; household ??= HouseholdModel( tenantId: RegistrationDeliverySingleton().tenantId, - clientReferenceId: IdGen.i.identifier, + clientReferenceId: + householdModel?.clientReferenceId ?? + IdGen.i.identifier, rowVersion: 1, clientAuditDetails: ClientAuditDetails( createdBy: RegistrationDeliverySingleton() @@ -110,6 +113,11 @@ class _HouseHoldDetailsPageState extends LocalizedState { ); household = household.copyWith( + rowVersion: 1, + tenantId: RegistrationDeliverySingleton().tenantId, + clientReferenceId: + householdModel?.clientReferenceId ?? + IdGen.i.identifier, memberCount: memberCount, clientAuditDetails: ClientAuditDetails( createdBy: RegistrationDeliverySingleton() @@ -137,6 +145,7 @@ class _HouseHoldDetailsPageState extends LocalizedState { additionalFields: HouseholdAdditionalFields(version: 1, fields: [ //[TODO: Use pregnant women form value based on project config + ...?householdModel?.additionalFields?.fields, AdditionalField( AdditionalFieldsType.pregnantWomen.toValue(), pregnantWomen, @@ -195,28 +204,11 @@ class _HouseHoldDetailsPageState extends LocalizedState { AdditionalField( AdditionalFieldsType.pregnantWomen .toValue(), - int.tryParse(householdModel - .additionalFields?.fields - .where((h) => - h.key == - AdditionalFieldsType - .pregnantWomen - .toValue()) - .first - .value) ?? - pregnantWomen, + pregnantWomen, ), AdditionalField( AdditionalFieldsType.children.toValue(), - int.tryParse(householdModel - .additionalFields?.fields - .where((h) => - h.key == - AdditionalFieldsType.children - .toValue()) - .first - .value) ?? - children, + children, ) ])); @@ -289,7 +281,7 @@ class _HouseHoldDetailsPageState extends LocalizedState { mainAxisSize: MainAxisSize.min, children: [ TextBlock( - padding: const EdgeInsets.only(top: kPadding), + padding: const EdgeInsets.only(top: kPadding), heading: localizations.translate( i18.householdDetails.householdDetailsLabel, ), @@ -334,7 +326,7 @@ class _HouseHoldDetailsPageState extends LocalizedState { .numberOfPregnantWomenInHousehold .buildWith( child: DigitIntegerFormPicker( - minimum: 1, + minimum: 0, form: form, formControlName: _pregnantWomenCountKey, label: localizations.translate( @@ -348,7 +340,7 @@ class _HouseHoldDetailsPageState extends LocalizedState { .numberOfChildrenBelow5InHousehold .buildWith( child: DigitIntegerFormPicker( - minimum: 1, + minimum: 0, form: form, formControlName: _childrenCountKey, label: localizations.translate( @@ -391,19 +383,35 @@ class _HouseHoldDetailsPageState extends LocalizedState { FormControl(value: registrationDate, validators: []), _memberCountKey: FormControl(value: household?.memberCount ?? 1), _pregnantWomenCountKey: FormControl( - value: int.tryParse(household?.additionalFields?.fields - .where((h) => - h.key == AdditionalFieldsType.pregnantWomen.toValue()) - .first - .value) ?? - 0), + value: household?.additionalFields?.fields + .where((h) => + h.key == AdditionalFieldsType.pregnantWomen.toValue()) + .firstOrNull + ?.value != + null + ? int.tryParse(household?.additionalFields?.fields + .where((h) => + h.key == AdditionalFieldsType.pregnantWomen.toValue()) + .firstOrNull + ?.value + .toString() ?? + '0') + : 0), _childrenCountKey: FormControl( - value: int.tryParse(household?.additionalFields?.fields - .where( - (h) => h.key == AdditionalFieldsType.children.toValue()) - .first - .value) ?? - 0) + value: household?.additionalFields?.fields + .where((h) => + h.key == AdditionalFieldsType.children.toValue()) + .firstOrNull + ?.value != + null + ? int.tryParse(household?.additionalFields?.fields + .where((h) => + h.key == AdditionalFieldsType.children.toValue()) + .firstOrNull + ?.value + .toString() ?? + '0') + : 0) }); } } diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index f2a099f67..81e21de12 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -172,7 +172,7 @@ class _HouseholdLocationPageState addressModel, ), ); - router.push(HouseHoldDetailsRoute()); + router.push(HouseDetailsRoute()); }, editHousehold: ( address, @@ -213,7 +213,7 @@ class _HouseholdLocationPageState addressModel, ), ); - router.push(HouseHoldDetailsRoute()); + router.push(HouseDetailsRoute()); }, ); }, @@ -236,17 +236,16 @@ class _HouseholdLocationPageState mainAxisSize: MainAxisSize.min, children: [ TextBlock( - padding: const EdgeInsets.only(top: kPadding), - heading: localizations.translate( - i18.householdLocation - .householdLocationLabelText, - ), - headingStyle: theme.textTheme.displayMedium, - body: localizations.translate( - i18.householdLocation - .householdLocationDescriptionText, - ) - ), + padding: const EdgeInsets.only(top: kPadding), + heading: localizations.translate( + i18.householdLocation + .householdLocationLabelText, + ), + headingStyle: theme.textTheme.displayMedium, + body: localizations.translate( + i18.householdLocation + .householdLocationDescriptionText, + )), Column(children: [ householdLocationShowcaseData.administrativeArea .buildWith( diff --git a/packages/registration_delivery/lib/router/registration_delivery_router.dart b/packages/registration_delivery/lib/router/registration_delivery_router.dart index e7c002b5b..7ae856838 100644 --- a/packages/registration_delivery/lib/router/registration_delivery_router.dart +++ b/packages/registration_delivery/lib/router/registration_delivery_router.dart @@ -29,6 +29,9 @@ class RegistrationDeliveryRoute extends $RegistrationDeliveryRoute { AutoRoute( page: HouseHoldDetailsRoute.page, path: 'household-details'), + AutoRoute( + page: HouseDetailsRoute.page, + path: 'house-details'), AutoRoute( page: HouseholdLocationRoute.page, path: 'household-location', diff --git a/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart b/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart index 9ddbc61e2..7920e4389 100644 --- a/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart +++ b/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart @@ -8,15 +8,15 @@ // coverage:ignore-file // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'package:auto_route/auto_route.dart' as _i20; -import 'package:digit_data_model/data_model.dart' as _i25; -import 'package:flutter/material.dart' as _i21; -import 'package:registration_delivery/blocs/app_localization.dart' as _i22; +import 'package:auto_route/auto_route.dart' as _i22; +import 'package:digit_data_model/data_model.dart' as _i27; +import 'package:flutter/material.dart' as _i23; +import 'package:registration_delivery/blocs/app_localization.dart' as _i24; import 'package:registration_delivery/blocs/beneficiary_registration/beneficiary_registration.dart' - as _i23; + as _i25; import 'package:registration_delivery/blocs/search_households/search_households.dart' - as _i24; -import 'package:registration_delivery/models/entities/task.dart' as _i26; + as _i26; +import 'package:registration_delivery/models/entities/task.dart' as _i28; import 'package:registration_delivery/pages/beneficiary/beneficiary_details.dart' as _i2; import 'package:registration_delivery/pages/beneficiary/beneficiary_wrapper.dart' @@ -28,39 +28,43 @@ import 'package:registration_delivery/pages/beneficiary/dose_administered.dart' import 'package:registration_delivery/pages/beneficiary/facility_selection.dart' as _i7; import 'package:registration_delivery/pages/beneficiary/household_overview.dart' - as _i11; + as _i12; import 'package:registration_delivery/pages/beneficiary/record_past_delivery_details.dart' - as _i14; -import 'package:registration_delivery/pages/beneficiary/refer_beneficiary.dart' as _i15; +import 'package:registration_delivery/pages/beneficiary/refer_beneficiary.dart' + as _i16; import 'package:registration_delivery/pages/beneficiary/side_effects.dart' - as _i18; + as _i19; import 'package:registration_delivery/pages/beneficiary/widgets/household_acknowledgement.dart' - as _i9; + as _i10; import 'package:registration_delivery/pages/beneficiary/widgets/splash_acknowledgement.dart' - as _i19; + as _i20; import 'package:registration_delivery/pages/beneficiary_registration/beneficiary_acknowledgement.dart' as _i1; import 'package:registration_delivery/pages/beneficiary_registration/beneficiary_registration_wrapper.dart' as _i3; -import 'package:registration_delivery/pages/beneficiary_registration/household_details.dart' +import 'package:registration_delivery/pages/beneficiary_registration/house_details.dart' as _i8; +import 'package:registration_delivery/pages/beneficiary_registration/household_details.dart' + as _i9; import 'package:registration_delivery/pages/beneficiary_registration/household_location.dart' - as _i10; + as _i11; import 'package:registration_delivery/pages/beneficiary_registration/individual_details.dart' - as _i12; -import 'package:registration_delivery/pages/reason_for_deletion.dart' as _i13; + as _i13; +import 'package:registration_delivery/pages/reason_for_deletion.dart' as _i14; import 'package:registration_delivery/pages/registration_delivery_wrapper.dart' - as _i16; -import 'package:registration_delivery/pages/search_beneficiary.dart' as _i17; + as _i17; +import 'package:registration_delivery/pages/search_beneficiary.dart' as _i18; +import 'package:registration_delivery/pages/summary_page.dart' as _i21; +import 'package:registration_delivery/widgets/details_card.dart' as _i29; -abstract class $RegistrationDeliveryRoute extends _i20.AutoRouterModule { +abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { @override - final Map pagesMap = { + final Map pagesMap = { BeneficiaryAcknowledgementRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const BeneficiaryAcknowledgementRouteArgs()); - return _i20.AutoRoutePage( + return _i22.AutoRoutePage( routeData: routeData, child: _i1.BeneficiaryAcknowledgementPage( key: args.key, @@ -72,7 +76,7 @@ abstract class $RegistrationDeliveryRoute extends _i20.AutoRouterModule { BeneficiaryDetailsRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const BeneficiaryDetailsRouteArgs()); - return _i20.AutoRoutePage( + return _i22.AutoRoutePage( routeData: routeData, child: _i2.BeneficiaryDetailsPage( key: args.key, @@ -82,9 +86,9 @@ abstract class $RegistrationDeliveryRoute extends _i20.AutoRouterModule { }, BeneficiaryRegistrationWrapperRoute.name: (routeData) { final args = routeData.argsAs(); - return _i20.AutoRoutePage( + return _i22.AutoRoutePage( routeData: routeData, - child: _i20.WrappedRoute( + child: _i22.WrappedRoute( child: _i3.BeneficiaryRegistrationWrapperPage( key: args.key, initialState: args.initialState, @@ -93,7 +97,7 @@ abstract class $RegistrationDeliveryRoute extends _i20.AutoRouterModule { }, BeneficiaryWrapperRoute.name: (routeData) { final args = routeData.argsAs(); - return _i20.AutoRoutePage( + return _i22.AutoRoutePage( routeData: routeData, child: _i4.BeneficiaryWrapperPage( key: args.key, @@ -105,7 +109,7 @@ abstract class $RegistrationDeliveryRoute extends _i20.AutoRouterModule { DeliverInterventionRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const DeliverInterventionRouteArgs()); - return _i20.AutoRoutePage( + return _i22.AutoRoutePage( routeData: routeData, child: _i5.DeliverInterventionPage( key: args.key, @@ -117,7 +121,7 @@ abstract class $RegistrationDeliveryRoute extends _i20.AutoRouterModule { DoseAdministeredRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const DoseAdministeredRouteArgs()); - return _i20.AutoRoutePage( + return _i22.AutoRoutePage( routeData: routeData, child: _i6.DoseAdministeredPage( key: args.key, @@ -127,7 +131,7 @@ abstract class $RegistrationDeliveryRoute extends _i20.AutoRouterModule { }, FacilitySelectionRoute.name: (routeData) { final args = routeData.argsAs(); - return _i20.AutoRoutePage( + return _i22.AutoRoutePage( routeData: routeData, child: _i7.FacilitySelectionPage( key: args.key, @@ -135,12 +139,23 @@ abstract class $RegistrationDeliveryRoute extends _i20.AutoRouterModule { ), ); }, + HouseDetailsRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const HouseDetailsRouteArgs()); + return _i22.AutoRoutePage( + routeData: routeData, + child: _i8.HouseDetailsPage( + key: args.key, + appLocalizations: args.appLocalizations, + ), + ); + }, HouseHoldDetailsRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const HouseHoldDetailsRouteArgs()); - return _i20.AutoRoutePage( + return _i22.AutoRoutePage( routeData: routeData, - child: _i8.HouseHoldDetailsPage( + child: _i9.HouseHoldDetailsPage( key: args.key, appLocalizations: args.appLocalizations, ), @@ -149,9 +164,9 @@ abstract class $RegistrationDeliveryRoute extends _i20.AutoRouterModule { HouseholdAcknowledgementRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const HouseholdAcknowledgementRouteArgs()); - return _i20.AutoRoutePage( + return _i22.AutoRoutePage( routeData: routeData, - child: _i9.HouseholdAcknowledgementPage( + child: _i10.HouseholdAcknowledgementPage( key: args.key, appLocalizations: args.appLocalizations, enableViewHousehold: args.enableViewHousehold, @@ -161,9 +176,9 @@ abstract class $RegistrationDeliveryRoute extends _i20.AutoRouterModule { HouseholdLocationRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const HouseholdLocationRouteArgs()); - return _i20.AutoRoutePage( + return _i22.AutoRoutePage( routeData: routeData, - child: _i10.HouseholdLocationPage( + child: _i11.HouseholdLocationPage( key: args.key, appLocalizations: args.appLocalizations, ), @@ -172,9 +187,9 @@ abstract class $RegistrationDeliveryRoute extends _i20.AutoRouterModule { HouseholdOverviewRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const HouseholdOverviewRouteArgs()); - return _i20.AutoRoutePage( + return _i22.AutoRoutePage( routeData: routeData, - child: _i11.HouseholdOverviewPage( + child: _i12.HouseholdOverviewPage( key: args.key, appLocalizations: args.appLocalizations, ), @@ -183,9 +198,9 @@ abstract class $RegistrationDeliveryRoute extends _i20.AutoRouterModule { IndividualDetailsRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const IndividualDetailsRouteArgs()); - return _i20.AutoRoutePage( + return _i22.AutoRoutePage( routeData: routeData, - child: _i12.IndividualDetailsPage( + child: _i13.IndividualDetailsPage( key: args.key, appLocalizations: args.appLocalizations, isHeadOfHousehold: args.isHeadOfHousehold, @@ -195,9 +210,9 @@ abstract class $RegistrationDeliveryRoute extends _i20.AutoRouterModule { ReasonForDeletionRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const ReasonForDeletionRouteArgs()); - return _i20.AutoRoutePage( + return _i22.AutoRoutePage( routeData: routeData, - child: _i13.ReasonForDeletionPage( + child: _i14.ReasonForDeletionPage( key: args.key, appLocalizations: args.appLocalizations, isHousholdDelete: args.isHousholdDelete, @@ -207,9 +222,9 @@ abstract class $RegistrationDeliveryRoute extends _i20.AutoRouterModule { RecordPastDeliveryDetailsRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const RecordPastDeliveryDetailsRouteArgs()); - return _i20.AutoRoutePage( + return _i22.AutoRoutePage( routeData: routeData, - child: _i14.RecordPastDeliveryDetailsPage( + child: _i15.RecordPastDeliveryDetailsPage( key: args.key, appLocalizations: args.appLocalizations, tasks: args.tasks, @@ -218,9 +233,9 @@ abstract class $RegistrationDeliveryRoute extends _i20.AutoRouterModule { }, ReferBeneficiaryRoute.name: (routeData) { final args = routeData.argsAs(); - return _i20.AutoRoutePage( + return _i22.AutoRoutePage( routeData: routeData, - child: _i15.ReferBeneficiaryPage( + child: _i16.ReferBeneficiaryPage( key: args.key, appLocalizations: args.appLocalizations, isEditing: args.isEditing, @@ -229,17 +244,17 @@ abstract class $RegistrationDeliveryRoute extends _i20.AutoRouterModule { ); }, RegistrationDeliveryWrapperRoute.name: (routeData) { - return _i20.AutoRoutePage( + return _i22.AutoRoutePage( routeData: routeData, - child: const _i16.RegistrationDeliveryWrapperPage(), + child: const _i17.RegistrationDeliveryWrapperPage(), ); }, SearchBeneficiaryRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const SearchBeneficiaryRouteArgs()); - return _i20.AutoRoutePage( + return _i22.AutoRoutePage( routeData: routeData, - child: _i17.SearchBeneficiaryPage( + child: _i18.SearchBeneficiaryPage( key: args.key, appLocalizations: args.appLocalizations, ), @@ -247,9 +262,9 @@ abstract class $RegistrationDeliveryRoute extends _i20.AutoRouterModule { }, SideEffectsRoute.name: (routeData) { final args = routeData.argsAs(); - return _i20.AutoRoutePage( + return _i22.AutoRoutePage( routeData: routeData, - child: _i18.SideEffectsPage( + child: _i19.SideEffectsPage( key: args.key, appLocalizations: args.appLocalizations, tasks: args.tasks, @@ -260,27 +275,38 @@ abstract class $RegistrationDeliveryRoute extends _i20.AutoRouterModule { SplashAcknowledgementRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const SplashAcknowledgementRouteArgs()); - return _i20.AutoRoutePage( + return _i22.AutoRoutePage( routeData: routeData, - child: _i19.SplashAcknowledgementPage( + child: _i20.SplashAcknowledgementPage( key: args.key, appLocalizations: args.appLocalizations, enableBackToSearch: args.enableBackToSearch, ), ); }, + SummaryRoute.name: (routeData) { + final args = routeData.argsAs(); + return _i22.AutoRoutePage( + routeData: routeData, + child: _i21.SummaryPage( + key: args.key, + appLocalizations: args.appLocalizations, + summaryList: args.summaryList, + ), + ); + }, }; } /// generated route for /// [_i1.BeneficiaryAcknowledgementPage] class BeneficiaryAcknowledgementRoute - extends _i20.PageRouteInfo { + extends _i22.PageRouteInfo { BeneficiaryAcknowledgementRoute({ - _i21.Key? key, - _i22.RegistrationDeliveryLocalization? appLocalizations, + _i23.Key? key, + _i24.RegistrationDeliveryLocalization? appLocalizations, bool? enableViewHousehold, - List<_i20.PageRouteInfo>? children, + List<_i22.PageRouteInfo>? children, }) : super( BeneficiaryAcknowledgementRoute.name, args: BeneficiaryAcknowledgementRouteArgs( @@ -293,8 +319,8 @@ class BeneficiaryAcknowledgementRoute static const String name = 'BeneficiaryAcknowledgementRoute'; - static const _i20.PageInfo page = - _i20.PageInfo(name); + static const _i22.PageInfo page = + _i22.PageInfo(name); } class BeneficiaryAcknowledgementRouteArgs { @@ -304,9 +330,9 @@ class BeneficiaryAcknowledgementRouteArgs { this.enableViewHousehold, }); - final _i21.Key? key; + final _i23.Key? key; - final _i22.RegistrationDeliveryLocalization? appLocalizations; + final _i24.RegistrationDeliveryLocalization? appLocalizations; final bool? enableViewHousehold; @@ -319,11 +345,11 @@ class BeneficiaryAcknowledgementRouteArgs { /// generated route for /// [_i2.BeneficiaryDetailsPage] class BeneficiaryDetailsRoute - extends _i20.PageRouteInfo { + extends _i22.PageRouteInfo { BeneficiaryDetailsRoute({ - _i21.Key? key, - _i22.RegistrationDeliveryLocalization? appLocalizations, - List<_i20.PageRouteInfo>? children, + _i23.Key? key, + _i24.RegistrationDeliveryLocalization? appLocalizations, + List<_i22.PageRouteInfo>? children, }) : super( BeneficiaryDetailsRoute.name, args: BeneficiaryDetailsRouteArgs( @@ -335,8 +361,8 @@ class BeneficiaryDetailsRoute static const String name = 'BeneficiaryDetailsRoute'; - static const _i20.PageInfo page = - _i20.PageInfo(name); + static const _i22.PageInfo page = + _i22.PageInfo(name); } class BeneficiaryDetailsRouteArgs { @@ -345,9 +371,9 @@ class BeneficiaryDetailsRouteArgs { this.appLocalizations, }); - final _i21.Key? key; + final _i23.Key? key; - final _i22.RegistrationDeliveryLocalization? appLocalizations; + final _i24.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -358,11 +384,11 @@ class BeneficiaryDetailsRouteArgs { /// generated route for /// [_i3.BeneficiaryRegistrationWrapperPage] class BeneficiaryRegistrationWrapperRoute - extends _i20.PageRouteInfo { + extends _i22.PageRouteInfo { BeneficiaryRegistrationWrapperRoute({ - _i21.Key? key, - required _i23.BeneficiaryRegistrationState initialState, - List<_i20.PageRouteInfo>? children, + _i23.Key? key, + required _i25.BeneficiaryRegistrationState initialState, + List<_i22.PageRouteInfo>? children, }) : super( BeneficiaryRegistrationWrapperRoute.name, args: BeneficiaryRegistrationWrapperRouteArgs( @@ -374,8 +400,8 @@ class BeneficiaryRegistrationWrapperRoute static const String name = 'BeneficiaryRegistrationWrapperRoute'; - static const _i20.PageInfo page = - _i20.PageInfo(name); + static const _i22.PageInfo page = + _i22.PageInfo(name); } class BeneficiaryRegistrationWrapperRouteArgs { @@ -384,9 +410,9 @@ class BeneficiaryRegistrationWrapperRouteArgs { required this.initialState, }); - final _i21.Key? key; + final _i23.Key? key; - final _i23.BeneficiaryRegistrationState initialState; + final _i25.BeneficiaryRegistrationState initialState; @override String toString() { @@ -397,12 +423,12 @@ class BeneficiaryRegistrationWrapperRouteArgs { /// generated route for /// [_i4.BeneficiaryWrapperPage] class BeneficiaryWrapperRoute - extends _i20.PageRouteInfo { + extends _i22.PageRouteInfo { BeneficiaryWrapperRoute({ - _i21.Key? key, - required _i24.HouseholdMemberWrapper wrapper, + _i23.Key? key, + required _i26.HouseholdMemberWrapper wrapper, bool isEditing = false, - List<_i20.PageRouteInfo>? children, + List<_i22.PageRouteInfo>? children, }) : super( BeneficiaryWrapperRoute.name, args: BeneficiaryWrapperRouteArgs( @@ -415,8 +441,8 @@ class BeneficiaryWrapperRoute static const String name = 'BeneficiaryWrapperRoute'; - static const _i20.PageInfo page = - _i20.PageInfo(name); + static const _i22.PageInfo page = + _i22.PageInfo(name); } class BeneficiaryWrapperRouteArgs { @@ -426,9 +452,9 @@ class BeneficiaryWrapperRouteArgs { this.isEditing = false, }); - final _i21.Key? key; + final _i23.Key? key; - final _i24.HouseholdMemberWrapper wrapper; + final _i26.HouseholdMemberWrapper wrapper; final bool isEditing; @@ -441,12 +467,12 @@ class BeneficiaryWrapperRouteArgs { /// generated route for /// [_i5.DeliverInterventionPage] class DeliverInterventionRoute - extends _i20.PageRouteInfo { + extends _i22.PageRouteInfo { DeliverInterventionRoute({ - _i21.Key? key, - _i22.RegistrationDeliveryLocalization? appLocalizations, + _i23.Key? key, + _i24.RegistrationDeliveryLocalization? appLocalizations, bool isEditing = false, - List<_i20.PageRouteInfo>? children, + List<_i22.PageRouteInfo>? children, }) : super( DeliverInterventionRoute.name, args: DeliverInterventionRouteArgs( @@ -459,8 +485,8 @@ class DeliverInterventionRoute static const String name = 'DeliverInterventionRoute'; - static const _i20.PageInfo page = - _i20.PageInfo(name); + static const _i22.PageInfo page = + _i22.PageInfo(name); } class DeliverInterventionRouteArgs { @@ -470,9 +496,9 @@ class DeliverInterventionRouteArgs { this.isEditing = false, }); - final _i21.Key? key; + final _i23.Key? key; - final _i22.RegistrationDeliveryLocalization? appLocalizations; + final _i24.RegistrationDeliveryLocalization? appLocalizations; final bool isEditing; @@ -485,11 +511,11 @@ class DeliverInterventionRouteArgs { /// generated route for /// [_i6.DoseAdministeredPage] class DoseAdministeredRoute - extends _i20.PageRouteInfo { + extends _i22.PageRouteInfo { DoseAdministeredRoute({ - _i21.Key? key, - _i22.RegistrationDeliveryLocalization? appLocalizations, - List<_i20.PageRouteInfo>? children, + _i23.Key? key, + _i24.RegistrationDeliveryLocalization? appLocalizations, + List<_i22.PageRouteInfo>? children, }) : super( DoseAdministeredRoute.name, args: DoseAdministeredRouteArgs( @@ -501,8 +527,8 @@ class DoseAdministeredRoute static const String name = 'DoseAdministeredRoute'; - static const _i20.PageInfo page = - _i20.PageInfo(name); + static const _i22.PageInfo page = + _i22.PageInfo(name); } class DoseAdministeredRouteArgs { @@ -511,9 +537,9 @@ class DoseAdministeredRouteArgs { this.appLocalizations, }); - final _i21.Key? key; + final _i23.Key? key; - final _i22.RegistrationDeliveryLocalization? appLocalizations; + final _i24.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -524,11 +550,11 @@ class DoseAdministeredRouteArgs { /// generated route for /// [_i7.FacilitySelectionPage] class FacilitySelectionRoute - extends _i20.PageRouteInfo { + extends _i22.PageRouteInfo { FacilitySelectionRoute({ - _i21.Key? key, - required List<_i25.FacilityModel> facilities, - List<_i20.PageRouteInfo>? children, + _i23.Key? key, + required List<_i27.FacilityModel> facilities, + List<_i22.PageRouteInfo>? children, }) : super( FacilitySelectionRoute.name, args: FacilitySelectionRouteArgs( @@ -540,8 +566,8 @@ class FacilitySelectionRoute static const String name = 'FacilitySelectionRoute'; - static const _i20.PageInfo page = - _i20.PageInfo(name); + static const _i22.PageInfo page = + _i22.PageInfo(name); } class FacilitySelectionRouteArgs { @@ -550,9 +576,9 @@ class FacilitySelectionRouteArgs { required this.facilities, }); - final _i21.Key? key; + final _i23.Key? key; - final List<_i25.FacilityModel> facilities; + final List<_i27.FacilityModel> facilities; @override String toString() { @@ -561,13 +587,51 @@ class FacilitySelectionRouteArgs { } /// generated route for -/// [_i8.HouseHoldDetailsPage] +/// [_i8.HouseDetailsPage] +class HouseDetailsRoute extends _i22.PageRouteInfo { + HouseDetailsRoute({ + _i23.Key? key, + _i24.RegistrationDeliveryLocalization? appLocalizations, + List<_i22.PageRouteInfo>? children, + }) : super( + HouseDetailsRoute.name, + args: HouseDetailsRouteArgs( + key: key, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'HouseDetailsRoute'; + + static const _i22.PageInfo page = + _i22.PageInfo(name); +} + +class HouseDetailsRouteArgs { + const HouseDetailsRouteArgs({ + this.key, + this.appLocalizations, + }); + + final _i23.Key? key; + + final _i24.RegistrationDeliveryLocalization? appLocalizations; + + @override + String toString() { + return 'HouseDetailsRouteArgs{key: $key, appLocalizations: $appLocalizations}'; + } +} + +/// generated route for +/// [_i9.HouseHoldDetailsPage] class HouseHoldDetailsRoute - extends _i20.PageRouteInfo { + extends _i22.PageRouteInfo { HouseHoldDetailsRoute({ - _i21.Key? key, - _i22.RegistrationDeliveryLocalization? appLocalizations, - List<_i20.PageRouteInfo>? children, + _i23.Key? key, + _i24.RegistrationDeliveryLocalization? appLocalizations, + List<_i22.PageRouteInfo>? children, }) : super( HouseHoldDetailsRoute.name, args: HouseHoldDetailsRouteArgs( @@ -579,8 +643,8 @@ class HouseHoldDetailsRoute static const String name = 'HouseHoldDetailsRoute'; - static const _i20.PageInfo page = - _i20.PageInfo(name); + static const _i22.PageInfo page = + _i22.PageInfo(name); } class HouseHoldDetailsRouteArgs { @@ -589,9 +653,9 @@ class HouseHoldDetailsRouteArgs { this.appLocalizations, }); - final _i21.Key? key; + final _i23.Key? key; - final _i22.RegistrationDeliveryLocalization? appLocalizations; + final _i24.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -600,14 +664,14 @@ class HouseHoldDetailsRouteArgs { } /// generated route for -/// [_i9.HouseholdAcknowledgementPage] +/// [_i10.HouseholdAcknowledgementPage] class HouseholdAcknowledgementRoute - extends _i20.PageRouteInfo { + extends _i22.PageRouteInfo { HouseholdAcknowledgementRoute({ - _i21.Key? key, - _i22.RegistrationDeliveryLocalization? appLocalizations, + _i23.Key? key, + _i24.RegistrationDeliveryLocalization? appLocalizations, bool? enableViewHousehold, - List<_i20.PageRouteInfo>? children, + List<_i22.PageRouteInfo>? children, }) : super( HouseholdAcknowledgementRoute.name, args: HouseholdAcknowledgementRouteArgs( @@ -620,8 +684,8 @@ class HouseholdAcknowledgementRoute static const String name = 'HouseholdAcknowledgementRoute'; - static const _i20.PageInfo page = - _i20.PageInfo(name); + static const _i22.PageInfo page = + _i22.PageInfo(name); } class HouseholdAcknowledgementRouteArgs { @@ -631,9 +695,9 @@ class HouseholdAcknowledgementRouteArgs { this.enableViewHousehold, }); - final _i21.Key? key; + final _i23.Key? key; - final _i22.RegistrationDeliveryLocalization? appLocalizations; + final _i24.RegistrationDeliveryLocalization? appLocalizations; final bool? enableViewHousehold; @@ -644,13 +708,13 @@ class HouseholdAcknowledgementRouteArgs { } /// generated route for -/// [_i10.HouseholdLocationPage] +/// [_i11.HouseholdLocationPage] class HouseholdLocationRoute - extends _i20.PageRouteInfo { + extends _i22.PageRouteInfo { HouseholdLocationRoute({ - _i21.Key? key, - _i22.RegistrationDeliveryLocalization? appLocalizations, - List<_i20.PageRouteInfo>? children, + _i23.Key? key, + _i24.RegistrationDeliveryLocalization? appLocalizations, + List<_i22.PageRouteInfo>? children, }) : super( HouseholdLocationRoute.name, args: HouseholdLocationRouteArgs( @@ -662,8 +726,8 @@ class HouseholdLocationRoute static const String name = 'HouseholdLocationRoute'; - static const _i20.PageInfo page = - _i20.PageInfo(name); + static const _i22.PageInfo page = + _i22.PageInfo(name); } class HouseholdLocationRouteArgs { @@ -672,9 +736,9 @@ class HouseholdLocationRouteArgs { this.appLocalizations, }); - final _i21.Key? key; + final _i23.Key? key; - final _i22.RegistrationDeliveryLocalization? appLocalizations; + final _i24.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -683,13 +747,13 @@ class HouseholdLocationRouteArgs { } /// generated route for -/// [_i11.HouseholdOverviewPage] +/// [_i12.HouseholdOverviewPage] class HouseholdOverviewRoute - extends _i20.PageRouteInfo { + extends _i22.PageRouteInfo { HouseholdOverviewRoute({ - _i21.Key? key, - _i22.RegistrationDeliveryLocalization? appLocalizations, - List<_i20.PageRouteInfo>? children, + _i23.Key? key, + _i24.RegistrationDeliveryLocalization? appLocalizations, + List<_i22.PageRouteInfo>? children, }) : super( HouseholdOverviewRoute.name, args: HouseholdOverviewRouteArgs( @@ -701,8 +765,8 @@ class HouseholdOverviewRoute static const String name = 'HouseholdOverviewRoute'; - static const _i20.PageInfo page = - _i20.PageInfo(name); + static const _i22.PageInfo page = + _i22.PageInfo(name); } class HouseholdOverviewRouteArgs { @@ -711,9 +775,9 @@ class HouseholdOverviewRouteArgs { this.appLocalizations, }); - final _i21.Key? key; + final _i23.Key? key; - final _i22.RegistrationDeliveryLocalization? appLocalizations; + final _i24.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -722,14 +786,14 @@ class HouseholdOverviewRouteArgs { } /// generated route for -/// [_i12.IndividualDetailsPage] +/// [_i13.IndividualDetailsPage] class IndividualDetailsRoute - extends _i20.PageRouteInfo { + extends _i22.PageRouteInfo { IndividualDetailsRoute({ - _i21.Key? key, - _i22.RegistrationDeliveryLocalization? appLocalizations, + _i23.Key? key, + _i24.RegistrationDeliveryLocalization? appLocalizations, bool isHeadOfHousehold = false, - List<_i20.PageRouteInfo>? children, + List<_i22.PageRouteInfo>? children, }) : super( IndividualDetailsRoute.name, args: IndividualDetailsRouteArgs( @@ -742,8 +806,8 @@ class IndividualDetailsRoute static const String name = 'IndividualDetailsRoute'; - static const _i20.PageInfo page = - _i20.PageInfo(name); + static const _i22.PageInfo page = + _i22.PageInfo(name); } class IndividualDetailsRouteArgs { @@ -753,9 +817,9 @@ class IndividualDetailsRouteArgs { this.isHeadOfHousehold = false, }); - final _i21.Key? key; + final _i23.Key? key; - final _i22.RegistrationDeliveryLocalization? appLocalizations; + final _i24.RegistrationDeliveryLocalization? appLocalizations; final bool isHeadOfHousehold; @@ -766,14 +830,14 @@ class IndividualDetailsRouteArgs { } /// generated route for -/// [_i13.ReasonForDeletionPage] +/// [_i14.ReasonForDeletionPage] class ReasonForDeletionRoute - extends _i20.PageRouteInfo { + extends _i22.PageRouteInfo { ReasonForDeletionRoute({ - _i21.Key? key, - _i22.RegistrationDeliveryLocalization? appLocalizations, + _i23.Key? key, + _i24.RegistrationDeliveryLocalization? appLocalizations, bool isHousholdDelete = false, - List<_i20.PageRouteInfo>? children, + List<_i22.PageRouteInfo>? children, }) : super( ReasonForDeletionRoute.name, args: ReasonForDeletionRouteArgs( @@ -786,8 +850,8 @@ class ReasonForDeletionRoute static const String name = 'ReasonForDeletionRoute'; - static const _i20.PageInfo page = - _i20.PageInfo(name); + static const _i22.PageInfo page = + _i22.PageInfo(name); } class ReasonForDeletionRouteArgs { @@ -797,9 +861,9 @@ class ReasonForDeletionRouteArgs { this.isHousholdDelete = false, }); - final _i21.Key? key; + final _i23.Key? key; - final _i22.RegistrationDeliveryLocalization? appLocalizations; + final _i24.RegistrationDeliveryLocalization? appLocalizations; final bool isHousholdDelete; @@ -810,14 +874,14 @@ class ReasonForDeletionRouteArgs { } /// generated route for -/// [_i14.RecordPastDeliveryDetailsPage] +/// [_i15.RecordPastDeliveryDetailsPage] class RecordPastDeliveryDetailsRoute - extends _i20.PageRouteInfo { + extends _i22.PageRouteInfo { RecordPastDeliveryDetailsRoute({ - _i21.Key? key, - _i22.RegistrationDeliveryLocalization? appLocalizations, - List<_i26.TaskModel>? tasks, - List<_i20.PageRouteInfo>? children, + _i23.Key? key, + _i24.RegistrationDeliveryLocalization? appLocalizations, + List<_i28.TaskModel>? tasks, + List<_i22.PageRouteInfo>? children, }) : super( RecordPastDeliveryDetailsRoute.name, args: RecordPastDeliveryDetailsRouteArgs( @@ -830,8 +894,8 @@ class RecordPastDeliveryDetailsRoute static const String name = 'RecordPastDeliveryDetailsRoute'; - static const _i20.PageInfo page = - _i20.PageInfo(name); + static const _i22.PageInfo page = + _i22.PageInfo(name); } class RecordPastDeliveryDetailsRouteArgs { @@ -841,11 +905,11 @@ class RecordPastDeliveryDetailsRouteArgs { this.tasks, }); - final _i21.Key? key; + final _i23.Key? key; - final _i22.RegistrationDeliveryLocalization? appLocalizations; + final _i24.RegistrationDeliveryLocalization? appLocalizations; - final List<_i26.TaskModel>? tasks; + final List<_i28.TaskModel>? tasks; @override String toString() { @@ -854,15 +918,15 @@ class RecordPastDeliveryDetailsRouteArgs { } /// generated route for -/// [_i15.ReferBeneficiaryPage] +/// [_i16.ReferBeneficiaryPage] class ReferBeneficiaryRoute - extends _i20.PageRouteInfo { + extends _i22.PageRouteInfo { ReferBeneficiaryRoute({ - _i21.Key? key, - _i22.RegistrationDeliveryLocalization? appLocalizations, + _i23.Key? key, + _i24.RegistrationDeliveryLocalization? appLocalizations, bool isEditing = false, required String projectBeneficiaryClientRefId, - List<_i20.PageRouteInfo>? children, + List<_i22.PageRouteInfo>? children, }) : super( ReferBeneficiaryRoute.name, args: ReferBeneficiaryRouteArgs( @@ -876,8 +940,8 @@ class ReferBeneficiaryRoute static const String name = 'ReferBeneficiaryRoute'; - static const _i20.PageInfo page = - _i20.PageInfo(name); + static const _i22.PageInfo page = + _i22.PageInfo(name); } class ReferBeneficiaryRouteArgs { @@ -888,9 +952,9 @@ class ReferBeneficiaryRouteArgs { required this.projectBeneficiaryClientRefId, }); - final _i21.Key? key; + final _i23.Key? key; - final _i22.RegistrationDeliveryLocalization? appLocalizations; + final _i24.RegistrationDeliveryLocalization? appLocalizations; final bool isEditing; @@ -903,9 +967,9 @@ class ReferBeneficiaryRouteArgs { } /// generated route for -/// [_i16.RegistrationDeliveryWrapperPage] -class RegistrationDeliveryWrapperRoute extends _i20.PageRouteInfo { - const RegistrationDeliveryWrapperRoute({List<_i20.PageRouteInfo>? children}) +/// [_i17.RegistrationDeliveryWrapperPage] +class RegistrationDeliveryWrapperRoute extends _i22.PageRouteInfo { + const RegistrationDeliveryWrapperRoute({List<_i22.PageRouteInfo>? children}) : super( RegistrationDeliveryWrapperRoute.name, initialChildren: children, @@ -913,17 +977,17 @@ class RegistrationDeliveryWrapperRoute extends _i20.PageRouteInfo { static const String name = 'RegistrationDeliveryWrapperRoute'; - static const _i20.PageInfo page = _i20.PageInfo(name); + static const _i22.PageInfo page = _i22.PageInfo(name); } /// generated route for -/// [_i17.SearchBeneficiaryPage] +/// [_i18.SearchBeneficiaryPage] class SearchBeneficiaryRoute - extends _i20.PageRouteInfo { + extends _i22.PageRouteInfo { SearchBeneficiaryRoute({ - _i21.Key? key, - _i22.RegistrationDeliveryLocalization? appLocalizations, - List<_i20.PageRouteInfo>? children, + _i23.Key? key, + _i24.RegistrationDeliveryLocalization? appLocalizations, + List<_i22.PageRouteInfo>? children, }) : super( SearchBeneficiaryRoute.name, args: SearchBeneficiaryRouteArgs( @@ -935,8 +999,8 @@ class SearchBeneficiaryRoute static const String name = 'SearchBeneficiaryRoute'; - static const _i20.PageInfo page = - _i20.PageInfo(name); + static const _i22.PageInfo page = + _i22.PageInfo(name); } class SearchBeneficiaryRouteArgs { @@ -945,9 +1009,9 @@ class SearchBeneficiaryRouteArgs { this.appLocalizations, }); - final _i21.Key? key; + final _i23.Key? key; - final _i22.RegistrationDeliveryLocalization? appLocalizations; + final _i24.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -956,14 +1020,14 @@ class SearchBeneficiaryRouteArgs { } /// generated route for -/// [_i18.SideEffectsPage] -class SideEffectsRoute extends _i20.PageRouteInfo { +/// [_i19.SideEffectsPage] +class SideEffectsRoute extends _i22.PageRouteInfo { SideEffectsRoute({ - _i21.Key? key, - _i22.RegistrationDeliveryLocalization? appLocalizations, - required List<_i26.TaskModel> tasks, + _i23.Key? key, + _i24.RegistrationDeliveryLocalization? appLocalizations, + required List<_i28.TaskModel> tasks, bool isEditing = false, - List<_i20.PageRouteInfo>? children, + List<_i22.PageRouteInfo>? children, }) : super( SideEffectsRoute.name, args: SideEffectsRouteArgs( @@ -977,8 +1041,8 @@ class SideEffectsRoute extends _i20.PageRouteInfo { static const String name = 'SideEffectsRoute'; - static const _i20.PageInfo page = - _i20.PageInfo(name); + static const _i22.PageInfo page = + _i22.PageInfo(name); } class SideEffectsRouteArgs { @@ -989,11 +1053,11 @@ class SideEffectsRouteArgs { this.isEditing = false, }); - final _i21.Key? key; + final _i23.Key? key; - final _i22.RegistrationDeliveryLocalization? appLocalizations; + final _i24.RegistrationDeliveryLocalization? appLocalizations; - final List<_i26.TaskModel> tasks; + final List<_i28.TaskModel> tasks; final bool isEditing; @@ -1004,14 +1068,14 @@ class SideEffectsRouteArgs { } /// generated route for -/// [_i19.SplashAcknowledgementPage] +/// [_i20.SplashAcknowledgementPage] class SplashAcknowledgementRoute - extends _i20.PageRouteInfo { + extends _i22.PageRouteInfo { SplashAcknowledgementRoute({ - _i21.Key? key, - _i22.RegistrationDeliveryLocalization? appLocalizations, + _i23.Key? key, + _i24.RegistrationDeliveryLocalization? appLocalizations, bool? enableBackToSearch, - List<_i20.PageRouteInfo>? children, + List<_i22.PageRouteInfo>? children, }) : super( SplashAcknowledgementRoute.name, args: SplashAcknowledgementRouteArgs( @@ -1024,8 +1088,8 @@ class SplashAcknowledgementRoute static const String name = 'SplashAcknowledgementRoute'; - static const _i20.PageInfo page = - _i20.PageInfo(name); + static const _i22.PageInfo page = + _i22.PageInfo(name); } class SplashAcknowledgementRouteArgs { @@ -1035,9 +1099,9 @@ class SplashAcknowledgementRouteArgs { this.enableBackToSearch, }); - final _i21.Key? key; + final _i23.Key? key; - final _i22.RegistrationDeliveryLocalization? appLocalizations; + final _i24.RegistrationDeliveryLocalization? appLocalizations; final bool? enableBackToSearch; @@ -1046,3 +1110,46 @@ class SplashAcknowledgementRouteArgs { return 'SplashAcknowledgementRouteArgs{key: $key, appLocalizations: $appLocalizations, enableBackToSearch: $enableBackToSearch}'; } } + +/// generated route for +/// [_i21.SummaryPage] +class SummaryRoute extends _i22.PageRouteInfo { + SummaryRoute({ + _i23.Key? key, + _i24.RegistrationDeliveryLocalization? appLocalizations, + required List<_i29.LabelValueList> summaryList, + List<_i22.PageRouteInfo>? children, + }) : super( + SummaryRoute.name, + args: SummaryRouteArgs( + key: key, + appLocalizations: appLocalizations, + summaryList: summaryList, + ), + initialChildren: children, + ); + + static const String name = 'SummaryRoute'; + + static const _i22.PageInfo page = + _i22.PageInfo(name); +} + +class SummaryRouteArgs { + const SummaryRouteArgs({ + this.key, + this.appLocalizations, + required this.summaryList, + }); + + final _i23.Key? key; + + final _i24.RegistrationDeliveryLocalization? appLocalizations; + + final List<_i29.LabelValueList> summaryList; + + @override + String toString() { + return 'SummaryRouteArgs{key: $key, appLocalizations: $appLocalizations, summaryList: $summaryList}'; + } +} diff --git a/packages/registration_delivery/lib/utils/i18_key_constants.dart b/packages/registration_delivery/lib/utils/i18_key_constants.dart index c48626f28..8ca7b1601 100644 --- a/packages/registration_delivery/lib/utils/i18_key_constants.dart +++ b/packages/registration_delivery/lib/utils/i18_key_constants.dart @@ -283,7 +283,8 @@ class HouseholdLocation { String get householdLocationLabelText => 'HOUSEHOLD_LOCATION_LABEL_TEXT'; - String get householdLocationDescriptionText => 'HOUSEHOLD_LOCATION_DESCRIPTION_TEXT'; + String get householdLocationDescriptionText => + 'HOUSEHOLD_LOCATION_DESCRIPTION_TEXT'; String get administrationAreaFormLabel => 'ADMINISTRATION_AREA_FORM_LABEL'; @@ -335,6 +336,9 @@ class HouseholdDetails { String get noOfChildrenBelow5YearsLabel => 'NO_OF_CHILDREN_BELOW_5_YR_LABEL'; String get viewHouseHoldDetailsAction => 'VIEW_HOUSEHOLD_DETAILS_ACTION_LABEL'; + String get noOfRoomsLabel => 'NO_OF_ROOMS_LABEL'; + String get houseDetailsLabel => 'HOUSE_DETAILS_LABEL'; + String get selectStructureTypeError => 'PLEASE_SELECT_STRUCTURE_TYPE'; } class HouseholdOverView { @@ -682,6 +686,11 @@ class HouseholdDetailsShowcase { String get numberOfChildrenBelow5InHousehold => 'HOUSEHOLD_DETAILS_SHOWCASE_NO_OF_CHILD_BELOW_5_IN_HOUSEHOLD'; + + String get numberOfRoomsInHousehold => + 'HOUSE_DETAILS_SHOWCASE_NO_OF_ROOMS_IN_HOUSEHOLD'; + + String get typeOfStructure => 'HOUSE_DETAILS_SHOWCASE_TYPE_OF_STRUCTURE'; } class IndividualDetailsShowcase { diff --git a/packages/registration_delivery/lib/utils/utils.dart b/packages/registration_delivery/lib/utils/utils.dart index d443382e6..05b3d7471 100644 --- a/packages/registration_delivery/lib/utils/utils.dart +++ b/packages/registration_delivery/lib/utils/utils.dart @@ -307,6 +307,7 @@ class RegistrationDeliverySingleton { List? _deliveryCommentOptions; List? _symptomsTypes; List? _referralReasons; + List? _houseStructureTypes; void setBoundary({required BoundaryModel boundary}) { _boundaryModel = boundary; @@ -317,20 +318,22 @@ class RegistrationDeliverySingleton { _persistenceConfiguration = persistenceConfiguration; } - void setInitialData( - {required String loggedInUserUuid, - required double maxRadius, - required String projectId, - required BeneficiaryType selectedBeneficiaryType, - required ProjectTypeModel? projectType, - required ProjectModel selectedProject, - required List? genderOptions, - required List? idTypeOptions, - required List? householdDeletionReasonOptions, - required List? householdMemberDeletionReasonOptions, - required List? deliveryCommentOptions, - required List? symptomsTypes, - required List? referralReasons}) { + void setInitialData({ + required String loggedInUserUuid, + required double maxRadius, + required String projectId, + required BeneficiaryType selectedBeneficiaryType, + required ProjectTypeModel? projectType, + required ProjectModel selectedProject, + required List? genderOptions, + required List? idTypeOptions, + required List? householdDeletionReasonOptions, + required List? householdMemberDeletionReasonOptions, + required List? deliveryCommentOptions, + required List? symptomsTypes, + required List? referralReasons, + required List? houseStructureTypes, + }) { _loggedInUserUuid = loggedInUserUuid; _maxRadius = maxRadius; _projectId = projectId; @@ -345,6 +348,7 @@ class RegistrationDeliverySingleton { _deliveryCommentOptions = deliveryCommentOptions; _symptomsTypes = symptomsTypes; _referralReasons = referralReasons; + _houseStructureTypes = houseStructureTypes; } void setTenantId(String tenantId) { @@ -370,6 +374,7 @@ class RegistrationDeliverySingleton { List? get deliveryCommentOptions => _deliveryCommentOptions; List? get symptomsTypes => _symptomsTypes; List? get referralReasons => _referralReasons; + List? get houseStructureTypes => _houseStructureTypes; } bool allDosesDelivered( diff --git a/packages/registration_delivery/lib/widgets/showcase/config/house_details.dart b/packages/registration_delivery/lib/widgets/showcase/config/house_details.dart new file mode 100644 index 000000000..b94af375b --- /dev/null +++ b/packages/registration_delivery/lib/widgets/showcase/config/house_details.dart @@ -0,0 +1,23 @@ +part of 'showcase_constants.dart'; + +class _HouseholdShowcaseData { + static final _HouseholdShowcaseData _instance = _HouseholdShowcaseData._(); + + _HouseholdShowcaseData._(); + + factory _HouseholdShowcaseData() => _instance; + + List get showcaseData => [ + typeOfStructure, + noOfRooms, + ]; + + final typeOfStructure = ShowcaseItemBuilder( + messageLocalizationKey: i18.householdDetailsShowcase.typeOfStructure, + ); + + final noOfRooms = ShowcaseItemBuilder( + messageLocalizationKey: + i18.householdDetailsShowcase.numberOfRoomsInHousehold, + ); +} diff --git a/packages/registration_delivery/lib/widgets/showcase/config/showcase_constants.dart b/packages/registration_delivery/lib/widgets/showcase/config/showcase_constants.dart index 1540b0b61..3be660bae 100644 --- a/packages/registration_delivery/lib/widgets/showcase/config/showcase_constants.dart +++ b/packages/registration_delivery/lib/widgets/showcase/config/showcase_constants.dart @@ -2,6 +2,7 @@ import '../../../utils/i18_key_constants.dart' as i18; import '../showcase_wrappers.dart'; part 'deliver_intervention.dart'; +part 'house_details.dart'; part 'household_details.dart'; part 'household_location.dart'; part 'household_overview.dart'; @@ -14,3 +15,4 @@ final householdDetailsShowcaseData = _HouseholdDetailsShowcaseData(); final individualDetailsShowcaseData = _IndividualDetailsShowcaseData(); final householdOverviewShowcaseData = _HouseholdOverviewShowcaseData(); final deliverInterventionShowcaseData = _DeliverInterventionShowcaseData(); +final houseShowcaseData = _HouseholdShowcaseData(); diff --git a/tools/registration_delivery_imports.dart b/tools/registration_delivery_imports.dart index 01b55034a..2aeeada9e 100644 --- a/tools/registration_delivery_imports.dart +++ b/tools/registration_delivery_imports.dart @@ -806,6 +806,9 @@ void _addRegistrationRoutesAndImportToRouterFile(String routerFilePath) { AutoRoute( page: HouseHoldDetailsRoute.page, path: 'household-details'), + AutoRoute( + page: HouseDetailsRoute.page, + path: 'house-details'), AutoRoute( page: HouseholdLocationRoute.page, path: 'household-location', From b6f96c2f126b4c0bbc89507396f0b640d88d616b Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Thu, 11 Jul 2024 12:31:05 +0530 Subject: [PATCH 048/241] integrated checklist inside the beneficiary flow and updated gender field to selection card (#450) Co-authored-by: rachana-egov --- .../lib/router/app_router.dart | 4 + .../lib/widgets/atoms/selection_card.dart | 2 +- .../lib/widgets/labeled_field.dart | 4 + .../beneficiary/beneficiary_checklist.dart | 355 ++++++++++++++++++ .../beneficiary/beneficiary_wrapper.dart | 9 + .../pages/beneficiary/household_overview.dart | 4 +- .../individual_details.dart | 52 ++- .../router/registration_delivery_router.dart | 5 + .../registration_delivery_router.gm.dart | 228 +++++------ .../lib/utils/i18_key_constants.dart | 41 ++ 10 files changed, 570 insertions(+), 134 deletions(-) create mode 100644 packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart diff --git a/apps/health_campaign_field_worker_app/lib/router/app_router.dart b/apps/health_campaign_field_worker_app/lib/router/app_router.dart index 7f309e3ef..ba35c524e 100644 --- a/apps/health_campaign_field_worker_app/lib/router/app_router.dart +++ b/apps/health_campaign_field_worker_app/lib/router/app_router.dart @@ -129,6 +129,10 @@ class AppRouter extends _$AppRouter { path: 'overview', initial: true, ), + AutoRoute( + page: BeneficiaryChecklistRoute.page, + path: 'beneficiary-checklist', + ), AutoRoute( page: BeneficiaryDetailsRoute.page, path: 'beneficiary-details', diff --git a/packages/digit_components/lib/widgets/atoms/selection_card.dart b/packages/digit_components/lib/widgets/atoms/selection_card.dart index c42811473..3164f65dc 100644 --- a/packages/digit_components/lib/widgets/atoms/selection_card.dart +++ b/packages/digit_components/lib/widgets/atoms/selection_card.dart @@ -150,7 +150,7 @@ class _SelectionBoxState extends State> { fit: FlexFit.tight, child: Text( widget.errorMessage!, - style: textTheme.bodySmall?.copyWith( + style: textTheme.bodyLarge?.copyWith( color: const DigitColors().lavaRed, ), ), diff --git a/packages/digit_components/lib/widgets/labeled_field.dart b/packages/digit_components/lib/widgets/labeled_field.dart index 96bb70c5f..647cbe021 100644 --- a/packages/digit_components/lib/widgets/labeled_field.dart +++ b/packages/digit_components/lib/widgets/labeled_field.dart @@ -11,6 +11,7 @@ class LabeledField extends StatelessWidget { final bool preferToolTipBelow; final TooltipTriggerMode tooltipTriggerMode; final TextStyle? textStyle; + final bool isRequired; const LabeledField({ super.key, @@ -23,6 +24,7 @@ class LabeledField extends StatelessWidget { this.preferToolTipBelow = false, this.tooltipTriggerMode = TooltipTriggerMode.tap, this.textStyle, + this.isRequired = false, }); @override @@ -41,6 +43,8 @@ class LabeledField extends StatelessWidget { DigitTheme.instance.mobileTheme.textTheme.labelSmall, ), ), + if(isRequired) Text(' *', style: labelStyle ?? + DigitTheme.instance.mobileTheme.textTheme.labelSmall,), icon != null ? Tooltip( message: tooltipMessage ?? '', diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart new file mode 100644 index 000000000..b438b4341 --- /dev/null +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart @@ -0,0 +1,355 @@ +import 'dart:math'; + +import 'package:auto_route/auto_route.dart'; +import 'package:digit_components/digit_components.dart'; +import 'package:digit_components/utils/date_utils.dart'; +import 'package:digit_components/widgets/atoms/selection_card.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import '../../router/registration_delivery_router.gm.dart'; +import '../../utils/i18_key_constants.dart' as i18; +import '../../utils/utils.dart'; +import '../../widgets/back_navigation_help_header.dart'; +import '../../widgets/localized.dart'; + +@RoutePage() +class BeneficiaryChecklistPage extends LocalizedStatefulWidget { + final String? referralClientRefId; + const BeneficiaryChecklistPage({ + super.key, + this.referralClientRefId, + super.appLocalizations, + }); + + @override + State createState() => + _BeneficiaryChecklistPageState(); +} + +class _BeneficiaryChecklistPageState + extends LocalizedState { + String isStateChanged = ''; + var submitTriggered = false; + List controller = []; + List additionalController = []; + List? initialAttributes; + ServiceDefinitionModel? selectedServiceDefinition; + bool isControllersInitialized = false; + List visibleChecklistIndexes = []; + GlobalKey checklistFormKey = GlobalKey(); + + @override + void initState() { + super.initState(); + } + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + + + + return PopScope( + canPop: false, + child: Scaffold( + body: BlocBuilder( + builder: (context, state) { + state.mapOrNull( + serviceDefinitionFetch: (value) { + selectedServiceDefinition = value.serviceDefinitionList.where((element) => element.code.toString().contains('IRS.TRAINING_SUPERVISION.DISTRIBUTOR')).toList().first; + initialAttributes = selectedServiceDefinition?.attributes; + if (!isControllersInitialized) { + initialAttributes?.forEach((e) { + controller.add(TextEditingController()); + }); + + // Set the flag to true after initializing controllers + isControllersInitialized = true; + } + }, + ); + + return state.maybeMap( + orElse: () => Text(state.runtimeType.toString()), + serviceDefinitionFetch: (value) { + return ScrollableContent( + header: Column(children: [ + BackNavigationHelpHeaderWidget( + showHelp: false, + handleBack: () { + //TODO: direct go back is not working, need to check + Navigator.pop(context); + }, + ), + ]), + enableFixedButton: true, + footer: DigitCard( + margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), + padding: + const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), + child: DigitElevatedButton( + onPressed: () async { + // TODO: Submit checklist + await context.router + .push(DeliverInterventionRoute()); + }, + child: Text( + localizations.translate(i18.common.coreCommonSubmit), + ), + ), + ), + children: [ + Form( + key: checklistFormKey, //assigning key to form + child: DigitCard( + child: Column(children: [ + Padding( + padding: const EdgeInsets.only(bottom: 8), + child: Text( + '${localizations.translate( + selectedServiceDefinition!.code + .toString(), + )} ${localizations.translate(i18.checklist.checklist)}', + style: theme.textTheme.displayMedium, + textAlign: TextAlign.left, + ), + ), + ...initialAttributes!.map(( + e, + ) { + int index = (initialAttributes ?? []).indexOf(e); + + return Column(children: [ + if (e.dataType == 'String' && + !(e.code ?? '').contains('.')) ...[ + DigitTextField( + onChange: (value) { + checklistFormKey.currentState?.validate(); + }, + isRequired: false, + controller: controller[index], + inputFormatter: [ + FilteringTextInputFormatter.allow(RegExp( + "[a-zA-Z0-9]", + )), + ], + validator: (value) { + if (((value == null || value == '') && + e.required == true)) { + return localizations + .translate("${e.code}_REQUIRED"); + } + if (e.regex != null) { + return (RegExp(e.regex!).hasMatch(value!)) + ? null + : localizations + .translate("${e.code}_REGEX"); + } + + return null; + }, + label: localizations.translate( + '${selectedServiceDefinition?.code}.${e.code}', + ), + ), + ] else if (e.dataType == 'Number' && + !(e.code ?? '').contains('.')) ...[ + DigitTextField( + onChange: (value) { + checklistFormKey.currentState?.validate(); + }, + textStyle: theme.textTheme.headlineMedium, + textInputType: TextInputType.number, + inputFormatter: [ + FilteringTextInputFormatter.allow(RegExp( + "[0-9]", + )), + ], + validator: (value) { + if (((value == null || value == '') && + e.required == true)) { + return localizations.translate( + i18.common.corecommonRequired, + ); + } + if (e.regex != null) { + return (RegExp(e.regex!).hasMatch(value!)) + ? null + : localizations + .translate("${e.code}_REGEX"); + } + + return null; + }, + controller: controller[index], + label: '${localizations.translate( + '${value.selectedServiceDefinition?.code}.${e.code}', + ).trim()} ${e.required == true ? '*' : ''}', + ), + ] else if (e.dataType == 'MultiValueList' && + !(e.code ?? '').contains('.')) ...[ + Align( + alignment: Alignment.topLeft, + child: Padding( + padding: const EdgeInsets.all(8), + child: Column( + children: [ + Text( + '${localizations.translate( + '${selectedServiceDefinition?.code}.${e.code}', + )} ${e.required == true ? '*' : ''}', + style: theme.textTheme.headlineSmall, + ), + ], + ), + ), + ), + BlocBuilder( + builder: (context, state) { + return Column( + children: e.values! + .map((e) => DigitCheckboxTile( + label: e, + value: controller[index] + .text + .split('.') + .contains(e), + onChanged: (value) { + context + .read() + .add( + ServiceChecklistEvent( + value: e.toString(), + submitTriggered: + submitTriggered, + ), + ); + final String ele; + var val = controller[index] + .text + .split('.'); + if (val.contains(e)) { + val.remove(e); + ele = val.join("."); + } else { + ele = + "${controller[index].text}.$e"; + } + controller[index].value = + TextEditingController + .fromValue( + TextEditingValue( + text: ele, + ), + ).value; + }, + )) + .toList(), + ); + }, + ), + ]else if (e.dataType == 'Boolean') ...[ + if (!(e.code ?? '').contains('.')) + DigitCard( + child: Column( + children: [ + Align( + alignment: Alignment.topLeft, + child: Padding( + padding: const EdgeInsets.all(8), + child: Column( + children: [ + Text( + '${localizations.translate( + '${selectedServiceDefinition?.code}.${e.code}', + )} ${e.required == true ? '*' : ''}', + style: theme.textTheme.headlineSmall, + ), + ], + ), + ), + ), + BlocBuilder( + builder: (context, state) { + return SelectionBox( + //label: e, + allowMultipleSelection: false, + width: 110, + valueMapper: (value) { + return value ? localizations.translate( + i18.common.coreCommonYes, + ) : localizations.translate( + i18.common.coreCommonNo, + ); + }, + initialSelection: controller[index].text=='true' ? [true] : controller[index].text=='false' ?[false] : [], + options: const [true, false], + onSelectionChanged: (curValue) { + if(curValue.isNotEmpty){ + context + .read() + .add( + ServiceChecklistEvent( + value: curValue.toString(), + submitTriggered: + submitTriggered, + ), + ); + controller[index].value = TextEditingValue( + text: curValue.first.toString(), + ); + } + + }, + ); + }, + ), + ], + ), + ), + ], + ]); + }), + const SizedBox( + height: 15, + ), + ]), + ), + ), + ], + ); + }, + ); + }, + ), + ), + ); + } + + List getNextQuestions( + String parentCode, + List checklistItems, + ) { + final childCodePrefix = '$parentCode.'; + final nextCheckLists = checklistItems.where((item) { + return item.code!.startsWith(childCodePrefix) && + item.code?.split('.').length == parentCode.split('.').length + 2; + }).toList(); + + return nextCheckLists; + } + + int countDots(String inputString) { + int dotCount = 0; + for (int i = 0; i < inputString.length; i++) { + if (inputString[i] == '.') { + dotCount++; + } + } + + return dotCount; + } +} \ No newline at end of file diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart index 5e8e49c48..8c868a548 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart @@ -56,6 +56,9 @@ class BeneficiaryWrapperPage extends StatelessWidget { final referral = context.repository(context); + final serviceDefinationRepo = + context.repository(context); + return MultiBlocProvider( providers: [ BlocProvider( @@ -64,6 +67,12 @@ class BeneficiaryWrapperPage extends StatelessWidget { serviceDataRepository: service, ), ), + BlocProvider( + create: (_) => ServiceDefinitionBloc( + const ServiceDefinitionEmptyState(), + serviceDefinitionDataRepository: serviceDefinition, + )..add(const ServiceDefinitionFetchEvent()), + ), BlocProvider( create: (_) => FacilityBloc( facilityDataRepository: facilityRepository, diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index e707a2690..735370101 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -98,7 +98,7 @@ class _HouseholdOverviewPageState ), onPressed: () async { await context.router - .push(DeliverInterventionRoute()); + .push(BeneficiaryChecklistRoute()); }, ) : DigitElevatedButton( @@ -119,7 +119,7 @@ class _HouseholdOverviewPageState ); await context.router - .push(DeliverInterventionRoute()); + .push(BeneficiaryChecklistRoute()); }, child: Center( child: Text( diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index 19dfa02a9..1ed1f1882 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -4,6 +4,7 @@ import 'package:digit_components/digit_components.dart'; import 'package:digit_components/utils/date_utils.dart'; import 'package:digit_components/widgets/atoms/digit_checkbox.dart'; import 'package:digit_components/widgets/atoms/digit_toaster.dart'; +import 'package:digit_components/widgets/atoms/selection_card.dart'; import 'package:digit_components/widgets/digit_dob_picker.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_scanner/blocs/scanner.dart'; @@ -118,13 +119,16 @@ class _IndividualDetailsPageState form.control(_idTypeKey).setErrors({'': true}); } if (form.control(_genderKey).value == null) { - form.control(_genderKey).setErrors({'': true}); + setState(() { + form.control(_genderKey).setErrors({'': true}); + }); } final userId = RegistrationDeliverySingleton() .loggedInUserUuid; final projectId = RegistrationDeliverySingleton().projectId; form.markAllAsTouched(); + if (!form.valid) return; FocusManager.instance.primaryFocus?.unfocus(); @@ -526,27 +530,39 @@ class _IndividualDetailsPageState .translate(i18.common.coreCommonOk), ), ), - DigitReactiveSearchDropdown( + LabeledField( + isRequired: true, label: localizations.translate( i18.individualDetails.genderLabelText, ), - form: form, - menuItems: RegistrationDeliverySingleton() - .genderOptions! - .map( - (e) => e, - ) - .toList(), - formControlName: _genderKey, - valueMapper: (value) { - return localizations.translate(value); - }, - isRequired: true, - validationMessage: localizations.translate( - i18.common.corecommonRequired, + child: SelectionBox( + allowMultipleSelection: false, + width: 120, + options: RegistrationDeliverySingleton() + .genderOptions! + .map( + (e) => e, + ) + .toList(), + onSelectionChanged: (value){ + setState(() { + if(value.isNotEmpty){ + form.control(_genderKey).value = value.first; + }else{ + form.control(_genderKey).value = null; + setState(() { + form.control(_genderKey).setErrors({'': true}); + }); + } + }); + }, + valueMapper: (value) { + return localizations.translate(value); + }, + errorMessage: form.control(_genderKey).hasErrors + ? localizations.translate(i18.common.corecommonRequired) + : null, ), - emptyText: localizations - .translate(i18.common.noMatchFound), ), individualDetailsShowcaseData.mobile.buildWith( child: DigitTextFormField( diff --git a/packages/registration_delivery/lib/router/registration_delivery_router.dart b/packages/registration_delivery/lib/router/registration_delivery_router.dart index 7ae856838..5a63e1a83 100644 --- a/packages/registration_delivery/lib/router/registration_delivery_router.dart +++ b/packages/registration_delivery/lib/router/registration_delivery_router.dart @@ -56,6 +56,11 @@ class RegistrationDeliveryRoute extends $RegistrationDeliveryRoute { page: BeneficiaryDetailsRoute.page, path: 'beneficiary-details', ), + + AutoRoute( + page: BeneficiaryChecklistRoute.page, + path: 'beneficiary-checklist', + ), AutoRoute( page: DeliverInterventionRoute.page, path: 'deliver-intervention', diff --git a/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart b/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart index 7920e4389..a03fc9c8b 100644 --- a/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart +++ b/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart @@ -17,46 +17,46 @@ import 'package:registration_delivery/blocs/beneficiary_registration/beneficiary import 'package:registration_delivery/blocs/search_households/search_households.dart' as _i26; import 'package:registration_delivery/models/entities/task.dart' as _i28; -import 'package:registration_delivery/pages/beneficiary/beneficiary_details.dart' +import 'package:registration_delivery/pages/beneficiary/beneficiary_checklist.dart' as _i2; +import 'package:registration_delivery/pages/beneficiary/beneficiary_details.dart' + as _i3; import 'package:registration_delivery/pages/beneficiary/beneficiary_wrapper.dart' - as _i4; -import 'package:registration_delivery/pages/beneficiary/deliver_intervention.dart' as _i5; -import 'package:registration_delivery/pages/beneficiary/dose_administered.dart' +import 'package:registration_delivery/pages/beneficiary/deliver_intervention.dart' as _i6; -import 'package:registration_delivery/pages/beneficiary/facility_selection.dart' +import 'package:registration_delivery/pages/beneficiary/dose_administered.dart' as _i7; +import 'package:registration_delivery/pages/beneficiary/facility_selection.dart' + as _i8; import 'package:registration_delivery/pages/beneficiary/household_overview.dart' - as _i12; + as _i13; import 'package:registration_delivery/pages/beneficiary/record_past_delivery_details.dart' - as _i15; -import 'package:registration_delivery/pages/beneficiary/refer_beneficiary.dart' as _i16; +import 'package:registration_delivery/pages/beneficiary/refer_beneficiary.dart' + as _i17; import 'package:registration_delivery/pages/beneficiary/side_effects.dart' - as _i19; + as _i20; import 'package:registration_delivery/pages/beneficiary/widgets/household_acknowledgement.dart' - as _i10; + as _i11; import 'package:registration_delivery/pages/beneficiary/widgets/splash_acknowledgement.dart' - as _i20; + as _i21; import 'package:registration_delivery/pages/beneficiary_registration/beneficiary_acknowledgement.dart' as _i1; import 'package:registration_delivery/pages/beneficiary_registration/beneficiary_registration_wrapper.dart' - as _i3; + as _i4; import 'package:registration_delivery/pages/beneficiary_registration/house_details.dart' - as _i8; -import 'package:registration_delivery/pages/beneficiary_registration/household_details.dart' as _i9; +import 'package:registration_delivery/pages/beneficiary_registration/household_details.dart' + as _i10; import 'package:registration_delivery/pages/beneficiary_registration/household_location.dart' - as _i11; + as _i12; import 'package:registration_delivery/pages/beneficiary_registration/individual_details.dart' - as _i13; -import 'package:registration_delivery/pages/reason_for_deletion.dart' as _i14; + as _i14; +import 'package:registration_delivery/pages/reason_for_deletion.dart' as _i15; import 'package:registration_delivery/pages/registration_delivery_wrapper.dart' - as _i17; -import 'package:registration_delivery/pages/search_beneficiary.dart' as _i18; -import 'package:registration_delivery/pages/summary_page.dart' as _i21; -import 'package:registration_delivery/widgets/details_card.dart' as _i29; + as _i18; +import 'package:registration_delivery/pages/search_beneficiary.dart' as _i19; abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { @override @@ -73,12 +73,24 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { ), ); }, + BeneficiaryChecklistRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const BeneficiaryChecklistRouteArgs()); + return _i22.AutoRoutePage( + routeData: routeData, + child: _i2.BeneficiaryChecklistPage( + key: args.key, + referralClientRefId: args.referralClientRefId, + appLocalizations: args.appLocalizations, + ), + ); + }, BeneficiaryDetailsRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const BeneficiaryDetailsRouteArgs()); return _i22.AutoRoutePage( routeData: routeData, - child: _i2.BeneficiaryDetailsPage( + child: _i3.BeneficiaryDetailsPage( key: args.key, appLocalizations: args.appLocalizations, ), @@ -89,7 +101,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { return _i22.AutoRoutePage( routeData: routeData, child: _i22.WrappedRoute( - child: _i3.BeneficiaryRegistrationWrapperPage( + child: _i4.BeneficiaryRegistrationWrapperPage( key: args.key, initialState: args.initialState, )), @@ -99,7 +111,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { final args = routeData.argsAs(); return _i22.AutoRoutePage( routeData: routeData, - child: _i4.BeneficiaryWrapperPage( + child: _i5.BeneficiaryWrapperPage( key: args.key, wrapper: args.wrapper, isEditing: args.isEditing, @@ -111,7 +123,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { orElse: () => const DeliverInterventionRouteArgs()); return _i22.AutoRoutePage( routeData: routeData, - child: _i5.DeliverInterventionPage( + child: _i6.DeliverInterventionPage( key: args.key, appLocalizations: args.appLocalizations, isEditing: args.isEditing, @@ -123,7 +135,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { orElse: () => const DoseAdministeredRouteArgs()); return _i22.AutoRoutePage( routeData: routeData, - child: _i6.DoseAdministeredPage( + child: _i7.DoseAdministeredPage( key: args.key, appLocalizations: args.appLocalizations, ), @@ -133,7 +145,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { final args = routeData.argsAs(); return _i22.AutoRoutePage( routeData: routeData, - child: _i7.FacilitySelectionPage( + child: _i8.FacilitySelectionPage( key: args.key, facilities: args.facilities, ), @@ -144,7 +156,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { orElse: () => const HouseDetailsRouteArgs()); return _i22.AutoRoutePage( routeData: routeData, - child: _i8.HouseDetailsPage( + child: _i9.HouseDetailsPage( key: args.key, appLocalizations: args.appLocalizations, ), @@ -155,7 +167,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { orElse: () => const HouseHoldDetailsRouteArgs()); return _i22.AutoRoutePage( routeData: routeData, - child: _i9.HouseHoldDetailsPage( + child: _i10.HouseHoldDetailsPage( key: args.key, appLocalizations: args.appLocalizations, ), @@ -166,7 +178,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { orElse: () => const HouseholdAcknowledgementRouteArgs()); return _i22.AutoRoutePage( routeData: routeData, - child: _i10.HouseholdAcknowledgementPage( + child: _i11.HouseholdAcknowledgementPage( key: args.key, appLocalizations: args.appLocalizations, enableViewHousehold: args.enableViewHousehold, @@ -178,7 +190,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { orElse: () => const HouseholdLocationRouteArgs()); return _i22.AutoRoutePage( routeData: routeData, - child: _i11.HouseholdLocationPage( + child: _i12.HouseholdLocationPage( key: args.key, appLocalizations: args.appLocalizations, ), @@ -189,7 +201,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { orElse: () => const HouseholdOverviewRouteArgs()); return _i22.AutoRoutePage( routeData: routeData, - child: _i12.HouseholdOverviewPage( + child: _i13.HouseholdOverviewPage( key: args.key, appLocalizations: args.appLocalizations, ), @@ -200,7 +212,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { orElse: () => const IndividualDetailsRouteArgs()); return _i22.AutoRoutePage( routeData: routeData, - child: _i13.IndividualDetailsPage( + child: _i14.IndividualDetailsPage( key: args.key, appLocalizations: args.appLocalizations, isHeadOfHousehold: args.isHeadOfHousehold, @@ -212,7 +224,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { orElse: () => const ReasonForDeletionRouteArgs()); return _i22.AutoRoutePage( routeData: routeData, - child: _i14.ReasonForDeletionPage( + child: _i15.ReasonForDeletionPage( key: args.key, appLocalizations: args.appLocalizations, isHousholdDelete: args.isHousholdDelete, @@ -224,7 +236,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { orElse: () => const RecordPastDeliveryDetailsRouteArgs()); return _i22.AutoRoutePage( routeData: routeData, - child: _i15.RecordPastDeliveryDetailsPage( + child: _i16.RecordPastDeliveryDetailsPage( key: args.key, appLocalizations: args.appLocalizations, tasks: args.tasks, @@ -235,7 +247,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { final args = routeData.argsAs(); return _i22.AutoRoutePage( routeData: routeData, - child: _i16.ReferBeneficiaryPage( + child: _i17.ReferBeneficiaryPage( key: args.key, appLocalizations: args.appLocalizations, isEditing: args.isEditing, @@ -246,7 +258,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { RegistrationDeliveryWrapperRoute.name: (routeData) { return _i22.AutoRoutePage( routeData: routeData, - child: const _i17.RegistrationDeliveryWrapperPage(), + child: const _i18.RegistrationDeliveryWrapperPage(), ); }, SearchBeneficiaryRoute.name: (routeData) { @@ -254,7 +266,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { orElse: () => const SearchBeneficiaryRouteArgs()); return _i22.AutoRoutePage( routeData: routeData, - child: _i18.SearchBeneficiaryPage( + child: _i19.SearchBeneficiaryPage( key: args.key, appLocalizations: args.appLocalizations, ), @@ -264,7 +276,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { final args = routeData.argsAs(); return _i22.AutoRoutePage( routeData: routeData, - child: _i19.SideEffectsPage( + child: _i20.SideEffectsPage( key: args.key, appLocalizations: args.appLocalizations, tasks: args.tasks, @@ -277,24 +289,13 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { orElse: () => const SplashAcknowledgementRouteArgs()); return _i22.AutoRoutePage( routeData: routeData, - child: _i20.SplashAcknowledgementPage( + child: _i21.SplashAcknowledgementPage( key: args.key, appLocalizations: args.appLocalizations, enableBackToSearch: args.enableBackToSearch, ), ); }, - SummaryRoute.name: (routeData) { - final args = routeData.argsAs(); - return _i22.AutoRoutePage( - routeData: routeData, - child: _i21.SummaryPage( - key: args.key, - appLocalizations: args.appLocalizations, - summaryList: args.summaryList, - ), - ); - }, }; } @@ -343,7 +344,51 @@ class BeneficiaryAcknowledgementRouteArgs { } /// generated route for -/// [_i2.BeneficiaryDetailsPage] +/// [_i2.BeneficiaryChecklistPage] +class BeneficiaryChecklistRoute + extends _i22.PageRouteInfo { + BeneficiaryChecklistRoute({ + _i23.Key? key, + String? referralClientRefId, + _i24.RegistrationDeliveryLocalization? appLocalizations, + List<_i22.PageRouteInfo>? children, + }) : super( + BeneficiaryChecklistRoute.name, + args: BeneficiaryChecklistRouteArgs( + key: key, + referralClientRefId: referralClientRefId, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'BeneficiaryChecklistRoute'; + + static const _i22.PageInfo page = + _i22.PageInfo(name); +} + +class BeneficiaryChecklistRouteArgs { + const BeneficiaryChecklistRouteArgs({ + this.key, + this.referralClientRefId, + this.appLocalizations, + }); + + final _i23.Key? key; + + final String? referralClientRefId; + + final _i24.RegistrationDeliveryLocalization? appLocalizations; + + @override + String toString() { + return 'BeneficiaryChecklistRouteArgs{key: $key, referralClientRefId: $referralClientRefId, appLocalizations: $appLocalizations}'; + } +} + +/// generated route for +/// [_i3.BeneficiaryDetailsPage] class BeneficiaryDetailsRoute extends _i22.PageRouteInfo { BeneficiaryDetailsRoute({ @@ -382,7 +427,7 @@ class BeneficiaryDetailsRouteArgs { } /// generated route for -/// [_i3.BeneficiaryRegistrationWrapperPage] +/// [_i4.BeneficiaryRegistrationWrapperPage] class BeneficiaryRegistrationWrapperRoute extends _i22.PageRouteInfo { BeneficiaryRegistrationWrapperRoute({ @@ -421,7 +466,7 @@ class BeneficiaryRegistrationWrapperRouteArgs { } /// generated route for -/// [_i4.BeneficiaryWrapperPage] +/// [_i5.BeneficiaryWrapperPage] class BeneficiaryWrapperRoute extends _i22.PageRouteInfo { BeneficiaryWrapperRoute({ @@ -465,7 +510,7 @@ class BeneficiaryWrapperRouteArgs { } /// generated route for -/// [_i5.DeliverInterventionPage] +/// [_i6.DeliverInterventionPage] class DeliverInterventionRoute extends _i22.PageRouteInfo { DeliverInterventionRoute({ @@ -509,7 +554,7 @@ class DeliverInterventionRouteArgs { } /// generated route for -/// [_i6.DoseAdministeredPage] +/// [_i7.DoseAdministeredPage] class DoseAdministeredRoute extends _i22.PageRouteInfo { DoseAdministeredRoute({ @@ -548,7 +593,7 @@ class DoseAdministeredRouteArgs { } /// generated route for -/// [_i7.FacilitySelectionPage] +/// [_i8.FacilitySelectionPage] class FacilitySelectionRoute extends _i22.PageRouteInfo { FacilitySelectionRoute({ @@ -587,7 +632,7 @@ class FacilitySelectionRouteArgs { } /// generated route for -/// [_i8.HouseDetailsPage] +/// [_i9.HouseDetailsPage] class HouseDetailsRoute extends _i22.PageRouteInfo { HouseDetailsRoute({ _i23.Key? key, @@ -625,7 +670,7 @@ class HouseDetailsRouteArgs { } /// generated route for -/// [_i9.HouseHoldDetailsPage] +/// [_i10.HouseHoldDetailsPage] class HouseHoldDetailsRoute extends _i22.PageRouteInfo { HouseHoldDetailsRoute({ @@ -664,7 +709,7 @@ class HouseHoldDetailsRouteArgs { } /// generated route for -/// [_i10.HouseholdAcknowledgementPage] +/// [_i11.HouseholdAcknowledgementPage] class HouseholdAcknowledgementRoute extends _i22.PageRouteInfo { HouseholdAcknowledgementRoute({ @@ -708,7 +753,7 @@ class HouseholdAcknowledgementRouteArgs { } /// generated route for -/// [_i11.HouseholdLocationPage] +/// [_i12.HouseholdLocationPage] class HouseholdLocationRoute extends _i22.PageRouteInfo { HouseholdLocationRoute({ @@ -747,7 +792,7 @@ class HouseholdLocationRouteArgs { } /// generated route for -/// [_i12.HouseholdOverviewPage] +/// [_i13.HouseholdOverviewPage] class HouseholdOverviewRoute extends _i22.PageRouteInfo { HouseholdOverviewRoute({ @@ -786,7 +831,7 @@ class HouseholdOverviewRouteArgs { } /// generated route for -/// [_i13.IndividualDetailsPage] +/// [_i14.IndividualDetailsPage] class IndividualDetailsRoute extends _i22.PageRouteInfo { IndividualDetailsRoute({ @@ -830,7 +875,7 @@ class IndividualDetailsRouteArgs { } /// generated route for -/// [_i14.ReasonForDeletionPage] +/// [_i15.ReasonForDeletionPage] class ReasonForDeletionRoute extends _i22.PageRouteInfo { ReasonForDeletionRoute({ @@ -874,7 +919,7 @@ class ReasonForDeletionRouteArgs { } /// generated route for -/// [_i15.RecordPastDeliveryDetailsPage] +/// [_i16.RecordPastDeliveryDetailsPage] class RecordPastDeliveryDetailsRoute extends _i22.PageRouteInfo { RecordPastDeliveryDetailsRoute({ @@ -918,7 +963,7 @@ class RecordPastDeliveryDetailsRouteArgs { } /// generated route for -/// [_i16.ReferBeneficiaryPage] +/// [_i17.ReferBeneficiaryPage] class ReferBeneficiaryRoute extends _i22.PageRouteInfo { ReferBeneficiaryRoute({ @@ -967,7 +1012,7 @@ class ReferBeneficiaryRouteArgs { } /// generated route for -/// [_i17.RegistrationDeliveryWrapperPage] +/// [_i18.RegistrationDeliveryWrapperPage] class RegistrationDeliveryWrapperRoute extends _i22.PageRouteInfo { const RegistrationDeliveryWrapperRoute({List<_i22.PageRouteInfo>? children}) : super( @@ -981,7 +1026,7 @@ class RegistrationDeliveryWrapperRoute extends _i22.PageRouteInfo { } /// generated route for -/// [_i18.SearchBeneficiaryPage] +/// [_i19.SearchBeneficiaryPage] class SearchBeneficiaryRoute extends _i22.PageRouteInfo { SearchBeneficiaryRoute({ @@ -1020,7 +1065,7 @@ class SearchBeneficiaryRouteArgs { } /// generated route for -/// [_i19.SideEffectsPage] +/// [_i20.SideEffectsPage] class SideEffectsRoute extends _i22.PageRouteInfo { SideEffectsRoute({ _i23.Key? key, @@ -1068,7 +1113,7 @@ class SideEffectsRouteArgs { } /// generated route for -/// [_i20.SplashAcknowledgementPage] +/// [_i21.SplashAcknowledgementPage] class SplashAcknowledgementRoute extends _i22.PageRouteInfo { SplashAcknowledgementRoute({ @@ -1110,46 +1155,3 @@ class SplashAcknowledgementRouteArgs { return 'SplashAcknowledgementRouteArgs{key: $key, appLocalizations: $appLocalizations, enableBackToSearch: $enableBackToSearch}'; } } - -/// generated route for -/// [_i21.SummaryPage] -class SummaryRoute extends _i22.PageRouteInfo { - SummaryRoute({ - _i23.Key? key, - _i24.RegistrationDeliveryLocalization? appLocalizations, - required List<_i29.LabelValueList> summaryList, - List<_i22.PageRouteInfo>? children, - }) : super( - SummaryRoute.name, - args: SummaryRouteArgs( - key: key, - appLocalizations: appLocalizations, - summaryList: summaryList, - ), - initialChildren: children, - ); - - static const String name = 'SummaryRoute'; - - static const _i22.PageInfo page = - _i22.PageInfo(name); -} - -class SummaryRouteArgs { - const SummaryRouteArgs({ - this.key, - this.appLocalizations, - required this.summaryList, - }); - - final _i23.Key? key; - - final _i24.RegistrationDeliveryLocalization? appLocalizations; - - final List<_i29.LabelValueList> summaryList; - - @override - String toString() { - return 'SummaryRouteArgs{key: $key, appLocalizations: $appLocalizations, summaryList: $summaryList}'; - } -} diff --git a/packages/registration_delivery/lib/utils/i18_key_constants.dart b/packages/registration_delivery/lib/utils/i18_key_constants.dart index 8ca7b1601..8f1b54cdf 100644 --- a/packages/registration_delivery/lib/utils/i18_key_constants.dart +++ b/packages/registration_delivery/lib/utils/i18_key_constants.dart @@ -17,6 +17,7 @@ const householdDetailsShowcase = HouseholdDetailsShowcase(); const individualDetailsShowcase = IndividualDetailsShowcase(); const householdOverviewShowcase = HouseholdOverviewShowcase(); const deliverInterventionShowcase = DeliverInterventionShowcase(); +const checklist = Checklist(); class Common { const Common(); @@ -319,6 +320,46 @@ class AcknowledgementSuccess { String get dataDownloadedSuccessLabel => 'DATA_DOWNLOADED_SUCCESS_LABEL'; } +class Checklist { + const Checklist(); + + String get checklist => 'CHECKLIST'; + + String get checklistlabel => 'CHECKLIST_LABEL'; + + String get checklistCreateActionLabel => 'CHECKLIST_CREATE_ACTION_LABEL'; + + String get checklistViewActionLabel => 'CHECKLIST_VIEW_ACTION_LABEL'; + + String get checklistDetailLabel => 'CHECKLIST_DETAILS_LABEL'; + + String get checklistDialogLabel => 'CHECKLIST_DIALOG_LABEL'; + + String get checklistDialogDescription => 'CHECKLIST_DIALOG_DESCRITPTION'; + + String get checklistDialogPrimaryAction => 'CHECKLIST_DIALOG_PRIMARY_ACTION'; + + String get checklistDialogSecondaryAction => + 'CHECKLIST_DIALOG_SECONDARY_ACTION'; + + String get checklistdate => 'CHECKLIST_DATE'; + + String get checklistReasonRequiredError => 'CHECKLIST_REASON_REQUIRED_ERROR'; + + String get notSelectedKey => 'NOT_SELECTED'; + + String get checklistBackDialogLabel => 'CHECKLIST_BACK_DIALOG_LABEL'; + + String get checklistBackDialogDescription => + 'CHECKLIST_BACK_DIALOG_DESCRITPTION'; + + String get checklistBackDialogPrimaryAction => + 'CHECKLIST_BACK_DIALOG_PRIMARY_ACTION'; + + String get checklistBackDialogSecondaryAction => + 'CHECKLIST_BACK_DIALOG_SECONDARY_ACTION'; +} + class HouseholdDetails { const HouseholdDetails(); From 9001274265e39fd735425145439c0cf55e5a52f2 Mon Sep 17 00:00:00 2001 From: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Date: Thu, 11 Jul 2024 21:56:09 +0530 Subject: [PATCH 049/241] HLM-6371:: Beneficiary Registration Summary Page (#452) * HLM-6283:: IRS- Household Details Fields added * HLM-6283:: House Structure Details Page * HLM-6371:: Beneficiary Registration Summary Page * Updated registration_delivery script --- .../lib/router/app_router.dart | 4 + .../lib/widgets/atoms/selection_card.dart | 35 +- .../beneficiary_registration.dart | 212 ++- .../beneficiary_registration.freezed.dart | 1380 +++++++++++++++-- .../house_details.dart | 2 + .../household_details.dart | 1 + .../household_location.dart | 1 + .../individual_details.dart | 847 +++++----- .../lib/pages/summary_page.dart | 319 ++++ .../router/registration_delivery_router.dart | 10 +- .../registration_delivery_router.gm.dart | 446 +++--- .../lib/utils/i18_key_constants.dart | 4 + .../lib/widgets/details_card.dart | 125 ++ packages/registration_delivery/pubspec.lock | 30 +- tools/registration_delivery_imports.dart | 4 + 15 files changed, 2584 insertions(+), 836 deletions(-) create mode 100644 packages/registration_delivery/lib/pages/summary_page.dart create mode 100644 packages/registration_delivery/lib/widgets/details_card.dart diff --git a/apps/health_campaign_field_worker_app/lib/router/app_router.dart b/apps/health_campaign_field_worker_app/lib/router/app_router.dart index ba35c524e..0f36a7d67 100644 --- a/apps/health_campaign_field_worker_app/lib/router/app_router.dart +++ b/apps/health_campaign_field_worker_app/lib/router/app_router.dart @@ -118,6 +118,10 @@ class AppRouter extends _$AppRouter { page: BeneficiaryAcknowledgementRoute.page, path: 'beneficiary-acknowledgement', ), + AutoRoute( + page: SummaryRoute.page, + path: 'beneficiary-summary', + ), ], ), AutoRoute( diff --git a/packages/digit_components/lib/widgets/atoms/selection_card.dart b/packages/digit_components/lib/widgets/atoms/selection_card.dart index 3164f65dc..7c729041c 100644 --- a/packages/digit_components/lib/widgets/atoms/selection_card.dart +++ b/packages/digit_components/lib/widgets/atoms/selection_card.dart @@ -5,6 +5,7 @@ class SelectionBox extends StatefulWidget { final double? width; final String? errorMessage; final List options; + final String? title; final Function(List) onSelectionChanged; final List? initialSelection; final bool allowMultipleSelection; @@ -13,6 +14,7 @@ class SelectionBox extends StatefulWidget { const SelectionBox({ Key? key, this.width, + this.title, this.errorMessage, required this.options, required this.onSelectionChanged, @@ -31,7 +33,7 @@ class _SelectionBoxState extends State> { @override void initState() { super.initState(); - if(widget.initialSelection != null) { + if (widget.initialSelection != null) { _selectedOptions.addAll(widget.initialSelection!); } } @@ -106,20 +108,23 @@ class _SelectionBoxState extends State> { mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Container( - padding: const EdgeInsets.all(kPadding * 3), - decoration: BoxDecoration( - color: const DigitColors().alabasterWhite, - borderRadius: BorderRadius.circular(kPadding / 2), - border: Border.all( - color: const DigitColors().quillGray, - width: 1, + LabeledField( + label: widget.title ?? '', + child: Container( + padding: const EdgeInsets.all(kPadding * 3), + decoration: BoxDecoration( + color: const DigitColors().alabasterWhite, + borderRadius: BorderRadius.circular(kPadding / 2), + border: Border.all( + color: const DigitColors().quillGray, + width: 1, + ), + ), + child: Wrap( + spacing: kPadding * 3, + runSpacing: kPadding * 3, + children: widget.options.map(_buildOption).toList(), ), - ), - child: Wrap( - spacing: kPadding * 3, - runSpacing: kPadding * 3, - children: widget.options.map(_buildOption).toList(), ), ), const SizedBox(height: kPadding / 2), @@ -150,7 +155,7 @@ class _SelectionBoxState extends State> { fit: FlexFit.tight, child: Text( widget.errorMessage!, - style: textTheme.bodyLarge?.copyWith( + style: textTheme.bodySmall?.copyWith( color: const DigitColors().lavaRed, ), ), diff --git a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart index 298009d64..edaa7c5f9 100644 --- a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart +++ b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart @@ -45,6 +45,7 @@ class BeneficiaryRegistrationBloc on(_handleUpdateHousehold); on(_handleUpdateIndividual); on(_handleAddMember); + on(_handleSummary); } //_handleSaveAddress event can be used for saving address details to the form @@ -127,6 +128,60 @@ class BeneficiaryRegistrationBloc ); } + FutureOr _handleSummary( + BeneficiaryRegistrationSummaryEvent event, + BeneficiaryRegistrationEmitter emit, + ) async { + await state.maybeMap( + orElse: () { + throw const InvalidRegistrationStateException(); + }, + create: (value) async { + final individual = value.individualModel; + final household = value.householdModel; + final address = value.addressModel; + final code = event.boundary.code; + final name = event.boundary.name; + final locality = code == null || name == null + ? null + : LocalityModel(code: code, name: name); + emit(BeneficiaryRegistrationSummaryState( + navigateToRoot: false, + householdModel: household?.copyWith( + address: address?.copyWith( + relatedClientReferenceId: household.clientReferenceId, + auditDetails: individual?.auditDetails, + clientAuditDetails: individual?.clientAuditDetails, + locality: locality, + )), + individualModel: individual, + projectBeneficiaryModel: ProjectBeneficiaryModel( + tag: event.tag, + rowVersion: 1, + tenantId: RegistrationDeliverySingleton().tenantId, + clientReferenceId: IdGen.i.identifier, + dateOfRegistration: DateTime.now().millisecondsSinceEpoch, + projectId: event.projectId, + beneficiaryClientReferenceId: + beneficiaryType == BeneficiaryType.individual + ? individual?.clientReferenceId + : household?.clientReferenceId, + clientAuditDetails: ClientAuditDetails( + createdTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: event.userUuid, + createdBy: event.userUuid, + ), + auditDetails: AuditDetails( + createdBy: event.userUuid, + createdTime: DateTime.now().millisecondsSinceEpoch, + ), + ), + isHeadOfHousehold: value.isHeadOfHousehold)); + }, + ); + } + FutureOr _handleCreate( BeneficiaryRegistrationCreateEvent event, BeneficiaryRegistrationEmitter emit, @@ -135,6 +190,100 @@ class BeneficiaryRegistrationBloc orElse: () { throw const InvalidRegistrationStateException(); }, + persisted: (value) {}, + summary: (value) async { + if (event.navigateToSummary) { + emit(BeneficiaryRegistrationState.create( + addressModel: value.householdModel?.address, + householdModel: value.householdModel, + )); + } else { + final individual = value.individualModel; + final household = value.householdModel; + final address = value.householdModel?.address; + final dateOfRegistration = + value.projectBeneficiaryModel?.dateOfRegistration; + if (individual == null) { + throw const InvalidRegistrationStateException( + 'Individual cannot be null', + ); + } else if (household == null) { + throw const InvalidRegistrationStateException( + 'Household cannot be null', + ); + } + + try { + final createdAt = DateTime.now().millisecondsSinceEpoch; + + emit(value.copyWith(loading: true)); + + final code = event.boundary.code; + final name = event.boundary.name; + + final locality = code == null || name == null + ? null + : LocalityModel(code: code, name: name); + await householdRepository.create( + household.copyWith( + address: address?.copyWith( + relatedClientReferenceId: household.clientReferenceId, + auditDetails: individual.auditDetails, + clientAuditDetails: individual.clientAuditDetails, + locality: locality, + ), + ), + ); + final initialModifiedAt = DateTime.now().millisecondsSinceEpoch; + await individualRepository.create( + individual.copyWith( + address: [ + address!.copyWith( + relatedClientReferenceId: individual.clientReferenceId, + auditDetails: individual.auditDetails, + clientAuditDetails: individual.clientAuditDetails, + locality: locality, + ), + ], + ), + ); + + await projectBeneficiaryRepository.create( + value.projectBeneficiaryModel!, + ); + + await householdMemberRepository.create( + HouseholdMemberModel( + householdClientReferenceId: household.clientReferenceId, + individualClientReferenceId: individual.clientReferenceId, + isHeadOfHousehold: value.isHeadOfHousehold, + tenantId: RegistrationDeliverySingleton().tenantId, + rowVersion: 1, + clientReferenceId: IdGen.i.identifier, + clientAuditDetails: ClientAuditDetails( + createdTime: createdAt, + lastModifiedTime: initialModifiedAt, + lastModifiedBy: event.userUuid, + createdBy: event.userUuid, + ), + auditDetails: AuditDetails( + createdBy: event.userUuid, + createdTime: createdAt, + ), + ), + ); + } catch (error) { + rethrow; + } finally { + emit( + BeneficiaryRegistrationPersistedState( + navigateToRoot: false, + householdModel: household, + ), + ); + } + } + }, create: (value) async { final individual = value.individualModel; final household = value.householdModel; @@ -159,18 +308,17 @@ class BeneficiaryRegistrationBloc ); } - final createdAt = DateTime.now().millisecondsSinceEpoch; + try { + final createdAt = DateTime.now().millisecondsSinceEpoch; - emit(value.copyWith(loading: true)); + emit(value.copyWith(loading: true)); - try { final code = event.boundary.code; final name = event.boundary.name; final locality = code == null || name == null ? null : LocalityModel(code: code, name: name); - await householdRepository.create( household.copyWith( address: address.copyWith( @@ -196,28 +344,7 @@ class BeneficiaryRegistrationBloc ); await projectBeneficiaryRepository.create( - ProjectBeneficiaryModel( - tag: event.tag, - rowVersion: 1, - tenantId: RegistrationDeliverySingleton().tenantId, - clientReferenceId: IdGen.i.identifier, - dateOfRegistration: dateOfRegistration.millisecondsSinceEpoch, - projectId: event.projectId, - beneficiaryClientReferenceId: - beneficiaryType == BeneficiaryType.individual - ? individual.clientReferenceId - : household.clientReferenceId, - clientAuditDetails: ClientAuditDetails( - createdTime: createdAt, - lastModifiedTime: initialModifiedAt, - lastModifiedBy: event.userUuid, - createdBy: event.userUuid, - ), - auditDetails: AuditDetails( - createdBy: event.userUuid, - createdTime: createdAt, - ), - ), + value.projectBeneficiaryModel!, ); await householdMemberRepository.create( @@ -511,12 +638,21 @@ class BeneficiaryRegistrationEvent with _$BeneficiaryRegistrationEvent { required AddressModel addressModel, }) = BeneficiaryRegistrationUpdateIndividualDetailsEvent; - const factory BeneficiaryRegistrationEvent.create({ - required String userUuid, - required String projectId, - required BoundaryModel boundary, - String? tag, - }) = BeneficiaryRegistrationCreateEvent; + const factory BeneficiaryRegistrationEvent.create( + {required String userUuid, + required String projectId, + required BoundaryModel boundary, + String? tag, + @Default(true) bool navigateToSummary}) = + BeneficiaryRegistrationCreateEvent; + + const factory BeneficiaryRegistrationEvent.summary( + {required String userUuid, + required String projectId, + required BoundaryModel boundary, + String? tag, + @Default(true) bool navigateToSummary}) = + BeneficiaryRegistrationSummaryEvent; const factory BeneficiaryRegistrationEvent.validate({ required String tag, @@ -529,6 +665,7 @@ class BeneficiaryRegistrationState with _$BeneficiaryRegistrationState { AddressModel? addressModel, HouseholdModel? householdModel, IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, @Default(false) bool loading, @@ -562,6 +699,17 @@ class BeneficiaryRegistrationState with _$BeneficiaryRegistrationState { @Default(true) bool navigateToRoot, required HouseholdModel householdModel, }) = BeneficiaryRegistrationPersistedState; + + const factory BeneficiaryRegistrationState.summary({ + @Default(true) bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + @Default(false) bool loading, + @Default(false) bool isHeadOfHousehold, + }) = BeneficiaryRegistrationSummaryState; } class InvalidRegistrationStateException implements Exception { diff --git a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart index c64db5b8c..2026ae8ac 100644 --- a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart +++ b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart @@ -41,8 +41,11 @@ mixin _$BeneficiaryRegistrationEvent { HouseholdModel householdModel, AddressModel addressModel) updateIndividualDetails, required TResult Function(String userUuid, String projectId, - BoundaryModel boundary, String? tag) + BoundaryModel boundary, String? tag, bool navigateToSummary) create, + required TResult Function(String userUuid, String projectId, + BoundaryModel boundary, String? tag, bool navigateToSummary) + summary, required TResult Function(String tag) validate, }) => throw _privateConstructorUsedError; @@ -70,8 +73,11 @@ mixin _$BeneficiaryRegistrationEvent { HouseholdModel householdModel, AddressModel addressModel)? updateIndividualDetails, TResult? Function(String userUuid, String projectId, BoundaryModel boundary, - String? tag)? + String? tag, bool navigateToSummary)? create, + TResult? Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + summary, TResult? Function(String tag)? validate, }) => throw _privateConstructorUsedError; @@ -99,8 +105,11 @@ mixin _$BeneficiaryRegistrationEvent { HouseholdModel householdModel, AddressModel addressModel)? updateIndividualDetails, TResult Function(String userUuid, String projectId, BoundaryModel boundary, - String? tag)? + String? tag, bool navigateToSummary)? create, + TResult Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + summary, TResult Function(String tag)? validate, required TResult orElse(), }) => @@ -127,6 +136,8 @@ mixin _$BeneficiaryRegistrationEvent { BeneficiaryRegistrationUpdateIndividualDetailsEvent value) updateIndividualDetails, required TResult Function(BeneficiaryRegistrationCreateEvent value) create, + required TResult Function(BeneficiaryRegistrationSummaryEvent value) + summary, required TResult Function(BeneficiaryRegistrationTagEvent value) validate, }) => throw _privateConstructorUsedError; @@ -147,6 +158,7 @@ mixin _$BeneficiaryRegistrationEvent { BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult? Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult? Function(BeneficiaryRegistrationSummaryEvent value)? summary, TResult? Function(BeneficiaryRegistrationTagEvent value)? validate, }) => throw _privateConstructorUsedError; @@ -166,6 +178,7 @@ mixin _$BeneficiaryRegistrationEvent { TResult Function(BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult Function(BeneficiaryRegistrationSummaryEvent value)? summary, TResult Function(BeneficiaryRegistrationTagEvent value)? validate, required TResult orElse(), }) => @@ -287,8 +300,11 @@ class _$BeneficiaryRegistrationSaveAddressEventImpl HouseholdModel householdModel, AddressModel addressModel) updateIndividualDetails, required TResult Function(String userUuid, String projectId, - BoundaryModel boundary, String? tag) + BoundaryModel boundary, String? tag, bool navigateToSummary) create, + required TResult Function(String userUuid, String projectId, + BoundaryModel boundary, String? tag, bool navigateToSummary) + summary, required TResult Function(String tag) validate, }) { return saveAddress(model); @@ -319,8 +335,11 @@ class _$BeneficiaryRegistrationSaveAddressEventImpl HouseholdModel householdModel, AddressModel addressModel)? updateIndividualDetails, TResult? Function(String userUuid, String projectId, BoundaryModel boundary, - String? tag)? + String? tag, bool navigateToSummary)? create, + TResult? Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + summary, TResult? Function(String tag)? validate, }) { return saveAddress?.call(model); @@ -351,8 +370,11 @@ class _$BeneficiaryRegistrationSaveAddressEventImpl HouseholdModel householdModel, AddressModel addressModel)? updateIndividualDetails, TResult Function(String userUuid, String projectId, BoundaryModel boundary, - String? tag)? + String? tag, bool navigateToSummary)? create, + TResult Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + summary, TResult Function(String tag)? validate, required TResult orElse(), }) { @@ -385,6 +407,8 @@ class _$BeneficiaryRegistrationSaveAddressEventImpl BeneficiaryRegistrationUpdateIndividualDetailsEvent value) updateIndividualDetails, required TResult Function(BeneficiaryRegistrationCreateEvent value) create, + required TResult Function(BeneficiaryRegistrationSummaryEvent value) + summary, required TResult Function(BeneficiaryRegistrationTagEvent value) validate, }) { return saveAddress(this); @@ -408,6 +432,7 @@ class _$BeneficiaryRegistrationSaveAddressEventImpl BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult? Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult? Function(BeneficiaryRegistrationSummaryEvent value)? summary, TResult? Function(BeneficiaryRegistrationTagEvent value)? validate, }) { return saveAddress?.call(this); @@ -430,6 +455,7 @@ class _$BeneficiaryRegistrationSaveAddressEventImpl TResult Function(BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult Function(BeneficiaryRegistrationSummaryEvent value)? summary, TResult Function(BeneficiaryRegistrationTagEvent value)? validate, required TResult orElse(), }) { @@ -551,8 +577,11 @@ class _$BeneficiaryRegistrationSaveHouseDetailsEventImpl HouseholdModel householdModel, AddressModel addressModel) updateIndividualDetails, required TResult Function(String userUuid, String projectId, - BoundaryModel boundary, String? tag) + BoundaryModel boundary, String? tag, bool navigateToSummary) create, + required TResult Function(String userUuid, String projectId, + BoundaryModel boundary, String? tag, bool navigateToSummary) + summary, required TResult Function(String tag) validate, }) { return saveHouseDetails(model); @@ -583,8 +612,11 @@ class _$BeneficiaryRegistrationSaveHouseDetailsEventImpl HouseholdModel householdModel, AddressModel addressModel)? updateIndividualDetails, TResult? Function(String userUuid, String projectId, BoundaryModel boundary, - String? tag)? + String? tag, bool navigateToSummary)? create, + TResult? Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + summary, TResult? Function(String tag)? validate, }) { return saveHouseDetails?.call(model); @@ -615,8 +647,11 @@ class _$BeneficiaryRegistrationSaveHouseDetailsEventImpl HouseholdModel householdModel, AddressModel addressModel)? updateIndividualDetails, TResult Function(String userUuid, String projectId, BoundaryModel boundary, - String? tag)? + String? tag, bool navigateToSummary)? create, + TResult Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + summary, TResult Function(String tag)? validate, required TResult orElse(), }) { @@ -649,6 +684,8 @@ class _$BeneficiaryRegistrationSaveHouseDetailsEventImpl BeneficiaryRegistrationUpdateIndividualDetailsEvent value) updateIndividualDetails, required TResult Function(BeneficiaryRegistrationCreateEvent value) create, + required TResult Function(BeneficiaryRegistrationSummaryEvent value) + summary, required TResult Function(BeneficiaryRegistrationTagEvent value) validate, }) { return saveHouseDetails(this); @@ -672,6 +709,7 @@ class _$BeneficiaryRegistrationSaveHouseDetailsEventImpl BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult? Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult? Function(BeneficiaryRegistrationSummaryEvent value)? summary, TResult? Function(BeneficiaryRegistrationTagEvent value)? validate, }) { return saveHouseDetails?.call(this); @@ -694,6 +732,7 @@ class _$BeneficiaryRegistrationSaveHouseDetailsEventImpl TResult Function(BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult Function(BeneficiaryRegistrationSummaryEvent value)? summary, TResult Function(BeneficiaryRegistrationTagEvent value)? validate, required TResult orElse(), }) { @@ -828,8 +867,11 @@ class _$BeneficiaryRegistrationSaveHouseholdDetailsEventImpl HouseholdModel householdModel, AddressModel addressModel) updateIndividualDetails, required TResult Function(String userUuid, String projectId, - BoundaryModel boundary, String? tag) + BoundaryModel boundary, String? tag, bool navigateToSummary) create, + required TResult Function(String userUuid, String projectId, + BoundaryModel boundary, String? tag, bool navigateToSummary) + summary, required TResult Function(String tag) validate, }) { return saveHouseholdDetails(household, registrationDate); @@ -860,8 +902,11 @@ class _$BeneficiaryRegistrationSaveHouseholdDetailsEventImpl HouseholdModel householdModel, AddressModel addressModel)? updateIndividualDetails, TResult? Function(String userUuid, String projectId, BoundaryModel boundary, - String? tag)? + String? tag, bool navigateToSummary)? create, + TResult? Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + summary, TResult? Function(String tag)? validate, }) { return saveHouseholdDetails?.call(household, registrationDate); @@ -892,8 +937,11 @@ class _$BeneficiaryRegistrationSaveHouseholdDetailsEventImpl HouseholdModel householdModel, AddressModel addressModel)? updateIndividualDetails, TResult Function(String userUuid, String projectId, BoundaryModel boundary, - String? tag)? + String? tag, bool navigateToSummary)? create, + TResult Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + summary, TResult Function(String tag)? validate, required TResult orElse(), }) { @@ -926,6 +974,8 @@ class _$BeneficiaryRegistrationSaveHouseholdDetailsEventImpl BeneficiaryRegistrationUpdateIndividualDetailsEvent value) updateIndividualDetails, required TResult Function(BeneficiaryRegistrationCreateEvent value) create, + required TResult Function(BeneficiaryRegistrationSummaryEvent value) + summary, required TResult Function(BeneficiaryRegistrationTagEvent value) validate, }) { return saveHouseholdDetails(this); @@ -949,6 +999,7 @@ class _$BeneficiaryRegistrationSaveHouseholdDetailsEventImpl BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult? Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult? Function(BeneficiaryRegistrationSummaryEvent value)? summary, TResult? Function(BeneficiaryRegistrationTagEvent value)? validate, }) { return saveHouseholdDetails?.call(this); @@ -971,6 +1022,7 @@ class _$BeneficiaryRegistrationSaveHouseholdDetailsEventImpl TResult Function(BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult Function(BeneficiaryRegistrationSummaryEvent value)? summary, TResult Function(BeneficiaryRegistrationTagEvent value)? validate, required TResult orElse(), }) { @@ -1108,8 +1160,11 @@ class _$BeneficiaryRegistrationSaveIndividualDetailsEventImpl HouseholdModel householdModel, AddressModel addressModel) updateIndividualDetails, required TResult Function(String userUuid, String projectId, - BoundaryModel boundary, String? tag) + BoundaryModel boundary, String? tag, bool navigateToSummary) create, + required TResult Function(String userUuid, String projectId, + BoundaryModel boundary, String? tag, bool navigateToSummary) + summary, required TResult Function(String tag) validate, }) { return saveIndividualDetails(model, isHeadOfHousehold); @@ -1140,8 +1195,11 @@ class _$BeneficiaryRegistrationSaveIndividualDetailsEventImpl HouseholdModel householdModel, AddressModel addressModel)? updateIndividualDetails, TResult? Function(String userUuid, String projectId, BoundaryModel boundary, - String? tag)? + String? tag, bool navigateToSummary)? create, + TResult? Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + summary, TResult? Function(String tag)? validate, }) { return saveIndividualDetails?.call(model, isHeadOfHousehold); @@ -1172,8 +1230,11 @@ class _$BeneficiaryRegistrationSaveIndividualDetailsEventImpl HouseholdModel householdModel, AddressModel addressModel)? updateIndividualDetails, TResult Function(String userUuid, String projectId, BoundaryModel boundary, - String? tag)? + String? tag, bool navigateToSummary)? create, + TResult Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + summary, TResult Function(String tag)? validate, required TResult orElse(), }) { @@ -1206,6 +1267,8 @@ class _$BeneficiaryRegistrationSaveIndividualDetailsEventImpl BeneficiaryRegistrationUpdateIndividualDetailsEvent value) updateIndividualDetails, required TResult Function(BeneficiaryRegistrationCreateEvent value) create, + required TResult Function(BeneficiaryRegistrationSummaryEvent value) + summary, required TResult Function(BeneficiaryRegistrationTagEvent value) validate, }) { return saveIndividualDetails(this); @@ -1229,6 +1292,7 @@ class _$BeneficiaryRegistrationSaveIndividualDetailsEventImpl BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult? Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult? Function(BeneficiaryRegistrationSummaryEvent value)? summary, TResult? Function(BeneficiaryRegistrationTagEvent value)? validate, }) { return saveIndividualDetails?.call(this); @@ -1251,6 +1315,7 @@ class _$BeneficiaryRegistrationSaveIndividualDetailsEventImpl TResult Function(BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult Function(BeneficiaryRegistrationSummaryEvent value)? summary, TResult Function(BeneficiaryRegistrationTagEvent value)? validate, required TResult orElse(), }) { @@ -1438,8 +1503,11 @@ class _$BeneficiaryRegistrationAddMemberEventImpl HouseholdModel householdModel, AddressModel addressModel) updateIndividualDetails, required TResult Function(String userUuid, String projectId, - BoundaryModel boundary, String? tag) + BoundaryModel boundary, String? tag, bool navigateToSummary) create, + required TResult Function(String userUuid, String projectId, + BoundaryModel boundary, String? tag, bool navigateToSummary) + summary, required TResult Function(String tag) validate, }) { return addMember(householdModel, individualModel, addressModel, userUuid, @@ -1471,8 +1539,11 @@ class _$BeneficiaryRegistrationAddMemberEventImpl HouseholdModel householdModel, AddressModel addressModel)? updateIndividualDetails, TResult? Function(String userUuid, String projectId, BoundaryModel boundary, - String? tag)? + String? tag, bool navigateToSummary)? create, + TResult? Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + summary, TResult? Function(String tag)? validate, }) { return addMember?.call(householdModel, individualModel, addressModel, @@ -1504,8 +1575,11 @@ class _$BeneficiaryRegistrationAddMemberEventImpl HouseholdModel householdModel, AddressModel addressModel)? updateIndividualDetails, TResult Function(String userUuid, String projectId, BoundaryModel boundary, - String? tag)? + String? tag, bool navigateToSummary)? create, + TResult Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + summary, TResult Function(String tag)? validate, required TResult orElse(), }) { @@ -1539,6 +1613,8 @@ class _$BeneficiaryRegistrationAddMemberEventImpl BeneficiaryRegistrationUpdateIndividualDetailsEvent value) updateIndividualDetails, required TResult Function(BeneficiaryRegistrationCreateEvent value) create, + required TResult Function(BeneficiaryRegistrationSummaryEvent value) + summary, required TResult Function(BeneficiaryRegistrationTagEvent value) validate, }) { return addMember(this); @@ -1562,6 +1638,7 @@ class _$BeneficiaryRegistrationAddMemberEventImpl BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult? Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult? Function(BeneficiaryRegistrationSummaryEvent value)? summary, TResult? Function(BeneficiaryRegistrationTagEvent value)? validate, }) { return addMember?.call(this); @@ -1584,6 +1661,7 @@ class _$BeneficiaryRegistrationAddMemberEventImpl TResult Function(BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult Function(BeneficiaryRegistrationSummaryEvent value)? summary, TResult Function(BeneficiaryRegistrationTagEvent value)? validate, required TResult orElse(), }) { @@ -1742,8 +1820,11 @@ class _$BeneficiaryRegistrationUpdateHouseholdDetailsEventImpl HouseholdModel householdModel, AddressModel addressModel) updateIndividualDetails, required TResult Function(String userUuid, String projectId, - BoundaryModel boundary, String? tag) + BoundaryModel boundary, String? tag, bool navigateToSummary) create, + required TResult Function(String userUuid, String projectId, + BoundaryModel boundary, String? tag, bool navigateToSummary) + summary, required TResult Function(String tag) validate, }) { return updateHouseholdDetails(household, addressModel, tag); @@ -1774,8 +1855,11 @@ class _$BeneficiaryRegistrationUpdateHouseholdDetailsEventImpl HouseholdModel householdModel, AddressModel addressModel)? updateIndividualDetails, TResult? Function(String userUuid, String projectId, BoundaryModel boundary, - String? tag)? + String? tag, bool navigateToSummary)? create, + TResult? Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + summary, TResult? Function(String tag)? validate, }) { return updateHouseholdDetails?.call(household, addressModel, tag); @@ -1806,8 +1890,11 @@ class _$BeneficiaryRegistrationUpdateHouseholdDetailsEventImpl HouseholdModel householdModel, AddressModel addressModel)? updateIndividualDetails, TResult Function(String userUuid, String projectId, BoundaryModel boundary, - String? tag)? + String? tag, bool navigateToSummary)? create, + TResult Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + summary, TResult Function(String tag)? validate, required TResult orElse(), }) { @@ -1840,6 +1927,8 @@ class _$BeneficiaryRegistrationUpdateHouseholdDetailsEventImpl BeneficiaryRegistrationUpdateIndividualDetailsEvent value) updateIndividualDetails, required TResult Function(BeneficiaryRegistrationCreateEvent value) create, + required TResult Function(BeneficiaryRegistrationSummaryEvent value) + summary, required TResult Function(BeneficiaryRegistrationTagEvent value) validate, }) { return updateHouseholdDetails(this); @@ -1863,6 +1952,7 @@ class _$BeneficiaryRegistrationUpdateHouseholdDetailsEventImpl BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult? Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult? Function(BeneficiaryRegistrationSummaryEvent value)? summary, TResult? Function(BeneficiaryRegistrationTagEvent value)? validate, }) { return updateHouseholdDetails?.call(this); @@ -1885,6 +1975,7 @@ class _$BeneficiaryRegistrationUpdateHouseholdDetailsEventImpl TResult Function(BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult Function(BeneficiaryRegistrationSummaryEvent value)? summary, TResult Function(BeneficiaryRegistrationTagEvent value)? validate, required TResult orElse(), }) { @@ -2051,8 +2142,11 @@ class _$BeneficiaryRegistrationUpdateIndividualDetailsEventImpl HouseholdModel householdModel, AddressModel addressModel) updateIndividualDetails, required TResult Function(String userUuid, String projectId, - BoundaryModel boundary, String? tag) + BoundaryModel boundary, String? tag, bool navigateToSummary) create, + required TResult Function(String userUuid, String projectId, + BoundaryModel boundary, String? tag, bool navigateToSummary) + summary, required TResult Function(String tag) validate, }) { return updateIndividualDetails(model, tag, householdModel, addressModel); @@ -2083,8 +2177,11 @@ class _$BeneficiaryRegistrationUpdateIndividualDetailsEventImpl HouseholdModel householdModel, AddressModel addressModel)? updateIndividualDetails, TResult? Function(String userUuid, String projectId, BoundaryModel boundary, - String? tag)? + String? tag, bool navigateToSummary)? create, + TResult? Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + summary, TResult? Function(String tag)? validate, }) { return updateIndividualDetails?.call( @@ -2116,8 +2213,11 @@ class _$BeneficiaryRegistrationUpdateIndividualDetailsEventImpl HouseholdModel householdModel, AddressModel addressModel)? updateIndividualDetails, TResult Function(String userUuid, String projectId, BoundaryModel boundary, - String? tag)? + String? tag, bool navigateToSummary)? create, + TResult Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + summary, TResult Function(String tag)? validate, required TResult orElse(), }) { @@ -2150,6 +2250,8 @@ class _$BeneficiaryRegistrationUpdateIndividualDetailsEventImpl BeneficiaryRegistrationUpdateIndividualDetailsEvent value) updateIndividualDetails, required TResult Function(BeneficiaryRegistrationCreateEvent value) create, + required TResult Function(BeneficiaryRegistrationSummaryEvent value) + summary, required TResult Function(BeneficiaryRegistrationTagEvent value) validate, }) { return updateIndividualDetails(this); @@ -2173,6 +2275,7 @@ class _$BeneficiaryRegistrationUpdateIndividualDetailsEventImpl BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult? Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult? Function(BeneficiaryRegistrationSummaryEvent value)? summary, TResult? Function(BeneficiaryRegistrationTagEvent value)? validate, }) { return updateIndividualDetails?.call(this); @@ -2195,6 +2298,7 @@ class _$BeneficiaryRegistrationUpdateIndividualDetailsEventImpl TResult Function(BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult Function(BeneficiaryRegistrationSummaryEvent value)? summary, TResult Function(BeneficiaryRegistrationTagEvent value)? validate, required TResult orElse(), }) { @@ -2232,7 +2336,11 @@ abstract class _$$BeneficiaryRegistrationCreateEventImplCopyWith<$Res> { __$$BeneficiaryRegistrationCreateEventImplCopyWithImpl<$Res>; @useResult $Res call( - {String userUuid, String projectId, BoundaryModel boundary, String? tag}); + {String userUuid, + String projectId, + BoundaryModel boundary, + String? tag, + bool navigateToSummary}); } /// @nodoc @@ -2252,6 +2360,7 @@ class __$$BeneficiaryRegistrationCreateEventImplCopyWithImpl<$Res> Object? projectId = null, Object? boundary = null, Object? tag = freezed, + Object? navigateToSummary = null, }) { return _then(_$BeneficiaryRegistrationCreateEventImpl( userUuid: null == userUuid @@ -2270,6 +2379,10 @@ class __$$BeneficiaryRegistrationCreateEventImplCopyWithImpl<$Res> ? _value.tag : tag // ignore: cast_nullable_to_non_nullable as String?, + navigateToSummary: null == navigateToSummary + ? _value.navigateToSummary + : navigateToSummary // ignore: cast_nullable_to_non_nullable + as bool, )); } } @@ -2282,7 +2395,8 @@ class _$BeneficiaryRegistrationCreateEventImpl {required this.userUuid, required this.projectId, required this.boundary, - this.tag}); + this.tag, + this.navigateToSummary = true}); @override final String userUuid; @@ -2292,10 +2406,13 @@ class _$BeneficiaryRegistrationCreateEventImpl final BoundaryModel boundary; @override final String? tag; + @override + @JsonKey() + final bool navigateToSummary; @override String toString() { - return 'BeneficiaryRegistrationEvent.create(userUuid: $userUuid, projectId: $projectId, boundary: $boundary, tag: $tag)'; + return 'BeneficiaryRegistrationEvent.create(userUuid: $userUuid, projectId: $projectId, boundary: $boundary, tag: $tag, navigateToSummary: $navigateToSummary)'; } @override @@ -2309,12 +2426,14 @@ class _$BeneficiaryRegistrationCreateEventImpl other.projectId == projectId) && (identical(other.boundary, boundary) || other.boundary == boundary) && - (identical(other.tag, tag) || other.tag == tag)); + (identical(other.tag, tag) || other.tag == tag) && + (identical(other.navigateToSummary, navigateToSummary) || + other.navigateToSummary == navigateToSummary)); } @override - int get hashCode => - Object.hash(runtimeType, userUuid, projectId, boundary, tag); + int get hashCode => Object.hash( + runtimeType, userUuid, projectId, boundary, tag, navigateToSummary); @JsonKey(ignore: true) @override @@ -2350,11 +2469,14 @@ class _$BeneficiaryRegistrationCreateEventImpl HouseholdModel householdModel, AddressModel addressModel) updateIndividualDetails, required TResult Function(String userUuid, String projectId, - BoundaryModel boundary, String? tag) + BoundaryModel boundary, String? tag, bool navigateToSummary) create, + required TResult Function(String userUuid, String projectId, + BoundaryModel boundary, String? tag, bool navigateToSummary) + summary, required TResult Function(String tag) validate, }) { - return create(userUuid, projectId, boundary, tag); + return create(userUuid, projectId, boundary, tag, navigateToSummary); } @override @@ -2382,11 +2504,14 @@ class _$BeneficiaryRegistrationCreateEventImpl HouseholdModel householdModel, AddressModel addressModel)? updateIndividualDetails, TResult? Function(String userUuid, String projectId, BoundaryModel boundary, - String? tag)? + String? tag, bool navigateToSummary)? create, + TResult? Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + summary, TResult? Function(String tag)? validate, }) { - return create?.call(userUuid, projectId, boundary, tag); + return create?.call(userUuid, projectId, boundary, tag, navigateToSummary); } @override @@ -2414,13 +2539,16 @@ class _$BeneficiaryRegistrationCreateEventImpl HouseholdModel householdModel, AddressModel addressModel)? updateIndividualDetails, TResult Function(String userUuid, String projectId, BoundaryModel boundary, - String? tag)? + String? tag, bool navigateToSummary)? create, + TResult Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + summary, TResult Function(String tag)? validate, required TResult orElse(), }) { if (create != null) { - return create(userUuid, projectId, boundary, tag); + return create(userUuid, projectId, boundary, tag, navigateToSummary); } return orElse(); } @@ -2448,6 +2576,8 @@ class _$BeneficiaryRegistrationCreateEventImpl BeneficiaryRegistrationUpdateIndividualDetailsEvent value) updateIndividualDetails, required TResult Function(BeneficiaryRegistrationCreateEvent value) create, + required TResult Function(BeneficiaryRegistrationSummaryEvent value) + summary, required TResult Function(BeneficiaryRegistrationTagEvent value) validate, }) { return create(this); @@ -2471,6 +2601,7 @@ class _$BeneficiaryRegistrationCreateEventImpl BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult? Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult? Function(BeneficiaryRegistrationSummaryEvent value)? summary, TResult? Function(BeneficiaryRegistrationTagEvent value)? validate, }) { return create?.call(this); @@ -2493,6 +2624,7 @@ class _$BeneficiaryRegistrationCreateEventImpl TResult Function(BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult Function(BeneficiaryRegistrationSummaryEvent value)? summary, TResult Function(BeneficiaryRegistrationTagEvent value)? validate, required TResult orElse(), }) { @@ -2509,12 +2641,14 @@ abstract class BeneficiaryRegistrationCreateEvent {required final String userUuid, required final String projectId, required final BoundaryModel boundary, - final String? tag}) = _$BeneficiaryRegistrationCreateEventImpl; + final String? tag, + final bool navigateToSummary}) = _$BeneficiaryRegistrationCreateEventImpl; String get userUuid; String get projectId; BoundaryModel get boundary; String? get tag; + bool get navigateToSummary; @JsonKey(ignore: true) _$$BeneficiaryRegistrationCreateEventImplCopyWith< _$BeneficiaryRegistrationCreateEventImpl> @@ -2522,71 +2656,119 @@ abstract class BeneficiaryRegistrationCreateEvent } /// @nodoc -abstract class _$$BeneficiaryRegistrationTagEventImplCopyWith<$Res> { - factory _$$BeneficiaryRegistrationTagEventImplCopyWith( - _$BeneficiaryRegistrationTagEventImpl value, - $Res Function(_$BeneficiaryRegistrationTagEventImpl) then) = - __$$BeneficiaryRegistrationTagEventImplCopyWithImpl<$Res>; +abstract class _$$BeneficiaryRegistrationSummaryEventImplCopyWith<$Res> { + factory _$$BeneficiaryRegistrationSummaryEventImplCopyWith( + _$BeneficiaryRegistrationSummaryEventImpl value, + $Res Function(_$BeneficiaryRegistrationSummaryEventImpl) then) = + __$$BeneficiaryRegistrationSummaryEventImplCopyWithImpl<$Res>; @useResult - $Res call({String tag}); + $Res call( + {String userUuid, + String projectId, + BoundaryModel boundary, + String? tag, + bool navigateToSummary}); } /// @nodoc -class __$$BeneficiaryRegistrationTagEventImplCopyWithImpl<$Res> +class __$$BeneficiaryRegistrationSummaryEventImplCopyWithImpl<$Res> extends _$BeneficiaryRegistrationEventCopyWithImpl<$Res, - _$BeneficiaryRegistrationTagEventImpl> - implements _$$BeneficiaryRegistrationTagEventImplCopyWith<$Res> { - __$$BeneficiaryRegistrationTagEventImplCopyWithImpl( - _$BeneficiaryRegistrationTagEventImpl _value, - $Res Function(_$BeneficiaryRegistrationTagEventImpl) _then) + _$BeneficiaryRegistrationSummaryEventImpl> + implements _$$BeneficiaryRegistrationSummaryEventImplCopyWith<$Res> { + __$$BeneficiaryRegistrationSummaryEventImplCopyWithImpl( + _$BeneficiaryRegistrationSummaryEventImpl _value, + $Res Function(_$BeneficiaryRegistrationSummaryEventImpl) _then) : super(_value, _then); @pragma('vm:prefer-inline') @override $Res call({ - Object? tag = null, + Object? userUuid = null, + Object? projectId = null, + Object? boundary = null, + Object? tag = freezed, + Object? navigateToSummary = null, }) { - return _then(_$BeneficiaryRegistrationTagEventImpl( - tag: null == tag + return _then(_$BeneficiaryRegistrationSummaryEventImpl( + userUuid: null == userUuid + ? _value.userUuid + : userUuid // ignore: cast_nullable_to_non_nullable + as String, + projectId: null == projectId + ? _value.projectId + : projectId // ignore: cast_nullable_to_non_nullable + as String, + boundary: null == boundary + ? _value.boundary + : boundary // ignore: cast_nullable_to_non_nullable + as BoundaryModel, + tag: freezed == tag ? _value.tag : tag // ignore: cast_nullable_to_non_nullable - as String, + as String?, + navigateToSummary: null == navigateToSummary + ? _value.navigateToSummary + : navigateToSummary // ignore: cast_nullable_to_non_nullable + as bool, )); } } /// @nodoc -class _$BeneficiaryRegistrationTagEventImpl - implements BeneficiaryRegistrationTagEvent { - const _$BeneficiaryRegistrationTagEventImpl({required this.tag}); +class _$BeneficiaryRegistrationSummaryEventImpl + implements BeneficiaryRegistrationSummaryEvent { + const _$BeneficiaryRegistrationSummaryEventImpl( + {required this.userUuid, + required this.projectId, + required this.boundary, + this.tag, + this.navigateToSummary = true}); @override - final String tag; + final String userUuid; + @override + final String projectId; + @override + final BoundaryModel boundary; + @override + final String? tag; + @override + @JsonKey() + final bool navigateToSummary; @override String toString() { - return 'BeneficiaryRegistrationEvent.validate(tag: $tag)'; + return 'BeneficiaryRegistrationEvent.summary(userUuid: $userUuid, projectId: $projectId, boundary: $boundary, tag: $tag, navigateToSummary: $navigateToSummary)'; } @override bool operator ==(Object other) { return identical(this, other) || (other.runtimeType == runtimeType && - other is _$BeneficiaryRegistrationTagEventImpl && - (identical(other.tag, tag) || other.tag == tag)); + other is _$BeneficiaryRegistrationSummaryEventImpl && + (identical(other.userUuid, userUuid) || + other.userUuid == userUuid) && + (identical(other.projectId, projectId) || + other.projectId == projectId) && + (identical(other.boundary, boundary) || + other.boundary == boundary) && + (identical(other.tag, tag) || other.tag == tag) && + (identical(other.navigateToSummary, navigateToSummary) || + other.navigateToSummary == navigateToSummary)); } @override - int get hashCode => Object.hash(runtimeType, tag); + int get hashCode => Object.hash( + runtimeType, userUuid, projectId, boundary, tag, navigateToSummary); @JsonKey(ignore: true) @override @pragma('vm:prefer-inline') - _$$BeneficiaryRegistrationTagEventImplCopyWith< - _$BeneficiaryRegistrationTagEventImpl> - get copyWith => __$$BeneficiaryRegistrationTagEventImplCopyWithImpl< - _$BeneficiaryRegistrationTagEventImpl>(this, _$identity); + _$$BeneficiaryRegistrationSummaryEventImplCopyWith< + _$BeneficiaryRegistrationSummaryEventImpl> + get copyWith => __$$BeneficiaryRegistrationSummaryEventImplCopyWithImpl< + _$BeneficiaryRegistrationSummaryEventImpl>(this, _$identity); @override @optionalTypeArgs @@ -2614,11 +2796,14 @@ class _$BeneficiaryRegistrationTagEventImpl HouseholdModel householdModel, AddressModel addressModel) updateIndividualDetails, required TResult Function(String userUuid, String projectId, - BoundaryModel boundary, String? tag) + BoundaryModel boundary, String? tag, bool navigateToSummary) create, + required TResult Function(String userUuid, String projectId, + BoundaryModel boundary, String? tag, bool navigateToSummary) + summary, required TResult Function(String tag) validate, }) { - return validate(tag); + return summary(userUuid, projectId, boundary, tag, navigateToSummary); } @override @@ -2646,11 +2831,14 @@ class _$BeneficiaryRegistrationTagEventImpl HouseholdModel householdModel, AddressModel addressModel)? updateIndividualDetails, TResult? Function(String userUuid, String projectId, BoundaryModel boundary, - String? tag)? + String? tag, bool navigateToSummary)? create, + TResult? Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + summary, TResult? Function(String tag)? validate, }) { - return validate?.call(tag); + return summary?.call(userUuid, projectId, boundary, tag, navigateToSummary); } @override @@ -2678,13 +2866,16 @@ class _$BeneficiaryRegistrationTagEventImpl HouseholdModel householdModel, AddressModel addressModel)? updateIndividualDetails, TResult Function(String userUuid, String projectId, BoundaryModel boundary, - String? tag)? + String? tag, bool navigateToSummary)? create, + TResult Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + summary, TResult Function(String tag)? validate, required TResult orElse(), }) { - if (validate != null) { - return validate(tag); + if (summary != null) { + return summary(userUuid, projectId, boundary, tag, navigateToSummary); } return orElse(); } @@ -2712,9 +2903,11 @@ class _$BeneficiaryRegistrationTagEventImpl BeneficiaryRegistrationUpdateIndividualDetailsEvent value) updateIndividualDetails, required TResult Function(BeneficiaryRegistrationCreateEvent value) create, + required TResult Function(BeneficiaryRegistrationSummaryEvent value) + summary, required TResult Function(BeneficiaryRegistrationTagEvent value) validate, }) { - return validate(this); + return summary(this); } @override @@ -2735,9 +2928,10 @@ class _$BeneficiaryRegistrationTagEventImpl BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult? Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult? Function(BeneficiaryRegistrationSummaryEvent value)? summary, TResult? Function(BeneficiaryRegistrationTagEvent value)? validate, }) { - return validate?.call(this); + return summary?.call(this); } @override @@ -2757,71 +2951,364 @@ class _$BeneficiaryRegistrationTagEventImpl TResult Function(BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult Function(BeneficiaryRegistrationSummaryEvent value)? summary, TResult Function(BeneficiaryRegistrationTagEvent value)? validate, required TResult orElse(), }) { - if (validate != null) { - return validate(this); + if (summary != null) { + return summary(this); } return orElse(); } } -abstract class BeneficiaryRegistrationTagEvent +abstract class BeneficiaryRegistrationSummaryEvent implements BeneficiaryRegistrationEvent { - const factory BeneficiaryRegistrationTagEvent({required final String tag}) = - _$BeneficiaryRegistrationTagEventImpl; + const factory BeneficiaryRegistrationSummaryEvent( + {required final String userUuid, + required final String projectId, + required final BoundaryModel boundary, + final String? tag, + final bool navigateToSummary}) = + _$BeneficiaryRegistrationSummaryEventImpl; - String get tag; + String get userUuid; + String get projectId; + BoundaryModel get boundary; + String? get tag; + bool get navigateToSummary; @JsonKey(ignore: true) - _$$BeneficiaryRegistrationTagEventImplCopyWith< - _$BeneficiaryRegistrationTagEventImpl> + _$$BeneficiaryRegistrationSummaryEventImplCopyWith< + _$BeneficiaryRegistrationSummaryEventImpl> get copyWith => throw _privateConstructorUsedError; } /// @nodoc -mixin _$BeneficiaryRegistrationState { - HouseholdModel? get householdModel => throw _privateConstructorUsedError; +abstract class _$$BeneficiaryRegistrationTagEventImplCopyWith<$Res> { + factory _$$BeneficiaryRegistrationTagEventImplCopyWith( + _$BeneficiaryRegistrationTagEventImpl value, + $Res Function(_$BeneficiaryRegistrationTagEventImpl) then) = + __$$BeneficiaryRegistrationTagEventImplCopyWithImpl<$Res>; + @useResult + $Res call({String tag}); +} + +/// @nodoc +class __$$BeneficiaryRegistrationTagEventImplCopyWithImpl<$Res> + extends _$BeneficiaryRegistrationEventCopyWithImpl<$Res, + _$BeneficiaryRegistrationTagEventImpl> + implements _$$BeneficiaryRegistrationTagEventImplCopyWith<$Res> { + __$$BeneficiaryRegistrationTagEventImplCopyWithImpl( + _$BeneficiaryRegistrationTagEventImpl _value, + $Res Function(_$BeneficiaryRegistrationTagEventImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? tag = null, + }) { + return _then(_$BeneficiaryRegistrationTagEventImpl( + tag: null == tag + ? _value.tag + : tag // ignore: cast_nullable_to_non_nullable + as String, + )); + } +} + +/// @nodoc + +class _$BeneficiaryRegistrationTagEventImpl + implements BeneficiaryRegistrationTagEvent { + const _$BeneficiaryRegistrationTagEventImpl({required this.tag}); + + @override + final String tag; + + @override + String toString() { + return 'BeneficiaryRegistrationEvent.validate(tag: $tag)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$BeneficiaryRegistrationTagEventImpl && + (identical(other.tag, tag) || other.tag == tag)); + } + + @override + int get hashCode => Object.hash(runtimeType, tag); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$BeneficiaryRegistrationTagEventImplCopyWith< + _$BeneficiaryRegistrationTagEventImpl> + get copyWith => __$$BeneficiaryRegistrationTagEventImplCopyWithImpl< + _$BeneficiaryRegistrationTagEventImpl>(this, _$identity); + + @override @optionalTypeArgs TResult when({ + required TResult Function(AddressModel model) saveAddress, + required TResult Function(HouseholdModel model) saveHouseDetails, required TResult Function( - AddressModel? addressModel, - HouseholdModel? householdModel, - IndividualModel? individualModel, - DateTime? registrationDate, - String? searchQuery, - bool loading, - bool isHeadOfHousehold) - create, - required TResult Function( - AddressModel addressModel, - HouseholdModel householdModel, - List individualModel, - DateTime registrationDate, - ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading) - editHousehold, + HouseholdModel household, DateTime registrationDate) + saveHouseholdDetails, + required TResult Function(IndividualModel model, bool isHeadOfHousehold) + saveIndividualDetails, required TResult Function( HouseholdModel householdModel, IndividualModel individualModel, AddressModel addressModel, - ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading) - editIndividual, - required TResult Function(AddressModel addressModel, - HouseholdModel householdModel, bool loading) + String userUuid, + String projectId, + String? tag, + BeneficiaryType beneficiaryType) addMember, required TResult Function( - bool navigateToRoot, HouseholdModel householdModel) - persisted, - }) => - throw _privateConstructorUsedError; + HouseholdModel household, AddressModel? addressModel, String? tag) + updateHouseholdDetails, + required TResult Function(IndividualModel model, String? tag, + HouseholdModel householdModel, AddressModel addressModel) + updateIndividualDetails, + required TResult Function(String userUuid, String projectId, + BoundaryModel boundary, String? tag, bool navigateToSummary) + create, + required TResult Function(String userUuid, String projectId, + BoundaryModel boundary, String? tag, bool navigateToSummary) + summary, + required TResult Function(String tag) validate, + }) { + return validate(tag); + } + + @override @optionalTypeArgs TResult? whenOrNull({ + TResult? Function(AddressModel model)? saveAddress, + TResult? Function(HouseholdModel model)? saveHouseDetails, + TResult? Function(HouseholdModel household, DateTime registrationDate)? + saveHouseholdDetails, + TResult? Function(IndividualModel model, bool isHeadOfHousehold)? + saveIndividualDetails, TResult? Function( - AddressModel? addressModel, + HouseholdModel householdModel, + IndividualModel individualModel, + AddressModel addressModel, + String userUuid, + String projectId, + String? tag, + BeneficiaryType beneficiaryType)? + addMember, + TResult? Function( + HouseholdModel household, AddressModel? addressModel, String? tag)? + updateHouseholdDetails, + TResult? Function(IndividualModel model, String? tag, + HouseholdModel householdModel, AddressModel addressModel)? + updateIndividualDetails, + TResult? Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + create, + TResult? Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + summary, + TResult? Function(String tag)? validate, + }) { + return validate?.call(tag); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function(AddressModel model)? saveAddress, + TResult Function(HouseholdModel model)? saveHouseDetails, + TResult Function(HouseholdModel household, DateTime registrationDate)? + saveHouseholdDetails, + TResult Function(IndividualModel model, bool isHeadOfHousehold)? + saveIndividualDetails, + TResult Function( + HouseholdModel householdModel, + IndividualModel individualModel, + AddressModel addressModel, + String userUuid, + String projectId, + String? tag, + BeneficiaryType beneficiaryType)? + addMember, + TResult Function( + HouseholdModel household, AddressModel? addressModel, String? tag)? + updateHouseholdDetails, + TResult Function(IndividualModel model, String? tag, + HouseholdModel householdModel, AddressModel addressModel)? + updateIndividualDetails, + TResult Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + create, + TResult Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag, bool navigateToSummary)? + summary, + TResult Function(String tag)? validate, + required TResult orElse(), + }) { + if (validate != null) { + return validate(tag); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(BeneficiaryRegistrationSaveAddressEvent value) + saveAddress, + required TResult Function( + BeneficiaryRegistrationSaveHouseDetailsEvent value) + saveHouseDetails, + required TResult Function( + BeneficiaryRegistrationSaveHouseholdDetailsEvent value) + saveHouseholdDetails, + required TResult Function( + BeneficiaryRegistrationSaveIndividualDetailsEvent value) + saveIndividualDetails, + required TResult Function(BeneficiaryRegistrationAddMemberEvent value) + addMember, + required TResult Function( + BeneficiaryRegistrationUpdateHouseholdDetailsEvent value) + updateHouseholdDetails, + required TResult Function( + BeneficiaryRegistrationUpdateIndividualDetailsEvent value) + updateIndividualDetails, + required TResult Function(BeneficiaryRegistrationCreateEvent value) create, + required TResult Function(BeneficiaryRegistrationSummaryEvent value) + summary, + required TResult Function(BeneficiaryRegistrationTagEvent value) validate, + }) { + return validate(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(BeneficiaryRegistrationSaveAddressEvent value)? + saveAddress, + TResult? Function(BeneficiaryRegistrationSaveHouseDetailsEvent value)? + saveHouseDetails, + TResult? Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? + saveHouseholdDetails, + TResult? Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? + saveIndividualDetails, + TResult? Function(BeneficiaryRegistrationAddMemberEvent value)? addMember, + TResult? Function(BeneficiaryRegistrationUpdateHouseholdDetailsEvent value)? + updateHouseholdDetails, + TResult? Function( + BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? + updateIndividualDetails, + TResult? Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult? Function(BeneficiaryRegistrationSummaryEvent value)? summary, + TResult? Function(BeneficiaryRegistrationTagEvent value)? validate, + }) { + return validate?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(BeneficiaryRegistrationSaveAddressEvent value)? + saveAddress, + TResult Function(BeneficiaryRegistrationSaveHouseDetailsEvent value)? + saveHouseDetails, + TResult Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? + saveHouseholdDetails, + TResult Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? + saveIndividualDetails, + TResult Function(BeneficiaryRegistrationAddMemberEvent value)? addMember, + TResult Function(BeneficiaryRegistrationUpdateHouseholdDetailsEvent value)? + updateHouseholdDetails, + TResult Function(BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? + updateIndividualDetails, + TResult Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult Function(BeneficiaryRegistrationSummaryEvent value)? summary, + TResult Function(BeneficiaryRegistrationTagEvent value)? validate, + required TResult orElse(), + }) { + if (validate != null) { + return validate(this); + } + return orElse(); + } +} + +abstract class BeneficiaryRegistrationTagEvent + implements BeneficiaryRegistrationEvent { + const factory BeneficiaryRegistrationTagEvent({required final String tag}) = + _$BeneficiaryRegistrationTagEventImpl; + + String get tag; + @JsonKey(ignore: true) + _$$BeneficiaryRegistrationTagEventImplCopyWith< + _$BeneficiaryRegistrationTagEventImpl> + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +mixin _$BeneficiaryRegistrationState { + HouseholdModel? get householdModel => throw _privateConstructorUsedError; + @optionalTypeArgs + TResult when({ + required TResult Function( + AddressModel? addressModel, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + String? searchQuery, + bool loading, + bool isHeadOfHousehold) + create, + required TResult Function( + AddressModel addressModel, + HouseholdModel householdModel, + List individualModel, + DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, + bool loading) + editHousehold, + required TResult Function( + HouseholdModel householdModel, + IndividualModel individualModel, + AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + bool loading) + editIndividual, + required TResult Function(AddressModel addressModel, + HouseholdModel householdModel, bool loading) + addMember, + required TResult Function( + bool navigateToRoot, HouseholdModel householdModel) + persisted, + required TResult Function( + bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold) + summary, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function( + AddressModel? addressModel, HouseholdModel? householdModel, IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, bool loading, @@ -2847,6 +3334,16 @@ mixin _$BeneficiaryRegistrationState { addMember, TResult? Function(bool navigateToRoot, HouseholdModel householdModel)? persisted, + TResult? Function( + bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? + summary, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -2855,6 +3352,7 @@ mixin _$BeneficiaryRegistrationState { AddressModel? addressModel, HouseholdModel? householdModel, IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, bool loading, @@ -2880,6 +3378,16 @@ mixin _$BeneficiaryRegistrationState { addMember, TResult Function(bool navigateToRoot, HouseholdModel householdModel)? persisted, + TResult Function( + bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? + summary, required TResult orElse(), }) => throw _privateConstructorUsedError; @@ -2894,6 +3402,8 @@ mixin _$BeneficiaryRegistrationState { addMember, required TResult Function(BeneficiaryRegistrationPersistedState value) persisted, + required TResult Function(BeneficiaryRegistrationSummaryState value) + summary, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -2905,6 +3415,7 @@ mixin _$BeneficiaryRegistrationState { editIndividual, TResult? Function(BeneficiaryRegistrationAddMemberState value)? addMember, TResult? Function(BeneficiaryRegistrationPersistedState value)? persisted, + TResult? Function(BeneficiaryRegistrationSummaryState value)? summary, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -2916,6 +3427,7 @@ mixin _$BeneficiaryRegistrationState { editIndividual, TResult Function(BeneficiaryRegistrationAddMemberState value)? addMember, TResult Function(BeneficiaryRegistrationPersistedState value)? persisted, + TResult Function(BeneficiaryRegistrationSummaryState value)? summary, required TResult orElse(), }) => throw _privateConstructorUsedError; @@ -2974,6 +3486,7 @@ abstract class _$$BeneficiaryRegistrationCreateStateImplCopyWith<$Res> {AddressModel? addressModel, HouseholdModel? householdModel, IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, bool loading, @@ -2996,6 +3509,7 @@ class __$$BeneficiaryRegistrationCreateStateImplCopyWithImpl<$Res> Object? addressModel = freezed, Object? householdModel = freezed, Object? individualModel = freezed, + Object? projectBeneficiaryModel = freezed, Object? registrationDate = freezed, Object? searchQuery = freezed, Object? loading = null, @@ -3014,6 +3528,10 @@ class __$$BeneficiaryRegistrationCreateStateImplCopyWithImpl<$Res> ? _value.individualModel : individualModel // ignore: cast_nullable_to_non_nullable as IndividualModel?, + projectBeneficiaryModel: freezed == projectBeneficiaryModel + ? _value.projectBeneficiaryModel + : projectBeneficiaryModel // ignore: cast_nullable_to_non_nullable + as ProjectBeneficiaryModel?, registrationDate: freezed == registrationDate ? _value.registrationDate : registrationDate // ignore: cast_nullable_to_non_nullable @@ -3042,6 +3560,7 @@ class _$BeneficiaryRegistrationCreateStateImpl {this.addressModel, this.householdModel, this.individualModel, + this.projectBeneficiaryModel, this.registrationDate, this.searchQuery, this.loading = false, @@ -3054,6 +3573,8 @@ class _$BeneficiaryRegistrationCreateStateImpl @override final IndividualModel? individualModel; @override + final ProjectBeneficiaryModel? projectBeneficiaryModel; + @override final DateTime? registrationDate; @override final String? searchQuery; @@ -3066,7 +3587,7 @@ class _$BeneficiaryRegistrationCreateStateImpl @override String toString() { - return 'BeneficiaryRegistrationState.create(addressModel: $addressModel, householdModel: $householdModel, individualModel: $individualModel, registrationDate: $registrationDate, searchQuery: $searchQuery, loading: $loading, isHeadOfHousehold: $isHeadOfHousehold)'; + return 'BeneficiaryRegistrationState.create(addressModel: $addressModel, householdModel: $householdModel, individualModel: $individualModel, projectBeneficiaryModel: $projectBeneficiaryModel, registrationDate: $registrationDate, searchQuery: $searchQuery, loading: $loading, isHeadOfHousehold: $isHeadOfHousehold)'; } @override @@ -3080,6 +3601,9 @@ class _$BeneficiaryRegistrationCreateStateImpl other.householdModel == householdModel) && (identical(other.individualModel, individualModel) || other.individualModel == individualModel) && + (identical( + other.projectBeneficiaryModel, projectBeneficiaryModel) || + other.projectBeneficiaryModel == projectBeneficiaryModel) && (identical(other.registrationDate, registrationDate) || other.registrationDate == registrationDate) && (identical(other.searchQuery, searchQuery) || @@ -3095,6 +3619,7 @@ class _$BeneficiaryRegistrationCreateStateImpl addressModel, householdModel, individualModel, + projectBeneficiaryModel, registrationDate, searchQuery, loading, @@ -3115,6 +3640,7 @@ class _$BeneficiaryRegistrationCreateStateImpl AddressModel? addressModel, HouseholdModel? householdModel, IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, bool loading, @@ -3141,9 +3667,26 @@ class _$BeneficiaryRegistrationCreateStateImpl required TResult Function( bool navigateToRoot, HouseholdModel householdModel) persisted, + required TResult Function( + bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold) + summary, }) { - return create(addressModel, householdModel, individualModel, - registrationDate, searchQuery, loading, isHeadOfHousehold); + return create( + addressModel, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + searchQuery, + loading, + isHeadOfHousehold); } @override @@ -3153,6 +3696,7 @@ class _$BeneficiaryRegistrationCreateStateImpl AddressModel? addressModel, HouseholdModel? householdModel, IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, bool loading, @@ -3178,9 +3722,26 @@ class _$BeneficiaryRegistrationCreateStateImpl addMember, TResult? Function(bool navigateToRoot, HouseholdModel householdModel)? persisted, + TResult? Function( + bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? + summary, }) { - return create?.call(addressModel, householdModel, individualModel, - registrationDate, searchQuery, loading, isHeadOfHousehold); + return create?.call( + addressModel, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + searchQuery, + loading, + isHeadOfHousehold); } @override @@ -3190,6 +3751,7 @@ class _$BeneficiaryRegistrationCreateStateImpl AddressModel? addressModel, HouseholdModel? householdModel, IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, bool loading, @@ -3215,11 +3777,28 @@ class _$BeneficiaryRegistrationCreateStateImpl addMember, TResult Function(bool navigateToRoot, HouseholdModel householdModel)? persisted, + TResult Function( + bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? + summary, required TResult orElse(), }) { if (create != null) { - return create(addressModel, householdModel, individualModel, - registrationDate, searchQuery, loading, isHeadOfHousehold); + return create( + addressModel, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + searchQuery, + loading, + isHeadOfHousehold); } return orElse(); } @@ -3236,6 +3815,8 @@ class _$BeneficiaryRegistrationCreateStateImpl addMember, required TResult Function(BeneficiaryRegistrationPersistedState value) persisted, + required TResult Function(BeneficiaryRegistrationSummaryState value) + summary, }) { return create(this); } @@ -3250,6 +3831,7 @@ class _$BeneficiaryRegistrationCreateStateImpl editIndividual, TResult? Function(BeneficiaryRegistrationAddMemberState value)? addMember, TResult? Function(BeneficiaryRegistrationPersistedState value)? persisted, + TResult? Function(BeneficiaryRegistrationSummaryState value)? summary, }) { return create?.call(this); } @@ -3264,6 +3846,7 @@ class _$BeneficiaryRegistrationCreateStateImpl editIndividual, TResult Function(BeneficiaryRegistrationAddMemberState value)? addMember, TResult Function(BeneficiaryRegistrationPersistedState value)? persisted, + TResult Function(BeneficiaryRegistrationSummaryState value)? summary, required TResult orElse(), }) { if (create != null) { @@ -3279,6 +3862,7 @@ abstract class BeneficiaryRegistrationCreateState {final AddressModel? addressModel, final HouseholdModel? householdModel, final IndividualModel? individualModel, + final ProjectBeneficiaryModel? projectBeneficiaryModel, final DateTime? registrationDate, final String? searchQuery, final bool loading, @@ -3288,6 +3872,7 @@ abstract class BeneficiaryRegistrationCreateState @override HouseholdModel? get householdModel; IndividualModel? get individualModel; + ProjectBeneficiaryModel? get projectBeneficiaryModel; DateTime? get registrationDate; String? get searchQuery; bool get loading; @@ -3450,6 +4035,7 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl AddressModel? addressModel, HouseholdModel? householdModel, IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, bool loading, @@ -3476,6 +4062,16 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl required TResult Function( bool navigateToRoot, HouseholdModel householdModel) persisted, + required TResult Function( + bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold) + summary, }) { return editHousehold(addressModel, householdModel, individualModel, registrationDate, projectBeneficiaryModel, loading); @@ -3488,6 +4084,7 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl AddressModel? addressModel, HouseholdModel? householdModel, IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, bool loading, @@ -3513,6 +4110,16 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl addMember, TResult? Function(bool navigateToRoot, HouseholdModel householdModel)? persisted, + TResult? Function( + bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? + summary, }) { return editHousehold?.call(addressModel, householdModel, individualModel, registrationDate, projectBeneficiaryModel, loading); @@ -3525,6 +4132,7 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl AddressModel? addressModel, HouseholdModel? householdModel, IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, bool loading, @@ -3550,6 +4158,16 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl addMember, TResult Function(bool navigateToRoot, HouseholdModel householdModel)? persisted, + TResult Function( + bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? + summary, required TResult orElse(), }) { if (editHousehold != null) { @@ -3571,6 +4189,8 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl addMember, required TResult Function(BeneficiaryRegistrationPersistedState value) persisted, + required TResult Function(BeneficiaryRegistrationSummaryState value) + summary, }) { return editHousehold(this); } @@ -3585,6 +4205,7 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl editIndividual, TResult? Function(BeneficiaryRegistrationAddMemberState value)? addMember, TResult? Function(BeneficiaryRegistrationPersistedState value)? persisted, + TResult? Function(BeneficiaryRegistrationSummaryState value)? summary, }) { return editHousehold?.call(this); } @@ -3599,6 +4220,7 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl editIndividual, TResult Function(BeneficiaryRegistrationAddMemberState value)? addMember, TResult Function(BeneficiaryRegistrationPersistedState value)? persisted, + TResult Function(BeneficiaryRegistrationSummaryState value)? summary, required TResult orElse(), }) { if (editHousehold != null) { @@ -3760,6 +4382,7 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl AddressModel? addressModel, HouseholdModel? householdModel, IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, bool loading, @@ -3786,6 +4409,16 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl required TResult Function( bool navigateToRoot, HouseholdModel householdModel) persisted, + required TResult Function( + bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold) + summary, }) { return editIndividual(householdModel, individualModel, addressModel, projectBeneficiaryModel, loading); @@ -3798,6 +4431,7 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl AddressModel? addressModel, HouseholdModel? householdModel, IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, bool loading, @@ -3823,6 +4457,16 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl addMember, TResult? Function(bool navigateToRoot, HouseholdModel householdModel)? persisted, + TResult? Function( + bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? + summary, }) { return editIndividual?.call(householdModel, individualModel, addressModel, projectBeneficiaryModel, loading); @@ -3835,6 +4479,7 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl AddressModel? addressModel, HouseholdModel? householdModel, IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, bool loading, @@ -3860,6 +4505,16 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl addMember, TResult Function(bool navigateToRoot, HouseholdModel householdModel)? persisted, + TResult Function( + bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? + summary, required TResult orElse(), }) { if (editIndividual != null) { @@ -3881,6 +4536,8 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl addMember, required TResult Function(BeneficiaryRegistrationPersistedState value) persisted, + required TResult Function(BeneficiaryRegistrationSummaryState value) + summary, }) { return editIndividual(this); } @@ -3895,6 +4552,7 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl editIndividual, TResult? Function(BeneficiaryRegistrationAddMemberState value)? addMember, TResult? Function(BeneficiaryRegistrationPersistedState value)? persisted, + TResult? Function(BeneficiaryRegistrationSummaryState value)? summary, }) { return editIndividual?.call(this); } @@ -3909,6 +4567,7 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl editIndividual, TResult Function(BeneficiaryRegistrationAddMemberState value)? addMember, TResult Function(BeneficiaryRegistrationPersistedState value)? persisted, + TResult Function(BeneficiaryRegistrationSummaryState value)? summary, required TResult orElse(), }) { if (editIndividual != null) { @@ -4040,6 +4699,7 @@ class _$BeneficiaryRegistrationAddMemberStateImpl AddressModel? addressModel, HouseholdModel? householdModel, IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, bool loading, @@ -4066,6 +4726,16 @@ class _$BeneficiaryRegistrationAddMemberStateImpl required TResult Function( bool navigateToRoot, HouseholdModel householdModel) persisted, + required TResult Function( + bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold) + summary, }) { return addMember(addressModel, householdModel, loading); } @@ -4077,6 +4747,7 @@ class _$BeneficiaryRegistrationAddMemberStateImpl AddressModel? addressModel, HouseholdModel? householdModel, IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, bool loading, @@ -4102,6 +4773,16 @@ class _$BeneficiaryRegistrationAddMemberStateImpl addMember, TResult? Function(bool navigateToRoot, HouseholdModel householdModel)? persisted, + TResult? Function( + bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? + summary, }) { return addMember?.call(addressModel, householdModel, loading); } @@ -4113,6 +4794,7 @@ class _$BeneficiaryRegistrationAddMemberStateImpl AddressModel? addressModel, HouseholdModel? householdModel, IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, bool loading, @@ -4138,6 +4820,16 @@ class _$BeneficiaryRegistrationAddMemberStateImpl addMember, TResult Function(bool navigateToRoot, HouseholdModel householdModel)? persisted, + TResult Function( + bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? + summary, required TResult orElse(), }) { if (addMember != null) { @@ -4158,6 +4850,8 @@ class _$BeneficiaryRegistrationAddMemberStateImpl addMember, required TResult Function(BeneficiaryRegistrationPersistedState value) persisted, + required TResult Function(BeneficiaryRegistrationSummaryState value) + summary, }) { return addMember(this); } @@ -4172,6 +4866,7 @@ class _$BeneficiaryRegistrationAddMemberStateImpl editIndividual, TResult? Function(BeneficiaryRegistrationAddMemberState value)? addMember, TResult? Function(BeneficiaryRegistrationPersistedState value)? persisted, + TResult? Function(BeneficiaryRegistrationSummaryState value)? summary, }) { return addMember?.call(this); } @@ -4186,6 +4881,7 @@ class _$BeneficiaryRegistrationAddMemberStateImpl editIndividual, TResult Function(BeneficiaryRegistrationAddMemberState value)? addMember, TResult Function(BeneficiaryRegistrationPersistedState value)? persisted, + TResult Function(BeneficiaryRegistrationSummaryState value)? summary, required TResult orElse(), }) { if (addMember != null) { @@ -4301,6 +4997,7 @@ class _$BeneficiaryRegistrationPersistedStateImpl AddressModel? addressModel, HouseholdModel? householdModel, IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, bool loading, @@ -4327,6 +5024,16 @@ class _$BeneficiaryRegistrationPersistedStateImpl required TResult Function( bool navigateToRoot, HouseholdModel householdModel) persisted, + required TResult Function( + bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold) + summary, }) { return persisted(navigateToRoot, householdModel); } @@ -4338,6 +5045,7 @@ class _$BeneficiaryRegistrationPersistedStateImpl AddressModel? addressModel, HouseholdModel? householdModel, IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, bool loading, @@ -4363,6 +5071,16 @@ class _$BeneficiaryRegistrationPersistedStateImpl addMember, TResult? Function(bool navigateToRoot, HouseholdModel householdModel)? persisted, + TResult? Function( + bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? + summary, }) { return persisted?.call(navigateToRoot, householdModel); } @@ -4374,6 +5092,7 @@ class _$BeneficiaryRegistrationPersistedStateImpl AddressModel? addressModel, HouseholdModel? householdModel, IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, bool loading, @@ -4399,6 +5118,16 @@ class _$BeneficiaryRegistrationPersistedStateImpl addMember, TResult Function(bool navigateToRoot, HouseholdModel householdModel)? persisted, + TResult Function( + bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? + summary, required TResult orElse(), }) { if (persisted != null) { @@ -4419,6 +5148,8 @@ class _$BeneficiaryRegistrationPersistedStateImpl addMember, required TResult Function(BeneficiaryRegistrationPersistedState value) persisted, + required TResult Function(BeneficiaryRegistrationSummaryState value) + summary, }) { return persisted(this); } @@ -4433,6 +5164,7 @@ class _$BeneficiaryRegistrationPersistedStateImpl editIndividual, TResult? Function(BeneficiaryRegistrationAddMemberState value)? addMember, TResult? Function(BeneficiaryRegistrationPersistedState value)? persisted, + TResult? Function(BeneficiaryRegistrationSummaryState value)? summary, }) { return persisted?.call(this); } @@ -4447,6 +5179,7 @@ class _$BeneficiaryRegistrationPersistedStateImpl editIndividual, TResult Function(BeneficiaryRegistrationAddMemberState value)? addMember, TResult Function(BeneficiaryRegistrationPersistedState value)? persisted, + TResult Function(BeneficiaryRegistrationSummaryState value)? summary, required TResult orElse(), }) { if (persisted != null) { @@ -4472,3 +5205,416 @@ abstract class BeneficiaryRegistrationPersistedState _$BeneficiaryRegistrationPersistedStateImpl> get copyWith => throw _privateConstructorUsedError; } + +/// @nodoc +abstract class _$$BeneficiaryRegistrationSummaryStateImplCopyWith<$Res> + implements $BeneficiaryRegistrationStateCopyWith<$Res> { + factory _$$BeneficiaryRegistrationSummaryStateImplCopyWith( + _$BeneficiaryRegistrationSummaryStateImpl value, + $Res Function(_$BeneficiaryRegistrationSummaryStateImpl) then) = + __$$BeneficiaryRegistrationSummaryStateImplCopyWithImpl<$Res>; + @override + @useResult + $Res call( + {bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold}); +} + +/// @nodoc +class __$$BeneficiaryRegistrationSummaryStateImplCopyWithImpl<$Res> + extends _$BeneficiaryRegistrationStateCopyWithImpl<$Res, + _$BeneficiaryRegistrationSummaryStateImpl> + implements _$$BeneficiaryRegistrationSummaryStateImplCopyWith<$Res> { + __$$BeneficiaryRegistrationSummaryStateImplCopyWithImpl( + _$BeneficiaryRegistrationSummaryStateImpl _value, + $Res Function(_$BeneficiaryRegistrationSummaryStateImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? navigateToRoot = null, + Object? householdModel = freezed, + Object? individualModel = freezed, + Object? projectBeneficiaryModel = freezed, + Object? registrationDate = freezed, + Object? addressModel = freezed, + Object? loading = null, + Object? isHeadOfHousehold = null, + }) { + return _then(_$BeneficiaryRegistrationSummaryStateImpl( + navigateToRoot: null == navigateToRoot + ? _value.navigateToRoot + : navigateToRoot // ignore: cast_nullable_to_non_nullable + as bool, + householdModel: freezed == householdModel + ? _value.householdModel + : householdModel // ignore: cast_nullable_to_non_nullable + as HouseholdModel?, + individualModel: freezed == individualModel + ? _value.individualModel + : individualModel // ignore: cast_nullable_to_non_nullable + as IndividualModel?, + projectBeneficiaryModel: freezed == projectBeneficiaryModel + ? _value.projectBeneficiaryModel + : projectBeneficiaryModel // ignore: cast_nullable_to_non_nullable + as ProjectBeneficiaryModel?, + registrationDate: freezed == registrationDate + ? _value.registrationDate + : registrationDate // ignore: cast_nullable_to_non_nullable + as DateTime?, + addressModel: freezed == addressModel + ? _value.addressModel + : addressModel // ignore: cast_nullable_to_non_nullable + as AddressModel?, + loading: null == loading + ? _value.loading + : loading // ignore: cast_nullable_to_non_nullable + as bool, + isHeadOfHousehold: null == isHeadOfHousehold + ? _value.isHeadOfHousehold + : isHeadOfHousehold // ignore: cast_nullable_to_non_nullable + as bool, + )); + } +} + +/// @nodoc + +class _$BeneficiaryRegistrationSummaryStateImpl + implements BeneficiaryRegistrationSummaryState { + const _$BeneficiaryRegistrationSummaryStateImpl( + {this.navigateToRoot = true, + this.householdModel, + this.individualModel, + this.projectBeneficiaryModel, + this.registrationDate, + this.addressModel, + this.loading = false, + this.isHeadOfHousehold = false}); + + @override + @JsonKey() + final bool navigateToRoot; + @override + final HouseholdModel? householdModel; + @override + final IndividualModel? individualModel; + @override + final ProjectBeneficiaryModel? projectBeneficiaryModel; + @override + final DateTime? registrationDate; + @override + final AddressModel? addressModel; + @override + @JsonKey() + final bool loading; + @override + @JsonKey() + final bool isHeadOfHousehold; + + @override + String toString() { + return 'BeneficiaryRegistrationState.summary(navigateToRoot: $navigateToRoot, householdModel: $householdModel, individualModel: $individualModel, projectBeneficiaryModel: $projectBeneficiaryModel, registrationDate: $registrationDate, addressModel: $addressModel, loading: $loading, isHeadOfHousehold: $isHeadOfHousehold)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$BeneficiaryRegistrationSummaryStateImpl && + (identical(other.navigateToRoot, navigateToRoot) || + other.navigateToRoot == navigateToRoot) && + (identical(other.householdModel, householdModel) || + other.householdModel == householdModel) && + (identical(other.individualModel, individualModel) || + other.individualModel == individualModel) && + (identical( + other.projectBeneficiaryModel, projectBeneficiaryModel) || + other.projectBeneficiaryModel == projectBeneficiaryModel) && + (identical(other.registrationDate, registrationDate) || + other.registrationDate == registrationDate) && + (identical(other.addressModel, addressModel) || + other.addressModel == addressModel) && + (identical(other.loading, loading) || other.loading == loading) && + (identical(other.isHeadOfHousehold, isHeadOfHousehold) || + other.isHeadOfHousehold == isHeadOfHousehold)); + } + + @override + int get hashCode => Object.hash( + runtimeType, + navigateToRoot, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + addressModel, + loading, + isHeadOfHousehold); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$BeneficiaryRegistrationSummaryStateImplCopyWith< + _$BeneficiaryRegistrationSummaryStateImpl> + get copyWith => __$$BeneficiaryRegistrationSummaryStateImplCopyWithImpl< + _$BeneficiaryRegistrationSummaryStateImpl>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function( + AddressModel? addressModel, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + String? searchQuery, + bool loading, + bool isHeadOfHousehold) + create, + required TResult Function( + AddressModel addressModel, + HouseholdModel householdModel, + List individualModel, + DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, + bool loading) + editHousehold, + required TResult Function( + HouseholdModel householdModel, + IndividualModel individualModel, + AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + bool loading) + editIndividual, + required TResult Function(AddressModel addressModel, + HouseholdModel householdModel, bool loading) + addMember, + required TResult Function( + bool navigateToRoot, HouseholdModel householdModel) + persisted, + required TResult Function( + bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold) + summary, + }) { + return summary( + navigateToRoot, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + addressModel, + loading, + isHeadOfHousehold); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function( + AddressModel? addressModel, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + String? searchQuery, + bool loading, + bool isHeadOfHousehold)? + create, + TResult? Function( + AddressModel addressModel, + HouseholdModel householdModel, + List individualModel, + DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, + bool loading)? + editHousehold, + TResult? Function( + HouseholdModel householdModel, + IndividualModel individualModel, + AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + bool loading)? + editIndividual, + TResult? Function(AddressModel addressModel, HouseholdModel householdModel, + bool loading)? + addMember, + TResult? Function(bool navigateToRoot, HouseholdModel householdModel)? + persisted, + TResult? Function( + bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? + summary, + }) { + return summary?.call( + navigateToRoot, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + addressModel, + loading, + isHeadOfHousehold); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function( + AddressModel? addressModel, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + String? searchQuery, + bool loading, + bool isHeadOfHousehold)? + create, + TResult Function( + AddressModel addressModel, + HouseholdModel householdModel, + List individualModel, + DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, + bool loading)? + editHousehold, + TResult Function( + HouseholdModel householdModel, + IndividualModel individualModel, + AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + bool loading)? + editIndividual, + TResult Function(AddressModel addressModel, HouseholdModel householdModel, + bool loading)? + addMember, + TResult Function(bool navigateToRoot, HouseholdModel householdModel)? + persisted, + TResult Function( + bool navigateToRoot, + HouseholdModel? householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? + summary, + required TResult orElse(), + }) { + if (summary != null) { + return summary( + navigateToRoot, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + addressModel, + loading, + isHeadOfHousehold); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(BeneficiaryRegistrationCreateState value) create, + required TResult Function(BeneficiaryRegistrationEditHouseholdState value) + editHousehold, + required TResult Function(BeneficiaryRegistrationEditIndividualState value) + editIndividual, + required TResult Function(BeneficiaryRegistrationAddMemberState value) + addMember, + required TResult Function(BeneficiaryRegistrationPersistedState value) + persisted, + required TResult Function(BeneficiaryRegistrationSummaryState value) + summary, + }) { + return summary(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(BeneficiaryRegistrationCreateState value)? create, + TResult? Function(BeneficiaryRegistrationEditHouseholdState value)? + editHousehold, + TResult? Function(BeneficiaryRegistrationEditIndividualState value)? + editIndividual, + TResult? Function(BeneficiaryRegistrationAddMemberState value)? addMember, + TResult? Function(BeneficiaryRegistrationPersistedState value)? persisted, + TResult? Function(BeneficiaryRegistrationSummaryState value)? summary, + }) { + return summary?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(BeneficiaryRegistrationCreateState value)? create, + TResult Function(BeneficiaryRegistrationEditHouseholdState value)? + editHousehold, + TResult Function(BeneficiaryRegistrationEditIndividualState value)? + editIndividual, + TResult Function(BeneficiaryRegistrationAddMemberState value)? addMember, + TResult Function(BeneficiaryRegistrationPersistedState value)? persisted, + TResult Function(BeneficiaryRegistrationSummaryState value)? summary, + required TResult orElse(), + }) { + if (summary != null) { + return summary(this); + } + return orElse(); + } +} + +abstract class BeneficiaryRegistrationSummaryState + implements BeneficiaryRegistrationState { + const factory BeneficiaryRegistrationSummaryState( + {final bool navigateToRoot, + final HouseholdModel? householdModel, + final IndividualModel? individualModel, + final ProjectBeneficiaryModel? projectBeneficiaryModel, + final DateTime? registrationDate, + final AddressModel? addressModel, + final bool loading, + final bool isHeadOfHousehold}) = + _$BeneficiaryRegistrationSummaryStateImpl; + + bool get navigateToRoot; + @override + HouseholdModel? get householdModel; + IndividualModel? get individualModel; + ProjectBeneficiaryModel? get projectBeneficiaryModel; + DateTime? get registrationDate; + AddressModel? get addressModel; + bool get loading; + bool get isHeadOfHousehold; + @override + @JsonKey(ignore: true) + _$$BeneficiaryRegistrationSummaryStateImplCopyWith< + _$BeneficiaryRegistrationSummaryStateImpl> + get copyWith => throw _privateConstructorUsedError; +} diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart index 1b30fe123..5bd906508 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart @@ -98,6 +98,7 @@ class _HouseDetailsPageState extends LocalizedState { address, householdModel, individualModel, + projectBeneficiaryModel, registrationDate, searchQuery, loading, @@ -226,6 +227,7 @@ class _HouseDetailsPageState extends LocalizedState { Column(children: [ houseShowcaseData.typeOfStructure.buildWith( child: SelectionBox( + title: i18.householdDetails.typeOfStructure, width: 120, options: RegistrationDeliverySingleton() .houseStructureTypes ?? diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart index ef5a507c7..f33e70182 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart @@ -82,6 +82,7 @@ class _HouseHoldDetailsPageState extends LocalizedState { addressModel, householdModel, individualModel, + projectBeneficiaryModel, registrationDate, searchQuery, loading, diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index 81e21de12..3470aa262 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -109,6 +109,7 @@ class _HouseholdLocationPageState address, householdModel, individualModel, + projectBeneficiaryModel, registrationDate, searchQuery, loading, diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index 1ed1f1882..e40c885b3 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -4,7 +4,6 @@ import 'package:digit_components/digit_components.dart'; import 'package:digit_components/utils/date_utils.dart'; import 'package:digit_components/widgets/atoms/digit_checkbox.dart'; import 'package:digit_components/widgets/atoms/digit_toaster.dart'; -import 'package:digit_components/widgets/atoms/selection_card.dart'; import 'package:digit_components/widgets/digit_dob_picker.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_scanner/blocs/scanner.dart'; @@ -18,8 +17,6 @@ import 'package:registration_delivery/utils/constants.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; import '../../blocs/beneficiary_registration/beneficiary_registration.dart'; -import '../../blocs/search_households/search_bloc_common_wrapper.dart'; -import '../../blocs/search_households/search_households.dart'; import '../../router/registration_delivery_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; @@ -65,30 +62,8 @@ class _IndividualDetailsPageState return Scaffold( body: ReactiveFormBuilder( form: () => buildForm(bloc.state), - builder: (context, form, child) => BlocConsumer< + builder: (context, form, child) => BlocBuilder< BeneficiaryRegistrationBloc, BeneficiaryRegistrationState>( - listener: (context, state) { - state.mapOrNull( - persisted: (value) { - if (value.navigateToRoot) { - (router.parent() as StackRouter).maybePop(); - } else { - router.popUntil((route) => - route.settings.name == SearchBeneficiaryRoute.name); - context.read().searchHouseholdsBloc.add( - SearchHouseholdsEvent.searchByHousehold( - householdModel: value.householdModel, - projectId: RegistrationDeliverySingleton().projectId!, - isProximityEnabled: false, - ), - ); - router.push(BeneficiaryAcknowledgementRoute( - enableViewHousehold: true, - )); - } - }, - ); - }, builder: (context, state) { return ScrollableContent( enableFixedButton: true, @@ -105,253 +80,239 @@ class _IndividualDetailsPageState valueListenable: clickedStatus, builder: (context, bool isClicked, _) { return DigitElevatedButton( - onPressed: isClicked - ? null - : () async { - final age = DigitDateUtils.calculateAge( - form.control(_dobKey).value as DateTime?, - ); - if ((age.years == 0 && age.months == 0) || - age.years >= 150 && age.months > 0) { - form.control(_dobKey).setErrors({'': true}); - } - if (form.control(_idTypeKey).value == null) { - form.control(_idTypeKey).setErrors({'': true}); - } - if (form.control(_genderKey).value == null) { - setState(() { - form.control(_genderKey).setErrors({'': true}); - }); - } - final userId = RegistrationDeliverySingleton() - .loggedInUserUuid; - final projectId = - RegistrationDeliverySingleton().projectId; - form.markAllAsTouched(); + onPressed: () async { + final age = DigitDateUtils.calculateAge( + form.control(_dobKey).value as DateTime?, + ); + if ((age.years == 0 && age.months == 0) || + age.years >= 150 && age.months > 0) { + form.control(_dobKey).setErrors({'': true}); + } + if (form.control(_idTypeKey).value == null) { + form.control(_idTypeKey).setErrors({'': true}); + } + if (form.control(_genderKey).value == null) { + form.control(_genderKey).setErrors({'': true}); + } + final userId = + RegistrationDeliverySingleton().loggedInUserUuid; + final projectId = + RegistrationDeliverySingleton().projectId; + form.markAllAsTouched(); + if (!form.valid) return; + FocusManager.instance.primaryFocus?.unfocus(); - if (!form.valid) return; - FocusManager.instance.primaryFocus?.unfocus(); + state.maybeWhen( + orElse: () { + return; + }, + create: ( + addressModel, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + searchQuery, + loading, + isHeadOfHousehold, + ) async { + final individual = _getIndividualModel( + context, + form: form, + oldIndividual: null, + ); - state.maybeWhen( - orElse: () { - return; - }, - create: ( - addressModel, - householdModel, - individualModel, - registrationDate, - searchQuery, - loading, - isHeadOfHousehold, - ) async { - final individual = _getIndividualModel( - context, - form: form, - oldIndividual: null, - ); + final boundary = + RegistrationDeliverySingleton().boundary; - final boundary = - RegistrationDeliverySingleton().boundary; + bloc.add( + BeneficiaryRegistrationSaveIndividualDetailsEvent( + model: individual, + isHeadOfHousehold: widget.isHeadOfHousehold, + ), + ); + final scannerBloc = + context.read(); - bloc.add( - BeneficiaryRegistrationSaveIndividualDetailsEvent( - model: individual, - isHeadOfHousehold: - widget.isHeadOfHousehold, + if (scannerBloc.state.duplicate) { + DigitToast.show( + context, + options: DigitToastOptions( + localizations.translate( + i18.deliverIntervention + .resourceAlreadyScanned, + ), + true, + theme, + ), + ); + } else { + final submit = await DigitDialog.show( + context, + options: DigitDialogOptions( + titleText: localizations.translate( + i18.deliverIntervention.dialogTitle, + ), + contentText: localizations.translate( + i18.deliverIntervention.dialogContent, + ), + primaryAction: DigitDialogActions( + label: localizations.translate( + i18.common.coreCommonSubmit, ), - ); - final scannerBloc = - context.read(); - - if (scannerBloc.state.duplicate) { - DigitToast.show( - context, - options: DigitToastOptions( - localizations.translate( - i18.deliverIntervention - .resourceAlreadyScanned, - ), - true, - theme, - ), - ); - } else { - final submit = await DigitDialog.show( + action: (context) { + clickedStatus.value = true; + Navigator.of( + context, + rootNavigator: true, + ).pop(true); + }, + ), + secondaryAction: DigitDialogActions( + label: localizations.translate( + i18.common.coreCommonCancel, + ), + action: (context) => Navigator.of( context, - options: DigitDialogOptions( - titleText: localizations.translate( - i18.deliverIntervention.dialogTitle, - ), - contentText: localizations.translate( - i18.deliverIntervention.dialogContent, - ), - primaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonSubmit, - ), - action: (context) { - clickedStatus.value = true; - Navigator.of( - context, - rootNavigator: true, - ).pop(true); - }, - ), - secondaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonCancel, - ), - action: (context) => Navigator.of( - context, - rootNavigator: true, - ).pop(false), - ), - ), - ); - - if (submit ?? false) { - if (context.mounted) { - final scannerBloc = - context.read(); - - bloc.add( - BeneficiaryRegistrationCreateEvent( - projectId: projectId!, - userUuid: userId!, - boundary: boundary!, - tag: scannerBloc - .state.qrCodes.isNotEmpty - ? scannerBloc - .state.qrCodes.first - : null, - ), - ); - } - } - } - }, - editIndividual: ( - householdModel, - individualModel, - addressModel, - projectBeneficiaryModel, - loading, - ) { + rootNavigator: true, + ).pop(false), + ), + ), + ); + if (submit ?? false) { + if (context.mounted) { final scannerBloc = context.read(); - final individual = _getIndividualModel( - context, - form: form, - oldIndividual: individualModel, - ); - final tag = - scannerBloc.state.qrCodes.isNotEmpty + bloc.add( + BeneficiaryRegistrationSummaryEvent( + projectId: projectId!, + userUuid: userId!, + boundary: boundary!, + tag: scannerBloc.state.qrCodes.isNotEmpty ? scannerBloc.state.qrCodes.first - : null; - - if (tag != null && - tag != projectBeneficiaryModel?.tag && - scannerBloc.state.duplicate) { - DigitToast.show( - context, - options: DigitToastOptions( - localizations.translate( - i18.deliverIntervention - .resourceAlreadyScanned, - ), - true, - theme, - ), - ); - } else { - bloc.add( - BeneficiaryRegistrationUpdateIndividualDetailsEvent( - addressModel: addressModel, - householdModel: householdModel, - model: individual.copyWith( - clientAuditDetails: (individual - .clientAuditDetails - ?.createdBy != - null && - individual.clientAuditDetails - ?.createdTime != - null) - ? ClientAuditDetails( - createdBy: individual - .clientAuditDetails! - .createdBy, - createdTime: individual - .clientAuditDetails! - .createdTime, - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: context - .millisecondsSinceEpoch(), - ) - : null, - ), - tag: scannerBloc - .state.qrCodes.isNotEmpty - ? scannerBloc.state.qrCodes.first - : null, - ), - ); - } - }, - addMember: ( - addressModel, - householdModel, - loading, - ) { - final individual = _getIndividualModel( - context, - form: form, + : null, + ), ); + router.push(SummaryRoute()); + } + } + } + }, + editIndividual: ( + householdModel, + individualModel, + addressModel, + projectBeneficiaryModel, + loading, + ) { + final scannerBloc = + context.read(); + final individual = _getIndividualModel( + context, + form: form, + oldIndividual: individualModel, + ); + final tag = scannerBloc.state.qrCodes.isNotEmpty + ? scannerBloc.state.qrCodes.first + : null; - if (context.mounted) { - final scannerBloc = - context.read(); - - if (scannerBloc.state.duplicate) { - DigitToast.show( - context, - options: DigitToastOptions( - localizations.translate( - i18.deliverIntervention - .resourceAlreadyScanned, - ), - true, - theme, - ), - ); - } else { - bloc.add( - BeneficiaryRegistrationAddMemberEvent( - beneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, - householdModel: householdModel, - individualModel: individual, - addressModel: addressModel, - userUuid: - RegistrationDeliverySingleton() - .loggedInUserUuid!, - projectId: - RegistrationDeliverySingleton() - .projectId!, - tag: scannerBloc - .state.qrCodes.isNotEmpty - ? scannerBloc.state.qrCodes.first - : null, - ), - ); - } - } - }, + if (tag != null && + tag != projectBeneficiaryModel?.tag && + scannerBloc.state.duplicate) { + DigitToast.show( + context, + options: DigitToastOptions( + localizations.translate( + i18.deliverIntervention + .resourceAlreadyScanned, + ), + true, + theme, + ), ); - }, + } else { + bloc.add( + BeneficiaryRegistrationUpdateIndividualDetailsEvent( + addressModel: addressModel, + householdModel: householdModel, + model: individual.copyWith( + clientAuditDetails: (individual + .clientAuditDetails + ?.createdBy != + null && + individual.clientAuditDetails + ?.createdTime != + null) + ? ClientAuditDetails( + createdBy: individual + .clientAuditDetails!.createdBy, + createdTime: individual + .clientAuditDetails! + .createdTime, + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: context + .millisecondsSinceEpoch(), + ) + : null, + ), + tag: scannerBloc.state.qrCodes.isNotEmpty + ? scannerBloc.state.qrCodes.first + : null, + ), + ); + } + }, + addMember: ( + addressModel, + householdModel, + loading, + ) { + final individual = _getIndividualModel( + context, + form: form, + ); + + if (context.mounted) { + final scannerBloc = + context.read(); + + if (scannerBloc.state.duplicate) { + DigitToast.show( + context, + options: DigitToastOptions( + localizations.translate( + i18.deliverIntervention + .resourceAlreadyScanned, + ), + true, + theme, + ), + ); + } else { + bloc.add( + BeneficiaryRegistrationAddMemberEvent( + beneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType!, + householdModel: householdModel, + individualModel: individual, + addressModel: addressModel, + userUuid: RegistrationDeliverySingleton() + .loggedInUserUuid!, + projectId: RegistrationDeliverySingleton() + .projectId!, + tag: scannerBloc.state.qrCodes.isNotEmpty + ? scannerBloc.state.qrCodes.first + : null, + ), + ); + } + } + }, + ); + }, child: Center( child: Text( state.mapOrNull( @@ -382,212 +343,192 @@ class _IndividualDetailsPageState style: theme.textTheme.displayMedium, ), ), - Column( - children: [ - individualDetailsShowcaseData.nameOfIndividual - .buildWith( - child: DigitTextFormField( - formControlName: 'individualName', - label: localizations.translate( - i18.individualDetails.nameLabelText, - ), - isRequired: true, - validationMessages: { - 'required': (object) => - localizations.translate( - '${i18.individualDetails.nameLabelText}_IS_REQUIRED', - ), - 'maxLength': (object) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', maxLength.toString()), - }, - ), - ), - Offstage( - offstage: !widget.isHeadOfHousehold, - child: DigitCheckbox( - label: localizations.translate( - i18.individualDetails.checkboxLabelText, - ), - value: widget.isHeadOfHousehold, + Column(children: [ + individualDetailsShowcaseData.nameOfIndividual + .buildWith( + child: DigitTextFormField( + formControlName: 'individualName', + label: localizations.translate( + i18.individualDetails.nameLabelText, ), + isRequired: true, + validationMessages: { + 'required': (object) => localizations.translate( + '${i18.individualDetails.nameLabelText}_IS_REQUIRED', + ), + 'maxLength': (object) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', maxLength.toString()), + }, ), - DigitReactiveSearchDropdown( + ), + Offstage( + offstage: !widget.isHeadOfHousehold, + child: DigitCheckbox( label: localizations.translate( - i18.individualDetails.idTypeLabelText, + i18.individualDetails.checkboxLabelText, ), - form: form, - menuItems: RegistrationDeliverySingleton() - .idTypeOptions! - .map( - (e) { - return e; - }, - ).toList(), - formControlName: _idTypeKey, - valueMapper: (value) { - return localizations.translate(value); - }, - onSelected: (value) { - setState(() { - if (value == 'DEFAULT') { - form.control(_idNumberKey).value = - IdGen.i.identifier.toString(); - } else { - form.control(_idNumberKey).value = null; - } - }); + value: widget.isHeadOfHousehold, + ), + ), + DigitReactiveSearchDropdown( + label: localizations.translate( + i18.individualDetails.idTypeLabelText, + ), + form: form, + menuItems: RegistrationDeliverySingleton() + .idTypeOptions! + .map( + (e) { + return e; }, - isRequired: true, - validationMessage: localizations.translate( - i18.common.corecommonRequired, - ), - emptyText: localizations - .translate(i18.common.noMatchFound), + ).toList(), + formControlName: _idTypeKey, + valueMapper: (value) { + return localizations.translate(value); + }, + onSelected: (value) { + setState(() { + if (value == 'DEFAULT') { + form.control(_idNumberKey).value = + IdGen.i.identifier.toString(); + } else { + form.control(_idNumberKey).value = null; + } + }); + }, + isRequired: true, + validationMessage: localizations.translate( + i18.common.corecommonRequired, ), - if (form.control(_idTypeKey).value != 'DEFAULT') - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ReactiveFormConsumer( - builder: (context, formGroup, child) { - return DigitTextFormField( - readOnly: - form.control(_idTypeKey).value == - 'DEFAULT', - isRequired: form - .control(_idNumberKey) - .validators - .isNotEmpty, - formControlName: _idNumberKey, - label: localizations.translate( - i18.individualDetails - .idNumberLabelText, - ), - validationMessages: { - 'required': (object) => - localizations.translate( - '${i18.individualDetails.idNumberLabelText}_IS_REQUIRED', - ), - }, - padding: const EdgeInsets.only( - top: kPadding * 2, - left: kPadding / 2, - right: kPadding / 2, - ), - ); - }, - ), - const SizedBox(height: 4), - ], + emptyText: localizations + .translate(i18.common.noMatchFound), + ), + if (form.control(_idTypeKey).value != 'DEFAULT') + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ReactiveFormConsumer( + builder: (context, formGroup, child) { + return DigitTextFormField( + readOnly: + form.control(_idTypeKey).value == + 'DEFAULT', + isRequired: form + .control(_idNumberKey) + .validators + .isNotEmpty, + formControlName: _idNumberKey, + label: localizations.translate( + i18.individualDetails.idNumberLabelText, + ), + validationMessages: { + 'required': (object) => + localizations.translate( + '${i18.individualDetails.idNumberLabelText}_IS_REQUIRED', + ), + }, + padding: const EdgeInsets.only( + top: kPadding * 2, + left: kPadding / 2, + right: kPadding / 2, + ), + ); + }, + ), + const SizedBox(height: 4), + ], + ), + if (form.control(_idTypeKey).value == 'DEFAULT') + const SizedBox( + height: kPadding, + ), + individualDetailsShowcaseData.dateOfBirth.buildWith( + child: DigitDobPicker( + datePickerFormControl: _dobKey, + datePickerLabel: localizations.translate( + i18.individualDetails.dobLabelText, ), - if (form.control(_idTypeKey).value == 'DEFAULT') - const SizedBox( - height: kPadding, + ageFieldLabel: localizations.translate( + i18.individualDetails.ageLabelText, ), - individualDetailsShowcaseData.dateOfBirth.buildWith( - child: DigitDobPicker( - datePickerFormControl: _dobKey, - datePickerLabel: localizations.translate( - i18.individualDetails.dobLabelText, - ), - ageFieldLabel: localizations.translate( - i18.individualDetails.ageLabelText, - ), - yearsHintLabel: localizations.translate( - i18.individualDetails.yearsHintText, - ), - monthsHintLabel: localizations.translate( - i18.individualDetails.monthsHintText, - ), - separatorLabel: localizations.translate( - i18.individualDetails.separatorLabelText, - ), - yearsAndMonthsErrMsg: localizations.translate( - i18.individualDetails.yearsAndMonthsErrorText, - ), - initialDate: before150Years, - onChangeOfFormControl: (formControl) { - // Handle changes to the control's value here - final value = formControl.value; - if (value == null) { + yearsHintLabel: localizations.translate( + i18.individualDetails.yearsHintText, + ), + monthsHintLabel: localizations.translate( + i18.individualDetails.monthsHintText, + ), + separatorLabel: localizations.translate( + i18.individualDetails.separatorLabelText, + ), + yearsAndMonthsErrMsg: localizations.translate( + i18.individualDetails.yearsAndMonthsErrorText, + ), + initialDate: before150Years, + onChangeOfFormControl: (formControl) { + // Handle changes to the control's value here + final value = formControl.value; + if (value == null) { + formControl.setErrors({'': true}); + } else { + DigitDOBAge age = + DigitDateUtils.calculateAge(value); + if ((age.years == 0 && age.months == 0) || + age.months > 11 || + (age.years >= 150 && age.months >= 0)) { formControl.setErrors({'': true}); } else { - DigitDOBAge age = - DigitDateUtils.calculateAge(value); - if ((age.years == 0 && age.months == 0) || - age.months > 11 || - (age.years >= 150 && age.months >= 0)) { - formControl.setErrors({'': true}); - } else { - formControl.removeError(''); - } + formControl.removeError(''); } - }, - cancelText: localizations - .translate(i18.common.coreCommonCancel), - confirmText: localizations - .translate(i18.common.coreCommonOk), - ), + } + }, + cancelText: localizations + .translate(i18.common.coreCommonCancel), + confirmText: localizations + .translate(i18.common.coreCommonOk), ), - LabeledField( - isRequired: true, - label: localizations.translate( - i18.individualDetails.genderLabelText, - ), - child: SelectionBox( - allowMultipleSelection: false, - width: 120, - options: RegistrationDeliverySingleton() - .genderOptions! - .map( - (e) => e, - ) - .toList(), - onSelectionChanged: (value){ - setState(() { - if(value.isNotEmpty){ - form.control(_genderKey).value = value.first; - }else{ - form.control(_genderKey).value = null; - setState(() { - form.control(_genderKey).setErrors({'': true}); - }); - } - }); - }, - valueMapper: (value) { - return localizations.translate(value); - }, - errorMessage: form.control(_genderKey).hasErrors - ? localizations.translate(i18.common.corecommonRequired) - : null, - ), + ), + DigitReactiveSearchDropdown( + label: localizations.translate( + i18.individualDetails.genderLabelText, ), - individualDetailsShowcaseData.mobile.buildWith( - child: DigitTextFormField( - keyboardType: TextInputType.number, - formControlName: _mobileNumberKey, - maxLength: 10, - label: localizations.translate( - i18.individualDetails.mobileNumberLabelText, - ), - validationMessages: { - 'maxLength': (object) => - localizations.translate(i18 - .individualDetails - .mobileNumberLengthValidationMessage), - 'minLength': (object) => - localizations.translate(i18 - .individualDetails - .mobileNumberLengthValidationMessage), - }, - inputFormatters: [ - FilteringTextInputFormatter.digitsOnly, - ], - ), + form: form, + menuItems: RegistrationDeliverySingleton() + .genderOptions! + .map( + (e) => e, + ) + .toList(), + formControlName: _genderKey, + valueMapper: (value) { + return localizations.translate(value); + }, + isRequired: true, + validationMessage: localizations.translate( + i18.common.corecommonRequired, ), - ], + ), + ]), + individualDetailsShowcaseData.mobile.buildWith( + child: DigitTextFormField( + keyboardType: TextInputType.number, + formControlName: _mobileNumberKey, + maxLength: 10, + label: localizations.translate( + i18.individualDetails.mobileNumberLabelText, + ), + validationMessages: { + 'maxLength': (object) => localizations.translate( + i18.individualDetails + .mobileNumberLengthValidationMessage), + 'minLength': (object) => localizations.translate( + i18.individualDetails + .mobileNumberLengthValidationMessage), + }, + inputFormatters: [ + FilteringTextInputFormatter.digitsOnly, + ], + ), ), const SizedBox(height: 16), if ((RegistrationDeliverySingleton().beneficiaryType == diff --git a/packages/registration_delivery/lib/pages/summary_page.dart b/packages/registration_delivery/lib/pages/summary_page.dart new file mode 100644 index 000000000..18b498318 --- /dev/null +++ b/packages/registration_delivery/lib/pages/summary_page.dart @@ -0,0 +1,319 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:digit_components/digit_components.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:registration_delivery/models/entities/additional_fields_type.dart'; +import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; +import 'package:registration_delivery/widgets/back_navigation_help_header.dart'; +import 'package:registration_delivery/widgets/details_card.dart'; +import 'package:registration_delivery/widgets/showcase/showcase_button.dart'; + +import '../../../widgets/localized.dart'; +import '../../utils/i18_key_constants.dart' as i18; +import '../blocs/beneficiary_registration/beneficiary_registration.dart'; +import '../blocs/search_households/search_bloc_common_wrapper.dart'; +import '../blocs/search_households/search_households.dart'; +import '../utils/utils.dart'; + +@RoutePage() +class SummaryPage extends LocalizedStatefulWidget { + const SummaryPage({ + super.key, + super.appLocalizations, + }); + + @override + State createState() => _SummaryPageState(); +} + +class _SummaryPageState extends LocalizedState { + final clickedStatus = ValueNotifier(false); + + String getLocalizedMessage(String code) { + return localizations.translate(code); + } + + @override + Widget build(BuildContext context) { + return PopScope( + onPopInvoked: (val) { + context.read().add( + BeneficiaryRegistrationCreateEvent( + projectId: RegistrationDeliverySingleton().projectId!, + userUuid: RegistrationDeliverySingleton().loggedInUserUuid!, + boundary: RegistrationDeliverySingleton().boundary!, + ), + ); + }, + child: Scaffold( + body: BlocConsumer( + listener: (context, householdState) { + final router = context.router; + householdState.mapOrNull( + persisted: (value) { + if (value.navigateToRoot) { + (router.parent() as StackRouter).maybePop(); + } else { + print('stack router:'); + print(router.stack.first); + router.popUntil((route) => + route.settings.name == SearchBeneficiaryRoute.name); + context.read().searchHouseholdsBloc.add( + SearchHouseholdsEvent.searchByHousehold( + householdModel: value.householdModel, + projectId: RegistrationDeliverySingleton().projectId!, + isProximityEnabled: false, + ), + ); + router.push(BeneficiaryAcknowledgementRoute( + enableViewHousehold: true, + )); + } + }, + ); + }, + builder: (context, householdState) { + return ScrollableContent( + enableFixedButton: true, + header: Column(children: [ + const BackNavigationHelpHeaderWidget( + showHelp: false, + showcaseButton: ShowcaseButton(), + ), + Padding( + padding: + const EdgeInsets.only(bottom: kPadding, left: kPadding), + child: Align( + alignment: Alignment.centerLeft, + child: Text( + localizations.translate( + i18.individualDetails.individualsDetailsLabelText, + ), + style: DigitTheme + .instance.mobileTheme.textTheme.displayMedium, + ), + ), + ), + ]), + footer: DigitCard( + margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), + padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), + child: ValueListenableBuilder( + valueListenable: clickedStatus, + builder: (context, bool isClicked, _) { + return DigitElevatedButton( + onPressed: isClicked + ? null + : () async { + final bloc = + context.read(); + final userId = RegistrationDeliverySingleton() + .loggedInUserUuid; + final projectId = + RegistrationDeliverySingleton().projectId; + + householdState.maybeWhen( + orElse: () { + return; + }, + summary: ( + navigateToRoot, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + addressModel, + loading, + isHeadOfHousehold, + ) async { + final submit = await DigitDialog.show( + context, + options: DigitDialogOptions( + titleText: localizations.translate( + i18.deliverIntervention.dialogTitle, + ), + contentText: localizations.translate( + i18.deliverIntervention.dialogContent, + ), + primaryAction: DigitDialogActions( + label: localizations.translate( + i18.common.coreCommonSubmit, + ), + action: (context) { + clickedStatus.value = true; + Navigator.of( + context, + rootNavigator: true, + ).pop(true); + }, + ), + secondaryAction: DigitDialogActions( + label: localizations.translate( + i18.common.coreCommonCancel, + ), + action: (context) => Navigator.of( + context, + rootNavigator: true, + ).pop(false), + ), + ), + ); + + if (submit ?? false) { + if (context.mounted) { + bloc.add( + BeneficiaryRegistrationCreateEvent( + projectId: projectId!, + userUuid: userId!, + boundary: + RegistrationDeliverySingleton() + .boundary!, + tag: projectBeneficiaryModel?.tag, + navigateToSummary: false), + ); + } + } + }, + ); + }, + child: Center( + child: Text( + householdState.mapOrNull( + editIndividual: (value) => localizations + .translate(i18.common.coreCommonSave), + ) ?? + localizations + .translate(i18.common.coreCommonSubmit), + ), + ), + ); + }, + ), + ), + slivers: [ + SliverToBoxAdapter( + child: Column( + children: [ + DigitCard( + child: LabelValueList( + heading: localizations.translate(i18 + .householdLocation.householdLocationLabelText), + withDivider: true, + items: [ + LabelValuePair( + label: localizations.translate( + i18.householdLocation.villageLabel), + value: householdState.householdModel?.address + ?.locality?.code + .split('_') + .last ?? + localizations + .translate(i18.common.coreCommonNA), + isInline: true), + LabelValuePair( + label: localizations.translate( + i18.householdLocation.landmarkFormLabel), + value: householdState + .householdModel?.address?.landmark ?? + localizations + .translate(i18.common.coreCommonNA), + isInline: true), + ]), + ), + DigitCard( + child: LabelValueList( + heading: localizations.translate( + i18.householdDetails.householdDetailsLabel), + withDivider: true, + items: [ + LabelValuePair( + label: localizations.translate( + i18.beneficiaryDetails.totalMembers), + value: householdState + .householdModel?.memberCount + .toString() ?? + '0', + isInline: true), + LabelValuePair( + label: localizations.translate(i18 + .householdDetails + .noOfPregnantWomenCountLabel), + value: householdState.householdModel + ?.additionalFields?.fields + .where((h) => + h.key == + AdditionalFieldsType.pregnantWomen + .toValue()) + .firstOrNull + ?.value + .toString() ?? + '0', + isInline: true), + LabelValuePair( + label: localizations.translate(i18 + .householdDetails + .noOfChildrenBelow5YearsLabel), + value: householdState.householdModel + ?.additionalFields?.fields + .where((h) => + h.key == + AdditionalFieldsType.children + .toValue()) + .firstOrNull + ?.value + .toString() ?? + '0', + isInline: true), + ]), + ), + DigitCard( + child: LabelValueList( + heading: localizations.translate( + i18.householdDetails.houseDetailsLabel), + withDivider: true, + items: [ + LabelValuePair( + label: localizations.translate( + i18.householdDetails.noOfRoomsLabel), + value: householdState.householdModel + ?.additionalFields?.fields + .where((h) => + h.key == + AdditionalFieldsType.noOfRooms + .toValue()) + .firstOrNull + ?.value + .toString() ?? + '0', + isInline: true), + LabelValuePair( + label: localizations.translate( + i18.householdDetails.typeOfStructure), + value: (householdState.householdModel + ?.additionalFields?.fields + .where((h) => + h.key == + AdditionalFieldsType + .houseStructureTypes + .toValue()) + .firstOrNull + ?.value ?? + []) + .toString() + .split('|') + .map((item) => getLocalizedMessage(item)) + .toList() + .join(', '), + isInline: true), + ]), + ), + ], + ), + ) + ]); + }, + )), + ); + } +} diff --git a/packages/registration_delivery/lib/router/registration_delivery_router.dart b/packages/registration_delivery/lib/router/registration_delivery_router.dart index 5a63e1a83..11ac81855 100644 --- a/packages/registration_delivery/lib/router/registration_delivery_router.dart +++ b/packages/registration_delivery/lib/router/registration_delivery_router.dart @@ -14,7 +14,7 @@ class RegistrationDeliveryRoute extends $RegistrationDeliveryRoute { path: 'registration-delivery-wrapper', children: [ AutoRoute( - initial: true, + initial: true, page: SearchBeneficiaryRoute.page, path: 'search-beneficiary'), @@ -30,8 +30,7 @@ class RegistrationDeliveryRoute extends $RegistrationDeliveryRoute { page: HouseHoldDetailsRoute.page, path: 'household-details'), AutoRoute( - page: HouseDetailsRoute.page, - path: 'house-details'), + page: HouseDetailsRoute.page, path: 'house-details'), AutoRoute( page: HouseholdLocationRoute.page, path: 'household-location', @@ -41,6 +40,10 @@ class RegistrationDeliveryRoute extends $RegistrationDeliveryRoute { page: BeneficiaryAcknowledgementRoute.page, path: 'beneficiary-acknowledgement', ), + AutoRoute( + page: SummaryRoute.page, + path: 'beneficiary-summary', + ), ], ), AutoRoute( @@ -56,7 +59,6 @@ class RegistrationDeliveryRoute extends $RegistrationDeliveryRoute { page: BeneficiaryDetailsRoute.page, path: 'beneficiary-details', ), - AutoRoute( page: BeneficiaryChecklistRoute.page, path: 'beneficiary-checklist', diff --git a/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart b/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart index a03fc9c8b..362bc717c 100644 --- a/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart +++ b/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart @@ -8,15 +8,15 @@ // coverage:ignore-file // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'package:auto_route/auto_route.dart' as _i22; -import 'package:digit_data_model/data_model.dart' as _i27; -import 'package:flutter/material.dart' as _i23; -import 'package:registration_delivery/blocs/app_localization.dart' as _i24; +import 'package:auto_route/auto_route.dart' as _i23; +import 'package:digit_data_model/data_model.dart' as _i28; +import 'package:flutter/material.dart' as _i24; +import 'package:registration_delivery/blocs/app_localization.dart' as _i25; import 'package:registration_delivery/blocs/beneficiary_registration/beneficiary_registration.dart' - as _i25; -import 'package:registration_delivery/blocs/search_households/search_households.dart' as _i26; -import 'package:registration_delivery/models/entities/task.dart' as _i28; +import 'package:registration_delivery/blocs/search_households/search_households.dart' + as _i27; +import 'package:registration_delivery/models/entities/task.dart' as _i29; import 'package:registration_delivery/pages/beneficiary/beneficiary_checklist.dart' as _i2; import 'package:registration_delivery/pages/beneficiary/beneficiary_details.dart' @@ -57,14 +57,15 @@ import 'package:registration_delivery/pages/reason_for_deletion.dart' as _i15; import 'package:registration_delivery/pages/registration_delivery_wrapper.dart' as _i18; import 'package:registration_delivery/pages/search_beneficiary.dart' as _i19; +import 'package:registration_delivery/pages/summary_page.dart' as _i22; -abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { +abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { @override - final Map pagesMap = { + final Map pagesMap = { BeneficiaryAcknowledgementRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const BeneficiaryAcknowledgementRouteArgs()); - return _i22.AutoRoutePage( + return _i23.AutoRoutePage( routeData: routeData, child: _i1.BeneficiaryAcknowledgementPage( key: args.key, @@ -76,7 +77,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { BeneficiaryChecklistRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const BeneficiaryChecklistRouteArgs()); - return _i22.AutoRoutePage( + return _i23.AutoRoutePage( routeData: routeData, child: _i2.BeneficiaryChecklistPage( key: args.key, @@ -88,7 +89,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { BeneficiaryDetailsRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const BeneficiaryDetailsRouteArgs()); - return _i22.AutoRoutePage( + return _i23.AutoRoutePage( routeData: routeData, child: _i3.BeneficiaryDetailsPage( key: args.key, @@ -98,9 +99,9 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { }, BeneficiaryRegistrationWrapperRoute.name: (routeData) { final args = routeData.argsAs(); - return _i22.AutoRoutePage( + return _i23.AutoRoutePage( routeData: routeData, - child: _i22.WrappedRoute( + child: _i23.WrappedRoute( child: _i4.BeneficiaryRegistrationWrapperPage( key: args.key, initialState: args.initialState, @@ -109,7 +110,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { }, BeneficiaryWrapperRoute.name: (routeData) { final args = routeData.argsAs(); - return _i22.AutoRoutePage( + return _i23.AutoRoutePage( routeData: routeData, child: _i5.BeneficiaryWrapperPage( key: args.key, @@ -121,7 +122,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { DeliverInterventionRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const DeliverInterventionRouteArgs()); - return _i22.AutoRoutePage( + return _i23.AutoRoutePage( routeData: routeData, child: _i6.DeliverInterventionPage( key: args.key, @@ -133,7 +134,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { DoseAdministeredRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const DoseAdministeredRouteArgs()); - return _i22.AutoRoutePage( + return _i23.AutoRoutePage( routeData: routeData, child: _i7.DoseAdministeredPage( key: args.key, @@ -143,7 +144,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { }, FacilitySelectionRoute.name: (routeData) { final args = routeData.argsAs(); - return _i22.AutoRoutePage( + return _i23.AutoRoutePage( routeData: routeData, child: _i8.FacilitySelectionPage( key: args.key, @@ -154,7 +155,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { HouseDetailsRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const HouseDetailsRouteArgs()); - return _i22.AutoRoutePage( + return _i23.AutoRoutePage( routeData: routeData, child: _i9.HouseDetailsPage( key: args.key, @@ -165,7 +166,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { HouseHoldDetailsRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const HouseHoldDetailsRouteArgs()); - return _i22.AutoRoutePage( + return _i23.AutoRoutePage( routeData: routeData, child: _i10.HouseHoldDetailsPage( key: args.key, @@ -176,7 +177,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { HouseholdAcknowledgementRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const HouseholdAcknowledgementRouteArgs()); - return _i22.AutoRoutePage( + return _i23.AutoRoutePage( routeData: routeData, child: _i11.HouseholdAcknowledgementPage( key: args.key, @@ -188,7 +189,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { HouseholdLocationRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const HouseholdLocationRouteArgs()); - return _i22.AutoRoutePage( + return _i23.AutoRoutePage( routeData: routeData, child: _i12.HouseholdLocationPage( key: args.key, @@ -199,7 +200,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { HouseholdOverviewRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const HouseholdOverviewRouteArgs()); - return _i22.AutoRoutePage( + return _i23.AutoRoutePage( routeData: routeData, child: _i13.HouseholdOverviewPage( key: args.key, @@ -210,7 +211,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { IndividualDetailsRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const IndividualDetailsRouteArgs()); - return _i22.AutoRoutePage( + return _i23.AutoRoutePage( routeData: routeData, child: _i14.IndividualDetailsPage( key: args.key, @@ -222,7 +223,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { ReasonForDeletionRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const ReasonForDeletionRouteArgs()); - return _i22.AutoRoutePage( + return _i23.AutoRoutePage( routeData: routeData, child: _i15.ReasonForDeletionPage( key: args.key, @@ -234,7 +235,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { RecordPastDeliveryDetailsRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const RecordPastDeliveryDetailsRouteArgs()); - return _i22.AutoRoutePage( + return _i23.AutoRoutePage( routeData: routeData, child: _i16.RecordPastDeliveryDetailsPage( key: args.key, @@ -245,7 +246,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { }, ReferBeneficiaryRoute.name: (routeData) { final args = routeData.argsAs(); - return _i22.AutoRoutePage( + return _i23.AutoRoutePage( routeData: routeData, child: _i17.ReferBeneficiaryPage( key: args.key, @@ -256,7 +257,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { ); }, RegistrationDeliveryWrapperRoute.name: (routeData) { - return _i22.AutoRoutePage( + return _i23.AutoRoutePage( routeData: routeData, child: const _i18.RegistrationDeliveryWrapperPage(), ); @@ -264,7 +265,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { SearchBeneficiaryRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const SearchBeneficiaryRouteArgs()); - return _i22.AutoRoutePage( + return _i23.AutoRoutePage( routeData: routeData, child: _i19.SearchBeneficiaryPage( key: args.key, @@ -274,7 +275,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { }, SideEffectsRoute.name: (routeData) { final args = routeData.argsAs(); - return _i22.AutoRoutePage( + return _i23.AutoRoutePage( routeData: routeData, child: _i20.SideEffectsPage( key: args.key, @@ -287,7 +288,7 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { SplashAcknowledgementRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const SplashAcknowledgementRouteArgs()); - return _i22.AutoRoutePage( + return _i23.AutoRoutePage( routeData: routeData, child: _i21.SplashAcknowledgementPage( key: args.key, @@ -296,18 +297,29 @@ abstract class $RegistrationDeliveryRoute extends _i22.AutoRouterModule { ), ); }, + SummaryRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const SummaryRouteArgs()); + return _i23.AutoRoutePage( + routeData: routeData, + child: _i22.SummaryPage( + key: args.key, + appLocalizations: args.appLocalizations, + ), + ); + }, }; } /// generated route for /// [_i1.BeneficiaryAcknowledgementPage] class BeneficiaryAcknowledgementRoute - extends _i22.PageRouteInfo { + extends _i23.PageRouteInfo { BeneficiaryAcknowledgementRoute({ - _i23.Key? key, - _i24.RegistrationDeliveryLocalization? appLocalizations, + _i24.Key? key, + _i25.RegistrationDeliveryLocalization? appLocalizations, bool? enableViewHousehold, - List<_i22.PageRouteInfo>? children, + List<_i23.PageRouteInfo>? children, }) : super( BeneficiaryAcknowledgementRoute.name, args: BeneficiaryAcknowledgementRouteArgs( @@ -320,8 +332,8 @@ class BeneficiaryAcknowledgementRoute static const String name = 'BeneficiaryAcknowledgementRoute'; - static const _i22.PageInfo page = - _i22.PageInfo(name); + static const _i23.PageInfo page = + _i23.PageInfo(name); } class BeneficiaryAcknowledgementRouteArgs { @@ -331,9 +343,9 @@ class BeneficiaryAcknowledgementRouteArgs { this.enableViewHousehold, }); - final _i23.Key? key; + final _i24.Key? key; - final _i24.RegistrationDeliveryLocalization? appLocalizations; + final _i25.RegistrationDeliveryLocalization? appLocalizations; final bool? enableViewHousehold; @@ -346,12 +358,12 @@ class BeneficiaryAcknowledgementRouteArgs { /// generated route for /// [_i2.BeneficiaryChecklistPage] class BeneficiaryChecklistRoute - extends _i22.PageRouteInfo { + extends _i23.PageRouteInfo { BeneficiaryChecklistRoute({ - _i23.Key? key, + _i24.Key? key, String? referralClientRefId, - _i24.RegistrationDeliveryLocalization? appLocalizations, - List<_i22.PageRouteInfo>? children, + _i25.RegistrationDeliveryLocalization? appLocalizations, + List<_i23.PageRouteInfo>? children, }) : super( BeneficiaryChecklistRoute.name, args: BeneficiaryChecklistRouteArgs( @@ -364,8 +376,8 @@ class BeneficiaryChecklistRoute static const String name = 'BeneficiaryChecklistRoute'; - static const _i22.PageInfo page = - _i22.PageInfo(name); + static const _i23.PageInfo page = + _i23.PageInfo(name); } class BeneficiaryChecklistRouteArgs { @@ -375,11 +387,11 @@ class BeneficiaryChecklistRouteArgs { this.appLocalizations, }); - final _i23.Key? key; + final _i24.Key? key; final String? referralClientRefId; - final _i24.RegistrationDeliveryLocalization? appLocalizations; + final _i25.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -390,11 +402,11 @@ class BeneficiaryChecklistRouteArgs { /// generated route for /// [_i3.BeneficiaryDetailsPage] class BeneficiaryDetailsRoute - extends _i22.PageRouteInfo { + extends _i23.PageRouteInfo { BeneficiaryDetailsRoute({ - _i23.Key? key, - _i24.RegistrationDeliveryLocalization? appLocalizations, - List<_i22.PageRouteInfo>? children, + _i24.Key? key, + _i25.RegistrationDeliveryLocalization? appLocalizations, + List<_i23.PageRouteInfo>? children, }) : super( BeneficiaryDetailsRoute.name, args: BeneficiaryDetailsRouteArgs( @@ -406,8 +418,8 @@ class BeneficiaryDetailsRoute static const String name = 'BeneficiaryDetailsRoute'; - static const _i22.PageInfo page = - _i22.PageInfo(name); + static const _i23.PageInfo page = + _i23.PageInfo(name); } class BeneficiaryDetailsRouteArgs { @@ -416,9 +428,9 @@ class BeneficiaryDetailsRouteArgs { this.appLocalizations, }); - final _i23.Key? key; + final _i24.Key? key; - final _i24.RegistrationDeliveryLocalization? appLocalizations; + final _i25.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -429,11 +441,11 @@ class BeneficiaryDetailsRouteArgs { /// generated route for /// [_i4.BeneficiaryRegistrationWrapperPage] class BeneficiaryRegistrationWrapperRoute - extends _i22.PageRouteInfo { + extends _i23.PageRouteInfo { BeneficiaryRegistrationWrapperRoute({ - _i23.Key? key, - required _i25.BeneficiaryRegistrationState initialState, - List<_i22.PageRouteInfo>? children, + _i24.Key? key, + required _i26.BeneficiaryRegistrationState initialState, + List<_i23.PageRouteInfo>? children, }) : super( BeneficiaryRegistrationWrapperRoute.name, args: BeneficiaryRegistrationWrapperRouteArgs( @@ -445,8 +457,8 @@ class BeneficiaryRegistrationWrapperRoute static const String name = 'BeneficiaryRegistrationWrapperRoute'; - static const _i22.PageInfo page = - _i22.PageInfo(name); + static const _i23.PageInfo page = + _i23.PageInfo(name); } class BeneficiaryRegistrationWrapperRouteArgs { @@ -455,9 +467,9 @@ class BeneficiaryRegistrationWrapperRouteArgs { required this.initialState, }); - final _i23.Key? key; + final _i24.Key? key; - final _i25.BeneficiaryRegistrationState initialState; + final _i26.BeneficiaryRegistrationState initialState; @override String toString() { @@ -468,12 +480,12 @@ class BeneficiaryRegistrationWrapperRouteArgs { /// generated route for /// [_i5.BeneficiaryWrapperPage] class BeneficiaryWrapperRoute - extends _i22.PageRouteInfo { + extends _i23.PageRouteInfo { BeneficiaryWrapperRoute({ - _i23.Key? key, - required _i26.HouseholdMemberWrapper wrapper, + _i24.Key? key, + required _i27.HouseholdMemberWrapper wrapper, bool isEditing = false, - List<_i22.PageRouteInfo>? children, + List<_i23.PageRouteInfo>? children, }) : super( BeneficiaryWrapperRoute.name, args: BeneficiaryWrapperRouteArgs( @@ -486,8 +498,8 @@ class BeneficiaryWrapperRoute static const String name = 'BeneficiaryWrapperRoute'; - static const _i22.PageInfo page = - _i22.PageInfo(name); + static const _i23.PageInfo page = + _i23.PageInfo(name); } class BeneficiaryWrapperRouteArgs { @@ -497,9 +509,9 @@ class BeneficiaryWrapperRouteArgs { this.isEditing = false, }); - final _i23.Key? key; + final _i24.Key? key; - final _i26.HouseholdMemberWrapper wrapper; + final _i27.HouseholdMemberWrapper wrapper; final bool isEditing; @@ -512,12 +524,12 @@ class BeneficiaryWrapperRouteArgs { /// generated route for /// [_i6.DeliverInterventionPage] class DeliverInterventionRoute - extends _i22.PageRouteInfo { + extends _i23.PageRouteInfo { DeliverInterventionRoute({ - _i23.Key? key, - _i24.RegistrationDeliveryLocalization? appLocalizations, + _i24.Key? key, + _i25.RegistrationDeliveryLocalization? appLocalizations, bool isEditing = false, - List<_i22.PageRouteInfo>? children, + List<_i23.PageRouteInfo>? children, }) : super( DeliverInterventionRoute.name, args: DeliverInterventionRouteArgs( @@ -530,8 +542,8 @@ class DeliverInterventionRoute static const String name = 'DeliverInterventionRoute'; - static const _i22.PageInfo page = - _i22.PageInfo(name); + static const _i23.PageInfo page = + _i23.PageInfo(name); } class DeliverInterventionRouteArgs { @@ -541,9 +553,9 @@ class DeliverInterventionRouteArgs { this.isEditing = false, }); - final _i23.Key? key; + final _i24.Key? key; - final _i24.RegistrationDeliveryLocalization? appLocalizations; + final _i25.RegistrationDeliveryLocalization? appLocalizations; final bool isEditing; @@ -556,11 +568,11 @@ class DeliverInterventionRouteArgs { /// generated route for /// [_i7.DoseAdministeredPage] class DoseAdministeredRoute - extends _i22.PageRouteInfo { + extends _i23.PageRouteInfo { DoseAdministeredRoute({ - _i23.Key? key, - _i24.RegistrationDeliveryLocalization? appLocalizations, - List<_i22.PageRouteInfo>? children, + _i24.Key? key, + _i25.RegistrationDeliveryLocalization? appLocalizations, + List<_i23.PageRouteInfo>? children, }) : super( DoseAdministeredRoute.name, args: DoseAdministeredRouteArgs( @@ -572,8 +584,8 @@ class DoseAdministeredRoute static const String name = 'DoseAdministeredRoute'; - static const _i22.PageInfo page = - _i22.PageInfo(name); + static const _i23.PageInfo page = + _i23.PageInfo(name); } class DoseAdministeredRouteArgs { @@ -582,9 +594,9 @@ class DoseAdministeredRouteArgs { this.appLocalizations, }); - final _i23.Key? key; + final _i24.Key? key; - final _i24.RegistrationDeliveryLocalization? appLocalizations; + final _i25.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -595,11 +607,11 @@ class DoseAdministeredRouteArgs { /// generated route for /// [_i8.FacilitySelectionPage] class FacilitySelectionRoute - extends _i22.PageRouteInfo { + extends _i23.PageRouteInfo { FacilitySelectionRoute({ - _i23.Key? key, - required List<_i27.FacilityModel> facilities, - List<_i22.PageRouteInfo>? children, + _i24.Key? key, + required List<_i28.FacilityModel> facilities, + List<_i23.PageRouteInfo>? children, }) : super( FacilitySelectionRoute.name, args: FacilitySelectionRouteArgs( @@ -611,8 +623,8 @@ class FacilitySelectionRoute static const String name = 'FacilitySelectionRoute'; - static const _i22.PageInfo page = - _i22.PageInfo(name); + static const _i23.PageInfo page = + _i23.PageInfo(name); } class FacilitySelectionRouteArgs { @@ -621,9 +633,9 @@ class FacilitySelectionRouteArgs { required this.facilities, }); - final _i23.Key? key; + final _i24.Key? key; - final List<_i27.FacilityModel> facilities; + final List<_i28.FacilityModel> facilities; @override String toString() { @@ -633,11 +645,11 @@ class FacilitySelectionRouteArgs { /// generated route for /// [_i9.HouseDetailsPage] -class HouseDetailsRoute extends _i22.PageRouteInfo { +class HouseDetailsRoute extends _i23.PageRouteInfo { HouseDetailsRoute({ - _i23.Key? key, - _i24.RegistrationDeliveryLocalization? appLocalizations, - List<_i22.PageRouteInfo>? children, + _i24.Key? key, + _i25.RegistrationDeliveryLocalization? appLocalizations, + List<_i23.PageRouteInfo>? children, }) : super( HouseDetailsRoute.name, args: HouseDetailsRouteArgs( @@ -649,8 +661,8 @@ class HouseDetailsRoute extends _i22.PageRouteInfo { static const String name = 'HouseDetailsRoute'; - static const _i22.PageInfo page = - _i22.PageInfo(name); + static const _i23.PageInfo page = + _i23.PageInfo(name); } class HouseDetailsRouteArgs { @@ -659,9 +671,9 @@ class HouseDetailsRouteArgs { this.appLocalizations, }); - final _i23.Key? key; + final _i24.Key? key; - final _i24.RegistrationDeliveryLocalization? appLocalizations; + final _i25.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -672,11 +684,11 @@ class HouseDetailsRouteArgs { /// generated route for /// [_i10.HouseHoldDetailsPage] class HouseHoldDetailsRoute - extends _i22.PageRouteInfo { + extends _i23.PageRouteInfo { HouseHoldDetailsRoute({ - _i23.Key? key, - _i24.RegistrationDeliveryLocalization? appLocalizations, - List<_i22.PageRouteInfo>? children, + _i24.Key? key, + _i25.RegistrationDeliveryLocalization? appLocalizations, + List<_i23.PageRouteInfo>? children, }) : super( HouseHoldDetailsRoute.name, args: HouseHoldDetailsRouteArgs( @@ -688,8 +700,8 @@ class HouseHoldDetailsRoute static const String name = 'HouseHoldDetailsRoute'; - static const _i22.PageInfo page = - _i22.PageInfo(name); + static const _i23.PageInfo page = + _i23.PageInfo(name); } class HouseHoldDetailsRouteArgs { @@ -698,9 +710,9 @@ class HouseHoldDetailsRouteArgs { this.appLocalizations, }); - final _i23.Key? key; + final _i24.Key? key; - final _i24.RegistrationDeliveryLocalization? appLocalizations; + final _i25.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -711,12 +723,12 @@ class HouseHoldDetailsRouteArgs { /// generated route for /// [_i11.HouseholdAcknowledgementPage] class HouseholdAcknowledgementRoute - extends _i22.PageRouteInfo { + extends _i23.PageRouteInfo { HouseholdAcknowledgementRoute({ - _i23.Key? key, - _i24.RegistrationDeliveryLocalization? appLocalizations, + _i24.Key? key, + _i25.RegistrationDeliveryLocalization? appLocalizations, bool? enableViewHousehold, - List<_i22.PageRouteInfo>? children, + List<_i23.PageRouteInfo>? children, }) : super( HouseholdAcknowledgementRoute.name, args: HouseholdAcknowledgementRouteArgs( @@ -729,8 +741,8 @@ class HouseholdAcknowledgementRoute static const String name = 'HouseholdAcknowledgementRoute'; - static const _i22.PageInfo page = - _i22.PageInfo(name); + static const _i23.PageInfo page = + _i23.PageInfo(name); } class HouseholdAcknowledgementRouteArgs { @@ -740,9 +752,9 @@ class HouseholdAcknowledgementRouteArgs { this.enableViewHousehold, }); - final _i23.Key? key; + final _i24.Key? key; - final _i24.RegistrationDeliveryLocalization? appLocalizations; + final _i25.RegistrationDeliveryLocalization? appLocalizations; final bool? enableViewHousehold; @@ -755,11 +767,11 @@ class HouseholdAcknowledgementRouteArgs { /// generated route for /// [_i12.HouseholdLocationPage] class HouseholdLocationRoute - extends _i22.PageRouteInfo { + extends _i23.PageRouteInfo { HouseholdLocationRoute({ - _i23.Key? key, - _i24.RegistrationDeliveryLocalization? appLocalizations, - List<_i22.PageRouteInfo>? children, + _i24.Key? key, + _i25.RegistrationDeliveryLocalization? appLocalizations, + List<_i23.PageRouteInfo>? children, }) : super( HouseholdLocationRoute.name, args: HouseholdLocationRouteArgs( @@ -771,8 +783,8 @@ class HouseholdLocationRoute static const String name = 'HouseholdLocationRoute'; - static const _i22.PageInfo page = - _i22.PageInfo(name); + static const _i23.PageInfo page = + _i23.PageInfo(name); } class HouseholdLocationRouteArgs { @@ -781,9 +793,9 @@ class HouseholdLocationRouteArgs { this.appLocalizations, }); - final _i23.Key? key; + final _i24.Key? key; - final _i24.RegistrationDeliveryLocalization? appLocalizations; + final _i25.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -794,11 +806,11 @@ class HouseholdLocationRouteArgs { /// generated route for /// [_i13.HouseholdOverviewPage] class HouseholdOverviewRoute - extends _i22.PageRouteInfo { + extends _i23.PageRouteInfo { HouseholdOverviewRoute({ - _i23.Key? key, - _i24.RegistrationDeliveryLocalization? appLocalizations, - List<_i22.PageRouteInfo>? children, + _i24.Key? key, + _i25.RegistrationDeliveryLocalization? appLocalizations, + List<_i23.PageRouteInfo>? children, }) : super( HouseholdOverviewRoute.name, args: HouseholdOverviewRouteArgs( @@ -810,8 +822,8 @@ class HouseholdOverviewRoute static const String name = 'HouseholdOverviewRoute'; - static const _i22.PageInfo page = - _i22.PageInfo(name); + static const _i23.PageInfo page = + _i23.PageInfo(name); } class HouseholdOverviewRouteArgs { @@ -820,9 +832,9 @@ class HouseholdOverviewRouteArgs { this.appLocalizations, }); - final _i23.Key? key; + final _i24.Key? key; - final _i24.RegistrationDeliveryLocalization? appLocalizations; + final _i25.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -833,12 +845,12 @@ class HouseholdOverviewRouteArgs { /// generated route for /// [_i14.IndividualDetailsPage] class IndividualDetailsRoute - extends _i22.PageRouteInfo { + extends _i23.PageRouteInfo { IndividualDetailsRoute({ - _i23.Key? key, - _i24.RegistrationDeliveryLocalization? appLocalizations, + _i24.Key? key, + _i25.RegistrationDeliveryLocalization? appLocalizations, bool isHeadOfHousehold = false, - List<_i22.PageRouteInfo>? children, + List<_i23.PageRouteInfo>? children, }) : super( IndividualDetailsRoute.name, args: IndividualDetailsRouteArgs( @@ -851,8 +863,8 @@ class IndividualDetailsRoute static const String name = 'IndividualDetailsRoute'; - static const _i22.PageInfo page = - _i22.PageInfo(name); + static const _i23.PageInfo page = + _i23.PageInfo(name); } class IndividualDetailsRouteArgs { @@ -862,9 +874,9 @@ class IndividualDetailsRouteArgs { this.isHeadOfHousehold = false, }); - final _i23.Key? key; + final _i24.Key? key; - final _i24.RegistrationDeliveryLocalization? appLocalizations; + final _i25.RegistrationDeliveryLocalization? appLocalizations; final bool isHeadOfHousehold; @@ -877,12 +889,12 @@ class IndividualDetailsRouteArgs { /// generated route for /// [_i15.ReasonForDeletionPage] class ReasonForDeletionRoute - extends _i22.PageRouteInfo { + extends _i23.PageRouteInfo { ReasonForDeletionRoute({ - _i23.Key? key, - _i24.RegistrationDeliveryLocalization? appLocalizations, + _i24.Key? key, + _i25.RegistrationDeliveryLocalization? appLocalizations, bool isHousholdDelete = false, - List<_i22.PageRouteInfo>? children, + List<_i23.PageRouteInfo>? children, }) : super( ReasonForDeletionRoute.name, args: ReasonForDeletionRouteArgs( @@ -895,8 +907,8 @@ class ReasonForDeletionRoute static const String name = 'ReasonForDeletionRoute'; - static const _i22.PageInfo page = - _i22.PageInfo(name); + static const _i23.PageInfo page = + _i23.PageInfo(name); } class ReasonForDeletionRouteArgs { @@ -906,9 +918,9 @@ class ReasonForDeletionRouteArgs { this.isHousholdDelete = false, }); - final _i23.Key? key; + final _i24.Key? key; - final _i24.RegistrationDeliveryLocalization? appLocalizations; + final _i25.RegistrationDeliveryLocalization? appLocalizations; final bool isHousholdDelete; @@ -921,12 +933,12 @@ class ReasonForDeletionRouteArgs { /// generated route for /// [_i16.RecordPastDeliveryDetailsPage] class RecordPastDeliveryDetailsRoute - extends _i22.PageRouteInfo { + extends _i23.PageRouteInfo { RecordPastDeliveryDetailsRoute({ - _i23.Key? key, - _i24.RegistrationDeliveryLocalization? appLocalizations, - List<_i28.TaskModel>? tasks, - List<_i22.PageRouteInfo>? children, + _i24.Key? key, + _i25.RegistrationDeliveryLocalization? appLocalizations, + List<_i29.TaskModel>? tasks, + List<_i23.PageRouteInfo>? children, }) : super( RecordPastDeliveryDetailsRoute.name, args: RecordPastDeliveryDetailsRouteArgs( @@ -939,8 +951,8 @@ class RecordPastDeliveryDetailsRoute static const String name = 'RecordPastDeliveryDetailsRoute'; - static const _i22.PageInfo page = - _i22.PageInfo(name); + static const _i23.PageInfo page = + _i23.PageInfo(name); } class RecordPastDeliveryDetailsRouteArgs { @@ -950,11 +962,11 @@ class RecordPastDeliveryDetailsRouteArgs { this.tasks, }); - final _i23.Key? key; + final _i24.Key? key; - final _i24.RegistrationDeliveryLocalization? appLocalizations; + final _i25.RegistrationDeliveryLocalization? appLocalizations; - final List<_i28.TaskModel>? tasks; + final List<_i29.TaskModel>? tasks; @override String toString() { @@ -965,13 +977,13 @@ class RecordPastDeliveryDetailsRouteArgs { /// generated route for /// [_i17.ReferBeneficiaryPage] class ReferBeneficiaryRoute - extends _i22.PageRouteInfo { + extends _i23.PageRouteInfo { ReferBeneficiaryRoute({ - _i23.Key? key, - _i24.RegistrationDeliveryLocalization? appLocalizations, + _i24.Key? key, + _i25.RegistrationDeliveryLocalization? appLocalizations, bool isEditing = false, required String projectBeneficiaryClientRefId, - List<_i22.PageRouteInfo>? children, + List<_i23.PageRouteInfo>? children, }) : super( ReferBeneficiaryRoute.name, args: ReferBeneficiaryRouteArgs( @@ -985,8 +997,8 @@ class ReferBeneficiaryRoute static const String name = 'ReferBeneficiaryRoute'; - static const _i22.PageInfo page = - _i22.PageInfo(name); + static const _i23.PageInfo page = + _i23.PageInfo(name); } class ReferBeneficiaryRouteArgs { @@ -997,9 +1009,9 @@ class ReferBeneficiaryRouteArgs { required this.projectBeneficiaryClientRefId, }); - final _i23.Key? key; + final _i24.Key? key; - final _i24.RegistrationDeliveryLocalization? appLocalizations; + final _i25.RegistrationDeliveryLocalization? appLocalizations; final bool isEditing; @@ -1013,8 +1025,8 @@ class ReferBeneficiaryRouteArgs { /// generated route for /// [_i18.RegistrationDeliveryWrapperPage] -class RegistrationDeliveryWrapperRoute extends _i22.PageRouteInfo { - const RegistrationDeliveryWrapperRoute({List<_i22.PageRouteInfo>? children}) +class RegistrationDeliveryWrapperRoute extends _i23.PageRouteInfo { + const RegistrationDeliveryWrapperRoute({List<_i23.PageRouteInfo>? children}) : super( RegistrationDeliveryWrapperRoute.name, initialChildren: children, @@ -1022,17 +1034,17 @@ class RegistrationDeliveryWrapperRoute extends _i22.PageRouteInfo { static const String name = 'RegistrationDeliveryWrapperRoute'; - static const _i22.PageInfo page = _i22.PageInfo(name); + static const _i23.PageInfo page = _i23.PageInfo(name); } /// generated route for /// [_i19.SearchBeneficiaryPage] class SearchBeneficiaryRoute - extends _i22.PageRouteInfo { + extends _i23.PageRouteInfo { SearchBeneficiaryRoute({ - _i23.Key? key, - _i24.RegistrationDeliveryLocalization? appLocalizations, - List<_i22.PageRouteInfo>? children, + _i24.Key? key, + _i25.RegistrationDeliveryLocalization? appLocalizations, + List<_i23.PageRouteInfo>? children, }) : super( SearchBeneficiaryRoute.name, args: SearchBeneficiaryRouteArgs( @@ -1044,8 +1056,8 @@ class SearchBeneficiaryRoute static const String name = 'SearchBeneficiaryRoute'; - static const _i22.PageInfo page = - _i22.PageInfo(name); + static const _i23.PageInfo page = + _i23.PageInfo(name); } class SearchBeneficiaryRouteArgs { @@ -1054,9 +1066,9 @@ class SearchBeneficiaryRouteArgs { this.appLocalizations, }); - final _i23.Key? key; + final _i24.Key? key; - final _i24.RegistrationDeliveryLocalization? appLocalizations; + final _i25.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -1066,13 +1078,13 @@ class SearchBeneficiaryRouteArgs { /// generated route for /// [_i20.SideEffectsPage] -class SideEffectsRoute extends _i22.PageRouteInfo { +class SideEffectsRoute extends _i23.PageRouteInfo { SideEffectsRoute({ - _i23.Key? key, - _i24.RegistrationDeliveryLocalization? appLocalizations, - required List<_i28.TaskModel> tasks, + _i24.Key? key, + _i25.RegistrationDeliveryLocalization? appLocalizations, + required List<_i29.TaskModel> tasks, bool isEditing = false, - List<_i22.PageRouteInfo>? children, + List<_i23.PageRouteInfo>? children, }) : super( SideEffectsRoute.name, args: SideEffectsRouteArgs( @@ -1086,8 +1098,8 @@ class SideEffectsRoute extends _i22.PageRouteInfo { static const String name = 'SideEffectsRoute'; - static const _i22.PageInfo page = - _i22.PageInfo(name); + static const _i23.PageInfo page = + _i23.PageInfo(name); } class SideEffectsRouteArgs { @@ -1098,11 +1110,11 @@ class SideEffectsRouteArgs { this.isEditing = false, }); - final _i23.Key? key; + final _i24.Key? key; - final _i24.RegistrationDeliveryLocalization? appLocalizations; + final _i25.RegistrationDeliveryLocalization? appLocalizations; - final List<_i28.TaskModel> tasks; + final List<_i29.TaskModel> tasks; final bool isEditing; @@ -1115,12 +1127,12 @@ class SideEffectsRouteArgs { /// generated route for /// [_i21.SplashAcknowledgementPage] class SplashAcknowledgementRoute - extends _i22.PageRouteInfo { + extends _i23.PageRouteInfo { SplashAcknowledgementRoute({ - _i23.Key? key, - _i24.RegistrationDeliveryLocalization? appLocalizations, + _i24.Key? key, + _i25.RegistrationDeliveryLocalization? appLocalizations, bool? enableBackToSearch, - List<_i22.PageRouteInfo>? children, + List<_i23.PageRouteInfo>? children, }) : super( SplashAcknowledgementRoute.name, args: SplashAcknowledgementRouteArgs( @@ -1133,8 +1145,8 @@ class SplashAcknowledgementRoute static const String name = 'SplashAcknowledgementRoute'; - static const _i22.PageInfo page = - _i22.PageInfo(name); + static const _i23.PageInfo page = + _i23.PageInfo(name); } class SplashAcknowledgementRouteArgs { @@ -1144,9 +1156,9 @@ class SplashAcknowledgementRouteArgs { this.enableBackToSearch, }); - final _i23.Key? key; + final _i24.Key? key; - final _i24.RegistrationDeliveryLocalization? appLocalizations; + final _i25.RegistrationDeliveryLocalization? appLocalizations; final bool? enableBackToSearch; @@ -1155,3 +1167,41 @@ class SplashAcknowledgementRouteArgs { return 'SplashAcknowledgementRouteArgs{key: $key, appLocalizations: $appLocalizations, enableBackToSearch: $enableBackToSearch}'; } } + +/// generated route for +/// [_i22.SummaryPage] +class SummaryRoute extends _i23.PageRouteInfo { + SummaryRoute({ + _i24.Key? key, + _i25.RegistrationDeliveryLocalization? appLocalizations, + List<_i23.PageRouteInfo>? children, + }) : super( + SummaryRoute.name, + args: SummaryRouteArgs( + key: key, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'SummaryRoute'; + + static const _i23.PageInfo page = + _i23.PageInfo(name); +} + +class SummaryRouteArgs { + const SummaryRouteArgs({ + this.key, + this.appLocalizations, + }); + + final _i24.Key? key; + + final _i25.RegistrationDeliveryLocalization? appLocalizations; + + @override + String toString() { + return 'SummaryRouteArgs{key: $key, appLocalizations: $appLocalizations}'; + } +} diff --git a/packages/registration_delivery/lib/utils/i18_key_constants.dart b/packages/registration_delivery/lib/utils/i18_key_constants.dart index 8f1b54cdf..1389bb80d 100644 --- a/packages/registration_delivery/lib/utils/i18_key_constants.dart +++ b/packages/registration_delivery/lib/utils/i18_key_constants.dart @@ -228,6 +228,7 @@ class BeneficiaryDetails { String get recordCycle => 'BENEFICIARY_DETAILS_RECORD_CYCLE'; String get householdMemberSingular => 'BENEFICIARY_HOUSEHOLD_MEMBER'; String get householdMemberPlural => 'BENEFICIARY_HOUSEHOLD_MEMBERS'; + String get totalMembers => 'TOTAL_HOUSEHOLD_MEMBERS'; } class IndividualDetails { @@ -297,6 +298,8 @@ class HouseholdLocation { String get landmarkFormLabel => 'LANDMARK_FORM_LABEL'; + String get villageLabel => 'VILLAGE_LABEL'; + String get householdAddressLine2LabelText => 'HOUSEHOLD_ADDRESS_LINE_2_FORM_LABEL'; @@ -380,6 +383,7 @@ class HouseholdDetails { String get noOfRoomsLabel => 'NO_OF_ROOMS_LABEL'; String get houseDetailsLabel => 'HOUSE_DETAILS_LABEL'; String get selectStructureTypeError => 'PLEASE_SELECT_STRUCTURE_TYPE'; + String get typeOfStructure => 'TYPE_OF_STRUCTURE'; } class HouseholdOverView { diff --git a/packages/registration_delivery/lib/widgets/details_card.dart b/packages/registration_delivery/lib/widgets/details_card.dart new file mode 100644 index 000000000..ce04a268a --- /dev/null +++ b/packages/registration_delivery/lib/widgets/details_card.dart @@ -0,0 +1,125 @@ +import 'package:digit_components/theme/colors.dart'; +import 'package:digit_components/theme/digit_theme.dart'; +import 'package:digit_components/widgets/atoms/digit_divider.dart'; +import 'package:flutter/material.dart'; + +class LabelValueList extends StatelessWidget { + final List items; + final EdgeInsets? padding; + final String? heading; + final bool withDivider; + + const LabelValueList({ + Key? key, + required this.items, + this.padding, + this.heading, + this.withDivider = false, + + /// Default to no divider + }) : super(key: key); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + final textTheme = theme.textTheme; + + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (heading != null) + Padding( + padding: padding ?? const EdgeInsets.symmetric(vertical: 8.0), + child: Text( + heading!, + style: textTheme.headlineLarge?.copyWith( + color: const DigitColors().woodsmokeBlack, + ), + ), + ), + ..._buildItemsWithDividers(items, context), + ], + ); + } + + List _buildItemsWithDividers( + List items, BuildContext context) { + List itemList = []; + for (int i = 0; i < items.length; i++) { + itemList.add(_buildItem(items[i], context)); + if (i < items.length - 1 && withDivider) { + itemList.add( + const DigitDivider(), + ); + } + } + return itemList; + } + + Widget _buildItem(LabelValuePair item, BuildContext context) { + final theme = Theme.of(context); + final textTheme = theme.textTheme; + + return Padding( + padding: padding ?? const EdgeInsets.symmetric(vertical: 8.0), + child: item.isInline + ? Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Label taking 30% width + Expanded( + flex: 6, // 45% width + child: Text( + item.label, + style: textTheme.headlineSmall?.copyWith( + color: const DigitColors().woodsmokeBlack, + ), + ), + ), + const SizedBox( + width: kPadding * 4), // Gap between label and value + // Value taking rest of the width + Expanded( + flex: 8, // Remaining 55% width + child: Text( + item.value, + style: textTheme.bodySmall?.copyWith( + color: const DigitColors().woodsmokeBlack, + ), + ), + ), + ], + ) + : Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + item.label, + style: textTheme.headlineSmall?.copyWith( + color: const DigitColors().woodsmokeBlack, + ), + ), + const SizedBox(height: 4), + Text( + item.value, + style: textTheme.bodySmall?.copyWith( + color: const DigitColors().woodsmokeBlack, + ), + ), + ], + ), + ); + } +} + +class LabelValuePair { + final String label; + final String value; + final bool isInline; + + LabelValuePair({ + required this.label, + required this.value, + this.isInline = true, + }); +} diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 2a0ac87b2..80620ebb9 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -419,34 +419,30 @@ packages: digit_components: dependency: "direct main" description: - name: digit_components - sha256: "53ee8c0a7c992c0e8d1c9c867b6cf1d52e1728200f4b4436943a5d6c5e4984c3" - url: "https://pub.dev" - source: hosted + path: "../digit_components" + relative: true + source: path version: "1.0.0+2" digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "0e1ec8e4d2776fcc4a8118ac85043b8876466ec7399c14880f3d585ad3586ef6" - url: "https://pub.dev" - source: hosted + path: "../digit_data_model" + relative: true + source: path version: "1.0.2" digit_scanner: dependency: "direct main" description: - name: digit_scanner - sha256: a040c9c413436aeb953fdea3bc99ef618641189b06e8f155d84ac83ba8d40fd1 - url: "https://pub.dev" - source: hosted + path: "../digit_scanner" + relative: true + source: path version: "1.0.2" digit_showcase: dependency: "direct main" description: - name: digit_showcase - sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" - url: "https://pub.dev" - source: hosted + path: "../digit_showcase" + relative: true + source: path version: "1.0.0" dio: dependency: transitive @@ -1461,5 +1457,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" + dart: ">=3.2.0 <4.0.0" flutter: ">=3.16.0" diff --git a/tools/registration_delivery_imports.dart b/tools/registration_delivery_imports.dart index 2aeeada9e..718b3d9e0 100644 --- a/tools/registration_delivery_imports.dart +++ b/tools/registration_delivery_imports.dart @@ -818,6 +818,10 @@ void _addRegistrationRoutesAndImportToRouterFile(String routerFilePath) { page: BeneficiaryAcknowledgementRoute.page, path: 'beneficiary-acknowledgement', ), + AutoRoute( + page: SummaryRoute.page, + path: 'beneficiary-summary', + ), ], ), AutoRoute( From e7178da4d6b0597cf3f53f9425aeded78f674072 Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Fri, 12 Jul 2024 10:11:03 +0530 Subject: [PATCH 050/241] Added refused delivery page (#451) * integrated checklist inside the beneficiary flow and updated gender field to selection card * fetching refusal reasons * added refused delivery page * added refused delivery page --------- Co-authored-by: rachana-egov Co-authored-by: Naveen J <83631045+naveen-egov@users.noreply.github.com> --- .../app_initialization.dart | 2 +- .../no_sql/schema/app_configuration.dart | 8 + .../no_sql/schema/app_configuration.g.dart | 539 +++++++++++++++++- .../lib/data/repositories/remote/mdms.dart | 114 ++-- .../models/app_config/app_config_model.dart | 2 + .../app_config/app_config_model.freezed.dart | 39 +- .../models/app_config/app_config_model.g.dart | 4 + .../models/entities/mdms_master_enums.dart | 2 + .../entities/mdms_master_enums.mapper.dart | 4 + .../lib/pages/home.dart | 7 +- .../lib/router/app_router.dart | 8 + .../beneficiary/beneficiary_checklist.dart | 201 ++++--- .../pages/beneficiary/refused_delivery.dart | 192 +++++++ .../router/registration_delivery_router.dart | 9 + .../registration_delivery_router.gm.dart | 71 ++- .../lib/utils/i18_key_constants.dart | 17 + .../lib/utils/utils.dart | 4 + .../showcase/config/refused_delivery.dart | 28 + .../showcase/config/showcase_constants.dart | 2 + 19 files changed, 1111 insertions(+), 142 deletions(-) create mode 100644 packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart create mode 100644 packages/registration_delivery/lib/widgets/showcase/config/refused_delivery.dart diff --git a/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.dart b/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.dart index c5c0ca0d3..076eeb8fc 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.dart @@ -86,6 +86,7 @@ class AppInitializationBloc MasterEnums.symptomTypes.toValue(), MasterEnums.referralReasons.toValue(), MasterEnums.houseStructureTypes.toValue(), + MasterEnums.refusalReasons.toValue(), MasterEnums.bandWidthBatchSize.toValue(), MasterEnums.downSyncBandwidthBatchSize.toValue(), MasterEnums.hhDelReasons.toValue(), @@ -116,7 +117,6 @@ class AppInitializationBloc ), ).toJson(), ); - final pgrServiceDefinitions = await mdmsRepository.searchPGRServiceDefinitions( envConfig.variables.mdmsApiPath, diff --git a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.dart b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.dart index f9e6fc205..e996db094 100644 --- a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.dart +++ b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.dart @@ -74,6 +74,7 @@ class AppConfiguration { late List? referralReasons; late List? houseStructureTypes; + late List? refusalReasons; } @embedded @@ -205,3 +206,10 @@ class HouseStructureTypes { late String name; late bool active; } + +@embedded +class RefusalReasons { + late String code; + late String name; + late bool active; +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.g.dart b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.g.dart index 7d63acf31..7fcf381ae 100644 --- a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.g.dart +++ b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.g.dart @@ -149,8 +149,14 @@ const AppConfigurationSchema = CollectionSchema( type: IsarType.objectList, target: r'ReferralReasons', ), - r'symptomsTypes': PropertySchema( + r'refusalReasons': PropertySchema( id: 23, + name: r'refusalReasons', + type: IsarType.objectList, + target: r'RefusalReasons', + ), + r'symptomsTypes': PropertySchema( + id: 24, name: r'symptomsTypes', type: IsarType.objectList, target: r'SymptomsTypes', @@ -183,7 +189,8 @@ const AppConfigurationSchema = CollectionSchema( r'FirebaseConfig': FirebaseConfigSchema, r'SymptomsTypes': SymptomsTypesSchema, r'ReferralReasons': ReferralReasonsSchema, - r'HouseStructureTypes': HouseStructureTypesSchema + r'HouseStructureTypes': HouseStructureTypesSchema, + r'RefusalReasons': RefusalReasonsSchema }, getId: _appConfigurationGetId, getLinks: _appConfigurationGetLinks, @@ -447,6 +454,20 @@ int _appConfigurationEstimateSize( } } } + { + final list = object.refusalReasons; + if (list != null) { + bytesCount += 3 + list.length * 3; + { + final offsets = allOffsets[RefusalReasons]!; + for (var i = 0; i < list.length; i++) { + final value = list[i]; + bytesCount += + RefusalReasonsSchema.estimateSize(value, offsets, allOffsets); + } + } + } + } { final list = object.symptomsTypes; if (list != null) { @@ -578,9 +599,15 @@ void _appConfigurationSerialize( ReferralReasonsSchema.serialize, object.referralReasons, ); - writer.writeObjectList( + writer.writeObjectList( offsets[23], allOffsets, + RefusalReasonsSchema.serialize, + object.refusalReasons, + ); + writer.writeObjectList( + offsets[24], + allOffsets, SymptomsTypesSchema.serialize, object.symptomsTypes, ); @@ -702,8 +729,14 @@ AppConfiguration _appConfigurationDeserialize( allOffsets, ReferralReasons(), ); - object.symptomsTypes = reader.readObjectList( + object.refusalReasons = reader.readObjectList( offsets[23], + RefusalReasonsSchema.deserialize, + allOffsets, + RefusalReasons(), + ); + object.symptomsTypes = reader.readObjectList( + offsets[24], SymptomsTypesSchema.deserialize, allOffsets, SymptomsTypes(), @@ -847,6 +880,13 @@ P _appConfigurationDeserializeProp

( ReferralReasons(), )) as P; case 23: + return (reader.readObjectList( + offset, + RefusalReasonsSchema.deserialize, + allOffsets, + RefusalReasons(), + )) as P; + case 24: return (reader.readObjectList( offset, SymptomsTypesSchema.deserialize, @@ -3414,6 +3454,113 @@ extension AppConfigurationQueryFilter }); } + QueryBuilder + refusalReasonsIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'refusalReasons', + )); + }); + } + + QueryBuilder + refusalReasonsIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'refusalReasons', + )); + }); + } + + QueryBuilder + refusalReasonsLengthEqualTo(int length) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'refusalReasons', + length, + true, + length, + true, + ); + }); + } + + QueryBuilder + refusalReasonsIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'refusalReasons', + 0, + true, + 0, + true, + ); + }); + } + + QueryBuilder + refusalReasonsIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'refusalReasons', + 0, + false, + 999999, + true, + ); + }); + } + + QueryBuilder + refusalReasonsLengthLessThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'refusalReasons', + 0, + true, + length, + include, + ); + }); + } + + QueryBuilder + refusalReasonsLengthGreaterThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'refusalReasons', + length, + include, + 999999, + true, + ); + }); + } + + QueryBuilder + refusalReasonsLengthBetween( + int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'refusalReasons', + lower, + includeLower, + upper, + includeUpper, + ); + }); + } + QueryBuilder symptomsTypesIsNull() { return QueryBuilder.apply(this, (query) { @@ -3645,6 +3792,13 @@ extension AppConfigurationQueryObject }); } + QueryBuilder + refusalReasonsElement(FilterQuery q) { + return QueryBuilder.apply(this, (query) { + return query.object(q, r'refusalReasons'); + }); + } + QueryBuilder symptomsTypesElement(FilterQuery q) { return QueryBuilder.apply(this, (query) { @@ -4058,6 +4212,13 @@ extension AppConfigurationQueryProperty }); } + QueryBuilder?, QQueryOperations> + refusalReasonsProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'refusalReasons'); + }); + } + QueryBuilder?, QQueryOperations> symptomsTypesProperty() { return QueryBuilder.apply(this, (query) { @@ -10105,3 +10266,373 @@ extension HouseStructureTypesQueryFilter on QueryBuilder {} + +// coverage:ignore-file +// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types + +const RefusalReasonsSchema = Schema( + name: r'RefusalReasons', + id: 1547295305086494581, + properties: { + r'active': PropertySchema( + id: 0, + name: r'active', + type: IsarType.bool, + ), + r'code': PropertySchema( + id: 1, + name: r'code', + type: IsarType.string, + ), + r'name': PropertySchema( + id: 2, + name: r'name', + type: IsarType.string, + ) + }, + estimateSize: _refusalReasonsEstimateSize, + serialize: _refusalReasonsSerialize, + deserialize: _refusalReasonsDeserialize, + deserializeProp: _refusalReasonsDeserializeProp, +); + +int _refusalReasonsEstimateSize( + RefusalReasons object, + List offsets, + Map> allOffsets, +) { + var bytesCount = offsets.last; + bytesCount += 3 + object.code.length * 3; + bytesCount += 3 + object.name.length * 3; + return bytesCount; +} + +void _refusalReasonsSerialize( + RefusalReasons object, + IsarWriter writer, + List offsets, + Map> allOffsets, +) { + writer.writeBool(offsets[0], object.active); + writer.writeString(offsets[1], object.code); + writer.writeString(offsets[2], object.name); +} + +RefusalReasons _refusalReasonsDeserialize( + Id id, + IsarReader reader, + List offsets, + Map> allOffsets, +) { + final object = RefusalReasons(); + object.active = reader.readBool(offsets[0]); + object.code = reader.readString(offsets[1]); + object.name = reader.readString(offsets[2]); + return object; +} + +P _refusalReasonsDeserializeProp

( + IsarReader reader, + int propertyId, + int offset, + Map> allOffsets, +) { + switch (propertyId) { + case 0: + return (reader.readBool(offset)) as P; + case 1: + return (reader.readString(offset)) as P; + case 2: + return (reader.readString(offset)) as P; + default: + throw IsarError('Unknown property with id $propertyId'); + } +} + +extension RefusalReasonsQueryFilter + on QueryBuilder { + QueryBuilder + activeEqualTo(bool value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'active', + value: value, + )); + }); + } + + QueryBuilder + codeEqualTo( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'code', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codeGreaterThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'code', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codeLessThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'code', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codeBetween( + String lower, + String upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'code', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codeStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'code', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codeEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'code', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codeContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'code', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codeMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'code', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codeIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'code', + value: '', + )); + }); + } + + QueryBuilder + codeIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'code', + value: '', + )); + }); + } + + QueryBuilder + nameEqualTo( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameGreaterThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameLessThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameBetween( + String lower, + String upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'name', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'name', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'name', + value: '', + )); + }); + } + + QueryBuilder + nameIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'name', + value: '', + )); + }); + } +} + +extension RefusalReasonsQueryObject + on QueryBuilder {} diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart index f9d0815bf..ebce4a350 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart @@ -19,9 +19,9 @@ class MdmsRepository { const MdmsRepository(this._client); Future searchServiceRegistry( - String apiEndPoint, - Map body, - ) async { + String apiEndPoint, + Map body, + ) async { try { final response = await _client.post(apiEndPoint, data: body); @@ -34,9 +34,9 @@ class MdmsRepository { } FutureOr writeToRegistryDB( - ServiceRegistryPrimaryWrapperModel result, - Isar isar, - ) async { + ServiceRegistryPrimaryWrapperModel result, + Isar isar, + ) async { final List newServiceRegistryList = []; final data = result.serviceRegistry?.serviceRegistryList; if (data != null && data.isNotEmpty) { @@ -68,9 +68,9 @@ class MdmsRepository { } Future searchAppConfig( - String apiEndPoint, - Map body, - ) async { + String apiEndPoint, + Map body, + ) async { try { final response = await _client.post(apiEndPoint, data: body); @@ -90,9 +90,9 @@ class MdmsRepository { } Future searchPGRServiceDefinitions( - String apiEndPoint, - Map body, - ) async { + String apiEndPoint, + Map body, + ) async { try { final response = await _client.post(apiEndPoint, data: body); @@ -110,10 +110,10 @@ class MdmsRepository { } FutureOr writeToAppConfigDB( - app_configuration.AppConfigPrimaryWrapperModel result, - PGRServiceDefinitions pgrServiceDefinitions, - Isar isar, - ) async { + app_configuration.AppConfigPrimaryWrapperModel result, + PGRServiceDefinitions pgrServiceDefinitions, + Isar isar, + ) async { final appConfiguration = AppConfiguration(); final data = result.rowVersions?.rowVersionslist; @@ -152,7 +152,7 @@ class MdmsRepository { ..firebaseConfig = firebaseConfig; final List? languageList = - commonMasters?.stateInfo.first.languages.map((element) { + commonMasters?.stateInfo.first.languages.map((element) { final languages = Languages() ..label = element.label ..value = element.value; @@ -161,7 +161,7 @@ class MdmsRepository { }).toList(); final List? bandwidthBatchSize = - element?.bandWidthBatchSize.map((e) { + element?.bandWidthBatchSize.map((e) { final bandwidthBatchSizeElement = BandwidthBatchSize() ..batchSize = e.batchSize ..maxRange = e.maxRange @@ -171,7 +171,7 @@ class MdmsRepository { }).toList(); final List? downSyncBandWidthBatchSize = - element?.downSyncBandWidthBatchSize.map((e) { + element?.downSyncBandWidthBatchSize.map((e) { final bandwidthBatchSizeElement = BandwidthBatchSize() ..batchSize = e.batchSize ..maxRange = e.maxRange @@ -180,7 +180,7 @@ class MdmsRepository { return bandwidthBatchSizeElement; }).toList(); final List? callSupportList = - element?.callSupportOptions!.map((element) { + element?.callSupportOptions!.map((element) { final callNumber = CallSupportList() ..name = element.name ..code = element.code; @@ -189,7 +189,7 @@ class MdmsRepository { }).toList(); final List? householdDeletionReasonOptions = - element?.householdDeletionReasonOptions.map((element) { + element?.householdDeletionReasonOptions.map((element) { final deletionReasonOption = HouseholdDeletionReasonOptions() ..name = element.value ..code = element.code; @@ -198,8 +198,8 @@ class MdmsRepository { }).toList(); final List? - householdMemberDeletionReasonOptions = - element?.householdMemberDeletionReasonOptions.map((element) { + householdMemberDeletionReasonOptions = + element?.householdMemberDeletionReasonOptions.map((element) { final deletionReasonOption = HouseholdMemberDeletionReasonOptions() ..name = element.value ..code = element.code; @@ -208,7 +208,7 @@ class MdmsRepository { }).toList(); final List? genderOptions = - commonMasters?.genderType.map((element) { + commonMasters?.genderType.map((element) { final genderOption = GenderOptions() ..name = element.name ?? '' ..code = element.code; @@ -217,7 +217,7 @@ class MdmsRepository { }).toList(); final List? idTypeOptions = - element?.idTypeOptions.map((element) { + element?.idTypeOptions.map((element) { final idOption = IdTypeOptions() ..name = element.name ..code = element.code; @@ -226,7 +226,7 @@ class MdmsRepository { }).toList(); final List? checklistTypes = - element?.checklistTypes.map((e) { + element?.checklistTypes.map((e) { final checklist = ChecklistTypes() ..name = e.name ..code = e.code; @@ -235,7 +235,7 @@ class MdmsRepository { }).toList(); final List? transportTypes = - element?.transportTypes.map((e) { + element?.transportTypes.map((e) { final transportTypes = TransportTypes() ..name = e.name ..code = e.code; @@ -244,7 +244,7 @@ class MdmsRepository { }).toList(); final List? deliveryCommentOptions = - element?.deliveryCommentOptions.map((element) { + element?.deliveryCommentOptions.map((element) { final deliveryCommentOption = DeliveryCommentOptions() ..name = element.name ..code = element.code; @@ -253,7 +253,7 @@ class MdmsRepository { }).toList(); final List? interfaceList = - element?.backendInterface.first.interface.map((e) { + element?.backendInterface.first.interface.map((e) { final config = Config()..localStoreTTL = e.config.localStoreTTL; final interfaces = Interfaces() @@ -265,7 +265,7 @@ class MdmsRepository { }).toList(); final List? complaintTypesList = - pgrServiceDefinitions.serviceDefinitionWrapper?.definition.map((e) { + pgrServiceDefinitions.serviceDefinitionWrapper?.definition.map((e) { final types = ComplaintTypes() ..name = e.name ..code = e.serviceCode; @@ -292,32 +292,42 @@ class MdmsRepository { appConfiguration.downSyncBandwidthBatchSize = downSyncBandWidthBatchSize; appConfiguration.symptomsTypes = result.hcmWrapperModel?.symptomsTypeList?.map((e) { - final symptomTypes = SymptomsTypes() - ..name = e.name - ..code = e.code - ..active = e.active; + final symptomTypes = SymptomsTypes() + ..name = e.name + ..code = e.code + ..active = e.active; - return symptomTypes; - }).toList(); + return symptomTypes; + }).toList(); appConfiguration.referralReasons = result.hcmWrapperModel?.referralReasonList?.map((e) { - final reasonTypes = ReferralReasons() - ..name = e.name - ..code = e.code - ..active = e.active; + final reasonTypes = ReferralReasons() + ..name = e.name + ..code = e.code + ..active = e.active; - return reasonTypes; - }).toList(); + return reasonTypes; + }).toList(); appConfiguration.houseStructureTypes = result.hcmWrapperModel?.houseStructureTypes?.map((e) { - final structureTypes = HouseStructureTypes() - ..name = e.name.toString() - ..code = e.code - ..active = e.active; + final structureTypes = HouseStructureTypes() + ..name = e.name.toString() + ..code = e.code + ..active = e.active; - return structureTypes; - }).toList(); + return structureTypes; + }).toList(); + + appConfiguration.refusalReasons = + result.hcmWrapperModel?.refusalReasons?.map((e) { + final reasonTypes = RefusalReasons() + ..name = e.name.toString() + ..code = e.code + ..active = e.active; + + return reasonTypes; + }).toList(); await isar.writeTxn(() async { await isar.appConfigurations.put(appConfiguration); @@ -326,9 +336,9 @@ class MdmsRepository { } Future searchRoleActions( - String apiEndPoint, - Map body, - ) async { + String apiEndPoint, + Map body, + ) async { try { final Response response = await _client.post(apiEndPoint, data: body); @@ -337,4 +347,4 @@ class MdmsRepository { rethrow; } } -} +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart index 925241ffb..b6b72d0f0 100644 --- a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart +++ b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart @@ -91,6 +91,8 @@ class HCMWrapperModel with _$HCMWrapperModel { List? referralReasonList, @JsonKey(name: 'HOUSE_STRUCTURE_TYPES') List? houseStructureTypes, + @JsonKey(name: 'REFUSAL_REASONS') + List? refusalReasons, @JsonKey(name: 'FIREBASE_CONFIG') required List? firebaseConfig, }) = _HCMWrapperModel; diff --git a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.freezed.dart b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.freezed.dart index c296fe65a..83979d20c 100644 --- a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.freezed.dart +++ b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.freezed.dart @@ -958,6 +958,9 @@ mixin _$HCMWrapperModel { @JsonKey(name: 'HOUSE_STRUCTURE_TYPES') List? get houseStructureTypes => throw _privateConstructorUsedError; + @JsonKey(name: 'REFUSAL_REASONS') + List? get refusalReasons => + throw _privateConstructorUsedError; @JsonKey(name: 'FIREBASE_CONFIG') List? get firebaseConfig => throw _privateConstructorUsedError; @@ -1000,6 +1003,7 @@ abstract class $HCMWrapperModelCopyWith<$Res> { List? referralReasonList, @JsonKey(name: 'HOUSE_STRUCTURE_TYPES') List? houseStructureTypes, + @JsonKey(name: 'REFUSAL_REASONS') List? refusalReasons, @JsonKey(name: 'FIREBASE_CONFIG') List? firebaseConfig}); } @@ -1031,6 +1035,7 @@ class _$HCMWrapperModelCopyWithImpl<$Res, $Val extends HCMWrapperModel> Object? symptomsTypeList = freezed, Object? referralReasonList = freezed, Object? houseStructureTypes = freezed, + Object? refusalReasons = freezed, Object? firebaseConfig = freezed, }) { return _then(_value.copyWith( @@ -1095,6 +1100,10 @@ class _$HCMWrapperModelCopyWithImpl<$Res, $Val extends HCMWrapperModel> ? _value.houseStructureTypes : houseStructureTypes // ignore: cast_nullable_to_non_nullable as List?, + refusalReasons: freezed == refusalReasons + ? _value.refusalReasons + : refusalReasons // ignore: cast_nullable_to_non_nullable + as List?, firebaseConfig: freezed == firebaseConfig ? _value.firebaseConfig : firebaseConfig // ignore: cast_nullable_to_non_nullable @@ -1137,6 +1146,7 @@ abstract class _$$HCMWrapperModelImplCopyWith<$Res> List? referralReasonList, @JsonKey(name: 'HOUSE_STRUCTURE_TYPES') List? houseStructureTypes, + @JsonKey(name: 'REFUSAL_REASONS') List? refusalReasons, @JsonKey(name: 'FIREBASE_CONFIG') List? firebaseConfig}); } @@ -1166,6 +1176,7 @@ class __$$HCMWrapperModelImplCopyWithImpl<$Res> Object? symptomsTypeList = freezed, Object? referralReasonList = freezed, Object? houseStructureTypes = freezed, + Object? refusalReasons = freezed, Object? firebaseConfig = freezed, }) { return _then(_$HCMWrapperModelImpl( @@ -1230,6 +1241,10 @@ class __$$HCMWrapperModelImplCopyWithImpl<$Res> ? _value._houseStructureTypes : houseStructureTypes // ignore: cast_nullable_to_non_nullable as List?, + refusalReasons: freezed == refusalReasons + ? _value._refusalReasons + : refusalReasons // ignore: cast_nullable_to_non_nullable + as List?, firebaseConfig: freezed == firebaseConfig ? _value._firebaseConfig : firebaseConfig // ignore: cast_nullable_to_non_nullable @@ -1272,6 +1287,8 @@ class _$HCMWrapperModelImpl implements _HCMWrapperModel { final List? referralReasonList, @JsonKey(name: 'HOUSE_STRUCTURE_TYPES') final List? houseStructureTypes, + @JsonKey(name: 'REFUSAL_REASONS') + final List? refusalReasons, @JsonKey(name: 'FIREBASE_CONFIG') required final List? firebaseConfig}) : _appConfig = appConfig, @@ -1290,6 +1307,7 @@ class _$HCMWrapperModelImpl implements _HCMWrapperModel { _symptomsTypeList = symptomsTypeList, _referralReasonList = referralReasonList, _houseStructureTypes = houseStructureTypes, + _refusalReasons = refusalReasons, _firebaseConfig = firebaseConfig; factory _$HCMWrapperModelImpl.fromJson(Map json) => @@ -1451,6 +1469,17 @@ class _$HCMWrapperModelImpl implements _HCMWrapperModel { return EqualUnmodifiableListView(value); } + final List? _refusalReasons; + @override + @JsonKey(name: 'REFUSAL_REASONS') + List? get refusalReasons { + final value = _refusalReasons; + if (value == null) return null; + if (_refusalReasons is EqualUnmodifiableListView) return _refusalReasons; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); + } + final List? _firebaseConfig; @override @JsonKey(name: 'FIREBASE_CONFIG') @@ -1464,7 +1493,7 @@ class _$HCMWrapperModelImpl implements _HCMWrapperModel { @override String toString() { - return 'HCMWrapperModel(appConfig: $appConfig, bandWidthBatchSize: $bandWidthBatchSize, downSyncBandWidthBatchSize: $downSyncBandWidthBatchSize, householdDeletionReasonOptions: $householdDeletionReasonOptions, householdMemberDeletionReasonOptions: $householdMemberDeletionReasonOptions, backgroundServiceConfig: $backgroundServiceConfig, checklistTypes: $checklistTypes, idTypeOptions: $idTypeOptions, deliveryCommentOptions: $deliveryCommentOptions, backendInterface: $backendInterface, callSupportOptions: $callSupportOptions, transportTypes: $transportTypes, symptomsTypeList: $symptomsTypeList, referralReasonList: $referralReasonList, houseStructureTypes: $houseStructureTypes, firebaseConfig: $firebaseConfig)'; + return 'HCMWrapperModel(appConfig: $appConfig, bandWidthBatchSize: $bandWidthBatchSize, downSyncBandWidthBatchSize: $downSyncBandWidthBatchSize, householdDeletionReasonOptions: $householdDeletionReasonOptions, householdMemberDeletionReasonOptions: $householdMemberDeletionReasonOptions, backgroundServiceConfig: $backgroundServiceConfig, checklistTypes: $checklistTypes, idTypeOptions: $idTypeOptions, deliveryCommentOptions: $deliveryCommentOptions, backendInterface: $backendInterface, callSupportOptions: $callSupportOptions, transportTypes: $transportTypes, symptomsTypeList: $symptomsTypeList, referralReasonList: $referralReasonList, houseStructureTypes: $houseStructureTypes, refusalReasons: $refusalReasons, firebaseConfig: $firebaseConfig)'; } @override @@ -1505,6 +1534,8 @@ class _$HCMWrapperModelImpl implements _HCMWrapperModel { .equals(other._referralReasonList, _referralReasonList) && const DeepCollectionEquality() .equals(other._houseStructureTypes, _houseStructureTypes) && + const DeepCollectionEquality() + .equals(other._refusalReasons, _refusalReasons) && const DeepCollectionEquality() .equals(other._firebaseConfig, _firebaseConfig)); } @@ -1529,6 +1560,7 @@ class _$HCMWrapperModelImpl implements _HCMWrapperModel { const DeepCollectionEquality().hash(_symptomsTypeList), const DeepCollectionEquality().hash(_referralReasonList), const DeepCollectionEquality().hash(_houseStructureTypes), + const DeepCollectionEquality().hash(_refusalReasons), const DeepCollectionEquality().hash(_firebaseConfig)); @JsonKey(ignore: true) @@ -1578,6 +1610,8 @@ abstract class _HCMWrapperModel implements HCMWrapperModel { final List? referralReasonList, @JsonKey(name: 'HOUSE_STRUCTURE_TYPES') final List? houseStructureTypes, + @JsonKey(name: 'REFUSAL_REASONS') + final List? refusalReasons, @JsonKey(name: 'FIREBASE_CONFIG') required final List? firebaseConfig}) = _$HCMWrapperModelImpl; @@ -1631,6 +1665,9 @@ abstract class _HCMWrapperModel implements HCMWrapperModel { @JsonKey(name: 'HOUSE_STRUCTURE_TYPES') List? get houseStructureTypes; @override + @JsonKey(name: 'REFUSAL_REASONS') + List? get refusalReasons; + @override @JsonKey(name: 'FIREBASE_CONFIG') List? get firebaseConfig; @override diff --git a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.g.dart b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.g.dart index 648e375a9..f2c00629e 100644 --- a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.g.dart +++ b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.g.dart @@ -142,6 +142,9 @@ _$HCMWrapperModelImpl _$$HCMWrapperModelImplFromJson( houseStructureTypes: (json['HOUSE_STRUCTURE_TYPES'] as List?) ?.map((e) => CommonMasterModel.fromJson(e as Map)) .toList(), + refusalReasons: (json['REFUSAL_REASONS'] as List?) + ?.map((e) => CommonMasterModel.fromJson(e as Map)) + .toList(), firebaseConfig: (json['FIREBASE_CONFIG'] as List?) ?.map((e) => FirebaseConfig.fromJson(e as Map)) .toList(), @@ -167,6 +170,7 @@ Map _$$HCMWrapperModelImplToJson( 'SYMPTOM_TYPES': instance.symptomsTypeList, 'REFERRAL_REASONS': instance.referralReasonList, 'HOUSE_STRUCTURE_TYPES': instance.houseStructureTypes, + 'REFUSAL_REASONS': instance.refusalReasons, 'FIREBASE_CONFIG': instance.firebaseConfig, }; diff --git a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart index 67182864a..242d256f1 100644 --- a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart +++ b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart @@ -13,6 +13,8 @@ enum MasterEnums { referralReasons, @MappableValue("HOUSE_STRUCTURE_TYPES") houseStructureTypes, + @MappableValue("REFUSAL_REASONS") + refusalReasons, @MappableValue("BANDWIDTH_BATCH_SIZE") bandWidthBatchSize, @MappableValue("DOWNSYNC-BANDWIDTH_BATCH_SIZE") diff --git a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart index 384d0c6d2..bf9a34043 100644 --- a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart +++ b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart @@ -33,6 +33,8 @@ class MasterEnumsMapper extends EnumMapper { return MasterEnums.referralReasons; case "HOUSE_STRUCTURE_TYPES": return MasterEnums.houseStructureTypes; + case "REFUSAL_REASONS": + return MasterEnums.refusalReasons; case "BANDWIDTH_BATCH_SIZE": return MasterEnums.bandWidthBatchSize; case "DOWNSYNC-BANDWIDTH_BATCH_SIZE": @@ -81,6 +83,8 @@ class MasterEnumsMapper extends EnumMapper { return "REFERRAL_REASONS"; case MasterEnums.houseStructureTypes: return "HOUSE_STRUCTURE_TYPES"; + case MasterEnums.refusalReasons: + return "REFUSAL_REASONS"; case MasterEnums.bandWidthBatchSize: return "BANDWIDTH_BATCH_SIZE"; case MasterEnums.downSyncBandwidthBatchSize: diff --git a/apps/health_campaign_field_worker_app/lib/pages/home.dart b/apps/health_campaign_field_worker_app/lib/pages/home.dart index a6bc20cf0..392b0579e 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/home.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/home.dart @@ -628,7 +628,12 @@ void setPackagesSingleton(BuildContext context) { appConfiguration.referralReasons?.map((e) => e.code).toList(), houseStructureTypes: appConfiguration.houseStructureTypes ?.map((e) => e.code) - .toList()); + .toList(), + refusalReasons: appConfiguration.refusalReasons + ?.map((e) => e.code) + .toList(), + ); + AttendanceSingleton().setInitialData( projectId: context.projectId, diff --git a/apps/health_campaign_field_worker_app/lib/router/app_router.dart b/apps/health_campaign_field_worker_app/lib/router/app_router.dart index 0f36a7d67..84eda48d7 100644 --- a/apps/health_campaign_field_worker_app/lib/router/app_router.dart +++ b/apps/health_campaign_field_worker_app/lib/router/app_router.dart @@ -141,10 +141,18 @@ class AppRouter extends _$AppRouter { page: BeneficiaryDetailsRoute.page, path: 'beneficiary-details', ), + AutoRoute( + page: BeneficiaryChecklistRoute.page, + path: 'beneficiary-checklist', + ), AutoRoute( page: DeliverInterventionRoute.page, path: 'deliver-intervention', ), + AutoRoute( + page: RefusedDeliveryRoute.page, + path: 'refused-delivery', + ), AutoRoute( page: SideEffectsRoute.page, path: 'side-effects', diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart index b438b4341..0389fc26a 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart @@ -8,6 +8,8 @@ import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:registration_delivery/pages/beneficiary/refused_delivery.dart'; + import '../../router/registration_delivery_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; @@ -49,17 +51,20 @@ class _BeneficiaryChecklistPageState Widget build(BuildContext context) { final theme = Theme.of(context); - - return PopScope( canPop: false, child: Scaffold( - body: BlocBuilder( + body: BlocBuilder( builder: (context, state) { state.mapOrNull( serviceDefinitionFetch: (value) { - selectedServiceDefinition = value.serviceDefinitionList.where((element) => element.code.toString().contains('IRS.TRAINING_SUPERVISION.DISTRIBUTOR')).toList().first; + selectedServiceDefinition = value.serviceDefinitionList + .where((element) => element.code + .toString() + .contains('IRS.TRAINING_SUPERVISION.DISTRIBUTOR')) + .toList() + .first; + initialAttributes = selectedServiceDefinition?.attributes; if (!isControllersInitialized) { initialAttributes?.forEach((e) { @@ -89,12 +94,48 @@ class _BeneficiaryChecklistPageState footer: DigitCard( margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), padding: - const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), + const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), child: DigitElevatedButton( onPressed: () async { // TODO: Submit checklist - await context.router - .push(DeliverInterventionRoute()); + + DigitDialog.show( + context, + options: DigitDialogOptions( + titleText: 'Is the Spraying Successful?', + barrierDismissible: false, + enableRecordPast: true, + dialogPadding: const EdgeInsets.fromLTRB( + kPadding, + kPadding, + kPadding, + 0, + ), + primaryAction: DigitDialogActions( + label: localizations.translate( + i18.common.coreCommonYes, + ), + action: (ctx) { + Navigator.of(ctx).pop(); + ctx.router.push( + DeliverInterventionRoute(), + ); + }, + ), + secondaryAction: DigitDialogActions( + label: localizations.translate( + i18.common.coreCommonNo, + ), + action: (ctx) { + Navigator.of(ctx).pop(); + ctx.router.push( + RefusedDeliveryRoute(), + ); + }, + ), + ), + ); + }, child: Text( localizations.translate(i18.common.coreCommonSubmit), @@ -110,16 +151,15 @@ class _BeneficiaryChecklistPageState padding: const EdgeInsets.only(bottom: 8), child: Text( '${localizations.translate( - selectedServiceDefinition!.code - .toString(), + selectedServiceDefinition!.code.toString(), )} ${localizations.translate(i18.checklist.checklist)}', style: theme.textTheme.displayMedium, textAlign: TextAlign.left, ), ), ...initialAttributes!.map(( - e, - ) { + e, + ) { int index = (initialAttributes ?? []).indexOf(e); return Column(children: [ @@ -146,7 +186,7 @@ class _BeneficiaryChecklistPageState return (RegExp(e.regex!).hasMatch(value!)) ? null : localizations - .translate("${e.code}_REGEX"); + .translate("${e.code}_REGEX"); } return null; @@ -179,15 +219,15 @@ class _BeneficiaryChecklistPageState return (RegExp(e.regex!).hasMatch(value!)) ? null : localizations - .translate("${e.code}_REGEX"); + .translate("${e.code}_REGEX"); } return null; }, controller: controller[index], label: '${localizations.translate( - '${value.selectedServiceDefinition?.code}.${e.code}', - ).trim()} ${e.required == true ? '*' : ''}', + '${value.selectedServiceDefinition?.code}.${e.code}', + ).trim()} ${e.required == true ? '*' : ''}', ), ] else if (e.dataType == 'MultiValueList' && !(e.code ?? '').contains('.')) ...[ @@ -212,46 +252,46 @@ class _BeneficiaryChecklistPageState return Column( children: e.values! .map((e) => DigitCheckboxTile( - label: e, - value: controller[index] - .text - .split('.') - .contains(e), - onChanged: (value) { - context - .read() - .add( - ServiceChecklistEvent( - value: e.toString(), - submitTriggered: - submitTriggered, - ), - ); - final String ele; - var val = controller[index] - .text - .split('.'); - if (val.contains(e)) { - val.remove(e); - ele = val.join("."); - } else { - ele = - "${controller[index].text}.$e"; - } - controller[index].value = - TextEditingController - .fromValue( - TextEditingValue( - text: ele, - ), - ).value; - }, - )) + label: e, + value: controller[index] + .text + .split('.') + .contains(e), + onChanged: (value) { + context + .read() + .add( + ServiceChecklistEvent( + value: e.toString(), + submitTriggered: + submitTriggered, + ), + ); + final String ele; + var val = controller[index] + .text + .split('.'); + if (val.contains(e)) { + val.remove(e); + ele = val.join("."); + } else { + ele = + "${controller[index].text}.$e"; + } + controller[index].value = + TextEditingController + .fromValue( + TextEditingValue( + text: ele, + ), + ).value; + }, + )) .toList(), ); }, ), - ]else if (e.dataType == 'Boolean') ...[ + ] else if (e.dataType == 'Boolean') ...[ if (!(e.code ?? '').contains('.')) DigitCard( child: Column( @@ -266,7 +306,9 @@ class _BeneficiaryChecklistPageState '${localizations.translate( '${selectedServiceDefinition?.code}.${e.code}', )} ${e.required == true ? '*' : ''}', - style: theme.textTheme.headlineSmall, + style: theme + .textTheme.headlineSmall, + ), ], ), @@ -279,30 +321,43 @@ class _BeneficiaryChecklistPageState allowMultipleSelection: false, width: 110, valueMapper: (value) { - return value ? localizations.translate( - i18.common.coreCommonYes, - ) : localizations.translate( - i18.common.coreCommonNo, - ); + return value + ? localizations.translate( + i18.common + .coreCommonYes, + ) + : localizations.translate( + i18.common.coreCommonNo, + ); }, - initialSelection: controller[index].text=='true' ? [true] : controller[index].text=='false' ?[false] : [], + initialSelection: + controller[index].text == + 'true' + ? [true] + : controller[index] + .text == + 'false' + ? [false] + : [], options: const [true, false], onSelectionChanged: (curValue) { - if(curValue.isNotEmpty){ + if (curValue.isNotEmpty) { context .read() .add( - ServiceChecklistEvent( - value: curValue.toString(), - submitTriggered: - submitTriggered, - ), - ); - controller[index].value = TextEditingValue( - text: curValue.first.toString(), + ServiceChecklistEvent( + value: curValue + .toString(), + submitTriggered: + submitTriggered, + ), + ); + controller[index].value = + TextEditingValue( + text: curValue.first + .toString(), ); } - }, ); }, @@ -330,9 +385,9 @@ class _BeneficiaryChecklistPageState } List getNextQuestions( - String parentCode, - List checklistItems, - ) { + String parentCode, + List checklistItems, + ) { final childCodePrefix = '$parentCode.'; final nextCheckLists = checklistItems.where((item) { return item.code!.startsWith(childCodePrefix) && @@ -352,4 +407,4 @@ class _BeneficiaryChecklistPageState return dotCount; } -} \ No newline at end of file +} diff --git a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart new file mode 100644 index 000000000..7cc2c9056 --- /dev/null +++ b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart @@ -0,0 +1,192 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:digit_components/digit_components.dart'; +import 'package:digit_components/widgets/atoms/digit_toaster.dart'; +import 'package:digit_components/widgets/atoms/selection_card.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:reactive_forms/reactive_forms.dart'; +import 'package:registration_delivery/registration_delivery.dart'; +import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; +import 'package:registration_delivery/utils/extensions/extensions.dart'; + +import '../../models/entities/additional_fields_type.dart'; +import '../../utils/i18_key_constants.dart' as i18; +import '../../widgets/back_navigation_help_header.dart'; +import '../../widgets/localized.dart'; +import '../../widgets/showcase/config/showcase_constants.dart'; +import '../../widgets/showcase/showcase_button.dart'; + +@RoutePage() +class RefusedDeliveryPage extends LocalizedStatefulWidget { + const RefusedDeliveryPage({ + super.key, + super.appLocalizations, + }); + + @override + State createState() => _RefusedDeliveryPageState(); +} + +class _RefusedDeliveryPageState extends LocalizedState { + static const _dataOfRefusalKey = 'dateOfAdministration'; + static const _reasonOfRefusal = 'reasonOfRefusal'; + static const _deliveryCommentKey = 'deliveryComment'; + + @override + void initState() { + final registrationState = context.read().state; + + super.initState(); + } + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + final bloc = context.read(); + final router = context.router; + + return Scaffold( + body: ReactiveFormBuilder( + form: () => buildForm(), + builder: (_, form, __) => BlocBuilder( + builder: (context, registrationState) { + return ScrollableContent( + enableFixedButton: true, + header: const Column( + children: [ + BackNavigationHelpHeaderWidget( + showcaseButton: ShowcaseButton(), + showHelp: false, + ), + ], + ), + footer: DigitCard( + margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), + padding: + const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), + child: DigitElevatedButton( + onPressed: () { + form.markAllAsTouched(); + if (!form.valid) return; + // TODO: need to complete the next flow + }, + child: Center( + child: Text( + localizations.translate( + i18.householdLocation.actionLabel, + ), + ), + ), + ), + ), + slivers: [ + SliverToBoxAdapter( + child: DigitCard( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB( + 0, 0, 0, kPadding), + child: Text( + localizations.translate( + i18.deliverIntervention.refusedDeliveryLabel, + ), + style: theme.textTheme.displayMedium, + ), + ), + Column(children: [ + refusedDeliveryShowcaseData.dateOfVisit.buildWith( + child: DigitDateFormPicker( + isEnabled: false, + formControlName: + _dataOfRefusalKey, + label: localizations + .translate( + i18.deliverIntervention + .refusedDeliveryVisitDateLabel, + ), + confirmText: + localizations + .translate( + i18.common + .coreCommonOk, + ), + cancelText: + localizations + .translate( + i18.common + .coreCommonCancel, + ), + isRequired: false, + padding: + const EdgeInsets + .only( + top: kPadding, + ), + ), + ), + const SizedBox(height: kPadding,), + refusedDeliveryShowcaseData.reasonOfRefusal.buildWith( + child: LabeledField( + label: localizations + .translate( + i18.deliverIntervention + .reasonForRefusalLabel, + ), + isRequired: true, + child: SelectionBox( + width: 122, + allowMultipleSelection: false, + options: RegistrationDeliverySingleton() + .refusalReasons ?? + [], + onSelectionChanged: (value) { + setState(() { + if(value.isNotEmpty){ + form.control(_reasonOfRefusal).value = value.first; + }else{ + form.control(_reasonOfRefusal).value = null; + setState(() { + form.control(_reasonOfRefusal).setErrors({'': true}); + }); + } + }); + }, + valueMapper: (value) { + return localizations + .translate(value.toString()); + }, + ), + ), + ), + refusedDeliveryShowcaseData.comments.buildWith( + child: DigitTextFormField( + formControlName: _deliveryCommentKey, + label: localizations.translate(i18.deliverIntervention.reasonForRefusalCommentLabel), + ), + ), + ]), + ], + ), + ), + ), + ], + ); + }, + )), + ); + } + + FormGroup buildForm() { + return fb.group({ + _dataOfRefusalKey: + FormControl(value: DateTime.now(), validators: []), + _reasonOfRefusal: FormControl(value: null, validators: [Validators.required]), + _deliveryCommentKey: FormControl(value: null), + }); + } +} diff --git a/packages/registration_delivery/lib/router/registration_delivery_router.dart b/packages/registration_delivery/lib/router/registration_delivery_router.dart index 11ac81855..add4b1a90 100644 --- a/packages/registration_delivery/lib/router/registration_delivery_router.dart +++ b/packages/registration_delivery/lib/router/registration_delivery_router.dart @@ -1,4 +1,5 @@ import 'package:auto_route/auto_route.dart'; +import 'package:registration_delivery/pages/beneficiary/refused_delivery.dart'; import 'registration_delivery_router.gm.dart'; @@ -63,10 +64,18 @@ class RegistrationDeliveryRoute extends $RegistrationDeliveryRoute { page: BeneficiaryChecklistRoute.page, path: 'beneficiary-checklist', ), + AutoRoute( + page: BeneficiaryChecklistRoute.page, + path: 'beneficiary-checklist', + ), AutoRoute( page: DeliverInterventionRoute.page, path: 'deliver-intervention', ), + AutoRoute( + page: RefusedDeliveryRoute.page, + path: 'refused-delivery', + ), AutoRoute( page: SideEffectsRoute.page, path: 'side-effects', diff --git a/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart b/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart index 362bc717c..8a3dae51b 100644 --- a/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart +++ b/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart @@ -35,12 +35,14 @@ import 'package:registration_delivery/pages/beneficiary/record_past_delivery_det as _i16; import 'package:registration_delivery/pages/beneficiary/refer_beneficiary.dart' as _i17; +import 'package:registration_delivery/pages/beneficiary/refused_delivery.dart' + as _i18; import 'package:registration_delivery/pages/beneficiary/side_effects.dart' - as _i20; + as _i21; import 'package:registration_delivery/pages/beneficiary/widgets/household_acknowledgement.dart' as _i11; import 'package:registration_delivery/pages/beneficiary/widgets/splash_acknowledgement.dart' - as _i21; + as _i22; import 'package:registration_delivery/pages/beneficiary_registration/beneficiary_acknowledgement.dart' as _i1; import 'package:registration_delivery/pages/beneficiary_registration/beneficiary_registration_wrapper.dart' @@ -256,10 +258,21 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { ), ); }, + RefusedDeliveryRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const RefusedDeliveryRouteArgs()); + return _i23.AutoRoutePage( + routeData: routeData, + child: _i18.RefusedDeliveryPage( + key: args.key, + appLocalizations: args.appLocalizations, + ), + ); + }, RegistrationDeliveryWrapperRoute.name: (routeData) { return _i23.AutoRoutePage( routeData: routeData, - child: const _i18.RegistrationDeliveryWrapperPage(), + child: const _i19.RegistrationDeliveryWrapperPage(), ); }, SearchBeneficiaryRoute.name: (routeData) { @@ -267,7 +280,7 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { orElse: () => const SearchBeneficiaryRouteArgs()); return _i23.AutoRoutePage( routeData: routeData, - child: _i19.SearchBeneficiaryPage( + child: _i20.SearchBeneficiaryPage( key: args.key, appLocalizations: args.appLocalizations, ), @@ -277,7 +290,7 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { final args = routeData.argsAs(); return _i23.AutoRoutePage( routeData: routeData, - child: _i20.SideEffectsPage( + child: _i21.SideEffectsPage( key: args.key, appLocalizations: args.appLocalizations, tasks: args.tasks, @@ -290,7 +303,7 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { orElse: () => const SplashAcknowledgementRouteArgs()); return _i23.AutoRoutePage( routeData: routeData, - child: _i21.SplashAcknowledgementPage( + child: _i22.SplashAcknowledgementPage( key: args.key, appLocalizations: args.appLocalizations, enableBackToSearch: args.enableBackToSearch, @@ -1022,11 +1035,49 @@ class ReferBeneficiaryRouteArgs { return 'ReferBeneficiaryRouteArgs{key: $key, appLocalizations: $appLocalizations, isEditing: $isEditing, projectBeneficiaryClientRefId: $projectBeneficiaryClientRefId}'; } } +/// [_i18.RefusedDeliveryPage] +class RefusedDeliveryRoute + extends _i23.PageRouteInfo { + RefusedDeliveryRoute({ + _i24.Key? key, + _i25.RegistrationDeliveryLocalization? appLocalizations, + List<_i23.PageRouteInfo>? children, + }) : super( + RefusedDeliveryRoute.name, + args: RefusedDeliveryRouteArgs( + key: key, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'RefusedDeliveryRoute'; + + static const _i23.PageInfo page = + _i23.PageInfo(name); +} + +class RefusedDeliveryRouteArgs { + const RefusedDeliveryRouteArgs({ + this.key, + this.appLocalizations, + }); + + final _i24.Key? key; + + final _i25.RegistrationDeliveryLocalization? appLocalizations; + + @override + String toString() { + return 'RefusedDeliveryRouteArgs{key: $key, appLocalizations: $appLocalizations}'; + } +} /// generated route for -/// [_i18.RegistrationDeliveryWrapperPage] +/// [_i19.RegistrationDeliveryWrapperPage] class RegistrationDeliveryWrapperRoute extends _i23.PageRouteInfo { const RegistrationDeliveryWrapperRoute({List<_i23.PageRouteInfo>? children}) + : super( RegistrationDeliveryWrapperRoute.name, initialChildren: children, @@ -1038,7 +1089,7 @@ class RegistrationDeliveryWrapperRoute extends _i23.PageRouteInfo { } /// generated route for -/// [_i19.SearchBeneficiaryPage] +/// [_i20.SearchBeneficiaryPage] class SearchBeneficiaryRoute extends _i23.PageRouteInfo { SearchBeneficiaryRoute({ @@ -1077,7 +1128,7 @@ class SearchBeneficiaryRouteArgs { } /// generated route for -/// [_i20.SideEffectsPage] +/// [_i21.SideEffectsPage] class SideEffectsRoute extends _i23.PageRouteInfo { SideEffectsRoute({ _i24.Key? key, @@ -1125,7 +1176,7 @@ class SideEffectsRouteArgs { } /// generated route for -/// [_i21.SplashAcknowledgementPage] +/// [_i22.SplashAcknowledgementPage] class SplashAcknowledgementRoute extends _i23.PageRouteInfo { SplashAcknowledgementRoute({ diff --git a/packages/registration_delivery/lib/utils/i18_key_constants.dart b/packages/registration_delivery/lib/utils/i18_key_constants.dart index 1389bb80d..8b8c2a99f 100644 --- a/packages/registration_delivery/lib/utils/i18_key_constants.dart +++ b/packages/registration_delivery/lib/utils/i18_key_constants.dart @@ -476,6 +476,11 @@ class DeliverIntervention { String get deliverInterventionLabel => 'DELIVER_INTERVENTION_LABEL'; + String get refusedDeliveryLabel => 'REFUSED_DELIVERY_LABEL'; + String get refusedDeliveryVisitDateLabel => 'REFUSED_DELIVERY_VISIT_DATE'; + String get reasonForRefusalLabel => 'REASON_FOR_REFUSAL_LABEL'; + String get reasonForRefusalCommentLabel => 'REASON_FOR_REFUSAL_COMMENT_LABEL'; + String get deliverInterventionResourceLabel => 'DELIVER_INTERVENTION_RESOURCE_LABEL'; @@ -817,6 +822,18 @@ class HouseholdOverviewShowcase { class DeliverInterventionShowcase { const DeliverInterventionShowcase(); + String get dateOfVisitLabel { + return 'DELIVER_INTERVENTION_SHOWCASE_MEMBER_COUNT'; + } + + String get reasonOfRefusalLabel { + return 'DELIVER_INTERVENTION_SHOWCASE_NUMBER_OF_BEDNETS_TO_DELIVER'; + } + + String get commentLabel { + return 'DELIVER_INTERVENTION_SHOWCASE_NUMBER_OF_BEDNETS_DISTRIBUTED'; + } + String get memberCount { return 'DELIVER_INTERVENTION_SHOWCASE_MEMBER_COUNT'; } diff --git a/packages/registration_delivery/lib/utils/utils.dart b/packages/registration_delivery/lib/utils/utils.dart index 05b3d7471..a074d831b 100644 --- a/packages/registration_delivery/lib/utils/utils.dart +++ b/packages/registration_delivery/lib/utils/utils.dart @@ -308,6 +308,7 @@ class RegistrationDeliverySingleton { List? _symptomsTypes; List? _referralReasons; List? _houseStructureTypes; + List? _refusalReasons; void setBoundary({required BoundaryModel boundary}) { _boundaryModel = boundary; @@ -333,6 +334,7 @@ class RegistrationDeliverySingleton { required List? symptomsTypes, required List? referralReasons, required List? houseStructureTypes, + required List? refusalReasons, }) { _loggedInUserUuid = loggedInUserUuid; _maxRadius = maxRadius; @@ -349,6 +351,7 @@ class RegistrationDeliverySingleton { _symptomsTypes = symptomsTypes; _referralReasons = referralReasons; _houseStructureTypes = houseStructureTypes; + _refusalReasons = refusalReasons; } void setTenantId(String tenantId) { @@ -375,6 +378,7 @@ class RegistrationDeliverySingleton { List? get symptomsTypes => _symptomsTypes; List? get referralReasons => _referralReasons; List? get houseStructureTypes => _houseStructureTypes; + List? get refusalReasons => _refusalReasons; } bool allDosesDelivered( diff --git a/packages/registration_delivery/lib/widgets/showcase/config/refused_delivery.dart b/packages/registration_delivery/lib/widgets/showcase/config/refused_delivery.dart new file mode 100644 index 000000000..40329e2b3 --- /dev/null +++ b/packages/registration_delivery/lib/widgets/showcase/config/refused_delivery.dart @@ -0,0 +1,28 @@ +part of 'showcase_constants.dart'; + +class _RefusedDeliveryShowcaseData { + static final _RefusedDeliveryShowcaseData _instance = _RefusedDeliveryShowcaseData._(); + + _RefusedDeliveryShowcaseData._(); + + factory _RefusedDeliveryShowcaseData() => _instance; + + List get showcaseData => [ + dateOfVisit, + reasonOfRefusal, + comments, + ]; + + final dateOfVisit = ShowcaseItemBuilder( + messageLocalizationKey: i18.deliverInterventionShowcase.dateOfVisitLabel, + ); + + final reasonOfRefusal = ShowcaseItemBuilder( + messageLocalizationKey: + i18.deliverInterventionShowcase.reasonOfRefusalLabel, + ); + final comments = ShowcaseItemBuilder( + messageLocalizationKey: + i18.deliverInterventionShowcase.commentLabel, + ); +} diff --git a/packages/registration_delivery/lib/widgets/showcase/config/showcase_constants.dart b/packages/registration_delivery/lib/widgets/showcase/config/showcase_constants.dart index 3be660bae..d19528cff 100644 --- a/packages/registration_delivery/lib/widgets/showcase/config/showcase_constants.dart +++ b/packages/registration_delivery/lib/widgets/showcase/config/showcase_constants.dart @@ -8,6 +8,7 @@ part 'household_location.dart'; part 'household_overview.dart'; part 'individual_details.dart'; part 'search_beneficiaries_showcase.dart'; +part 'refused_delivery.dart'; final searchBeneficiariesShowcaseData = _SearchBeneficiariesShowcaseData(); final householdLocationShowcaseData = _HouseholdLocationShowcaseData(); @@ -16,3 +17,4 @@ final individualDetailsShowcaseData = _IndividualDetailsShowcaseData(); final householdOverviewShowcaseData = _HouseholdOverviewShowcaseData(); final deliverInterventionShowcaseData = _DeliverInterventionShowcaseData(); final houseShowcaseData = _HouseholdShowcaseData(); +final refusedDeliveryShowcaseData = _RefusedDeliveryShowcaseData(); From 63e48248e869225c5c961f93a1088ab69ebd2357 Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Fri, 12 Jul 2024 16:44:53 +0530 Subject: [PATCH 051/241] No delivery flow page (#453) Co-authored-by: rachana-egov --- .../lib/widgets/atoms/selection_card.dart | 7 +- .../lib/widgets/labeled_field.dart | 8 +- .../beneficiary/beneficiary_checklist.dart | 108 ++++- .../pages/beneficiary/household_overview.dart | 19 +- .../pages/beneficiary/refused_delivery.dart | 99 +++- .../house_details.dart | 2 + .../individual_details.dart | 37 +- .../registration_delivery_router.gm.dart | 457 +++++++++--------- .../lib/utils/constants.dart | 1 + .../lib/utils/i18_key_constants.dart | 1 + 10 files changed, 489 insertions(+), 250 deletions(-) diff --git a/packages/digit_components/lib/widgets/atoms/selection_card.dart b/packages/digit_components/lib/widgets/atoms/selection_card.dart index 7c729041c..cccb139ce 100644 --- a/packages/digit_components/lib/widgets/atoms/selection_card.dart +++ b/packages/digit_components/lib/widgets/atoms/selection_card.dart @@ -10,6 +10,7 @@ class SelectionBox extends StatefulWidget { final List? initialSelection; final bool allowMultipleSelection; final String Function(T) valueMapper; + final bool isRequired; const SelectionBox({ Key? key, @@ -21,6 +22,7 @@ class SelectionBox extends StatefulWidget { this.initialSelection, this.allowMultipleSelection = true, required this.valueMapper, + this.isRequired = false, }) : super(key: key); @override @@ -109,7 +111,8 @@ class _SelectionBoxState extends State> { crossAxisAlignment: CrossAxisAlignment.start, children: [ LabeledField( - label: widget.title ?? '', + label: widget.title, + isRequired: widget.isRequired, child: Container( padding: const EdgeInsets.all(kPadding * 3), decoration: BoxDecoration( @@ -155,7 +158,7 @@ class _SelectionBoxState extends State> { fit: FlexFit.tight, child: Text( widget.errorMessage!, - style: textTheme.bodySmall?.copyWith( + style: textTheme.bodyLarge?.copyWith( color: const DigitColors().lavaRed, ), ), diff --git a/packages/digit_components/lib/widgets/labeled_field.dart b/packages/digit_components/lib/widgets/labeled_field.dart index 647cbe021..04776e0df 100644 --- a/packages/digit_components/lib/widgets/labeled_field.dart +++ b/packages/digit_components/lib/widgets/labeled_field.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; class LabeledField extends StatelessWidget { final Widget child; - final String label; + final String? label; final IconData? icon; final String? tooltipMessage; final TextStyle? labelStyle; @@ -16,7 +16,7 @@ class LabeledField extends StatelessWidget { const LabeledField({ super.key, required this.child, - required this.label, + this.label, this.icon, this.tooltipMessage, this.labelStyle, @@ -34,11 +34,12 @@ class LabeledField extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ + if(label != null) Row( children: [ Flexible( child: Text( - label, + label!, style: labelStyle ?? DigitTheme.instance.mobileTheme.textTheme.labelSmall, ), @@ -54,6 +55,7 @@ class LabeledField extends StatelessWidget { : const SizedBox.shrink() ], ), + if(label != null) const SizedBox(height: 8), child, ], diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart index 0389fc26a..463f947ab 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart @@ -3,12 +3,14 @@ import 'dart:math'; import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/utils/date_utils.dart'; +import 'package:digit_components/widgets/atoms/digit_toaster.dart'; import 'package:digit_components/widgets/atoms/selection_card.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:registration_delivery/pages/beneficiary/refused_delivery.dart'; +import 'package:registration_delivery/utils/constants.dart'; import '../../router/registration_delivery_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; @@ -18,10 +20,10 @@ import '../../widgets/localized.dart'; @RoutePage() class BeneficiaryChecklistPage extends LocalizedStatefulWidget { - final String? referralClientRefId; + final String? beneficiaryClientRefId; const BeneficiaryChecklistPage({ super.key, - this.referralClientRefId, + this.beneficiaryClientRefId, super.appLocalizations, }); @@ -44,6 +46,14 @@ class _BeneficiaryChecklistPageState @override void initState() { + + context.read().add( + ServiceChecklistEvent( + value: Random().nextInt(100).toString(), + submitTriggered: true, + ), + ); + super.initState(); } @@ -98,11 +108,101 @@ class _BeneficiaryChecklistPageState child: DigitElevatedButton( onPressed: () async { // TODO: Submit checklist + final router = context.router; + submitTriggered = true; + + context.read().add( + const ServiceChecklistEvent( + value: '', + submitTriggered: true, + ), + ); + final isValid = + checklistFormKey.currentState?.validate(); + if (!isValid!) { + return; + } + final itemsAttributes = initialAttributes; + + var validChecklist = true; + + for (int i = 0; i < controller.length; i++) { + if (itemsAttributes?[i].required == true && + ( (itemsAttributes?[i].dataType == + 'Boolean' && + (controller[i].text == '')) )) { + setState(() { + validChecklist = false; + }); + } + } + + if (!validChecklist) { + DigitToast.show(context, + options: DigitToastOptions( + localizations.translate(i18.common.corecommonRequired), + true, + theme, + )); + return; + } + List attributes = []; + for (int i = 0; i < controller.length; i++) { + final attribute = initialAttributes; + attributes.add(ServiceAttributesModel( + attributeCode: '${attribute?[i].code}', + dataType: attribute?[i].dataType, + clientReferenceId: IdGen.i.identifier, + referenceId: widget.beneficiaryClientRefId, + value: attribute?[i].dataType != + 'SingleValueList' + ? controller[i] + .text + .toString() + .trim() + .isNotEmpty + ? controller[i].text.toString() + : '' + : visibleChecklistIndexes.contains(i) + ? controller[i].text.toString() + : i18.checklist.notSelectedKey, + rowVersion: 1, + tenantId: attribute?[i].tenantId, + additionalDetails: null)); + } + + context.read().add( + ServiceCreateEvent( + serviceModel: ServiceModel( + createdAt: DigitDateUtils + .getDateFromTimestamp( + DateTime.now() + .toLocal() + .millisecondsSinceEpoch, + dateFormat: Constants.checklistViewDateFormat, + ), + tenantId: selectedServiceDefinition! + .tenantId, + clientId: widget.beneficiaryClientRefId + .toString(), + serviceDefId: selectedServiceDefinition?.id, + attributes: attributes, + rowVersion: 1, + accountId: RegistrationDeliverySingleton() + .projectId, + additionalDetails: + RegistrationDeliverySingleton() + .boundary + ?.code, + ), + ), + ); DigitDialog.show( context, options: DigitDialogOptions( - titleText: 'Is the Spraying Successful?', + titleText: localizations.translate(i18.deliverIntervention.beneficiaryChecklistDialogTitle), + titlePadding: const EdgeInsets.only(top: kPadding), barrierDismissible: false, enableRecordPast: true, dialogPadding: const EdgeInsets.fromLTRB( @@ -111,6 +211,8 @@ class _BeneficiaryChecklistPageState kPadding, 0, ), + + contentPadding: EdgeInsets.zero, primaryAction: DigitDialogActions( label: localizations.translate( i18.common.coreCommonYes, diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index 735370101..b3a40009b 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -48,6 +48,7 @@ class _HouseholdOverviewPageState final theme = Theme.of(context); final beneficiaryType = RegistrationDeliverySingleton().beneficiaryType!; + return PopScope( onPopInvoked: (didPop) async { context @@ -57,7 +58,21 @@ class _HouseholdOverviewPageState context.router.maybePop(); }, child: BlocBuilder( + builder: (ctx, state) { + + final projectBeneficiary = + RegistrationDeliverySingleton().beneficiaryType != + BeneficiaryType.individual + ? [state.householdMemberWrapper.projectBeneficiaries.first] + : state.householdMemberWrapper.projectBeneficiaries + .where( + (element) => + element.beneficiaryClientReferenceId == + state.selectedIndividual?.clientReferenceId, + ) + .toList(); + return Scaffold( body: state.loading ? const Center(child: CircularProgressIndicator()) @@ -98,7 +113,7 @@ class _HouseholdOverviewPageState ), onPressed: () async { await context.router - .push(BeneficiaryChecklistRoute()); + .push(BeneficiaryChecklistRoute(beneficiaryClientRefId: projectBeneficiary.first.beneficiaryClientReferenceId)); }, ) : DigitElevatedButton( @@ -119,7 +134,7 @@ class _HouseholdOverviewPageState ); await context.router - .push(BeneficiaryChecklistRoute()); + .push(BeneficiaryChecklistRoute(beneficiaryClientRefId: projectBeneficiary.first.beneficiaryClientReferenceId)); }, child: Center( child: Text( diff --git a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart index 7cc2c9056..898f4b363 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart @@ -1,4 +1,7 @@ +import 'dart:math'; + import 'package:auto_route/auto_route.dart'; +import 'package:collection/collection.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/widgets/atoms/digit_toaster.dart'; import 'package:digit_components/widgets/atoms/selection_card.dart'; @@ -11,6 +14,7 @@ import 'package:registration_delivery/router/registration_delivery_router.gm.dar import 'package:registration_delivery/utils/extensions/extensions.dart'; import '../../models/entities/additional_fields_type.dart'; +import '../../models/entities/status.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../widgets/back_navigation_help_header.dart'; import '../../widgets/localized.dart'; @@ -69,8 +73,97 @@ class _RefusedDeliveryPageState extends LocalizedState { child: DigitElevatedButton( onPressed: () { form.markAllAsTouched(); + + if (form.control(_reasonOfRefusal).value == null) { + setState(() { + form.control(_reasonOfRefusal).setErrors({'': true}); + }); + } + if (!form.valid) return; - // TODO: need to complete the next flow + + final reasonOfRefusal = + form.control(_reasonOfRefusal).value; + + final refusalComment = form.control(_deliveryCommentKey).value; + + final projectBeneficiary = + RegistrationDeliverySingleton().beneficiaryType != + BeneficiaryType.individual + ? [registrationState.householdMemberWrapper.projectBeneficiaries.first] + : registrationState.householdMemberWrapper.projectBeneficiaries + .where( + (element) => + element.beneficiaryClientReferenceId == + registrationState.selectedIndividual?.clientReferenceId, + ) + .toList(); + + context + .read() + .add( + DeliverInterventionSubmitEvent( + task: TaskModel( + projectBeneficiaryClientReferenceId: projectBeneficiary.first.clientReferenceId, //TODO: need to check for individual based campaign + clientReferenceId: + IdGen.i.identifier, + tenantId: + RegistrationDeliverySingleton() + .tenantId, + rowVersion: 1, + auditDetails: AuditDetails( + createdBy: + RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: context + .millisecondsSinceEpoch(), + ), + projectId: + RegistrationDeliverySingleton() + .projectId, + status: Status + .administeredFailed + .toValue(), + clientAuditDetails: + ClientAuditDetails( + createdBy: + RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: context + .millisecondsSinceEpoch(), + ), + additionalFields: + TaskAdditionalFields( + version: 1, + fields: [ + AdditionalField( + 'taskStatus', + reasonOfRefusal, + ), + AdditionalField( + 'comments', + refusalComment, + ), + ], + ), + ), + isEditing: false, + boundaryModel: + RegistrationDeliverySingleton() + .boundary!, + ), + ); + context + .router + .popAndPush( + HouseholdAcknowledgementRoute( + enableViewHousehold: true, + )); }, child: Center( child: Text( @@ -145,6 +238,7 @@ class _RefusedDeliveryPageState extends LocalizedState { .refusalReasons ?? [], onSelectionChanged: (value) { + form.control(_reasonOfRefusal).markAsTouched(); setState(() { if(value.isNotEmpty){ form.control(_reasonOfRefusal).value = value.first; @@ -160,6 +254,9 @@ class _RefusedDeliveryPageState extends LocalizedState { return localizations .translate(value.toString()); }, + errorMessage: form.control(_reasonOfRefusal).hasErrors && form.control(_reasonOfRefusal).touched + ? localizations.translate(i18.common.corecommonRequired) + : null, ), ), ), diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart index 5bd906508..6e1af68b7 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart @@ -227,8 +227,10 @@ class _HouseDetailsPageState extends LocalizedState { Column(children: [ houseShowcaseData.typeOfStructure.buildWith( child: SelectionBox( + isRequired: true, title: i18.householdDetails.typeOfStructure, width: 120, + allowMultipleSelection: false, options: RegistrationDeliverySingleton() .houseStructureTypes ?? [], diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index e40c885b3..663e8f824 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -4,6 +4,7 @@ import 'package:digit_components/digit_components.dart'; import 'package:digit_components/utils/date_utils.dart'; import 'package:digit_components/widgets/atoms/digit_checkbox.dart'; import 'package:digit_components/widgets/atoms/digit_toaster.dart'; +import 'package:digit_components/widgets/atoms/selection_card.dart'; import 'package:digit_components/widgets/digit_dob_picker.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_scanner/blocs/scanner.dart'; @@ -92,7 +93,9 @@ class _IndividualDetailsPageState form.control(_idTypeKey).setErrors({'': true}); } if (form.control(_genderKey).value == null) { - form.control(_genderKey).setErrors({'': true}); + setState(() { + form.control(_genderKey).setErrors({'': true}); + }); } final userId = RegistrationDeliverySingleton().loggedInUserUuid; @@ -488,25 +491,37 @@ class _IndividualDetailsPageState .translate(i18.common.coreCommonOk), ), ), - DigitReactiveSearchDropdown( - label: localizations.translate( + SelectionBox( + isRequired: true, + title: localizations.translate( i18.individualDetails.genderLabelText, ), - form: form, - menuItems: RegistrationDeliverySingleton() + allowMultipleSelection: false, + width: 126, + options: RegistrationDeliverySingleton() .genderOptions! .map( (e) => e, - ) + ) .toList(), - formControlName: _genderKey, + onSelectionChanged: (value){ + setState(() { + if(value.isNotEmpty){ + form.control(_genderKey).value = value.first; + }else{ + form.control(_genderKey).value = null; + setState(() { + form.control(_genderKey).setErrors({'': true}); + }); + } + }); + }, valueMapper: (value) { return localizations.translate(value); }, - isRequired: true, - validationMessage: localizations.translate( - i18.common.corecommonRequired, - ), + errorMessage: form.control(_genderKey).hasErrors + ? localizations.translate(i18.common.corecommonRequired) + : null, ), ]), individualDetailsShowcaseData.mobile.buildWith( diff --git a/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart b/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart index 8a3dae51b..7ebb3b188 100644 --- a/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart +++ b/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart @@ -8,15 +8,15 @@ // coverage:ignore-file // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'package:auto_route/auto_route.dart' as _i23; -import 'package:digit_data_model/data_model.dart' as _i28; -import 'package:flutter/material.dart' as _i24; -import 'package:registration_delivery/blocs/app_localization.dart' as _i25; +import 'package:auto_route/auto_route.dart' as _i24; +import 'package:digit_data_model/data_model.dart' as _i29; +import 'package:flutter/material.dart' as _i25; +import 'package:registration_delivery/blocs/app_localization.dart' as _i26; import 'package:registration_delivery/blocs/beneficiary_registration/beneficiary_registration.dart' - as _i26; -import 'package:registration_delivery/blocs/search_households/search_households.dart' as _i27; -import 'package:registration_delivery/models/entities/task.dart' as _i29; +import 'package:registration_delivery/blocs/search_households/search_households.dart' + as _i28; +import 'package:registration_delivery/models/entities/task.dart' as _i30; import 'package:registration_delivery/pages/beneficiary/beneficiary_checklist.dart' as _i2; import 'package:registration_delivery/pages/beneficiary/beneficiary_details.dart' @@ -57,17 +57,17 @@ import 'package:registration_delivery/pages/beneficiary_registration/individual_ as _i14; import 'package:registration_delivery/pages/reason_for_deletion.dart' as _i15; import 'package:registration_delivery/pages/registration_delivery_wrapper.dart' - as _i18; -import 'package:registration_delivery/pages/search_beneficiary.dart' as _i19; -import 'package:registration_delivery/pages/summary_page.dart' as _i22; + as _i19; +import 'package:registration_delivery/pages/search_beneficiary.dart' as _i20; +import 'package:registration_delivery/pages/summary_page.dart' as _i23; -abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { +abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { @override - final Map pagesMap = { + final Map pagesMap = { BeneficiaryAcknowledgementRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const BeneficiaryAcknowledgementRouteArgs()); - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, child: _i1.BeneficiaryAcknowledgementPage( key: args.key, @@ -79,11 +79,11 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { BeneficiaryChecklistRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const BeneficiaryChecklistRouteArgs()); - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, child: _i2.BeneficiaryChecklistPage( key: args.key, - referralClientRefId: args.referralClientRefId, + beneficiaryClientRefId: args.beneficiaryClientRefId, appLocalizations: args.appLocalizations, ), ); @@ -91,7 +91,7 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { BeneficiaryDetailsRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const BeneficiaryDetailsRouteArgs()); - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, child: _i3.BeneficiaryDetailsPage( key: args.key, @@ -101,9 +101,9 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { }, BeneficiaryRegistrationWrapperRoute.name: (routeData) { final args = routeData.argsAs(); - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, - child: _i23.WrappedRoute( + child: _i24.WrappedRoute( child: _i4.BeneficiaryRegistrationWrapperPage( key: args.key, initialState: args.initialState, @@ -112,7 +112,7 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { }, BeneficiaryWrapperRoute.name: (routeData) { final args = routeData.argsAs(); - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, child: _i5.BeneficiaryWrapperPage( key: args.key, @@ -124,7 +124,7 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { DeliverInterventionRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const DeliverInterventionRouteArgs()); - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, child: _i6.DeliverInterventionPage( key: args.key, @@ -136,7 +136,7 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { DoseAdministeredRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const DoseAdministeredRouteArgs()); - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, child: _i7.DoseAdministeredPage( key: args.key, @@ -146,7 +146,7 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { }, FacilitySelectionRoute.name: (routeData) { final args = routeData.argsAs(); - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, child: _i8.FacilitySelectionPage( key: args.key, @@ -157,7 +157,7 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { HouseDetailsRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const HouseDetailsRouteArgs()); - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, child: _i9.HouseDetailsPage( key: args.key, @@ -168,7 +168,7 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { HouseHoldDetailsRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const HouseHoldDetailsRouteArgs()); - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, child: _i10.HouseHoldDetailsPage( key: args.key, @@ -179,7 +179,7 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { HouseholdAcknowledgementRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const HouseholdAcknowledgementRouteArgs()); - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, child: _i11.HouseholdAcknowledgementPage( key: args.key, @@ -191,7 +191,7 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { HouseholdLocationRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const HouseholdLocationRouteArgs()); - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, child: _i12.HouseholdLocationPage( key: args.key, @@ -202,7 +202,7 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { HouseholdOverviewRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const HouseholdOverviewRouteArgs()); - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, child: _i13.HouseholdOverviewPage( key: args.key, @@ -213,7 +213,7 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { IndividualDetailsRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const IndividualDetailsRouteArgs()); - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, child: _i14.IndividualDetailsPage( key: args.key, @@ -225,7 +225,7 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { ReasonForDeletionRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const ReasonForDeletionRouteArgs()); - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, child: _i15.ReasonForDeletionPage( key: args.key, @@ -237,7 +237,7 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { RecordPastDeliveryDetailsRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const RecordPastDeliveryDetailsRouteArgs()); - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, child: _i16.RecordPastDeliveryDetailsPage( key: args.key, @@ -248,7 +248,7 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { }, ReferBeneficiaryRoute.name: (routeData) { final args = routeData.argsAs(); - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, child: _i17.ReferBeneficiaryPage( key: args.key, @@ -261,7 +261,7 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { RefusedDeliveryRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const RefusedDeliveryRouteArgs()); - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, child: _i18.RefusedDeliveryPage( key: args.key, @@ -270,7 +270,7 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { ); }, RegistrationDeliveryWrapperRoute.name: (routeData) { - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, child: const _i19.RegistrationDeliveryWrapperPage(), ); @@ -278,7 +278,7 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { SearchBeneficiaryRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const SearchBeneficiaryRouteArgs()); - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, child: _i20.SearchBeneficiaryPage( key: args.key, @@ -288,7 +288,7 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { }, SideEffectsRoute.name: (routeData) { final args = routeData.argsAs(); - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, child: _i21.SideEffectsPage( key: args.key, @@ -301,7 +301,7 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { SplashAcknowledgementRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const SplashAcknowledgementRouteArgs()); - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, child: _i22.SplashAcknowledgementPage( key: args.key, @@ -313,9 +313,9 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { SummaryRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const SummaryRouteArgs()); - return _i23.AutoRoutePage( + return _i24.AutoRoutePage( routeData: routeData, - child: _i22.SummaryPage( + child: _i23.SummaryPage( key: args.key, appLocalizations: args.appLocalizations, ), @@ -327,12 +327,12 @@ abstract class $RegistrationDeliveryRoute extends _i23.AutoRouterModule { /// generated route for /// [_i1.BeneficiaryAcknowledgementPage] class BeneficiaryAcknowledgementRoute - extends _i23.PageRouteInfo { + extends _i24.PageRouteInfo { BeneficiaryAcknowledgementRoute({ - _i24.Key? key, - _i25.RegistrationDeliveryLocalization? appLocalizations, + _i25.Key? key, + _i26.RegistrationDeliveryLocalization? appLocalizations, bool? enableViewHousehold, - List<_i23.PageRouteInfo>? children, + List<_i24.PageRouteInfo>? children, }) : super( BeneficiaryAcknowledgementRoute.name, args: BeneficiaryAcknowledgementRouteArgs( @@ -345,8 +345,8 @@ class BeneficiaryAcknowledgementRoute static const String name = 'BeneficiaryAcknowledgementRoute'; - static const _i23.PageInfo page = - _i23.PageInfo(name); + static const _i24.PageInfo page = + _i24.PageInfo(name); } class BeneficiaryAcknowledgementRouteArgs { @@ -356,9 +356,9 @@ class BeneficiaryAcknowledgementRouteArgs { this.enableViewHousehold, }); - final _i24.Key? key; + final _i25.Key? key; - final _i25.RegistrationDeliveryLocalization? appLocalizations; + final _i26.RegistrationDeliveryLocalization? appLocalizations; final bool? enableViewHousehold; @@ -371,17 +371,17 @@ class BeneficiaryAcknowledgementRouteArgs { /// generated route for /// [_i2.BeneficiaryChecklistPage] class BeneficiaryChecklistRoute - extends _i23.PageRouteInfo { + extends _i24.PageRouteInfo { BeneficiaryChecklistRoute({ - _i24.Key? key, - String? referralClientRefId, - _i25.RegistrationDeliveryLocalization? appLocalizations, - List<_i23.PageRouteInfo>? children, + _i25.Key? key, + String? beneficiaryClientRefId, + _i26.RegistrationDeliveryLocalization? appLocalizations, + List<_i24.PageRouteInfo>? children, }) : super( BeneficiaryChecklistRoute.name, args: BeneficiaryChecklistRouteArgs( key: key, - referralClientRefId: referralClientRefId, + beneficiaryClientRefId: beneficiaryClientRefId, appLocalizations: appLocalizations, ), initialChildren: children, @@ -389,37 +389,37 @@ class BeneficiaryChecklistRoute static const String name = 'BeneficiaryChecklistRoute'; - static const _i23.PageInfo page = - _i23.PageInfo(name); + static const _i24.PageInfo page = + _i24.PageInfo(name); } class BeneficiaryChecklistRouteArgs { const BeneficiaryChecklistRouteArgs({ this.key, - this.referralClientRefId, + this.beneficiaryClientRefId, this.appLocalizations, }); - final _i24.Key? key; + final _i25.Key? key; - final String? referralClientRefId; + final String? beneficiaryClientRefId; - final _i25.RegistrationDeliveryLocalization? appLocalizations; + final _i26.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { - return 'BeneficiaryChecklistRouteArgs{key: $key, referralClientRefId: $referralClientRefId, appLocalizations: $appLocalizations}'; + return 'BeneficiaryChecklistRouteArgs{key: $key, beneficiaryClientRefId: $beneficiaryClientRefId, appLocalizations: $appLocalizations}'; } } /// generated route for /// [_i3.BeneficiaryDetailsPage] class BeneficiaryDetailsRoute - extends _i23.PageRouteInfo { + extends _i24.PageRouteInfo { BeneficiaryDetailsRoute({ - _i24.Key? key, - _i25.RegistrationDeliveryLocalization? appLocalizations, - List<_i23.PageRouteInfo>? children, + _i25.Key? key, + _i26.RegistrationDeliveryLocalization? appLocalizations, + List<_i24.PageRouteInfo>? children, }) : super( BeneficiaryDetailsRoute.name, args: BeneficiaryDetailsRouteArgs( @@ -431,8 +431,8 @@ class BeneficiaryDetailsRoute static const String name = 'BeneficiaryDetailsRoute'; - static const _i23.PageInfo page = - _i23.PageInfo(name); + static const _i24.PageInfo page = + _i24.PageInfo(name); } class BeneficiaryDetailsRouteArgs { @@ -441,9 +441,9 @@ class BeneficiaryDetailsRouteArgs { this.appLocalizations, }); - final _i24.Key? key; + final _i25.Key? key; - final _i25.RegistrationDeliveryLocalization? appLocalizations; + final _i26.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -454,11 +454,11 @@ class BeneficiaryDetailsRouteArgs { /// generated route for /// [_i4.BeneficiaryRegistrationWrapperPage] class BeneficiaryRegistrationWrapperRoute - extends _i23.PageRouteInfo { + extends _i24.PageRouteInfo { BeneficiaryRegistrationWrapperRoute({ - _i24.Key? key, - required _i26.BeneficiaryRegistrationState initialState, - List<_i23.PageRouteInfo>? children, + _i25.Key? key, + required _i27.BeneficiaryRegistrationState initialState, + List<_i24.PageRouteInfo>? children, }) : super( BeneficiaryRegistrationWrapperRoute.name, args: BeneficiaryRegistrationWrapperRouteArgs( @@ -470,8 +470,8 @@ class BeneficiaryRegistrationWrapperRoute static const String name = 'BeneficiaryRegistrationWrapperRoute'; - static const _i23.PageInfo page = - _i23.PageInfo(name); + static const _i24.PageInfo page = + _i24.PageInfo(name); } class BeneficiaryRegistrationWrapperRouteArgs { @@ -480,9 +480,9 @@ class BeneficiaryRegistrationWrapperRouteArgs { required this.initialState, }); - final _i24.Key? key; + final _i25.Key? key; - final _i26.BeneficiaryRegistrationState initialState; + final _i27.BeneficiaryRegistrationState initialState; @override String toString() { @@ -493,12 +493,12 @@ class BeneficiaryRegistrationWrapperRouteArgs { /// generated route for /// [_i5.BeneficiaryWrapperPage] class BeneficiaryWrapperRoute - extends _i23.PageRouteInfo { + extends _i24.PageRouteInfo { BeneficiaryWrapperRoute({ - _i24.Key? key, - required _i27.HouseholdMemberWrapper wrapper, + _i25.Key? key, + required _i28.HouseholdMemberWrapper wrapper, bool isEditing = false, - List<_i23.PageRouteInfo>? children, + List<_i24.PageRouteInfo>? children, }) : super( BeneficiaryWrapperRoute.name, args: BeneficiaryWrapperRouteArgs( @@ -511,8 +511,8 @@ class BeneficiaryWrapperRoute static const String name = 'BeneficiaryWrapperRoute'; - static const _i23.PageInfo page = - _i23.PageInfo(name); + static const _i24.PageInfo page = + _i24.PageInfo(name); } class BeneficiaryWrapperRouteArgs { @@ -522,9 +522,9 @@ class BeneficiaryWrapperRouteArgs { this.isEditing = false, }); - final _i24.Key? key; + final _i25.Key? key; - final _i27.HouseholdMemberWrapper wrapper; + final _i28.HouseholdMemberWrapper wrapper; final bool isEditing; @@ -537,12 +537,12 @@ class BeneficiaryWrapperRouteArgs { /// generated route for /// [_i6.DeliverInterventionPage] class DeliverInterventionRoute - extends _i23.PageRouteInfo { + extends _i24.PageRouteInfo { DeliverInterventionRoute({ - _i24.Key? key, - _i25.RegistrationDeliveryLocalization? appLocalizations, + _i25.Key? key, + _i26.RegistrationDeliveryLocalization? appLocalizations, bool isEditing = false, - List<_i23.PageRouteInfo>? children, + List<_i24.PageRouteInfo>? children, }) : super( DeliverInterventionRoute.name, args: DeliverInterventionRouteArgs( @@ -555,8 +555,8 @@ class DeliverInterventionRoute static const String name = 'DeliverInterventionRoute'; - static const _i23.PageInfo page = - _i23.PageInfo(name); + static const _i24.PageInfo page = + _i24.PageInfo(name); } class DeliverInterventionRouteArgs { @@ -566,9 +566,9 @@ class DeliverInterventionRouteArgs { this.isEditing = false, }); - final _i24.Key? key; + final _i25.Key? key; - final _i25.RegistrationDeliveryLocalization? appLocalizations; + final _i26.RegistrationDeliveryLocalization? appLocalizations; final bool isEditing; @@ -581,11 +581,11 @@ class DeliverInterventionRouteArgs { /// generated route for /// [_i7.DoseAdministeredPage] class DoseAdministeredRoute - extends _i23.PageRouteInfo { + extends _i24.PageRouteInfo { DoseAdministeredRoute({ - _i24.Key? key, - _i25.RegistrationDeliveryLocalization? appLocalizations, - List<_i23.PageRouteInfo>? children, + _i25.Key? key, + _i26.RegistrationDeliveryLocalization? appLocalizations, + List<_i24.PageRouteInfo>? children, }) : super( DoseAdministeredRoute.name, args: DoseAdministeredRouteArgs( @@ -597,8 +597,8 @@ class DoseAdministeredRoute static const String name = 'DoseAdministeredRoute'; - static const _i23.PageInfo page = - _i23.PageInfo(name); + static const _i24.PageInfo page = + _i24.PageInfo(name); } class DoseAdministeredRouteArgs { @@ -607,9 +607,9 @@ class DoseAdministeredRouteArgs { this.appLocalizations, }); - final _i24.Key? key; + final _i25.Key? key; - final _i25.RegistrationDeliveryLocalization? appLocalizations; + final _i26.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -620,11 +620,11 @@ class DoseAdministeredRouteArgs { /// generated route for /// [_i8.FacilitySelectionPage] class FacilitySelectionRoute - extends _i23.PageRouteInfo { + extends _i24.PageRouteInfo { FacilitySelectionRoute({ - _i24.Key? key, - required List<_i28.FacilityModel> facilities, - List<_i23.PageRouteInfo>? children, + _i25.Key? key, + required List<_i29.FacilityModel> facilities, + List<_i24.PageRouteInfo>? children, }) : super( FacilitySelectionRoute.name, args: FacilitySelectionRouteArgs( @@ -636,8 +636,8 @@ class FacilitySelectionRoute static const String name = 'FacilitySelectionRoute'; - static const _i23.PageInfo page = - _i23.PageInfo(name); + static const _i24.PageInfo page = + _i24.PageInfo(name); } class FacilitySelectionRouteArgs { @@ -646,9 +646,9 @@ class FacilitySelectionRouteArgs { required this.facilities, }); - final _i24.Key? key; + final _i25.Key? key; - final List<_i28.FacilityModel> facilities; + final List<_i29.FacilityModel> facilities; @override String toString() { @@ -658,11 +658,11 @@ class FacilitySelectionRouteArgs { /// generated route for /// [_i9.HouseDetailsPage] -class HouseDetailsRoute extends _i23.PageRouteInfo { +class HouseDetailsRoute extends _i24.PageRouteInfo { HouseDetailsRoute({ - _i24.Key? key, - _i25.RegistrationDeliveryLocalization? appLocalizations, - List<_i23.PageRouteInfo>? children, + _i25.Key? key, + _i26.RegistrationDeliveryLocalization? appLocalizations, + List<_i24.PageRouteInfo>? children, }) : super( HouseDetailsRoute.name, args: HouseDetailsRouteArgs( @@ -674,8 +674,8 @@ class HouseDetailsRoute extends _i23.PageRouteInfo { static const String name = 'HouseDetailsRoute'; - static const _i23.PageInfo page = - _i23.PageInfo(name); + static const _i24.PageInfo page = + _i24.PageInfo(name); } class HouseDetailsRouteArgs { @@ -684,9 +684,9 @@ class HouseDetailsRouteArgs { this.appLocalizations, }); - final _i24.Key? key; + final _i25.Key? key; - final _i25.RegistrationDeliveryLocalization? appLocalizations; + final _i26.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -697,11 +697,11 @@ class HouseDetailsRouteArgs { /// generated route for /// [_i10.HouseHoldDetailsPage] class HouseHoldDetailsRoute - extends _i23.PageRouteInfo { + extends _i24.PageRouteInfo { HouseHoldDetailsRoute({ - _i24.Key? key, - _i25.RegistrationDeliveryLocalization? appLocalizations, - List<_i23.PageRouteInfo>? children, + _i25.Key? key, + _i26.RegistrationDeliveryLocalization? appLocalizations, + List<_i24.PageRouteInfo>? children, }) : super( HouseHoldDetailsRoute.name, args: HouseHoldDetailsRouteArgs( @@ -713,8 +713,8 @@ class HouseHoldDetailsRoute static const String name = 'HouseHoldDetailsRoute'; - static const _i23.PageInfo page = - _i23.PageInfo(name); + static const _i24.PageInfo page = + _i24.PageInfo(name); } class HouseHoldDetailsRouteArgs { @@ -723,9 +723,9 @@ class HouseHoldDetailsRouteArgs { this.appLocalizations, }); - final _i24.Key? key; + final _i25.Key? key; - final _i25.RegistrationDeliveryLocalization? appLocalizations; + final _i26.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -736,12 +736,12 @@ class HouseHoldDetailsRouteArgs { /// generated route for /// [_i11.HouseholdAcknowledgementPage] class HouseholdAcknowledgementRoute - extends _i23.PageRouteInfo { + extends _i24.PageRouteInfo { HouseholdAcknowledgementRoute({ - _i24.Key? key, - _i25.RegistrationDeliveryLocalization? appLocalizations, + _i25.Key? key, + _i26.RegistrationDeliveryLocalization? appLocalizations, bool? enableViewHousehold, - List<_i23.PageRouteInfo>? children, + List<_i24.PageRouteInfo>? children, }) : super( HouseholdAcknowledgementRoute.name, args: HouseholdAcknowledgementRouteArgs( @@ -754,8 +754,8 @@ class HouseholdAcknowledgementRoute static const String name = 'HouseholdAcknowledgementRoute'; - static const _i23.PageInfo page = - _i23.PageInfo(name); + static const _i24.PageInfo page = + _i24.PageInfo(name); } class HouseholdAcknowledgementRouteArgs { @@ -765,9 +765,9 @@ class HouseholdAcknowledgementRouteArgs { this.enableViewHousehold, }); - final _i24.Key? key; + final _i25.Key? key; - final _i25.RegistrationDeliveryLocalization? appLocalizations; + final _i26.RegistrationDeliveryLocalization? appLocalizations; final bool? enableViewHousehold; @@ -780,11 +780,11 @@ class HouseholdAcknowledgementRouteArgs { /// generated route for /// [_i12.HouseholdLocationPage] class HouseholdLocationRoute - extends _i23.PageRouteInfo { + extends _i24.PageRouteInfo { HouseholdLocationRoute({ - _i24.Key? key, - _i25.RegistrationDeliveryLocalization? appLocalizations, - List<_i23.PageRouteInfo>? children, + _i25.Key? key, + _i26.RegistrationDeliveryLocalization? appLocalizations, + List<_i24.PageRouteInfo>? children, }) : super( HouseholdLocationRoute.name, args: HouseholdLocationRouteArgs( @@ -796,8 +796,8 @@ class HouseholdLocationRoute static const String name = 'HouseholdLocationRoute'; - static const _i23.PageInfo page = - _i23.PageInfo(name); + static const _i24.PageInfo page = + _i24.PageInfo(name); } class HouseholdLocationRouteArgs { @@ -806,9 +806,9 @@ class HouseholdLocationRouteArgs { this.appLocalizations, }); - final _i24.Key? key; + final _i25.Key? key; - final _i25.RegistrationDeliveryLocalization? appLocalizations; + final _i26.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -819,11 +819,11 @@ class HouseholdLocationRouteArgs { /// generated route for /// [_i13.HouseholdOverviewPage] class HouseholdOverviewRoute - extends _i23.PageRouteInfo { + extends _i24.PageRouteInfo { HouseholdOverviewRoute({ - _i24.Key? key, - _i25.RegistrationDeliveryLocalization? appLocalizations, - List<_i23.PageRouteInfo>? children, + _i25.Key? key, + _i26.RegistrationDeliveryLocalization? appLocalizations, + List<_i24.PageRouteInfo>? children, }) : super( HouseholdOverviewRoute.name, args: HouseholdOverviewRouteArgs( @@ -835,8 +835,8 @@ class HouseholdOverviewRoute static const String name = 'HouseholdOverviewRoute'; - static const _i23.PageInfo page = - _i23.PageInfo(name); + static const _i24.PageInfo page = + _i24.PageInfo(name); } class HouseholdOverviewRouteArgs { @@ -845,9 +845,9 @@ class HouseholdOverviewRouteArgs { this.appLocalizations, }); - final _i24.Key? key; + final _i25.Key? key; - final _i25.RegistrationDeliveryLocalization? appLocalizations; + final _i26.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -858,12 +858,12 @@ class HouseholdOverviewRouteArgs { /// generated route for /// [_i14.IndividualDetailsPage] class IndividualDetailsRoute - extends _i23.PageRouteInfo { + extends _i24.PageRouteInfo { IndividualDetailsRoute({ - _i24.Key? key, - _i25.RegistrationDeliveryLocalization? appLocalizations, + _i25.Key? key, + _i26.RegistrationDeliveryLocalization? appLocalizations, bool isHeadOfHousehold = false, - List<_i23.PageRouteInfo>? children, + List<_i24.PageRouteInfo>? children, }) : super( IndividualDetailsRoute.name, args: IndividualDetailsRouteArgs( @@ -876,8 +876,8 @@ class IndividualDetailsRoute static const String name = 'IndividualDetailsRoute'; - static const _i23.PageInfo page = - _i23.PageInfo(name); + static const _i24.PageInfo page = + _i24.PageInfo(name); } class IndividualDetailsRouteArgs { @@ -887,9 +887,9 @@ class IndividualDetailsRouteArgs { this.isHeadOfHousehold = false, }); - final _i24.Key? key; + final _i25.Key? key; - final _i25.RegistrationDeliveryLocalization? appLocalizations; + final _i26.RegistrationDeliveryLocalization? appLocalizations; final bool isHeadOfHousehold; @@ -902,12 +902,12 @@ class IndividualDetailsRouteArgs { /// generated route for /// [_i15.ReasonForDeletionPage] class ReasonForDeletionRoute - extends _i23.PageRouteInfo { + extends _i24.PageRouteInfo { ReasonForDeletionRoute({ - _i24.Key? key, - _i25.RegistrationDeliveryLocalization? appLocalizations, + _i25.Key? key, + _i26.RegistrationDeliveryLocalization? appLocalizations, bool isHousholdDelete = false, - List<_i23.PageRouteInfo>? children, + List<_i24.PageRouteInfo>? children, }) : super( ReasonForDeletionRoute.name, args: ReasonForDeletionRouteArgs( @@ -920,8 +920,8 @@ class ReasonForDeletionRoute static const String name = 'ReasonForDeletionRoute'; - static const _i23.PageInfo page = - _i23.PageInfo(name); + static const _i24.PageInfo page = + _i24.PageInfo(name); } class ReasonForDeletionRouteArgs { @@ -931,9 +931,9 @@ class ReasonForDeletionRouteArgs { this.isHousholdDelete = false, }); - final _i24.Key? key; + final _i25.Key? key; - final _i25.RegistrationDeliveryLocalization? appLocalizations; + final _i26.RegistrationDeliveryLocalization? appLocalizations; final bool isHousholdDelete; @@ -946,12 +946,12 @@ class ReasonForDeletionRouteArgs { /// generated route for /// [_i16.RecordPastDeliveryDetailsPage] class RecordPastDeliveryDetailsRoute - extends _i23.PageRouteInfo { + extends _i24.PageRouteInfo { RecordPastDeliveryDetailsRoute({ - _i24.Key? key, - _i25.RegistrationDeliveryLocalization? appLocalizations, - List<_i29.TaskModel>? tasks, - List<_i23.PageRouteInfo>? children, + _i25.Key? key, + _i26.RegistrationDeliveryLocalization? appLocalizations, + List<_i30.TaskModel>? tasks, + List<_i24.PageRouteInfo>? children, }) : super( RecordPastDeliveryDetailsRoute.name, args: RecordPastDeliveryDetailsRouteArgs( @@ -964,8 +964,8 @@ class RecordPastDeliveryDetailsRoute static const String name = 'RecordPastDeliveryDetailsRoute'; - static const _i23.PageInfo page = - _i23.PageInfo(name); + static const _i24.PageInfo page = + _i24.PageInfo(name); } class RecordPastDeliveryDetailsRouteArgs { @@ -975,11 +975,11 @@ class RecordPastDeliveryDetailsRouteArgs { this.tasks, }); - final _i24.Key? key; + final _i25.Key? key; - final _i25.RegistrationDeliveryLocalization? appLocalizations; + final _i26.RegistrationDeliveryLocalization? appLocalizations; - final List<_i29.TaskModel>? tasks; + final List<_i30.TaskModel>? tasks; @override String toString() { @@ -990,13 +990,13 @@ class RecordPastDeliveryDetailsRouteArgs { /// generated route for /// [_i17.ReferBeneficiaryPage] class ReferBeneficiaryRoute - extends _i23.PageRouteInfo { + extends _i24.PageRouteInfo { ReferBeneficiaryRoute({ - _i24.Key? key, - _i25.RegistrationDeliveryLocalization? appLocalizations, + _i25.Key? key, + _i26.RegistrationDeliveryLocalization? appLocalizations, bool isEditing = false, required String projectBeneficiaryClientRefId, - List<_i23.PageRouteInfo>? children, + List<_i24.PageRouteInfo>? children, }) : super( ReferBeneficiaryRoute.name, args: ReferBeneficiaryRouteArgs( @@ -1010,8 +1010,8 @@ class ReferBeneficiaryRoute static const String name = 'ReferBeneficiaryRoute'; - static const _i23.PageInfo page = - _i23.PageInfo(name); + static const _i24.PageInfo page = + _i24.PageInfo(name); } class ReferBeneficiaryRouteArgs { @@ -1022,9 +1022,9 @@ class ReferBeneficiaryRouteArgs { required this.projectBeneficiaryClientRefId, }); - final _i24.Key? key; + final _i25.Key? key; - final _i25.RegistrationDeliveryLocalization? appLocalizations; + final _i26.RegistrationDeliveryLocalization? appLocalizations; final bool isEditing; @@ -1035,13 +1035,15 @@ class ReferBeneficiaryRouteArgs { return 'ReferBeneficiaryRouteArgs{key: $key, appLocalizations: $appLocalizations, isEditing: $isEditing, projectBeneficiaryClientRefId: $projectBeneficiaryClientRefId}'; } } + +/// generated route for /// [_i18.RefusedDeliveryPage] class RefusedDeliveryRoute - extends _i23.PageRouteInfo { + extends _i24.PageRouteInfo { RefusedDeliveryRoute({ - _i24.Key? key, - _i25.RegistrationDeliveryLocalization? appLocalizations, - List<_i23.PageRouteInfo>? children, + _i25.Key? key, + _i26.RegistrationDeliveryLocalization? appLocalizations, + List<_i24.PageRouteInfo>? children, }) : super( RefusedDeliveryRoute.name, args: RefusedDeliveryRouteArgs( @@ -1053,8 +1055,8 @@ class RefusedDeliveryRoute static const String name = 'RefusedDeliveryRoute'; - static const _i23.PageInfo page = - _i23.PageInfo(name); + static const _i24.PageInfo page = + _i24.PageInfo(name); } class RefusedDeliveryRouteArgs { @@ -1063,9 +1065,9 @@ class RefusedDeliveryRouteArgs { this.appLocalizations, }); - final _i24.Key? key; + final _i25.Key? key; - final _i25.RegistrationDeliveryLocalization? appLocalizations; + final _i26.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -1075,9 +1077,8 @@ class RefusedDeliveryRouteArgs { /// generated route for /// [_i19.RegistrationDeliveryWrapperPage] -class RegistrationDeliveryWrapperRoute extends _i23.PageRouteInfo { - const RegistrationDeliveryWrapperRoute({List<_i23.PageRouteInfo>? children}) - +class RegistrationDeliveryWrapperRoute extends _i24.PageRouteInfo { + const RegistrationDeliveryWrapperRoute({List<_i24.PageRouteInfo>? children}) : super( RegistrationDeliveryWrapperRoute.name, initialChildren: children, @@ -1085,17 +1086,17 @@ class RegistrationDeliveryWrapperRoute extends _i23.PageRouteInfo { static const String name = 'RegistrationDeliveryWrapperRoute'; - static const _i23.PageInfo page = _i23.PageInfo(name); + static const _i24.PageInfo page = _i24.PageInfo(name); } /// generated route for /// [_i20.SearchBeneficiaryPage] class SearchBeneficiaryRoute - extends _i23.PageRouteInfo { + extends _i24.PageRouteInfo { SearchBeneficiaryRoute({ - _i24.Key? key, - _i25.RegistrationDeliveryLocalization? appLocalizations, - List<_i23.PageRouteInfo>? children, + _i25.Key? key, + _i26.RegistrationDeliveryLocalization? appLocalizations, + List<_i24.PageRouteInfo>? children, }) : super( SearchBeneficiaryRoute.name, args: SearchBeneficiaryRouteArgs( @@ -1107,8 +1108,8 @@ class SearchBeneficiaryRoute static const String name = 'SearchBeneficiaryRoute'; - static const _i23.PageInfo page = - _i23.PageInfo(name); + static const _i24.PageInfo page = + _i24.PageInfo(name); } class SearchBeneficiaryRouteArgs { @@ -1117,9 +1118,9 @@ class SearchBeneficiaryRouteArgs { this.appLocalizations, }); - final _i24.Key? key; + final _i25.Key? key; - final _i25.RegistrationDeliveryLocalization? appLocalizations; + final _i26.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -1129,13 +1130,13 @@ class SearchBeneficiaryRouteArgs { /// generated route for /// [_i21.SideEffectsPage] -class SideEffectsRoute extends _i23.PageRouteInfo { +class SideEffectsRoute extends _i24.PageRouteInfo { SideEffectsRoute({ - _i24.Key? key, - _i25.RegistrationDeliveryLocalization? appLocalizations, - required List<_i29.TaskModel> tasks, + _i25.Key? key, + _i26.RegistrationDeliveryLocalization? appLocalizations, + required List<_i30.TaskModel> tasks, bool isEditing = false, - List<_i23.PageRouteInfo>? children, + List<_i24.PageRouteInfo>? children, }) : super( SideEffectsRoute.name, args: SideEffectsRouteArgs( @@ -1149,8 +1150,8 @@ class SideEffectsRoute extends _i23.PageRouteInfo { static const String name = 'SideEffectsRoute'; - static const _i23.PageInfo page = - _i23.PageInfo(name); + static const _i24.PageInfo page = + _i24.PageInfo(name); } class SideEffectsRouteArgs { @@ -1161,11 +1162,11 @@ class SideEffectsRouteArgs { this.isEditing = false, }); - final _i24.Key? key; + final _i25.Key? key; - final _i25.RegistrationDeliveryLocalization? appLocalizations; + final _i26.RegistrationDeliveryLocalization? appLocalizations; - final List<_i29.TaskModel> tasks; + final List<_i30.TaskModel> tasks; final bool isEditing; @@ -1178,12 +1179,12 @@ class SideEffectsRouteArgs { /// generated route for /// [_i22.SplashAcknowledgementPage] class SplashAcknowledgementRoute - extends _i23.PageRouteInfo { + extends _i24.PageRouteInfo { SplashAcknowledgementRoute({ - _i24.Key? key, - _i25.RegistrationDeliveryLocalization? appLocalizations, + _i25.Key? key, + _i26.RegistrationDeliveryLocalization? appLocalizations, bool? enableBackToSearch, - List<_i23.PageRouteInfo>? children, + List<_i24.PageRouteInfo>? children, }) : super( SplashAcknowledgementRoute.name, args: SplashAcknowledgementRouteArgs( @@ -1196,8 +1197,8 @@ class SplashAcknowledgementRoute static const String name = 'SplashAcknowledgementRoute'; - static const _i23.PageInfo page = - _i23.PageInfo(name); + static const _i24.PageInfo page = + _i24.PageInfo(name); } class SplashAcknowledgementRouteArgs { @@ -1207,9 +1208,9 @@ class SplashAcknowledgementRouteArgs { this.enableBackToSearch, }); - final _i24.Key? key; + final _i25.Key? key; - final _i25.RegistrationDeliveryLocalization? appLocalizations; + final _i26.RegistrationDeliveryLocalization? appLocalizations; final bool? enableBackToSearch; @@ -1220,12 +1221,12 @@ class SplashAcknowledgementRouteArgs { } /// generated route for -/// [_i22.SummaryPage] -class SummaryRoute extends _i23.PageRouteInfo { +/// [_i23.SummaryPage] +class SummaryRoute extends _i24.PageRouteInfo { SummaryRoute({ - _i24.Key? key, - _i25.RegistrationDeliveryLocalization? appLocalizations, - List<_i23.PageRouteInfo>? children, + _i25.Key? key, + _i26.RegistrationDeliveryLocalization? appLocalizations, + List<_i24.PageRouteInfo>? children, }) : super( SummaryRoute.name, args: SummaryRouteArgs( @@ -1237,8 +1238,8 @@ class SummaryRoute extends _i23.PageRouteInfo { static const String name = 'SummaryRoute'; - static const _i23.PageInfo page = - _i23.PageInfo(name); + static const _i24.PageInfo page = + _i24.PageInfo(name); } class SummaryRouteArgs { @@ -1247,9 +1248,9 @@ class SummaryRouteArgs { this.appLocalizations, }); - final _i24.Key? key; + final _i25.Key? key; - final _i25.RegistrationDeliveryLocalization? appLocalizations; + final _i26.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { diff --git a/packages/registration_delivery/lib/utils/constants.dart b/packages/registration_delivery/lib/utils/constants.dart index 973ddda76..f644b71d5 100644 --- a/packages/registration_delivery/lib/utils/constants.dart +++ b/packages/registration_delivery/lib/utils/constants.dart @@ -9,6 +9,7 @@ class Constants { final String deliveryTeam = 'Delivery Team'; final String notAvailable = 'N/A'; final String dateTimeExtFormat = 'dd-MM-yyyy'; + static const String checklistViewDateFormat = 'dd/MM/yyyy hh:mm a'; } class KeyValue { diff --git a/packages/registration_delivery/lib/utils/i18_key_constants.dart b/packages/registration_delivery/lib/utils/i18_key_constants.dart index 8b8c2a99f..277a32705 100644 --- a/packages/registration_delivery/lib/utils/i18_key_constants.dart +++ b/packages/registration_delivery/lib/utils/i18_key_constants.dart @@ -475,6 +475,7 @@ class DeliverIntervention { const DeliverIntervention(); String get deliverInterventionLabel => 'DELIVER_INTERVENTION_LABEL'; + String get beneficiaryChecklistDialogTitle => 'BENEFICIARY_CHECKLIST_DIALOG_TITLE'; String get refusedDeliveryLabel => 'REFUSED_DELIVERY_LABEL'; String get refusedDeliveryVisitDateLabel => 'REFUSED_DELIVERY_VISIT_DATE'; From 40ad143a007fd1fe0608760ea4c73c7be971d6f9 Mon Sep 17 00:00:00 2001 From: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Date: Mon, 15 Jul 2024 16:20:19 +0530 Subject: [PATCH 052/241] HLM-6367:: Auto Create project beneficiary (#454) * added translator for administration area * Fixed Facility search based on tenant ID * Added disable battery optimization permission for background service * Added disable battery optimization ask permission on App start and background service start * HLM-5984:: Get Precise location on Submitting latitude longitude details * Reverted install_bricks.sh * added new status REGISTERED, NOT_REGISTERED updated conditional check for status by project beneficiaries * added static status_filter.dart integration in search_beneficiary.dart * TODO for selected_filters display condition * integrated household search filters with mdms implemented search based on filters with pagination for Registered and NotRegistered * updated status filter component merge with develop * Auto Create Project Beneficiary on Edit Household, and disable record delivery if no project beneficiary present * Conflicts resolved --------- Co-authored-by: Naveen Renati --- .../android/app/src/main/AndroidManifest.xml | 69 +- .../lib/app.dart | 6 + .../app_initialization.dart | 3 + .../lib/blocs/project/project.dart | 4 +- .../no_sql/schema/app_configuration.dart | 10 + .../no_sql/schema/app_configuration.g.dart | 593 +++++++- .../lib/data/repositories/remote/mdms.dart | 8 + .../models/app_config/app_config_model.dart | 13 + .../app_config/app_config_model.freezed.dart | 220 ++- .../models/app_config/app_config_model.g.dart | 22 + .../models/entities/mdms_master_enums.dart | 2 + .../entities/mdms_master_enums.mapper.dart | 4 + .../checklist/checklist_boundary_view.dart | 3 +- .../lib/pages/home.dart | 9 +- .../lib/utils/background_service.dart | 2 +- .../lib/utils/utils.dart | 23 +- .../pubspec.lock | 60 +- .../pubspec.yaml | 3 +- packages/attendance_management/CHANGELOG.md | 3 + .../lib/pages/mark_attendance.dart | 188 +-- .../lib/utils/i18_key_constants.dart | 4 + packages/attendance_management/pubspec.lock | 11 +- packages/attendance_management/pubspec.yaml | 2 +- packages/digit_components/CHANGELOG.md | 5 +- .../digit_components/example/pubspec.lock | 2 +- .../lib/digit_components.dart | 3 +- .../digit_components/lib/utils/utils.dart | 22 + packages/digit_components/pubspec.yaml | 2 +- packages/digit_data_model/pubspec.lock | 8 +- packages/digit_scanner/example/pubspec.lock | 9 +- packages/digit_scanner/pubspec.lock | 31 - packages/inventory_management/CHANGELOG.md | 4 + .../lib/pages/record_stock/stock_details.dart | 540 ++++--- .../lib/utils/i18_key_constants.dart | 4 + packages/inventory_management/pubspec.lock | 9 +- packages/inventory_management/pubspec.yaml | 2 +- packages/referral_reconciliation/pubspec.lock | 9 +- packages/registration_delivery/CHANGELOG.md | 6 +- .../beneficiary_registration.dart | 41 +- .../household_overview.dart | 12 +- .../search_households/proximity_search.dart | 2 - .../search_bloc_common_wrapper.dart | 11 +- .../search_households/search_by_head.dart | 2 +- .../search_households/search_by_status.dart | 328 +++++ .../search_households/search_households.dart | 16 +- .../search_households.freezed.dart | 494 ++++++- .../data/repositories/local/household.dart | 7 +- .../local/registration_delivery_address.dart | 7 +- .../lib/models/entities/status.dart | 39 +- .../lib/models/entities/status.mapper.dart | 12 + .../beneficiary/beneficiary_details.dart | 24 +- .../beneficiary/beneficiary_wrapper.dart | 8 +- .../beneficiary/deliver_intervention.dart | 1128 ++++++++------- .../pages/beneficiary/household_overview.dart | 1255 ++++++++--------- .../record_past_delivery_details.dart | 2 +- .../pages/beneficiary/refer_beneficiary.dart | 3 +- .../pages/beneficiary/refused_delivery.dart | 423 +++--- .../beneficiary_registration_wrapper.dart | 45 +- .../household_details.dart | 28 +- .../household_location.dart | 273 ++-- .../individual_details.dart | 11 +- .../lib/pages/reason_for_deletion.dart | 8 +- .../pages/registration_delivery_wrapper.dart | 30 + .../lib/pages/search_beneficiary.dart | 240 +++- .../lib/registration_delivery.dart | 23 +- .../registration_delivery_router.gm.dart | 3 +- .../lib/utils/i18_key_constants.dart | 14 + .../lib/utils/utils.dart | 10 +- .../widgets/beneficiary/beneficiary_card.dart | 3 +- .../beneficiary/view_beneficiary_card.dart | 118 +- .../lib/widgets/member_card/member_card.dart | 5 - .../widgets/status_filter/status_filter.dart | 106 ++ packages/registration_delivery/pubspec.yaml | 2 +- 73 files changed, 4383 insertions(+), 2268 deletions(-) create mode 100644 packages/digit_components/lib/utils/utils.dart create mode 100644 packages/registration_delivery/lib/blocs/search_households/search_by_status.dart create mode 100644 packages/registration_delivery/lib/widgets/status_filter/status_filter.dart diff --git a/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml b/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml index 0adfdeff4..6bdfc6e86 100644 --- a/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml +++ b/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml @@ -1,45 +1,47 @@ - - - - - - - - - + + + + + + + + + + + - - + + - - - - - + + + + + - - - + + + android:icon="@mipmap/ic_launcher" + android:label="HCM"> android:allowBackup="false" android:fullBackupOnly="false" android:fullBackupContent="false" + android:turnScreenOn="true" + android:windowSoftInputMode="adjustResize"> + android:name="io.flutter.embedding.android.NormalTheme" + android:resource="@style/NormalTheme" /> - - + + - + diff --git a/apps/health_campaign_field_worker_app/lib/app.dart b/apps/health_campaign_field_worker_app/lib/app.dart index 8c576af11..0337a49b5 100644 --- a/apps/health_campaign_field_worker_app/lib/app.dart +++ b/apps/health_campaign_field_worker_app/lib/app.dart @@ -46,6 +46,12 @@ class MainApplication extends StatefulWidget { class MainApplicationState extends State with WidgetsBindingObserver { + @override + void initState() { + super.initState(); + requestDisableBatteryOptimization(); + } + @override Widget build(BuildContext context) { return MultiRepositoryProvider( diff --git a/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.dart b/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.dart index 076eeb8fc..83953038b 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:isar/isar.dart'; @@ -99,6 +100,7 @@ class AppInitializationBloc MasterEnums.callSupport.toValue(), MasterEnums.transportTypes.toValue(), MasterEnums.firebaseConfig.toValue(), + MasterEnums.searchHouseHoldFilters.toValue(), ]), ), MdmsModuleDetailModel( @@ -149,6 +151,7 @@ class AppInitializationBloc ); emit(const AppUninitialized()); } catch (e) { + debugPrint('AppInitializationBloc: $e'); /*Checks for if app initialization failed due to no internet or no retries left */ emit(const AppInitializationState.failed()); } diff --git a/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart b/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart index 55d0dbe0e..04a43af5c 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart @@ -364,9 +364,7 @@ class ProjectBloc extends Bloc { await projectFacilityLocalRepository.bulkCreate(projectFacilities); final facilities = await facilityRemoteRepository.search( - FacilitySearchModel( - id: null, - ), + FacilitySearchModel(tenantId: envConfig.variables.tenantId), ); await facilityLocalRepository.bulkCreate(facilities); diff --git a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.dart b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.dart index e996db094..90722a346 100644 --- a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.dart +++ b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.dart @@ -72,6 +72,9 @@ class AppConfiguration { late List? symptomsTypes; + @Name('SEARCH_HOUSEHOLD_FILTERS') + late List? searchHouseHoldFilters; + late List? referralReasons; late List? houseStructureTypes; late List? refusalReasons; @@ -165,6 +168,13 @@ class HouseholdDeletionReasonOptions { late String code; } +@embedded +class SearchHouseHoldFilters { + late String name; + late String code; + late bool active; +} + @embedded class HouseholdMemberDeletionReasonOptions { late String name; diff --git a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.g.dart b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.g.dart index 7fcf381ae..59195103d 100644 --- a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.g.dart +++ b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.g.dart @@ -116,47 +116,53 @@ const AppConfigurationSchema = CollectionSchema( name: r'PROXIMITY_SEARCH_RANGE', type: IsarType.double, ), - r'SYNC_METHOD': PropertySchema( + r'SEARCH_HOUSEHOLD_FILTERS': PropertySchema( id: 17, + name: r'SEARCH_HOUSEHOLD_FILTERS', + type: IsarType.objectList, + target: r'SearchHouseHoldFilters', + ), + r'SYNC_METHOD': PropertySchema( + id: 18, name: r'SYNC_METHOD', type: IsarType.string, ), r'SYNC_TRIGGER': PropertySchema( - id: 18, + id: 19, name: r'SYNC_TRIGGER', type: IsarType.string, ), r'TENANT_ID': PropertySchema( - id: 19, + id: 20, name: r'TENANT_ID', type: IsarType.string, ), r'TRANSPORT_TYPES': PropertySchema( - id: 20, + id: 21, name: r'TRANSPORT_TYPES', type: IsarType.objectList, target: r'TransportTypes', ), r'houseStructureTypes': PropertySchema( - id: 21, + id: 22, name: r'houseStructureTypes', type: IsarType.objectList, target: r'HouseStructureTypes', ), r'referralReasons': PropertySchema( - id: 22, + id: 23, name: r'referralReasons', type: IsarType.objectList, target: r'ReferralReasons', ), r'refusalReasons': PropertySchema( - id: 23, + id: 24, name: r'refusalReasons', type: IsarType.objectList, target: r'RefusalReasons', ), r'symptomsTypes': PropertySchema( - id: 24, + id: 25, name: r'symptomsTypes', type: IsarType.objectList, target: r'SymptomsTypes', @@ -188,6 +194,7 @@ const AppConfigurationSchema = CollectionSchema( r'CallSupportList': CallSupportListSchema, r'FirebaseConfig': FirebaseConfigSchema, r'SymptomsTypes': SymptomsTypesSchema, + r'SearchHouseHoldFilters': SearchHouseHoldFiltersSchema, r'ReferralReasons': ReferralReasonsSchema, r'HouseStructureTypes': HouseStructureTypesSchema, r'RefusalReasons': RefusalReasonsSchema @@ -394,6 +401,20 @@ int _appConfigurationEstimateSize( bytesCount += 3 + value.length * 3; } } + { + final list = object.searchHouseHoldFilters; + if (list != null) { + bytesCount += 3 + list.length * 3; + { + final offsets = allOffsets[SearchHouseHoldFilters]!; + for (var i = 0; i < list.length; i++) { + final value = list[i]; + bytesCount += SearchHouseHoldFiltersSchema.estimateSize( + value, offsets, allOffsets); + } + } + } + } { final value = object.syncMethod; if (value != null) { @@ -578,35 +599,41 @@ void _appConfigurationSerialize( writer.writeString(offsets[14], object.networkDetection); writer.writeString(offsets[15], object.persistenceMode); writer.writeDouble(offsets[16], object.maxRadius); - writer.writeString(offsets[17], object.syncMethod); - writer.writeString(offsets[18], object.syncTrigger); - writer.writeString(offsets[19], object.tenantId); + writer.writeObjectList( + offsets[17], + allOffsets, + SearchHouseHoldFiltersSchema.serialize, + object.searchHouseHoldFilters, + ); + writer.writeString(offsets[18], object.syncMethod); + writer.writeString(offsets[19], object.syncTrigger); + writer.writeString(offsets[20], object.tenantId); writer.writeObjectList( - offsets[20], + offsets[21], allOffsets, TransportTypesSchema.serialize, object.transportTypes, ); writer.writeObjectList( - offsets[21], + offsets[22], allOffsets, HouseStructureTypesSchema.serialize, object.houseStructureTypes, ); writer.writeObjectList( - offsets[22], + offsets[23], allOffsets, ReferralReasonsSchema.serialize, object.referralReasons, ); writer.writeObjectList( - offsets[23], + offsets[24], allOffsets, RefusalReasonsSchema.serialize, object.refusalReasons, ); writer.writeObjectList( - offsets[24], + offsets[25], allOffsets, SymptomsTypesSchema.serialize, object.symptomsTypes, @@ -707,36 +734,42 @@ AppConfiguration _appConfigurationDeserialize( object.networkDetection = reader.readStringOrNull(offsets[14]); object.persistenceMode = reader.readStringOrNull(offsets[15]); object.maxRadius = reader.readDoubleOrNull(offsets[16]); - object.syncMethod = reader.readStringOrNull(offsets[17]); - object.syncTrigger = reader.readStringOrNull(offsets[18]); - object.tenantId = reader.readStringOrNull(offsets[19]); + object.searchHouseHoldFilters = reader.readObjectList( + offsets[17], + SearchHouseHoldFiltersSchema.deserialize, + allOffsets, + SearchHouseHoldFilters(), + ); + object.syncMethod = reader.readStringOrNull(offsets[18]); + object.syncTrigger = reader.readStringOrNull(offsets[19]); + object.tenantId = reader.readStringOrNull(offsets[20]); object.transportTypes = reader.readObjectList( - offsets[20], + offsets[21], TransportTypesSchema.deserialize, allOffsets, TransportTypes(), ); object.houseStructureTypes = reader.readObjectList( - offsets[21], + offsets[22], HouseStructureTypesSchema.deserialize, allOffsets, HouseStructureTypes(), ); object.id = id; object.referralReasons = reader.readObjectList( - offsets[22], + offsets[23], ReferralReasonsSchema.deserialize, allOffsets, ReferralReasons(), ); object.refusalReasons = reader.readObjectList( - offsets[23], + offsets[24], RefusalReasonsSchema.deserialize, allOffsets, RefusalReasons(), ); object.symptomsTypes = reader.readObjectList( - offsets[24], + offsets[25], SymptomsTypesSchema.deserialize, allOffsets, SymptomsTypes(), @@ -853,40 +886,47 @@ P _appConfigurationDeserializeProp

( case 16: return (reader.readDoubleOrNull(offset)) as P; case 17: - return (reader.readStringOrNull(offset)) as P; + return (reader.readObjectList( + offset, + SearchHouseHoldFiltersSchema.deserialize, + allOffsets, + SearchHouseHoldFilters(), + )) as P; case 18: return (reader.readStringOrNull(offset)) as P; case 19: return (reader.readStringOrNull(offset)) as P; case 20: + return (reader.readStringOrNull(offset)) as P; + case 21: return (reader.readObjectList( offset, TransportTypesSchema.deserialize, allOffsets, TransportTypes(), )) as P; - case 21: + case 22: return (reader.readObjectList( offset, HouseStructureTypesSchema.deserialize, allOffsets, HouseStructureTypes(), )) as P; - case 22: + case 23: return (reader.readObjectList( offset, ReferralReasonsSchema.deserialize, allOffsets, ReferralReasons(), )) as P; - case 23: + case 24: return (reader.readObjectList( offset, RefusalReasonsSchema.deserialize, allOffsets, RefusalReasons(), )) as P; - case 24: + case 25: return (reader.readObjectList( offset, SymptomsTypesSchema.deserialize, @@ -2615,6 +2655,113 @@ extension AppConfigurationQueryFilter }); } + QueryBuilder + searchHouseHoldFiltersIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'SEARCH_HOUSEHOLD_FILTERS', + )); + }); + } + + QueryBuilder + searchHouseHoldFiltersIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'SEARCH_HOUSEHOLD_FILTERS', + )); + }); + } + + QueryBuilder + searchHouseHoldFiltersLengthEqualTo(int length) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'SEARCH_HOUSEHOLD_FILTERS', + length, + true, + length, + true, + ); + }); + } + + QueryBuilder + searchHouseHoldFiltersIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'SEARCH_HOUSEHOLD_FILTERS', + 0, + true, + 0, + true, + ); + }); + } + + QueryBuilder + searchHouseHoldFiltersIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'SEARCH_HOUSEHOLD_FILTERS', + 0, + false, + 999999, + true, + ); + }); + } + + QueryBuilder + searchHouseHoldFiltersLengthLessThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'SEARCH_HOUSEHOLD_FILTERS', + 0, + true, + length, + include, + ); + }); + } + + QueryBuilder + searchHouseHoldFiltersLengthGreaterThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'SEARCH_HOUSEHOLD_FILTERS', + length, + include, + 999999, + true, + ); + }); + } + + QueryBuilder + searchHouseHoldFiltersLengthBetween( + int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'SEARCH_HOUSEHOLD_FILTERS', + lower, + includeLower, + upper, + includeUpper, + ); + }); + } + QueryBuilder syncMethodIsNull() { return QueryBuilder.apply(this, (query) { @@ -3771,6 +3918,13 @@ extension AppConfigurationQueryObject }); } + QueryBuilder + searchHouseHoldFiltersElement(FilterQuery q) { + return QueryBuilder.apply(this, (query) { + return query.object(q, r'SEARCH_HOUSEHOLD_FILTERS'); + }); + } + QueryBuilder transportTypesElement(FilterQuery q) { return QueryBuilder.apply(this, (query) { @@ -4171,6 +4325,13 @@ extension AppConfigurationQueryProperty }); } + QueryBuilder?, + QQueryOperations> searchHouseHoldFiltersProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'SEARCH_HOUSEHOLD_FILTERS'); + }); + } + QueryBuilder syncMethodProperty() { return QueryBuilder.apply(this, (query) { @@ -8302,6 +8463,380 @@ extension HouseholdDeletionReasonOptionsQueryObject on QueryBuilder< // coverage:ignore-file // ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types +const SearchHouseHoldFiltersSchema = Schema( + name: r'SearchHouseHoldFilters', + id: -6619823232754786758, + properties: { + r'active': PropertySchema( + id: 0, + name: r'active', + type: IsarType.bool, + ), + r'code': PropertySchema( + id: 1, + name: r'code', + type: IsarType.string, + ), + r'name': PropertySchema( + id: 2, + name: r'name', + type: IsarType.string, + ) + }, + estimateSize: _searchHouseHoldFiltersEstimateSize, + serialize: _searchHouseHoldFiltersSerialize, + deserialize: _searchHouseHoldFiltersDeserialize, + deserializeProp: _searchHouseHoldFiltersDeserializeProp, +); + +int _searchHouseHoldFiltersEstimateSize( + SearchHouseHoldFilters object, + List offsets, + Map> allOffsets, +) { + var bytesCount = offsets.last; + bytesCount += 3 + object.code.length * 3; + bytesCount += 3 + object.name.length * 3; + return bytesCount; +} + +void _searchHouseHoldFiltersSerialize( + SearchHouseHoldFilters object, + IsarWriter writer, + List offsets, + Map> allOffsets, +) { + writer.writeBool(offsets[0], object.active); + writer.writeString(offsets[1], object.code); + writer.writeString(offsets[2], object.name); +} + +SearchHouseHoldFilters _searchHouseHoldFiltersDeserialize( + Id id, + IsarReader reader, + List offsets, + Map> allOffsets, +) { + final object = SearchHouseHoldFilters(); + object.active = reader.readBool(offsets[0]); + object.code = reader.readString(offsets[1]); + object.name = reader.readString(offsets[2]); + return object; +} + +P _searchHouseHoldFiltersDeserializeProp

( + IsarReader reader, + int propertyId, + int offset, + Map> allOffsets, +) { + switch (propertyId) { + case 0: + return (reader.readBool(offset)) as P; + case 1: + return (reader.readString(offset)) as P; + case 2: + return (reader.readString(offset)) as P; + default: + throw IsarError('Unknown property with id $propertyId'); + } +} + +extension SearchHouseHoldFiltersQueryFilter on QueryBuilder< + SearchHouseHoldFilters, SearchHouseHoldFilters, QFilterCondition> { + QueryBuilder activeEqualTo(bool value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'active', + value: value, + )); + }); + } + + QueryBuilder codeEqualTo( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'code', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder codeGreaterThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'code', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder codeLessThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'code', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder codeBetween( + String lower, + String upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'code', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder codeStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'code', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder codeEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'code', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codeContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'code', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codeMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'code', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder codeIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'code', + value: '', + )); + }); + } + + QueryBuilder codeIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'code', + value: '', + )); + }); + } + + QueryBuilder nameEqualTo( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameGreaterThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameLessThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameBetween( + String lower, + String upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'name', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'name', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'name', + value: '', + )); + }); + } + + QueryBuilder nameIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'name', + value: '', + )); + }); + } +} + +extension SearchHouseHoldFiltersQueryObject on QueryBuilder< + SearchHouseHoldFilters, SearchHouseHoldFilters, QFilterCondition> {} + +// coverage:ignore-file +// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types + const HouseholdMemberDeletionReasonOptionsSchema = Schema( name: r'HouseholdMemberDeletionReasonOptions', id: 752674668946516871, diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart index ebce4a350..018887d28 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart @@ -290,6 +290,14 @@ class MdmsRepository { appConfiguration.complaintTypes = complaintTypesList; appConfiguration.bandwidthBatchSize = bandwidthBatchSize; appConfiguration.downSyncBandwidthBatchSize = downSyncBandWidthBatchSize; + appConfiguration.searchHouseHoldFilters = result.hcmWrapperModel?.searchHouseHoldFilters?.map((e) { + final searchFilters = SearchHouseHoldFilters() + ..name = e.name + ..code = e.code + ..active = e.active; + return searchFilters; + }).toList(); + appConfiguration.symptomsTypes = result.hcmWrapperModel?.symptomsTypeList?.map((e) { final symptomTypes = SymptomsTypes() diff --git a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart index b6b72d0f0..9fa5cbbdc 100644 --- a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart +++ b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart @@ -87,6 +87,7 @@ class HCMWrapperModel with _$HCMWrapperModel { @JsonKey(name: 'TRANSPORT_TYPES') required List transportTypes, @JsonKey(name: 'SYMPTOM_TYPES') List? symptomsTypeList, + @JsonKey(name: 'SEARCH_HOUSEHOLD_FILTERS') List? searchHouseHoldFilters, @JsonKey(name: 'REFERRAL_REASONS') List? referralReasonList, @JsonKey(name: 'HOUSE_STRUCTURE_TYPES') @@ -325,6 +326,18 @@ class CallSupportList with _$CallSupportList { _$CallSupportListFromJson(json); } +@freezed +class SearchHouseHoldFilters with _$SearchHouseHoldFilters { + factory SearchHouseHoldFilters({ + required String name, + required String code, + required bool active, + }) = _SearchHouseHoldFilters; + + factory SearchHouseHoldFilters.fromJson(Map json) => + _$SearchHouseHoldFiltersFromJson(json); +} + @freezed class TransportTypes with _$TransportTypes { factory TransportTypes({ diff --git a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.freezed.dart b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.freezed.dart index 83979d20c..4f556de9b 100644 --- a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.freezed.dart +++ b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.freezed.dart @@ -952,6 +952,9 @@ mixin _$HCMWrapperModel { @JsonKey(name: 'SYMPTOM_TYPES') List? get symptomsTypeList => throw _privateConstructorUsedError; + @JsonKey(name: 'SEARCH_HOUSEHOLD_FILTERS') + List? get searchHouseHoldFilters => + throw _privateConstructorUsedError; @JsonKey(name: 'REFERRAL_REASONS') List? get referralReasonList => throw _privateConstructorUsedError; @@ -999,6 +1002,8 @@ abstract class $HCMWrapperModelCopyWith<$Res> { @JsonKey(name: 'CALL_SUPPORT') List? callSupportOptions, @JsonKey(name: 'TRANSPORT_TYPES') List transportTypes, @JsonKey(name: 'SYMPTOM_TYPES') List? symptomsTypeList, + @JsonKey(name: 'SEARCH_HOUSEHOLD_FILTERS') + List? searchHouseHoldFilters, @JsonKey(name: 'REFERRAL_REASONS') List? referralReasonList, @JsonKey(name: 'HOUSE_STRUCTURE_TYPES') @@ -1033,6 +1038,7 @@ class _$HCMWrapperModelCopyWithImpl<$Res, $Val extends HCMWrapperModel> Object? callSupportOptions = freezed, Object? transportTypes = null, Object? symptomsTypeList = freezed, + Object? searchHouseHoldFilters = freezed, Object? referralReasonList = freezed, Object? houseStructureTypes = freezed, Object? refusalReasons = freezed, @@ -1092,6 +1098,10 @@ class _$HCMWrapperModelCopyWithImpl<$Res, $Val extends HCMWrapperModel> ? _value.symptomsTypeList : symptomsTypeList // ignore: cast_nullable_to_non_nullable as List?, + searchHouseHoldFilters: freezed == searchHouseHoldFilters + ? _value.searchHouseHoldFilters + : searchHouseHoldFilters // ignore: cast_nullable_to_non_nullable + as List?, referralReasonList: freezed == referralReasonList ? _value.referralReasonList : referralReasonList // ignore: cast_nullable_to_non_nullable @@ -1142,6 +1152,8 @@ abstract class _$$HCMWrapperModelImplCopyWith<$Res> @JsonKey(name: 'CALL_SUPPORT') List? callSupportOptions, @JsonKey(name: 'TRANSPORT_TYPES') List transportTypes, @JsonKey(name: 'SYMPTOM_TYPES') List? symptomsTypeList, + @JsonKey(name: 'SEARCH_HOUSEHOLD_FILTERS') + List? searchHouseHoldFilters, @JsonKey(name: 'REFERRAL_REASONS') List? referralReasonList, @JsonKey(name: 'HOUSE_STRUCTURE_TYPES') @@ -1174,6 +1186,7 @@ class __$$HCMWrapperModelImplCopyWithImpl<$Res> Object? callSupportOptions = freezed, Object? transportTypes = null, Object? symptomsTypeList = freezed, + Object? searchHouseHoldFilters = freezed, Object? referralReasonList = freezed, Object? houseStructureTypes = freezed, Object? refusalReasons = freezed, @@ -1233,6 +1246,10 @@ class __$$HCMWrapperModelImplCopyWithImpl<$Res> ? _value._symptomsTypeList : symptomsTypeList // ignore: cast_nullable_to_non_nullable as List?, + searchHouseHoldFilters: freezed == searchHouseHoldFilters + ? _value._searchHouseHoldFilters + : searchHouseHoldFilters // ignore: cast_nullable_to_non_nullable + as List?, referralReasonList: freezed == referralReasonList ? _value._referralReasonList : referralReasonList // ignore: cast_nullable_to_non_nullable @@ -1283,6 +1300,8 @@ class _$HCMWrapperModelImpl implements _HCMWrapperModel { required final List transportTypes, @JsonKey(name: 'SYMPTOM_TYPES') final List? symptomsTypeList, + @JsonKey(name: 'SEARCH_HOUSEHOLD_FILTERS') + final List? searchHouseHoldFilters, @JsonKey(name: 'REFERRAL_REASONS') final List? referralReasonList, @JsonKey(name: 'HOUSE_STRUCTURE_TYPES') @@ -1305,6 +1324,7 @@ class _$HCMWrapperModelImpl implements _HCMWrapperModel { _callSupportOptions = callSupportOptions, _transportTypes = transportTypes, _symptomsTypeList = symptomsTypeList, + _searchHouseHoldFilters = searchHouseHoldFilters, _referralReasonList = referralReasonList, _houseStructureTypes = houseStructureTypes, _refusalReasons = refusalReasons, @@ -1445,6 +1465,18 @@ class _$HCMWrapperModelImpl implements _HCMWrapperModel { return EqualUnmodifiableListView(value); } + final List? _searchHouseHoldFilters; + @override + @JsonKey(name: 'SEARCH_HOUSEHOLD_FILTERS') + List? get searchHouseHoldFilters { + final value = _searchHouseHoldFilters; + if (value == null) return null; + if (_searchHouseHoldFilters is EqualUnmodifiableListView) + return _searchHouseHoldFilters; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); + } + final List? _referralReasonList; @override @JsonKey(name: 'REFERRAL_REASONS') @@ -1493,7 +1525,7 @@ class _$HCMWrapperModelImpl implements _HCMWrapperModel { @override String toString() { - return 'HCMWrapperModel(appConfig: $appConfig, bandWidthBatchSize: $bandWidthBatchSize, downSyncBandWidthBatchSize: $downSyncBandWidthBatchSize, householdDeletionReasonOptions: $householdDeletionReasonOptions, householdMemberDeletionReasonOptions: $householdMemberDeletionReasonOptions, backgroundServiceConfig: $backgroundServiceConfig, checklistTypes: $checklistTypes, idTypeOptions: $idTypeOptions, deliveryCommentOptions: $deliveryCommentOptions, backendInterface: $backendInterface, callSupportOptions: $callSupportOptions, transportTypes: $transportTypes, symptomsTypeList: $symptomsTypeList, referralReasonList: $referralReasonList, houseStructureTypes: $houseStructureTypes, refusalReasons: $refusalReasons, firebaseConfig: $firebaseConfig)'; + return 'HCMWrapperModel(appConfig: $appConfig, bandWidthBatchSize: $bandWidthBatchSize, downSyncBandWidthBatchSize: $downSyncBandWidthBatchSize, householdDeletionReasonOptions: $householdDeletionReasonOptions, householdMemberDeletionReasonOptions: $householdMemberDeletionReasonOptions, backgroundServiceConfig: $backgroundServiceConfig, checklistTypes: $checklistTypes, idTypeOptions: $idTypeOptions, deliveryCommentOptions: $deliveryCommentOptions, backendInterface: $backendInterface, callSupportOptions: $callSupportOptions, transportTypes: $transportTypes, symptomsTypeList: $symptomsTypeList, searchHouseHoldFilters: $searchHouseHoldFilters, referralReasonList: $referralReasonList, houseStructureTypes: $houseStructureTypes, refusalReasons: $refusalReasons, firebaseConfig: $firebaseConfig)'; } @override @@ -1530,6 +1562,8 @@ class _$HCMWrapperModelImpl implements _HCMWrapperModel { .equals(other._transportTypes, _transportTypes) && const DeepCollectionEquality() .equals(other._symptomsTypeList, _symptomsTypeList) && + const DeepCollectionEquality().equals( + other._searchHouseHoldFilters, _searchHouseHoldFilters) && const DeepCollectionEquality() .equals(other._referralReasonList, _referralReasonList) && const DeepCollectionEquality() @@ -1558,6 +1592,7 @@ class _$HCMWrapperModelImpl implements _HCMWrapperModel { const DeepCollectionEquality().hash(_callSupportOptions), const DeepCollectionEquality().hash(_transportTypes), const DeepCollectionEquality().hash(_symptomsTypeList), + const DeepCollectionEquality().hash(_searchHouseHoldFilters), const DeepCollectionEquality().hash(_referralReasonList), const DeepCollectionEquality().hash(_houseStructureTypes), const DeepCollectionEquality().hash(_refusalReasons), @@ -1606,6 +1641,8 @@ abstract class _HCMWrapperModel implements HCMWrapperModel { required final List transportTypes, @JsonKey(name: 'SYMPTOM_TYPES') final List? symptomsTypeList, + @JsonKey(name: 'SEARCH_HOUSEHOLD_FILTERS') + final List? searchHouseHoldFilters, @JsonKey(name: 'REFERRAL_REASONS') final List? referralReasonList, @JsonKey(name: 'HOUSE_STRUCTURE_TYPES') @@ -1659,6 +1696,9 @@ abstract class _HCMWrapperModel implements HCMWrapperModel { @JsonKey(name: 'SYMPTOM_TYPES') List? get symptomsTypeList; @override + @JsonKey(name: 'SEARCH_HOUSEHOLD_FILTERS') + List? get searchHouseHoldFilters; + @override @JsonKey(name: 'REFERRAL_REASONS') List? get referralReasonList; @override @@ -4991,6 +5031,184 @@ abstract class _CallSupportList implements CallSupportList { throw _privateConstructorUsedError; } +SearchHouseHoldFilters _$SearchHouseHoldFiltersFromJson( + Map json) { + return _SearchHouseHoldFilters.fromJson(json); +} + +/// @nodoc +mixin _$SearchHouseHoldFilters { + String get name => throw _privateConstructorUsedError; + String get code => throw _privateConstructorUsedError; + bool get active => throw _privateConstructorUsedError; + + Map toJson() => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + $SearchHouseHoldFiltersCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $SearchHouseHoldFiltersCopyWith<$Res> { + factory $SearchHouseHoldFiltersCopyWith(SearchHouseHoldFilters value, + $Res Function(SearchHouseHoldFilters) then) = + _$SearchHouseHoldFiltersCopyWithImpl<$Res, SearchHouseHoldFilters>; + @useResult + $Res call({String name, String code, bool active}); +} + +/// @nodoc +class _$SearchHouseHoldFiltersCopyWithImpl<$Res, + $Val extends SearchHouseHoldFilters> + implements $SearchHouseHoldFiltersCopyWith<$Res> { + _$SearchHouseHoldFiltersCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? name = null, + Object? code = null, + Object? active = null, + }) { + return _then(_value.copyWith( + name: null == name + ? _value.name + : name // ignore: cast_nullable_to_non_nullable + as String, + code: null == code + ? _value.code + : code // ignore: cast_nullable_to_non_nullable + as String, + active: null == active + ? _value.active + : active // ignore: cast_nullable_to_non_nullable + as bool, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$SearchHouseHoldFiltersImplCopyWith<$Res> + implements $SearchHouseHoldFiltersCopyWith<$Res> { + factory _$$SearchHouseHoldFiltersImplCopyWith( + _$SearchHouseHoldFiltersImpl value, + $Res Function(_$SearchHouseHoldFiltersImpl) then) = + __$$SearchHouseHoldFiltersImplCopyWithImpl<$Res>; + @override + @useResult + $Res call({String name, String code, bool active}); +} + +/// @nodoc +class __$$SearchHouseHoldFiltersImplCopyWithImpl<$Res> + extends _$SearchHouseHoldFiltersCopyWithImpl<$Res, + _$SearchHouseHoldFiltersImpl> + implements _$$SearchHouseHoldFiltersImplCopyWith<$Res> { + __$$SearchHouseHoldFiltersImplCopyWithImpl( + _$SearchHouseHoldFiltersImpl _value, + $Res Function(_$SearchHouseHoldFiltersImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? name = null, + Object? code = null, + Object? active = null, + }) { + return _then(_$SearchHouseHoldFiltersImpl( + name: null == name + ? _value.name + : name // ignore: cast_nullable_to_non_nullable + as String, + code: null == code + ? _value.code + : code // ignore: cast_nullable_to_non_nullable + as String, + active: null == active + ? _value.active + : active // ignore: cast_nullable_to_non_nullable + as bool, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$SearchHouseHoldFiltersImpl implements _SearchHouseHoldFilters { + _$SearchHouseHoldFiltersImpl( + {required this.name, required this.code, required this.active}); + + factory _$SearchHouseHoldFiltersImpl.fromJson(Map json) => + _$$SearchHouseHoldFiltersImplFromJson(json); + + @override + final String name; + @override + final String code; + @override + final bool active; + + @override + String toString() { + return 'SearchHouseHoldFilters(name: $name, code: $code, active: $active)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$SearchHouseHoldFiltersImpl && + (identical(other.name, name) || other.name == name) && + (identical(other.code, code) || other.code == code) && + (identical(other.active, active) || other.active == active)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => Object.hash(runtimeType, name, code, active); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$SearchHouseHoldFiltersImplCopyWith<_$SearchHouseHoldFiltersImpl> + get copyWith => __$$SearchHouseHoldFiltersImplCopyWithImpl< + _$SearchHouseHoldFiltersImpl>(this, _$identity); + + @override + Map toJson() { + return _$$SearchHouseHoldFiltersImplToJson( + this, + ); + } +} + +abstract class _SearchHouseHoldFilters implements SearchHouseHoldFilters { + factory _SearchHouseHoldFilters( + {required final String name, + required final String code, + required final bool active}) = _$SearchHouseHoldFiltersImpl; + + factory _SearchHouseHoldFilters.fromJson(Map json) = + _$SearchHouseHoldFiltersImpl.fromJson; + + @override + String get name; + @override + String get code; + @override + bool get active; + @override + @JsonKey(ignore: true) + _$$SearchHouseHoldFiltersImplCopyWith<_$SearchHouseHoldFiltersImpl> + get copyWith => throw _privateConstructorUsedError; +} + TransportTypes _$TransportTypesFromJson(Map json) { return _TransportTypes.fromJson(json); } diff --git a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.g.dart b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.g.dart index f2c00629e..45397d69f 100644 --- a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.g.dart +++ b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.g.dart @@ -136,6 +136,11 @@ _$HCMWrapperModelImpl _$$HCMWrapperModelImplFromJson( symptomsTypeList: (json['SYMPTOM_TYPES'] as List?) ?.map((e) => SymptomsType.fromJson(e as Map)) .toList(), + searchHouseHoldFilters: (json['SEARCH_HOUSEHOLD_FILTERS'] + as List?) + ?.map( + (e) => SearchHouseHoldFilters.fromJson(e as Map)) + .toList(), referralReasonList: (json['REFERRAL_REASONS'] as List?) ?.map((e) => ReferralReasonType.fromJson(e as Map)) .toList(), @@ -168,6 +173,7 @@ Map _$$HCMWrapperModelImplToJson( 'CALL_SUPPORT': instance.callSupportOptions, 'TRANSPORT_TYPES': instance.transportTypes, 'SYMPTOM_TYPES': instance.symptomsTypeList, + 'SEARCH_HOUSEHOLD_FILTERS': instance.searchHouseHoldFilters, 'REFERRAL_REASONS': instance.referralReasonList, 'HOUSE_STRUCTURE_TYPES': instance.houseStructureTypes, 'REFUSAL_REASONS': instance.refusalReasons, @@ -451,6 +457,22 @@ Map _$$CallSupportListImplToJson( 'code': instance.code, }; +_$SearchHouseHoldFiltersImpl _$$SearchHouseHoldFiltersImplFromJson( + Map json) => + _$SearchHouseHoldFiltersImpl( + name: json['name'] as String, + code: json['code'] as String, + active: json['active'] as bool, + ); + +Map _$$SearchHouseHoldFiltersImplToJson( + _$SearchHouseHoldFiltersImpl instance) => + { + 'name': instance.name, + 'code': instance.code, + 'active': instance.active, + }; + _$TransportTypesImpl _$$TransportTypesImplFromJson(Map json) => _$TransportTypesImpl( name: json['name'] as String, diff --git a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart index 242d256f1..a9b89154a 100644 --- a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart +++ b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart @@ -47,4 +47,6 @@ enum MasterEnums { serviceDefinitions, @MappableValue("FIREBASE_CONFIG") firebaseConfig, + @MappableValue("SEARCH_HOUSEHOLD_FILTERS") + searchHouseHoldFilters, } diff --git a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart index bf9a34043..e24f820ef 100644 --- a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart +++ b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart @@ -67,6 +67,8 @@ class MasterEnumsMapper extends EnumMapper { return MasterEnums.serviceDefinitions; case "FIREBASE_CONFIG": return MasterEnums.firebaseConfig; + case "SEARCH_HOUSEHOLD_FILTERS": + return MasterEnums.searchHouseHoldFilters; default: throw MapperException.unknownEnumValue(value); } @@ -117,6 +119,8 @@ class MasterEnumsMapper extends EnumMapper { return "ServiceDefs"; case MasterEnums.firebaseConfig: return "FIREBASE_CONFIG"; + case MasterEnums.searchHouseHoldFilters: + return "SEARCH_HOUSEHOLD_FILTERS"; } } } diff --git a/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_boundary_view.dart b/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_boundary_view.dart index d20ed164a..40f2f05f4 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_boundary_view.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_boundary_view.dart @@ -72,7 +72,8 @@ class _ChecklistBoundaryViewPageState i18.householdLocation.administrationAreaFormLabel, ), controller: TextEditingController( - text: context.boundary.name, + text: localizations + .translate(context.boundary.code.toString()), ), ), ], diff --git a/apps/health_campaign_field_worker_app/lib/pages/home.dart b/apps/health_campaign_field_worker_app/lib/pages/home.dart index 392b0579e..ea9ec49c4 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/home.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/home.dart @@ -624,8 +624,13 @@ void setPackagesSingleton(BuildContext context) { .toList(), symptomsTypes: appConfiguration.symptomsTypes?.map((e) => e.code).toList(), - referralReasons: - appConfiguration.referralReasons?.map((e) => e.code).toList(), + searchHouseHoldFilter: appConfiguration.searchHouseHoldFilters != null + ? appConfiguration.searchHouseHoldFilters! + .map((e) => e.code) + .toList() + : [], + referralReasons: + appConfiguration.referralReasons?.map((e) => e.code).toList(), houseStructureTypes: appConfiguration.houseStructureTypes ?.map((e) => e.code) .toList(), diff --git a/apps/health_campaign_field_worker_app/lib/utils/background_service.dart b/apps/health_campaign_field_worker_app/lib/utils/background_service.dart index 3da2b7155..413bbc572 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/background_service.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/background_service.dart @@ -62,7 +62,7 @@ Future initializeService(dio, isar) async { AndroidFlutterLocalNotificationsPlugin>() ?.createNotificationChannel(channel); } - + requestDisableBatteryOptimization(); await service.configure( androidConfiguration: AndroidConfiguration( // this will be executed when app is in foreground or background in separated isolate diff --git a/apps/health_campaign_field_worker_app/lib/utils/utils.dart b/apps/health_campaign_field_worker_app/lib/utils/utils.dart index eb4ec0a1c..ebcf613f8 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/utils.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/utils.dart @@ -1,10 +1,5 @@ library app_utils; -import 'package:registration_delivery/registration_delivery.init.dart' - as registration_delivery_mappers; -import 'package:digit_data_model/data_model.init.dart' as data_model_mappers; -import 'package:inventory_management/inventory_management.init.dart' - as inventory_mappers; import 'dart:async'; import 'dart:io'; @@ -16,13 +11,19 @@ import 'package:digit_components/widgets/atoms/digit_toaster.dart'; import 'package:digit_components/widgets/digit_dialog.dart'; import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_data_model/data_model.init.dart' as data_model_mappers; +import 'package:disable_battery_optimization/disable_battery_optimization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_background_service/flutter_background_service.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:inventory_management/inventory_management.init.dart' + as inventory_mappers; import 'package:isar/isar.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:referral_reconciliation/referral_reconciliation.dart' as referral_reconciliation_mappers; +import 'package:registration_delivery/registration_delivery.init.dart' + as registration_delivery_mappers; import '../blocs/app_initialization/app_initialization.dart'; import '../blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart'; @@ -69,6 +70,15 @@ class CustomValidator { } } +Future requestDisableBatteryOptimization() async { + bool isIgnoringBatteryOptimizations = + await DisableBatteryOptimization.isBatteryOptimizationDisabled ?? false; + + if (!isIgnoringBatteryOptimizations) { + await DisableBatteryOptimization.showDisableBatteryOptimizationSettings(); + } +} + setBgRunning(bool isBgRunning) async { final localSecureStore = LocalSecureStore.instance; await localSecureStore.setBackgroundService(isBgRunning); @@ -104,7 +114,8 @@ performBackgroundService({ } else { if (!isRunning && isOnline) { service.startService(); - if (context != null) { + if (context != null && context.mounted) { + requestDisableBatteryOptimization(); DigitToast.show( context, options: DigitToastOptions( diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 67cceb830..262b33a3f 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -68,11 +68,10 @@ packages: attendance_management: dependency: "direct main" description: - name: attendance_management - sha256: "7a3719dcca80be6f9475bea2b1e5226e67fcc60f3c3c55d849aa4f7216512a43" - url: "https://pub.dev" - source: hosted - version: "1.0.1" + path: "../../packages/attendance_management" + relative: true + source: path + version: "1.0.1+1" audioplayers: dependency: "direct main" description: @@ -483,11 +482,10 @@ packages: digit_components: dependency: "direct main" description: - name: digit_components - sha256: "53ee8c0a7c992c0e8d1c9c867b6cf1d52e1728200f4b4436943a5d6c5e4984c3" - url: "https://pub.dev" - source: hosted - version: "1.0.0+2" + path: "../../packages/digit_components" + relative: true + source: path + version: "1.0.0+3" digit_data_model: dependency: "direct main" description: @@ -506,10 +504,9 @@ packages: digit_scanner: dependency: "direct main" description: - name: digit_scanner - sha256: a040c9c413436aeb953fdea3bc99ef618641189b06e8f155d84ac83ba8d40fd1 - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_scanner" + relative: true + source: path version: "1.0.2" digit_showcase: dependency: "direct main" @@ -527,6 +524,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.4.3+1" + disable_battery_optimization: + dependency: "direct main" + description: + name: disable_battery_optimization + sha256: "6b2ba802f984af141faf1b6b5fb956d5ef01f9cd555597c35b9cc335a03185ba" + url: "https://pub.dev" + source: hosted + version: "1.1.1" disk_space: dependency: "direct main" description: @@ -1093,11 +1098,10 @@ packages: inventory_management: dependency: "direct main" description: - name: inventory_management - sha256: "2be2d09552432266bef3c11f2cd6d12ce83f39339c925d350aeda764c2acfef9" - url: "https://pub.dev" - source: hosted - version: "1.0.2" + path: "../../packages/inventory_management" + relative: true + source: path + version: "1.0.2+1" io: dependency: transitive description: @@ -1509,19 +1513,17 @@ packages: referral_reconciliation: dependency: "direct main" description: - name: referral_reconciliation - sha256: "27f03bb51743cb9b25419fc1089507ee95693270a43233b92194298b1f87779c" - url: "https://pub.dev" - source: hosted + path: "../../packages/referral_reconciliation" + relative: true + source: path version: "1.0.2" registration_delivery: dependency: "direct main" description: - name: registration_delivery - sha256: c315da85605c6d08b9b05147ced61a93ecb566d98bafee1653681659cfde4b84 - url: "https://pub.dev" - source: hosted - version: "1.0.2" + path: "../../packages/registration_delivery" + relative: true + source: path + version: "1.0.2+1" remove_emoji_input_formatter: dependency: transitive description: @@ -2056,5 +2058,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" + dart: ">=3.2.0 <4.0.0" flutter: ">=3.16.0" diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 74375bbd8..9806f2247 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -25,7 +25,7 @@ dependencies: reactive_forms: ^14.1.0 location: ^5.0.0 dart_mappable: ^4.2.0 - dio: ^5.1.2 + dio: ^5.4.2+1 flutter_keyboard_visibility: ^5.4.0 isar: ^3.0.5 isar_flutter_libs: ^3.0.5 @@ -71,6 +71,7 @@ dependencies: referral_reconciliation: ^1.0.2 digit_data_model: ^1.0.2 registration_delivery: ^1.0.2 + disable_battery_optimization: ^1.1.1 dev_dependencies: flutter_test: diff --git a/packages/attendance_management/CHANGELOG.md b/packages/attendance_management/CHANGELOG.md index a0a7ae29f..2beff873a 100644 --- a/packages/attendance_management/CHANGELOG.md +++ b/packages/attendance_management/CHANGELOG.md @@ -38,3 +38,6 @@ ## 1.0.1 * Added try catch for local repository to handle db lock + +## 1.0.1+1 +* Get Precise location on Submitting latitude longitude details diff --git a/packages/attendance_management/lib/pages/mark_attendance.dart b/packages/attendance_management/lib/pages/mark_attendance.dart index 8c1e828c9..582ac3846 100644 --- a/packages/attendance_management/lib/pages/mark_attendance.dart +++ b/packages/attendance_management/lib/pages/mark_attendance.dart @@ -6,6 +6,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/models/digit_table_model.dart'; import 'package:digit_components/widgets/atoms/digit_toaster.dart'; +import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_data_model/data/data_repository.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -56,6 +57,7 @@ class _MarkAttendancePageState extends State { void initState() { controller = TextEditingController(); controller.addListener(searchByName); + context.read().add(const LoadLocationEvent()); individualLogBloc = AttendanceIndividualBloc( const AttendanceIndividualState.loading(), attendanceLogDataRepository: context @@ -177,6 +179,7 @@ class _MarkAttendancePageState extends State { EnumValues.draft.toValue(), locationState.latitude, locationState.longitude, + context, ); }, icon: Icons.drafts_outlined, @@ -196,6 +199,7 @@ class _MarkAttendancePageState extends State { .toValue(), locationState.latitude, locationState.longitude, + context, ); } : () { @@ -436,89 +440,107 @@ class _MarkAttendancePageState extends State { ThemeData theme, String type, double? latitude, - double? longitude) { - state.maybeWhen( - orElse: () {}, - loaded: ( - attendanceSearchModelList, - attendanceCollectionModel, - offsetData, - currentOffset, - countData, - limitData, - flag, - ) async { - if (((attendanceCollectionModel ?? []) - .any((a) => a.status == -1 || a.status == null) && - type != EnumValues.draft.toValue()) || - ((attendanceCollectionModel ?? []) - .every((a) => a.status == -1 || a.status == null) && - type == EnumValues.draft.toValue())) { - DigitToast.show( - context, - options: DigitToastOptions( - localizations - .translate(i18.attendance.pleaseMarkAttForIndividuals), - true, - theme, - ), - ); - } else { - if (type == EnumValues.draft.toValue()) { - individualLogBloc?.add(SaveAsDraftEvent( - entryTime: widget.entryTime, - exitTime: widget.exitTime, - selectedDate: widget.dateTime, - isSingleSession: widget.session == null, - createOplog: type != EnumValues.draft.toValue(), - latitude: latitude, - longitude: longitude, - )); - DigitToast.show( - context, - options: DigitToastOptions( - localizations.translate(i18.attendance.draftSavedMessage), - false, - theme, - ), - ); - } else { - DigitDialog.show(context, - options: DigitDialogOptions( - titleText: localizations.translate( - i18.attendance.confirmationLabel, - ), - contentText: - '${localizations.translate(i18.attendance.confirmationDesc)} \n\n${localizations.translate(i18.attendance.confirmationDescNote)}', - primaryAction: DigitDialogActions( - label: localizations.translate( - i18.attendance.proceed, - ), - action: (context) { - individualLogBloc?.add(SaveAsDraftEvent( - entryTime: widget.entryTime, - exitTime: widget.exitTime, - selectedDate: widget.dateTime, - isSingleSession: widget.session == null, - createOplog: type != EnumValues.draft.toValue(), - latitude: latitude, - longitude: longitude, - )); - Navigator.of(context).pop(); - navigateToAcknowledgement(localizations); - }, - ), - secondaryAction: DigitDialogActions( - label: - localizations.translate(i18.common.coreCommonGoback), - action: (context) { - Navigator.of(context).pop(); - }, - ), - )); - } - } - }); + double? longitude, + BuildContext context) { + context.read().add(const LoadLocationEvent()); + DigitComponentsUtils().showLocationCapturingDialog( + context, + localizations.translate(i18.common.locationCapturing), + DigitSyncDialogType.inProgress); + Future.delayed(const Duration(seconds: 2), () async { + DigitComponentsUtils().hideLocationDialog(context); + await DigitSyncDialog.show(context, + type: DigitSyncDialogType.complete, + label: localizations.translate(i18.common.locationCaptured), + primaryAction: DigitDialogActions( + label: localizations.translate(i18.common.ctaProceed), + action: (ctx) async { + state.maybeWhen( + orElse: () {}, + loaded: ( + attendanceSearchModelList, + attendanceCollectionModel, + offsetData, + currentOffset, + countData, + limitData, + flag, + ) async { + if (((attendanceCollectionModel ?? []).any( + (a) => a.status == -1 || a.status == null) && + type != EnumValues.draft.toValue()) || + ((attendanceCollectionModel ?? []).every( + (a) => a.status == -1 || a.status == null) && + type == EnumValues.draft.toValue())) { + DigitToast.show( + context, + options: DigitToastOptions( + localizations.translate( + i18.attendance.pleaseMarkAttForIndividuals), + true, + theme, + ), + ); + } else { + if (type == EnumValues.draft.toValue()) { + individualLogBloc?.add(SaveAsDraftEvent( + entryTime: widget.entryTime, + exitTime: widget.exitTime, + selectedDate: widget.dateTime, + isSingleSession: widget.session == null, + createOplog: type != EnumValues.draft.toValue(), + latitude: latitude, + longitude: longitude, + )); + DigitToast.show( + context, + options: DigitToastOptions( + localizations + .translate(i18.attendance.draftSavedMessage), + false, + theme, + ), + ); + } else { + DigitDialog.show(context, + options: DigitDialogOptions( + titleText: localizations.translate( + i18.attendance.confirmationLabel, + ), + contentText: + '${localizations.translate(i18.attendance.confirmationDesc)} \n\n${localizations.translate(i18.attendance.confirmationDescNote)}', + primaryAction: DigitDialogActions( + label: localizations.translate( + i18.attendance.proceed, + ), + action: (context) { + individualLogBloc?.add(SaveAsDraftEvent( + entryTime: widget.entryTime, + exitTime: widget.exitTime, + selectedDate: widget.dateTime, + isSingleSession: widget.session == null, + createOplog: + type != EnumValues.draft.toValue(), + latitude: latitude, + longitude: longitude, + )); + Navigator.of(context).pop(); + navigateToAcknowledgement(localizations); + }, + ), + secondaryAction: DigitDialogActions( + label: localizations + .translate(i18.common.coreCommonGoback), + action: (context) { + Navigator.of(context).pop(); + }, + ), + )); + } + } + }); + })); + }); } void navigateToAcknowledgement(AttendanceLocalization localizations) { diff --git a/packages/attendance_management/lib/utils/i18_key_constants.dart b/packages/attendance_management/lib/utils/i18_key_constants.dart index 9b6bf714c..56bf1453c 100644 --- a/packages/attendance_management/lib/utils/i18_key_constants.dart +++ b/packages/attendance_management/lib/utils/i18_key_constants.dart @@ -97,6 +97,10 @@ class Common { String get ageInMonths => 'AGE_IN_MONTHS_LABEL'; String get inactive => 'INACTIVE'; + + String get locationCapturing => 'CAPTURING_LOCATION'; + String get locationCaptured => 'LOCATION_CAPTURED'; + String get ctaProceed => 'PROCEED'; } class AcknowledgementSuccess { diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index 2189ae14f..ed7ca41b2 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -315,11 +315,10 @@ packages: digit_components: dependency: "direct main" description: - name: digit_components - sha256: "53ee8c0a7c992c0e8d1c9c867b6cf1d52e1728200f4b4436943a5d6c5e4984c3" - url: "https://pub.dev" - source: hosted - version: "1.0.0+2" + path: "../digit_components" + relative: true + source: path + version: "1.0.0+3" digit_data_model: dependency: "direct main" description: @@ -1261,5 +1260,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" + dart: ">=3.2.0 <4.0.0" flutter: ">=3.16.0" diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index 43a353baa..824586ad1 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -1,6 +1,6 @@ name: attendance_management description: Digit UI attendance management specification - This tool is designed for tracking user attendance with customizable session counts per day. -version: 1.0.1 +version: 1.0.1+1 homepage: "https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/attendance_management" repository: "https://github.com/egovernments/health-campaign-field-worker-app" diff --git a/packages/digit_components/CHANGELOG.md b/packages/digit_components/CHANGELOG.md index 03c6603f6..e5a78855a 100644 --- a/packages/digit_components/CHANGELOG.md +++ b/packages/digit_components/CHANGELOG.md @@ -106,4 +106,7 @@ * Stable release with searchable dropdown fix ## 1.0.0+2 -* DigitTextField component update \ No newline at end of file +* DigitTextField component update + +## 1.0.0+3 +* Capture and Hide Location Dialog added to utils \ No newline at end of file diff --git a/packages/digit_components/example/pubspec.lock b/packages/digit_components/example/pubspec.lock index a599660fe..0f5971628 100644 --- a/packages/digit_components/example/pubspec.lock +++ b/packages/digit_components/example/pubspec.lock @@ -231,7 +231,7 @@ packages: path: ".." relative: true source: path - version: "1.0.0+2" + version: "1.0.0+3" easy_stepper: dependency: transitive description: diff --git a/packages/digit_components/lib/digit_components.dart b/packages/digit_components/lib/digit_components.dart index c777381b5..78a5a21fe 100644 --- a/packages/digit_components/lib/digit_components.dart +++ b/packages/digit_components/lib/digit_components.dart @@ -4,8 +4,9 @@ library digit_components; export 'blocs/location/location.dart'; export 'theme/theme.dart'; -export 'widgets/widgets.dart'; export 'utils/app_logger.dart'; +export 'utils/utils.dart'; +export 'widgets/widgets.dart'; class DigitUi { static const DigitUi _instance = DigitUi._internal(); diff --git a/packages/digit_components/lib/utils/utils.dart b/packages/digit_components/lib/utils/utils.dart new file mode 100644 index 000000000..7c54568be --- /dev/null +++ b/packages/digit_components/lib/utils/utils.dart @@ -0,0 +1,22 @@ +import 'package:digit_components/widgets/digit_sync_dialog.dart'; +import 'package:flutter/material.dart'; + +class DigitComponentsUtils { + void hideLocationDialog(BuildContext context) { + Navigator.of( + context, + rootNavigator: true, + ).popUntil( + (route) => route is! PopupRoute, + ); + } + + void showLocationCapturingDialog( + BuildContext context, String label, DigitSyncDialogType dialogType) { + DigitSyncDialog.show( + context, + type: dialogType, + label: label, + ); + } +} diff --git a/packages/digit_components/pubspec.yaml b/packages/digit_components/pubspec.yaml index a3c0bf789..8a336891f 100644 --- a/packages/digit_components/pubspec.yaml +++ b/packages/digit_components/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_components description: Digit UI Design specification Flutter widgets. Import this package by adding digit_components in respective pubspec.yaml dependencies. -version: 1.0.0+2 +version: 1.0.0+3 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_components repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/digit_data_model/pubspec.lock b/packages/digit_data_model/pubspec.lock index 3f0249b33..a2f7c5b49 100644 --- a/packages/digit_data_model/pubspec.lock +++ b/packages/digit_data_model/pubspec.lock @@ -252,9 +252,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "145091c3b5f05ccea22ec7520f5b9f4e50ff6106" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive diff --git a/packages/digit_scanner/example/pubspec.lock b/packages/digit_scanner/example/pubspec.lock index 1bd5fd661..b3255a1d4 100644 --- a/packages/digit_scanner/example/pubspec.lock +++ b/packages/digit_scanner/example/pubspec.lock @@ -306,11 +306,12 @@ packages: source: hosted version: "2.3.6" digit_components: - dependency: "direct overridden" + dependency: transitive description: - path: "../../digit_components" - relative: true - source: path + name: digit_components + sha256: "53ee8c0a7c992c0e8d1c9c867b6cf1d52e1728200f4b4436943a5d6c5e4984c3" + url: "https://pub.dev" + source: hosted version: "1.0.0+2" digit_scanner: dependency: "direct main" diff --git a/packages/digit_scanner/pubspec.lock b/packages/digit_scanner/pubspec.lock index a84587afb..8b1128eba 100644 --- a/packages/digit_scanner/pubspec.lock +++ b/packages/digit_scanner/pubspec.lock @@ -17,14 +17,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.2.0" - ansicolor: - dependency: transitive - description: - name: ansicolor - sha256: "8bf17a8ff6ea17499e40a2d2542c2f481cd7615760c6d34065cb22bfd22e6880" - url: "https://pub.dev" - source: hosted - version: "2.0.2" archive: dependency: transitive description: @@ -329,21 +321,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_mappable: - dependency: transitive - description: - name: dart_mappable - sha256: "47269caf2060533c29b823ff7fa9706502355ffcb61e7f2a374e3a0fb2f2c3f0" - url: "https://pub.dev" - source: hosted - version: "4.2.2" - dart_mappable_builder: - dependency: "direct overridden" - description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.0" dart_style: dependency: transitive description: @@ -1132,14 +1109,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" - type_plus: - dependency: transitive - description: - name: type_plus - sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 - url: "https://pub.dev" - source: hosted - version: "2.1.1" typed_data: dependency: transitive description: diff --git a/packages/inventory_management/CHANGELOG.md b/packages/inventory_management/CHANGELOG.md index 1e9156c4a..e976b52c4 100644 --- a/packages/inventory_management/CHANGELOG.md +++ b/packages/inventory_management/CHANGELOG.md @@ -48,3 +48,7 @@ * Localization support added for missing fields * Added try catch for local repository to handle db lock + +## 1.0.2+1 + +* Get Precise location on Submitting latitude longitude details diff --git a/packages/inventory_management/lib/pages/record_stock/stock_details.dart b/packages/inventory_management/lib/pages/record_stock/stock_details.dart index f509436f5..748265e48 100644 --- a/packages/inventory_management/lib/pages/record_stock/stock_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/stock_details.dart @@ -1,6 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/widgets/atoms/digit_toaster.dart'; +import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_scanner/blocs/scanner.dart'; import 'package:digit_scanner/pages/qr_scanner.dart'; @@ -76,6 +77,7 @@ class _StockDetailsPageState extends LocalizedState { void initState() { clearQRCodes(); transportTypes = InventorySingleton().transportType; + context.read().add(const LoadLocationEvent()); super.initState(); } @@ -275,246 +277,340 @@ class _StockDetailsPageState extends LocalizedState { } else { FocusManager.instance.primaryFocus ?.unfocus(); + context + .read() + .add(const LoadLocationEvent()); + DigitComponentsUtils() + .showLocationCapturingDialog( + context, + localizations.translate(i18 + .common.locationCapturing), + DigitSyncDialogType.inProgress); + Future.delayed( + const Duration(seconds: 2), + () async { + DigitComponentsUtils() + .hideLocationDialog(context); + await DigitSyncDialog.show(context, + type: + DigitSyncDialogType.complete, + label: localizations.translate( + i18.common.locationCaptured), + primaryAction: DigitDialogActions( + label: localizations + .translate(i18 + .common.ctaProceed), + action: (ctx) async { + DigitComponentsUtils() + .hideLocationDialog( + context); + final bloc = context.read< + RecordStockBloc>(); - final bloc = - context.read(); - - final productVariant = form - .control(_productVariantKey) - .value as ProductVariantModel; - - switch (entryType) { - case StockRecordEntryType.receipt: - transactionReason = - TransactionReason.received - .toValue(); - break; - case StockRecordEntryType.dispatch: - transactionReason = null; - break; - case StockRecordEntryType.returned: - transactionReason = - TransactionReason.returned - .toValue(); - break; - default: - transactionReason = form - .control( - _transactionReasonKey, - ) - .value as String?; - break; - } + final productVariant = form + .control( + _productVariantKey) + .value + as ProductVariantModel; - final quantity = form - .control(_transactionQuantityKey) - .value; + switch (entryType) { + case StockRecordEntryType + .receipt: + transactionReason = + TransactionReason + .received + .toValue(); + break; + case StockRecordEntryType + .dispatch: + transactionReason = + null; + break; + case StockRecordEntryType + .returned: + transactionReason = + TransactionReason + .returned + .toValue(); + break; + default: + transactionReason = form + .control( + _transactionReasonKey, + ) + .value as String?; + break; + } - final waybillNumber = form - .control(_waybillNumberKey) - .value as String?; + final quantity = form + .control( + _transactionQuantityKey) + .value; - final waybillQuantity = form - .control(_waybillQuantityKey) - .value as String?; + final waybillNumber = form + .control( + _waybillNumberKey) + .value as String?; - final vehicleNumber = form - .control(_vehicleNumberKey) - .value as String?; + final waybillQuantity = form + .control( + _waybillQuantityKey) + .value as String?; - final lat = locationState.latitude; - final lng = locationState.longitude; + final vehicleNumber = form + .control( + _vehicleNumberKey) + .value as String?; - final hasLocationData = - lat != null && lng != null; + final lat = + locationState.latitude; + final lng = + locationState.longitude; - final comments = form - .control(_commentsKey) - .value as String?; + final hasLocationData = + lat != null && + lng != null; - final deliveryTeamName = form - .control(_deliveryTeamKey) - .value as String?; + final comments = form + .control(_commentsKey) + .value as String?; - String? senderId; - String? senderType; - String? receiverId; - String? receiverType; + final deliveryTeamName = form + .control( + _deliveryTeamKey) + .value as String?; - final primaryType = - BlocProvider.of( - context, - ).state.primaryType; + String? senderId; + String? senderType; + String? receiverId; + String? receiverType; - final primaryId = - BlocProvider.of( - context, - ).state.primaryId; - - switch (entryType) { - case StockRecordEntryType.receipt: - case StockRecordEntryType.loss: - case StockRecordEntryType.damaged: - if (deliveryTeamSelected) { - senderId = deliveryTeamName; - senderType = "STAFF"; - } else { - senderId = secondaryParty?.id; - senderType = "WAREHOUSE"; - } - receiverId = primaryId; - receiverType = primaryType; - - break; - case StockRecordEntryType.dispatch: - case StockRecordEntryType.returned: - if (deliveryTeamSelected) { - receiverId = deliveryTeamName; - receiverType = "STAFF"; - } else { - receiverId = secondaryParty?.id; - receiverType = "WAREHOUSE"; - } - senderId = primaryId; - senderType = primaryType; - break; - } + final primaryType = + BlocProvider.of< + RecordStockBloc>( + context, + ).state.primaryType; - final stockModel = StockModel( - clientReferenceId: IdGen.i.identifier, - productVariantId: productVariant.id, - transactionReason: transactionReason, - transactionType: transactionType, - referenceId: stockState.projectId, - referenceIdType: 'PROJECT', - quantity: quantity.toString(), - waybillNumber: waybillNumber, - receiverId: receiverId, - receiverType: receiverType, - senderId: senderId, - senderType: senderType, - auditDetails: AuditDetails( - createdBy: InventorySingleton() - .loggedInUserUuid, - createdTime: context - .millisecondsSinceEpoch(), - ), - clientAuditDetails: - ClientAuditDetails( - createdBy: InventorySingleton() - .loggedInUserUuid, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: InventorySingleton() - .loggedInUserUuid, - lastModifiedTime: context - .millisecondsSinceEpoch(), - ), - additionalFields: [ - waybillQuantity, - vehicleNumber, - comments, - ].any((element) => - element != null) || - hasLocationData - ? StockAdditionalFields( - version: 1, - fields: [ - if (waybillQuantity != - null && - waybillQuantity - .trim() - .isNotEmpty) - AdditionalField( - 'waybill_quantity', - waybillQuantity, - ), - if (vehicleNumber != null && - vehicleNumber - .trim() - .isNotEmpty) - AdditionalField( - 'vehicle_number', - vehicleNumber, - ), - if (comments != null && - comments - .trim() - .isNotEmpty) - AdditionalField( - 'comments', - comments, - ), - if (deliveryTeamName != - null && - deliveryTeamName - .trim() - .isNotEmpty) - AdditionalField( - 'deliveryTeam', - deliveryTeamName, - ), - if (hasLocationData) ...[ - AdditionalField( - 'lat', - lat, + final primaryId = + BlocProvider.of< + RecordStockBloc>( + context, + ).state.primaryId; + + switch (entryType) { + case StockRecordEntryType + .receipt: + case StockRecordEntryType + .loss: + case StockRecordEntryType + .damaged: + if (deliveryTeamSelected) { + senderId = + deliveryTeamName; + senderType = "STAFF"; + } else { + senderId = + secondaryParty + ?.id; + senderType = + "WAREHOUSE"; + } + receiverId = primaryId; + receiverType = + primaryType; + + break; + case StockRecordEntryType + .dispatch: + case StockRecordEntryType + .returned: + if (deliveryTeamSelected) { + receiverId = + deliveryTeamName; + receiverType = + "STAFF"; + } else { + receiverId = + secondaryParty + ?.id; + receiverType = + "WAREHOUSE"; + } + senderId = primaryId; + senderType = + primaryType; + break; + } + + final stockModel = + StockModel( + clientReferenceId: + IdGen.i.identifier, + productVariantId: + productVariant.id, + transactionReason: + transactionReason, + transactionType: + transactionType, + referenceId: + stockState.projectId, + referenceIdType: + 'PROJECT', + quantity: + quantity.toString(), + waybillNumber: + waybillNumber, + receiverId: receiverId, + receiverType: + receiverType, + senderId: senderId, + senderType: senderType, + auditDetails: + AuditDetails( + createdBy: + InventorySingleton() + .loggedInUserUuid, + createdTime: context + .millisecondsSinceEpoch(), ), - AdditionalField( - 'lng', - lng, + clientAuditDetails: + ClientAuditDetails( + createdBy: + InventorySingleton() + .loggedInUserUuid, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: + InventorySingleton() + .loggedInUserUuid, + lastModifiedTime: context + .millisecondsSinceEpoch(), ), - ], - ], - ) - : null, - ); + additionalFields: [ + waybillQuantity, + vehicleNumber, + comments, + ].any((element) => + element != + null) || + hasLocationData + ? StockAdditionalFields( + version: 1, + fields: [ + if (waybillQuantity != + null && + waybillQuantity + .trim() + .isNotEmpty) + AdditionalField( + 'waybill_quantity', + waybillQuantity, + ), + if (vehicleNumber != + null && + vehicleNumber + .trim() + .isNotEmpty) + AdditionalField( + 'vehicle_number', + vehicleNumber, + ), + if (comments != + null && + comments + .trim() + .isNotEmpty) + AdditionalField( + 'comments', + comments, + ), + if (deliveryTeamName != + null && + deliveryTeamName + .trim() + .isNotEmpty) + AdditionalField( + 'deliveryTeam', + deliveryTeamName, + ), + if (hasLocationData) ...[ + AdditionalField( + 'lat', + lat, + ), + AdditionalField( + 'lng', + lng, + ), + ], + ], + ) + : null, + ); - bloc.add( - RecordStockSaveStockDetailsEvent( - stockModel: stockModel, - ), - ); + bloc.add( + RecordStockSaveStockDetailsEvent( + stockModel: stockModel, + ), + ); - final submit = - await DigitDialog.show( - context, - options: DigitDialogOptions( - key: const Key('submitDialog'), - titleText: localizations.translate( - i18.stockDetails.dialogTitle, - ), - contentText: - localizations.translate( - i18.stockDetails.dialogContent, - ), - primaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonSubmit, - ), - action: (context) { - Navigator.of( - context, - rootNavigator: true, - ).pop(true); - }, - ), - secondaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonCancel, - ), - action: (context) => Navigator.of( - context, - rootNavigator: true, - ).pop(false), - ), - ), - ); + final submit = + await DigitDialog.show< + bool>( + context, + options: + DigitDialogOptions( + key: const Key( + 'submitDialog'), + titleText: localizations + .translate( + i18.stockDetails + .dialogTitle, + ), + contentText: + localizations + .translate( + i18.stockDetails + .dialogContent, + ), + primaryAction: + DigitDialogActions( + label: localizations + .translate( + i18.common + .coreCommonSubmit, + ), + action: (context) { + Navigator.of( + context, + rootNavigator: + true, + ).pop(true); + }, + ), + secondaryAction: + DigitDialogActions( + label: localizations + .translate( + i18.common + .coreCommonCancel, + ), + action: (context) => + Navigator.of( + context, + rootNavigator: true, + ).pop(false), + ), + ), + ); - if (submit ?? false) { - bloc.add( - const RecordStockCreateStockEntryEvent(), - ); - } + if (submit ?? false) { + bloc.add( + const RecordStockCreateStockEntryEvent(), + ); + } + })); + }); } }, child: Center( diff --git a/packages/inventory_management/lib/utils/i18_key_constants.dart b/packages/inventory_management/lib/utils/i18_key_constants.dart index f3f237bcc..b6fdc6cd4 100644 --- a/packages/inventory_management/lib/utils/i18_key_constants.dart +++ b/packages/inventory_management/lib/utils/i18_key_constants.dart @@ -103,6 +103,10 @@ class Common { String get scanBales => 'CORE_COMMON_SCAN_BALES'; String get ageInMonths => 'AGE_IN_MONTHS_LABEL'; + + String get locationCapturing => 'CAPTURING_LOCATION'; + String get locationCaptured => 'LOCATION_CAPTURED'; + String get ctaProceed => 'PROCEED'; } class AcknowledgementSuccess { diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index d496c6efe..63e4f65ab 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -419,11 +419,10 @@ packages: digit_components: dependency: "direct main" description: - name: digit_components - sha256: "53ee8c0a7c992c0e8d1c9c867b6cf1d52e1728200f4b4436943a5d6c5e4984c3" - url: "https://pub.dev" - source: hosted - version: "1.0.0+2" + path: "../digit_components" + relative: true + source: path + version: "1.0.0+3" digit_data_model: dependency: "direct main" description: diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index 5898cc07f..ea58227b5 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -1,6 +1,6 @@ name: inventory_management description: This package offers inventory management features, allowing users to view stock reports and perform inventory resource reconciliation. -version: 1.0.2 +version: 1.0.2+1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/inventory_management repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index ae925fcfa..fc9b2461d 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -419,11 +419,10 @@ packages: digit_components: dependency: "direct main" description: - name: digit_components - sha256: "53ee8c0a7c992c0e8d1c9c867b6cf1d52e1728200f4b4436943a5d6c5e4984c3" - url: "https://pub.dev" - source: hosted - version: "1.0.0+2" + path: "../digit_components" + relative: true + source: path + version: "1.0.0+3" digit_data_model: dependency: "direct main" description: diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration_delivery/CHANGELOG.md index fa5188825..3a4dd237c 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration_delivery/CHANGELOG.md @@ -45,4 +45,8 @@ * Added try catch for local repository to handle db lock * Localisation support added for missing fields -* Bug fixes and enhancements \ No newline at end of file +* Bug fixes and enhancements + +## 1.0.2+1 + +* Get Precise location on Submitting latitude longitude details diff --git a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart index edaa7c5f9..4d5ca7fa7 100644 --- a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart +++ b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart @@ -394,13 +394,15 @@ class BeneficiaryRegistrationBloc emit(value.copyWith(loading: true)); try { await householdRepository.update( - value.householdModel.copyWith( + event.household.copyWith( clientAuditDetails: ClientAuditDetails( - createdBy: value.householdModel.clientAuditDetails!.createdBy, + createdBy: value.householdModel.clientAuditDetails?.createdBy ?? + value.householdModel.auditDetails!.createdBy.toString(), createdTime: - value.householdModel.clientAuditDetails!.createdTime, + value.householdModel.clientAuditDetails?.createdTime ?? + value.householdModel.auditDetails!.createdTime, lastModifiedBy: - value.householdModel.clientAuditDetails!.lastModifiedBy, + RegistrationDeliverySingleton().loggedInUserUuid, lastModifiedTime: DateTime.now().millisecondsSinceEpoch, ), memberCount: event.household.memberCount, @@ -421,6 +423,37 @@ class BeneficiaryRegistrationBloc await projectBeneficiaryRepository .update(projectBeneficiary.first.copyWith(tag: event.tag)); } + } else { + await projectBeneficiaryRepository.create(ProjectBeneficiaryModel( + rowVersion: 1, + clientReferenceId: IdGen.i.identifier, + dateOfRegistration: DateTime.now().millisecondsSinceEpoch, + projectId: RegistrationDeliverySingleton().projectId, + tenantId: RegistrationDeliverySingleton().tenantId, + beneficiaryClientReferenceId: + beneficiaryType == BeneficiaryType.individual + ? value.individualModel.first.clientReferenceId + : value.householdModel.clientReferenceId, + clientAuditDetails: ClientAuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid + .toString(), + createdTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: RegistrationDeliverySingleton() + .loggedInUserUuid + .toString(), + ), + auditDetails: AuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid + .toString(), + createdTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: RegistrationDeliverySingleton() + .loggedInUserUuid + .toString(), + ))); } for (var element in value.individualModel) { diff --git a/packages/registration_delivery/lib/blocs/household_overview/household_overview.dart b/packages/registration_delivery/lib/blocs/household_overview/household_overview.dart index 4130fcc74..4a6c6354f 100644 --- a/packages/registration_delivery/lib/blocs/household_overview/household_overview.dart +++ b/packages/registration_delivery/lib/blocs/household_overview/household_overview.dart @@ -69,9 +69,10 @@ class HouseholdOverviewBloc // Retrieve household members based on certain criteria. final members = await householdMemberRepository.search( HouseholdMemberSearchModel( - householdClientReferenceId: [ - state.householdMemberWrapper.household.clientReferenceId - ], + householdClientReferenceId: + state.householdMemberWrapper.household != null + ? [state.householdMemberWrapper.household!.clientReferenceId] + : [], ), ); @@ -81,7 +82,7 @@ class HouseholdOverviewBloc ); final householdId = - state.householdMemberWrapper.household.clientReferenceId; + state.householdMemberWrapper.household?.clientReferenceId; // Check if the current household has any members. if (!groupedHouseholds.containsKey(householdId)) { @@ -102,7 +103,8 @@ class HouseholdOverviewBloc // Search for households with the specified client reference ID. final households = await householdRepository.search( - HouseholdSearchModel(clientReferenceId: [householdId]), + HouseholdSearchModel( + clientReferenceId: householdId != null ? [householdId] : []), ); // Check if any households were found. diff --git a/packages/registration_delivery/lib/blocs/search_households/proximity_search.dart b/packages/registration_delivery/lib/blocs/search_households/proximity_search.dart index 771582ea8..d45b8dd1f 100644 --- a/packages/registration_delivery/lib/blocs/search_households/proximity_search.dart +++ b/packages/registration_delivery/lib/blocs/search_households/proximity_search.dart @@ -153,9 +153,7 @@ class ProximitySearchBloc extends SearchHouseholdsBloc { projectBeneficiaries: filteredBeneficiaries, tasks: filteredTasks.isEmpty ? null : filteredTasks, sideEffects: sideEffectsList.isEmpty ? null : sideEffectsList, - //TODO Need to added the side effects referrals: referralsList.isEmpty ? null : referralsList, - //TODO Need to addevid the referrals ), ); } diff --git a/packages/registration_delivery/lib/blocs/search_households/search_bloc_common_wrapper.dart b/packages/registration_delivery/lib/blocs/search_households/search_bloc_common_wrapper.dart index 2c814d6e1..2ad3af24e 100644 --- a/packages/registration_delivery/lib/blocs/search_households/search_bloc_common_wrapper.dart +++ b/packages/registration_delivery/lib/blocs/search_households/search_bloc_common_wrapper.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:async/async.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:registration_delivery/blocs/search_households/search_by_status.dart'; import 'tag_by_search.dart'; import 'proximity_search.dart'; import 'search_households.dart'; @@ -12,12 +13,14 @@ class SearchBlocWrapper implements StateStreamableSource { final SearchByHeadBloc searchByHeadBloc; final ProximitySearchBloc proximitySearchBloc; final TagSearchBloc tagSearchBloc; + final StatusSearchBloc statusSearchBloc; SearchBlocWrapper({ required this.searchHouseholdsBloc, required this.searchByHeadBloc, required this.proximitySearchBloc, required this.tagSearchBloc, + required this.statusSearchBloc, }); Stream get stateChanges => @@ -26,6 +29,7 @@ class SearchBlocWrapper implements StateStreamableSource { searchByHeadBloc.stream, proximitySearchBloc.stream, tagSearchBloc.stream, + statusSearchBloc.stream, ]); void dispatch(SearchHouseholdsEvent event) { @@ -35,6 +39,8 @@ class SearchBlocWrapper implements StateStreamableSource { searchByHeadBloc.add(event); } else if (event is SearchHouseholdsByTagEvent) { tagSearchBloc.add(event); + } else if (event is SearchHouseholdsByStatusEvent) { + statusSearchBloc.add(event); } else { searchHouseholdsBloc.add(event); } @@ -44,6 +50,7 @@ class SearchBlocWrapper implements StateStreamableSource { proximitySearchBloc.add(const SearchHouseholdsEvent.clear()); searchByHeadBloc.add(const SearchHouseholdsEvent.clear()); tagSearchBloc.add(const SearchHouseholdsEvent.clear()); + statusSearchBloc.add(const SearchHouseholdsEvent.clear()); searchHouseholdsBloc.add(const SearchHouseholdsEvent.clear()); } @@ -59,6 +66,7 @@ class SearchBlocWrapper implements StateStreamableSource { searchByHeadBloc.close(); proximitySearchBloc.close(); tagSearchBloc.close(); + statusSearchBloc.close(); } @override @@ -66,5 +74,6 @@ class SearchBlocWrapper implements StateStreamableSource { searchHouseholdsBloc.isClosed && searchByHeadBloc.isClosed && proximitySearchBloc.isClosed && - tagSearchBloc.isClosed; + tagSearchBloc.isClosed && + statusSearchBloc.isClosed; } diff --git a/packages/registration_delivery/lib/blocs/search_households/search_by_head.dart b/packages/registration_delivery/lib/blocs/search_households/search_by_head.dart index e055edfdb..a3ffb77f9 100644 --- a/packages/registration_delivery/lib/blocs/search_households/search_by_head.dart +++ b/packages/registration_delivery/lib/blocs/search_households/search_by_head.dart @@ -56,7 +56,7 @@ class SearchByHeadBloc extends SearchHouseholdsBloc { // Perform a series of asynchronous data retrieval operations based on the search criteria. - // Fetch household results based on proximity and other criteria. + // Fetch hosehold results based on proximity and other criteria. List individuals = []; List proximityBasedIndividualResults = []; diff --git a/packages/registration_delivery/lib/blocs/search_households/search_by_status.dart b/packages/registration_delivery/lib/blocs/search_households/search_by_status.dart new file mode 100644 index 000000000..aa9296d2d --- /dev/null +++ b/packages/registration_delivery/lib/blocs/search_households/search_by_status.dart @@ -0,0 +1,328 @@ +import 'dart:async'; + +import 'package:bloc/bloc.dart'; +import 'package:collection/collection.dart'; +import 'package:digit_data_model/models/entities/address.dart'; +import 'package:digit_data_model/models/entities/beneficiary_type.dart'; +import 'package:digit_data_model/models/entities/individual.dart'; +import 'package:flutter/foundation.dart'; +import 'package:registration_delivery/models/entities/status.dart'; +import 'package:registration_delivery/registration_delivery.dart'; + +class StatusSearchBloc extends SearchHouseholdsBloc { + StatusSearchBloc( + {required super.userUid, + required super.projectId, + required super.individual, + required super.householdMember, + required super.household, + required super.projectBeneficiary, + required super.taskDataRepository, + required super.beneficiaryType, + required super.sideEffectDataRepository, + required super.referralDataRepository, + required super.addressRepository}) { + // Register the event handler for searching households by status + on(_searchByStatus); + } + + FutureOr _searchByStatus(SearchHouseholdsByStatusEvent event, + Emitter emit) { + // Initialize lists to store fetched data + List householdList = []; + List individualsList = []; + List householdMembersList = []; + List projectBeneficiariesList = []; + List taskList = []; + List sideEffectsList = []; + List referralsList = []; + // Initialize a list to store household member wrappers + final containers = [...state.householdMembers]; + + // Emit loading state + emit(state.copyWith(loading: true)); + try { + switch (event.status.first) { + case Status.registered: + fetchRegisteredResults( + event, + containers, + householdList, + individualsList, + householdMembersList, + projectBeneficiariesList, + taskList, + sideEffectsList, + referralsList); + case Status.notRegistered: + fetchNotRegisteredResults( + event, + containers, + householdList, + individualsList, + householdMembersList, + projectBeneficiariesList, + taskList, + sideEffectsList, + referralsList); + default: + if (kDebugMode) { + print('status not found'); + } + break; + } + + // Emit the updated state with household members and loading status + emit(state.copyWith( + householdMembers: containers, + loading: false, + offset: event.offset + event.limit, + limit: event.limit, + )); + } catch (e) { + // Handle errors and emit the error state + if (kDebugMode) { + print('error searching by status: $e'); + } + emit(state.copyWith( + loading: false, + householdMembers: [], + )); + } + } + + void fetchRegisteredResults( + SearchHouseholdsByStatusEvent event, + List containers, + List householdList, + List individualsList, + List householdMembersList, + List projectBeneficiariesList, + List taskList, + List sideEffectsList, + List referralsList) async { + // Fetch project beneficiaries based on project ID + projectBeneficiariesList = await projectBeneficiary.search( + ProjectBeneficiarySearchModel( + projectId: [event.projectId], + ), + ); + + // Extract individual client reference IDs from beneficiaries + final List individualClientReferenceIds = projectBeneficiariesList + .map((e) => e.beneficiaryClientReferenceId.toString()) + .toList(); + + // Fetch individuals based on client reference IDs + individualsList = await individual.search( + IndividualSearchModel(clientReferenceId: individualClientReferenceIds), + ); + + // Fetch household members in bulk based on individual client reference IDs + householdMembersList = await fetchHouseholdMembersBulk( + individualClientReferenceIds, + null, + ); + + // Fetch households based on household client reference IDs from household members + householdList = await household.search( + HouseholdSearchModel( + clientReferenceId: householdMembersList + .map((e) => e.householdClientReferenceId.toString()) + .toList(), + ), + ); + + // Group household members by household client reference ID + final groupedHouseholdsMembers = householdMembersList + .where((hm) => projectBeneficiariesList + .map((p) => p.beneficiaryClientReferenceId) + .toList() + .contains(beneficiaryType == BeneficiaryType.individual + ? hm.individualClientReferenceId + : hm.householdClientReferenceId)) + .groupListsBy((element) => element.householdClientReferenceId); + + // Iterate over grouped household members + for (final entry in groupedHouseholdsMembers.entries) { + HouseholdModel filteredHousehold; + List filteredIndividuals; + List filteredBeneficiaries; + List filteredTasks; + final householdId = entry.key; + if (householdId == null) continue; + + // Filter household based on household ID + filteredHousehold = + householdList.firstWhere((e) => e.clientReferenceId == householdId); + + // Extract individual client reference IDs from household members + final List membersIds = + entry.value.map((e) => e.individualClientReferenceId).toList(); + + // Filter individuals based on individual client reference IDs + filteredIndividuals = individualsList + .where((element) => membersIds.contains(element.clientReferenceId)) + .toList(); + + // Filter project beneficiaries based on individual or household client reference IDs + filteredBeneficiaries = projectBeneficiariesList + .where((element) => beneficiaryType == BeneficiaryType.individual + ? membersIds.contains(element.beneficiaryClientReferenceId) + : householdId == element.beneficiaryClientReferenceId) + .toList(); + + // Filter tasks based on project beneficiary client reference IDs + filteredTasks = taskList + .where((element) => filteredBeneficiaries + .where((e) => + e.clientReferenceId == + element.projectBeneficiaryClientReferenceId) + .isNotEmpty) + .toList(); + + // Extract beneficiary client reference IDs from filtered beneficiaries + final beneficiaryClientReferenceIds = filteredBeneficiaries + .map((e) => e.beneficiaryClientReferenceId) + .toList(); + + // Filter individuals based on beneficiary client reference IDs + final List beneficiaryIndividuals = filteredIndividuals + .where((element) => + beneficiaryClientReferenceIds.contains(element.clientReferenceId)) + .toList(); + + // Find the head of the household + final head = (beneficiaryType == BeneficiaryType.individual + ? beneficiaryIndividuals + : filteredIndividuals) + .firstWhereOrNull( + (element) => + element.clientReferenceId == + entry.value + .firstWhereOrNull( + (element) => element.isHeadOfHousehold, + ) + ?.individualClientReferenceId, + ); + + // Skip if no head of household or no filtered beneficiaries + if (head == null || filteredBeneficiaries.isEmpty) continue; + + // Add household member wrapper to containers + if (filteredBeneficiaries.isNotEmpty) { + containers.add( + HouseholdMemberWrapper( + household: filteredHousehold, + headOfHousehold: head, + members: beneficiaryType == BeneficiaryType.individual + ? beneficiaryIndividuals + : filteredIndividuals, + projectBeneficiaries: filteredBeneficiaries, + tasks: filteredTasks.isEmpty ? null : filteredTasks, + sideEffects: sideEffectsList.isEmpty ? null : sideEffectsList, + referrals: referralsList.isEmpty ? null : referralsList, + ), + ); + } + } + } + + void fetchNotRegisteredResults( + SearchHouseholdsByStatusEvent event, + List containers, + List householdList, + List individualsList, + List householdMembersList, + List projectBeneficiariesList, + List taskList, + List sideEffectsList, + List referralsList) async { + // Fetch individual results based on proximity and other criteria. + householdList = + await addressRepository.searchHouseHoldbyAddress(AddressSearchModel( + boundaryCode: RegistrationDeliverySingleton().boundary?.code.toString(), + offset: event.offset, + limit: event.limit, + )); + + // Extract individual IDs from proximity-based individual results. + final householdClientReferenceIds = + householdList.map((e) => e.clientReferenceId).toList(); + householdMembersList = await fetchHouseholdMembersBulk( + null, + householdClientReferenceIds, + ); + + final List individualClientReferenceIds = householdMembersList + .map((e) => e.individualClientReferenceId.toString()) + .toList(); + individualsList = await individual.search( + IndividualSearchModel(clientReferenceId: individualClientReferenceIds), + ); + + projectBeneficiariesList = await fetchProjectBeneficiary( + beneficiaryType != BeneficiaryType.individual + ? householdClientReferenceIds + : individualClientReferenceIds, + ); + + // Group household members which do not have project beneficiaries + final groupedHouseholdsMembersWithoutBeneficiaries = householdMembersList + .where((hm) => !projectBeneficiariesList + .map((p) => p.beneficiaryClientReferenceId) + .toList() + .contains(beneficiaryType == BeneficiaryType.individual + ? hm.individualClientReferenceId + : hm.householdClientReferenceId)) + .groupListsBy((element) => element.householdClientReferenceId); + +// Iterate over grouped household members without beneficiaries + for (final entry in groupedHouseholdsMembersWithoutBeneficiaries.entries) { + HouseholdModel filteredHousehold; + List filteredIndividuals; + final householdId = entry.key; + if (householdId == null) continue; + + // Filter household based on household ID + filteredHousehold = + householdList.firstWhere((e) => e.clientReferenceId == householdId); + + // Extract individual client reference IDs from household members + final List membersIds = + entry.value.map((e) => e.individualClientReferenceId).toList(); + + // Filter individuals based on individual client reference IDs + filteredIndividuals = individualsList + .where((element) => membersIds.contains(element.clientReferenceId)) + .toList(); + + // Find the head of the household + final head = filteredIndividuals.firstWhereOrNull( + (element) => + element.clientReferenceId == + entry.value + .firstWhereOrNull( + (element) => element.isHeadOfHousehold, + ) + ?.individualClientReferenceId, + ); + + // Skip if no head of household + if (head == null) continue; + + // Add household member wrapper to containers + containers.add( + HouseholdMemberWrapper( + household: filteredHousehold, + headOfHousehold: head, + members: filteredIndividuals, + projectBeneficiaries: [], + tasks: null, + sideEffects: null, + referrals: null, + ), + ); + } + } +} diff --git a/packages/registration_delivery/lib/blocs/search_households/search_households.dart b/packages/registration_delivery/lib/blocs/search_households/search_households.dart index 983e552b4..879afee2a 100644 --- a/packages/registration_delivery/lib/blocs/search_households/search_households.dart +++ b/packages/registration_delivery/lib/blocs/search_households/search_households.dart @@ -14,6 +14,7 @@ import '../../models/entities/household_member.dart'; import '../../models/entities/project_beneficiary.dart'; import '../../models/entities/referral.dart'; import '../../models/entities/side_effect.dart'; +import '../../models/entities/status.dart'; import '../../models/entities/task.dart'; import '../../utils/typedefs.dart'; @@ -230,6 +231,13 @@ class SearchHouseholdsEvent with _$SearchHouseholdsEvent { required HouseholdModel householdModel, }) = SearchHouseholdsByHouseholdsEvent; + const factory SearchHouseholdsEvent.searchByStatus({ + required String projectId, + required final int offset, + required final int limit, + required List status, + }) = SearchHouseholdsByStatusEvent; + const factory SearchHouseholdsEvent.searchByHouseholdHead({ required String searchText, required String projectId, @@ -284,10 +292,10 @@ class SearchHouseholdsState with _$SearchHouseholdsState { @freezed class HouseholdMemberWrapper with _$HouseholdMemberWrapper { const factory HouseholdMemberWrapper({ - required HouseholdModel household, - required IndividualModel headOfHousehold, - required List members, - required List projectBeneficiaries, + HouseholdModel? household, + IndividualModel? headOfHousehold, + List? members, + List? projectBeneficiaries, double? distance, List? tasks, List? sideEffects, diff --git a/packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart b/packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart index 141b41c95..f6655fbcc 100644 --- a/packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart +++ b/packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart @@ -27,6 +27,9 @@ mixin _$SearchHouseholdsEvent { bool isProximityEnabled, HouseholdModel householdModel) searchByHousehold, + required TResult Function( + String projectId, int offset, int limit, List status) + searchByStatus, required TResult Function( String searchText, String projectId, @@ -56,6 +59,9 @@ mixin _$SearchHouseholdsEvent { bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, + TResult? Function( + String projectId, int offset, int limit, List status)? + searchByStatus, TResult? Function( String searchText, String projectId, @@ -85,6 +91,9 @@ mixin _$SearchHouseholdsEvent { bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, + TResult Function( + String projectId, int offset, int limit, List status)? + searchByStatus, TResult Function( String searchText, String projectId, @@ -110,6 +119,8 @@ mixin _$SearchHouseholdsEvent { initialize, required TResult Function(SearchHouseholdsByHouseholdsEvent value) searchByHousehold, + required TResult Function(SearchHouseholdsByStatusEvent value) + searchByStatus, required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) searchByHouseholdHead, required TResult Function(SearchHouseholdsByProximityEvent value) @@ -123,6 +134,7 @@ mixin _$SearchHouseholdsEvent { TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, TResult? Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, + TResult? Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult? Function(SearchHouseholdsByProximityEvent value)? @@ -136,6 +148,7 @@ mixin _$SearchHouseholdsEvent { TResult Function(SearchHouseholdsInitializedEvent value)? initialize, TResult Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, + TResult Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, @@ -217,6 +230,9 @@ class _$SearchHouseholdsInitializedEventImpl bool isProximityEnabled, HouseholdModel householdModel) searchByHousehold, + required TResult Function( + String projectId, int offset, int limit, List status) + searchByStatus, required TResult Function( String searchText, String projectId, @@ -249,6 +265,9 @@ class _$SearchHouseholdsInitializedEventImpl bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, + TResult? Function( + String projectId, int offset, int limit, List status)? + searchByStatus, TResult? Function( String searchText, String projectId, @@ -281,6 +300,9 @@ class _$SearchHouseholdsInitializedEventImpl bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, + TResult Function( + String projectId, int offset, int limit, List status)? + searchByStatus, TResult Function( String searchText, String projectId, @@ -312,6 +334,8 @@ class _$SearchHouseholdsInitializedEventImpl initialize, required TResult Function(SearchHouseholdsByHouseholdsEvent value) searchByHousehold, + required TResult Function(SearchHouseholdsByStatusEvent value) + searchByStatus, required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) searchByHouseholdHead, required TResult Function(SearchHouseholdsByProximityEvent value) @@ -328,6 +352,7 @@ class _$SearchHouseholdsInitializedEventImpl TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, TResult? Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, + TResult? Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult? Function(SearchHouseholdsByProximityEvent value)? @@ -344,6 +369,7 @@ class _$SearchHouseholdsInitializedEventImpl TResult Function(SearchHouseholdsInitializedEvent value)? initialize, TResult Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, + TResult Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, @@ -502,6 +528,9 @@ class _$SearchHouseholdsByHouseholdsEventImpl bool isProximityEnabled, HouseholdModel householdModel) searchByHousehold, + required TResult Function( + String projectId, int offset, int limit, List status) + searchByStatus, required TResult Function( String searchText, String projectId, @@ -535,6 +564,9 @@ class _$SearchHouseholdsByHouseholdsEventImpl bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, + TResult? Function( + String projectId, int offset, int limit, List status)? + searchByStatus, TResult? Function( String searchText, String projectId, @@ -568,6 +600,9 @@ class _$SearchHouseholdsByHouseholdsEventImpl bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, + TResult Function( + String projectId, int offset, int limit, List status)? + searchByStatus, TResult Function( String searchText, String projectId, @@ -600,6 +635,8 @@ class _$SearchHouseholdsByHouseholdsEventImpl initialize, required TResult Function(SearchHouseholdsByHouseholdsEvent value) searchByHousehold, + required TResult Function(SearchHouseholdsByStatusEvent value) + searchByStatus, required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) searchByHouseholdHead, required TResult Function(SearchHouseholdsByProximityEvent value) @@ -616,6 +653,7 @@ class _$SearchHouseholdsByHouseholdsEventImpl TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, TResult? Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, + TResult? Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult? Function(SearchHouseholdsByProximityEvent value)? @@ -632,6 +670,7 @@ class _$SearchHouseholdsByHouseholdsEventImpl TResult Function(SearchHouseholdsInitializedEvent value)? initialize, TResult Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, + TResult Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, @@ -669,6 +708,293 @@ abstract class SearchHouseholdsByHouseholdsEvent get copyWith => throw _privateConstructorUsedError; } +/// @nodoc +abstract class _$$SearchHouseholdsByStatusEventImplCopyWith<$Res> { + factory _$$SearchHouseholdsByStatusEventImplCopyWith( + _$SearchHouseholdsByStatusEventImpl value, + $Res Function(_$SearchHouseholdsByStatusEventImpl) then) = + __$$SearchHouseholdsByStatusEventImplCopyWithImpl<$Res>; + @useResult + $Res call({String projectId, int offset, int limit, List status}); +} + +/// @nodoc +class __$$SearchHouseholdsByStatusEventImplCopyWithImpl<$Res> + extends _$SearchHouseholdsEventCopyWithImpl<$Res, + _$SearchHouseholdsByStatusEventImpl> + implements _$$SearchHouseholdsByStatusEventImplCopyWith<$Res> { + __$$SearchHouseholdsByStatusEventImplCopyWithImpl( + _$SearchHouseholdsByStatusEventImpl _value, + $Res Function(_$SearchHouseholdsByStatusEventImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? projectId = null, + Object? offset = null, + Object? limit = null, + Object? status = null, + }) { + return _then(_$SearchHouseholdsByStatusEventImpl( + projectId: null == projectId + ? _value.projectId + : projectId // ignore: cast_nullable_to_non_nullable + as String, + offset: null == offset + ? _value.offset + : offset // ignore: cast_nullable_to_non_nullable + as int, + limit: null == limit + ? _value.limit + : limit // ignore: cast_nullable_to_non_nullable + as int, + status: null == status + ? _value._status + : status // ignore: cast_nullable_to_non_nullable + as List, + )); + } +} + +/// @nodoc + +class _$SearchHouseholdsByStatusEventImpl + implements SearchHouseholdsByStatusEvent { + const _$SearchHouseholdsByStatusEventImpl( + {required this.projectId, + required this.offset, + required this.limit, + required final List status}) + : _status = status; + + @override + final String projectId; + @override + final int offset; + @override + final int limit; + final List _status; + @override + List get status { + if (_status is EqualUnmodifiableListView) return _status; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_status); + } + + @override + String toString() { + return 'SearchHouseholdsEvent.searchByStatus(projectId: $projectId, offset: $offset, limit: $limit, status: $status)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$SearchHouseholdsByStatusEventImpl && + (identical(other.projectId, projectId) || + other.projectId == projectId) && + (identical(other.offset, offset) || other.offset == offset) && + (identical(other.limit, limit) || other.limit == limit) && + const DeepCollectionEquality().equals(other._status, _status)); + } + + @override + int get hashCode => Object.hash(runtimeType, projectId, offset, limit, + const DeepCollectionEquality().hash(_status)); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$SearchHouseholdsByStatusEventImplCopyWith< + _$SearchHouseholdsByStatusEventImpl> + get copyWith => __$$SearchHouseholdsByStatusEventImplCopyWithImpl< + _$SearchHouseholdsByStatusEventImpl>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() initialize, + required TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel) + searchByHousehold, + required TResult Function( + String projectId, int offset, int limit, List status) + searchByStatus, + required TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit) + searchByHouseholdHead, + required TResult Function(double latitude, double longititude, + String projectId, double maxRadius, int offset, int limit) + searchByProximity, + required TResult Function(String tag, String projectId) searchByTag, + required TResult Function() clear, + }) { + return searchByStatus(projectId, offset, limit, status); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? initialize, + TResult? Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult? Function( + String projectId, int offset, int limit, List status)? + searchByStatus, + TResult? Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult? Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult? Function(String tag, String projectId)? searchByTag, + TResult? Function()? clear, + }) { + return searchByStatus?.call(projectId, offset, limit, status); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? initialize, + TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult Function( + String projectId, int offset, int limit, List status)? + searchByStatus, + TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult Function(String tag, String projectId)? searchByTag, + TResult Function()? clear, + required TResult orElse(), + }) { + if (searchByStatus != null) { + return searchByStatus(projectId, offset, limit, status); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(SearchHouseholdsInitializedEvent value) + initialize, + required TResult Function(SearchHouseholdsByHouseholdsEvent value) + searchByHousehold, + required TResult Function(SearchHouseholdsByStatusEvent value) + searchByStatus, + required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) + searchByHouseholdHead, + required TResult Function(SearchHouseholdsByProximityEvent value) + searchByProximity, + required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, + required TResult Function(SearchHouseholdsClearEvent value) clear, + }) { + return searchByStatus(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult? Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult? Function(SearchHouseholdsByStatusEvent value)? searchByStatus, + TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult? Function(SearchHouseholdsByProximityEvent value)? + searchByProximity, + TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult? Function(SearchHouseholdsClearEvent value)? clear, + }) { + return searchByStatus?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult Function(SearchHouseholdsByStatusEvent value)? searchByStatus, + TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult Function(SearchHouseholdsClearEvent value)? clear, + required TResult orElse(), + }) { + if (searchByStatus != null) { + return searchByStatus(this); + } + return orElse(); + } +} + +abstract class SearchHouseholdsByStatusEvent implements SearchHouseholdsEvent { + const factory SearchHouseholdsByStatusEvent( + {required final String projectId, + required final int offset, + required final int limit, + required final List status}) = + _$SearchHouseholdsByStatusEventImpl; + + String get projectId; + int get offset; + int get limit; + List get status; + @JsonKey(ignore: true) + _$$SearchHouseholdsByStatusEventImplCopyWith< + _$SearchHouseholdsByStatusEventImpl> + get copyWith => throw _privateConstructorUsedError; +} + /// @nodoc abstract class _$$SearchHouseholdsSearchByHouseholdHeadEventImplCopyWith<$Res> { factory _$$SearchHouseholdsSearchByHouseholdHeadEventImplCopyWith( @@ -840,6 +1166,9 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl bool isProximityEnabled, HouseholdModel householdModel) searchByHousehold, + required TResult Function( + String projectId, int offset, int limit, List status) + searchByStatus, required TResult Function( String searchText, String projectId, @@ -873,6 +1202,9 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, + TResult? Function( + String projectId, int offset, int limit, List status)? + searchByStatus, TResult? Function( String searchText, String projectId, @@ -906,6 +1238,9 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, + TResult Function( + String projectId, int offset, int limit, List status)? + searchByStatus, TResult Function( String searchText, String projectId, @@ -938,6 +1273,8 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl initialize, required TResult Function(SearchHouseholdsByHouseholdsEvent value) searchByHousehold, + required TResult Function(SearchHouseholdsByStatusEvent value) + searchByStatus, required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) searchByHouseholdHead, required TResult Function(SearchHouseholdsByProximityEvent value) @@ -954,6 +1291,7 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, TResult? Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, + TResult? Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult? Function(SearchHouseholdsByProximityEvent value)? @@ -970,6 +1308,7 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl TResult Function(SearchHouseholdsInitializedEvent value)? initialize, TResult Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, + TResult Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, @@ -1149,6 +1488,9 @@ class _$SearchHouseholdsByProximityEventImpl bool isProximityEnabled, HouseholdModel householdModel) searchByHousehold, + required TResult Function( + String projectId, int offset, int limit, List status) + searchByStatus, required TResult Function( String searchText, String projectId, @@ -1182,6 +1524,9 @@ class _$SearchHouseholdsByProximityEventImpl bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, + TResult? Function( + String projectId, int offset, int limit, List status)? + searchByStatus, TResult? Function( String searchText, String projectId, @@ -1215,6 +1560,9 @@ class _$SearchHouseholdsByProximityEventImpl bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, + TResult Function( + String projectId, int offset, int limit, List status)? + searchByStatus, TResult Function( String searchText, String projectId, @@ -1247,6 +1595,8 @@ class _$SearchHouseholdsByProximityEventImpl initialize, required TResult Function(SearchHouseholdsByHouseholdsEvent value) searchByHousehold, + required TResult Function(SearchHouseholdsByStatusEvent value) + searchByStatus, required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) searchByHouseholdHead, required TResult Function(SearchHouseholdsByProximityEvent value) @@ -1263,6 +1613,7 @@ class _$SearchHouseholdsByProximityEventImpl TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, TResult? Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, + TResult? Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult? Function(SearchHouseholdsByProximityEvent value)? @@ -1279,6 +1630,7 @@ class _$SearchHouseholdsByProximityEventImpl TResult Function(SearchHouseholdsInitializedEvent value)? initialize, TResult Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, + TResult Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, @@ -1402,6 +1754,9 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { bool isProximityEnabled, HouseholdModel householdModel) searchByHousehold, + required TResult Function( + String projectId, int offset, int limit, List status) + searchByStatus, required TResult Function( String searchText, String projectId, @@ -1434,6 +1789,9 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, + TResult? Function( + String projectId, int offset, int limit, List status)? + searchByStatus, TResult? Function( String searchText, String projectId, @@ -1466,6 +1824,9 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, + TResult Function( + String projectId, int offset, int limit, List status)? + searchByStatus, TResult Function( String searchText, String projectId, @@ -1497,6 +1858,8 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { initialize, required TResult Function(SearchHouseholdsByHouseholdsEvent value) searchByHousehold, + required TResult Function(SearchHouseholdsByStatusEvent value) + searchByStatus, required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) searchByHouseholdHead, required TResult Function(SearchHouseholdsByProximityEvent value) @@ -1513,6 +1876,7 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, TResult? Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, + TResult? Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult? Function(SearchHouseholdsByProximityEvent value)? @@ -1529,6 +1893,7 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { TResult Function(SearchHouseholdsInitializedEvent value)? initialize, TResult Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, + TResult Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, @@ -1606,6 +1971,9 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { bool isProximityEnabled, HouseholdModel householdModel) searchByHousehold, + required TResult Function( + String projectId, int offset, int limit, List status) + searchByStatus, required TResult Function( String searchText, String projectId, @@ -1638,6 +2006,9 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, + TResult? Function( + String projectId, int offset, int limit, List status)? + searchByStatus, TResult? Function( String searchText, String projectId, @@ -1670,6 +2041,9 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, + TResult Function( + String projectId, int offset, int limit, List status)? + searchByStatus, TResult Function( String searchText, String projectId, @@ -1701,6 +2075,8 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { initialize, required TResult Function(SearchHouseholdsByHouseholdsEvent value) searchByHousehold, + required TResult Function(SearchHouseholdsByStatusEvent value) + searchByStatus, required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) searchByHouseholdHead, required TResult Function(SearchHouseholdsByProximityEvent value) @@ -1717,6 +2093,7 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, TResult? Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, + TResult? Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult? Function(SearchHouseholdsByProximityEvent value)? @@ -1733,6 +2110,7 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { TResult Function(SearchHouseholdsInitializedEvent value)? initialize, TResult Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, + TResult Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, @@ -1996,10 +2374,10 @@ abstract class _SearchHouseholdsState extends SearchHouseholdsState { /// @nodoc mixin _$HouseholdMemberWrapper { - HouseholdModel get household => throw _privateConstructorUsedError; - IndividualModel get headOfHousehold => throw _privateConstructorUsedError; - List get members => throw _privateConstructorUsedError; - List get projectBeneficiaries => + HouseholdModel? get household => throw _privateConstructorUsedError; + IndividualModel? get headOfHousehold => throw _privateConstructorUsedError; + List? get members => throw _privateConstructorUsedError; + List? get projectBeneficiaries => throw _privateConstructorUsedError; double? get distance => throw _privateConstructorUsedError; List? get tasks => throw _privateConstructorUsedError; @@ -2018,10 +2396,10 @@ abstract class $HouseholdMemberWrapperCopyWith<$Res> { _$HouseholdMemberWrapperCopyWithImpl<$Res, HouseholdMemberWrapper>; @useResult $Res call( - {HouseholdModel household, - IndividualModel headOfHousehold, - List members, - List projectBeneficiaries, + {HouseholdModel? household, + IndividualModel? headOfHousehold, + List? members, + List? projectBeneficiaries, double? distance, List? tasks, List? sideEffects, @@ -2042,32 +2420,32 @@ class _$HouseholdMemberWrapperCopyWithImpl<$Res, @pragma('vm:prefer-inline') @override $Res call({ - Object? household = null, - Object? headOfHousehold = null, - Object? members = null, - Object? projectBeneficiaries = null, + Object? household = freezed, + Object? headOfHousehold = freezed, + Object? members = freezed, + Object? projectBeneficiaries = freezed, Object? distance = freezed, Object? tasks = freezed, Object? sideEffects = freezed, Object? referrals = freezed, }) { return _then(_value.copyWith( - household: null == household + household: freezed == household ? _value.household : household // ignore: cast_nullable_to_non_nullable - as HouseholdModel, - headOfHousehold: null == headOfHousehold + as HouseholdModel?, + headOfHousehold: freezed == headOfHousehold ? _value.headOfHousehold : headOfHousehold // ignore: cast_nullable_to_non_nullable - as IndividualModel, - members: null == members + as IndividualModel?, + members: freezed == members ? _value.members : members // ignore: cast_nullable_to_non_nullable - as List, - projectBeneficiaries: null == projectBeneficiaries + as List?, + projectBeneficiaries: freezed == projectBeneficiaries ? _value.projectBeneficiaries : projectBeneficiaries // ignore: cast_nullable_to_non_nullable - as List, + as List?, distance: freezed == distance ? _value.distance : distance // ignore: cast_nullable_to_non_nullable @@ -2098,10 +2476,10 @@ abstract class _$$HouseholdMemberWrapperImplCopyWith<$Res> @override @useResult $Res call( - {HouseholdModel household, - IndividualModel headOfHousehold, - List members, - List projectBeneficiaries, + {HouseholdModel? household, + IndividualModel? headOfHousehold, + List? members, + List? projectBeneficiaries, double? distance, List? tasks, List? sideEffects, @@ -2121,32 +2499,32 @@ class __$$HouseholdMemberWrapperImplCopyWithImpl<$Res> @pragma('vm:prefer-inline') @override $Res call({ - Object? household = null, - Object? headOfHousehold = null, - Object? members = null, - Object? projectBeneficiaries = null, + Object? household = freezed, + Object? headOfHousehold = freezed, + Object? members = freezed, + Object? projectBeneficiaries = freezed, Object? distance = freezed, Object? tasks = freezed, Object? sideEffects = freezed, Object? referrals = freezed, }) { return _then(_$HouseholdMemberWrapperImpl( - household: null == household + household: freezed == household ? _value.household : household // ignore: cast_nullable_to_non_nullable - as HouseholdModel, - headOfHousehold: null == headOfHousehold + as HouseholdModel?, + headOfHousehold: freezed == headOfHousehold ? _value.headOfHousehold : headOfHousehold // ignore: cast_nullable_to_non_nullable - as IndividualModel, - members: null == members + as IndividualModel?, + members: freezed == members ? _value._members : members // ignore: cast_nullable_to_non_nullable - as List, - projectBeneficiaries: null == projectBeneficiaries + as List?, + projectBeneficiaries: freezed == projectBeneficiaries ? _value._projectBeneficiaries : projectBeneficiaries // ignore: cast_nullable_to_non_nullable - as List, + as List?, distance: freezed == distance ? _value.distance : distance // ignore: cast_nullable_to_non_nullable @@ -2171,10 +2549,10 @@ class __$$HouseholdMemberWrapperImplCopyWithImpl<$Res> class _$HouseholdMemberWrapperImpl implements _HouseholdMemberWrapper { const _$HouseholdMemberWrapperImpl( - {required this.household, - required this.headOfHousehold, - required final List members, - required final List projectBeneficiaries, + {this.household, + this.headOfHousehold, + final List? members, + final List? projectBeneficiaries, this.distance, final List? tasks, final List? sideEffects, @@ -2186,24 +2564,28 @@ class _$HouseholdMemberWrapperImpl implements _HouseholdMemberWrapper { _referrals = referrals; @override - final HouseholdModel household; + final HouseholdModel? household; @override - final IndividualModel headOfHousehold; - final List _members; + final IndividualModel? headOfHousehold; + final List? _members; @override - List get members { + List? get members { + final value = _members; + if (value == null) return null; if (_members is EqualUnmodifiableListView) return _members; // ignore: implicit_dynamic_type - return EqualUnmodifiableListView(_members); + return EqualUnmodifiableListView(value); } - final List _projectBeneficiaries; + final List? _projectBeneficiaries; @override - List get projectBeneficiaries { + List? get projectBeneficiaries { + final value = _projectBeneficiaries; + if (value == null) return null; if (_projectBeneficiaries is EqualUnmodifiableListView) return _projectBeneficiaries; // ignore: implicit_dynamic_type - return EqualUnmodifiableListView(_projectBeneficiaries); + return EqualUnmodifiableListView(value); } @override @@ -2286,23 +2668,23 @@ class _$HouseholdMemberWrapperImpl implements _HouseholdMemberWrapper { abstract class _HouseholdMemberWrapper implements HouseholdMemberWrapper { const factory _HouseholdMemberWrapper( - {required final HouseholdModel household, - required final IndividualModel headOfHousehold, - required final List members, - required final List projectBeneficiaries, + {final HouseholdModel? household, + final IndividualModel? headOfHousehold, + final List? members, + final List? projectBeneficiaries, final double? distance, final List? tasks, final List? sideEffects, final List? referrals}) = _$HouseholdMemberWrapperImpl; @override - HouseholdModel get household; + HouseholdModel? get household; @override - IndividualModel get headOfHousehold; + IndividualModel? get headOfHousehold; @override - List get members; + List? get members; @override - List get projectBeneficiaries; + List? get projectBeneficiaries; @override double? get distance; @override diff --git a/packages/registration_delivery/lib/data/repositories/local/household.dart b/packages/registration_delivery/lib/data/repositories/local/household.dart index 86b18991e..31de2a1e8 100644 --- a/packages/registration_delivery/lib/data/repositories/local/household.dart +++ b/packages/registration_delivery/lib/data/repositories/local/household.dart @@ -75,8 +75,11 @@ class HouseholdLocalRepository memberCount: household.memberCount, rowVersion: household.rowVersion, isDeleted: household.isDeleted, - additionalFields: HouseholdAdditionalFieldsMapper.fromJson( - household.additionalFields.toString()), + additionalFields: household.additionalFields != null && + household.additionalFields.toString().isNotEmpty + ? HouseholdAdditionalFieldsMapper.fromJson( + household.additionalFields.toString()) + : null, auditDetails: (household.auditCreatedBy != null && household.auditCreatedTime != null) ? AuditDetails( diff --git a/packages/registration_delivery/lib/data/repositories/local/registration_delivery_address.dart b/packages/registration_delivery/lib/data/repositories/local/registration_delivery_address.dart index 30cf29c4e..426c71540 100644 --- a/packages/registration_delivery/lib/data/repositories/local/registration_delivery_address.dart +++ b/packages/registration_delivery/lib/data/repositories/local/registration_delivery_address.dart @@ -3,8 +3,6 @@ import 'dart:math' as math; import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; -import 'package:drift/native.dart'; -import 'package:registration_delivery/utils/utils.dart'; import '../../../models/entities/household.dart'; @@ -78,6 +76,11 @@ class RegistrationDeliveryAddressRepo extends AddressLocalRepository { memberCount: household.memberCount, rowVersion: household.rowVersion, isDeleted: household.isDeleted, + additionalFields: household.additionalFields != null && + household.additionalFields.toString().isNotEmpty + ? HouseholdAdditionalFieldsMapper.fromJson( + household.additionalFields.toString()) + : null, auditDetails: AuditDetails( createdBy: household.auditCreatedBy!, createdTime: household.auditCreatedTime!, diff --git a/packages/registration_delivery/lib/models/entities/status.dart b/packages/registration_delivery/lib/models/entities/status.dart index e7996833c..2f6e7332f 100644 --- a/packages/registration_delivery/lib/models/entities/status.dart +++ b/packages/registration_delivery/lib/models/entities/status.dart @@ -2,17 +2,34 @@ import 'package:dart_mappable/dart_mappable.dart'; part 'status.mapper.dart'; + @MappableEnum(caseStyle: CaseStyle.upperCase) enum Status { - @MappableValue("DELIVERED") delivered, - @MappableValue("NOT_DELIVERED") notDelivered, - @MappableValue("VISITED") visited, - @MappableValue("NOT_VISITED") notVisited, - @MappableValue("BENEFICIARY_REFUSED") beneficiaryRefused, - @MappableValue("BENEFICIARY_REFERRED") beneficiaryReferred, - @MappableValue("ADMINISTERED_SUCCESS") administeredSuccess, - @MappableValue("ADMINISTERED_FAILED") administeredFailed, - @MappableValue("IN_COMPLETE") inComplete, - @MappableValue("TO_ADMINISTER") toAdminister, + @MappableValue("DELIVERED") + delivered, + @MappableValue("NOT_DELIVERED") + notDelivered, + @MappableValue("VISITED") + visited, + @MappableValue("NOT_VISITED") + notVisited, + @MappableValue("BENEFICIARY_REFUSED") + beneficiaryRefused, + @MappableValue("BENEFICIARY_REFERRED") + beneficiaryReferred, + @MappableValue("ADMINISTERED_SUCCESS") + administeredSuccess, + @MappableValue("ADMINISTERED_FAILED") + administeredFailed, + @MappableValue("IN_COMPLETE") + inComplete, + @MappableValue("TO_ADMINISTER") + toAdminister, + @MappableValue("REGISTERED") + registered, + @MappableValue("NOT_REGISTERED") + notRegistered, + @MappableValue("CLOSED") + closed, ; -} \ No newline at end of file +} diff --git a/packages/registration_delivery/lib/models/entities/status.mapper.dart b/packages/registration_delivery/lib/models/entities/status.mapper.dart index dffb822cc..8ca8cb587 100644 --- a/packages/registration_delivery/lib/models/entities/status.mapper.dart +++ b/packages/registration_delivery/lib/models/entities/status.mapper.dart @@ -45,6 +45,12 @@ class StatusMapper extends EnumMapper { return Status.inComplete; case "TO_ADMINISTER": return Status.toAdminister; + case "REGISTERED": + return Status.registered; + case "NOT_REGISTERED": + return Status.notRegistered; + case "CLOSED": + return Status.closed; default: throw MapperException.unknownEnumValue(value); } @@ -73,6 +79,12 @@ class StatusMapper extends EnumMapper { return "IN_COMPLETE"; case Status.toAdminister: return "TO_ADMINISTER"; + case Status.registered: + return "REGISTERED"; + case Status.notRegistered: + return "NOT_REGISTERED"; + case Status.closed: + return "CLOSED"; } } } diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart index 77abaa774..4529889f9 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart @@ -54,9 +54,9 @@ class _BeneficiaryDetailsPageState final projectBeneficiary = RegistrationDeliverySingleton().beneficiaryType != BeneficiaryType.individual - ? [householdMemberWrapper.projectBeneficiaries.first] + ? [householdMemberWrapper.projectBeneficiaries?.first] : householdMemberWrapper.projectBeneficiaries - .where( + ?.where( (element) => element.beneficiaryClientReferenceId == state.selectedIndividual?.clientReferenceId, @@ -68,7 +68,7 @@ class _BeneficiaryDetailsPageState final taskData = state.householdMemberWrapper.tasks ?.where((element) => element.projectBeneficiaryClientReferenceId == - projectBeneficiary.first.clientReferenceId) + projectBeneficiary?.first?.clientReferenceId) .toList(); final bloc = context.read(); final lastDose = taskData != null && taskData.isNotEmpty @@ -263,7 +263,7 @@ class _BeneficiaryDetailsPageState .beneficiaryType != BeneficiaryType.individual ? householdMemberWrapper - .headOfHousehold.name?.givenName + .headOfHousehold?.name?.givenName : state.selectedIndividual?.name ?.givenName ?? '--', @@ -275,7 +275,7 @@ class _BeneficiaryDetailsPageState .beneficiaryType != BeneficiaryType.individual ? householdMemberWrapper - .headOfHousehold.identifiers + .headOfHousehold?.identifiers : state.selectedIndividual ?.identifiers; if (identifiers == null || @@ -295,7 +295,7 @@ class _BeneficiaryDetailsPageState .beneficiaryType != BeneficiaryType.individual ? householdMemberWrapper - .headOfHousehold.identifiers + .headOfHousehold?.identifiers : state.selectedIndividual ?.identifiers; if (identifiers == null || @@ -316,7 +316,7 @@ class _BeneficiaryDetailsPageState .beneficiaryType != BeneficiaryType.individual ? householdMemberWrapper - .headOfHousehold.dateOfBirth + .headOfHousehold?.dateOfBirth : state.selectedIndividual ?.dateOfBirth; if (dob == null || dob.isEmpty) { @@ -348,7 +348,7 @@ class _BeneficiaryDetailsPageState .beneficiaryType != BeneficiaryType.individual ? householdMemberWrapper.headOfHousehold - .gender?.name.sentenceCase + ?.gender?.name.sentenceCase : state.selectedIndividual?.gender?.name .sentenceCase ?? '--', @@ -358,7 +358,7 @@ class _BeneficiaryDetailsPageState .beneficiaryType != BeneficiaryType.individual ? householdMemberWrapper - .headOfHousehold.mobileNumber + .headOfHousehold?.mobileNumber : state.selectedIndividual ?.mobileNumber ?? '--', @@ -366,11 +366,13 @@ class _BeneficiaryDetailsPageState .deliverIntervention .dateOfRegistrationLabel): () { final date = projectBeneficiary - .first.dateOfRegistration; + ?.first?.dateOfRegistration; final registrationDate = DateTime.fromMillisecondsSinceEpoch( - date, + date ?? + DateTime.now() + .millisecondsSinceEpoch, ); return DateFormat('dd MMMM yyyy') diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart index 8c868a548..1e2a1f3f5 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart @@ -56,8 +56,8 @@ class BeneficiaryWrapperPage extends StatelessWidget { final referral = context.repository(context); - final serviceDefinationRepo = - context.repository(context); + final serviceDefinationRepo = context.repository(context); return MultiBlocProvider( providers: [ @@ -142,7 +142,7 @@ class BeneficiaryWrapperPage extends StatelessWidget { taskSearch: TaskSearchModel( projectBeneficiaryClientReferenceId: houseHoldOverviewState .householdMemberWrapper.projectBeneficiaries - .map((e) => e.clientReferenceId) + ?.map((e) => e.clientReferenceId) .toList(), ))), child: BlocProvider( @@ -155,7 +155,7 @@ class BeneficiaryWrapperPage extends StatelessWidget { )..add(ReferralSearchEvent(ReferralSearchModel( projectBeneficiaryClientReferenceId: houseHoldOverviewState .householdMemberWrapper.projectBeneficiaries - .map((e) => e.clientReferenceId) + ?.map((e) => e.clientReferenceId) .toList(), ))), child: BlocProvider( diff --git a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart index 59341ffba..010bc671d 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart @@ -3,20 +3,18 @@ import 'package:collection/collection.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/widgets/atoms/digit_stepper.dart'; import 'package:digit_components/widgets/atoms/digit_toaster.dart'; +import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; +import 'package:registration_delivery/models/entities/deliver_strategy_type.dart'; +import 'package:registration_delivery/registration_delivery.dart'; +import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; -import '../../blocs/delivery_intervention/deliver_intervention.dart'; -import '../../blocs/household_overview/household_overview.dart'; import '../../models/entities/additional_fields_type.dart'; -import '../../models/entities/deliver_strategy_type.dart'; import '../../models/entities/status.dart'; -import '../../models/entities/task.dart'; -import '../../models/entities/task_resource.dart'; -import '../../router/registration_delivery_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; @@ -48,6 +46,8 @@ class _DeliverInterventionPageState static const _doseAdministrationKey = 'doseAdministered'; static const _dateOfAdministrationKey = 'dateOfAdministration'; final clickedStatus = ValueNotifier(false); + bool? shouldSubmit = false; + // Variable to track dose administration status bool doseAdministered = false; @@ -57,6 +57,154 @@ class _DeliverInterventionPageState // Initialize the currentStep variable to keep track of the current step in a process. int currentStep = 0; + @override + void initState() { + context.read().add(const LoadLocationEvent()); + super.initState(); + } + + Future handleCapturedLocationState( + LocationState locationState, + BuildContext context, + DeliverInterventionState deliverInterventionState, + FormGroup form, + HouseholdMemberWrapper householdMember, + ProjectBeneficiaryModel projectBeneficiary) async { + if (shouldSubmit == false) { + await DigitSyncDialog.show(context, + type: DigitSyncDialogType.complete, + label: localizations.translate(i18.common.locationCaptured), + primaryAction: DigitDialogActions( + label: localizations.translate( + i18.beneficiaryDetails.ctaProceed, + ), + action: (ctx) async { + DigitComponentsUtils().hideLocationDialog(context); + final lat = locationState.latitude; + final long = locationState.longitude; + shouldSubmit = await DigitDialog.show( + context, + options: DigitDialogOptions( + titleText: localizations + .translate(i18.deliverIntervention.dialogTitle), + contentText: localizations + .translate(i18.deliverIntervention.dialogContent), + primaryAction: DigitDialogActions( + label: localizations.translate(i18.common.coreCommonSubmit), + action: (ctx) { + clickedStatus.value = true; + Navigator.of(context, rootNavigator: true).pop(true); + }, + ), + secondaryAction: DigitDialogActions( + label: localizations.translate(i18.common.coreCommonCancel), + action: (context) => + Navigator.of(context, rootNavigator: true).pop(false), + ), + ), + ); + if (shouldSubmit ?? false) { + if (context.mounted) { + context.read().add( + DeliverInterventionSubmitEvent( + task: _getTaskModel( + context, + form: form, + oldTask: null, + projectBeneficiaryClientReferenceId: + projectBeneficiary.clientReferenceId, + dose: deliverInterventionState.dose, + cycle: deliverInterventionState.cycle, + deliveryStrategy: + DeliverStrategyType.direct.toValue(), + address: + householdMember.members?.first.address?.first, + latitude: lat, + longitude: long, + ), + isEditing: false, + boundaryModel: + RegistrationDeliverySingleton().boundary!, + ), + ); + + if (deliverInterventionState.futureDeliveries != null && + deliverInterventionState.futureDeliveries!.isNotEmpty && + RegistrationDeliverySingleton() + .projectType + ?.cycles + ?.isNotEmpty == + true) { + context.router.popUntilRouteWithName( + BeneficiaryWrapperRoute.name, + ); + context.router.push( + SplashAcknowledgementRoute( + enableBackToSearch: false, + ), + ); + } else { + final reloadState = context.read(); + + Future.delayed( + const Duration( + milliseconds: 1000, + ), + () { + reloadState.add( + HouseholdOverviewReloadEvent( + projectId: + RegistrationDeliverySingleton().projectId!, + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType!, + ), + ); + }, + ).then( + (value) { + context.router.popAndPush( + HouseholdAcknowledgementRoute( + enableViewHousehold: true, + ), + ); + }, + ); + } + } + } + }, + )); + } + } + + void handleLocationState( + LocationState locationState, + BuildContext context, + DeliverInterventionState deliverInterventionState, + FormGroup form, + HouseholdMemberWrapper householdMember, + ProjectBeneficiaryModel projectBeneficiary) { + if (context.mounted) { + DigitComponentsUtils().showLocationCapturingDialog( + context, + localizations.translate(i18.common.locationCapturing), + DigitSyncDialogType.inProgress); + + Future.delayed(const Duration(seconds: 2), () { + // After delay, hide the initial dialog + DigitComponentsUtils().hideLocationDialog(context); + handleCapturedLocationState( + locationState, + context, + deliverInterventionState, + form, + householdMember, + projectBeneficiary); + }); + } + } + @override Widget build(BuildContext context) { final theme = Theme.of(context); @@ -71,609 +219,433 @@ class _DeliverInterventionPageState }); } - return BlocBuilder( - builder: (context, locationState) { - return ProductVariantBlocWrapper( - child: BlocBuilder( - builder: (context, state) { - final householdMemberWrapper = state.householdMemberWrapper; - - final projectBeneficiary = - RegistrationDeliverySingleton().beneficiaryType != - BeneficiaryType.individual - ? [householdMemberWrapper.projectBeneficiaries.first] - : householdMemberWrapper.projectBeneficiaries - .where( - (element) => - element.beneficiaryClientReferenceId == - state.selectedIndividual?.clientReferenceId, - ) - .toList(); - - return Scaffold( - body: state.loading - ? const Center(child: CircularProgressIndicator()) - : BlocBuilder( - builder: (context, deliveryInterventionState) { - List? productVariants = - RegistrationDeliverySingleton() - .selectedProject - ?.additionalDetails - ?.projectType - ?.cycles - ?.isNotEmpty == - true - ? (fetchProductVariant( - RegistrationDeliverySingleton() - .selectedProject - ?.additionalDetails - ?.projectType - ?.cycles![ - deliveryInterventionState - .cycle - - 1] - .deliveries?[ - deliveryInterventionState.dose - 1], - state.selectedIndividual, - )?.productVariants) - : RegistrationDeliverySingleton() + return ProductVariantBlocWrapper( + child: BlocBuilder( + builder: (context, state) { + final householdMemberWrapper = state.householdMemberWrapper; + + final projectBeneficiary = + RegistrationDeliverySingleton().beneficiaryType != + BeneficiaryType.individual + ? [householdMemberWrapper.projectBeneficiaries!.first] + : householdMemberWrapper.projectBeneficiaries + ?.where( + (element) => + element.beneficiaryClientReferenceId == + state.selectedIndividual?.clientReferenceId, + ) + .toList(); + + return Scaffold( + body: state.loading + ? const Center(child: CircularProgressIndicator()) + : BlocBuilder( + builder: (context, deliveryInterventionState) { + List? productVariants = + RegistrationDeliverySingleton() .selectedProject ?.additionalDetails ?.projectType - ?.resources - ?.map((r) => DeliveryProductVariant( - productVariantId: r.productVariantId)) - .toList(); - - final int numberOfDoses = - (RegistrationDeliverySingleton() - .projectType - ?.cycles - ?.isNotEmpty == - true) - ? (RegistrationDeliverySingleton() - .projectType - ?.cycles?[ - deliveryInterventionState.cycle - - 1] - .deliveries - ?.length) ?? - 0 - : 0; - - final steps = generateSteps(numberOfDoses); - if ((productVariants ?? []).isEmpty) { - DigitToast.show( - context, - options: DigitToastOptions( - localizations.translate( - i18.deliverIntervention - .checkForProductVariantsConfig, - ), - true, - theme, - ), - ); - } - - return BlocBuilder( - builder: (context, productState) { - return productState.maybeWhen( - orElse: () => const Offstage(), - fetched: (productVariantsValue) { - final variant = productState.whenOrNull( - fetched: (productVariants) { - return productVariants; - }, - ); + ?.cycles + ?.isNotEmpty == + true + ? (fetchProductVariant( + RegistrationDeliverySingleton() + .selectedProject + ?.additionalDetails + ?.projectType + ?.cycles![deliveryInterventionState + .cycle - + 1] + .deliveries?[ + deliveryInterventionState.dose - 1], + state.selectedIndividual, + )?.productVariants) + : RegistrationDeliverySingleton() + .selectedProject + ?.additionalDetails + ?.projectType + ?.resources + ?.map((r) => DeliveryProductVariant( + productVariantId: r.productVariantId)) + .toList(); - return ReactiveFormBuilder( - form: () => buildForm( - context, - productVariants, - variant, - ), - builder: (context, form, child) { - return ScrollableContent( - enableFixedButton: true, - footer: BlocBuilder< - DeliverInterventionBloc, - DeliverInterventionState>( - builder: (context, state) { - return DigitCard( - margin: - const EdgeInsets.fromLTRB( - 0, kPadding, 0, 0), - padding: - const EdgeInsets.fromLTRB( - kPadding, - 0, - kPadding, - 0), - child: ValueListenableBuilder( - valueListenable: - clickedStatus, - builder: (context, - bool isClicked, _) { - return DigitElevatedButton( - onPressed: isClicked - ? null - : () async { - final deliveredProducts = ((form - .control( - _resourceDeliveredKey, - ) as FormArray) + final int numberOfDoses = (RegistrationDeliverySingleton() + .projectType + ?.cycles + ?.isNotEmpty == + true) + ? (RegistrationDeliverySingleton() + .projectType + ?.cycles?[deliveryInterventionState.cycle - 1] + .deliveries + ?.length) ?? + 0 + : 0; + + final steps = generateSteps(numberOfDoses); + if ((productVariants ?? []).isEmpty) { + DigitToast.show( + context, + options: DigitToastOptions( + localizations.translate( + i18.deliverIntervention + .checkForProductVariantsConfig, + ), + true, + theme, + ), + ); + } + + return BlocBuilder( + builder: (context, productState) { + return productState.maybeWhen( + orElse: () => const Offstage(), + fetched: (productVariantsValue) { + final variant = productState.whenOrNull( + fetched: (productVariants) { + return productVariants; + }, + ); + + return ReactiveFormBuilder( + form: () => buildForm( + context, + productVariants, + variant, + ), + builder: (context, form, child) { + return ScrollableContent( + enableFixedButton: true, + footer: BlocBuilder( + builder: (context, state) { + return DigitCard( + margin: const EdgeInsets.fromLTRB( + 0, kPadding, 0, 0), + padding: const EdgeInsets.fromLTRB( + kPadding, 0, kPadding, 0), + child: ValueListenableBuilder( + valueListenable: clickedStatus, + builder: + (context, bool isClicked, _) { + return BlocBuilder( + builder: + (context, locationState) { + return DigitElevatedButton( + onPressed: isClicked + ? null + : () async { + final deliveredProducts = + ((form.control( + _resourceDeliveredKey, + ) as FormArray) .value as List< ProductVariantModel?>); - if (hasDuplicatesOrEmptyResource( - deliveredProducts)) { - await DigitToast - .show( - context, - options: - DigitToastOptions( - localizations.translate(i18 + if (hasDuplicatesOrEmptyResource( + deliveredProducts)) { + await DigitToast + .show( + context, + options: + DigitToastOptions( + localizations + .translate(i18 .deliverIntervention .resourceDeliveredValidation), - true, - theme, - ), - ); - } else if ((((form - .control( - _quantityDistributedKey, - ) as FormArray) - .value) ?? - []) - .any((e) => e == 0)) { - await DigitToast - .show( - context, - options: - DigitToastOptions( - localizations.translate(i18 + true, + theme, + ), + ); + } else if ((((form + .control( + _quantityDistributedKey, + ) as FormArray) + .value) ?? + []) + .any((e) => e == 0)) { + await DigitToast + .show( + context, + options: + DigitToastOptions( + localizations + .translate(i18 .deliverIntervention .resourceCannotBeZero), - true, - theme, - ), - ); - } else { - final lat = - locationState - .latitude; - final long = - locationState - .longitude; - final shouldSubmit = - await DigitDialog - .show< - bool>( - context, - options: - DigitDialogOptions( - titleText: - localizations - .translate( - i18.deliverIntervention - .dialogTitle, - ), - contentText: - localizations - .translate( - i18.deliverIntervention - .dialogContent, - ), - primaryAction: - DigitDialogActions( - label: localizations - .translate( - i18.common - .coreCommonSubmit, - ), - action: - (ctx) { - clickedStatus.value = - true; - Navigator - .of( - context, - rootNavigator: - true, - ).pop( - true); - }, - ), - secondaryAction: - DigitDialogActions( - label: localizations - .translate( - i18.common - .coreCommonCancel, - ), - action: (context) => - Navigator - .of( - context, - rootNavigator: - true, - ).pop(false), - ), - ), - ); - - if (shouldSubmit ?? - false) { - if (context - .mounted) { - context - .read< - DeliverInterventionBloc>() - .add( - DeliverInterventionSubmitEvent( - task: - _getTaskModel( - context, - form: form, - oldTask: null, - projectBeneficiaryClientReferenceId: projectBeneficiary.first.clientReferenceId, - dose: deliveryInterventionState.dose, - cycle: deliveryInterventionState.cycle, - deliveryStrategy: DeliverStrategyType.direct.toValue(), - address: householdMemberWrapper.members.first.address?.first, - latitude: lat, - longitude: long, - ), - isEditing: - false, - boundaryModel: - RegistrationDeliverySingleton().boundary!, - ), - ); - - if (state - .futureDeliveries != - null && - state - .futureDeliveries! - .isNotEmpty && - RegistrationDeliverySingleton().projectType?.cycles?.isNotEmpty == - true) { - context - .router - .popUntilRouteWithName( - BeneficiaryWrapperRoute - .name, - ); - context - .router - .push( - SplashAcknowledgementRoute( - enableBackToSearch: - false, - ), - ); - } else { - final reloadState = - context - .read(); - - Future - .delayed( - const Duration( - milliseconds: - 1000, - ), - () { - reloadState - .add( - HouseholdOverviewReloadEvent( - projectId: RegistrationDeliverySingleton().projectId!, - projectBeneficiaryType: RegistrationDeliverySingleton().beneficiaryType!, - ), - ); - }, - ).then( - (value) { - context - .router - .popAndPush( - HouseholdAcknowledgementRoute( - enableViewHousehold: true, - ), - ); - }, - ); - } - } - } - } - }, - child: Center( - child: Text( - localizations - .translate( - i18.common - .coreCommonSubmit, - ), - ), + true, + theme, + ), + ); + } else { + context + .read< + LocationBloc>() + .add( + const LoadLocationEvent()); + handleLocationState( + locationState, + context, + deliveryInterventionState, + form, + householdMemberWrapper, + projectBeneficiary! + .first); + } + }, + child: Center( + child: Text( + localizations.translate( + i18.common + .coreCommonSubmit, ), - ); - }, - ), - ); + ), + ), + ); + }); }, ), - header: const Column(children: [ - BackNavigationHelpHeaderWidget( - showHelp: false, + ); + }, + ), + header: const Column(children: [ + BackNavigationHelpHeaderWidget( + showHelp: false, + ), + ]), + children: [ + Column( + children: [ + DigitCard( + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + localizations.translate( + i18.deliverIntervention + .deliverInterventionLabel, + ), + style: theme + .textTheme.displayMedium, + ), + if (RegistrationDeliverySingleton() + .beneficiaryType == + BeneficiaryType.individual) + DigitTextFormField( + readOnly: true, + formControlName: + _doseAdministrationKey, + keyboardType: + TextInputType.number, + label: localizations + .translate(i18 + .deliverIntervention + .currentCycle), + ), + DigitStepper( + activeStep: + deliveryInterventionState + .dose - + 1, + stepRadius: 12.5, + steps: steps, + maxStepReached: 3, + lineLength: + (MediaQuery.of(context) + .size + .width - + 12.5 * + 2 * + steps.length - + 50) / + (steps.length - 1), + ), + DigitDateFormPicker( + isEnabled: false, + formControlName: + _dateOfAdministrationKey, + label: + localizations.translate( + i18.householdDetails + .dateOfRegistrationLabel, + ), + confirmText: + localizations.translate( + i18.common.coreCommonOk, + ), + cancelText: + localizations.translate( + i18.common.coreCommonCancel, + ), + isRequired: false, + padding: + const EdgeInsets.only( + top: kPadding, + ), + ), + ], ), - ]), - children: [ - Column( + ), + DigitCard( + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, children: [ - DigitCard( - child: Column( - crossAxisAlignment: - CrossAxisAlignment - .start, - mainAxisSize: - MainAxisSize.min, - children: [ - Text( - localizations.translate( - i18.deliverIntervention - .deliverInterventionLabel, - ), - style: theme.textTheme - .displayMedium, - ), - if (RegistrationDeliverySingleton() - .beneficiaryType == - BeneficiaryType - .individual) - DigitTextFormField( - readOnly: true, - formControlName: - _doseAdministrationKey, - keyboardType: - TextInputType - .number, - label: localizations - .translate(i18 - .deliverIntervention - .currentCycle), - ), - DigitStepper( - activeStep: - deliveryInterventionState - .dose - - 1, - stepRadius: 12.5, - steps: steps, - maxStepReached: 3, - lineLength: (MediaQuery.of( - context) - .size - .width - - 12.5 * - 2 * - steps - .length - - 50) / - (steps.length - 1), - ), - DigitDateFormPicker( - isEnabled: false, - formControlName: - _dateOfAdministrationKey, - label: localizations - .translate( - i18.householdDetails - .dateOfRegistrationLabel, - ), - confirmText: - localizations - .translate( - i18.common - .coreCommonOk, - ), - cancelText: - localizations - .translate( - i18.common - .coreCommonCancel, - ), - isRequired: false, - padding: - const EdgeInsets - .only( - top: kPadding, - ), - ), - ], + Text( + localizations.translate( + i18.deliverIntervention + .deliverInterventionResourceLabel, ), + style: theme + .textTheme.headlineLarge, ), - DigitCard( - child: Column( - crossAxisAlignment: - CrossAxisAlignment - .start, - mainAxisSize: - MainAxisSize.min, - children: [ - Text( - localizations.translate( - i18.deliverIntervention - .deliverInterventionResourceLabel, - ), - style: theme.textTheme - .headlineLarge, - ), - ..._controllers.map((e) => - ResourceBeneficiaryCard( - form: form, - cardIndex: - _controllers - .indexOf(e), - totalItems: + ..._controllers.map((e) => + ResourceBeneficiaryCard( + form: form, + cardIndex: _controllers + .indexOf(e), + totalItems: + _controllers.length, + onDelete: (index) { + (form.control( + _resourceDeliveredKey, + ) as FormArray) + .removeAt( + index, + ); + (form.control( + _quantityDistributedKey, + ) as FormArray) + .removeAt( + index, + ); + _controllers.removeAt( + index, + ); + setState(() { + _controllers; + }); + }, + )), + Center( + child: DigitIconButton( + onPressed: ((form.control(_resourceDeliveredKey) + as FormArray) + .value ?? + []) + .length < + (productVariants ?? + []) + .length + ? () async { + addController(form); + setState(() { + _controllers.add( _controllers .length, - onDelete: (index) { - (form.control( - _resourceDeliveredKey, - ) as FormArray) - .removeAt( - index, ); - (form.control( - _quantityDistributedKey, - ) as FormArray) - .removeAt( - index, - ); - _controllers - .removeAt( - index, - ); - setState(() { - _controllers; - }); - }, - )), - Center( - child: DigitIconButton( - onPressed: ((form.control(_resourceDeliveredKey) as FormArray) - .value ?? - []) - .length < - (productVariants ?? - []) - .length - ? () async { - addController( - form); - setState(() { - _controllers - .add( - _controllers - .length, - ); - }); - } - : null, - icon: - Icons.add_circle, - iconColor: ((form.control(_resourceDeliveredKey) as FormArray) - .value ?? - []) - .length < - (productVariants ?? - []) - .length - ? theme - .colorScheme - .secondary - : theme - .colorScheme - .outline, - iconTextColor: ((form.control(_resourceDeliveredKey) as FormArray) - .value ?? - []) - .length < - (productVariants ?? - []) - .length - ? theme - .colorScheme - .secondary - : theme - .colorScheme - .outline, - iconText: - localizations - .translate( - i18.deliverIntervention - .resourceAddBeneficiary, - ), - ), - ), - ], + }); + } + : null, + icon: Icons.add_circle, + iconColor: ((form.control(_resourceDeliveredKey) + as FormArray) + .value ?? + []) + .length < + (productVariants ?? + []) + .length + ? theme.colorScheme + .secondary + : theme.colorScheme + .outline, + iconTextColor: ((form.control(_resourceDeliveredKey) + as FormArray) + .value ?? + []) + .length < + (productVariants ?? + []) + .length + ? theme.colorScheme + .secondary + : theme.colorScheme + .outline, + iconText: + localizations.translate( + i18.deliverIntervention + .resourceAddBeneficiary, + ), ), ), - DigitCard( - child: Column( - crossAxisAlignment: - CrossAxisAlignment - .start, - mainAxisSize: - MainAxisSize.min, - children: [ - Text( - localizations.translate( - i18.deliverIntervention - .deliveryCommentLabel, - ), - style: theme.textTheme - .headlineLarge, - ), - DigitReactiveSearchDropdown< - String>( - label: localizations - .translate( - i18.deliverIntervention - .deliveryCommentLabel, - ), - form: form, - menuItems: - RegistrationDeliverySingleton() - .deliveryCommentOptions! - .map((e) { - return localizations - .translate(e); - }).toList() - ..sort((a, b) => - a.compareTo( - b)), - formControlName: - _deliveryCommentKey, - valueMapper: (value) => - value, - emptyText: localizations - .translate(i18 - .common - .noMatchFound), - ) - ], + ], + ), + ), + DigitCard( + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + localizations.translate( + i18.deliverIntervention + .deliveryCommentLabel, ), + style: theme + .textTheme.headlineLarge, ), + DigitReactiveSearchDropdown< + String>( + label: + localizations.translate( + i18.deliverIntervention + .deliveryCommentLabel, + ), + form: form, + menuItems: + RegistrationDeliverySingleton() + .deliveryCommentOptions! + .map((e) { + return localizations + .translate(e); + }).toList() + ..sort((a, b) => + a.compareTo(b)), + formControlName: + _deliveryCommentKey, + valueMapper: (value) => value, + emptyText: localizations + .translate(i18 + .common.noMatchFound), + ) ], ), - ], - ); - }, - ); - }, - empty: () => Center( - child: Text( - localizations.translate( - i18.deliverIntervention - .checkForProductVariantsConfig, ), - ), - )); + ], + ), + ], + ); + }, + ); }, ); }, - ), - ); - }, - ), - ); - }, + ); + }, + ), + ); + }, + ), ); } diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index b3a40009b..92fb16708 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -11,6 +11,7 @@ import '../../blocs/delivery_intervention/deliver_intervention.dart'; import '../../blocs/household_overview/household_overview.dart'; import '../../blocs/search_households/search_bloc_common_wrapper.dart'; import '../../blocs/search_households/search_households.dart'; +import '../../models/entities/household.dart'; import '../../models/entities/status.dart'; import '../../router/registration_delivery_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; @@ -48,7 +49,6 @@ class _HouseholdOverviewPageState final theme = Theme.of(context); final beneficiaryType = RegistrationDeliverySingleton().beneficiaryType!; - return PopScope( onPopInvoked: (didPop) async { context @@ -58,543 +58,188 @@ class _HouseholdOverviewPageState context.router.maybePop(); }, child: BlocBuilder( - builder: (ctx, state) { - final projectBeneficiary = - RegistrationDeliverySingleton().beneficiaryType != - BeneficiaryType.individual - ? [state.householdMemberWrapper.projectBeneficiaries.first] - : state.householdMemberWrapper.projectBeneficiaries - .where( - (element) => - element.beneficiaryClientReferenceId == - state.selectedIndividual?.clientReferenceId, - ) - .toList(); + RegistrationDeliverySingleton().beneficiaryType != + BeneficiaryType.individual + ? [state.householdMemberWrapper.projectBeneficiaries?.first] + : state.householdMemberWrapper.projectBeneficiaries + ?.where( + (element) => + element.beneficiaryClientReferenceId == + state.selectedIndividual?.clientReferenceId, + ) + .toList(); return Scaffold( body: state.loading ? const Center(child: CircularProgressIndicator()) - : BlocBuilder( - builder: (ctx, state) { - if (state.loading) { - return const Center( - child: CircularProgressIndicator(), - ); - } - - return ScrollableContent( - header: BackNavigationHelpHeaderWidget( - handleBack: () { - context - .read() - .searchHouseholdsBloc - .add(const SearchHouseholdsClearEvent()); - }, - ), - enableFixedButton: true, - footer: Offstage( - offstage: - beneficiaryType == BeneficiaryType.individual, - child: BlocBuilder( - builder: (ctx, state) => DigitCard( - margin: - const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB( - kPadding, 0, kPadding, 0), - child: state.tasks?.first.status == - Status.administeredSuccess.toValue() - ? DigitOutLineButton( - label: localizations.translate( - i18.memberCard - .deliverDetailsUpdateLabel, - ), - onPressed: () async { - await context.router - .push(BeneficiaryChecklistRoute(beneficiaryClientRefId: projectBeneficiary.first.beneficiaryClientReferenceId)); - }, - ) - : DigitElevatedButton( - onPressed: () async { - final bloc = - ctx.read(); - - final projectId = - RegistrationDeliverySingleton() - .projectId!; - - bloc.add( - HouseholdOverviewReloadEvent( - projectId: projectId, - projectBeneficiaryType: - beneficiaryType, - ), - ); - - await context.router - .push(BeneficiaryChecklistRoute(beneficiaryClientRefId: projectBeneficiary.first.beneficiaryClientReferenceId)); - }, - child: Center( - child: Text( - localizations.translate( - i18.householdOverView - .householdOverViewActionText, - ), - ), - ), - ), - ), - ), - ), - slivers: [ - SliverToBoxAdapter( - child: DigitCard( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.max, - children: [ - Align( - alignment: Alignment.centerLeft, - child: DigitIconButton( - onPressed: () => DigitActionDialog.show( - context, - widget: ActionCard( - items: [ - ActionCardModel( - icon: Icons.edit, - label: localizations.translate( - i18.householdOverView - .householdOverViewEditLabel, - ), - action: () async { - final projectId = - RegistrationDeliverySingleton() - .projectId!; - - final bloc = context.read< - HouseholdOverviewBloc>(); - Navigator.of( - context, - rootNavigator: true, - ).pop(); - - HouseholdMemberWrapper wrapper = - state - .householdMemberWrapper; - - final timestamp = wrapper - .projectBeneficiaries - .first - .dateOfRegistration; - // [TODO ] - final date = DateTime - .fromMillisecondsSinceEpoch( - timestamp, - ); - - final address = - wrapper.household.address; - - if (address == null) return; - - final projectBeneficiary = state - .householdMemberWrapper - .projectBeneficiaries - .firstWhereOrNull( - (element) => - element - .beneficiaryClientReferenceId == - wrapper.household - .clientReferenceId, - ); - - await context.router.root.push( - BeneficiaryRegistrationWrapperRoute( - initialState: - BeneficiaryRegistrationEditHouseholdState( - addressModel: address, - individualModel: - wrapper.members, - householdModel: - wrapper.household, - registrationDate: date, - projectBeneficiaryModel: - projectBeneficiary, - ), - children: [ - HouseholdLocationRoute(), - ], - ), - ); + : ScrollableContent( + header: BackNavigationHelpHeaderWidget( + handleBack: () { + context + .read() + .searchHouseholdsBloc + .add(const SearchHouseholdsClearEvent()); + }, + ), + enableFixedButton: true, + footer: Offstage( + offstage: beneficiaryType == BeneficiaryType.individual, + child: BlocBuilder( + builder: (ctx, deliverInterventionState) => DigitCard( + margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), + padding: const EdgeInsets.fromLTRB( + kPadding, 0, kPadding, 0), + child: deliverInterventionState.tasks?.first.status == + Status.administeredSuccess.toValue() + ? DigitOutLineButton( + label: localizations.translate( + i18.memberCard.deliverDetailsUpdateLabel, + ), + onPressed: () async { + await context.router + .push(DeliverInterventionRoute()); + }, + ) + : DigitElevatedButton( + onPressed: (state.householdMemberWrapper + .projectBeneficiaries ?? + []) + .isEmpty + ? null + : () async { + final bloc = + ctx.read(); + + final projectId = + RegistrationDeliverySingleton() + .projectId!; - bloc.add( - HouseholdOverviewReloadEvent( - projectId: projectId, - projectBeneficiaryType: - beneficiaryType, - ), - ); - }, - ), - ActionCardModel( - icon: Icons.delete, - label: localizations.translate(i18 - .householdOverView - .householdOverViewDeleteLabel), - action: () => DigitDialog.show( - context, - options: DigitDialogOptions( - titleText: localizations - .translate(i18 - .householdOverView - .householdOverViewActionCardTitle), - primaryAction: - DigitDialogActions( - label: localizations - .translate(i18 - .householdOverView - .householdOverViewPrimaryActionLabel), - action: (ctx) { - Navigator.of( - ctx, - rootNavigator: true, - ) - ..pop() - ..pop(); - context.router.push( - ReasonForDeletionRoute( - isHousholdDelete: - true, - ), - ); - }, - ), - secondaryAction: - DigitDialogActions( - label: localizations - .translate(i18 - .householdOverView - .householdOverViewSecondaryActionLabel), - action: (context) { - Navigator.of( - context, - rootNavigator: true, - ).pop(); - }, - ), - ), - ), + bloc.add( + HouseholdOverviewReloadEvent( + projectId: projectId, + projectBeneficiaryType: + beneficiaryType, ), - ], - ), - ), - iconText: localizations.translate( + ); + + await context.router + .push(DeliverInterventionRoute()); + }, + child: Center( + child: Text( + localizations.translate( i18.householdOverView - .householdOverViewEditIconText, + .householdOverViewActionText, ), - icon: Icons.edit, ), ), - BlocBuilder( - builder: (ctx, state) => Offstage( - offstage: beneficiaryType == - BeneficiaryType.individual, - child: Align( - alignment: Alignment.centerLeft, - child: DigitIconButton( - icon: state.tasks?.first.status == - Status.administeredSuccess - .toValue() - ? Icons.check_circle - : Icons.info_rounded, - iconText: localizations.translate( - state.tasks?.first.status == - Status.administeredSuccess - .toValue() - ? i18.householdOverView - .householdOverViewDeliveredIconLabel - : i18.householdOverView - .householdOverViewNotDeliveredIconLabel, - ), - iconTextColor: - state.tasks?.first.status == - Status.administeredSuccess - .toValue() - ? DigitTheme - .instance - .colorScheme - .onSurfaceVariant - : DigitTheme.instance - .colorScheme.error, - iconColor: - state.tasks?.first.status == - Status.administeredSuccess - .toValue() - ? DigitTheme - .instance - .colorScheme - .onSurfaceVariant - : DigitTheme.instance - .colorScheme.error, - ), + ), + ), + ), + ), + slivers: [ + SliverToBoxAdapter( + child: DigitCard( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.max, + children: [ + Align( + alignment: Alignment.centerLeft, + child: DigitIconButton( + onPressed: () { + final projectId = + RegistrationDeliverySingleton() + .projectId!; + + final bloc = + context.read(); + bloc.add( + HouseholdOverviewReloadEvent( + projectId: projectId, + projectBeneficiaryType: beneficiaryType, ), - ), - ), - Padding( - padding: const EdgeInsets.only( - left: kPadding, - right: kPadding, - ), - child: Text( - localizations.translate(i18 - .householdOverView - .householdOverViewLabel), - style: theme.textTheme.displayMedium, - ), - ), - Padding( - padding: const EdgeInsets.only( - left: kPadding, - right: kPadding, - ), - child: DigitTableCard( - element: { - localizations.translate(i18 - .householdOverView - .householdOverViewHouseholdHeadNameLabel): - state - .householdMemberWrapper - .headOfHousehold - .name - ?.givenName, - localizations.translate( - i18.householdLocation - .administrationAreaFormLabel, - ): RegistrationDeliverySingleton() - .boundary - ?.name, - localizations.translate( - i18.deliverIntervention - .memberCountText, - ): state.householdMemberWrapper - .household.memberCount, - }, - ), - ), - Column( - children: state - .householdMemberWrapper.members - .map( - (e) { - final isHead = state - .householdMemberWrapper - .headOfHousehold - .clientReferenceId == - e.clientReferenceId; - final projectBeneficiaryId = state - .householdMemberWrapper - .projectBeneficiaries - .firstWhereOrNull((b) => - b.beneficiaryClientReferenceId == - e.clientReferenceId) - ?.clientReferenceId; - - final projectBeneficiary = - beneficiaryType != - BeneficiaryType.individual - ? [ - state - .householdMemberWrapper - .projectBeneficiaries - .first, - ] - : state.householdMemberWrapper - .projectBeneficiaries - .where( - (element) => - element - .beneficiaryClientReferenceId == - e.clientReferenceId, - ) - .toList(); - - final taskdata = projectBeneficiary - .isNotEmpty - ? state.householdMemberWrapper.tasks - ?.where((element) => - element - .projectBeneficiaryClientReferenceId == - projectBeneficiary.first - .clientReferenceId) - .toList() - : null; - final referralData = projectBeneficiary - .isNotEmpty - ? state.householdMemberWrapper - .referrals - ?.where((element) => - element - .projectBeneficiaryClientReferenceId == - projectBeneficiary.first - .clientReferenceId) - .toList() - : null; - final sideEffectData = taskdata != - null && - taskdata.isNotEmpty - ? state.householdMemberWrapper - .sideEffects - ?.where((element) => + ); + DigitActionDialog.show( + context, + widget: ActionCard( + items: [ + ActionCardModel( + icon: Icons.edit, + label: localizations.translate( + i18.householdOverView + .householdOverViewEditLabel, + ), + action: () async { + Navigator.of( + context, + rootNavigator: true, + ).pop(); + + HouseholdMemberWrapper wrapper = + state.householdMemberWrapper; + + final timestamp = wrapper + .headOfHousehold + ?.clientAuditDetails + ?.createdTime; + final date = DateTime + .fromMillisecondsSinceEpoch( + timestamp ?? + DateTime.now() + .millisecondsSinceEpoch, + ); + + final address = + wrapper.household?.address; + + if (address == null) return; + + final projectBeneficiary = state + .householdMemberWrapper + .projectBeneficiaries + ?.firstWhereOrNull( + (element) => element - .taskClientReferenceId == - taskdata - .last.clientReferenceId) - .toList() - : null; - final ageInYears = - DigitDateUtils.calculateAge( - DigitDateUtils - .getFormattedDateToDateTime( - e.dateOfBirth!, - ) ?? - DateTime.now(), - ).years; - final ageInMonths = - DigitDateUtils.calculateAge( - DigitDateUtils - .getFormattedDateToDateTime( - e.dateOfBirth!, - ) ?? - DateTime.now(), - ).months; - final currentCycle = - RegistrationDeliverySingleton() - .projectType - ?.cycles - ?.firstWhereOrNull( - (e) => - (e.startDate) < - DateTime.now() - .millisecondsSinceEpoch && - (e.endDate) > - DateTime.now() - .millisecondsSinceEpoch, - ); - - final isBeneficiaryRefused = - checkIfBeneficiaryRefused( - taskdata, - ); - final isBeneficiaryReferred = - checkIfBeneficiaryReferred( - referralData, - currentCycle, - ); - - return MemberCard( - isHead: isHead, - individual: e, - tasks: taskdata, - sideEffects: sideEffectData, - editMemberAction: () async { - final bloc = ctx - .read(); - - Navigator.of( - context, - rootNavigator: true, - ).pop(); - - final address = e.address; - if (address == null || - address.isEmpty) { - return; - } - - final projectId = - RegistrationDeliverySingleton() - .projectId!; - - await context.router.root.push( - BeneficiaryRegistrationWrapperRoute( - initialState: - BeneficiaryRegistrationEditIndividualState( - individualModel: e, - householdModel: state - .householdMemberWrapper - .household, - addressModel: address.first, - projectBeneficiaryModel: state - .householdMemberWrapper - .projectBeneficiaries - .firstWhereOrNull( - (element) => - element - .beneficiaryClientReferenceId == - (RegistrationDeliverySingleton() - .beneficiaryType == - BeneficiaryType - .individual - ? e - .clientReferenceId - : state - .householdMemberWrapper - .household - .clientReferenceId), - ), - ), - children: [ - IndividualDetailsRoute( - isHeadOfHousehold: isHead, - ), - ], - ), - ); - - bloc.add( - HouseholdOverviewReloadEvent( - projectId: projectId, - projectBeneficiaryType: - beneficiaryType, - ), - ); - }, - setAsHeadAction: () { - ctx - .read() - .add( - HouseholdOverviewSetAsHeadEvent( - individualModel: e, - projectId: - RegistrationDeliverySingleton() - .projectId!, + .beneficiaryClientReferenceId == + wrapper.household + ?.clientReferenceId, + ); + + await context.router.root.push( + BeneficiaryRegistrationWrapperRoute( + initialState: + BeneficiaryRegistrationEditHouseholdState( + addressModel: address, + individualModel: state + .householdMemberWrapper + .members ?? + [], householdModel: state .householdMemberWrapper - .household, - projectBeneficiaryType: - beneficiaryType, + .household!, + registrationDate: date, + projectBeneficiaryModel: + projectBeneficiary, ), - ); - - Navigator.of( - context, - rootNavigator: true, - ).pop(); - }, - deleteMemberAction: () { - DigitDialog.show( + children: [ + HouseholdLocationRoute(), + ], + ), + ); + }, + ), + ActionCardModel( + icon: Icons.delete, + label: localizations.translate(i18 + .householdOverView + .householdOverViewDeleteLabel), + action: () => DigitDialog.show( context, options: DigitDialogOptions( - titlePadding: - const EdgeInsets.fromLTRB( - kPadding * 2, - kPadding * 2, - kPadding * 2, - kPadding / 2, - ), titleText: localizations.translate(i18 .householdOverView @@ -606,29 +251,14 @@ class _HouseholdOverviewPageState .householdOverViewPrimaryActionLabel), action: (ctx) { Navigator.of( - context, + ctx, rootNavigator: true, ) ..pop() ..pop(); - context - .read< - HouseholdOverviewBloc>() - .add( - HouseholdOverviewEvent - .selectedIndividual( - individualModel: e, - ), - ); - - context.router - .popUntilRouteWithName( - SearchBeneficiaryRoute - .name, - ); context.router.push( ReasonForDeletionRoute( - isHousholdDelete: false, + isHousholdDelete: true, ), ); }, @@ -646,134 +276,483 @@ class _HouseholdOverviewPageState }, ), ), - ); - }, - isNotEligible: - RegistrationDeliverySingleton() - .projectType - ?.cycles != - null - ? !checkEligibilityForAgeAndSideEffect( - DigitDOBAge( - years: ageInYears, - months: ageInMonths, - ), - RegistrationDeliverySingleton() - .projectType, - (taskdata ?? []) - .isNotEmpty - ? taskdata?.last - : null, - sideEffectData, - ) - : false, - name: e.name?.givenName ?? ' - ', - years: (e.dateOfBirth == null - ? null - : DigitDateUtils.calculateAge( - DigitDateUtils - .getFormattedDateToDateTime( - e.dateOfBirth!, - ) ?? - DateTime.now(), - ).years) ?? - 0, - months: (e.dateOfBirth == null - ? null - : DigitDateUtils.calculateAge( - DigitDateUtils - .getFormattedDateToDateTime( - e.dateOfBirth!, - ) ?? - DateTime.now(), - ).months) ?? - 0, - gender: e.gender?.name, - isBeneficiaryRefused: - isBeneficiaryRefused && - !checkStatus( - taskdata, - currentCycle, - ), - isBeneficiaryReferred: - isBeneficiaryReferred, - isDelivered: taskdata == null - ? false - : taskdata.isNotEmpty && - !checkStatus( - taskdata, - currentCycle, - ) - // TODO Need to pass the cycle - ? true - : false, - localizations: localizations, - projectBeneficiaryClientReferenceId: - projectBeneficiaryId, - ); - }, - ).toList(), - ), - const SizedBox( - height: kPadding, + ), + ), + ], + ), + ); + }, + iconText: localizations.translate( + i18.householdOverView + .householdOverViewEditIconText, ), - Center( + icon: Icons.edit, + ), + ), + BlocBuilder( + builder: (ctx, deliverInterventionState) => + Offstage( + offstage: beneficiaryType == + BeneficiaryType.individual, + child: Align( + alignment: Alignment.centerLeft, child: DigitIconButton( - onPressed: () async { - final bloc = context - .read(); + icon: getStatusAttributes(state, + deliverInterventionState)['icon'], + iconText: localizations.translate( + getStatusAttributes(state, + deliverInterventionState)[ + 'textLabel'], + ), + iconTextColor: getStatusAttributes(state, + deliverInterventionState)['color'], + iconColor: getStatusAttributes(state, + deliverInterventionState)['color'], + ), + ), + ), + ), + Padding( + padding: const EdgeInsets.only( + left: kPadding, + right: kPadding, + ), + child: Text( + localizations.translate(i18.householdOverView + .householdOverViewLabel), + style: theme.textTheme.displayMedium, + ), + ), + Padding( + padding: const EdgeInsets.only( + left: kPadding, + right: kPadding, + ), + child: DigitTableCard( + element: { + localizations.translate(i18 + .householdOverView + .householdOverViewHouseholdHeadNameLabel): + state.householdMemberWrapper + .headOfHousehold?.name?.givenName, + localizations.translate( + i18.householdLocation + .administrationAreaFormLabel, + ): RegistrationDeliverySingleton() + .boundary + ?.name, + localizations.translate( + i18.deliverIntervention.memberCountText, + ): state.householdMemberWrapper.household + ?.memberCount, + }, + ), + ), + Column( + children: + (state.householdMemberWrapper.members ?? []) + .map( + (e) { + final isHead = state + .householdMemberWrapper + .headOfHousehold + ?.clientReferenceId == + e.clientReferenceId; + final projectBeneficiaryId = state + .householdMemberWrapper + .projectBeneficiaries + ?.firstWhereOrNull((b) => + b.beneficiaryClientReferenceId == + e.clientReferenceId) + ?.clientReferenceId; + + final projectBeneficiary = + // beneficiaryType != + // BeneficiaryType.individual + // ? [ + // state.householdMemberWrapper + // .projectBeneficiaries.first, + // ] + // : + state.householdMemberWrapper + .projectBeneficiaries + ?.where( + (element) => + element + .beneficiaryClientReferenceId == + e.clientReferenceId, + ) + .toList(); + + final taskData = (projectBeneficiary ?? []) + .isNotEmpty + ? state.householdMemberWrapper.tasks + ?.where((element) => + element + .projectBeneficiaryClientReferenceId == + projectBeneficiary + ?.first.clientReferenceId) + .toList() + : null; + final referralData = (projectBeneficiary ?? + []) + .isNotEmpty + ? state.householdMemberWrapper.referrals + ?.where((element) => + element + .projectBeneficiaryClientReferenceId == + projectBeneficiary + ?.first.clientReferenceId) + .toList() + : null; + final sideEffectData = taskData != null && + taskData.isNotEmpty + ? state + .householdMemberWrapper.sideEffects + ?.where((element) => + element.taskClientReferenceId == + taskData.last.clientReferenceId) + .toList() + : null; + final ageInYears = + DigitDateUtils.calculateAge( + DigitDateUtils.getFormattedDateToDateTime( + e.dateOfBirth!, + ) ?? + DateTime.now(), + ).years; + final ageInMonths = + DigitDateUtils.calculateAge( + DigitDateUtils.getFormattedDateToDateTime( + e.dateOfBirth!, + ) ?? + DateTime.now(), + ).months; + final currentCycle = + RegistrationDeliverySingleton() + .projectType + ?.cycles + ?.firstWhereOrNull( + (e) => + (e.startDate) < + DateTime.now() + .millisecondsSinceEpoch && + (e.endDate) > + DateTime.now() + .millisecondsSinceEpoch, + ); + + final isBeneficiaryRefused = + checkIfBeneficiaryRefused( + taskData, + ); + final isBeneficiaryReferred = + checkIfBeneficiaryReferred( + referralData, + currentCycle, + ); + + return MemberCard( + isHead: isHead, + individual: e, + tasks: taskData, + sideEffects: sideEffectData, + editMemberAction: () async { + final bloc = + ctx.read(); - final wrapper = - state.householdMemberWrapper; - final address = - wrapper.household.address; + Navigator.of( + context, + rootNavigator: true, + ).pop(); - if (address == null) return; + final address = e.address; + if (address == null || + address.isEmpty) { + return; + } final projectId = RegistrationDeliverySingleton() .projectId!; - await context.router.push( + bloc.add( + HouseholdOverviewReloadEvent( + projectId: projectId, + projectBeneficiaryType: + beneficiaryType, + ), + ); + + await context.router.root.push( BeneficiaryRegistrationWrapperRoute( initialState: - BeneficiaryRegistrationAddMemberState( - addressModel: address, - householdModel: wrapper.household, + BeneficiaryRegistrationEditIndividualState( + individualModel: e, + householdModel: state + .householdMemberWrapper + .household!, + addressModel: address.first, + projectBeneficiaryModel: state + .householdMemberWrapper + .projectBeneficiaries + ?.firstWhereOrNull( + (element) => + element + .beneficiaryClientReferenceId == + (RegistrationDeliverySingleton() + .beneficiaryType == + BeneficiaryType + .individual + ? e.clientReferenceId + : state + .householdMemberWrapper + .household + ?.clientReferenceId), + ), ), children: [ - IndividualDetailsRoute(), + IndividualDetailsRoute( + isHeadOfHousehold: isHead, + ), ], ), ); - bloc.add( - HouseholdOverviewReloadEvent( - projectId: projectId, - projectBeneficiaryType: - beneficiaryType, + }, + setAsHeadAction: () { + ctx.read().add( + HouseholdOverviewSetAsHeadEvent( + individualModel: e, + projectId: + RegistrationDeliverySingleton() + .projectId!, + householdModel: state + .householdMemberWrapper + .household!, + projectBeneficiaryType: + beneficiaryType, + ), + ); + + Navigator.of( + context, + rootNavigator: true, + ).pop(); + }, + deleteMemberAction: () { + DigitDialog.show( + context, + options: DigitDialogOptions( + titlePadding: + const EdgeInsets.fromLTRB( + kPadding * 2, + kPadding * 2, + kPadding * 2, + kPadding / 2, + ), + titleText: localizations.translate(i18 + .householdOverView + .householdOverViewActionCardTitle), + primaryAction: DigitDialogActions( + label: localizations.translate(i18 + .householdOverView + .householdOverViewPrimaryActionLabel), + action: (ctx) { + Navigator.of( + context, + rootNavigator: true, + ) + ..pop() + ..pop(); + context + .read< + HouseholdOverviewBloc>() + .add( + HouseholdOverviewEvent + .selectedIndividual( + individualModel: e, + ), + ); + + context.router + .popUntilRouteWithName( + SearchBeneficiaryRoute.name, + ); + context.router.push( + ReasonForDeletionRoute( + isHousholdDelete: false, + ), + ); + }, + ), + secondaryAction: DigitDialogActions( + label: localizations.translate(i18 + .householdOverView + .householdOverViewSecondaryActionLabel), + action: (context) { + Navigator.of( + context, + rootNavigator: true, + ).pop(); + }, + ), ), ); }, - iconText: localizations.translate( - i18.householdOverView - .householdOverViewAddActionText, - ), - icon: Icons.add_circle, - ), + isNotEligible: RegistrationDeliverySingleton() + .projectType + ?.cycles != + null + ? !checkEligibilityForAgeAndSideEffect( + DigitDOBAge( + years: ageInYears, + months: ageInMonths, + ), + RegistrationDeliverySingleton() + .projectType, + (taskData ?? []).isNotEmpty + ? taskData?.last + : null, + sideEffectData, + ) + : false, + name: e.name?.givenName ?? ' - ', + years: (e.dateOfBirth == null + ? null + : DigitDateUtils.calculateAge( + DigitDateUtils + .getFormattedDateToDateTime( + e.dateOfBirth!, + ) ?? + DateTime.now(), + ).years) ?? + 0, + months: (e.dateOfBirth == null + ? null + : DigitDateUtils.calculateAge( + DigitDateUtils + .getFormattedDateToDateTime( + e.dateOfBirth!, + ) ?? + DateTime.now(), + ).months) ?? + 0, + gender: e.gender?.name, + isBeneficiaryRefused: + isBeneficiaryRefused && + !checkStatus( + taskData, + currentCycle, + ), + isBeneficiaryReferred: + isBeneficiaryReferred, + isDelivered: taskData == null + ? false + : taskData.isNotEmpty && + !checkStatus( + taskData, + currentCycle, + ) + ? true + : false, + localizations: localizations, + projectBeneficiaryClientReferenceId: + projectBeneficiaryId, + ); + }, + ).toList(), + ), + const SizedBox( + height: kPadding, + ), + Center( + child: DigitIconButton( + onPressed: () => addIndividual( + context, + state.householdMemberWrapper.household!, ), - const SizedBox( - height: kPadding, + iconText: localizations.translate( + i18.householdOverView + .householdOverViewAddActionText, ), - ], + icon: Icons.add_circle, + ), ), - ), + const SizedBox( + height: kPadding, + ), + ], ), - ], - ); - }, + ), + ), + ], ), ); }, ), ); } + + addIndividual(BuildContext context, HouseholdModel household) async { + final bloc = context.read(); + + final address = household.address; + + if (address == null) return; + bloc.add( + HouseholdOverviewReloadEvent( + projectId: RegistrationDeliverySingleton().projectId!, + projectBeneficiaryType: + RegistrationDeliverySingleton().beneficiaryType!, + ), + ); + await context.router.push( + BeneficiaryRegistrationWrapperRoute( + initialState: BeneficiaryRegistrationAddMemberState( + addressModel: address, + householdModel: household, + ), + children: [ + IndividualDetailsRoute(), + ], + ), + ); + } + + getStatusAttributes(HouseholdOverviewState state, + DeliverInterventionState deliverInterventionState) { + var textLabel = + i18.householdOverView.householdOverViewNotRegisteredIconLabel; + var color = DigitTheme.instance.colorScheme.error; + var icon = Icons.info_rounded; + + if ((state.householdMemberWrapper.projectBeneficiaries ?? []).isNotEmpty) { + textLabel = deliverInterventionState.tasks?.isNotEmpty ?? false + ? (deliverInterventionState.tasks?.first.status == + Status.administeredSuccess.toValue() + ? i18.householdOverView.householdOverViewDeliveredIconLabel + : i18.householdOverView.householdOverViewNotDeliveredIconLabel) + : i18.householdOverView.householdOverViewRegisteredIconLabel; + + color = deliverInterventionState.tasks?.isNotEmpty ?? false + ? (deliverInterventionState.tasks?.first.status == + Status.administeredSuccess.toValue() + ? DigitTheme.instance.colorScheme.onSurfaceVariant + : DigitTheme.instance.colorScheme.error) + : DigitTheme.instance.colorScheme.onSurfaceVariant; + + icon = deliverInterventionState.tasks?.isNotEmpty ?? false + ? (deliverInterventionState.tasks?.first.status == + Status.administeredSuccess.toValue() + ? Icons.check_circle + : Icons.info_rounded) + : Icons.check_circle; + } else { + textLabel = i18.householdOverView.householdOverViewNotRegisteredIconLabel; + color = DigitTheme.instance.colorScheme.error; + icon = Icons.info_rounded; + } + + return {'textLabel': textLabel, 'color': color, 'icon': icon}; + } } diff --git a/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart b/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart index 53dc77eb2..d6f9f5b61 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart @@ -144,7 +144,7 @@ class _RecordPastDeliveryDetailsPageState taskSearch: TaskSearchModel( projectBeneficiaryClientReferenceId: bloc.state .householdMemberWrapper.projectBeneficiaries - .map((e) => e.clientReferenceId) + ?.map((e) => e.clientReferenceId) .toList(), ), )); diff --git a/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart b/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart index f0ab5c886..1dd998341 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart @@ -380,7 +380,8 @@ class _ReferBeneficiaryPageState extends LocalizedState { return fb.group({ _dateOfReferralKey: FormControl(value: DateTime.now()), _administrativeUnitKey: FormControl( - value: RegistrationDeliverySingleton().boundary!.name), + value: localizations.translate( + RegistrationDeliverySingleton().boundary!.name.toString())), _referredByKey: FormControl( value: RegistrationDeliverySingleton().loggedInUserUuid, validators: [Validators.required], diff --git a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart index 898f4b363..775c81a1a 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart @@ -1,9 +1,5 @@ -import 'dart:math'; - import 'package:auto_route/auto_route.dart'; -import 'package:collection/collection.dart'; import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/atoms/digit_toaster.dart'; import 'package:digit_components/widgets/atoms/selection_card.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; @@ -13,7 +9,6 @@ import 'package:registration_delivery/registration_delivery.dart'; import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; -import '../../models/entities/additional_fields_type.dart'; import '../../models/entities/status.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../widgets/back_navigation_help_header.dart'; @@ -53,236 +48,244 @@ class _RefusedDeliveryPageState extends LocalizedState { return Scaffold( body: ReactiveFormBuilder( form: () => buildForm(), - builder: (_, form, __) => BlocBuilder( - builder: (context, registrationState) { - return ScrollableContent( - enableFixedButton: true, - header: const Column( - children: [ - BackNavigationHelpHeaderWidget( - showcaseButton: ShowcaseButton(), - showHelp: false, + builder: (_, form, __) => + BlocBuilder( + builder: (context, registrationState) { + return ScrollableContent( + enableFixedButton: true, + header: const Column( + children: [ + BackNavigationHelpHeaderWidget( + showcaseButton: ShowcaseButton(), + showHelp: false, + ), + ], ), - ], - ), - footer: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: - const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: DigitElevatedButton( - onPressed: () { - form.markAllAsTouched(); + footer: DigitCard( + margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), + padding: + const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), + child: DigitElevatedButton( + onPressed: () { + form.markAllAsTouched(); - if (form.control(_reasonOfRefusal).value == null) { - setState(() { - form.control(_reasonOfRefusal).setErrors({'': true}); - }); - } + if (form.control(_reasonOfRefusal).value == null) { + setState(() { + form + .control(_reasonOfRefusal) + .setErrors({'': true}); + }); + } - if (!form.valid) return; + if (!form.valid) return; - final reasonOfRefusal = - form.control(_reasonOfRefusal).value; + final reasonOfRefusal = + form.control(_reasonOfRefusal).value; - final refusalComment = form.control(_deliveryCommentKey).value; + final refusalComment = + form.control(_deliveryCommentKey).value; - final projectBeneficiary = - RegistrationDeliverySingleton().beneficiaryType != - BeneficiaryType.individual - ? [registrationState.householdMemberWrapper.projectBeneficiaries.first] - : registrationState.householdMemberWrapper.projectBeneficiaries - .where( - (element) => - element.beneficiaryClientReferenceId == - registrationState.selectedIndividual?.clientReferenceId, - ) - .toList(); + final projectBeneficiary = + RegistrationDeliverySingleton().beneficiaryType != + BeneficiaryType.individual + ? [ + registrationState.householdMemberWrapper + .projectBeneficiaries?.first + ] + : registrationState.householdMemberWrapper + .projectBeneficiaries + ?.where( + (element) => + element + .beneficiaryClientReferenceId == + registrationState.selectedIndividual + ?.clientReferenceId, + ) + .toList(); - context - .read() - .add( - DeliverInterventionSubmitEvent( - task: TaskModel( - projectBeneficiaryClientReferenceId: projectBeneficiary.first.clientReferenceId, //TODO: need to check for individual based campaign - clientReferenceId: - IdGen.i.identifier, - tenantId: - RegistrationDeliverySingleton() - .tenantId, - rowVersion: 1, - auditDetails: AuditDetails( - createdBy: - RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context - .millisecondsSinceEpoch(), - ), - projectId: - RegistrationDeliverySingleton() - .projectId, - status: Status - .administeredFailed - .toValue(), - clientAuditDetails: - ClientAuditDetails( - createdBy: - RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: context - .millisecondsSinceEpoch(), - ), - additionalFields: - TaskAdditionalFields( - version: 1, - fields: [ - AdditionalField( - 'taskStatus', - reasonOfRefusal, - ), - AdditionalField( - 'comments', - refusalComment, + context.read().add( + DeliverInterventionSubmitEvent( + task: TaskModel( + projectBeneficiaryClientReferenceId: + projectBeneficiary?.first + ?.clientReferenceId, //TODO: need to check for individual based campaign + clientReferenceId: IdGen.i.identifier, + tenantId: RegistrationDeliverySingleton() + .tenantId, + rowVersion: 1, + auditDetails: AuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: + context.millisecondsSinceEpoch(), + ), + projectId: RegistrationDeliverySingleton() + .projectId, + status: Status.administeredFailed.toValue(), + clientAuditDetails: ClientAuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: + context.millisecondsSinceEpoch(), + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: + context.millisecondsSinceEpoch(), + ), + additionalFields: TaskAdditionalFields( + version: 1, + fields: [ + AdditionalField( + 'taskStatus', + reasonOfRefusal, + ), + AdditionalField( + 'comments', + refusalComment, + ), + ], + ), + ), + isEditing: false, + boundaryModel: + RegistrationDeliverySingleton().boundary!, ), - ], - ), - ), - isEditing: false, - boundaryModel: - RegistrationDeliverySingleton() - .boundary!, - ), - ); - context - .router - .popAndPush( - HouseholdAcknowledgementRoute( + ); + context.router + .popAndPush(HouseholdAcknowledgementRoute( enableViewHousehold: true, )); - }, - child: Center( - child: Text( - localizations.translate( - i18.householdLocation.actionLabel, + }, + child: Center( + child: Text( + localizations.translate( + i18.householdLocation.actionLabel, + ), + ), ), ), ), - ), - ), - slivers: [ - SliverToBoxAdapter( - child: DigitCard( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: const EdgeInsets.fromLTRB( - 0, 0, 0, kPadding), - child: Text( - localizations.translate( - i18.deliverIntervention.refusedDeliveryLabel, - ), - style: theme.textTheme.displayMedium, - ), - ), - Column(children: [ - refusedDeliveryShowcaseData.dateOfVisit.buildWith( - child: DigitDateFormPicker( - isEnabled: false, - formControlName: - _dataOfRefusalKey, - label: localizations - .translate( - i18.deliverIntervention - .refusedDeliveryVisitDateLabel, - ), - confirmText: - localizations - .translate( - i18.common - .coreCommonOk, + slivers: [ + SliverToBoxAdapter( + child: DigitCard( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB( + 0, 0, 0, kPadding), + child: Text( + localizations.translate( + i18.deliverIntervention + .refusedDeliveryLabel, + ), + style: theme.textTheme.displayMedium, ), - cancelText: - localizations - .translate( - i18.common - .coreCommonCancel, + ), + Column(children: [ + refusedDeliveryShowcaseData.dateOfVisit + .buildWith( + child: DigitDateFormPicker( + isEnabled: false, + formControlName: _dataOfRefusalKey, + label: localizations.translate( + i18.deliverIntervention + .refusedDeliveryVisitDateLabel, + ), + confirmText: localizations.translate( + i18.common.coreCommonOk, + ), + cancelText: localizations.translate( + i18.common.coreCommonCancel, + ), + isRequired: false, + padding: const EdgeInsets.only( + top: kPadding, + ), + ), ), - isRequired: false, - padding: - const EdgeInsets - .only( - top: kPadding, + const SizedBox( + height: kPadding, ), - ), - ), - const SizedBox(height: kPadding,), - refusedDeliveryShowcaseData.reasonOfRefusal.buildWith( - child: LabeledField( - label: localizations - .translate( - i18.deliverIntervention - .reasonForRefusalLabel, + refusedDeliveryShowcaseData.reasonOfRefusal + .buildWith( + child: LabeledField( + label: localizations.translate( + i18.deliverIntervention + .reasonForRefusalLabel, + ), + isRequired: true, + child: SelectionBox( + width: 122, + allowMultipleSelection: false, + options: RegistrationDeliverySingleton() + .refusalReasons ?? + [], + onSelectionChanged: (value) { + form + .control(_reasonOfRefusal) + .markAsTouched(); + setState(() { + if (value.isNotEmpty) { + form + .control(_reasonOfRefusal) + .value = value.first; + } else { + form + .control(_reasonOfRefusal) + .value = null; + setState(() { + form + .control(_reasonOfRefusal) + .setErrors({'': true}); + }); + } + }); + }, + valueMapper: (value) { + return localizations + .translate(value.toString()); + }, + errorMessage: form + .control(_reasonOfRefusal) + .hasErrors && + form + .control(_reasonOfRefusal) + .touched + ? localizations.translate( + i18.common.corecommonRequired) + : null, + ), + ), ), - isRequired: true, - child: SelectionBox( - width: 122, - allowMultipleSelection: false, - options: RegistrationDeliverySingleton() - .refusalReasons ?? - [], - onSelectionChanged: (value) { - form.control(_reasonOfRefusal).markAsTouched(); - setState(() { - if(value.isNotEmpty){ - form.control(_reasonOfRefusal).value = value.first; - }else{ - form.control(_reasonOfRefusal).value = null; - setState(() { - form.control(_reasonOfRefusal).setErrors({'': true}); - }); - } - }); - }, - valueMapper: (value) { - return localizations - .translate(value.toString()); - }, - errorMessage: form.control(_reasonOfRefusal).hasErrors && form.control(_reasonOfRefusal).touched - ? localizations.translate(i18.common.corecommonRequired) - : null, + refusedDeliveryShowcaseData.comments.buildWith( + child: DigitTextFormField( + formControlName: _deliveryCommentKey, + label: localizations.translate(i18 + .deliverIntervention + .reasonForRefusalCommentLabel), ), - ), - ), - refusedDeliveryShowcaseData.comments.buildWith( - child: DigitTextFormField( - formControlName: _deliveryCommentKey, - label: localizations.translate(i18.deliverIntervention.reasonForRefusalCommentLabel), - ), - ), - ]), - ], + ), + ]), + ], + ), + ), ), - ), - ), - ], - ); - }, - )), + ], + ); + }, + )), ); } FormGroup buildForm() { return fb.group({ _dataOfRefusalKey: - FormControl(value: DateTime.now(), validators: []), - _reasonOfRefusal: FormControl(value: null, validators: [Validators.required]), + FormControl(value: DateTime.now(), validators: []), + _reasonOfRefusal: + FormControl(value: null, validators: [Validators.required]), _deliveryCommentKey: FormControl(value: null), }); } diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart index b6f73e6f3..a3930e3c1 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart @@ -2,13 +2,9 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_data_model/models/entities/individual.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:registration_delivery/models/entities/project_beneficiary.dart'; +import 'package:registration_delivery/registration_delivery.dart'; -import '../../blocs/beneficiary_registration/beneficiary_registration.dart'; -import '../../models/entities/household.dart'; -import '../../models/entities/household_member.dart'; import '../../utils/extensions/extensions.dart'; -import '../../utils/utils.dart'; @RoutePage() class BeneficiaryRegistrationWrapperPage extends StatelessWidget @@ -39,17 +35,40 @@ class BeneficiaryRegistrationWrapperPage extends StatelessWidget final projectBeneficiary = context.repository(context); + final task = context.repository(context); + final sideEffect = + context.repository(context); + final referral = + context.repository(context); return BlocProvider( - create: (context) => BeneficiaryRegistrationBloc( - initialState, - individualRepository: individual, - householdRepository: household, - householdMemberRepository: householdMember, - projectBeneficiaryRepository: projectBeneficiary, - beneficiaryType: beneficiaryType!, + create: (_) => HouseholdOverviewBloc( + HouseholdOverviewState( + householdMemberWrapper: HouseholdMemberWrapper( + household: initialState.householdModel, + headOfHousehold: null, + members: [], + projectBeneficiaries: []), + ), + individualRepository: individual, + householdRepository: household, + householdMemberRepository: householdMember, + projectBeneficiaryRepository: projectBeneficiary, + beneficiaryType: RegistrationDeliverySingleton().beneficiaryType!, + taskDataRepository: task, + sideEffectDataRepository: sideEffect, + referralDataRepository: referral), + child: BlocProvider( + create: (context) => BeneficiaryRegistrationBloc( + initialState, + individualRepository: individual, + householdRepository: household, + householdMemberRepository: householdMember, + projectBeneficiaryRepository: projectBeneficiary, + beneficiaryType: beneficiaryType!, + ), + child: this, ), - child: this, ); } } diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart index f33e70182..6dd61e0db 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart @@ -5,6 +5,7 @@ import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; +import 'package:registration_delivery/blocs/household_overview/household_overview.dart'; import 'package:registration_delivery/models/entities/additional_fields_type.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; @@ -189,8 +190,9 @@ class _HouseHoldDetailsPageState extends LocalizedState { .clientAuditDetails!.createdBy, createdTime: householdModel .clientAuditDetails!.createdTime, - lastModifiedBy: householdModel - .clientAuditDetails!.lastModifiedBy, + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, lastModifiedTime: DateTime.now().millisecondsSinceEpoch, ) @@ -202,6 +204,14 @@ class _HouseHoldDetailsPageState extends LocalizedState { 1, fields: [ //[TODO: Use pregnant women form value based on project config + ...?householdModel.additionalFields?.fields + .where((e) => + e.key != + AdditionalFieldsType.pregnantWomen + .toValue() && + e.key != + AdditionalFieldsType.children + .toValue()), AdditionalField( AdditionalFieldsType.pregnantWomen .toValue(), @@ -257,6 +267,20 @@ class _HouseHoldDetailsPageState extends LocalizedState { ), ), ); + final overviewBloc = + context.read(); + + overviewBloc.add( + HouseholdOverviewReloadEvent( + projectId: RegistrationDeliverySingleton() + .projectId + .toString(), + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType ?? + BeneficiaryType.household, + ), + ); (router.parent() as StackRouter).maybePop(); }, diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index 3470aa262..102ae89c9 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -1,5 +1,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; +import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_components/widgets/atoms/text_block.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/models/entities/address_type.dart'; @@ -41,6 +42,12 @@ class _HouseholdLocationPageState static const _accuracyKey = 'accuracy'; static const maxLength = 64; + @override + void initState() { + context.read().add(const LoadLocationEvent()); + super.initState(); + } + @override Widget build(BuildContext context) { final theme = Theme.of(context); @@ -100,123 +107,159 @@ class _HouseholdLocationPageState form.control(_landmarkKey).value as String?; final postalCode = form.control(_postalCodeKey).value as String?; + context + .read() + .add(const LoadLocationEvent()); + DigitComponentsUtils().showLocationCapturingDialog( + context, + localizations + .translate(i18.common.locationCapturing), + DigitSyncDialogType.inProgress); + Future.delayed(const Duration(seconds: 2), () async { + // After delay, hide the initial dialog + DigitComponentsUtils().hideLocationDialog(context); + await DigitSyncDialog.show(context, + type: DigitSyncDialogType.complete, + label: localizations + .translate(i18.common.locationCaptured), + primaryAction: DigitDialogActions( + label: localizations.translate( + i18.beneficiaryDetails.ctaProceed, + ), + action: (ctx) async { + DigitComponentsUtils() + .hideLocationDialog(context); + registrationState.maybeWhen( + orElse: () { + return; + }, + create: ( + address, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + searchQuery, + loading, + isHeadOfHousehold, + ) { + var addressModel = AddressModel( + addressLine1: addressLine1 != null && + addressLine1.trim().isNotEmpty + ? addressLine1 + : null, + addressLine2: addressLine2 != null && + addressLine2.trim().isNotEmpty + ? addressLine2 + : null, + landmark: landmark != null && + landmark.trim().isNotEmpty + ? landmark + : null, + pincode: postalCode != null && + postalCode.trim().isNotEmpty + ? postalCode + : null, + type: AddressType.correspondence, + latitude: + form.control(_latKey).value ?? + locationState.latitude, + longitude: + form.control(_lngKey).value ?? + locationState.longitude, + locationAccuracy: form + .control(_accuracyKey) + .value ?? + locationState.accuracy, + locality: LocalityModel( + code: + RegistrationDeliverySingleton() + .boundary! + .code!, + name: + RegistrationDeliverySingleton() + .boundary! + .name, + ), + tenantId: + RegistrationDeliverySingleton() + .tenantId, + rowVersion: 1, + auditDetails: AuditDetails( + createdBy: + RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: context + .millisecondsSinceEpoch(), + ), + clientAuditDetails: + ClientAuditDetails( + createdBy: + RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: context + .millisecondsSinceEpoch(), + ), + ); - registrationState.maybeWhen( - orElse: () { - return; - }, - create: ( - address, - householdModel, - individualModel, - projectBeneficiaryModel, - registrationDate, - searchQuery, - loading, - isHeadOfHousehold, - ) { - var addressModel = AddressModel( - addressLine1: addressLine1 != null && - addressLine1.trim().isNotEmpty - ? addressLine1 - : null, - addressLine2: addressLine2 != null && - addressLine2.trim().isNotEmpty - ? addressLine2 - : null, - landmark: landmark != null && - landmark.trim().isNotEmpty - ? landmark - : null, - pincode: postalCode != null && - postalCode.trim().isNotEmpty - ? postalCode - : null, - type: AddressType.correspondence, - latitude: form.control(_latKey).value ?? - locationState.latitude, - longitude: form.control(_lngKey).value ?? - locationState.longitude, - locationAccuracy: - form.control(_accuracyKey).value ?? - locationState.accuracy, - locality: LocalityModel( - code: RegistrationDeliverySingleton() - .boundary! - .code!, - name: RegistrationDeliverySingleton() - .boundary! - .name, - ), - tenantId: - RegistrationDeliverySingleton().tenantId, - rowVersion: 1, - auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context.millisecondsSinceEpoch(), - ), - clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context.millisecondsSinceEpoch(), - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: - context.millisecondsSinceEpoch(), - ), - ); - - bloc.add( - BeneficiaryRegistrationSaveAddressEvent( - addressModel, - ), - ); - router.push(HouseDetailsRoute()); - }, - editHousehold: ( - address, - householdModel, - individuals, - registrationDate, - projectBeneficiaryModel, - loading, - ) { - var addressModel = address.copyWith( - addressLine1: addressLine1 != null && - addressLine1.trim().isNotEmpty - ? addressLine1 - : null, - addressLine2: addressLine2 != null && - addressLine2.trim().isNotEmpty - ? addressLine2 - : null, - landmark: landmark != null && - landmark.trim().isNotEmpty - ? landmark - : null, - locality: address.locality, - pincode: postalCode != null && - postalCode.trim().isNotEmpty - ? postalCode - : null, - type: AddressType.correspondence, - latitude: form.control(_latKey).value, - longitude: form.control(_lngKey).value, - locationAccuracy: - form.control(_accuracyKey).value, - ); - // TODO [Linking of Voucher for Household based project need to be handled] + bloc.add( + BeneficiaryRegistrationSaveAddressEvent( + addressModel, + ), + ); + router.push(HouseDetailsRoute()); + }, + editHousehold: ( + address, + householdModel, + individuals, + registrationDate, + projectBeneficiaryModel, + loading, + ) { + var addressModel = address.copyWith( + addressLine1: addressLine1 != null && + addressLine1.trim().isNotEmpty + ? addressLine1 + : null, + addressLine2: addressLine2 != null && + addressLine2.trim().isNotEmpty + ? addressLine2 + : null, + landmark: landmark != null && + landmark.trim().isNotEmpty + ? landmark + : null, + locality: address.locality, + pincode: postalCode != null && + postalCode.trim().isNotEmpty + ? postalCode + : null, + type: AddressType.correspondence, + latitude: form.control(_latKey).value, + longitude: + form.control(_lngKey).value, + locationAccuracy: + form.control(_accuracyKey).value, + ); + // TODO [Linking of Voucher for Household based project need to be handled] - bloc.add( - BeneficiaryRegistrationSaveAddressEvent( - addressModel, - ), - ); - router.push(HouseDetailsRoute()); - }, - ); + bloc.add( + BeneficiaryRegistrationSaveAddressEvent( + addressModel, + ), + ); + router.push(HouseDetailsRoute()); + }, + ); + }, + )); + }); }, child: Center( child: Text( diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index 663e8f824..c6f975851 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -63,8 +63,17 @@ class _IndividualDetailsPageState return Scaffold( body: ReactiveFormBuilder( form: () => buildForm(bloc.state), - builder: (context, form, child) => BlocBuilder< + builder: (context, form, child) => BlocConsumer< BeneficiaryRegistrationBloc, BeneficiaryRegistrationState>( + listener: (context, state) { + state.mapOrNull( + persisted: (value) { + if (value.navigateToRoot) { + (router.parent() as StackRouter).maybePop(); + } + }, + ); + }, builder: (context, state) { return ScrollableContent( enableFixedButton: true, diff --git a/packages/registration_delivery/lib/pages/reason_for_deletion.dart b/packages/registration_delivery/lib/pages/reason_for_deletion.dart index 4834166f6..7e2e97916 100644 --- a/packages/registration_delivery/lib/pages/reason_for_deletion.dart +++ b/packages/registration_delivery/lib/pages/reason_for_deletion.dart @@ -57,7 +57,7 @@ class _ReasonForDeletionPageState projectId: RegistrationDeliverySingleton() .projectId!, householdModel: - state.householdMemberWrapper.household, + state.householdMemberWrapper.household!, individualModel: state.selectedIndividual!, projectBeneficiaryType: RegistrationDeliverySingleton() @@ -69,12 +69,12 @@ class _ReasonForDeletionPageState projectId: RegistrationDeliverySingleton() .projectId!, householdModel: - state.householdMemberWrapper.household, + state.householdMemberWrapper.household!, members: - state.householdMemberWrapper.members, + state.householdMemberWrapper.members!, projectBeneficiaryModel: state .householdMemberWrapper - .projectBeneficiaries + .projectBeneficiaries! .first, projectBeneficiaryType: RegistrationDeliverySingleton() diff --git a/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart b/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart index 7a9e9f82f..df6476f81 100644 --- a/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart +++ b/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart @@ -8,6 +8,7 @@ import '../blocs/household_details/household_details.dart'; import '../blocs/search_households/proximity_search.dart'; import '../blocs/search_households/search_bloc_common_wrapper.dart'; import '../blocs/search_households/search_by_head.dart'; +import '../blocs/search_households/search_by_status.dart'; import '../blocs/search_households/search_households.dart'; import '../blocs/search_households/tag_by_search.dart'; import '../data/repositories/local/registration_delivery_address.dart'; @@ -140,6 +141,34 @@ class RegistrationDeliveryWrapperPage extends StatelessWidget { ); }, ), + BlocProvider( + create: (context) { + return StatusSearchBloc( + beneficiaryType: + RegistrationDeliverySingleton().beneficiaryType!, + userUid: RegistrationDeliverySingleton().loggedInUserUuid!, + projectId: RegistrationDeliverySingleton().projectId!, + addressRepository: + context.read(), + projectBeneficiary: context.repository(context), + householdMember: context.repository(context), + household: context + .repository(context), + individual: + context.repository( + context), + taskDataRepository: + context.repository(context), + sideEffectDataRepository: + context.repository( + context), + referralDataRepository: context + .repository(context), + ); + }, + ), BlocProvider( create: (context) { return SearchBlocWrapper( @@ -147,6 +176,7 @@ class RegistrationDeliveryWrapperPage extends StatelessWidget { searchByHeadBloc: context.read(), proximitySearchBloc: context.read(), tagSearchBloc: context.read(), + statusSearchBloc: context.read(), ); }, ), diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index 95e7f3172..ca7f1d8fe 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -9,11 +9,13 @@ import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart'; import 'package:registration_delivery/registration_delivery.dart'; import '../../utils/i18_key_constants.dart' as i18; +import '../models/entities/status.dart'; import '../router/registration_delivery_router.gm.dart'; import '../utils/utils.dart'; import '../widgets/back_navigation_help_header.dart'; import '../widgets/beneficiary/view_beneficiary_card.dart'; import '../widgets/localized.dart'; +import '../widgets/status_filter/status_filter.dart'; @RoutePage() class SearchBeneficiaryPage extends LocalizedStatefulWidget { @@ -35,6 +37,7 @@ class _SearchBeneficiaryPageState double lat = 0.0; double long = 0.0; + List selectedFilters = []; SearchHouseholdsState searchHouseholdsState = const SearchHouseholdsState( loading: false, @@ -47,7 +50,7 @@ class _SearchBeneficiaryPageState void initState() { // Initialize the BlocWrapper with instances of SearchHouseholdsBloc, SearchMemberBloc, and ProximitySearchBloc blocWrapper = context.read(); - + context.read().add(const LoadLocationEvent()); // Listen to state changes blocWrapper.stateChanges.listen((state) { if (mounted) { @@ -101,6 +104,17 @@ class _SearchBeneficiaryPageState offset: blocWrapper.searchByHeadBloc.state.offset, limit: blocWrapper.searchByHeadBloc.state.limit, )); + } else if (metrics.atEdge && + selectedFilters.isNotEmpty && + metrics.pixels != 0) { + blocWrapper.statusSearchBloc.add( + SearchHouseholdsEvent.searchByStatus( + projectId: RegistrationDeliverySingleton().projectId!, + offset: blocWrapper.statusSearchBloc.state.offset, + limit: blocWrapper.statusSearchBloc.state.limit, + status: selectedFilters, + ), + ); } } // Return true to allow the notification to continue to be dispatched to further ancestors. @@ -138,6 +152,61 @@ class _SearchBeneficiaryPageState builder: (context, locationState) { return Column( children: [ + locationState.latitude != null + ? Row( + children: [ + Switch( + value: isProximityEnabled, + onChanged: (value) { + searchController.clear(); + setState(() { + isProximityEnabled = value; + lat = locationState.latitude!; + long = locationState.longitude!; + }); + + if (locationState.hasPermissions && + value && + locationState.latitude != + null && + locationState.longitude != + null && + RegistrationDeliverySingleton() + .maxRadius != + null && + isProximityEnabled) { + blocWrapper.proximitySearchBloc + .add( + SearchHouseholdsEvent + .searchByProximity( + latitude: + locationState.latitude!, + longititude: + locationState.longitude!, + projectId: + RegistrationDeliverySingleton() + .projectId!, + maxRadius: + RegistrationDeliverySingleton() + .maxRadius!, + offset: offset, + limit: limit, + ), + ); + } else { + blocWrapper.clearEvent(); + } + }, + ), + Text( + localizations.translate( + i18.searchBeneficiary + .proximityLabel, + ), + ), + ], + ) + : const Offstage(), DigitSearchBar( controller: searchController, hintText: localizations.translate( @@ -195,59 +264,82 @@ class _SearchBeneficiaryPageState } }, ), - locationState.latitude != null - ? Row( - children: [ - Switch( - value: isProximityEnabled, - onChanged: (value) { - searchController.clear(); - setState(() { - isProximityEnabled = value; - lat = locationState.latitude!; - long = locationState.longitude!; - }); - - if (locationState.hasPermissions && - value && - locationState.latitude != - null && - locationState.longitude != - null && - RegistrationDeliverySingleton() - .maxRadius != - null && - isProximityEnabled) { - blocWrapper.proximitySearchBloc - .add( - SearchHouseholdsEvent - .searchByProximity( - latitude: - locationState.latitude!, - longititude: - locationState.longitude!, - projectId: - RegistrationDeliverySingleton() - .projectId!, - maxRadius: - RegistrationDeliverySingleton() - .maxRadius!, - offset: offset, - limit: limit, - ), - ); - } else { - blocWrapper.clearEvent(); - } - }, - ), - Text( - localizations.translate( - i18.searchBeneficiary - .proximityLabel, - ), + Align( + alignment: Alignment.topLeft, + child: DigitIconButton( + iconText: getFilterIconNLabel()['label'], + icon: getFilterIconNLabel()['icon'], + onPressed: () => showFilterDialog(), + ), + ), + selectedFilters.isNotEmpty + ? Align( + alignment: Alignment.topLeft, + child: SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Row( + children: [ + for (var filter in selectedFilters) + Padding( + padding: const EdgeInsets.all( + kPadding / 2), + child: Container( + padding: + const EdgeInsets.all( + kPadding / 2), + decoration: BoxDecoration( + border: Border.all( + color: + const DigitColors() + .cloudGray), + borderRadius: + BorderRadius.circular( + kPadding / 2), + ), + child: Row( + children: [ + Text( + localizations + .translate(filter + .toValue()), + style: TextStyle( + color: const DigitColors() + .davyGray)), + Text( + '(${searchHouseholdsState.householdMembers.length})', + style: TextStyle( + color: const DigitColors() + .davyGray)), + const SizedBox( + width: kPadding), + GestureDetector( + onTap: () { + setState(() { + selectedFilters + .remove( + filter); + }); + blocWrapper + .clearEvent(); + }, + child: Container( + color: + const DigitColors() + .davyGray, + child: Icon( + Icons.close, + color: + const DigitColors() + .white, + ), + ), + ) + ], + ), + )), + ], ), - ], + ), ) : const Offstage(), ], @@ -299,8 +391,8 @@ class _SearchBeneficiaryPageState long, ), Coordinate( - i.household.address?.latitude, - i.household.address?.longitude, + i.household?.address?.latitude, + i.household?.address?.longitude, ), ); @@ -406,4 +498,42 @@ class _SearchBeneficiaryPageState ), ); } + + getFilterIconNLabel() { + return { + 'label': localizations.translate( + i18.searchBeneficiary.filterLabel, + ), + 'icon': Icons.filter_alt + }; + } + + showFilterDialog() async { + var filters = await DigitDialog.show(context, + options: DigitDialogOptions( + titleIcon: Icon(getFilterIconNLabel()['icon'], + color: const DigitColors().burningOrange), + titleText: getFilterIconNLabel()['label'], + content: StatusFilter(selectedFilters: selectedFilters), + )); + + if (filters != null) { + setState(() { + selectedFilters = filters; + }); + blocWrapper.statusSearchBloc.add( + SearchHouseholdsEvent.searchByStatus( + projectId: RegistrationDeliverySingleton().projectId!, + offset: offset, + limit: limit, + status: filters, + ), + ); + } else { + setState(() { + selectedFilters = []; + }); + blocWrapper.clearEvent(); + } + } } diff --git a/packages/registration_delivery/lib/registration_delivery.dart b/packages/registration_delivery/lib/registration_delivery.dart index 21ced98d1..98e2184ad 100644 --- a/packages/registration_delivery/lib/registration_delivery.dart +++ b/packages/registration_delivery/lib/registration_delivery.dart @@ -4,6 +4,7 @@ library registration_delivery; import 'package:dart_mappable/dart_mappable.dart'; + export 'blocs/beneficiary_registration/beneficiary_registration.dart'; export 'blocs/delivery_intervention/deliver_intervention.dart'; export 'blocs/household_details/household_details.dart'; @@ -16,7 +17,6 @@ export 'blocs/search_households/search_by_head.dart'; export 'blocs/search_households/search_households.dart'; export 'blocs/search_households/tag_by_search.dart'; export 'blocs/side_effects/side_effects.dart'; -export 'data/repositories/local/registration_delivery_address.dart'; export 'data/repositories/local/base/household_base.dart'; export 'data/repositories/local/base/household_member_base.dart'; export 'data/repositories/local/base/project_beneficiary_base.dart'; @@ -26,6 +26,7 @@ export 'data/repositories/local/household.dart'; export 'data/repositories/local/household_member.dart'; export 'data/repositories/local/project_beneficiary.dart'; export 'data/repositories/local/referral.dart'; +export 'data/repositories/local/registration_delivery_address.dart'; export 'data/repositories/local/side_effect.dart'; export 'data/repositories/local/task.dart'; export 'data/repositories/oplog/oplog.dart'; @@ -42,16 +43,6 @@ export 'models/entities/referral.dart'; export 'models/entities/side_effect.dart'; export 'models/entities/task.dart'; export 'models/entities/task_resource.dart'; -export 'router/registration_delivery_router.dart'; -export 'utils/typedefs.dart'; -export 'utils/utils.dart' show RegistrationDeliverySingleton; -export 'widgets/beneficiary/beneficiary_card.dart'; -export 'widgets/beneficiary/beneficiary_statistics_card.dart'; -export 'widgets/progress_bar/beneficiary_progress.dart'; -export 'pages/beneficiary/widgets/household_acknowledgement.dart'; -export 'pages/beneficiary/widgets/past_delivery.dart'; -export 'pages/beneficiary/widgets/record_delivery_cycle.dart'; -export 'pages/beneficiary/widgets/splash_acknowledgement.dart'; export 'pages/beneficiary/beneficiary_details.dart'; export 'pages/beneficiary/beneficiary_wrapper.dart'; export 'pages/beneficiary/deliver_intervention.dart'; @@ -61,6 +52,10 @@ export 'pages/beneficiary/household_overview.dart'; export 'pages/beneficiary/record_past_delivery_details.dart'; export 'pages/beneficiary/refer_beneficiary.dart'; export 'pages/beneficiary/side_effects.dart'; +export 'pages/beneficiary/widgets/household_acknowledgement.dart'; +export 'pages/beneficiary/widgets/past_delivery.dart'; +export 'pages/beneficiary/widgets/record_delivery_cycle.dart'; +export 'pages/beneficiary/widgets/splash_acknowledgement.dart'; export 'pages/beneficiary_registration/beneficiary_acknowledgement.dart'; export 'pages/beneficiary_registration/beneficiary_registration_wrapper.dart'; export 'pages/beneficiary_registration/household_details.dart'; @@ -69,3 +64,9 @@ export 'pages/beneficiary_registration/individual_details.dart'; export 'pages/reason_for_deletion.dart'; export 'pages/registration_delivery_wrapper.dart'; export 'pages/search_beneficiary.dart'; +export 'router/registration_delivery_router.dart'; +export 'utils/typedefs.dart'; +export 'utils/utils.dart' show RegistrationDeliverySingleton; +export 'widgets/beneficiary/beneficiary_card.dart'; +export 'widgets/beneficiary/beneficiary_statistics_card.dart'; +export 'widgets/progress_bar/beneficiary_progress.dart'; diff --git a/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart b/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart index 7ebb3b188..47738683a 100644 --- a/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart +++ b/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart @@ -12,8 +12,6 @@ import 'package:auto_route/auto_route.dart' as _i24; import 'package:digit_data_model/data_model.dart' as _i29; import 'package:flutter/material.dart' as _i25; import 'package:registration_delivery/blocs/app_localization.dart' as _i26; -import 'package:registration_delivery/blocs/beneficiary_registration/beneficiary_registration.dart' - as _i27; import 'package:registration_delivery/blocs/search_households/search_households.dart' as _i28; import 'package:registration_delivery/models/entities/task.dart' as _i30; @@ -60,6 +58,7 @@ import 'package:registration_delivery/pages/registration_delivery_wrapper.dart' as _i19; import 'package:registration_delivery/pages/search_beneficiary.dart' as _i20; import 'package:registration_delivery/pages/summary_page.dart' as _i23; +import 'package:registration_delivery/registration_delivery.dart' as _i27; abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { @override diff --git a/packages/registration_delivery/lib/utils/i18_key_constants.dart b/packages/registration_delivery/lib/utils/i18_key_constants.dart index 277a32705..e5c0c4170 100644 --- a/packages/registration_delivery/lib/utils/i18_key_constants.dart +++ b/packages/registration_delivery/lib/utils/i18_key_constants.dart @@ -114,6 +114,8 @@ class Common { String get scanBales => 'CORE_COMMON_SCAN_BALES'; String get ageInMonths => 'AGE_IN_MONTHS_LABEL'; + String get locationCapturing => 'CAPTURING_LOCATION'; + String get locationCaptured => 'LOCATION_CAPTURED'; } class SearchBeneficiary { @@ -141,6 +143,12 @@ class SearchBeneficiary { String get iconLabel => 'ICON_LABEL'; + String get filterLabel => 'FILTER_LABEL'; + + String get clearFilter => 'CLEAR_FILTER'; + + String get applyFilter => 'APPLY_FILTER'; + String get yearsAbbr => 'YEARS_ABBR'; String get monthsAbbr => 'MONTHS_ABBR'; @@ -412,6 +420,12 @@ class HouseholdOverView { String get householdOverViewDeliveredIconLabel => 'HOUSEHOLD_OVER_VIEW_DELIVERED_ICON_LABEL'; + String get householdOverViewRegisteredIconLabel => + 'HOUSEHOLD_OVER_VIEW_REGISTERED_ICON_LABEL'; + + String get householdOverViewNotRegisteredIconLabel => + 'HOUSEHOLD_OVER_VIEW_NOT_REGISTERED_ICON_LABEL'; + String get householdOverViewNotDeliveredIconLabel => 'HOUSEHOLD_OVER_VIEW_NOT_DELIVERED_ICON_LABEL'; diff --git a/packages/registration_delivery/lib/utils/utils.dart b/packages/registration_delivery/lib/utils/utils.dart index a074d831b..6f43efbe7 100644 --- a/packages/registration_delivery/lib/utils/utils.dart +++ b/packages/registration_delivery/lib/utils/utils.dart @@ -54,9 +54,7 @@ class CustomValidator { } bool checkStatus(List? tasks, ProjectCycle? currentCycle) { - if (currentCycle == null || - currentCycle.startDate == null || - currentCycle.endDate == null) { + if (currentCycle == null) { return false; } @@ -306,6 +304,7 @@ class RegistrationDeliverySingleton { List? _householdMemberDeletionReasonOptions; List? _deliveryCommentOptions; List? _symptomsTypes; + List? _searchHouseHoldFilter; List? _referralReasons; List? _houseStructureTypes; List? _refusalReasons; @@ -332,7 +331,8 @@ class RegistrationDeliverySingleton { required List? householdMemberDeletionReasonOptions, required List? deliveryCommentOptions, required List? symptomsTypes, - required List? referralReasons, + required List? searchHouseHoldFilter, + required List? referralReasons, required List? houseStructureTypes, required List? refusalReasons, }) { @@ -349,6 +349,7 @@ class RegistrationDeliverySingleton { householdMemberDeletionReasonOptions; _deliveryCommentOptions = deliveryCommentOptions; _symptomsTypes = symptomsTypes; + _searchHouseHoldFilter = searchHouseHoldFilter; _referralReasons = referralReasons; _houseStructureTypes = houseStructureTypes; _refusalReasons = refusalReasons; @@ -376,6 +377,7 @@ class RegistrationDeliverySingleton { _householdMemberDeletionReasonOptions; List? get deliveryCommentOptions => _deliveryCommentOptions; List? get symptomsTypes => _symptomsTypes; + List? get searchHouseHoldFilter => _searchHouseHoldFilter; List? get referralReasons => _referralReasons; List? get houseStructureTypes => _houseStructureTypes; List? get refusalReasons => _refusalReasons; diff --git a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart index fb191e0c5..b36483f2a 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart @@ -37,7 +37,8 @@ class BeneficiaryCard extends StatelessWidget { ), Offstage( offstage: status == null, - child: status == Status.visited.toValue() + child: status == Status.visited.toValue() || + status == Status.registered.toValue() ? DigitIconButton( icon: Icons.check_circle, iconText: RegistrationDeliveryLocalization.of(context) diff --git a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart index 683fe5b1f..328969b07 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart @@ -4,6 +4,7 @@ import 'package:digit_components/models/digit_table_model.dart'; import 'package:digit_components/utils/date_utils.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; +import 'package:registration_delivery/models/entities/project_beneficiary.dart'; import '../../blocs/search_households/search_households.dart'; import '../../models/entities/status.dart'; @@ -82,37 +83,38 @@ class _ViewBeneficiaryCardState extends LocalizedState { final currentCycle = RegistrationDeliverySingleton().projectType?.cycles?.firstWhereOrNull( (e) => - (e.startDate!) < DateTime.now().millisecondsSinceEpoch && - (e.endDate!) > DateTime.now().millisecondsSinceEpoch, + (e.startDate) < DateTime.now().millisecondsSinceEpoch && + (e.endDate) > DateTime.now().millisecondsSinceEpoch, // Return null when no matching cycle is found ); - final tableData = householdMember.members.map( + final tableData = householdMember.members?.map( (e) { final projectBeneficiary = - RegistrationDeliverySingleton().beneficiaryType != - BeneficiaryType.individual - ? [householdMember.projectBeneficiaries.first] - : householdMember.projectBeneficiaries - .where( - (element) => - element.beneficiaryClientReferenceId == - e.clientReferenceId, - ) - .toList(); + // RegistrationDeliverySingleton().beneficiaryType != + // BeneficiaryType.individual + // ? [householdMember.projectBeneficiaries.first] + // : + householdMember.projectBeneficiaries + ?.where( + (element) => + element.beneficiaryClientReferenceId == + e.clientReferenceId, + ) + .toList(); - final taskData = projectBeneficiary.isNotEmpty + final taskData = (projectBeneficiary ?? []).isNotEmpty ? householdMember.tasks ?.where((element) => element.projectBeneficiaryClientReferenceId == - projectBeneficiary.first.clientReferenceId) + projectBeneficiary?.first.clientReferenceId) .toList() : null; - final referralData = projectBeneficiary.isNotEmpty + final referralData = (projectBeneficiary ?? []).isNotEmpty ? householdMember.referrals ?.where((element) => element.projectBeneficiaryClientReferenceId == - projectBeneficiary.first.clientReferenceId) + projectBeneficiary?.first.clientReferenceId) .toList() : null; final sideEffects = taskData != null && taskData.isNotEmpty @@ -160,8 +162,6 @@ class _ViewBeneficiaryCardState extends LocalizedState { currentCycle, ); -// TODO need to pass the current cycle - final isStatusReset = checkStatus(taskData, currentCycle); final rowTableData = [ @@ -229,17 +229,17 @@ class _ViewBeneficiaryCardState extends LocalizedState { ).toList(); final ageInYears = DigitDateUtils.calculateAge( - householdMember.headOfHousehold.dateOfBirth != null + householdMember.headOfHousehold?.dateOfBirth != null ? DigitDateUtils.getFormattedDateToDateTime( - householdMember.headOfHousehold.dateOfBirth!, + householdMember.headOfHousehold!.dateOfBirth!, ) ?? DateTime.now() : DateTime.now(), ).years; final ageInMonths = DigitDateUtils.calculateAge( - householdMember.headOfHousehold.dateOfBirth != null + householdMember.headOfHousehold?.dateOfBirth != null ? DigitDateUtils.getFormattedDateToDateTime( - householdMember.headOfHousehold.dateOfBirth!, + householdMember.headOfHousehold!.dateOfBirth!, ) ?? DateTime.now() : DateTime.now(), @@ -258,9 +258,9 @@ class _ViewBeneficiaryCardState extends LocalizedState { final isBeneficiaryRefused = checkIfBeneficiaryRefused(householdMember.tasks); final projectBeneficiary = householdMember.projectBeneficiaries - .where((p) => + ?.where((p) => p.beneficiaryClientReferenceId == - householdMember.headOfHousehold.clientReferenceId) + householdMember.headOfHousehold?.clientReferenceId) .firstOrNull; final tasks = householdMember.tasks?.where((t) => t.projectBeneficiaryClientReferenceId == @@ -277,29 +277,24 @@ class _ViewBeneficiaryCardState extends LocalizedState { width: MediaQuery.of(context).size.width / 1.8, child: BeneficiaryCard( description: [ - householdMember.household.address?.doorNo, - householdMember.household.address?.addressLine1, - householdMember.household.address?.addressLine2, - householdMember.household.address?.landmark, - householdMember.household.address?.city, - householdMember.household.address?.pincode, + householdMember.household?.address?.doorNo, + householdMember.household?.address?.addressLine1, + householdMember.household?.address?.addressLine2, + householdMember.household?.address?.landmark, + householdMember.household?.address?.city, + householdMember.household?.address?.pincode, ].whereNotNull().take(2).join(' '), subtitle: widget.distance != null - ? '${householdMember.members.length ?? 1} ${householdMember.members.length == 1 ? localizations.translate(i18.beneficiaryDetails.householdMemberSingular) : localizations.translate(i18.beneficiaryDetails.householdMemberPlural)}\n${((widget.distance!) * 1000).round() > 999 ? '(${((widget.distance!).round())} km)' : '(${((widget.distance!) * 1000).round()} mts) ${localizations.translate(i18.beneficiaryDetails.fromCurrentLocation)}'}' - : '${householdMember.members.length ?? 1} ${householdMember.members.length == 1 ? localizations.translate(i18.beneficiaryDetails.householdMemberSingular) : localizations.translate(i18.beneficiaryDetails.householdMemberPlural)}', - status: RegistrationDeliverySingleton().beneficiaryType == - BeneficiaryType.individual - ? (tasks ?? []).isNotEmpty && - !isNotEligible && - !isBeneficiaryRefused - ? Status.visited.toValue() - : Status.notVisited.toValue() - : (tasks ?? []).isNotEmpty - ? Status.visited.toValue() - : Status.notVisited.toValue(), + ? '${householdMember.members?.length ?? 1} ${householdMember.members?.length == 1 ? localizations.translate(i18.beneficiaryDetails.householdMemberSingular) : localizations.translate(i18.beneficiaryDetails.householdMemberPlural)}\n${((widget.distance!) * 1000).round() > 999 ? '(${((widget.distance!).round())} km)' : '(${((widget.distance!) * 1000).round()} mts) ${localizations.translate(i18.beneficiaryDetails.fromCurrentLocation)}'}' + : '${householdMember.members?.length ?? 1} ${householdMember.members?.length == 1 ? localizations.translate(i18.beneficiaryDetails.householdMemberSingular) : localizations.translate(i18.beneficiaryDetails.householdMemberPlural)}', + status: getStatus( + tasks ?? [], + householdMember.projectBeneficiaries ?? [], + isNotEligible, + isBeneficiaryRefused), title: [ - householdMember.headOfHousehold.name?.givenName, - householdMember.headOfHousehold.name?.familyName, + householdMember.headOfHousehold?.name?.givenName, + householdMember.headOfHousehold?.name?.familyName, ].whereNotNull().join(''), ), ), @@ -321,15 +316,15 @@ class _ViewBeneficiaryCardState extends LocalizedState { offstage: !isCardExpanded, child: DigitTable( headerList: filteredHeaderList, - tableData: tableData, + tableData: tableData ?? [], columnWidth: 130, columnRowFixedHeight: 65, - height: householdMember.members.length == 1 + height: householdMember.members?.length == 1 ? 65 * 2 - : householdMember.members.length <= 4 - ? (householdMember.members.length + 1) * 65 + : (householdMember.members?.length ?? 0) <= 4 + ? ((householdMember.members?.length ?? 0) + 1) * 65 : 5 * 68, - scrollPhysics: householdMember.members.length <= 4 + scrollPhysics: (householdMember.members?.length ?? 0) <= 4 ? const NeverScrollableScrollPhysics() : const ClampingScrollPhysics(), ), @@ -393,4 +388,27 @@ class _ViewBeneficiaryCardState extends LocalizedState { ? theme.colorScheme.onSurfaceVariant : theme.colorScheme.error; } + + getStatus( + Iterable tasks, + List projectBeneficiaries, + bool isNotEligible, + bool isBeneficiaryRefused) { + if (projectBeneficiaries.isNotEmpty) { + if (tasks.isEmpty) { + return Status.registered.toValue(); + } else { + bool isIndividual = RegistrationDeliverySingleton().beneficiaryType == + BeneficiaryType.individual; + if (isIndividual && !isNotEligible && !isBeneficiaryRefused || + !isIndividual) { + return Status.visited.toValue(); + } else { + return Status.notVisited.toValue(); + } + } + } else { + return Status.notRegistered.toValue(); + } + } } diff --git a/packages/registration_delivery/lib/widgets/member_card/member_card.dart b/packages/registration_delivery/lib/widgets/member_card/member_card.dart index fa0973dbb..fa5f1ed88 100644 --- a/packages/registration_delivery/lib/widgets/member_card/member_card.dart +++ b/packages/registration_delivery/lib/widgets/member_card/member_card.dart @@ -187,7 +187,6 @@ class MemberCard extends StatelessWidget { .householdOverViewBeneficiaryReferredLabel : isBeneficiaryRefused ? Status.beneficiaryRefused.toValue() - // [TODO Need to update the localization] : i18.householdOverView .householdOverViewNotDeliveredIconLabel, ), @@ -225,10 +224,6 @@ class MemberCard extends StatelessWidget { ? const Offstage() : !isNotEligible ? DigitElevatedButton( - // padding: const EdgeInsets.only( - // left: kPadding / 2, - // right: kPadding / 2, - // ), onPressed: () { final bloc = context.read(); diff --git a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart new file mode 100644 index 000000000..9e84d26ce --- /dev/null +++ b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart @@ -0,0 +1,106 @@ +import 'package:digit_components/digit_components.dart'; +import 'package:digit_components/widgets/atoms/selection_card.dart'; +import 'package:digit_scanner/widgets/localized.dart'; +import 'package:flutter/material.dart'; +import 'package:registration_delivery/registration_delivery.dart'; + +import '../../models/entities/status.dart'; +import '../../utils/i18_key_constants.dart' as i18; + +class StatusFilter extends LocalizedStatefulWidget { + final List? selectedFilters; + const StatusFilter({ + super.key, + super.appLocalizations, + this.selectedFilters, + }); + + @override + State createState() => _StatusFilterState(); +} + +class _StatusFilterState extends LocalizedState { + List selectedButtons = []; + + @override + void initState() { + selectedButtons = widget.selectedFilters ?? []; + super.initState(); + } + + @override + Widget build(BuildContext context) { + return SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + SelectionBox( + options: getFilters() ?? [], + allowMultipleSelection: true, + width: 115, + onSelectionChanged: (selected) { + setState(() { + selectedButtons = selected; + }); + }, + valueMapper: (value) { + return localizations.translate(value.toValue().toString()); + }, + ), + const SizedBox( + height: kPadding, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, // Adjust button spacing + children: [ + Expanded( + child: DigitOutLineButton( + label: localizations.translate( + i18.searchBeneficiary.clearFilter, + ), + onPressed: () { + setState(() { + selectedButtons.clear(); + Navigator.pop(context); + }); + }), + ), + const SizedBox( + width: kPadding / 2, + ), + Expanded( + child: DigitElevatedButton( + child: Text( + localizations.translate( + i18.searchBeneficiary.applyFilter, + ), + ), + onPressed: () { + Navigator.pop(context, selectedButtons); + }), + ), + ], + ) + ], + ), + ); + } + + void selectButton(Status button) { + setState(() { + if (selectedButtons.contains(button)) { + selectedButtons.remove(button); + } else { + selectedButtons.add(button); + } + }); + } + + getFilters() { + return (RegistrationDeliverySingleton().searchHouseHoldFilter ?? []) + .map((e) => Status.values.where((element) => element.toValue() == e)) + .expand((element) => element) + .toList(); + } +} diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index 03f360778..cce3bb27d 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -1,6 +1,6 @@ name: registration_delivery description: This package enables health facility workers to register a household and individual members and deliver the resources. -version: 1.0.2 +version: 1.0.2+1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/registration_delivery repository: https://github.com/egovernments/health-campaign-field-worker-app From 1177a6d3b814eb1aa7d15046af40d29b1df838a2 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Mon, 15 Jul 2024 22:43:07 +0530 Subject: [PATCH 053/241] Hlm 6414 - MDMS StatusFilter, Filter search (#448) * added translator for administration area * Fixed Facility search based on tenant ID * Added disable battery optimization permission for background service * Added disable battery optimization ask permission on App start and background service start * HLM-5984:: Get Precise location on Submitting latitude longitude details * Reverted install_bricks.sh * added new status REGISTERED, NOT_REGISTERED updated conditional check for status by project beneficiaries * added static status_filter.dart integration in search_beneficiary.dart * TODO for selected_filters display condition * integrated household search filters with mdms implemented search based on filters with pagination for Registered and NotRegistered * updated status filter component merge with develop * create individual_global_search and implemented search * Auto Create Project Beneficiary on Edit Household, and disable record delivery if no project beneficiary present * Conflicts resolved * implemented household_global_search.dart fixed individual_global_search.dart * updated proximity search for household_global_search.dart * Pop State recapture during registration flow, Disable delivery flow for individual based campaign if project beneficiaries is empty (#456) --------- Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> --- .../lib/app.dart | 15 + .../beneficiary_registration.dart | 23 +- .../beneficiary_registration.freezed.dart | 364 +++++- .../household_global_seach.dart | 174 +++ .../individual_global_search.dart | 167 +++ .../search_households/proximity_search.dart | 338 +++--- .../search_bloc_common_wrapper.dart | 48 +- .../search_households/search_by_head.dart | 494 ++++---- .../search_households/search_by_status.dart | 328 ------ .../search_households/search_households.dart | 48 +- .../search_households.freezed.dart | 1029 +++++++++++++++++ .../search_households/tag_by_search.dart | 2 + .../local/household_global_search.dart | 325 ++++++ .../local/individual_global_search.dart | 280 +++++ .../pages/beneficiary/household_overview.dart | 14 +- .../beneficiary_acknowledgement.dart | 116 +- .../beneficiary_registration_wrapper.dart | 148 +-- .../house_details.dart | 11 + .../household_details.dart | 19 +- .../household_location.dart | 4 +- .../individual_details.dart | 86 +- .../pages/registration_delivery_wrapper.dart | 239 ++-- .../lib/pages/search_beneficiary.dart | 203 ++-- .../lib/pages/summary_page.dart | 2 - .../lib/utils/global_search_parameters.dart | 21 + .../beneficiary/view_beneficiary_card.dart | 14 +- .../lib/widgets/member_card/member_card.dart | 441 +++---- .../widgets/status_filter/status_filter.dart | 19 +- packages/registration_delivery/pubspec.lock | 25 +- 29 files changed, 3506 insertions(+), 1491 deletions(-) create mode 100644 packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart create mode 100644 packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart delete mode 100644 packages/registration_delivery/lib/blocs/search_households/search_by_status.dart create mode 100644 packages/registration_delivery/lib/data/repositories/local/household_global_search.dart create mode 100644 packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart create mode 100644 packages/registration_delivery/lib/utils/global_search_parameters.dart diff --git a/apps/health_campaign_field_worker_app/lib/app.dart b/apps/health_campaign_field_worker_app/lib/app.dart index 0337a49b5..1576fdd07 100644 --- a/apps/health_campaign_field_worker_app/lib/app.dart +++ b/apps/health_campaign_field_worker_app/lib/app.dart @@ -8,6 +8,9 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:inventory_management/inventory_management.dart'; import 'package:isar/isar.dart'; import 'package:location/location.dart'; +import 'package:registration_delivery/data/repositories/local/household_global_search.dart'; +import 'package:registration_delivery/data/repositories/local/individual_global_search.dart'; +import 'package:registration_delivery/data/repositories/oplog/oplog.dart'; import 'blocs/app_initialization/app_initialization.dart'; import 'blocs/auth/auth.dart'; @@ -58,6 +61,18 @@ class MainApplicationState extends State providers: [ RepositoryProvider.value(value: widget.sql), RepositoryProvider.value(value: widget.isar), + RepositoryProvider( + create: (context) => IndividualGlobalSearchRepository( + widget.sql, + IndividualOpLogManager(widget.isar), + ), + ), + RepositoryProvider( + create: (context) => HouseHoldGlobalSearchRepository( + widget.sql, + HouseholdOpLogManager(widget.isar), + ), + ), ], child: BlocProvider( create: (context) => AppInitializationBloc( diff --git a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart index 4d5ca7fa7..4b70fa0a9 100644 --- a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart +++ b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart @@ -103,6 +103,12 @@ class BeneficiaryRegistrationBloc registrationDate: event.registrationDate, )); }, + summary: (value) { + emit(value.copyWith( + householdModel: event.household, + registrationDate: event.registrationDate, + )); + }, ); } @@ -194,9 +200,10 @@ class BeneficiaryRegistrationBloc summary: (value) async { if (event.navigateToSummary) { emit(BeneficiaryRegistrationState.create( - addressModel: value.householdModel?.address, - householdModel: value.householdModel, - )); + addressModel: value.householdModel?.address, + householdModel: value.householdModel, + individualModel: value.individualModel, + projectBeneficiaryModel: value.projectBeneficiaryModel)); } else { final individual = value.individualModel; final household = value.householdModel; @@ -279,6 +286,8 @@ class BeneficiaryRegistrationBloc BeneficiaryRegistrationPersistedState( navigateToRoot: false, householdModel: household, + addressModel: address, + individualModel: individual, ), ); } @@ -375,6 +384,8 @@ class BeneficiaryRegistrationBloc BeneficiaryRegistrationPersistedState( navigateToRoot: false, householdModel: household, + addressModel: address, + individualModel: individual, ), ); } @@ -731,6 +742,12 @@ class BeneficiaryRegistrationState with _$BeneficiaryRegistrationState { const factory BeneficiaryRegistrationState.persisted({ @Default(true) bool navigateToRoot, required HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + @Default(false) bool loading, + @Default(false) bool isHeadOfHousehold, }) = BeneficiaryRegistrationPersistedState; const factory BeneficiaryRegistrationState.summary({ diff --git a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart index 2026ae8ac..a6ec3b32e 100644 --- a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart +++ b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart @@ -3256,7 +3256,9 @@ abstract class BeneficiaryRegistrationTagEvent /// @nodoc mixin _$BeneficiaryRegistrationState { + AddressModel? get addressModel => throw _privateConstructorUsedError; HouseholdModel? get householdModel => throw _privateConstructorUsedError; + bool get loading => throw _privateConstructorUsedError; @optionalTypeArgs TResult when({ required TResult Function( @@ -3288,7 +3290,14 @@ mixin _$BeneficiaryRegistrationState { HouseholdModel householdModel, bool loading) addMember, required TResult Function( - bool navigateToRoot, HouseholdModel householdModel) + bool navigateToRoot, + HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold) persisted, required TResult Function( bool navigateToRoot, @@ -3332,7 +3341,15 @@ mixin _$BeneficiaryRegistrationState { TResult? Function(AddressModel addressModel, HouseholdModel householdModel, bool loading)? addMember, - TResult? Function(bool navigateToRoot, HouseholdModel householdModel)? + TResult? Function( + bool navigateToRoot, + HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? persisted, TResult? Function( bool navigateToRoot, @@ -3376,7 +3393,15 @@ mixin _$BeneficiaryRegistrationState { TResult Function(AddressModel addressModel, HouseholdModel householdModel, bool loading)? addMember, - TResult Function(bool navigateToRoot, HouseholdModel householdModel)? + TResult Function( + bool navigateToRoot, + HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? persisted, TResult Function( bool navigateToRoot, @@ -3445,7 +3470,8 @@ abstract class $BeneficiaryRegistrationStateCopyWith<$Res> { _$BeneficiaryRegistrationStateCopyWithImpl<$Res, BeneficiaryRegistrationState>; @useResult - $Res call({HouseholdModel householdModel}); + $Res call( + {AddressModel addressModel, HouseholdModel householdModel, bool loading}); } /// @nodoc @@ -3462,13 +3488,23 @@ class _$BeneficiaryRegistrationStateCopyWithImpl<$Res, @pragma('vm:prefer-inline') @override $Res call({ + Object? addressModel = null, Object? householdModel = null, + Object? loading = null, }) { return _then(_value.copyWith( + addressModel: null == addressModel + ? _value.addressModel! + : addressModel // ignore: cast_nullable_to_non_nullable + as AddressModel, householdModel: null == householdModel ? _value.householdModel! : householdModel // ignore: cast_nullable_to_non_nullable as HouseholdModel, + loading: null == loading + ? _value.loading + : loading // ignore: cast_nullable_to_non_nullable + as bool, ) as $Val); } } @@ -3665,7 +3701,14 @@ class _$BeneficiaryRegistrationCreateStateImpl HouseholdModel householdModel, bool loading) addMember, required TResult Function( - bool navigateToRoot, HouseholdModel householdModel) + bool navigateToRoot, + HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold) persisted, required TResult Function( bool navigateToRoot, @@ -3720,7 +3763,15 @@ class _$BeneficiaryRegistrationCreateStateImpl TResult? Function(AddressModel addressModel, HouseholdModel householdModel, bool loading)? addMember, - TResult? Function(bool navigateToRoot, HouseholdModel householdModel)? + TResult? Function( + bool navigateToRoot, + HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? persisted, TResult? Function( bool navigateToRoot, @@ -3775,7 +3826,15 @@ class _$BeneficiaryRegistrationCreateStateImpl TResult Function(AddressModel addressModel, HouseholdModel householdModel, bool loading)? addMember, - TResult Function(bool navigateToRoot, HouseholdModel householdModel)? + TResult Function( + bool navigateToRoot, + HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? persisted, TResult Function( bool navigateToRoot, @@ -3868,6 +3927,7 @@ abstract class BeneficiaryRegistrationCreateState final bool loading, final bool isHeadOfHousehold}) = _$BeneficiaryRegistrationCreateStateImpl; + @override AddressModel? get addressModel; @override HouseholdModel? get householdModel; @@ -3875,6 +3935,7 @@ abstract class BeneficiaryRegistrationCreateState ProjectBeneficiaryModel? get projectBeneficiaryModel; DateTime? get registrationDate; String? get searchQuery; + @override bool get loading; bool get isHeadOfHousehold; @override @@ -4060,7 +4121,14 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl HouseholdModel householdModel, bool loading) addMember, required TResult Function( - bool navigateToRoot, HouseholdModel householdModel) + bool navigateToRoot, + HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold) persisted, required TResult Function( bool navigateToRoot, @@ -4108,7 +4176,15 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl TResult? Function(AddressModel addressModel, HouseholdModel householdModel, bool loading)? addMember, - TResult? Function(bool navigateToRoot, HouseholdModel householdModel)? + TResult? Function( + bool navigateToRoot, + HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? persisted, TResult? Function( bool navigateToRoot, @@ -4156,7 +4232,15 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl TResult Function(AddressModel addressModel, HouseholdModel householdModel, bool loading)? addMember, - TResult Function(bool navigateToRoot, HouseholdModel householdModel)? + TResult Function( + bool navigateToRoot, + HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? persisted, TResult Function( bool navigateToRoot, @@ -4240,12 +4324,14 @@ abstract class BeneficiaryRegistrationEditHouseholdState final ProjectBeneficiaryModel? projectBeneficiaryModel, final bool loading}) = _$BeneficiaryRegistrationEditHouseholdStateImpl; + @override AddressModel get addressModel; @override HouseholdModel get householdModel; List get individualModel; DateTime get registrationDate; ProjectBeneficiaryModel? get projectBeneficiaryModel; + @override bool get loading; @override @JsonKey(ignore: true) @@ -4407,7 +4493,14 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl HouseholdModel householdModel, bool loading) addMember, required TResult Function( - bool navigateToRoot, HouseholdModel householdModel) + bool navigateToRoot, + HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold) persisted, required TResult Function( bool navigateToRoot, @@ -4455,7 +4548,15 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl TResult? Function(AddressModel addressModel, HouseholdModel householdModel, bool loading)? addMember, - TResult? Function(bool navigateToRoot, HouseholdModel householdModel)? + TResult? Function( + bool navigateToRoot, + HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? persisted, TResult? Function( bool navigateToRoot, @@ -4503,7 +4604,15 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl TResult Function(AddressModel addressModel, HouseholdModel householdModel, bool loading)? addMember, - TResult Function(bool navigateToRoot, HouseholdModel householdModel)? + TResult Function( + bool navigateToRoot, + HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? persisted, TResult Function( bool navigateToRoot, @@ -4589,8 +4698,10 @@ abstract class BeneficiaryRegistrationEditIndividualState @override HouseholdModel get householdModel; IndividualModel get individualModel; + @override AddressModel get addressModel; ProjectBeneficiaryModel? get projectBeneficiaryModel; + @override bool get loading; @override @JsonKey(ignore: true) @@ -4724,7 +4835,14 @@ class _$BeneficiaryRegistrationAddMemberStateImpl HouseholdModel householdModel, bool loading) addMember, required TResult Function( - bool navigateToRoot, HouseholdModel householdModel) + bool navigateToRoot, + HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold) persisted, required TResult Function( bool navigateToRoot, @@ -4771,7 +4889,15 @@ class _$BeneficiaryRegistrationAddMemberStateImpl TResult? Function(AddressModel addressModel, HouseholdModel householdModel, bool loading)? addMember, - TResult? Function(bool navigateToRoot, HouseholdModel householdModel)? + TResult? Function( + bool navigateToRoot, + HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? persisted, TResult? Function( bool navigateToRoot, @@ -4818,7 +4944,15 @@ class _$BeneficiaryRegistrationAddMemberStateImpl TResult Function(AddressModel addressModel, HouseholdModel householdModel, bool loading)? addMember, - TResult Function(bool navigateToRoot, HouseholdModel householdModel)? + TResult Function( + bool navigateToRoot, + HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? persisted, TResult Function( bool navigateToRoot, @@ -4898,9 +5032,11 @@ abstract class BeneficiaryRegistrationAddMemberState required final HouseholdModel householdModel, final bool loading}) = _$BeneficiaryRegistrationAddMemberStateImpl; + @override AddressModel get addressModel; @override HouseholdModel get householdModel; + @override bool get loading; @override @JsonKey(ignore: true) @@ -4918,7 +5054,15 @@ abstract class _$$BeneficiaryRegistrationPersistedStateImplCopyWith<$Res> __$$BeneficiaryRegistrationPersistedStateImplCopyWithImpl<$Res>; @override @useResult - $Res call({bool navigateToRoot, HouseholdModel householdModel}); + $Res call( + {bool navigateToRoot, + HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold}); } /// @nodoc @@ -4936,6 +5080,12 @@ class __$$BeneficiaryRegistrationPersistedStateImplCopyWithImpl<$Res> $Res call({ Object? navigateToRoot = null, Object? householdModel = null, + Object? individualModel = freezed, + Object? projectBeneficiaryModel = freezed, + Object? registrationDate = freezed, + Object? addressModel = freezed, + Object? loading = null, + Object? isHeadOfHousehold = null, }) { return _then(_$BeneficiaryRegistrationPersistedStateImpl( navigateToRoot: null == navigateToRoot @@ -4946,6 +5096,30 @@ class __$$BeneficiaryRegistrationPersistedStateImplCopyWithImpl<$Res> ? _value.householdModel : householdModel // ignore: cast_nullable_to_non_nullable as HouseholdModel, + individualModel: freezed == individualModel + ? _value.individualModel + : individualModel // ignore: cast_nullable_to_non_nullable + as IndividualModel?, + projectBeneficiaryModel: freezed == projectBeneficiaryModel + ? _value.projectBeneficiaryModel + : projectBeneficiaryModel // ignore: cast_nullable_to_non_nullable + as ProjectBeneficiaryModel?, + registrationDate: freezed == registrationDate + ? _value.registrationDate + : registrationDate // ignore: cast_nullable_to_non_nullable + as DateTime?, + addressModel: freezed == addressModel + ? _value.addressModel + : addressModel // ignore: cast_nullable_to_non_nullable + as AddressModel?, + loading: null == loading + ? _value.loading + : loading // ignore: cast_nullable_to_non_nullable + as bool, + isHeadOfHousehold: null == isHeadOfHousehold + ? _value.isHeadOfHousehold + : isHeadOfHousehold // ignore: cast_nullable_to_non_nullable + as bool, )); } } @@ -4955,17 +5129,38 @@ class __$$BeneficiaryRegistrationPersistedStateImplCopyWithImpl<$Res> class _$BeneficiaryRegistrationPersistedStateImpl implements BeneficiaryRegistrationPersistedState { const _$BeneficiaryRegistrationPersistedStateImpl( - {this.navigateToRoot = true, required this.householdModel}); + {this.navigateToRoot = true, + required this.householdModel, + this.individualModel, + this.projectBeneficiaryModel, + this.registrationDate, + this.addressModel, + this.loading = false, + this.isHeadOfHousehold = false}); @override @JsonKey() final bool navigateToRoot; @override final HouseholdModel householdModel; + @override + final IndividualModel? individualModel; + @override + final ProjectBeneficiaryModel? projectBeneficiaryModel; + @override + final DateTime? registrationDate; + @override + final AddressModel? addressModel; + @override + @JsonKey() + final bool loading; + @override + @JsonKey() + final bool isHeadOfHousehold; @override String toString() { - return 'BeneficiaryRegistrationState.persisted(navigateToRoot: $navigateToRoot, householdModel: $householdModel)'; + return 'BeneficiaryRegistrationState.persisted(navigateToRoot: $navigateToRoot, householdModel: $householdModel, individualModel: $individualModel, projectBeneficiaryModel: $projectBeneficiaryModel, registrationDate: $registrationDate, addressModel: $addressModel, loading: $loading, isHeadOfHousehold: $isHeadOfHousehold)'; } @override @@ -4976,11 +5171,32 @@ class _$BeneficiaryRegistrationPersistedStateImpl (identical(other.navigateToRoot, navigateToRoot) || other.navigateToRoot == navigateToRoot) && (identical(other.householdModel, householdModel) || - other.householdModel == householdModel)); + other.householdModel == householdModel) && + (identical(other.individualModel, individualModel) || + other.individualModel == individualModel) && + (identical( + other.projectBeneficiaryModel, projectBeneficiaryModel) || + other.projectBeneficiaryModel == projectBeneficiaryModel) && + (identical(other.registrationDate, registrationDate) || + other.registrationDate == registrationDate) && + (identical(other.addressModel, addressModel) || + other.addressModel == addressModel) && + (identical(other.loading, loading) || other.loading == loading) && + (identical(other.isHeadOfHousehold, isHeadOfHousehold) || + other.isHeadOfHousehold == isHeadOfHousehold)); } @override - int get hashCode => Object.hash(runtimeType, navigateToRoot, householdModel); + int get hashCode => Object.hash( + runtimeType, + navigateToRoot, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + addressModel, + loading, + isHeadOfHousehold); @JsonKey(ignore: true) @override @@ -5022,7 +5238,14 @@ class _$BeneficiaryRegistrationPersistedStateImpl HouseholdModel householdModel, bool loading) addMember, required TResult Function( - bool navigateToRoot, HouseholdModel householdModel) + bool navigateToRoot, + HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold) persisted, required TResult Function( bool navigateToRoot, @@ -5035,7 +5258,15 @@ class _$BeneficiaryRegistrationPersistedStateImpl bool isHeadOfHousehold) summary, }) { - return persisted(navigateToRoot, householdModel); + return persisted( + navigateToRoot, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + addressModel, + loading, + isHeadOfHousehold); } @override @@ -5069,7 +5300,15 @@ class _$BeneficiaryRegistrationPersistedStateImpl TResult? Function(AddressModel addressModel, HouseholdModel householdModel, bool loading)? addMember, - TResult? Function(bool navigateToRoot, HouseholdModel householdModel)? + TResult? Function( + bool navigateToRoot, + HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? persisted, TResult? Function( bool navigateToRoot, @@ -5082,7 +5321,15 @@ class _$BeneficiaryRegistrationPersistedStateImpl bool isHeadOfHousehold)? summary, }) { - return persisted?.call(navigateToRoot, householdModel); + return persisted?.call( + navigateToRoot, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + addressModel, + loading, + isHeadOfHousehold); } @override @@ -5116,7 +5363,15 @@ class _$BeneficiaryRegistrationPersistedStateImpl TResult Function(AddressModel addressModel, HouseholdModel householdModel, bool loading)? addMember, - TResult Function(bool navigateToRoot, HouseholdModel householdModel)? + TResult Function( + bool navigateToRoot, + HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? persisted, TResult Function( bool navigateToRoot, @@ -5131,7 +5386,15 @@ class _$BeneficiaryRegistrationPersistedStateImpl required TResult orElse(), }) { if (persisted != null) { - return persisted(navigateToRoot, householdModel); + return persisted( + navigateToRoot, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + addressModel, + loading, + isHeadOfHousehold); } return orElse(); } @@ -5193,12 +5456,26 @@ abstract class BeneficiaryRegistrationPersistedState implements BeneficiaryRegistrationState { const factory BeneficiaryRegistrationPersistedState( {final bool navigateToRoot, - required final HouseholdModel householdModel}) = + required final HouseholdModel householdModel, + final IndividualModel? individualModel, + final ProjectBeneficiaryModel? projectBeneficiaryModel, + final DateTime? registrationDate, + final AddressModel? addressModel, + final bool loading, + final bool isHeadOfHousehold}) = _$BeneficiaryRegistrationPersistedStateImpl; bool get navigateToRoot; @override HouseholdModel get householdModel; + IndividualModel? get individualModel; + ProjectBeneficiaryModel? get projectBeneficiaryModel; + DateTime? get registrationDate; + @override + AddressModel? get addressModel; + @override + bool get loading; + bool get isHeadOfHousehold; @override @JsonKey(ignore: true) _$$BeneficiaryRegistrationPersistedStateImplCopyWith< @@ -5399,7 +5676,14 @@ class _$BeneficiaryRegistrationSummaryStateImpl HouseholdModel householdModel, bool loading) addMember, required TResult Function( - bool navigateToRoot, HouseholdModel householdModel) + bool navigateToRoot, + HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold) persisted, required TResult Function( bool navigateToRoot, @@ -5454,7 +5738,15 @@ class _$BeneficiaryRegistrationSummaryStateImpl TResult? Function(AddressModel addressModel, HouseholdModel householdModel, bool loading)? addMember, - TResult? Function(bool navigateToRoot, HouseholdModel householdModel)? + TResult? Function( + bool navigateToRoot, + HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? persisted, TResult? Function( bool navigateToRoot, @@ -5509,7 +5801,15 @@ class _$BeneficiaryRegistrationSummaryStateImpl TResult Function(AddressModel addressModel, HouseholdModel householdModel, bool loading)? addMember, - TResult Function(bool navigateToRoot, HouseholdModel householdModel)? + TResult Function( + bool navigateToRoot, + HouseholdModel householdModel, + IndividualModel? individualModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, + DateTime? registrationDate, + AddressModel? addressModel, + bool loading, + bool isHeadOfHousehold)? persisted, TResult Function( bool navigateToRoot, @@ -5609,7 +5909,9 @@ abstract class BeneficiaryRegistrationSummaryState IndividualModel? get individualModel; ProjectBeneficiaryModel? get projectBeneficiaryModel; DateTime? get registrationDate; + @override AddressModel? get addressModel; + @override bool get loading; bool get isHeadOfHousehold; @override diff --git a/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart b/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart new file mode 100644 index 000000000..b3710a299 --- /dev/null +++ b/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart @@ -0,0 +1,174 @@ +import 'dart:async'; + +import 'package:bloc/src/bloc.dart'; +import 'package:collection/collection.dart'; +import 'package:digit_data_model/models/entities/individual.dart'; +import 'package:registration_delivery/blocs/search_households/search_households.dart'; + +import '../../models/entities/household.dart'; +import '../../models/entities/household_member.dart'; +import '../../models/entities/project_beneficiary.dart'; +import '../../models/entities/referral.dart'; +import '../../models/entities/side_effect.dart'; +import '../../models/entities/task.dart'; +import '../../utils/global_search_parameters.dart'; + +class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { + HouseHoldGlobalSearchBloc( + {required super.userUid, + required super.projectId, + required super.individual, + required super.householdMember, + required super.household, + required super.projectBeneficiary, + required super.taskDataRepository, + required super.beneficiaryType, + required super.sideEffectDataRepository, + required super.addressRepository, + required super.referralDataRepository, + required super.individualGlobalSearchRepository, + required super.houseHoldGlobalSearchRepository}) { + on(_houseHoldGlobalSearch); + on(_paginate); + } + + Future _houseHoldGlobalSearch( + HouseHoldGlobalSearchEvent event, + SearchHouseholdsEmitter emit, + ) async { + final containers = [...state.householdMembers]; + + List householdList = []; + List individualsList = []; + List projectBeneficiariesList = []; + List taskList = []; + List sideEffectsList = []; + List referralsList = []; + + emit(state.copyWith(loading: true)); + + final results = await houseHoldGlobalSearchRepository.houseHoldGlobalSearch( + GlobalSearchParameters( + isProximityEnabled: event.globalSearchParams.isProximityEnabled, + latitude: event.globalSearchParams.latitude, + longitude: event.globalSearchParams.longitude, + maxRadius: event.globalSearchParams.maxRadius, + nameSearch: event.globalSearchParams.nameSearch, + filter: event.globalSearchParams.filter, + offset: event.globalSearchParams.offset, + limit: event.globalSearchParams.limit, + ), + ); + + var list = results.map((e) => e).toList(); + + late List houseHoldClientReferenceIds = []; + + list.forEach((e) { + houseHoldClientReferenceIds.add(e.clientReferenceId); + }); + + householdList = await household.search(HouseholdSearchModel( + clientReferenceId: + houseHoldClientReferenceIds.map((e) => e.toString()).toList())); + + // Search for individual results using the extracted IDs and search text. + final List householdMembers = + await fetchHouseholdMembersBulk( + null, + houseHoldClientReferenceIds, + ); + + final List individualClientReferenceIds = householdMembers + .map((e) => e.individualClientReferenceId.toString()) + .toList(); + + individualsList = await individual.search( + IndividualSearchModel(clientReferenceId: individualClientReferenceIds), + ); + + // Group household members by household client reference ID + final groupedHouseholdsMembers = householdMembers + .groupListsBy((element) => element.householdClientReferenceId); + + householdList = await household.search(HouseholdSearchModel( + clientReferenceId: householdMembers + .map((e) => e.householdClientReferenceId.toString()) + .toList(), + )); + + projectBeneficiariesList = await projectBeneficiary.search( + ProjectBeneficiarySearchModel( + beneficiaryClientReferenceId: + houseHoldClientReferenceIds.map((e) => e).toList())); + + for (final entry in groupedHouseholdsMembers.entries) { + HouseholdModel filteredHousehold; + List filteredIndividuals; + List filteredTasks; + final householdId = entry.key; + if (householdId == null) continue; + + // Filter household based on household ID + filteredHousehold = + householdList.firstWhere((e) => e.clientReferenceId == householdId); + + // Extract individual client reference IDs from household members + final List membersIds = + entry.value.map((e) => e.individualClientReferenceId).toList(); + + // Filter individuals based on individual client reference IDs + filteredIndividuals = individualsList + .where((element) => membersIds.contains(element.clientReferenceId)) + .toList(); + + // Filter tasks based on project beneficiary client reference IDs + filteredTasks = taskList + .where((element) => filteredIndividuals + .where((e) => + e.clientReferenceId == + element.projectBeneficiaryClientReferenceId) + .isNotEmpty) + .toList(); + + // Find the head of the household + final head = filteredIndividuals.firstWhereOrNull( + (element) => + element.clientReferenceId == + entry.value + .firstWhereOrNull( + (element) => element.isHeadOfHousehold, + ) + ?.individualClientReferenceId, + ); + + // Skip if no head of household or no filtered beneficiaries + if (head == null) continue; + + // Add household member wrapper to containers + containers.add( + HouseholdMemberWrapper( + household: filteredHousehold, + headOfHousehold: head, + members: filteredIndividuals, + projectBeneficiaries: projectBeneficiariesList, + tasks: filteredTasks.isEmpty ? null : filteredTasks, + sideEffects: sideEffectsList.isEmpty ? null : sideEffectsList, + referrals: referralsList.isEmpty ? null : referralsList, + ), + ); + } + + emit(state.copyWith( + householdMembers: containers, + loading: false, + searchQuery: event.globalSearchParams.nameSearch, + offset: + event.globalSearchParams.offset! + event.globalSearchParams.limit!, + limit: event.globalSearchParams.limit!, + )); + } + + FutureOr _paginate(SearchHouseholdsPaginateEvent event, + Emitter emit) {} +} diff --git a/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart b/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart new file mode 100644 index 000000000..56baf8749 --- /dev/null +++ b/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart @@ -0,0 +1,167 @@ +import 'dart:async'; + +import 'package:bloc/src/bloc.dart'; +import 'package:collection/collection.dart'; +import 'package:digit_data_model/models/entities/individual.dart'; +import 'package:registration_delivery/blocs/search_households/search_households.dart'; + +import '../../models/entities/household.dart'; +import '../../models/entities/household_member.dart'; +import '../../models/entities/project_beneficiary.dart'; +import '../../models/entities/referral.dart'; +import '../../models/entities/side_effect.dart'; +import '../../models/entities/task.dart'; +import '../../utils/global_search_parameters.dart'; + +class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { + IndividualGlobalSearchBloc( + {required super.userUid, + required super.projectId, + required super.individual, + required super.householdMember, + required super.household, + required super.projectBeneficiary, + required super.taskDataRepository, + required super.beneficiaryType, + required super.sideEffectDataRepository, + required super.addressRepository, + required super.referralDataRepository, + required super.individualGlobalSearchRepository, + required super.houseHoldGlobalSearchRepository}) { + on(_individualGlobalSearch); + on(_paginate); + } + + Future _individualGlobalSearch( + IndividualGlobalSearchEvent event, + SearchHouseholdsEmitter emit, + ) async { + final containers = [...state.householdMembers]; + + List householdList = []; + List individualsList = []; + List projectBeneficiariesList = []; + List taskList = []; + List sideEffectsList = []; + List referralsList = []; + + emit(state.copyWith(loading: true)); + + final results = + await individualGlobalSearchRepository.individualGlobalSearch( + GlobalSearchParameters( + isProximityEnabled: event.globalSearchParams.isProximityEnabled, + latitude: event.globalSearchParams.latitude, + longitude: event.globalSearchParams.longitude, + maxRadius: event.globalSearchParams.maxRadius, + nameSearch: event.globalSearchParams.nameSearch, + filter: event.globalSearchParams.filter, + offset: event.globalSearchParams.offset, + limit: event.globalSearchParams.limit, + ), + ); + + var list = results.map((e) => e).toList(); + + late List individualClientReferenceIds = []; + + list.forEach((e) { + individualClientReferenceIds.add(e.clientReferenceId); + }); + + individualsList = await individual.search(IndividualSearchModel( + clientReferenceId: + individualClientReferenceIds.map((e) => e.toString()).toList())); + + // Search for individual results using the extracted IDs and search text. + final List householdMembers = + await fetchHouseholdMembersBulk( + individualClientReferenceIds, + null, + ); + + // Group household members by household client reference ID + final groupedHouseholdsMembers = householdMembers + .groupListsBy((element) => element.householdClientReferenceId); + + householdList = await household.search(HouseholdSearchModel( + clientReferenceId: householdMembers + .map((e) => e.householdClientReferenceId.toString()) + .toList(), + )); + + projectBeneficiariesList = await projectBeneficiary.search( + ProjectBeneficiarySearchModel( + beneficiaryClientReferenceId: + individualClientReferenceIds.map((e) => e).toList())); + + for (final entry in groupedHouseholdsMembers.entries) { + HouseholdModel filteredHousehold; + List filteredIndividuals; + List filteredTasks; + final householdId = entry.key; + if (householdId == null) continue; + + // Filter household based on household ID + filteredHousehold = + householdList.firstWhere((e) => e.clientReferenceId == householdId); + + // Extract individual client reference IDs from household members + final List membersIds = + entry.value.map((e) => e.individualClientReferenceId).toList(); + + // Filter individuals based on individual client reference IDs + filteredIndividuals = individualsList + .where((element) => membersIds.contains(element.clientReferenceId)) + .toList(); + + // Filter tasks based on project beneficiary client reference IDs + filteredTasks = taskList + .where((element) => filteredIndividuals + .where((e) => + e.clientReferenceId == + element.projectBeneficiaryClientReferenceId) + .isNotEmpty) + .toList(); + + // Find the head of the household + final head = filteredIndividuals.firstWhereOrNull( + (element) => + element.clientReferenceId == + entry.value + .firstWhereOrNull( + (element) => element.isHeadOfHousehold, + ) + ?.individualClientReferenceId, + ); + + // Skip if no head of household or no filtered beneficiaries + if (head == null) continue; + + // Add household member wrapper to containers + containers.add( + HouseholdMemberWrapper( + household: filteredHousehold, + headOfHousehold: head, + members: filteredIndividuals, + projectBeneficiaries: projectBeneficiariesList, + tasks: filteredTasks.isEmpty ? null : filteredTasks, + sideEffects: sideEffectsList.isEmpty ? null : sideEffectsList, + referrals: referralsList.isEmpty ? null : referralsList, + ), + ); + } + + emit(state.copyWith( + householdMembers: containers, + loading: false, + searchQuery: event.globalSearchParams.nameSearch, + offset: + event.globalSearchParams.offset! + event.globalSearchParams.limit!, + limit: event.globalSearchParams.limit!, + )); + } + + FutureOr _paginate(SearchHouseholdsPaginateEvent event, + Emitter emit) {} +} diff --git a/packages/registration_delivery/lib/blocs/search_households/proximity_search.dart b/packages/registration_delivery/lib/blocs/search_households/proximity_search.dart index d45b8dd1f..9e93efaf4 100644 --- a/packages/registration_delivery/lib/blocs/search_households/proximity_search.dart +++ b/packages/registration_delivery/lib/blocs/search_households/proximity_search.dart @@ -1,169 +1,169 @@ -import 'dart:async'; - -import 'package:collection/collection.dart'; -import 'package:digit_data_model/data_model.dart'; - -import '../../models/entities/household.dart'; -import '../../models/entities/household_member.dart'; -import '../../models/entities/project_beneficiary.dart'; -import '../../models/entities/referral.dart'; -import '../../models/entities/side_effect.dart'; -import '../../models/entities/task.dart'; -import 'search_households.dart'; - -class ProximitySearchBloc extends SearchHouseholdsBloc { - ProximitySearchBloc({ - required super.userUid, - required super.projectId, - required super.individual, - required super.householdMember, - required super.household, - required super.projectBeneficiary, - required super.taskDataRepository, - required super.beneficiaryType, - required super.sideEffectDataRepository, - required super.addressRepository, - required super.referralDataRepository, - }) { - on(_handleSearchByProximity); - } - - FutureOr _handleSearchByProximity( - SearchHouseholdsByProximityEvent event, - SearchHouseholdsEmitter emit, - ) async { - List householdList = []; - List individualsList = []; - List householdMembersList = []; - List projectBeneficiariesList = []; - List taskList = []; - List sideEffectsList = []; - List referralsList = []; - emit(state.copyWith(loading: true)); - // Fetch individual results based on proximity and other criteria. - householdList = - await addressRepository.searchHouseHoldbyAddress(AddressSearchModel( - latitude: event.latitude, - longitude: event.longititude, - maxRadius: event.maxRadius, - offset: event.offset, - limit: event.limit, - )); - // Extract individual IDs from proximity-based individual results. - final householdClientReferenceIds = - householdList.map((e) => e.clientReferenceId).toList(); - householdMembersList = await fetchHouseholdMembersBulk( - null, - householdClientReferenceIds, - ); - final List individualClientReferenceIds = householdMembersList - .map((e) => e.individualClientReferenceId.toString()) - .toList(); - individualsList = await individual.search( - IndividualSearchModel(clientReferenceId: individualClientReferenceIds), - ); - projectBeneficiariesList = await fetchProjectBeneficiary( - beneficiaryType != BeneficiaryType.individual - ? householdClientReferenceIds - : individualClientReferenceIds, - ); - if (projectBeneficiariesList.isNotEmpty) { - // Search for tasks and side effects based on project beneficiaries. - taskList = await fetchTaskbyProjectBeneficiary(projectBeneficiariesList); - sideEffectsList = - await sideEffectDataRepository.search(SideEffectSearchModel( - taskClientReferenceId: - taskList.map((e) => e.clientReferenceId).toList(), - )); - referralsList = await referralDataRepository.search(ReferralSearchModel( - projectBeneficiaryClientReferenceId: - projectBeneficiariesList.map((e) => e.clientReferenceId).toList(), - )); - } - // Initialize a list to store household member wrappers. - final containers = [...state.householdMembers]; - // Group household members by household client reference ID. - final groupedHouseholdsMembers = householdMembersList - .where((hm) => projectBeneficiariesList - .map((p) => p.beneficiaryClientReferenceId) - .toList() - .contains(beneficiaryType == BeneficiaryType.individual - ? hm.individualClientReferenceId - : hm.householdClientReferenceId)) - .groupListsBy((element) => element.householdClientReferenceId); - // Iterate through grouped households and retrieve additional data. - for (final entry in groupedHouseholdsMembers.entries) { - HouseholdModel filteredHousehold; - List filteredIndividuals; - List filteredBeneficiaries; - List filteredTasks; - final householdId = entry.key; - if (householdId == null) continue; - filteredHousehold = - householdList.firstWhere((e) => e.clientReferenceId == householdId); - final List membersIds = - entry.value.map((e) => e.individualClientReferenceId).toList(); - filteredIndividuals = individualsList - .where((element) => membersIds.contains(element.clientReferenceId)) - .toList(); - filteredBeneficiaries = projectBeneficiariesList - .where((element) => beneficiaryType == BeneficiaryType.individual - ? membersIds.contains(element.beneficiaryClientReferenceId) - : householdId == element.beneficiaryClientReferenceId) - .toList(); - filteredTasks = taskList - .where((element) => filteredBeneficiaries - .where((e) => - e.clientReferenceId == - element.projectBeneficiaryClientReferenceId) - .isNotEmpty) - .toList(); - - final beneficiaryClientReferenceIds = filteredBeneficiaries - .map((e) => e.beneficiaryClientReferenceId) - .toList(); - - final List beneficiaryIndividuals = filteredIndividuals - .where((element) => - beneficiaryClientReferenceIds.contains(element.clientReferenceId)) - .toList(); - // Find the head of household from the individuals. - final head = (beneficiaryType == BeneficiaryType.individual - ? beneficiaryIndividuals - : filteredIndividuals) - .firstWhereOrNull( - (element) => - element.clientReferenceId == - entry.value - .firstWhereOrNull( - (element) => element.isHeadOfHousehold, - ) - ?.individualClientReferenceId, - ); - if (head == null || filteredBeneficiaries.isEmpty) continue; - // Create a container for household members and associated data. - if (filteredBeneficiaries.isNotEmpty) { - containers.add( - HouseholdMemberWrapper( - household: filteredHousehold, - headOfHousehold: head, - members: beneficiaryType == BeneficiaryType.individual - ? beneficiaryIndividuals - : filteredIndividuals, - projectBeneficiaries: filteredBeneficiaries, - tasks: filteredTasks.isEmpty ? null : filteredTasks, - sideEffects: sideEffectsList.isEmpty ? null : sideEffectsList, - referrals: referralsList.isEmpty ? null : referralsList, - ), - ); - } - } - // Update the state with the results and mark the search as completed. - emit(state.copyWith( - householdMembers: containers, - loading: false, - offset: event.offset + event.limit, - limit: event.limit, - )); - } -} +// import 'dart:async'; +// +// import 'package:collection/collection.dart'; +// import 'package:digit_data_model/data_model.dart'; +// +// import '../../models/entities/household.dart'; +// import '../../models/entities/household_member.dart'; +// import '../../models/entities/project_beneficiary.dart'; +// import '../../models/entities/referral.dart'; +// import '../../models/entities/side_effect.dart'; +// import '../../models/entities/task.dart'; +// import 'search_households.dart'; +// +// class ProximitySearchBloc extends SearchHouseholdsBloc { +// ProximitySearchBloc({ +// required super.userUid, +// required super.projectId, +// required super.individual, +// required super.householdMember, +// required super.household, +// required super.projectBeneficiary, +// required super.taskDataRepository, +// required super.beneficiaryType, +// required super.sideEffectDataRepository, +// required super.addressRepository, +// required super.referralDataRepository, +// }) { +// on(_handleSearchByProximity); +// } +// +// FutureOr _handleSearchByProximity( +// SearchHouseholdsByProximityEvent event, +// SearchHouseholdsEmitter emit, +// ) async { +// List householdList = []; +// List individualsList = []; +// List householdMembersList = []; +// List projectBeneficiariesList = []; +// List taskList = []; +// List sideEffectsList = []; +// List referralsList = []; +// emit(state.copyWith(loading: true)); +// // Fetch individual results based on proximity and other criteria. +// householdList = +// await addressRepository.searchHouseHoldbyAddress(AddressSearchModel( +// latitude: event.latitude, +// longitude: event.longititude, +// maxRadius: event.maxRadius, +// offset: event.offset, +// limit: event.limit, +// )); +// // Extract individual IDs from proximity-based individual results. +// final householdClientReferenceIds = +// householdList.map((e) => e.clientReferenceId).toList(); +// householdMembersList = await fetchHouseholdMembersBulk( +// null, +// householdClientReferenceIds, +// ); +// final List individualClientReferenceIds = householdMembersList +// .map((e) => e.individualClientReferenceId.toString()) +// .toList(); +// individualsList = await individual.search( +// IndividualSearchModel(clientReferenceId: individualClientReferenceIds), +// ); +// projectBeneficiariesList = await fetchProjectBeneficiary( +// beneficiaryType != BeneficiaryType.individual +// ? householdClientReferenceIds +// : individualClientReferenceIds, +// ); +// if (projectBeneficiariesList.isNotEmpty) { +// // Search for tasks and side effects based on project beneficiaries. +// taskList = await fetchTaskbyProjectBeneficiary(projectBeneficiariesList); +// sideEffectsList = +// await sideEffectDataRepository.search(SideEffectSearchModel( +// taskClientReferenceId: +// taskList.map((e) => e.clientReferenceId).toList(), +// )); +// referralsList = await referralDataRepository.search(ReferralSearchModel( +// projectBeneficiaryClientReferenceId: +// projectBeneficiariesList.map((e) => e.clientReferenceId).toList(), +// )); +// } +// // Initialize a list to store household member wrappers. +// final containers = [...state.householdMembers]; +// // Group household members by household client reference ID. +// final groupedHouseholdsMembers = householdMembersList +// .where((hm) => projectBeneficiariesList +// .map((p) => p.beneficiaryClientReferenceId) +// .toList() +// .contains(beneficiaryType == BeneficiaryType.individual +// ? hm.individualClientReferenceId +// : hm.householdClientReferenceId)) +// .groupListsBy((element) => element.householdClientReferenceId); +// // Iterate through grouped households and retrieve additional data. +// for (final entry in groupedHouseholdsMembers.entries) { +// HouseholdModel filteredHousehold; +// List filteredIndividuals; +// List filteredBeneficiaries; +// List filteredTasks; +// final householdId = entry.key; +// if (householdId == null) continue; +// filteredHousehold = +// householdList.firstWhere((e) => e.clientReferenceId == householdId); +// final List membersIds = +// entry.value.map((e) => e.individualClientReferenceId).toList(); +// filteredIndividuals = individualsList +// .where((element) => membersIds.contains(element.clientReferenceId)) +// .toList(); +// filteredBeneficiaries = projectBeneficiariesList +// .where((element) => beneficiaryType == BeneficiaryType.individual +// ? membersIds.contains(element.beneficiaryClientReferenceId) +// : householdId == element.beneficiaryClientReferenceId) +// .toList(); +// filteredTasks = taskList +// .where((element) => filteredBeneficiaries +// .where((e) => +// e.clientReferenceId == +// element.projectBeneficiaryClientReferenceId) +// .isNotEmpty) +// .toList(); +// +// final beneficiaryClientReferenceIds = filteredBeneficiaries +// .map((e) => e.beneficiaryClientReferenceId) +// .toList(); +// +// final List beneficiaryIndividuals = filteredIndividuals +// .where((element) => +// beneficiaryClientReferenceIds.contains(element.clientReferenceId)) +// .toList(); +// // Find the head of household from the individuals. +// final head = (beneficiaryType == BeneficiaryType.individual +// ? beneficiaryIndividuals +// : filteredIndividuals) +// .firstWhereOrNull( +// (element) => +// element.clientReferenceId == +// entry.value +// .firstWhereOrNull( +// (element) => element.isHeadOfHousehold, +// ) +// ?.individualClientReferenceId, +// ); +// if (head == null || filteredBeneficiaries.isEmpty) continue; +// // Create a container for household members and associated data. +// if (filteredBeneficiaries.isNotEmpty) { +// containers.add( +// HouseholdMemberWrapper( +// household: filteredHousehold, +// headOfHousehold: head, +// members: beneficiaryType == BeneficiaryType.individual +// ? beneficiaryIndividuals +// : filteredIndividuals, +// projectBeneficiaries: filteredBeneficiaries, +// tasks: filteredTasks.isEmpty ? null : filteredTasks, +// sideEffects: sideEffectsList.isEmpty ? null : sideEffectsList, +// referrals: referralsList.isEmpty ? null : referralsList, +// ), +// ); +// } +// } +// // Update the state with the results and mark the search as completed. +// emit(state.copyWith( +// householdMembers: containers, +// loading: false, +// offset: event.offset + event.limit, +// limit: event.limit, +// )); +// } +// } diff --git a/packages/registration_delivery/lib/blocs/search_households/search_bloc_common_wrapper.dart b/packages/registration_delivery/lib/blocs/search_households/search_bloc_common_wrapper.dart index 2ad3af24e..1141e8a43 100644 --- a/packages/registration_delivery/lib/blocs/search_households/search_bloc_common_wrapper.dart +++ b/packages/registration_delivery/lib/blocs/search_households/search_bloc_common_wrapper.dart @@ -2,7 +2,8 @@ import 'dart:async'; import 'package:async/async.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:registration_delivery/blocs/search_households/search_by_status.dart'; +import 'package:registration_delivery/blocs/search_households/individual_global_search.dart'; +import 'household_global_seach.dart'; import 'tag_by_search.dart'; import 'proximity_search.dart'; import 'search_households.dart'; @@ -10,48 +11,39 @@ import 'search_by_head.dart'; class SearchBlocWrapper implements StateStreamableSource { final SearchHouseholdsBloc searchHouseholdsBloc; - final SearchByHeadBloc searchByHeadBloc; - final ProximitySearchBloc proximitySearchBloc; final TagSearchBloc tagSearchBloc; - final StatusSearchBloc statusSearchBloc; + final IndividualGlobalSearchBloc individualGlobalSearchBloc; + final HouseHoldGlobalSearchBloc houseHoldGlobalSearchBloc; - SearchBlocWrapper({ - required this.searchHouseholdsBloc, - required this.searchByHeadBloc, - required this.proximitySearchBloc, - required this.tagSearchBloc, - required this.statusSearchBloc, - }); + SearchBlocWrapper( + {required this.searchHouseholdsBloc, + required this.tagSearchBloc, + required this.individualGlobalSearchBloc, + required this.houseHoldGlobalSearchBloc}); Stream get stateChanges => StreamGroup.merge([ searchHouseholdsBloc.stream, - searchByHeadBloc.stream, - proximitySearchBloc.stream, + individualGlobalSearchBloc.stream, tagSearchBloc.stream, - statusSearchBloc.stream, + houseHoldGlobalSearchBloc.stream ]); void dispatch(SearchHouseholdsEvent event) { - if (event is SearchHouseholdsByProximityEvent) { - proximitySearchBloc.add(event); - } else if (event is SearchHouseholdsByHouseholdsEvent) { - searchByHeadBloc.add(event); + if (event is IndividualGlobalSearchEvent) { + individualGlobalSearchBloc.add(event); } else if (event is SearchHouseholdsByTagEvent) { tagSearchBloc.add(event); - } else if (event is SearchHouseholdsByStatusEvent) { - statusSearchBloc.add(event); } else { searchHouseholdsBloc.add(event); } } void clearEvent() { - proximitySearchBloc.add(const SearchHouseholdsEvent.clear()); - searchByHeadBloc.add(const SearchHouseholdsEvent.clear()); + individualGlobalSearchBloc.add(const SearchHouseholdsEvent.clear()); tagSearchBloc.add(const SearchHouseholdsEvent.clear()); - statusSearchBloc.add(const SearchHouseholdsEvent.clear()); searchHouseholdsBloc.add(const SearchHouseholdsEvent.clear()); + houseHoldGlobalSearchBloc.add(const SearchHouseholdsEvent.clear()); } @override @@ -63,17 +55,13 @@ class SearchBlocWrapper implements StateStreamableSource { @override FutureOr close() { searchHouseholdsBloc.close(); - searchByHeadBloc.close(); - proximitySearchBloc.close(); + individualGlobalSearchBloc.close(); tagSearchBloc.close(); - statusSearchBloc.close(); } @override bool get isClosed => searchHouseholdsBloc.isClosed && - searchByHeadBloc.isClosed && - proximitySearchBloc.isClosed && - tagSearchBloc.isClosed && - statusSearchBloc.isClosed; + individualGlobalSearchBloc.isClosed && + tagSearchBloc.isClosed; } diff --git a/packages/registration_delivery/lib/blocs/search_households/search_by_head.dart b/packages/registration_delivery/lib/blocs/search_households/search_by_head.dart index a3ffb77f9..dde2d5331 100644 --- a/packages/registration_delivery/lib/blocs/search_households/search_by_head.dart +++ b/packages/registration_delivery/lib/blocs/search_households/search_by_head.dart @@ -1,247 +1,247 @@ -import 'dart:async'; - -import 'package:collection/collection.dart'; -import 'package:digit_data_model/data_model.dart'; - -import '../../models/entities/household.dart'; -import '../../models/entities/household_member.dart'; -import '../../models/entities/project_beneficiary.dart'; -import '../../models/entities/referral.dart'; -import '../../models/entities/side_effect.dart'; -import '../../models/entities/task.dart'; -import 'search_households.dart'; - -class SearchByHeadBloc extends SearchHouseholdsBloc { - SearchByHeadBloc({ - required super.userUid, - required super.projectId, - required super.individual, - required super.householdMember, - required super.household, - required super.projectBeneficiary, - required super.taskDataRepository, - required super.beneficiaryType, - required super.sideEffectDataRepository, - required super.addressRepository, - required super.referralDataRepository, - }) { - on( - _handleSearchByHouseholdHead, - transformer: debounce( - const Duration(milliseconds: 100), - ), - ); - } - - FutureOr _handleSearchByHouseholdHead( - SearchHouseholdsSearchByHouseholdHeadEvent event, - SearchHouseholdsEmitter emit, - ) async { - // Check if the search text is empty; if so, clear the results and return. - if (event.searchText.trim().isEmpty) { - super.emit(state.copyWith( - householdMembers: [], - searchQuery: null, - loading: false, - )); - - return; - } - - // Update the state to indicate that the search is in progress. - super.emit(state.copyWith( - loading: true, - searchQuery: event.searchText, - )); - - // Perform a series of asynchronous data retrieval operations based on the search criteria. - - // Fetch hosehold results based on proximity and other criteria. - - List individuals = []; - List proximityBasedIndividualResults = []; - List sideEffects = []; - final containers = []; - List referrals = []; - List tasks = []; - - if (event.isProximityEnabled) { - // Fetch individual results based on proximity and other criteria. - proximityBasedIndividualResults = await addressRepository - .searchHouseHoldByIndividual(AddressSearchModel( - latitude: event.latitude, - longitude: event.longitude, - maxRadius: event.maxRadius, - offset: event.offset, - limit: event.limit, - )); - } - // Extract individual IDs from proximity-based individual results. - final List individualIds = proximityBasedIndividualResults - .map((e) => e.clientReferenceId) - .toList(); - - individuals = await individual.search( - event.isProximityEnabled - ? IndividualSearchModel( - clientReferenceId: individualIds, - name: NameSearchModel( - givenName: event.searchText.trim(), - offset: event.offset, - limit: event.limit, - ), - ) - : IndividualSearchModel( - name: NameSearchModel( - givenName: event.searchText.trim(), - offset: event.offset, - limit: event.limit, - ), - ), - ); - - final individualClientReferenceIds = - individuals.map((e) => e.clientReferenceId).toList(); - // Search for individual results using the extracted IDs and search text. - final List householdMembers = - await fetchHouseholdMembersBulk( - individualClientReferenceIds, - null, - ); - - final househHoldIds = - householdMembers.map((e) => e.householdClientReferenceId!).toList(); - final List allhouseholdMembers = - await fetchHouseholdMembersBulk( - null, - househHoldIds, - ); - - final List individualMembers = - await individual.search(IndividualSearchModel( - clientReferenceId: allhouseholdMembers - .map((e) => e.individualClientReferenceId.toString()) - .toList(), - )); - final List houseHolds = await household.search( - HouseholdSearchModel( - clientReferenceId: househHoldIds, - ), - ); - - final projectBeneficiaries = await fetchProjectBeneficiary( - beneficiaryType != BeneficiaryType.individual - ? househHoldIds - : allhouseholdMembers - .map((e) => e.individualClientReferenceId.toString()) - .toList(), - ); - - // Search for individual results based on the search text only. - - if (projectBeneficiaries.isNotEmpty) { - // Search for tasks and side effects based on project beneficiaries. - tasks = await fetchTaskbyProjectBeneficiary(projectBeneficiaries); - - sideEffects = await sideEffectDataRepository.search(SideEffectSearchModel( - taskClientReferenceId: tasks.map((e) => e.clientReferenceId).toList(), - )); - - referrals = await referralDataRepository.search(ReferralSearchModel( - projectBeneficiaryClientReferenceId: - projectBeneficiaries.map((e) => e.clientReferenceId).toList(), - )); - } - - // Initialize a list to store household members. - final groupedHouseholds = allhouseholdMembers - .where((hm) => projectBeneficiaries - .map((p) => p.beneficiaryClientReferenceId) - .toList() - .contains(beneficiaryType == BeneficiaryType.individual - ? hm.individualClientReferenceId - : hm.householdClientReferenceId)) - .groupListsBy((element) => element.householdClientReferenceId); - - // Iterate through grouped households and retrieve additional data. - for (final entry in groupedHouseholds.entries) { - final householdId = entry.key; - - if (householdId == null) continue; - // Retrieve the first household result. - final householdresult = - houseHolds.firstWhere((e) => e.clientReferenceId == householdId); - // Search for individuals based on proximity, beneficiary type, and search text. - final List membersIds = - entry.value.map((e) => e.individualClientReferenceId).toList(); - final List individualMembersList = individualMembers - .where((element) => membersIds.contains(element.clientReferenceId)) - .toList(); - final List beneficiaries = projectBeneficiaries - .where((element) => beneficiaryType == BeneficiaryType.individual - ? individualClientReferenceIds - .contains(element.beneficiaryClientReferenceId) - : (househHoldIds).contains(element.beneficiaryClientReferenceId)) - .toList(); - final beneficiaryClientReferenceIds = projectBeneficiaries - .map((e) => e.beneficiaryClientReferenceId) - .toList(); - final List beneficiaryIndividuals = individualMembersList - .where((element) => - beneficiaryClientReferenceIds.contains(element.clientReferenceId)) - .toList(); - // Find the head of household from the individuals. - final head = ((beneficiaryType == BeneficiaryType.individual - ? beneficiaryIndividuals - : individualMembersList)) - .firstWhereOrNull( - (element) => - element.clientReferenceId == - entry.value - .firstWhereOrNull( - (element) => element.isHeadOfHousehold, - ) - ?.individualClientReferenceId, - ); - individualMembersList.firstWhereOrNull( - (element) => - element.clientReferenceId == - entry.value - .firstWhereOrNull( - (element) => element.isHeadOfHousehold, - ) - ?.individualClientReferenceId, - ); - - if (head == null || beneficiaries.isEmpty) continue; - - // Search for project beneficiaries based on client reference ID and project. - - if (beneficiaries.isNotEmpty) { - // Create a container for household members and associated data. - containers.add( - HouseholdMemberWrapper( - household: householdresult, - headOfHousehold: head, - members: beneficiaryType == BeneficiaryType.individual - ? beneficiaryIndividuals - : individualMembersList, - projectBeneficiaries: beneficiaries, - tasks: tasks.isEmpty ? null : tasks, - sideEffects: sideEffects.isEmpty ? null : sideEffects, - referrals: referrals.isEmpty ? null : referrals, - ), - ); - } - - // Update the state with the results and mark the search as completed. - } - super.emit(state.copyWith( - searchQuery: event.searchText, - householdMembers: [...containers], - loading: false, - offset: event.offset + event.limit, - limit: event.limit, - )); - } -} +// import 'dart:async'; +// +// import 'package:collection/collection.dart'; +// import 'package:digit_data_model/data_model.dart'; +// +// import '../../models/entities/household.dart'; +// import '../../models/entities/household_member.dart'; +// import '../../models/entities/project_beneficiary.dart'; +// import '../../models/entities/referral.dart'; +// import '../../models/entities/side_effect.dart'; +// import '../../models/entities/task.dart'; +// import 'search_households.dart'; +// +// class SearchByHeadBloc extends SearchHouseholdsBloc { +// SearchByHeadBloc({ +// required super.userUid, +// required super.projectId, +// required super.individual, +// required super.householdMember, +// required super.household, +// required super.projectBeneficiary, +// required super.taskDataRepository, +// required super.beneficiaryType, +// required super.sideEffectDataRepository, +// required super.addressRepository, +// required super.referralDataRepository, +// }) { +// on( +// _handleSearchByHouseholdHead, +// transformer: debounce( +// const Duration(milliseconds: 100), +// ), +// ); +// } +// +// FutureOr _handleSearchByHouseholdHead( +// SearchHouseholdsSearchByHouseholdHeadEvent event, +// SearchHouseholdsEmitter emit, +// ) async { +// // Check if the search text is empty; if so, clear the results and return. +// if (event.searchText.trim().isEmpty) { +// super.emit(state.copyWith( +// householdMembers: [], +// searchQuery: null, +// loading: false, +// )); +// +// return; +// } +// +// // Update the state to indicate that the search is in progress. +// super.emit(state.copyWith( +// loading: true, +// searchQuery: event.searchText, +// )); +// +// // Perform a series of asynchronous data retrieval operations based on the search criteria. +// +// // Fetch hosehold results based on proximity and other criteria. +// +// List individuals = []; +// List proximityBasedIndividualResults = []; +// List sideEffects = []; +// final containers = []; +// List referrals = []; +// List tasks = []; +// +// if (event.isProximityEnabled) { +// // Fetch individual results based on proximity and other criteria. +// proximityBasedIndividualResults = await addressRepository +// .searchHouseHoldByIndividual(AddressSearchModel( +// latitude: event.latitude, +// longitude: event.longitude, +// maxRadius: event.maxRadius, +// offset: event.offset, +// limit: event.limit, +// )); +// } +// // Extract individual IDs from proximity-based individual results. +// final List individualIds = proximityBasedIndividualResults +// .map((e) => e.clientReferenceId) +// .toList(); +// +// individuals = await individual.search( +// event.isProximityEnabled +// ? IndividualSearchModel( +// clientReferenceId: individualIds, +// name: NameSearchModel( +// givenName: event.searchText.trim(), +// offset: event.offset, +// limit: event.limit, +// ), +// ) +// : IndividualSearchModel( +// name: NameSearchModel( +// givenName: event.searchText.trim(), +// offset: event.offset, +// limit: event.limit, +// ), +// ), +// ); +// +// final individualClientReferenceIds = +// individuals.map((e) => e.clientReferenceId).toList(); +// // Search for individual results using the extracted IDs and search text. +// final List householdMembers = +// await fetchHouseholdMembersBulk( +// individualClientReferenceIds, +// null, +// ); +// +// final househHoldIds = +// householdMembers.map((e) => e.householdClientReferenceId!).toList(); +// final List allhouseholdMembers = +// await fetchHouseholdMembersBulk( +// null, +// househHoldIds, +// ); +// +// final List individualMembers = +// await individual.search(IndividualSearchModel( +// clientReferenceId: allhouseholdMembers +// .map((e) => e.individualClientReferenceId.toString()) +// .toList(), +// )); +// final List houseHolds = await household.search( +// HouseholdSearchModel( +// clientReferenceId: househHoldIds, +// ), +// ); +// +// final projectBeneficiaries = await fetchProjectBeneficiary( +// beneficiaryType != BeneficiaryType.individual +// ? househHoldIds +// : allhouseholdMembers +// .map((e) => e.individualClientReferenceId.toString()) +// .toList(), +// ); +// +// // Search for individual results based on the search text only. +// +// if (projectBeneficiaries.isNotEmpty) { +// // Search for tasks and side effects based on project beneficiaries. +// tasks = await fetchTaskbyProjectBeneficiary(projectBeneficiaries); +// +// sideEffects = await sideEffectDataRepository.search(SideEffectSearchModel( +// taskClientReferenceId: tasks.map((e) => e.clientReferenceId).toList(), +// )); +// +// referrals = await referralDataRepository.search(ReferralSearchModel( +// projectBeneficiaryClientReferenceId: +// projectBeneficiaries.map((e) => e.clientReferenceId).toList(), +// )); +// } +// +// // Initialize a list to store household members. +// final groupedHouseholds = allhouseholdMembers +// .where((hm) => projectBeneficiaries +// .map((p) => p.beneficiaryClientReferenceId) +// .toList() +// .contains(beneficiaryType == BeneficiaryType.individual +// ? hm.individualClientReferenceId +// : hm.householdClientReferenceId)) +// .groupListsBy((element) => element.householdClientReferenceId); +// +// // Iterate through grouped households and retrieve additional data. +// for (final entry in groupedHouseholds.entries) { +// final householdId = entry.key; +// +// if (householdId == null) continue; +// // Retrieve the first household result. +// final householdresult = +// houseHolds.firstWhere((e) => e.clientReferenceId == householdId); +// // Search for individuals based on proximity, beneficiary type, and search text. +// final List membersIds = +// entry.value.map((e) => e.individualClientReferenceId).toList(); +// final List individualMembersList = individualMembers +// .where((element) => membersIds.contains(element.clientReferenceId)) +// .toList(); +// final List beneficiaries = projectBeneficiaries +// .where((element) => beneficiaryType == BeneficiaryType.individual +// ? individualClientReferenceIds +// .contains(element.beneficiaryClientReferenceId) +// : (househHoldIds).contains(element.beneficiaryClientReferenceId)) +// .toList(); +// final beneficiaryClientReferenceIds = projectBeneficiaries +// .map((e) => e.beneficiaryClientReferenceId) +// .toList(); +// final List beneficiaryIndividuals = individualMembersList +// .where((element) => +// beneficiaryClientReferenceIds.contains(element.clientReferenceId)) +// .toList(); +// // Find the head of household from the individuals. +// final head = ((beneficiaryType == BeneficiaryType.individual +// ? beneficiaryIndividuals +// : individualMembersList)) +// .firstWhereOrNull( +// (element) => +// element.clientReferenceId == +// entry.value +// .firstWhereOrNull( +// (element) => element.isHeadOfHousehold, +// ) +// ?.individualClientReferenceId, +// ); +// individualMembersList.firstWhereOrNull( +// (element) => +// element.clientReferenceId == +// entry.value +// .firstWhereOrNull( +// (element) => element.isHeadOfHousehold, +// ) +// ?.individualClientReferenceId, +// ); +// +// if (head == null || beneficiaries.isEmpty) continue; +// +// // Search for project beneficiaries based on client reference ID and project. +// +// if (beneficiaries.isNotEmpty) { +// // Create a container for household members and associated data. +// containers.add( +// HouseholdMemberWrapper( +// household: householdresult, +// headOfHousehold: head, +// members: beneficiaryType == BeneficiaryType.individual +// ? beneficiaryIndividuals +// : individualMembersList, +// projectBeneficiaries: beneficiaries, +// tasks: tasks.isEmpty ? null : tasks, +// sideEffects: sideEffects.isEmpty ? null : sideEffects, +// referrals: referrals.isEmpty ? null : referrals, +// ), +// ); +// } +// +// // Update the state with the results and mark the search as completed. +// } +// super.emit(state.copyWith( +// searchQuery: event.searchText, +// householdMembers: [...containers], +// loading: false, +// offset: event.offset + event.limit, +// limit: event.limit, +// )); +// } +// } diff --git a/packages/registration_delivery/lib/blocs/search_households/search_by_status.dart b/packages/registration_delivery/lib/blocs/search_households/search_by_status.dart deleted file mode 100644 index aa9296d2d..000000000 --- a/packages/registration_delivery/lib/blocs/search_households/search_by_status.dart +++ /dev/null @@ -1,328 +0,0 @@ -import 'dart:async'; - -import 'package:bloc/bloc.dart'; -import 'package:collection/collection.dart'; -import 'package:digit_data_model/models/entities/address.dart'; -import 'package:digit_data_model/models/entities/beneficiary_type.dart'; -import 'package:digit_data_model/models/entities/individual.dart'; -import 'package:flutter/foundation.dart'; -import 'package:registration_delivery/models/entities/status.dart'; -import 'package:registration_delivery/registration_delivery.dart'; - -class StatusSearchBloc extends SearchHouseholdsBloc { - StatusSearchBloc( - {required super.userUid, - required super.projectId, - required super.individual, - required super.householdMember, - required super.household, - required super.projectBeneficiary, - required super.taskDataRepository, - required super.beneficiaryType, - required super.sideEffectDataRepository, - required super.referralDataRepository, - required super.addressRepository}) { - // Register the event handler for searching households by status - on(_searchByStatus); - } - - FutureOr _searchByStatus(SearchHouseholdsByStatusEvent event, - Emitter emit) { - // Initialize lists to store fetched data - List householdList = []; - List individualsList = []; - List householdMembersList = []; - List projectBeneficiariesList = []; - List taskList = []; - List sideEffectsList = []; - List referralsList = []; - // Initialize a list to store household member wrappers - final containers = [...state.householdMembers]; - - // Emit loading state - emit(state.copyWith(loading: true)); - try { - switch (event.status.first) { - case Status.registered: - fetchRegisteredResults( - event, - containers, - householdList, - individualsList, - householdMembersList, - projectBeneficiariesList, - taskList, - sideEffectsList, - referralsList); - case Status.notRegistered: - fetchNotRegisteredResults( - event, - containers, - householdList, - individualsList, - householdMembersList, - projectBeneficiariesList, - taskList, - sideEffectsList, - referralsList); - default: - if (kDebugMode) { - print('status not found'); - } - break; - } - - // Emit the updated state with household members and loading status - emit(state.copyWith( - householdMembers: containers, - loading: false, - offset: event.offset + event.limit, - limit: event.limit, - )); - } catch (e) { - // Handle errors and emit the error state - if (kDebugMode) { - print('error searching by status: $e'); - } - emit(state.copyWith( - loading: false, - householdMembers: [], - )); - } - } - - void fetchRegisteredResults( - SearchHouseholdsByStatusEvent event, - List containers, - List householdList, - List individualsList, - List householdMembersList, - List projectBeneficiariesList, - List taskList, - List sideEffectsList, - List referralsList) async { - // Fetch project beneficiaries based on project ID - projectBeneficiariesList = await projectBeneficiary.search( - ProjectBeneficiarySearchModel( - projectId: [event.projectId], - ), - ); - - // Extract individual client reference IDs from beneficiaries - final List individualClientReferenceIds = projectBeneficiariesList - .map((e) => e.beneficiaryClientReferenceId.toString()) - .toList(); - - // Fetch individuals based on client reference IDs - individualsList = await individual.search( - IndividualSearchModel(clientReferenceId: individualClientReferenceIds), - ); - - // Fetch household members in bulk based on individual client reference IDs - householdMembersList = await fetchHouseholdMembersBulk( - individualClientReferenceIds, - null, - ); - - // Fetch households based on household client reference IDs from household members - householdList = await household.search( - HouseholdSearchModel( - clientReferenceId: householdMembersList - .map((e) => e.householdClientReferenceId.toString()) - .toList(), - ), - ); - - // Group household members by household client reference ID - final groupedHouseholdsMembers = householdMembersList - .where((hm) => projectBeneficiariesList - .map((p) => p.beneficiaryClientReferenceId) - .toList() - .contains(beneficiaryType == BeneficiaryType.individual - ? hm.individualClientReferenceId - : hm.householdClientReferenceId)) - .groupListsBy((element) => element.householdClientReferenceId); - - // Iterate over grouped household members - for (final entry in groupedHouseholdsMembers.entries) { - HouseholdModel filteredHousehold; - List filteredIndividuals; - List filteredBeneficiaries; - List filteredTasks; - final householdId = entry.key; - if (householdId == null) continue; - - // Filter household based on household ID - filteredHousehold = - householdList.firstWhere((e) => e.clientReferenceId == householdId); - - // Extract individual client reference IDs from household members - final List membersIds = - entry.value.map((e) => e.individualClientReferenceId).toList(); - - // Filter individuals based on individual client reference IDs - filteredIndividuals = individualsList - .where((element) => membersIds.contains(element.clientReferenceId)) - .toList(); - - // Filter project beneficiaries based on individual or household client reference IDs - filteredBeneficiaries = projectBeneficiariesList - .where((element) => beneficiaryType == BeneficiaryType.individual - ? membersIds.contains(element.beneficiaryClientReferenceId) - : householdId == element.beneficiaryClientReferenceId) - .toList(); - - // Filter tasks based on project beneficiary client reference IDs - filteredTasks = taskList - .where((element) => filteredBeneficiaries - .where((e) => - e.clientReferenceId == - element.projectBeneficiaryClientReferenceId) - .isNotEmpty) - .toList(); - - // Extract beneficiary client reference IDs from filtered beneficiaries - final beneficiaryClientReferenceIds = filteredBeneficiaries - .map((e) => e.beneficiaryClientReferenceId) - .toList(); - - // Filter individuals based on beneficiary client reference IDs - final List beneficiaryIndividuals = filteredIndividuals - .where((element) => - beneficiaryClientReferenceIds.contains(element.clientReferenceId)) - .toList(); - - // Find the head of the household - final head = (beneficiaryType == BeneficiaryType.individual - ? beneficiaryIndividuals - : filteredIndividuals) - .firstWhereOrNull( - (element) => - element.clientReferenceId == - entry.value - .firstWhereOrNull( - (element) => element.isHeadOfHousehold, - ) - ?.individualClientReferenceId, - ); - - // Skip if no head of household or no filtered beneficiaries - if (head == null || filteredBeneficiaries.isEmpty) continue; - - // Add household member wrapper to containers - if (filteredBeneficiaries.isNotEmpty) { - containers.add( - HouseholdMemberWrapper( - household: filteredHousehold, - headOfHousehold: head, - members: beneficiaryType == BeneficiaryType.individual - ? beneficiaryIndividuals - : filteredIndividuals, - projectBeneficiaries: filteredBeneficiaries, - tasks: filteredTasks.isEmpty ? null : filteredTasks, - sideEffects: sideEffectsList.isEmpty ? null : sideEffectsList, - referrals: referralsList.isEmpty ? null : referralsList, - ), - ); - } - } - } - - void fetchNotRegisteredResults( - SearchHouseholdsByStatusEvent event, - List containers, - List householdList, - List individualsList, - List householdMembersList, - List projectBeneficiariesList, - List taskList, - List sideEffectsList, - List referralsList) async { - // Fetch individual results based on proximity and other criteria. - householdList = - await addressRepository.searchHouseHoldbyAddress(AddressSearchModel( - boundaryCode: RegistrationDeliverySingleton().boundary?.code.toString(), - offset: event.offset, - limit: event.limit, - )); - - // Extract individual IDs from proximity-based individual results. - final householdClientReferenceIds = - householdList.map((e) => e.clientReferenceId).toList(); - householdMembersList = await fetchHouseholdMembersBulk( - null, - householdClientReferenceIds, - ); - - final List individualClientReferenceIds = householdMembersList - .map((e) => e.individualClientReferenceId.toString()) - .toList(); - individualsList = await individual.search( - IndividualSearchModel(clientReferenceId: individualClientReferenceIds), - ); - - projectBeneficiariesList = await fetchProjectBeneficiary( - beneficiaryType != BeneficiaryType.individual - ? householdClientReferenceIds - : individualClientReferenceIds, - ); - - // Group household members which do not have project beneficiaries - final groupedHouseholdsMembersWithoutBeneficiaries = householdMembersList - .where((hm) => !projectBeneficiariesList - .map((p) => p.beneficiaryClientReferenceId) - .toList() - .contains(beneficiaryType == BeneficiaryType.individual - ? hm.individualClientReferenceId - : hm.householdClientReferenceId)) - .groupListsBy((element) => element.householdClientReferenceId); - -// Iterate over grouped household members without beneficiaries - for (final entry in groupedHouseholdsMembersWithoutBeneficiaries.entries) { - HouseholdModel filteredHousehold; - List filteredIndividuals; - final householdId = entry.key; - if (householdId == null) continue; - - // Filter household based on household ID - filteredHousehold = - householdList.firstWhere((e) => e.clientReferenceId == householdId); - - // Extract individual client reference IDs from household members - final List membersIds = - entry.value.map((e) => e.individualClientReferenceId).toList(); - - // Filter individuals based on individual client reference IDs - filteredIndividuals = individualsList - .where((element) => membersIds.contains(element.clientReferenceId)) - .toList(); - - // Find the head of the household - final head = filteredIndividuals.firstWhereOrNull( - (element) => - element.clientReferenceId == - entry.value - .firstWhereOrNull( - (element) => element.isHeadOfHousehold, - ) - ?.individualClientReferenceId, - ); - - // Skip if no head of household - if (head == null) continue; - - // Add household member wrapper to containers - containers.add( - HouseholdMemberWrapper( - household: filteredHousehold, - headOfHousehold: head, - members: filteredIndividuals, - projectBeneficiaries: [], - tasks: null, - sideEffects: null, - referrals: null, - ), - ); - } - } -} diff --git a/packages/registration_delivery/lib/blocs/search_households/search_households.dart b/packages/registration_delivery/lib/blocs/search_households/search_households.dart index 879afee2a..2a1a14eb5 100644 --- a/packages/registration_delivery/lib/blocs/search_households/search_households.dart +++ b/packages/registration_delivery/lib/blocs/search_households/search_households.dart @@ -4,10 +4,14 @@ import 'dart:async'; import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/utils/typedefs.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:registration_delivery/blocs/search_households/individual_global_search.dart'; import 'package:stream_transform/stream_transform.dart'; +import '../../data/repositories/local/household_global_search.dart'; +import '../../data/repositories/local/individual_global_search.dart'; import '../../data/repositories/local/registration_delivery_address.dart'; import '../../models/entities/household.dart'; import '../../models/entities/household_member.dart'; @@ -16,6 +20,7 @@ import '../../models/entities/referral.dart'; import '../../models/entities/side_effect.dart'; import '../../models/entities/status.dart'; import '../../models/entities/task.dart'; +import '../../utils/global_search_parameters.dart'; import '../../utils/typedefs.dart'; part 'search_households.freezed.dart'; @@ -39,20 +44,24 @@ class SearchHouseholdsBloc final TaskDataRepository taskDataRepository; final SideEffectDataRepository sideEffectDataRepository; final ReferralDataRepository referralDataRepository; - - SearchHouseholdsBloc({ - required this.userUid, - required this.projectId, - required this.individual, - required this.householdMember, - required this.household, - required this.projectBeneficiary, - required this.taskDataRepository, - required this.beneficiaryType, - required this.sideEffectDataRepository, - required this.addressRepository, - required this.referralDataRepository, - }) : super(const SearchHouseholdsState()) { + final IndividualGlobalSearchRepository individualGlobalSearchRepository; + final HouseHoldGlobalSearchRepository houseHoldGlobalSearchRepository; + + SearchHouseholdsBloc( + {required this.userUid, + required this.projectId, + required this.individual, + required this.householdMember, + required this.household, + required this.projectBeneficiary, + required this.taskDataRepository, + required this.beneficiaryType, + required this.sideEffectDataRepository, + required this.addressRepository, + required this.referralDataRepository, + required this.individualGlobalSearchRepository, + required this.houseHoldGlobalSearchRepository}) + : super(const SearchHouseholdsState()) { on(_handleClear); on(_handleSearchByHousehold); } @@ -265,6 +274,17 @@ class SearchHouseholdsEvent with _$SearchHouseholdsEvent { }) = SearchHouseholdsByTagEvent; const factory SearchHouseholdsEvent.clear() = SearchHouseholdsClearEvent; + + const factory SearchHouseholdsEvent.individualGlobalSearch({ + required GlobalSearchParameters globalSearchParams, + }) = IndividualGlobalSearchEvent; + + const factory SearchHouseholdsEvent.houseHoldGlobalSearch({ + required GlobalSearchParameters globalSearchParams, + }) = HouseHoldGlobalSearchEvent; + + const factory SearchHouseholdsEvent.paginate( + {required ScrollMetrics scrollMetrics}) = SearchHouseholdsPaginateEvent; } @freezed diff --git a/packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart b/packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart index f6655fbcc..a0c366a0a 100644 --- a/packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart +++ b/packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart @@ -46,6 +46,11 @@ mixin _$SearchHouseholdsEvent { searchByProximity, required TResult Function(String tag, String projectId) searchByTag, required TResult Function() clear, + required TResult Function(GlobalSearchParameters globalSearchParams) + individualGlobalSearch, + required TResult Function(GlobalSearchParameters globalSearchParams) + houseHoldGlobalSearch, + required TResult Function(ScrollMetrics scrollMetrics) paginate, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -78,6 +83,11 @@ mixin _$SearchHouseholdsEvent { searchByProximity, TResult? Function(String tag, String projectId)? searchByTag, TResult? Function()? clear, + TResult? Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult? Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + TResult? Function(ScrollMetrics scrollMetrics)? paginate, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -110,6 +120,11 @@ mixin _$SearchHouseholdsEvent { searchByProximity, TResult Function(String tag, String projectId)? searchByTag, TResult Function()? clear, + TResult Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + TResult Function(ScrollMetrics scrollMetrics)? paginate, required TResult orElse(), }) => throw _privateConstructorUsedError; @@ -127,6 +142,11 @@ mixin _$SearchHouseholdsEvent { searchByProximity, required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, required TResult Function(SearchHouseholdsClearEvent value) clear, + required TResult Function(IndividualGlobalSearchEvent value) + individualGlobalSearch, + required TResult Function(HouseHoldGlobalSearchEvent value) + houseHoldGlobalSearch, + required TResult Function(SearchHouseholdsPaginateEvent value) paginate, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -141,6 +161,10 @@ mixin _$SearchHouseholdsEvent { searchByProximity, TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult? Function(SearchHouseholdsClearEvent value)? clear, + TResult? Function(IndividualGlobalSearchEvent value)? + individualGlobalSearch, + TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + TResult? Function(SearchHouseholdsPaginateEvent value)? paginate, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -154,6 +178,9 @@ mixin _$SearchHouseholdsEvent { TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult Function(SearchHouseholdsClearEvent value)? clear, + TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, + TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + TResult Function(SearchHouseholdsPaginateEvent value)? paginate, required TResult orElse(), }) => throw _privateConstructorUsedError; @@ -249,6 +276,11 @@ class _$SearchHouseholdsInitializedEventImpl searchByProximity, required TResult Function(String tag, String projectId) searchByTag, required TResult Function() clear, + required TResult Function(GlobalSearchParameters globalSearchParams) + individualGlobalSearch, + required TResult Function(GlobalSearchParameters globalSearchParams) + houseHoldGlobalSearch, + required TResult Function(ScrollMetrics scrollMetrics) paginate, }) { return initialize(); } @@ -284,6 +316,11 @@ class _$SearchHouseholdsInitializedEventImpl searchByProximity, TResult? Function(String tag, String projectId)? searchByTag, TResult? Function()? clear, + TResult? Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult? Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + TResult? Function(ScrollMetrics scrollMetrics)? paginate, }) { return initialize?.call(); } @@ -319,6 +356,11 @@ class _$SearchHouseholdsInitializedEventImpl searchByProximity, TResult Function(String tag, String projectId)? searchByTag, TResult Function()? clear, + TResult Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + TResult Function(ScrollMetrics scrollMetrics)? paginate, required TResult orElse(), }) { if (initialize != null) { @@ -342,6 +384,11 @@ class _$SearchHouseholdsInitializedEventImpl searchByProximity, required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, required TResult Function(SearchHouseholdsClearEvent value) clear, + required TResult Function(IndividualGlobalSearchEvent value) + individualGlobalSearch, + required TResult Function(HouseHoldGlobalSearchEvent value) + houseHoldGlobalSearch, + required TResult Function(SearchHouseholdsPaginateEvent value) paginate, }) { return initialize(this); } @@ -359,6 +406,10 @@ class _$SearchHouseholdsInitializedEventImpl searchByProximity, TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult? Function(SearchHouseholdsClearEvent value)? clear, + TResult? Function(IndividualGlobalSearchEvent value)? + individualGlobalSearch, + TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + TResult? Function(SearchHouseholdsPaginateEvent value)? paginate, }) { return initialize?.call(this); } @@ -375,6 +426,9 @@ class _$SearchHouseholdsInitializedEventImpl TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult Function(SearchHouseholdsClearEvent value)? clear, + TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, + TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + TResult Function(SearchHouseholdsPaginateEvent value)? paginate, required TResult orElse(), }) { if (initialize != null) { @@ -547,6 +601,11 @@ class _$SearchHouseholdsByHouseholdsEventImpl searchByProximity, required TResult Function(String tag, String projectId) searchByTag, required TResult Function() clear, + required TResult Function(GlobalSearchParameters globalSearchParams) + individualGlobalSearch, + required TResult Function(GlobalSearchParameters globalSearchParams) + houseHoldGlobalSearch, + required TResult Function(ScrollMetrics scrollMetrics) paginate, }) { return searchByHousehold(projectId, latitude, longitude, maxRadius, isProximityEnabled, householdModel); @@ -583,6 +642,11 @@ class _$SearchHouseholdsByHouseholdsEventImpl searchByProximity, TResult? Function(String tag, String projectId)? searchByTag, TResult? Function()? clear, + TResult? Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult? Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + TResult? Function(ScrollMetrics scrollMetrics)? paginate, }) { return searchByHousehold?.call(projectId, latitude, longitude, maxRadius, isProximityEnabled, householdModel); @@ -619,6 +683,11 @@ class _$SearchHouseholdsByHouseholdsEventImpl searchByProximity, TResult Function(String tag, String projectId)? searchByTag, TResult Function()? clear, + TResult Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + TResult Function(ScrollMetrics scrollMetrics)? paginate, required TResult orElse(), }) { if (searchByHousehold != null) { @@ -643,6 +712,11 @@ class _$SearchHouseholdsByHouseholdsEventImpl searchByProximity, required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, required TResult Function(SearchHouseholdsClearEvent value) clear, + required TResult Function(IndividualGlobalSearchEvent value) + individualGlobalSearch, + required TResult Function(HouseHoldGlobalSearchEvent value) + houseHoldGlobalSearch, + required TResult Function(SearchHouseholdsPaginateEvent value) paginate, }) { return searchByHousehold(this); } @@ -660,6 +734,10 @@ class _$SearchHouseholdsByHouseholdsEventImpl searchByProximity, TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult? Function(SearchHouseholdsClearEvent value)? clear, + TResult? Function(IndividualGlobalSearchEvent value)? + individualGlobalSearch, + TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + TResult? Function(SearchHouseholdsPaginateEvent value)? paginate, }) { return searchByHousehold?.call(this); } @@ -676,6 +754,9 @@ class _$SearchHouseholdsByHouseholdsEventImpl TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult Function(SearchHouseholdsClearEvent value)? clear, + TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, + TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + TResult Function(SearchHouseholdsPaginateEvent value)? paginate, required TResult orElse(), }) { if (searchByHousehold != null) { @@ -842,6 +923,11 @@ class _$SearchHouseholdsByStatusEventImpl searchByProximity, required TResult Function(String tag, String projectId) searchByTag, required TResult Function() clear, + required TResult Function(GlobalSearchParameters globalSearchParams) + individualGlobalSearch, + required TResult Function(GlobalSearchParameters globalSearchParams) + houseHoldGlobalSearch, + required TResult Function(ScrollMetrics scrollMetrics) paginate, }) { return searchByStatus(projectId, offset, limit, status); } @@ -877,6 +963,11 @@ class _$SearchHouseholdsByStatusEventImpl searchByProximity, TResult? Function(String tag, String projectId)? searchByTag, TResult? Function()? clear, + TResult? Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult? Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + TResult? Function(ScrollMetrics scrollMetrics)? paginate, }) { return searchByStatus?.call(projectId, offset, limit, status); } @@ -912,6 +1003,11 @@ class _$SearchHouseholdsByStatusEventImpl searchByProximity, TResult Function(String tag, String projectId)? searchByTag, TResult Function()? clear, + TResult Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + TResult Function(ScrollMetrics scrollMetrics)? paginate, required TResult orElse(), }) { if (searchByStatus != null) { @@ -935,6 +1031,11 @@ class _$SearchHouseholdsByStatusEventImpl searchByProximity, required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, required TResult Function(SearchHouseholdsClearEvent value) clear, + required TResult Function(IndividualGlobalSearchEvent value) + individualGlobalSearch, + required TResult Function(HouseHoldGlobalSearchEvent value) + houseHoldGlobalSearch, + required TResult Function(SearchHouseholdsPaginateEvent value) paginate, }) { return searchByStatus(this); } @@ -952,6 +1053,10 @@ class _$SearchHouseholdsByStatusEventImpl searchByProximity, TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult? Function(SearchHouseholdsClearEvent value)? clear, + TResult? Function(IndividualGlobalSearchEvent value)? + individualGlobalSearch, + TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + TResult? Function(SearchHouseholdsPaginateEvent value)? paginate, }) { return searchByStatus?.call(this); } @@ -968,6 +1073,9 @@ class _$SearchHouseholdsByStatusEventImpl TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult Function(SearchHouseholdsClearEvent value)? clear, + TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, + TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + TResult Function(SearchHouseholdsPaginateEvent value)? paginate, required TResult orElse(), }) { if (searchByStatus != null) { @@ -1185,6 +1293,11 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl searchByProximity, required TResult Function(String tag, String projectId) searchByTag, required TResult Function() clear, + required TResult Function(GlobalSearchParameters globalSearchParams) + individualGlobalSearch, + required TResult Function(GlobalSearchParameters globalSearchParams) + houseHoldGlobalSearch, + required TResult Function(ScrollMetrics scrollMetrics) paginate, }) { return searchByHouseholdHead(searchText, projectId, isProximityEnabled, latitude, longitude, maxRadius, tag, offset, limit); @@ -1221,6 +1334,11 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl searchByProximity, TResult? Function(String tag, String projectId)? searchByTag, TResult? Function()? clear, + TResult? Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult? Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + TResult? Function(ScrollMetrics scrollMetrics)? paginate, }) { return searchByHouseholdHead?.call(searchText, projectId, isProximityEnabled, latitude, longitude, maxRadius, tag, offset, limit); @@ -1257,6 +1375,11 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl searchByProximity, TResult Function(String tag, String projectId)? searchByTag, TResult Function()? clear, + TResult Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + TResult Function(ScrollMetrics scrollMetrics)? paginate, required TResult orElse(), }) { if (searchByHouseholdHead != null) { @@ -1281,6 +1404,11 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl searchByProximity, required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, required TResult Function(SearchHouseholdsClearEvent value) clear, + required TResult Function(IndividualGlobalSearchEvent value) + individualGlobalSearch, + required TResult Function(HouseHoldGlobalSearchEvent value) + houseHoldGlobalSearch, + required TResult Function(SearchHouseholdsPaginateEvent value) paginate, }) { return searchByHouseholdHead(this); } @@ -1298,6 +1426,10 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl searchByProximity, TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult? Function(SearchHouseholdsClearEvent value)? clear, + TResult? Function(IndividualGlobalSearchEvent value)? + individualGlobalSearch, + TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + TResult? Function(SearchHouseholdsPaginateEvent value)? paginate, }) { return searchByHouseholdHead?.call(this); } @@ -1314,6 +1446,9 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult Function(SearchHouseholdsClearEvent value)? clear, + TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, + TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + TResult Function(SearchHouseholdsPaginateEvent value)? paginate, required TResult orElse(), }) { if (searchByHouseholdHead != null) { @@ -1507,6 +1642,11 @@ class _$SearchHouseholdsByProximityEventImpl searchByProximity, required TResult Function(String tag, String projectId) searchByTag, required TResult Function() clear, + required TResult Function(GlobalSearchParameters globalSearchParams) + individualGlobalSearch, + required TResult Function(GlobalSearchParameters globalSearchParams) + houseHoldGlobalSearch, + required TResult Function(ScrollMetrics scrollMetrics) paginate, }) { return searchByProximity( latitude, longititude, projectId, maxRadius, offset, limit); @@ -1543,6 +1683,11 @@ class _$SearchHouseholdsByProximityEventImpl searchByProximity, TResult? Function(String tag, String projectId)? searchByTag, TResult? Function()? clear, + TResult? Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult? Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + TResult? Function(ScrollMetrics scrollMetrics)? paginate, }) { return searchByProximity?.call( latitude, longititude, projectId, maxRadius, offset, limit); @@ -1579,6 +1724,11 @@ class _$SearchHouseholdsByProximityEventImpl searchByProximity, TResult Function(String tag, String projectId)? searchByTag, TResult Function()? clear, + TResult Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + TResult Function(ScrollMetrics scrollMetrics)? paginate, required TResult orElse(), }) { if (searchByProximity != null) { @@ -1603,6 +1753,11 @@ class _$SearchHouseholdsByProximityEventImpl searchByProximity, required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, required TResult Function(SearchHouseholdsClearEvent value) clear, + required TResult Function(IndividualGlobalSearchEvent value) + individualGlobalSearch, + required TResult Function(HouseHoldGlobalSearchEvent value) + houseHoldGlobalSearch, + required TResult Function(SearchHouseholdsPaginateEvent value) paginate, }) { return searchByProximity(this); } @@ -1620,6 +1775,10 @@ class _$SearchHouseholdsByProximityEventImpl searchByProximity, TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult? Function(SearchHouseholdsClearEvent value)? clear, + TResult? Function(IndividualGlobalSearchEvent value)? + individualGlobalSearch, + TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + TResult? Function(SearchHouseholdsPaginateEvent value)? paginate, }) { return searchByProximity?.call(this); } @@ -1636,6 +1795,9 @@ class _$SearchHouseholdsByProximityEventImpl TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult Function(SearchHouseholdsClearEvent value)? clear, + TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, + TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + TResult Function(SearchHouseholdsPaginateEvent value)? paginate, required TResult orElse(), }) { if (searchByProximity != null) { @@ -1773,6 +1935,11 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { searchByProximity, required TResult Function(String tag, String projectId) searchByTag, required TResult Function() clear, + required TResult Function(GlobalSearchParameters globalSearchParams) + individualGlobalSearch, + required TResult Function(GlobalSearchParameters globalSearchParams) + houseHoldGlobalSearch, + required TResult Function(ScrollMetrics scrollMetrics) paginate, }) { return searchByTag(tag, projectId); } @@ -1808,6 +1975,11 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { searchByProximity, TResult? Function(String tag, String projectId)? searchByTag, TResult? Function()? clear, + TResult? Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult? Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + TResult? Function(ScrollMetrics scrollMetrics)? paginate, }) { return searchByTag?.call(tag, projectId); } @@ -1843,6 +2015,11 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { searchByProximity, TResult Function(String tag, String projectId)? searchByTag, TResult Function()? clear, + TResult Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + TResult Function(ScrollMetrics scrollMetrics)? paginate, required TResult orElse(), }) { if (searchByTag != null) { @@ -1866,6 +2043,11 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { searchByProximity, required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, required TResult Function(SearchHouseholdsClearEvent value) clear, + required TResult Function(IndividualGlobalSearchEvent value) + individualGlobalSearch, + required TResult Function(HouseHoldGlobalSearchEvent value) + houseHoldGlobalSearch, + required TResult Function(SearchHouseholdsPaginateEvent value) paginate, }) { return searchByTag(this); } @@ -1883,6 +2065,10 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { searchByProximity, TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult? Function(SearchHouseholdsClearEvent value)? clear, + TResult? Function(IndividualGlobalSearchEvent value)? + individualGlobalSearch, + TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + TResult? Function(SearchHouseholdsPaginateEvent value)? paginate, }) { return searchByTag?.call(this); } @@ -1899,6 +2085,9 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult Function(SearchHouseholdsClearEvent value)? clear, + TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, + TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + TResult Function(SearchHouseholdsPaginateEvent value)? paginate, required TResult orElse(), }) { if (searchByTag != null) { @@ -1990,6 +2179,11 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { searchByProximity, required TResult Function(String tag, String projectId) searchByTag, required TResult Function() clear, + required TResult Function(GlobalSearchParameters globalSearchParams) + individualGlobalSearch, + required TResult Function(GlobalSearchParameters globalSearchParams) + houseHoldGlobalSearch, + required TResult Function(ScrollMetrics scrollMetrics) paginate, }) { return clear(); } @@ -2025,6 +2219,11 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { searchByProximity, TResult? Function(String tag, String projectId)? searchByTag, TResult? Function()? clear, + TResult? Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult? Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + TResult? Function(ScrollMetrics scrollMetrics)? paginate, }) { return clear?.call(); } @@ -2060,6 +2259,11 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { searchByProximity, TResult Function(String tag, String projectId)? searchByTag, TResult Function()? clear, + TResult Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + TResult Function(ScrollMetrics scrollMetrics)? paginate, required TResult orElse(), }) { if (clear != null) { @@ -2083,6 +2287,11 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { searchByProximity, required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, required TResult Function(SearchHouseholdsClearEvent value) clear, + required TResult Function(IndividualGlobalSearchEvent value) + individualGlobalSearch, + required TResult Function(HouseHoldGlobalSearchEvent value) + houseHoldGlobalSearch, + required TResult Function(SearchHouseholdsPaginateEvent value) paginate, }) { return clear(this); } @@ -2100,6 +2309,10 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { searchByProximity, TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult? Function(SearchHouseholdsClearEvent value)? clear, + TResult? Function(IndividualGlobalSearchEvent value)? + individualGlobalSearch, + TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + TResult? Function(SearchHouseholdsPaginateEvent value)? paginate, }) { return clear?.call(this); } @@ -2116,6 +2329,9 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult Function(SearchHouseholdsClearEvent value)? clear, + TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, + TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + TResult Function(SearchHouseholdsPaginateEvent value)? paginate, required TResult orElse(), }) { if (clear != null) { @@ -2129,6 +2345,819 @@ abstract class SearchHouseholdsClearEvent implements SearchHouseholdsEvent { const factory SearchHouseholdsClearEvent() = _$SearchHouseholdsClearEventImpl; } +/// @nodoc +abstract class _$$IndividualGlobalSearchEventImplCopyWith<$Res> { + factory _$$IndividualGlobalSearchEventImplCopyWith( + _$IndividualGlobalSearchEventImpl value, + $Res Function(_$IndividualGlobalSearchEventImpl) then) = + __$$IndividualGlobalSearchEventImplCopyWithImpl<$Res>; + @useResult + $Res call({GlobalSearchParameters globalSearchParams}); +} + +/// @nodoc +class __$$IndividualGlobalSearchEventImplCopyWithImpl<$Res> + extends _$SearchHouseholdsEventCopyWithImpl<$Res, + _$IndividualGlobalSearchEventImpl> + implements _$$IndividualGlobalSearchEventImplCopyWith<$Res> { + __$$IndividualGlobalSearchEventImplCopyWithImpl( + _$IndividualGlobalSearchEventImpl _value, + $Res Function(_$IndividualGlobalSearchEventImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? globalSearchParams = null, + }) { + return _then(_$IndividualGlobalSearchEventImpl( + globalSearchParams: null == globalSearchParams + ? _value.globalSearchParams + : globalSearchParams // ignore: cast_nullable_to_non_nullable + as GlobalSearchParameters, + )); + } +} + +/// @nodoc + +class _$IndividualGlobalSearchEventImpl implements IndividualGlobalSearchEvent { + const _$IndividualGlobalSearchEventImpl({required this.globalSearchParams}); + + @override + final GlobalSearchParameters globalSearchParams; + + @override + String toString() { + return 'SearchHouseholdsEvent.individualGlobalSearch(globalSearchParams: $globalSearchParams)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$IndividualGlobalSearchEventImpl && + (identical(other.globalSearchParams, globalSearchParams) || + other.globalSearchParams == globalSearchParams)); + } + + @override + int get hashCode => Object.hash(runtimeType, globalSearchParams); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$IndividualGlobalSearchEventImplCopyWith<_$IndividualGlobalSearchEventImpl> + get copyWith => __$$IndividualGlobalSearchEventImplCopyWithImpl< + _$IndividualGlobalSearchEventImpl>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() initialize, + required TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel) + searchByHousehold, + required TResult Function( + String projectId, int offset, int limit, List status) + searchByStatus, + required TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit) + searchByHouseholdHead, + required TResult Function(double latitude, double longititude, + String projectId, double maxRadius, int offset, int limit) + searchByProximity, + required TResult Function(String tag, String projectId) searchByTag, + required TResult Function() clear, + required TResult Function(GlobalSearchParameters globalSearchParams) + individualGlobalSearch, + required TResult Function(GlobalSearchParameters globalSearchParams) + houseHoldGlobalSearch, + required TResult Function(ScrollMetrics scrollMetrics) paginate, + }) { + return individualGlobalSearch(globalSearchParams); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? initialize, + TResult? Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult? Function( + String projectId, int offset, int limit, List status)? + searchByStatus, + TResult? Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult? Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult? Function(String tag, String projectId)? searchByTag, + TResult? Function()? clear, + TResult? Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult? Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + TResult? Function(ScrollMetrics scrollMetrics)? paginate, + }) { + return individualGlobalSearch?.call(globalSearchParams); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? initialize, + TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult Function( + String projectId, int offset, int limit, List status)? + searchByStatus, + TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult Function(String tag, String projectId)? searchByTag, + TResult Function()? clear, + TResult Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + TResult Function(ScrollMetrics scrollMetrics)? paginate, + required TResult orElse(), + }) { + if (individualGlobalSearch != null) { + return individualGlobalSearch(globalSearchParams); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(SearchHouseholdsInitializedEvent value) + initialize, + required TResult Function(SearchHouseholdsByHouseholdsEvent value) + searchByHousehold, + required TResult Function(SearchHouseholdsByStatusEvent value) + searchByStatus, + required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) + searchByHouseholdHead, + required TResult Function(SearchHouseholdsByProximityEvent value) + searchByProximity, + required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, + required TResult Function(SearchHouseholdsClearEvent value) clear, + required TResult Function(IndividualGlobalSearchEvent value) + individualGlobalSearch, + required TResult Function(HouseHoldGlobalSearchEvent value) + houseHoldGlobalSearch, + required TResult Function(SearchHouseholdsPaginateEvent value) paginate, + }) { + return individualGlobalSearch(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult? Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult? Function(SearchHouseholdsByStatusEvent value)? searchByStatus, + TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult? Function(SearchHouseholdsByProximityEvent value)? + searchByProximity, + TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult? Function(SearchHouseholdsClearEvent value)? clear, + TResult? Function(IndividualGlobalSearchEvent value)? + individualGlobalSearch, + TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + TResult? Function(SearchHouseholdsPaginateEvent value)? paginate, + }) { + return individualGlobalSearch?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult Function(SearchHouseholdsByStatusEvent value)? searchByStatus, + TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult Function(SearchHouseholdsClearEvent value)? clear, + TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, + TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + TResult Function(SearchHouseholdsPaginateEvent value)? paginate, + required TResult orElse(), + }) { + if (individualGlobalSearch != null) { + return individualGlobalSearch(this); + } + return orElse(); + } +} + +abstract class IndividualGlobalSearchEvent implements SearchHouseholdsEvent { + const factory IndividualGlobalSearchEvent( + {required final GlobalSearchParameters globalSearchParams}) = + _$IndividualGlobalSearchEventImpl; + + GlobalSearchParameters get globalSearchParams; + @JsonKey(ignore: true) + _$$IndividualGlobalSearchEventImplCopyWith<_$IndividualGlobalSearchEventImpl> + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class _$$HouseHoldGlobalSearchEventImplCopyWith<$Res> { + factory _$$HouseHoldGlobalSearchEventImplCopyWith( + _$HouseHoldGlobalSearchEventImpl value, + $Res Function(_$HouseHoldGlobalSearchEventImpl) then) = + __$$HouseHoldGlobalSearchEventImplCopyWithImpl<$Res>; + @useResult + $Res call({GlobalSearchParameters globalSearchParams}); +} + +/// @nodoc +class __$$HouseHoldGlobalSearchEventImplCopyWithImpl<$Res> + extends _$SearchHouseholdsEventCopyWithImpl<$Res, + _$HouseHoldGlobalSearchEventImpl> + implements _$$HouseHoldGlobalSearchEventImplCopyWith<$Res> { + __$$HouseHoldGlobalSearchEventImplCopyWithImpl( + _$HouseHoldGlobalSearchEventImpl _value, + $Res Function(_$HouseHoldGlobalSearchEventImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? globalSearchParams = null, + }) { + return _then(_$HouseHoldGlobalSearchEventImpl( + globalSearchParams: null == globalSearchParams + ? _value.globalSearchParams + : globalSearchParams // ignore: cast_nullable_to_non_nullable + as GlobalSearchParameters, + )); + } +} + +/// @nodoc + +class _$HouseHoldGlobalSearchEventImpl implements HouseHoldGlobalSearchEvent { + const _$HouseHoldGlobalSearchEventImpl({required this.globalSearchParams}); + + @override + final GlobalSearchParameters globalSearchParams; + + @override + String toString() { + return 'SearchHouseholdsEvent.houseHoldGlobalSearch(globalSearchParams: $globalSearchParams)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$HouseHoldGlobalSearchEventImpl && + (identical(other.globalSearchParams, globalSearchParams) || + other.globalSearchParams == globalSearchParams)); + } + + @override + int get hashCode => Object.hash(runtimeType, globalSearchParams); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$HouseHoldGlobalSearchEventImplCopyWith<_$HouseHoldGlobalSearchEventImpl> + get copyWith => __$$HouseHoldGlobalSearchEventImplCopyWithImpl< + _$HouseHoldGlobalSearchEventImpl>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() initialize, + required TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel) + searchByHousehold, + required TResult Function( + String projectId, int offset, int limit, List status) + searchByStatus, + required TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit) + searchByHouseholdHead, + required TResult Function(double latitude, double longititude, + String projectId, double maxRadius, int offset, int limit) + searchByProximity, + required TResult Function(String tag, String projectId) searchByTag, + required TResult Function() clear, + required TResult Function(GlobalSearchParameters globalSearchParams) + individualGlobalSearch, + required TResult Function(GlobalSearchParameters globalSearchParams) + houseHoldGlobalSearch, + required TResult Function(ScrollMetrics scrollMetrics) paginate, + }) { + return houseHoldGlobalSearch(globalSearchParams); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? initialize, + TResult? Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult? Function( + String projectId, int offset, int limit, List status)? + searchByStatus, + TResult? Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult? Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult? Function(String tag, String projectId)? searchByTag, + TResult? Function()? clear, + TResult? Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult? Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + TResult? Function(ScrollMetrics scrollMetrics)? paginate, + }) { + return houseHoldGlobalSearch?.call(globalSearchParams); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? initialize, + TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult Function( + String projectId, int offset, int limit, List status)? + searchByStatus, + TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult Function(String tag, String projectId)? searchByTag, + TResult Function()? clear, + TResult Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + TResult Function(ScrollMetrics scrollMetrics)? paginate, + required TResult orElse(), + }) { + if (houseHoldGlobalSearch != null) { + return houseHoldGlobalSearch(globalSearchParams); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(SearchHouseholdsInitializedEvent value) + initialize, + required TResult Function(SearchHouseholdsByHouseholdsEvent value) + searchByHousehold, + required TResult Function(SearchHouseholdsByStatusEvent value) + searchByStatus, + required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) + searchByHouseholdHead, + required TResult Function(SearchHouseholdsByProximityEvent value) + searchByProximity, + required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, + required TResult Function(SearchHouseholdsClearEvent value) clear, + required TResult Function(IndividualGlobalSearchEvent value) + individualGlobalSearch, + required TResult Function(HouseHoldGlobalSearchEvent value) + houseHoldGlobalSearch, + required TResult Function(SearchHouseholdsPaginateEvent value) paginate, + }) { + return houseHoldGlobalSearch(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult? Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult? Function(SearchHouseholdsByStatusEvent value)? searchByStatus, + TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult? Function(SearchHouseholdsByProximityEvent value)? + searchByProximity, + TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult? Function(SearchHouseholdsClearEvent value)? clear, + TResult? Function(IndividualGlobalSearchEvent value)? + individualGlobalSearch, + TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + TResult? Function(SearchHouseholdsPaginateEvent value)? paginate, + }) { + return houseHoldGlobalSearch?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult Function(SearchHouseholdsByStatusEvent value)? searchByStatus, + TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult Function(SearchHouseholdsClearEvent value)? clear, + TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, + TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + TResult Function(SearchHouseholdsPaginateEvent value)? paginate, + required TResult orElse(), + }) { + if (houseHoldGlobalSearch != null) { + return houseHoldGlobalSearch(this); + } + return orElse(); + } +} + +abstract class HouseHoldGlobalSearchEvent implements SearchHouseholdsEvent { + const factory HouseHoldGlobalSearchEvent( + {required final GlobalSearchParameters globalSearchParams}) = + _$HouseHoldGlobalSearchEventImpl; + + GlobalSearchParameters get globalSearchParams; + @JsonKey(ignore: true) + _$$HouseHoldGlobalSearchEventImplCopyWith<_$HouseHoldGlobalSearchEventImpl> + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class _$$SearchHouseholdsPaginateEventImplCopyWith<$Res> { + factory _$$SearchHouseholdsPaginateEventImplCopyWith( + _$SearchHouseholdsPaginateEventImpl value, + $Res Function(_$SearchHouseholdsPaginateEventImpl) then) = + __$$SearchHouseholdsPaginateEventImplCopyWithImpl<$Res>; + @useResult + $Res call({ScrollMetrics scrollMetrics}); +} + +/// @nodoc +class __$$SearchHouseholdsPaginateEventImplCopyWithImpl<$Res> + extends _$SearchHouseholdsEventCopyWithImpl<$Res, + _$SearchHouseholdsPaginateEventImpl> + implements _$$SearchHouseholdsPaginateEventImplCopyWith<$Res> { + __$$SearchHouseholdsPaginateEventImplCopyWithImpl( + _$SearchHouseholdsPaginateEventImpl _value, + $Res Function(_$SearchHouseholdsPaginateEventImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? scrollMetrics = null, + }) { + return _then(_$SearchHouseholdsPaginateEventImpl( + scrollMetrics: null == scrollMetrics + ? _value.scrollMetrics + : scrollMetrics // ignore: cast_nullable_to_non_nullable + as ScrollMetrics, + )); + } +} + +/// @nodoc + +class _$SearchHouseholdsPaginateEventImpl + implements SearchHouseholdsPaginateEvent { + const _$SearchHouseholdsPaginateEventImpl({required this.scrollMetrics}); + + @override + final ScrollMetrics scrollMetrics; + + @override + String toString() { + return 'SearchHouseholdsEvent.paginate(scrollMetrics: $scrollMetrics)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$SearchHouseholdsPaginateEventImpl && + (identical(other.scrollMetrics, scrollMetrics) || + other.scrollMetrics == scrollMetrics)); + } + + @override + int get hashCode => Object.hash(runtimeType, scrollMetrics); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$SearchHouseholdsPaginateEventImplCopyWith< + _$SearchHouseholdsPaginateEventImpl> + get copyWith => __$$SearchHouseholdsPaginateEventImplCopyWithImpl< + _$SearchHouseholdsPaginateEventImpl>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() initialize, + required TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel) + searchByHousehold, + required TResult Function( + String projectId, int offset, int limit, List status) + searchByStatus, + required TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit) + searchByHouseholdHead, + required TResult Function(double latitude, double longititude, + String projectId, double maxRadius, int offset, int limit) + searchByProximity, + required TResult Function(String tag, String projectId) searchByTag, + required TResult Function() clear, + required TResult Function(GlobalSearchParameters globalSearchParams) + individualGlobalSearch, + required TResult Function(GlobalSearchParameters globalSearchParams) + houseHoldGlobalSearch, + required TResult Function(ScrollMetrics scrollMetrics) paginate, + }) { + return paginate(scrollMetrics); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? initialize, + TResult? Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult? Function( + String projectId, int offset, int limit, List status)? + searchByStatus, + TResult? Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult? Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult? Function(String tag, String projectId)? searchByTag, + TResult? Function()? clear, + TResult? Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult? Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + TResult? Function(ScrollMetrics scrollMetrics)? paginate, + }) { + return paginate?.call(scrollMetrics); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? initialize, + TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult Function( + String projectId, int offset, int limit, List status)? + searchByStatus, + TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult Function(String tag, String projectId)? searchByTag, + TResult Function()? clear, + TResult Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + TResult Function(ScrollMetrics scrollMetrics)? paginate, + required TResult orElse(), + }) { + if (paginate != null) { + return paginate(scrollMetrics); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(SearchHouseholdsInitializedEvent value) + initialize, + required TResult Function(SearchHouseholdsByHouseholdsEvent value) + searchByHousehold, + required TResult Function(SearchHouseholdsByStatusEvent value) + searchByStatus, + required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) + searchByHouseholdHead, + required TResult Function(SearchHouseholdsByProximityEvent value) + searchByProximity, + required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, + required TResult Function(SearchHouseholdsClearEvent value) clear, + required TResult Function(IndividualGlobalSearchEvent value) + individualGlobalSearch, + required TResult Function(HouseHoldGlobalSearchEvent value) + houseHoldGlobalSearch, + required TResult Function(SearchHouseholdsPaginateEvent value) paginate, + }) { + return paginate(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult? Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult? Function(SearchHouseholdsByStatusEvent value)? searchByStatus, + TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult? Function(SearchHouseholdsByProximityEvent value)? + searchByProximity, + TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult? Function(SearchHouseholdsClearEvent value)? clear, + TResult? Function(IndividualGlobalSearchEvent value)? + individualGlobalSearch, + TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + TResult? Function(SearchHouseholdsPaginateEvent value)? paginate, + }) { + return paginate?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult Function(SearchHouseholdsByStatusEvent value)? searchByStatus, + TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult Function(SearchHouseholdsClearEvent value)? clear, + TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, + TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + TResult Function(SearchHouseholdsPaginateEvent value)? paginate, + required TResult orElse(), + }) { + if (paginate != null) { + return paginate(this); + } + return orElse(); + } +} + +abstract class SearchHouseholdsPaginateEvent implements SearchHouseholdsEvent { + const factory SearchHouseholdsPaginateEvent( + {required final ScrollMetrics scrollMetrics}) = + _$SearchHouseholdsPaginateEventImpl; + + ScrollMetrics get scrollMetrics; + @JsonKey(ignore: true) + _$$SearchHouseholdsPaginateEventImplCopyWith< + _$SearchHouseholdsPaginateEventImpl> + get copyWith => throw _privateConstructorUsedError; +} + /// @nodoc mixin _$SearchHouseholdsState { int get offset => throw _privateConstructorUsedError; diff --git a/packages/registration_delivery/lib/blocs/search_households/tag_by_search.dart b/packages/registration_delivery/lib/blocs/search_households/tag_by_search.dart index bb0bbb1f1..0cc03a469 100644 --- a/packages/registration_delivery/lib/blocs/search_households/tag_by_search.dart +++ b/packages/registration_delivery/lib/blocs/search_households/tag_by_search.dart @@ -22,6 +22,8 @@ class TagSearchBloc extends SearchHouseholdsBloc { required super.sideEffectDataRepository, required super.addressRepository, required super.referralDataRepository, + required super.individualGlobalSearchRepository, + required super.houseHoldGlobalSearchRepository }) { on(handleSearchByTag); } diff --git a/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart b/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart new file mode 100644 index 000000000..2581228c7 --- /dev/null +++ b/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart @@ -0,0 +1,325 @@ +import 'dart:async'; +import 'dart:math' as math; + +import 'package:digit_data_model/data_model.dart'; +import 'package:drift/drift.dart'; + +import '../../../models/entities/household.dart'; +import '../../../models/entities/status.dart'; +import '../../../utils/global_search_parameters.dart'; + +class HouseHoldGlobalSearchRepository extends LocalRepository { + HouseHoldGlobalSearchRepository(super.sql, super.opLogManager); + + @override + FutureOr> search(EntitySearchModel query) { + throw UnimplementedError(); + } + + @override + DataModelType get type => throw UnimplementedError(); + + houseHoldGlobalSearch(GlobalSearchParameters params) async { + dynamic selectQuery; + + var proximitySelectQuery = + await proximitySearch(selectQuery, params, super.sql); + + var nameSelectQuery = + await nameSearch(proximitySelectQuery, params, super.sql); + + var filterSelectQuery = + await filterSearch(nameSelectQuery, params, super.sql); + + await filterSelectQuery.limit(params.limit ?? 50, + offset: params.offset ?? 0); + + final results = await filterSelectQuery.get(); + + return results + .map((e) { + final household = e.readTable(sql.household); + final address = e.readTableOrNull(sql.address); + + return HouseholdModel( + id: household.id, + tenantId: household.tenantId, + clientReferenceId: household.clientReferenceId, + memberCount: household.memberCount, + rowVersion: household.rowVersion, + isDeleted: household.isDeleted, + additionalFields: household.additionalFields != null && + household.additionalFields.toString().isNotEmpty + ? HouseholdAdditionalFieldsMapper.fromJson( + household.additionalFields.toString()) + : null, + auditDetails: (household.auditCreatedBy != null && + household.auditCreatedTime != null) + ? AuditDetails( + createdBy: household.auditCreatedBy!, + createdTime: household.auditCreatedTime!, + lastModifiedBy: household.auditModifiedBy, + lastModifiedTime: household.auditModifiedTime, + ) + : null, + clientAuditDetails: (household.clientCreatedBy != null && + household.clientCreatedTime != null) + ? ClientAuditDetails( + createdBy: household.clientCreatedBy!, + createdTime: household.clientCreatedTime!, + lastModifiedBy: household.clientModifiedBy, + lastModifiedTime: household.clientModifiedTime, + ) + : null, + address: address == null + ? null + : AddressModel( + id: address.id, + relatedClientReferenceId: household.clientReferenceId, + tenantId: address.tenantId, + doorNo: address.doorNo, + latitude: address.latitude, + longitude: address.longitude, + landmark: address.landmark, + locationAccuracy: address.locationAccuracy, + addressLine1: address.addressLine1, + addressLine2: address.addressLine2, + city: address.city, + pincode: address.pincode, + locality: address.localityBoundaryCode != null + ? LocalityModel( + code: address.localityBoundaryCode!, + name: address.localityBoundaryName, + ) + : null, + type: address.type, + rowVersion: address.rowVersion, + auditDetails: (household.auditCreatedBy != null && + household.auditCreatedBy != null) + ? AuditDetails( + createdBy: household.auditCreatedBy!, + createdTime: household.auditCreatedTime!, + lastModifiedBy: household.auditModifiedBy, + lastModifiedTime: household.auditModifiedTime, + ) + : null, + clientAuditDetails: (household.clientCreatedBy != null && + household.clientCreatedTime != null) + ? ClientAuditDetails( + createdBy: household.clientCreatedBy!, + createdTime: household.clientCreatedTime!, + lastModifiedBy: household.clientModifiedBy, + lastModifiedTime: household.clientModifiedTime, + ) + : null, + ), + ); + }) + .where((element) => element.isDeleted != true) + .toList(); + } + + proximitySearch( + selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) { + if (!params.isProximityEnabled) { + return null; + } else if (params.isProximityEnabled) { + selectQuery = super.sql.household.select().join([ + joinHouseHoldAddress(sql), + ]); + performProximitySearch(selectQuery, params, sql); + return selectQuery; + } + } + + nameSearch( + selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) async { + if (params.nameSearch == null || params.nameSearch!.isEmpty) { + return selectQuery; + } else if (params.nameSearch != null || + params.nameSearch!.isNotEmpty && selectQuery == null) { + selectQuery = super + .sql + .individual + .select() + .join([joinName(sql), joinIndividualAddress(sql)]); + await searchByName(selectQuery, params, sql); + selectQuery = selectQuery.join([ + leftOuterJoin( + sql.householdMember, + sql.householdMember.individualClientReferenceId + .equalsExp(sql.individual.clientReferenceId)) + ]) + ..where(sql.householdMember.isHeadOfHousehold.equals(true)); + selectQuery.join([ + leftOuterJoin( + sql.household, + sql.household.clientReferenceId + .equalsExp(sql.householdMember.householdClientReferenceId)) + ]); + } else if (params.nameSearch != null && + params.nameSearch!.isNotEmpty && + selectQuery != null) { + selectQuery = selectQuery.join([ + joinName(sql), + ]); + selectQuery = searchByName(selectQuery, params, sql); + } + return selectQuery; + } + + filterSearch( + selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) async { + var sql = super.sql; + if (params.filter == null || params.filter!.isEmpty) { + return selectQuery; + } else if (params.filter != null && + params.filter!.isNotEmpty && + selectQuery == null) { + for (var filter in params.filter!) { + if (filter == Status.registered.name) { + selectQuery = super.sql.household.select(); + selectQuery = selectQuery.join([ + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(super.sql.household.clientReferenceId), + ) + ]) + ..where(sql.projectBeneficiary.beneficiaryClientReferenceId + .isNotNull()); + } else if (filter == Status.notRegistered.name) { + selectQuery = super.sql.household.select(); + selectQuery = selectQuery.join([ + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(super.sql.household.clientReferenceId), + ) + ]) + ..where( + sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); + } + } + } else if (params.filter != null && + params.filter!.isNotEmpty && + selectQuery != null) { + for (var filter in params.filter!) { + if (filter == Status.registered.name) { + selectQuery = selectQuery.join([ + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(super.sql.household.clientReferenceId), + ) + ]) + ..where(sql.projectBeneficiary.beneficiaryClientReferenceId + .isNotNull()); + } else if (filter == Status.notRegistered.name) { + selectQuery = selectQuery.join([ + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(super.sql.household.clientReferenceId), + ) + ]) + ..where( + sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); + } + } + } + return selectQuery; + } + + joinName(LocalSqlDataStore sql) { + return leftOuterJoin( + sql.name, + sql.name.individualClientReferenceId.equalsExp( + sql.individual.clientReferenceId, + ), + ); + } + + joinHouseHoldAddress(LocalSqlDataStore sql) { + return leftOuterJoin( + sql.address, + sql.address.relatedClientReferenceId.equalsExp( + sql.household.clientReferenceId, + ), + ); + } + + joinIndividualAddress(LocalSqlDataStore sql) { + return leftOuterJoin( + sql.address, + sql.address.relatedClientReferenceId.equalsExp( + sql.individual.clientReferenceId, + ), + ); + } + + performProximitySearch( + selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) { + return (selectQuery + ..where(buildAnd([ + sql.address.relatedClientReferenceId.isNotNull(), + sql.household.clientReferenceId.isNotNull(), + if (params.latitude != null && + params.longitude != null && + params.maxRadius != null) + CustomExpression(''' + (6371393 * acos( + cos(${params.latitude! * math.pi / 180.0}) * cos((address.latitude * ${math.pi / 180.0})) + * cos((address.longitude * ${math.pi / 180.0}) - ${params.longitude! * math.pi / 180.0}) + + sin(${params.latitude! * math.pi / 180.0}) * sin((address.latitude * ${math.pi / 180.0})) + )) <= ${params.maxRadius!} + '''), + if (params.latitude != null && + params.longitude != null && + params.maxRadius != null) + sql.address.longitude.isNotNull(), + sql.address.latitude.isNotNull(), + ]))) + .orderBy([ + if (params.latitude != null && + params.longitude != null && + params.maxRadius != null) + OrderingTerm( + expression: CustomExpression(''' + (6371393 * acos( + cos(${params.latitude! * math.pi / 180.0}) * cos((address.latitude * ${math.pi / 180.0})) + * cos((address.longitude * ${math.pi / 180.0}) - ${params.longitude! * math.pi / 180.0}) + + sin(${params.latitude! * math.pi / 180.0}) * sin((address.latitude * ${math.pi / 180.0})) + )) + '''), + mode: OrderingMode.asc, + ), + ]); + } + + searchByName( + selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) { + return selectQuery.where(buildAnd([ + if (params.nameSearch != null) + buildOr([ + sql.name.givenName.contains( + params.nameSearch!, + ), + ]), + ])); + } + + joinIndividual(LocalSqlDataStore sql) { + return leftOuterJoin( + sql.individual, + sql.individual.clientReferenceId.equalsExp( + sql.name.individualClientReferenceId, + ), + ); + } + + joinProjectBeneficiary(LocalSqlDataStore sql) { + return leftOuterJoin(sql.projectBeneficiary, + sql.projectBeneficiary.clientReferenceId.isNotNull()); + } +} diff --git a/packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart b/packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart new file mode 100644 index 000000000..732d67a11 --- /dev/null +++ b/packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart @@ -0,0 +1,280 @@ +import 'dart:async'; +import 'dart:math' as math; + +import 'package:digit_data_model/data_model.dart'; +import 'package:drift/drift.dart'; + +import '../../../models/entities/status.dart'; +import '../../../utils/global_search_parameters.dart'; + +class IndividualGlobalSearchRepository extends LocalRepository { + IndividualGlobalSearchRepository(super.sql, super.opLogManager); + + @override + FutureOr> search(EntitySearchModel query) { + throw UnimplementedError(); + } + + @override + DataModelType get type => throw UnimplementedError(); + + individualGlobalSearch(GlobalSearchParameters params) async { + dynamic selectQuery; + + var proximitySelectQuery = + await proximitySearch(selectQuery, params, super.sql); + + var nameSelectQuery = + await nameSearch(proximitySelectQuery, params, super.sql); + + var filterSelectQuery = + await filterSearch(nameSelectQuery, params, super.sql); + + await filterSelectQuery.limit(params.limit ?? 50, + offset: params.offset ?? 0); + + final results = await filterSelectQuery.get(); + return results + .map((e) { + final individual = e.readTableOrNull(sql.individual); + final address = e.readTableOrNull(sql.address); + final name = e.readTableOrNull(sql.name); + + return IndividualModel( + id: individual?.id, + tenantId: individual?.tenantId, + clientReferenceId: individual!.clientReferenceId, + dateOfBirth: individual.dateOfBirth, + name: NameModel( + givenName: name?.givenName, + individualClientReferenceId: individual.clientReferenceId, + tenantId: individual.tenantId, + auditDetails: AuditDetails( + createdBy: individual.auditCreatedBy!, + createdTime: individual.auditCreatedTime!, + lastModifiedBy: individual.auditModifiedBy, + lastModifiedTime: individual.auditModifiedTime, + ), + ), + rowVersion: individual.rowVersion, + isDeleted: individual.isDeleted, + auditDetails: AuditDetails( + createdBy: individual.auditCreatedBy!, + createdTime: individual.auditCreatedTime!, + lastModifiedBy: individual.auditModifiedBy, + lastModifiedTime: individual.auditModifiedTime, + ), + address: address == null + ? null + : [ + AddressModel( + id: address.id, + relatedClientReferenceId: + address.relatedClientReferenceId, + tenantId: address.tenantId, + doorNo: address.doorNo, + latitude: address.latitude, + longitude: address.longitude, + landmark: address.landmark, + locationAccuracy: address.locationAccuracy, + addressLine1: address.addressLine1, + addressLine2: address.addressLine2, + city: address.city, + pincode: address.pincode, + locality: address.localityBoundaryCode != null + ? LocalityModel( + code: address.localityBoundaryCode!, + name: address.localityBoundaryName, + ) + : null, + type: address.type, + rowVersion: address.rowVersion, + auditDetails: AuditDetails( + createdBy: individual.auditCreatedBy!, + createdTime: individual.auditCreatedTime!, + lastModifiedBy: individual.auditModifiedBy, + lastModifiedTime: individual.auditModifiedTime, + ), + ), + ], + ); + }) + .where((element) => element.isDeleted != true) + .toList(); + } + + proximitySearch( + selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) { + if (!params.isProximityEnabled) { + return null; + } else if (params.isProximityEnabled) { + selectQuery = super.sql.individual.select().join([ + joinIndividualAddress(sql), + ]); + performProximitySearch(selectQuery, params, sql); + return selectQuery; + } + } + + nameSearch( + selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) async { + if (params.nameSearch == null || params.nameSearch!.isEmpty) { + return selectQuery; + } else if (params.nameSearch != null || + params.nameSearch!.isNotEmpty && selectQuery == null) { + selectQuery = super + .sql + .individual + .select() + .join([joinName(sql), joinIndividualAddress(sql)]); + await searchByName(selectQuery, params, sql); + } else if (params.nameSearch != null && + params.nameSearch!.isNotEmpty && + selectQuery != null) { + selectQuery = selectQuery.join([ + joinName(sql), + ]); + selectQuery = searchByName(selectQuery, params, sql); + } + print(selectQuery.toString()); + return selectQuery; + } + + filterSearch( + selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) { + var sql = super.sql; + if (params.filter == null || params.filter!.isEmpty) { + return selectQuery; + } else if (params.filter != null && + params.filter!.isNotEmpty && + selectQuery == null) { + for (var filter in params.filter!) { + if (filter == Status.registered.name) { + selectQuery = super.sql.individual.select(); + selectQuery = selectQuery.join([ + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(super.sql.individual.clientReferenceId), + ) + ]) + ..where(sql.projectBeneficiary.beneficiaryClientReferenceId + .isNotNull()); + } else if (filter == Status.notRegistered.name) { + selectQuery = super.sql.individual.select(); + selectQuery = selectQuery.join([ + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(super.sql.individual.clientReferenceId), + ) + ]) + ..where( + sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); + } + } + } else if (params.filter != null && + params.filter!.isNotEmpty && + selectQuery != null) { + for (var filter in params.filter!) { + if (filter == Status.registered.name) { + selectQuery = selectQuery.join([ + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(super.sql.individual.clientReferenceId), + ) + ]) + ..where(sql.projectBeneficiary.beneficiaryClientReferenceId + .isNotNull()); + } else if (filter == Status.notRegistered.name) { + selectQuery = selectQuery.join([ + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(super.sql.individual.clientReferenceId), + ) + ]) + ..where( + sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); + } + } + } + print(selectQuery.toString()); + return selectQuery; + } + + joinName(LocalSqlDataStore sql) { + return leftOuterJoin( + sql.name, + sql.name.individualClientReferenceId.equalsExp( + sql.individual.clientReferenceId, + ), + ); + } + + joinIndividualAddress(LocalSqlDataStore sql) { + return leftOuterJoin( + sql.address, + sql.address.relatedClientReferenceId.equalsExp( + sql.individual.clientReferenceId, + ), + ); + } + + performProximitySearch( + selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) { + return (selectQuery + ..where(buildAnd([ + sql.address.relatedClientReferenceId.isNotNull(), + sql.individual.clientReferenceId.isNotNull(), + if (params.latitude != null && + params.longitude != null && + params.maxRadius != null) + CustomExpression(''' + (6371393 * acos( + cos(${params.latitude! * math.pi / 180.0}) * cos((address.latitude * ${math.pi / 180.0})) + * cos((address.longitude * ${math.pi / 180.0}) - ${params.longitude! * math.pi / 180.0}) + + sin(${params.latitude! * math.pi / 180.0}) * sin((address.latitude * ${math.pi / 180.0})) + )) <= ${params.maxRadius!} + '''), + if (params.latitude != null && + params.longitude != null && + params.maxRadius != null) + sql.address.longitude.isNotNull(), + sql.address.latitude.isNotNull(), + ]))) + .orderBy([ + if (params.latitude != null && + params.longitude != null && + params.maxRadius != null) + OrderingTerm( + expression: CustomExpression(''' + (6371393 * acos( + cos(${params.latitude! * math.pi / 180.0}) * cos((address.latitude * ${math.pi / 180.0})) + * cos((address.longitude * ${math.pi / 180.0}) - ${params.longitude! * math.pi / 180.0}) + + sin(${params.latitude! * math.pi / 180.0}) * sin((address.latitude * ${math.pi / 180.0})) + )) + '''), + mode: OrderingMode.asc, + ), + ]); + } + + searchByName( + selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) { + return selectQuery.where(buildAnd([ + if (params.nameSearch != null) + buildOr([ + sql.name.givenName.contains( + params.nameSearch!, + ), + ]), + ])); + } + + joinProjectBeneficiary(LocalSqlDataStore sql) { + return leftOuterJoin(sql.projectBeneficiary, + sql.projectBeneficiary.clientReferenceId.isNotNull()); + } +} diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index 92fb16708..db9843a78 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -59,18 +59,6 @@ class _HouseholdOverviewPageState }, child: BlocBuilder( builder: (ctx, state) { - final projectBeneficiary = - RegistrationDeliverySingleton().beneficiaryType != - BeneficiaryType.individual - ? [state.householdMemberWrapper.projectBeneficiaries?.first] - : state.householdMemberWrapper.projectBeneficiaries - ?.where( - (element) => - element.beneficiaryClientReferenceId == - state.selectedIndividual?.clientReferenceId, - ) - .toList(); - return Scaffold( body: state.loading ? const Center(child: CircularProgressIndicator()) @@ -456,6 +444,8 @@ class _HouseholdOverviewPageState return MemberCard( isHead: isHead, individual: e, + projectBeneficiaries: + projectBeneficiary ?? [], tasks: taskData, sideEffects: sideEffectData, editMemberAction: () async { diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart index f47a66997..a79925a75 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart @@ -1,58 +1,58 @@ -import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; - -import '../../../utils/i18_key_constants.dart' as i18; -import '../../../widgets/localized.dart'; -import '../../blocs/search_households/search_bloc_common_wrapper.dart'; -import '../../router/registration_delivery_router.gm.dart'; - -@RoutePage() -class BeneficiaryAcknowledgementPage extends LocalizedStatefulWidget { - final bool? enableViewHousehold; - - const BeneficiaryAcknowledgementPage({ - super.key, - super.appLocalizations, - this.enableViewHousehold, - }); - - @override - State createState() => - _BeneficiaryAcknowledgementPageState(); -} - -class _BeneficiaryAcknowledgementPageState - extends LocalizedState { - @override - Widget build(BuildContext context) { - return Scaffold( - body: DigitAcknowledgement.success( - action: () { - context.router.maybePop(); - }, - secondaryAction: () { - final bloc = context.read(); - - context.router.popAndPush( - BeneficiaryWrapperRoute( - wrapper: bloc.state.householdMembers.first, - ), - ); - }, - enableViewHousehold: widget.enableViewHousehold ?? false, - secondaryLabel: localizations.translate( - i18.householdDetails.viewHouseHoldDetailsAction, - ), - actionLabel: - localizations.translate(i18.acknowledgementSuccess.actionLabelText), - description: localizations.translate( - i18.acknowledgementSuccess.acknowledgementDescriptionText, - ), - label: localizations - .translate(i18.acknowledgementSuccess.acknowledgementLabelText), - ), - ); - } -} +import 'package:auto_route/auto_route.dart'; +import 'package:digit_components/digit_components.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +import '../../../utils/i18_key_constants.dart' as i18; +import '../../../widgets/localized.dart'; +import '../../blocs/search_households/search_bloc_common_wrapper.dart'; +import '../../router/registration_delivery_router.gm.dart'; + +@RoutePage() +class BeneficiaryAcknowledgementPage extends LocalizedStatefulWidget { + final bool? enableViewHousehold; + + const BeneficiaryAcknowledgementPage({ + super.key, + super.appLocalizations, + this.enableViewHousehold, + }); + + @override + State createState() => + _BeneficiaryAcknowledgementPageState(); +} + +class _BeneficiaryAcknowledgementPageState + extends LocalizedState { + @override + Widget build(BuildContext context) { + return Scaffold( + body: DigitAcknowledgement.success( + action: () { + context.router.maybePop(); + }, + secondaryAction: () { + final bloc = context.read(); + + context.router.popAndPush( + BeneficiaryWrapperRoute( + wrapper: bloc.state.householdMembers.first, + ), + ); + }, + enableViewHousehold: widget.enableViewHousehold ?? false, + secondaryLabel: localizations.translate( + i18.householdDetails.viewHouseHoldDetailsAction, + ), + actionLabel: + localizations.translate(i18.acknowledgementSuccess.actionLabelText), + description: localizations.translate( + i18.acknowledgementSuccess.acknowledgementDescriptionText, + ), + label: localizations + .translate(i18.acknowledgementSuccess.acknowledgementLabelText), + ), + ); + } +} diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart index a3930e3c1..60cf16316 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart @@ -1,74 +1,74 @@ -import 'package:auto_route/auto_route.dart'; -import 'package:digit_data_model/models/entities/individual.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:registration_delivery/registration_delivery.dart'; - -import '../../utils/extensions/extensions.dart'; - -@RoutePage() -class BeneficiaryRegistrationWrapperPage extends StatelessWidget - implements AutoRouteWrapper { - final BeneficiaryRegistrationState initialState; - - const BeneficiaryRegistrationWrapperPage({ - super.key, - required this.initialState, - }); - - @override - Widget build(BuildContext context) { - return const AutoRouter(); - } - - @override - Widget wrappedRoute(BuildContext context) { - final beneficiaryType = RegistrationDeliverySingleton().beneficiaryType; - final individual = - context.repository(context); - - final household = - context.repository(context); - - final householdMember = context - .repository(context); - - final projectBeneficiary = context.repository(context); - final task = context.repository(context); - final sideEffect = - context.repository(context); - final referral = - context.repository(context); - - return BlocProvider( - create: (_) => HouseholdOverviewBloc( - HouseholdOverviewState( - householdMemberWrapper: HouseholdMemberWrapper( - household: initialState.householdModel, - headOfHousehold: null, - members: [], - projectBeneficiaries: []), - ), - individualRepository: individual, - householdRepository: household, - householdMemberRepository: householdMember, - projectBeneficiaryRepository: projectBeneficiary, - beneficiaryType: RegistrationDeliverySingleton().beneficiaryType!, - taskDataRepository: task, - sideEffectDataRepository: sideEffect, - referralDataRepository: referral), - child: BlocProvider( - create: (context) => BeneficiaryRegistrationBloc( - initialState, - individualRepository: individual, - householdRepository: household, - householdMemberRepository: householdMember, - projectBeneficiaryRepository: projectBeneficiary, - beneficiaryType: beneficiaryType!, - ), - child: this, - ), - ); - } -} +import 'package:auto_route/auto_route.dart'; +import 'package:digit_data_model/models/entities/individual.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:registration_delivery/registration_delivery.dart'; + +import '../../utils/extensions/extensions.dart'; + +@RoutePage() +class BeneficiaryRegistrationWrapperPage extends StatelessWidget + implements AutoRouteWrapper { + final BeneficiaryRegistrationState initialState; + + const BeneficiaryRegistrationWrapperPage({ + super.key, + required this.initialState, + }); + + @override + Widget build(BuildContext context) { + return const AutoRouter(); + } + + @override + Widget wrappedRoute(BuildContext context) { + final beneficiaryType = RegistrationDeliverySingleton().beneficiaryType; + final individual = + context.repository(context); + + final household = + context.repository(context); + + final householdMember = context + .repository(context); + + final projectBeneficiary = context.repository(context); + final task = context.repository(context); + final sideEffect = + context.repository(context); + final referral = + context.repository(context); + + return BlocProvider( + create: (_) => HouseholdOverviewBloc( + HouseholdOverviewState( + householdMemberWrapper: HouseholdMemberWrapper( + household: initialState.householdModel, + headOfHousehold: null, + members: [], + projectBeneficiaries: []), + ), + individualRepository: individual, + householdRepository: household, + householdMemberRepository: householdMember, + projectBeneficiaryRepository: projectBeneficiary, + beneficiaryType: RegistrationDeliverySingleton().beneficiaryType!, + taskDataRepository: task, + sideEffectDataRepository: sideEffect, + referralDataRepository: referral), + child: BlocProvider( + create: (context) => BeneficiaryRegistrationBloc( + initialState, + individualRepository: individual, + householdRepository: household, + householdMemberRepository: householdMember, + projectBeneficiaryRepository: projectBeneficiary, + beneficiaryType: beneficiaryType!, + ), + child: this, + ), + ); + } +} diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart index 6e1af68b7..49ebb7bfa 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart @@ -129,6 +129,17 @@ class _HouseDetailsPageState extends LocalizedState { additionalFields: HouseholdAdditionalFields( version: 1, fields: [ + ...?householdModel + ?.additionalFields?.fields + .where((e) => + e.key != + AdditionalFieldsType + .houseStructureTypes + .toValue() && + e.key != + AdditionalFieldsType + .noOfRooms + .toValue()), AdditionalField( AdditionalFieldsType .houseStructureTypes diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart index 6dd61e0db..22cb73c9e 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart @@ -147,7 +147,14 @@ class _HouseHoldDetailsPageState extends LocalizedState { additionalFields: HouseholdAdditionalFields(version: 1, fields: [ //[TODO: Use pregnant women form value based on project config - ...?householdModel?.additionalFields?.fields, + ...?householdModel?.additionalFields?.fields + .where((e) => + e.key != + AdditionalFieldsType.pregnantWomen + .toValue() && + e.key != + AdditionalFieldsType.children + .toValue()), AdditionalField( AdditionalFieldsType.pregnantWomen.toValue(), pregnantWomen, @@ -390,11 +397,11 @@ class _HouseHoldDetailsPageState extends LocalizedState { } FormGroup buildForm(BeneficiaryRegistrationState state) { - final household = state.mapOrNull( - editHousehold: (value) { - return value.householdModel; - }, - ); + final household = state.mapOrNull(editHousehold: (value) { + return value.householdModel; + }, create: (value) { + return value.householdModel; + }); final registrationDate = state.mapOrNull( editHousehold: (value) { diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index 102ae89c9..ebbb27a18 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -1,7 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_components/widgets/atoms/text_block.dart'; +import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/models/entities/address_type.dart'; import 'package:flutter/material.dart'; @@ -403,7 +403,7 @@ class _HouseholdLocationPageState return fb.group({ _administrationAreaKey: FormControl( value: localizations.translate( - RegistrationDeliverySingleton().boundary!.code.toString()), + RegistrationDeliverySingleton().boundary!.name.toString()), validators: [Validators.required], ), _addressLine1Key: diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index c6f975851..79409ea49 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -159,55 +159,20 @@ class _IndividualDetailsPageState ), ); } else { - final submit = await DigitDialog.show( - context, - options: DigitDialogOptions( - titleText: localizations.translate( - i18.deliverIntervention.dialogTitle, - ), - contentText: localizations.translate( - i18.deliverIntervention.dialogContent, - ), - primaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonSubmit, - ), - action: (context) { - clickedStatus.value = true; - Navigator.of( - context, - rootNavigator: true, - ).pop(true); - }, - ), - secondaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonCancel, - ), - action: (context) => Navigator.of( - context, - rootNavigator: true, - ).pop(false), - ), + clickedStatus.value = true; + final scannerBloc = + context.read(); + bloc.add( + BeneficiaryRegistrationSummaryEvent( + projectId: projectId!, + userUuid: userId!, + boundary: boundary!, + tag: scannerBloc.state.qrCodes.isNotEmpty + ? scannerBloc.state.qrCodes.first + : null, ), ); - if (submit ?? false) { - if (context.mounted) { - final scannerBloc = - context.read(); - bloc.add( - BeneficiaryRegistrationSummaryEvent( - projectId: projectId!, - userUuid: userId!, - boundary: boundary!, - tag: scannerBloc.state.qrCodes.isNotEmpty - ? scannerBloc.state.qrCodes.first - : null, - ), - ); - router.push(SummaryRoute()); - } - } + router.push(SummaryRoute()); } }, editIndividual: ( @@ -507,20 +472,26 @@ class _IndividualDetailsPageState ), allowMultipleSelection: false, width: 126, + initialSelection: + form.control(_genderKey).value != null + ? [form.control(_genderKey).value] + : [], options: RegistrationDeliverySingleton() .genderOptions! .map( (e) => e, - ) + ) .toList(), - onSelectionChanged: (value){ + onSelectionChanged: (value) { setState(() { - if(value.isNotEmpty){ + if (value.isNotEmpty) { form.control(_genderKey).value = value.first; - }else{ + } else { form.control(_genderKey).value = null; setState(() { - form.control(_genderKey).setErrors({'': true}); + form + .control(_genderKey) + .setErrors({'': true}); }); } }); @@ -528,8 +499,9 @@ class _IndividualDetailsPageState valueMapper: (value) { return localizations.translate(value); }, - errorMessage: form.control(_genderKey).hasErrors - ? localizations.translate(i18.common.corecommonRequired) + errorMessage: form.control(_genderKey).hasErrors + ? localizations + .translate(i18.common.corecommonRequired) : null, ), ]), @@ -756,6 +728,12 @@ class _IndividualDetailsPageState return value.individualModel; }, + create: (value) { + return value.individualModel; + }, + summary: (value) { + return value.individualModel; + }, ); final searchQuery = state.mapOrNull( diff --git a/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart b/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart index df6476f81..bf8e76016 100644 --- a/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart +++ b/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart @@ -2,15 +2,18 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_data_model/models/entities/individual.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:registration_delivery/blocs/search_households/household_global_seach.dart'; +import 'package:registration_delivery/blocs/search_households/individual_global_search.dart'; +import 'package:registration_delivery/data/repositories/local/individual_global_search.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; import '../blocs/household_details/household_details.dart'; import '../blocs/search_households/proximity_search.dart'; import '../blocs/search_households/search_bloc_common_wrapper.dart'; import '../blocs/search_households/search_by_head.dart'; -import '../blocs/search_households/search_by_status.dart'; import '../blocs/search_households/search_households.dart'; import '../blocs/search_households/tag_by_search.dart'; +import '../data/repositories/local/household_global_search.dart'; import '../data/repositories/local/registration_delivery_address.dart'; import '../models/entities/household.dart'; import '../models/entities/household_member.dart'; @@ -32,152 +35,128 @@ class RegistrationDeliveryWrapperPage extends StatelessWidget { BlocProvider( create: (context) { return SearchHouseholdsBloc( - beneficiaryType: - RegistrationDeliverySingleton().beneficiaryType!, - userUid: RegistrationDeliverySingleton().loggedInUserUuid!, - projectId: RegistrationDeliverySingleton().projectId!, - addressRepository: - context.read(), - projectBeneficiary: context.repository(context), - householdMember: context.repository(context), - household: context - .repository(context), - individual: - context.repository( - context), - taskDataRepository: - context.repository(context), - sideEffectDataRepository: - context.repository( - context), - referralDataRepository: context - .repository(context), - ); + beneficiaryType: + RegistrationDeliverySingleton().beneficiaryType!, + userUid: RegistrationDeliverySingleton().loggedInUserUuid!, + projectId: RegistrationDeliverySingleton().projectId!, + addressRepository: + context.read(), + projectBeneficiary: context.repository< + ProjectBeneficiaryModel, + ProjectBeneficiarySearchModel>(context), + householdMember: context.repository(context), + household: + context.repository( + context), + individual: + context.repository( + context), + taskDataRepository: + context.repository(context), + sideEffectDataRepository: context + .repository(context), + referralDataRepository: context.repository(context), + individualGlobalSearchRepository: context.read(), + houseHoldGlobalSearchRepository: context.read()); }, ), BlocProvider( create: (context) { - return SearchByHeadBloc( - beneficiaryType: - RegistrationDeliverySingleton().beneficiaryType!, - userUid: RegistrationDeliverySingleton().loggedInUserUuid!, - projectId: RegistrationDeliverySingleton().projectId!, - addressRepository: - context.read(), - projectBeneficiary: context.repository(context), - householdMember: context.repository(context), - household: context - .repository(context), - individual: - context.repository( - context), - taskDataRepository: - context.repository(context), - sideEffectDataRepository: - context.repository( - context), - referralDataRepository: context - .repository(context), - ); - }, - ), - BlocProvider( - create: (context) { - return ProximitySearchBloc( - beneficiaryType: - RegistrationDeliverySingleton().beneficiaryType!, - userUid: RegistrationDeliverySingleton().loggedInUserUuid!, - projectId: RegistrationDeliverySingleton().projectId!, - addressRepository: - context.read(), - projectBeneficiary: context.repository(context), - householdMember: context.repository(context), - household: context - .repository(context), - individual: - context.repository( - context), - taskDataRepository: - context.repository(context), - sideEffectDataRepository: - context.repository( - context), - referralDataRepository: context - .repository(context), - ); + return TagSearchBloc( + beneficiaryType: + RegistrationDeliverySingleton().beneficiaryType!, + userUid: RegistrationDeliverySingleton().loggedInUserUuid!, + projectId: RegistrationDeliverySingleton().projectId!, + addressRepository: + context.read(), + projectBeneficiary: context.repository< + ProjectBeneficiaryModel, + ProjectBeneficiarySearchModel>(context), + householdMember: context.repository(context), + household: + context.repository( + context), + individual: + context.repository( + context), + taskDataRepository: + context.repository(context), + sideEffectDataRepository: context + .repository(context), + referralDataRepository: context.repository(context), + individualGlobalSearchRepository: context.read(), + houseHoldGlobalSearchRepository: context.read()); }, ), BlocProvider( create: (context) { - return TagSearchBloc( - beneficiaryType: - RegistrationDeliverySingleton().beneficiaryType!, - userUid: RegistrationDeliverySingleton().loggedInUserUuid!, - projectId: RegistrationDeliverySingleton().projectId!, - addressRepository: - context.read(), - projectBeneficiary: context.repository(context), - householdMember: context.repository(context), - household: context - .repository(context), - individual: - context.repository( - context), - taskDataRepository: - context.repository(context), - sideEffectDataRepository: - context.repository( - context), - referralDataRepository: context - .repository(context), - ); + return IndividualGlobalSearchBloc( + beneficiaryType: + RegistrationDeliverySingleton().beneficiaryType!, + userUid: RegistrationDeliverySingleton().loggedInUserUuid!, + projectId: RegistrationDeliverySingleton().projectId!, + addressRepository: + context.read(), + projectBeneficiary: context.repository< + ProjectBeneficiaryModel, + ProjectBeneficiarySearchModel>(context), + householdMember: context.repository(context), + household: + context.repository( + context), + individual: + context.repository( + context), + taskDataRepository: + context.repository(context), + sideEffectDataRepository: context + .repository(context), + referralDataRepository: context.repository(context), + individualGlobalSearchRepository: context.read(), + houseHoldGlobalSearchRepository: context.read()); }, ), BlocProvider( create: (context) { - return StatusSearchBloc( - beneficiaryType: - RegistrationDeliverySingleton().beneficiaryType!, - userUid: RegistrationDeliverySingleton().loggedInUserUuid!, - projectId: RegistrationDeliverySingleton().projectId!, - addressRepository: - context.read(), - projectBeneficiary: context.repository(context), - householdMember: context.repository(context), - household: context - .repository(context), - individual: - context.repository( - context), - taskDataRepository: - context.repository(context), - sideEffectDataRepository: - context.repository( - context), - referralDataRepository: context - .repository(context), - ); + return HouseHoldGlobalSearchBloc( + beneficiaryType: + RegistrationDeliverySingleton().beneficiaryType!, + userUid: RegistrationDeliverySingleton().loggedInUserUuid!, + projectId: RegistrationDeliverySingleton().projectId!, + addressRepository: + context.read(), + projectBeneficiary: context.repository< + ProjectBeneficiaryModel, + ProjectBeneficiarySearchModel>(context), + householdMember: context.repository(context), + household: + context.repository( + context), + individual: + context.repository( + context), + taskDataRepository: + context.repository(context), + sideEffectDataRepository: context + .repository(context), + referralDataRepository: context.repository(context), + individualGlobalSearchRepository: context.read(), + houseHoldGlobalSearchRepository: context.read()); }, ), BlocProvider( create: (context) { return SearchBlocWrapper( - searchHouseholdsBloc: context.read(), - searchByHeadBloc: context.read(), - proximitySearchBloc: context.read(), - tagSearchBloc: context.read(), - statusSearchBloc: context.read(), - ); + searchHouseholdsBloc: context.read(), + tagSearchBloc: context.read(), + individualGlobalSearchBloc: + context.read(), + houseHoldGlobalSearchBloc: + context.read()); }, ), BlocProvider( diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index ca7f1d8fe..f11b95240 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -6,11 +6,13 @@ import 'package:digit_scanner/pages/qr_scanner.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart'; +import 'package:registration_delivery/blocs/search_households/individual_global_search.dart'; import 'package:registration_delivery/registration_delivery.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../models/entities/status.dart'; import '../router/registration_delivery_router.gm.dart'; +import '../utils/global_search_parameters.dart'; import '../utils/utils.dart'; import '../widgets/back_navigation_help_header.dart'; import '../widgets/beneficiary/view_beneficiary_card.dart'; @@ -37,7 +39,7 @@ class _SearchBeneficiaryPageState double lat = 0.0; double long = 0.0; - List selectedFilters = []; + List selectedFilters = []; SearchHouseholdsState searchHouseholdsState = const SearchHouseholdsState( loading: false, @@ -79,43 +81,61 @@ class _SearchBeneficiaryPageState onNotification: (scrollNotification) { if (scrollNotification is ScrollUpdateNotification) { final metrics = scrollNotification.metrics; - if (metrics.atEdge && - isProximityEnabled && - searchController.text == '' && - metrics.pixels != 0) { - // [TODO: Handle the null check at Bloc level for Event parameters - blocWrapper.proximitySearchBloc - .add(SearchHouseholdsEvent.searchByProximity( - latitude: lat, - longititude: long, - projectId: RegistrationDeliverySingleton().projectId!, - maxRadius: RegistrationDeliverySingleton().maxRadius!, - offset: blocWrapper.proximitySearchBloc.state.offset, - limit: blocWrapper.proximitySearchBloc.state.limit, - )); - } else if (metrics.atEdge && - searchController.text != '' && - metrics.pixels != 0) { - blocWrapper.searchByHeadBloc - .add(SearchHouseholdsEvent.searchByHouseholdHead( - searchText: searchController.text, - projectId: RegistrationDeliverySingleton().projectId!, - isProximityEnabled: isProximityEnabled, - offset: blocWrapper.searchByHeadBloc.state.offset, - limit: blocWrapper.searchByHeadBloc.state.limit, - )); - } else if (metrics.atEdge && - selectedFilters.isNotEmpty && - metrics.pixels != 0) { - blocWrapper.statusSearchBloc.add( - SearchHouseholdsEvent.searchByStatus( - projectId: RegistrationDeliverySingleton().projectId!, - offset: blocWrapper.statusSearchBloc.state.offset, - limit: blocWrapper.statusSearchBloc.state.limit, - status: selectedFilters, - ), - ); - } + blocWrapper.individualGlobalSearchBloc + .add(SearchHouseholdsEvent.paginate(scrollMetrics: metrics)); + // if (metrics.atEdge && + // isProximityEnabled && + // searchController.text == '' && + // metrics.pixels != 0) { + // // [TODO: Handle the null check at Bloc level for Event parameters + // blocWrapper.individualGlobalSearchBloc + // .add(SearchHouseholdsEvent.individualGlobalSearch( + // globalSearchParams: GlobalSearchParameters( + // isProximityEnabled: isProximityEnabled, + // latitude: lat, + // longitude: long, + // maxRadius: RegistrationDeliverySingleton().maxRadius, + // nameSearch: null, + // filter: null, + // offset: blocWrapper.individualGlobalSearchBloc.state.offset, + // limit: blocWrapper.individualGlobalSearchBloc.state.limit, + // beneficiaryType: + // RegistrationDeliverySingleton().beneficiaryType, + // ))); + // } else if (metrics.atEdge && + // searchController.text != '' && + // metrics.pixels != 0) { + // blocWrapper.searchByHeadBloc + // .add(SearchHouseholdsEvent.searchByHouseholdHead( + // searchText: searchController.text, + // projectId: RegistrationDeliverySingleton().projectId!, + // isProximityEnabled: isProximityEnabled, + // offset: blocWrapper.searchByHeadBloc.state.offset, + // limit: blocWrapper.searchByHeadBloc.state.limit, + // )); + // } else if (metrics.atEdge && + // selectedFilters.isNotEmpty && + // metrics.pixels != 0) { + // blocWrapper.individualGlobalSearchBloc.add( + // SearchHouseholdsEvent.searchByStatus( + // projectId: RegistrationDeliverySingleton().projectId!, + // offset: blocWrapper.individualGlobalSearchBloc.state.offset, + // limit: blocWrapper.individualGlobalSearchBloc.state.limit, + // status: selectedFilters, + // ), + // ); + // } else if (metrics.atEdge && + // selectedFilters.isNotEmpty && + // metrics.pixels != 0) { + // blocWrapper.statusSearchBloc.add( + // SearchHouseholdsEvent.searchByStatus( + // projectId: RegistrationDeliverySingleton().projectId!, + // offset: blocWrapper.statusSearchBloc.state.offset, + // limit: blocWrapper.statusSearchBloc.state.limit, + // status: selectedFilters, + // ), + // ); + // } } // Return true to allow the notification to continue to be dispatched to further ancestors. @@ -175,24 +195,7 @@ class _SearchBeneficiaryPageState .maxRadius != null && isProximityEnabled) { - blocWrapper.proximitySearchBloc - .add( - SearchHouseholdsEvent - .searchByProximity( - latitude: - locationState.latitude!, - longititude: - locationState.longitude!, - projectId: - RegistrationDeliverySingleton() - .projectId!, - maxRadius: - RegistrationDeliverySingleton() - .maxRadius!, - offset: offset, - limit: limit, - ), - ); + triggerGlobalSearchEvent(); } else { blocWrapper.clearEvent(); } @@ -225,42 +228,12 @@ class _SearchBeneficiaryPageState return; } else if (isProximityEnabled && value.trim().length < 2) { - blocWrapper.proximitySearchBloc.add( - SearchHouseholdsEvent.searchByProximity( - latitude: locationState.latitude!, - longititude: locationState.longitude!, - projectId: - RegistrationDeliverySingleton() - .projectId!, - maxRadius: - RegistrationDeliverySingleton() - .maxRadius!, - offset: offset, - limit: limit, - ), - ); + triggerGlobalSearchEvent(); } else { blocWrapper.searchHouseholdsBloc.add( const SearchHouseholdsClearEvent(), ); - blocWrapper.searchByHeadBloc.add( - SearchHouseholdsEvent - .searchByHouseholdHead( - searchText: value, - projectId: - RegistrationDeliverySingleton() - .projectId!, - isProximityEnabled: isProximityEnabled, - latitude: locationState.latitude, - longitude: locationState.longitude, - maxRadius: - RegistrationDeliverySingleton() - .maxRadius, - tag: null, - offset: offset, - limit: limit, - ), - ); + triggerGlobalSearchEvent(); } }, ), @@ -300,8 +273,8 @@ class _SearchBeneficiaryPageState children: [ Text( localizations - .translate(filter - .toValue()), + .translate( + filter), style: TextStyle( color: const DigitColors() .davyGray)), @@ -518,17 +491,14 @@ class _SearchBeneficiaryPageState )); if (filters != null) { - setState(() { - selectedFilters = filters; - }); - blocWrapper.statusSearchBloc.add( - SearchHouseholdsEvent.searchByStatus( - projectId: RegistrationDeliverySingleton().projectId!, - offset: offset, - limit: limit, - status: filters, - ), - ); + for (var filter in filters) { + if (!selectedFilters.contains(filter)) { + setState(() { + selectedFilters.add(filter); + }); + } + } + triggerGlobalSearchEvent(); } else { setState(() { selectedFilters = []; @@ -536,4 +506,35 @@ class _SearchBeneficiaryPageState blocWrapper.clearEvent(); } } + + void triggerGlobalSearchEvent() { + if (RegistrationDeliverySingleton().beneficiaryType == + BeneficiaryType.individual) { + blocWrapper.individualGlobalSearchBloc + .add(SearchHouseholdsEvent.individualGlobalSearch( + globalSearchParams: GlobalSearchParameters( + isProximityEnabled: isProximityEnabled, + latitude: lat, + longitude: long, + maxRadius: RegistrationDeliverySingleton().maxRadius, + nameSearch: searchController.text, + filter: selectedFilters, + offset: offset, + limit: limit, + ))); + } else { + blocWrapper.houseHoldGlobalSearchBloc + .add(SearchHouseholdsEvent.houseHoldGlobalSearch( + globalSearchParams: GlobalSearchParameters( + isProximityEnabled: isProximityEnabled, + latitude: lat, + longitude: long, + maxRadius: RegistrationDeliverySingleton().maxRadius, + nameSearch: searchController.text, + filter: selectedFilters, + offset: offset, + limit: limit, + ))); + } + } } diff --git a/packages/registration_delivery/lib/pages/summary_page.dart b/packages/registration_delivery/lib/pages/summary_page.dart index 18b498318..bc1bd30c2 100644 --- a/packages/registration_delivery/lib/pages/summary_page.dart +++ b/packages/registration_delivery/lib/pages/summary_page.dart @@ -55,8 +55,6 @@ class _SummaryPageState extends LocalizedState { if (value.navigateToRoot) { (router.parent() as StackRouter).maybePop(); } else { - print('stack router:'); - print(router.stack.first); router.popUntil((route) => route.settings.name == SearchBeneficiaryRoute.name); context.read().searchHouseholdsBloc.add( diff --git a/packages/registration_delivery/lib/utils/global_search_parameters.dart b/packages/registration_delivery/lib/utils/global_search_parameters.dart new file mode 100644 index 000000000..0c663679b --- /dev/null +++ b/packages/registration_delivery/lib/utils/global_search_parameters.dart @@ -0,0 +1,21 @@ +class GlobalSearchParameters { + final bool isProximityEnabled; + final double? latitude; + final double? longitude; + final double? maxRadius; + final String? nameSearch; + final int? offset; + final int? limit; + final List? filter; + + GlobalSearchParameters({ + required this.isProximityEnabled, + required this.latitude, + required this.longitude, + required this.maxRadius, + required this.nameSearch, + required this.offset, + required this.limit, + required this.filter, + }); +} diff --git a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart index 328969b07..5ee907aed 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart @@ -93,15 +93,15 @@ class _ViewBeneficiaryCardState extends LocalizedState { final projectBeneficiary = // RegistrationDeliverySingleton().beneficiaryType != // BeneficiaryType.individual - // ? [householdMember.projectBeneficiaries.first] + // ? [householdMember.projectBeneficiaries!.first] // : householdMember.projectBeneficiaries - ?.where( - (element) => - element.beneficiaryClientReferenceId == - e.clientReferenceId, - ) - .toList(); + ?.where( + (element) => + element.beneficiaryClientReferenceId == + e.clientReferenceId, + ) + .toList(); final taskData = (projectBeneficiary ?? []).isNotEmpty ? householdMember.tasks diff --git a/packages/registration_delivery/lib/widgets/member_card/member_card.dart b/packages/registration_delivery/lib/widgets/member_card/member_card.dart index fa5f1ed88..f1fe1ad2c 100644 --- a/packages/registration_delivery/lib/widgets/member_card/member_card.dart +++ b/packages/registration_delivery/lib/widgets/member_card/member_card.dart @@ -3,6 +3,7 @@ import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:registration_delivery/models/entities/project_beneficiary.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; import '../../blocs/app_localization.dart'; @@ -23,6 +24,7 @@ class MemberCard extends StatelessWidget { final int months; final bool isHead; final IndividualModel individual; + final List? projectBeneficiaries; final bool isDelivered; final VoidCallback setAsHeadAction; @@ -49,6 +51,7 @@ class MemberCard extends StatelessWidget { required this.setAsHeadAction, required this.editMemberAction, required this.deleteMemberAction, + this.projectBeneficiaries, this.tasks, this.isNotEligible = false, this.projectBeneficiaryClientReferenceId, @@ -224,41 +227,45 @@ class MemberCard extends StatelessWidget { ? const Offstage() : !isNotEligible ? DigitElevatedButton( - onPressed: () { - final bloc = - context.read(); + onPressed: (projectBeneficiaries ?? []).isEmpty + ? null + : () { + final bloc = + context.read(); - bloc.add( - HouseholdOverviewEvent.selectedIndividual( - individualModel: individual, - ), - ); - bloc.add(HouseholdOverviewReloadEvent( - projectId: RegistrationDeliverySingleton() - .projectId!, - projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType ?? - BeneficiaryType.individual, - )); + bloc.add( + HouseholdOverviewEvent + .selectedIndividual( + individualModel: individual, + ), + ); + bloc.add(HouseholdOverviewReloadEvent( + projectId: + RegistrationDeliverySingleton() + .projectId!, + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType ?? + BeneficiaryType.individual, + )); - final futureTaskList = tasks - ?.where((task) => - task.status == - Status.delivered.toValue()) - .toList(); + final futureTaskList = tasks + ?.where((task) => + task.status == + Status.delivered.toValue()) + .toList(); - if ((futureTaskList ?? []).isNotEmpty) { - context.router.push( - RecordPastDeliveryDetailsRoute( - tasks: tasks, - ), - ); - } else { - context.router - .push(BeneficiaryDetailsRoute()); - } - }, + if ((futureTaskList ?? []).isNotEmpty) { + context.router.push( + RecordPastDeliveryDetailsRoute( + tasks: tasks, + ), + ); + } else { + context.router + .push(BeneficiaryDetailsRoute()); + } + }, child: Center( child: Text( allDosesDelivered( @@ -315,197 +322,213 @@ class MemberCard extends StatelessWidget { 50, ), ), - onPressed: () async { - await DigitActionDialog.show( - context, - widget: Column( - children: [ - DigitOutLineButton( - label: localizations.translate( - i18.memberCard.beneficiaryRefusedLabel, - ), - buttonStyle: OutlinedButton.styleFrom( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.zero, - ), - backgroundColor: Colors.white, - side: BorderSide( - width: 1.0, - color: theme.colorScheme.secondary, - ), - minimumSize: Size( - MediaQuery.of(context).size.width / - 1.25, - 50, - ), - ), - onPressed: () { - Navigator.of(context, rootNavigator: true) - .pop(); - context - .read() - .add( - DeliverInterventionSubmitEvent( - task: TaskModel( - projectBeneficiaryClientReferenceId: - projectBeneficiaryClientReferenceId, - clientReferenceId: - IdGen.i.identifier, - tenantId: - RegistrationDeliverySingleton() - .tenantId, - rowVersion: 1, - auditDetails: AuditDetails( - createdBy: - RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context - .millisecondsSinceEpoch(), - ), - projectId: - RegistrationDeliverySingleton() - .projectId, - status: Status - .beneficiaryRefused - .toValue(), - clientAuditDetails: - ClientAuditDetails( - createdBy: - RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: context - .millisecondsSinceEpoch(), - ), - additionalFields: - TaskAdditionalFields( - version: 1, - fields: [ - AdditionalField( - 'taskStatus', - Status.beneficiaryRefused + onPressed: (projectBeneficiaries ?? []).isEmpty + ? null + : () async { + await DigitActionDialog.show( + context, + widget: Column( + children: [ + DigitOutLineButton( + label: localizations.translate( + i18.memberCard + .beneficiaryRefusedLabel, + ), + buttonStyle: OutlinedButton.styleFrom( + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.zero, + ), + backgroundColor: Colors.white, + side: BorderSide( + width: 1.0, + color: + theme.colorScheme.secondary, + ), + minimumSize: Size( + MediaQuery.of(context) + .size + .width / + 1.25, + 50, + ), + ), + onPressed: () { + Navigator.of(context, + rootNavigator: true) + .pop(); + context + .read() + .add( + DeliverInterventionSubmitEvent( + task: TaskModel( + projectBeneficiaryClientReferenceId: + projectBeneficiaryClientReferenceId, + clientReferenceId: + IdGen.i.identifier, + tenantId: + RegistrationDeliverySingleton() + .tenantId, + rowVersion: 1, + auditDetails: + AuditDetails( + createdBy: + RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: context + .millisecondsSinceEpoch(), + ), + projectId: + RegistrationDeliverySingleton() + .projectId, + status: Status + .beneficiaryRefused .toValue(), + clientAuditDetails: + ClientAuditDetails( + createdBy: + RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: context + .millisecondsSinceEpoch(), + ), + additionalFields: + TaskAdditionalFields( + version: 1, + fields: [ + AdditionalField( + 'taskStatus', + Status + .beneficiaryRefused + .toValue(), + ), + ], + ), + address: individual + .address?.first, ), - ], + isEditing: false, + boundaryModel: + RegistrationDeliverySingleton() + .boundary!, + ), + ); + final reloadState = context + .read(); + Future.delayed( + const Duration(milliseconds: 500), + () { + reloadState.add( + HouseholdOverviewReloadEvent( + projectId: + RegistrationDeliverySingleton() + .projectId!, + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType!, + ), + ); + }, + ).then( + (value) => context.router.push( + HouseholdAcknowledgementRoute( + enableViewHousehold: true, ), - address: - individual.address?.first, ), - isEditing: false, - boundaryModel: - RegistrationDeliverySingleton() - .boundary!, + ); + }, + ), + const SizedBox( + height: kPadding * 2, + ), + DigitOutLineButton( + label: localizations.translate( + i18.memberCard + .referBeneficiaryLabel, + ), + buttonStyle: OutlinedButton.styleFrom( + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.zero, ), - ); - final reloadState = - context.read(); - Future.delayed( - const Duration(milliseconds: 500), - () { - reloadState.add( - HouseholdOverviewReloadEvent( - projectId: - RegistrationDeliverySingleton() - .projectId!, - projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, + backgroundColor: Colors.white, + side: BorderSide( + width: 1.0, + color: + theme.colorScheme.secondary, + ), + minimumSize: Size( + MediaQuery.of(context) + .size + .width / + 1.25, + 50, ), - ); - }, - ).then( - (value) => context.router.push( - HouseholdAcknowledgementRoute( - enableViewHousehold: true, ), - ), - ); - }, - ), - const SizedBox( - height: kPadding * 2, - ), - DigitOutLineButton( - label: localizations.translate( - i18.memberCard.referBeneficiaryLabel, - ), - buttonStyle: OutlinedButton.styleFrom( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.zero, - ), - backgroundColor: Colors.white, - side: BorderSide( - width: 1.0, - color: theme.colorScheme.secondary, - ), - minimumSize: Size( - MediaQuery.of(context).size.width / - 1.25, - 50, - ), - ), - onPressed: () async { - Navigator.of( - context, - rootNavigator: true, - ).pop(); - await context.router.push( - ReferBeneficiaryRoute( - projectBeneficiaryClientRefId: - projectBeneficiaryClientReferenceId ?? - '', - ), - ); - }, - ), - const SizedBox( - height: kPadding * 2, - ), - DigitOutLineButton( - label: localizations.translate( - i18.memberCard.recordAdverseEventsLabel, - ), - buttonStyle: OutlinedButton.styleFrom( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.zero, - ), - backgroundColor: Colors.white, - side: BorderSide( - width: 1.0, - color: tasks != null && - (tasks ?? []).isNotEmpty - ? theme.colorScheme.secondary - : theme.colorScheme.outline, - ), - minimumSize: Size( - MediaQuery.of(context).size.width / - 1.25, - 50, - ), - ), - onPressed: tasks != null && - (tasks ?? []).isNotEmpty - ? () async { + onPressed: () async { Navigator.of( context, rootNavigator: true, ).pop(); await context.router.push( - SideEffectsRoute( - tasks: tasks!, + ReferBeneficiaryRoute( + projectBeneficiaryClientRefId: + projectBeneficiaryClientReferenceId ?? + '', ), ); - } - : null, - ), - ], - ), - ); - }, + }, + ), + const SizedBox( + height: kPadding * 2, + ), + DigitOutLineButton( + label: localizations.translate( + i18.memberCard + .recordAdverseEventsLabel, + ), + buttonStyle: OutlinedButton.styleFrom( + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.zero, + ), + backgroundColor: Colors.white, + side: BorderSide( + width: 1.0, + color: tasks != null && + (tasks ?? []).isNotEmpty + ? theme.colorScheme.secondary + : theme.colorScheme.outline, + ), + minimumSize: Size( + MediaQuery.of(context) + .size + .width / + 1.25, + 50, + ), + ), + onPressed: tasks != null && + (tasks ?? []).isNotEmpty + ? () async { + Navigator.of( + context, + rootNavigator: true, + ).pop(); + await context.router.push( + SideEffectsRoute( + tasks: tasks!, + ), + ); + } + : null, + ), + ], + ), + ); + }, ), ], ), diff --git a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart index 9e84d26ce..e2e4f8566 100644 --- a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart +++ b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart @@ -8,7 +8,7 @@ import '../../models/entities/status.dart'; import '../../utils/i18_key_constants.dart' as i18; class StatusFilter extends LocalizedStatefulWidget { - final List? selectedFilters; + final List? selectedFilters; const StatusFilter({ super.key, super.appLocalizations, @@ -24,7 +24,7 @@ class _StatusFilterState extends LocalizedState { @override void initState() { - selectedButtons = widget.selectedFilters ?? []; + assignSelectedButtons(); super.initState(); } @@ -38,6 +38,9 @@ class _StatusFilterState extends LocalizedState { options: getFilters() ?? [], allowMultipleSelection: true, width: 115, + initialSelection: [ + ...selectedButtons + ], // [TODO : fix selected not displaying] onSelectionChanged: (selected) { setState(() { selectedButtons = selected; @@ -77,7 +80,8 @@ class _StatusFilterState extends LocalizedState { ), ), onPressed: () { - Navigator.pop(context, selectedButtons); + Navigator.pop( + context, selectedButtons.map((e) => e.name).toList()); }), ), ], @@ -103,4 +107,13 @@ class _StatusFilterState extends LocalizedState { .expand((element) => element) .toList(); } + + void assignSelectedButtons() { + setState(() { + selectedButtons = widget.selectedFilters! + .map((e) => Status.values.where((element) => element.toValue() == e)) + .expand((element) => element) + .toList(); + }); + } } diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 80620ebb9..99fcaaa55 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -422,27 +422,30 @@ packages: path: "../digit_components" relative: true source: path - version: "1.0.0+2" + version: "1.0.0+3" digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path + name: digit_data_model + sha256: "0e1ec8e4d2776fcc4a8118ac85043b8876466ec7399c14880f3d585ad3586ef6" + url: "https://pub.dev" + source: hosted version: "1.0.2" digit_scanner: dependency: "direct main" description: - path: "../digit_scanner" - relative: true - source: path + name: digit_scanner + sha256: a040c9c413436aeb953fdea3bc99ef618641189b06e8f155d84ac83ba8d40fd1 + url: "https://pub.dev" + source: hosted version: "1.0.2" digit_showcase: dependency: "direct main" description: - path: "../digit_showcase" - relative: true - source: path + name: digit_showcase + sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" + url: "https://pub.dev" + source: hosted version: "1.0.0" dio: dependency: transitive @@ -1457,5 +1460,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <4.0.0" + dart: ">=3.2.0 <3.9.0" flutter: ">=3.16.0" From 949309374f03a57e15558eae5af88076f4acb0ea Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Wed, 17 Jul 2024 12:45:05 +0530 Subject: [PATCH 054/241] HCMPRE-98 Filter search pagination, Removed private PageState (#457) * added translator for administration area * Fixed Facility search based on tenant ID * Added disable battery optimization permission for background service * Added disable battery optimization ask permission on App start and background service start * HLM-5984:: Get Precise location on Submitting latitude longitude details * Reverted install_bricks.sh * added new status REGISTERED, NOT_REGISTERED updated conditional check for status by project beneficiaries * added static status_filter.dart integration in search_beneficiary.dart * TODO for selected_filters display condition * integrated household search filters with mdms implemented search based on filters with pagination for Registered and NotRegistered * updated status filter component merge with develop * create individual_global_search and implemented search * Auto Create Project Beneficiary on Edit Household, and disable record delivery if no project beneficiary present * Conflicts resolved * implemented household_global_search.dart fixed individual_global_search.dart * updated proximity search for household_global_search.dart * Pop State recapture during registration flow, Disable delivery flow for individual based campaign if project beneficiaries is empty (#456) * updated class state from private for customization override in registration_delivery and inventory added pagination for filter search TODO: combination search for registered and not registered needs fix which return only last selected results * adding missed changes for last commit * displaying selected filter value for applied filters in search_beneficiary.dart * updated changelog for inventory and registration_delivery for new dev versions * updated pubspec lock of registration_delivery --------- Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> --- packages/digit_components/CHANGELOG.md | 8 +- .../digit_components/example/pubspec.lock | 2 +- .../lib/widgets/atoms}/details_card.dart | 0 .../lib/widgets/atoms/selection_card.dart | 34 ++- packages/digit_components/pubspec.yaml | 2 +- packages/inventory_management/CHANGELOG.md | 5 + .../lib/pages/acknowledgement.dart | 4 +- .../lib/pages/facility_selection.dart | 4 +- .../lib/pages/manage_stocks.dart | 4 +- .../lib/pages/record_stock/stock_details.dart | 4 +- .../pages/record_stock/warehouse_details.dart | 4 +- .../lib/pages/reports/report_details.dart | 4 +- .../lib/pages/reports/report_selection.dart | 4 +- .../stock_reconciliation.dart | 4 +- .../widgets/reports/readonly_pluto_grid.dart | 4 +- packages/inventory_management/pubspec.lock | 9 +- packages/inventory_management/pubspec.yaml | 4 +- packages/registration_delivery/CHANGELOG.md | 16 ++ .../deliver_intervention.dart | 7 +- .../household_global_seach.dart | 23 +- .../individual_global_search.dart | 15 +- .../search_households/proximity_search.dart | 169 ------------ .../search_bloc_common_wrapper.dart | 4 +- .../search_households/search_by_head.dart | 247 ------------------ .../beneficiary/beneficiary_checklist.dart | 1 - .../beneficiary/beneficiary_details.dart | 4 +- .../beneficiary/deliver_intervention.dart | 4 +- .../pages/beneficiary/dose_administered.dart | 4 +- .../pages/beneficiary/household_overview.dart | 41 +-- .../record_past_delivery_details.dart | 4 +- .../pages/beneficiary/refer_beneficiary.dart | 4 +- .../pages/beneficiary/refused_delivery.dart | 4 +- .../lib/pages/beneficiary/side_effects.dart | 4 +- .../widgets/household_acknowledgement.dart | 4 +- .../widgets/record_delivery_cycle.dart | 4 +- .../widgets/splash_acknowledgement.dart | 4 +- .../beneficiary_acknowledgement.dart | 4 +- .../house_details.dart | 4 +- .../household_details.dart | 4 +- .../household_location.dart | 4 +- .../individual_details.dart | 5 +- .../lib/pages/reason_for_deletion.dart | 4 +- .../pages/registration_delivery_wrapper.dart | 2 - .../lib/pages/search_beneficiary.dart | 162 +++++++----- .../lib/pages/summary_page.dart | 6 +- .../lib/registration_delivery.dart | 2 - .../resource_beneficiary_card.dart | 4 +- .../beneficiary/view_beneficiary_card.dart | 72 +++-- .../progress_bar/beneficiary_progress.dart | 4 +- .../lib/widgets/showcase/showcase_button.dart | 4 +- .../widgets/showcase/showcase_wrappers.dart | 4 +- .../widgets/status_filter/status_filter.dart | 5 +- packages/registration_delivery/pubspec.lock | 9 +- packages/registration_delivery/pubspec.yaml | 4 +- 54 files changed, 326 insertions(+), 640 deletions(-) rename packages/{registration_delivery/lib/widgets => digit_components/lib/widgets/atoms}/details_card.dart (100%) delete mode 100644 packages/registration_delivery/lib/blocs/search_households/proximity_search.dart delete mode 100644 packages/registration_delivery/lib/blocs/search_households/search_by_head.dart diff --git a/packages/digit_components/CHANGELOG.md b/packages/digit_components/CHANGELOG.md index e5a78855a..debe501cb 100644 --- a/packages/digit_components/CHANGELOG.md +++ b/packages/digit_components/CHANGELOG.md @@ -109,4 +109,10 @@ * DigitTextField component update ## 1.0.0+3 -* Capture and Hide Location Dialog added to utils \ No newline at end of file +* Capture and Hide Location Dialog added to utils + +## 1.0.0+4 +* Added new component selected box + +## 1.0.0+5 +* Added new component details_card \ No newline at end of file diff --git a/packages/digit_components/example/pubspec.lock b/packages/digit_components/example/pubspec.lock index 0f5971628..72557cd81 100644 --- a/packages/digit_components/example/pubspec.lock +++ b/packages/digit_components/example/pubspec.lock @@ -231,7 +231,7 @@ packages: path: ".." relative: true source: path - version: "1.0.0+3" + version: "1.0.0+5" easy_stepper: dependency: transitive description: diff --git a/packages/registration_delivery/lib/widgets/details_card.dart b/packages/digit_components/lib/widgets/atoms/details_card.dart similarity index 100% rename from packages/registration_delivery/lib/widgets/details_card.dart rename to packages/digit_components/lib/widgets/atoms/details_card.dart diff --git a/packages/digit_components/lib/widgets/atoms/selection_card.dart b/packages/digit_components/lib/widgets/atoms/selection_card.dart index cccb139ce..c47a424fe 100644 --- a/packages/digit_components/lib/widgets/atoms/selection_card.dart +++ b/packages/digit_components/lib/widgets/atoms/selection_card.dart @@ -81,20 +81,25 @@ class _SelectionBoxState extends State> { width: 1, ), ), - child: Center( - child: Text( - widget.valueMapper(option), - overflow: TextOverflow.ellipsis, - textAlign: TextAlign.center, - style: isSelected - ? textTheme.bodyMedium?.copyWith( - color: const DigitColors().white, - fontWeight: FontWeight.w700, - ) - : textTheme.bodyMedium?.copyWith( - color: const DigitColors().woodsmokeBlack, - ), - ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Flexible( + child: Text( + widget.valueMapper(option), + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.center, + style: isSelected + ? textTheme.bodyMedium?.copyWith( + color: const DigitColors().white, + fontWeight: FontWeight.w700, + ) + : textTheme.bodyMedium?.copyWith( + color: const DigitColors().woodsmokeBlack, + ), + ), + ), + ], ), ), ); @@ -114,6 +119,7 @@ class _SelectionBoxState extends State> { label: widget.title, isRequired: widget.isRequired, child: Container( + width: MediaQuery.of(context).size.width, padding: const EdgeInsets.all(kPadding * 3), decoration: BoxDecoration( color: const DigitColors().alabasterWhite, diff --git a/packages/digit_components/pubspec.yaml b/packages/digit_components/pubspec.yaml index 8a336891f..e02e334fd 100644 --- a/packages/digit_components/pubspec.yaml +++ b/packages/digit_components/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_components description: Digit UI Design specification Flutter widgets. Import this package by adding digit_components in respective pubspec.yaml dependencies. -version: 1.0.0+3 +version: 1.0.0+5 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_components repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/inventory_management/CHANGELOG.md b/packages/inventory_management/CHANGELOG.md index e976b52c4..365d5f9d0 100644 --- a/packages/inventory_management/CHANGELOG.md +++ b/packages/inventory_management/CHANGELOG.md @@ -52,3 +52,8 @@ ## 1.0.2+1 * Get Precise location on Submitting latitude longitude details + +## 0.0.0-dev.10 + +* Updated PageState class to public for customization +* Updated digit_components \ No newline at end of file diff --git a/packages/inventory_management/lib/pages/acknowledgement.dart b/packages/inventory_management/lib/pages/acknowledgement.dart index bf58f383b..2b48899f4 100644 --- a/packages/inventory_management/lib/pages/acknowledgement.dart +++ b/packages/inventory_management/lib/pages/acknowledgement.dart @@ -21,10 +21,10 @@ class InventoryAcknowledgementPage extends LocalizedStatefulWidget { @override State createState() => - _AcknowledgementPageState(); + AcknowledgementPageState(); } -class _AcknowledgementPageState +class AcknowledgementPageState extends LocalizedState { @override Widget build(BuildContext context) { diff --git a/packages/inventory_management/lib/pages/facility_selection.dart b/packages/inventory_management/lib/pages/facility_selection.dart index 90a968fa4..08b6d667f 100644 --- a/packages/inventory_management/lib/pages/facility_selection.dart +++ b/packages/inventory_management/lib/pages/facility_selection.dart @@ -22,10 +22,10 @@ class InventoryFacilitySelectionPage extends LocalizedStatefulWidget { @override State createState() => - _InventoryFacilitySelectionPageState(); + InventoryFacilitySelectionPageState(); } -class _InventoryFacilitySelectionPageState +class InventoryFacilitySelectionPageState extends LocalizedState { static const _facilityName = 'facilityKey'; static const _selectedFacility = 'selectedFacilityKey'; diff --git a/packages/inventory_management/lib/pages/manage_stocks.dart b/packages/inventory_management/lib/pages/manage_stocks.dart index 7649edb23..8730c8634 100644 --- a/packages/inventory_management/lib/pages/manage_stocks.dart +++ b/packages/inventory_management/lib/pages/manage_stocks.dart @@ -16,10 +16,10 @@ class ManageStocksPage extends LocalizedStatefulWidget { }); @override - State createState() => _ManageStocksPageState(); + State createState() => ManageStocksPageState(); } -class _ManageStocksPageState extends LocalizedState { +class ManageStocksPageState extends LocalizedState { @override initState() { super.initState(); diff --git a/packages/inventory_management/lib/pages/record_stock/stock_details.dart b/packages/inventory_management/lib/pages/record_stock/stock_details.dart index 748265e48..f733b38c7 100644 --- a/packages/inventory_management/lib/pages/record_stock/stock_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/stock_details.dart @@ -31,10 +31,10 @@ class StockDetailsPage extends LocalizedStatefulWidget { }); @override - State createState() => _StockDetailsPageState(); + State createState() => StockDetailsPageState(); } -class _StockDetailsPageState extends LocalizedState { +class StockDetailsPageState extends LocalizedState { static const _productVariantKey = 'productVariant'; static const _secondaryPartyKey = 'secondaryParty'; static const _transactionQuantityKey = 'quantity'; diff --git a/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart b/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart index 209a131eb..a31344982 100644 --- a/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart @@ -25,10 +25,10 @@ class WarehouseDetailsPage extends LocalizedStatefulWidget { }); @override - State createState() => _WarehouseDetailsPageState(); + State createState() => WarehouseDetailsPageState(); } -class _WarehouseDetailsPageState extends LocalizedState { +class WarehouseDetailsPageState extends LocalizedState { static const _dateOfEntryKey = 'dateOfReceipt'; static const _administrativeUnitKey = 'administrativeUnit'; static const _warehouseKey = 'warehouse'; diff --git a/packages/inventory_management/lib/pages/reports/report_details.dart b/packages/inventory_management/lib/pages/reports/report_details.dart index caec94613..f0a881cce 100644 --- a/packages/inventory_management/lib/pages/reports/report_details.dart +++ b/packages/inventory_management/lib/pages/reports/report_details.dart @@ -35,10 +35,10 @@ class InventoryReportDetailsPage extends LocalizedStatefulWidget { @override State createState() => - _InventoryReportDetailsPageState(); + InventoryReportDetailsPageState(); } -class _InventoryReportDetailsPageState +class InventoryReportDetailsPageState extends LocalizedState { static const _productVariantKey = 'productVariant'; static const _facilityKey = 'facilityKey'; diff --git a/packages/inventory_management/lib/pages/reports/report_selection.dart b/packages/inventory_management/lib/pages/reports/report_selection.dart index d5c364a3f..5f7cfd145 100644 --- a/packages/inventory_management/lib/pages/reports/report_selection.dart +++ b/packages/inventory_management/lib/pages/reports/report_selection.dart @@ -17,10 +17,10 @@ class InventoryReportSelectionPage extends LocalizedStatefulWidget { @override State createState() => - _InventoryReportSelectionPageState(); + InventoryReportSelectionPageState(); } -class _InventoryReportSelectionPageState +class InventoryReportSelectionPageState extends LocalizedState { @override void initState() { diff --git a/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart b/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart index af56c4331..54fce335d 100644 --- a/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart +++ b/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart @@ -28,10 +28,10 @@ class StockReconciliationPage extends LocalizedStatefulWidget { @override State createState() => - _StockReconciliationPageState(); + StockReconciliationPageState(); } -class _StockReconciliationPageState +class StockReconciliationPageState extends LocalizedState { static const _facilityKey = 'facility'; static const _productVariantKey = 'productVariant'; diff --git a/packages/inventory_management/lib/widgets/reports/readonly_pluto_grid.dart b/packages/inventory_management/lib/widgets/reports/readonly_pluto_grid.dart index 75b789d1f..fd5d36d7d 100644 --- a/packages/inventory_management/lib/widgets/reports/readonly_pluto_grid.dart +++ b/packages/inventory_management/lib/widgets/reports/readonly_pluto_grid.dart @@ -28,11 +28,11 @@ class ReadonlyDigitGrid extends LocalizedStatefulWidget { /// Creating the state for ReadonlyDigitGrid @override - State createState() => _ReadonlyDigitGridState(); + State createState() => ReadonlyDigitGridState(); } /// State class for ReadonlyDigitGrid -class _ReadonlyDigitGridState extends LocalizedState { +class ReadonlyDigitGridState extends LocalizedState { @override Widget build(BuildContext context) { // Returns a PlutoGrid with the given configuration and data diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index 63e4f65ab..3ff89e852 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -419,10 +419,11 @@ packages: digit_components: dependency: "direct main" description: - path: "../digit_components" - relative: true - source: path - version: "1.0.0+3" + name: digit_components + sha256: c9fb77852995d45d26e7bec9c945002f33c99d1399cfe30696a925d3ed3ae57d + url: "https://pub.dev" + source: hosted + version: "1.0.0+5" digit_data_model: dependency: "direct main" description: diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index ea58227b5..6b3197932 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -1,6 +1,6 @@ name: inventory_management description: This package offers inventory management features, allowing users to view stock reports and perform inventory resource reconciliation. -version: 1.0.2+1 +version: 0.0.0-dev.10 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/inventory_management repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0+2 + digit_components: ^1.0.0+5 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration_delivery/CHANGELOG.md index 3a4dd237c..359b39b7d 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration_delivery/CHANGELOG.md @@ -50,3 +50,19 @@ ## 1.0.2+1 * Get Precise location on Submitting latitude longitude details + +## 0.0.0-dev.8 + +* Added query builder and registry updated changes +* Added New screens - house details + +## 0.0.0-dev.9 + +* Updated individual details file for exposing individual state +* Updated household_overview for BeneficiaryChecklistRoute + +## 0.0.0-dev.10 + +* Added pagination for filter search +* Updated PageState class to public for customization +* Updated digit_components \ No newline at end of file diff --git a/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart b/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart index 1c3b173db..ce95a751d 100644 --- a/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart +++ b/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; @@ -88,13 +89,13 @@ class DeliverInterventionBloc final List futureTask = tasks .where((element) => - element.additionalFields?.fields - .firstWhere( + element.additionalFields!.fields + .firstWhereOrNull( (a) => a.key == AdditionalFieldsType.deliveryStrategy.toValue(), ) - .value == + ?.value == DeliverStrategyType.indirect.toValue() && element.status == Status.delivered.toValue()) .toList(); diff --git a/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart b/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart index b3710a299..d7a4b84d2 100644 --- a/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart +++ b/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart @@ -1,8 +1,8 @@ import 'dart:async'; -import 'package:bloc/src/bloc.dart'; import 'package:collection/collection.dart'; import 'package:digit_data_model/models/entities/individual.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:registration_delivery/blocs/search_households/search_households.dart'; import '../../models/entities/household.dart'; @@ -102,6 +102,19 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { beneficiaryClientReferenceId: houseHoldClientReferenceIds.map((e) => e).toList())); + if (projectBeneficiariesList.isNotEmpty) { + taskList = await fetchTaskbyProjectBeneficiary(projectBeneficiariesList); + sideEffectsList = + await sideEffectDataRepository.search(SideEffectSearchModel( + taskClientReferenceId: + taskList.map((e) => e.clientReferenceId).toList(), + )); + referralsList = await referralDataRepository.search(ReferralSearchModel( + projectBeneficiaryClientReferenceId: + projectBeneficiariesList.map((e) => e.clientReferenceId).toList(), + )); + } + for (final entry in groupedHouseholdsMembers.entries) { HouseholdModel filteredHousehold; List filteredIndividuals; @@ -124,11 +137,9 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { // Filter tasks based on project beneficiary client reference IDs filteredTasks = taskList - .where((element) => filteredIndividuals - .where((e) => - e.clientReferenceId == - element.projectBeneficiaryClientReferenceId) - .isNotEmpty) + .where((element) => + projectBeneficiariesList.first.clientReferenceId == + element.projectBeneficiaryClientReferenceId) .toList(); // Find the head of the household diff --git a/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart b/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart index 56baf8749..0199cc069 100644 --- a/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart +++ b/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart @@ -1,8 +1,8 @@ import 'dart:async'; -import 'package:bloc/src/bloc.dart'; import 'package:collection/collection.dart'; import 'package:digit_data_model/models/entities/individual.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:registration_delivery/blocs/search_households/search_households.dart'; import '../../models/entities/household.dart'; @@ -95,6 +95,19 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { beneficiaryClientReferenceId: individualClientReferenceIds.map((e) => e).toList())); + if (projectBeneficiariesList.isNotEmpty) { + taskList = await fetchTaskbyProjectBeneficiary(projectBeneficiariesList); + sideEffectsList = + await sideEffectDataRepository.search(SideEffectSearchModel( + taskClientReferenceId: + taskList.map((e) => e.clientReferenceId).toList(), + )); + referralsList = await referralDataRepository.search(ReferralSearchModel( + projectBeneficiaryClientReferenceId: + projectBeneficiariesList.map((e) => e.clientReferenceId).toList(), + )); + } + for (final entry in groupedHouseholdsMembers.entries) { HouseholdModel filteredHousehold; List filteredIndividuals; diff --git a/packages/registration_delivery/lib/blocs/search_households/proximity_search.dart b/packages/registration_delivery/lib/blocs/search_households/proximity_search.dart deleted file mode 100644 index 9e93efaf4..000000000 --- a/packages/registration_delivery/lib/blocs/search_households/proximity_search.dart +++ /dev/null @@ -1,169 +0,0 @@ -// import 'dart:async'; -// -// import 'package:collection/collection.dart'; -// import 'package:digit_data_model/data_model.dart'; -// -// import '../../models/entities/household.dart'; -// import '../../models/entities/household_member.dart'; -// import '../../models/entities/project_beneficiary.dart'; -// import '../../models/entities/referral.dart'; -// import '../../models/entities/side_effect.dart'; -// import '../../models/entities/task.dart'; -// import 'search_households.dart'; -// -// class ProximitySearchBloc extends SearchHouseholdsBloc { -// ProximitySearchBloc({ -// required super.userUid, -// required super.projectId, -// required super.individual, -// required super.householdMember, -// required super.household, -// required super.projectBeneficiary, -// required super.taskDataRepository, -// required super.beneficiaryType, -// required super.sideEffectDataRepository, -// required super.addressRepository, -// required super.referralDataRepository, -// }) { -// on(_handleSearchByProximity); -// } -// -// FutureOr _handleSearchByProximity( -// SearchHouseholdsByProximityEvent event, -// SearchHouseholdsEmitter emit, -// ) async { -// List householdList = []; -// List individualsList = []; -// List householdMembersList = []; -// List projectBeneficiariesList = []; -// List taskList = []; -// List sideEffectsList = []; -// List referralsList = []; -// emit(state.copyWith(loading: true)); -// // Fetch individual results based on proximity and other criteria. -// householdList = -// await addressRepository.searchHouseHoldbyAddress(AddressSearchModel( -// latitude: event.latitude, -// longitude: event.longititude, -// maxRadius: event.maxRadius, -// offset: event.offset, -// limit: event.limit, -// )); -// // Extract individual IDs from proximity-based individual results. -// final householdClientReferenceIds = -// householdList.map((e) => e.clientReferenceId).toList(); -// householdMembersList = await fetchHouseholdMembersBulk( -// null, -// householdClientReferenceIds, -// ); -// final List individualClientReferenceIds = householdMembersList -// .map((e) => e.individualClientReferenceId.toString()) -// .toList(); -// individualsList = await individual.search( -// IndividualSearchModel(clientReferenceId: individualClientReferenceIds), -// ); -// projectBeneficiariesList = await fetchProjectBeneficiary( -// beneficiaryType != BeneficiaryType.individual -// ? householdClientReferenceIds -// : individualClientReferenceIds, -// ); -// if (projectBeneficiariesList.isNotEmpty) { -// // Search for tasks and side effects based on project beneficiaries. -// taskList = await fetchTaskbyProjectBeneficiary(projectBeneficiariesList); -// sideEffectsList = -// await sideEffectDataRepository.search(SideEffectSearchModel( -// taskClientReferenceId: -// taskList.map((e) => e.clientReferenceId).toList(), -// )); -// referralsList = await referralDataRepository.search(ReferralSearchModel( -// projectBeneficiaryClientReferenceId: -// projectBeneficiariesList.map((e) => e.clientReferenceId).toList(), -// )); -// } -// // Initialize a list to store household member wrappers. -// final containers = [...state.householdMembers]; -// // Group household members by household client reference ID. -// final groupedHouseholdsMembers = householdMembersList -// .where((hm) => projectBeneficiariesList -// .map((p) => p.beneficiaryClientReferenceId) -// .toList() -// .contains(beneficiaryType == BeneficiaryType.individual -// ? hm.individualClientReferenceId -// : hm.householdClientReferenceId)) -// .groupListsBy((element) => element.householdClientReferenceId); -// // Iterate through grouped households and retrieve additional data. -// for (final entry in groupedHouseholdsMembers.entries) { -// HouseholdModel filteredHousehold; -// List filteredIndividuals; -// List filteredBeneficiaries; -// List filteredTasks; -// final householdId = entry.key; -// if (householdId == null) continue; -// filteredHousehold = -// householdList.firstWhere((e) => e.clientReferenceId == householdId); -// final List membersIds = -// entry.value.map((e) => e.individualClientReferenceId).toList(); -// filteredIndividuals = individualsList -// .where((element) => membersIds.contains(element.clientReferenceId)) -// .toList(); -// filteredBeneficiaries = projectBeneficiariesList -// .where((element) => beneficiaryType == BeneficiaryType.individual -// ? membersIds.contains(element.beneficiaryClientReferenceId) -// : householdId == element.beneficiaryClientReferenceId) -// .toList(); -// filteredTasks = taskList -// .where((element) => filteredBeneficiaries -// .where((e) => -// e.clientReferenceId == -// element.projectBeneficiaryClientReferenceId) -// .isNotEmpty) -// .toList(); -// -// final beneficiaryClientReferenceIds = filteredBeneficiaries -// .map((e) => e.beneficiaryClientReferenceId) -// .toList(); -// -// final List beneficiaryIndividuals = filteredIndividuals -// .where((element) => -// beneficiaryClientReferenceIds.contains(element.clientReferenceId)) -// .toList(); -// // Find the head of household from the individuals. -// final head = (beneficiaryType == BeneficiaryType.individual -// ? beneficiaryIndividuals -// : filteredIndividuals) -// .firstWhereOrNull( -// (element) => -// element.clientReferenceId == -// entry.value -// .firstWhereOrNull( -// (element) => element.isHeadOfHousehold, -// ) -// ?.individualClientReferenceId, -// ); -// if (head == null || filteredBeneficiaries.isEmpty) continue; -// // Create a container for household members and associated data. -// if (filteredBeneficiaries.isNotEmpty) { -// containers.add( -// HouseholdMemberWrapper( -// household: filteredHousehold, -// headOfHousehold: head, -// members: beneficiaryType == BeneficiaryType.individual -// ? beneficiaryIndividuals -// : filteredIndividuals, -// projectBeneficiaries: filteredBeneficiaries, -// tasks: filteredTasks.isEmpty ? null : filteredTasks, -// sideEffects: sideEffectsList.isEmpty ? null : sideEffectsList, -// referrals: referralsList.isEmpty ? null : referralsList, -// ), -// ); -// } -// } -// // Update the state with the results and mark the search as completed. -// emit(state.copyWith( -// householdMembers: containers, -// loading: false, -// offset: event.offset + event.limit, -// limit: event.limit, -// )); -// } -// } diff --git a/packages/registration_delivery/lib/blocs/search_households/search_bloc_common_wrapper.dart b/packages/registration_delivery/lib/blocs/search_households/search_bloc_common_wrapper.dart index 1141e8a43..0e85aaf4b 100644 --- a/packages/registration_delivery/lib/blocs/search_households/search_bloc_common_wrapper.dart +++ b/packages/registration_delivery/lib/blocs/search_households/search_bloc_common_wrapper.dart @@ -5,9 +5,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:registration_delivery/blocs/search_households/individual_global_search.dart'; import 'household_global_seach.dart'; import 'tag_by_search.dart'; -import 'proximity_search.dart'; import 'search_households.dart'; -import 'search_by_head.dart'; class SearchBlocWrapper implements StateStreamableSource { final SearchHouseholdsBloc searchHouseholdsBloc; @@ -56,6 +54,7 @@ class SearchBlocWrapper implements StateStreamableSource { FutureOr close() { searchHouseholdsBloc.close(); individualGlobalSearchBloc.close(); + houseHoldGlobalSearchBloc.close(); tagSearchBloc.close(); } @@ -63,5 +62,6 @@ class SearchBlocWrapper implements StateStreamableSource { bool get isClosed => searchHouseholdsBloc.isClosed && individualGlobalSearchBloc.isClosed && + houseHoldGlobalSearchBloc.isClosed && tagSearchBloc.isClosed; } diff --git a/packages/registration_delivery/lib/blocs/search_households/search_by_head.dart b/packages/registration_delivery/lib/blocs/search_households/search_by_head.dart deleted file mode 100644 index dde2d5331..000000000 --- a/packages/registration_delivery/lib/blocs/search_households/search_by_head.dart +++ /dev/null @@ -1,247 +0,0 @@ -// import 'dart:async'; -// -// import 'package:collection/collection.dart'; -// import 'package:digit_data_model/data_model.dart'; -// -// import '../../models/entities/household.dart'; -// import '../../models/entities/household_member.dart'; -// import '../../models/entities/project_beneficiary.dart'; -// import '../../models/entities/referral.dart'; -// import '../../models/entities/side_effect.dart'; -// import '../../models/entities/task.dart'; -// import 'search_households.dart'; -// -// class SearchByHeadBloc extends SearchHouseholdsBloc { -// SearchByHeadBloc({ -// required super.userUid, -// required super.projectId, -// required super.individual, -// required super.householdMember, -// required super.household, -// required super.projectBeneficiary, -// required super.taskDataRepository, -// required super.beneficiaryType, -// required super.sideEffectDataRepository, -// required super.addressRepository, -// required super.referralDataRepository, -// }) { -// on( -// _handleSearchByHouseholdHead, -// transformer: debounce( -// const Duration(milliseconds: 100), -// ), -// ); -// } -// -// FutureOr _handleSearchByHouseholdHead( -// SearchHouseholdsSearchByHouseholdHeadEvent event, -// SearchHouseholdsEmitter emit, -// ) async { -// // Check if the search text is empty; if so, clear the results and return. -// if (event.searchText.trim().isEmpty) { -// super.emit(state.copyWith( -// householdMembers: [], -// searchQuery: null, -// loading: false, -// )); -// -// return; -// } -// -// // Update the state to indicate that the search is in progress. -// super.emit(state.copyWith( -// loading: true, -// searchQuery: event.searchText, -// )); -// -// // Perform a series of asynchronous data retrieval operations based on the search criteria. -// -// // Fetch hosehold results based on proximity and other criteria. -// -// List individuals = []; -// List proximityBasedIndividualResults = []; -// List sideEffects = []; -// final containers = []; -// List referrals = []; -// List tasks = []; -// -// if (event.isProximityEnabled) { -// // Fetch individual results based on proximity and other criteria. -// proximityBasedIndividualResults = await addressRepository -// .searchHouseHoldByIndividual(AddressSearchModel( -// latitude: event.latitude, -// longitude: event.longitude, -// maxRadius: event.maxRadius, -// offset: event.offset, -// limit: event.limit, -// )); -// } -// // Extract individual IDs from proximity-based individual results. -// final List individualIds = proximityBasedIndividualResults -// .map((e) => e.clientReferenceId) -// .toList(); -// -// individuals = await individual.search( -// event.isProximityEnabled -// ? IndividualSearchModel( -// clientReferenceId: individualIds, -// name: NameSearchModel( -// givenName: event.searchText.trim(), -// offset: event.offset, -// limit: event.limit, -// ), -// ) -// : IndividualSearchModel( -// name: NameSearchModel( -// givenName: event.searchText.trim(), -// offset: event.offset, -// limit: event.limit, -// ), -// ), -// ); -// -// final individualClientReferenceIds = -// individuals.map((e) => e.clientReferenceId).toList(); -// // Search for individual results using the extracted IDs and search text. -// final List householdMembers = -// await fetchHouseholdMembersBulk( -// individualClientReferenceIds, -// null, -// ); -// -// final househHoldIds = -// householdMembers.map((e) => e.householdClientReferenceId!).toList(); -// final List allhouseholdMembers = -// await fetchHouseholdMembersBulk( -// null, -// househHoldIds, -// ); -// -// final List individualMembers = -// await individual.search(IndividualSearchModel( -// clientReferenceId: allhouseholdMembers -// .map((e) => e.individualClientReferenceId.toString()) -// .toList(), -// )); -// final List houseHolds = await household.search( -// HouseholdSearchModel( -// clientReferenceId: househHoldIds, -// ), -// ); -// -// final projectBeneficiaries = await fetchProjectBeneficiary( -// beneficiaryType != BeneficiaryType.individual -// ? househHoldIds -// : allhouseholdMembers -// .map((e) => e.individualClientReferenceId.toString()) -// .toList(), -// ); -// -// // Search for individual results based on the search text only. -// -// if (projectBeneficiaries.isNotEmpty) { -// // Search for tasks and side effects based on project beneficiaries. -// tasks = await fetchTaskbyProjectBeneficiary(projectBeneficiaries); -// -// sideEffects = await sideEffectDataRepository.search(SideEffectSearchModel( -// taskClientReferenceId: tasks.map((e) => e.clientReferenceId).toList(), -// )); -// -// referrals = await referralDataRepository.search(ReferralSearchModel( -// projectBeneficiaryClientReferenceId: -// projectBeneficiaries.map((e) => e.clientReferenceId).toList(), -// )); -// } -// -// // Initialize a list to store household members. -// final groupedHouseholds = allhouseholdMembers -// .where((hm) => projectBeneficiaries -// .map((p) => p.beneficiaryClientReferenceId) -// .toList() -// .contains(beneficiaryType == BeneficiaryType.individual -// ? hm.individualClientReferenceId -// : hm.householdClientReferenceId)) -// .groupListsBy((element) => element.householdClientReferenceId); -// -// // Iterate through grouped households and retrieve additional data. -// for (final entry in groupedHouseholds.entries) { -// final householdId = entry.key; -// -// if (householdId == null) continue; -// // Retrieve the first household result. -// final householdresult = -// houseHolds.firstWhere((e) => e.clientReferenceId == householdId); -// // Search for individuals based on proximity, beneficiary type, and search text. -// final List membersIds = -// entry.value.map((e) => e.individualClientReferenceId).toList(); -// final List individualMembersList = individualMembers -// .where((element) => membersIds.contains(element.clientReferenceId)) -// .toList(); -// final List beneficiaries = projectBeneficiaries -// .where((element) => beneficiaryType == BeneficiaryType.individual -// ? individualClientReferenceIds -// .contains(element.beneficiaryClientReferenceId) -// : (househHoldIds).contains(element.beneficiaryClientReferenceId)) -// .toList(); -// final beneficiaryClientReferenceIds = projectBeneficiaries -// .map((e) => e.beneficiaryClientReferenceId) -// .toList(); -// final List beneficiaryIndividuals = individualMembersList -// .where((element) => -// beneficiaryClientReferenceIds.contains(element.clientReferenceId)) -// .toList(); -// // Find the head of household from the individuals. -// final head = ((beneficiaryType == BeneficiaryType.individual -// ? beneficiaryIndividuals -// : individualMembersList)) -// .firstWhereOrNull( -// (element) => -// element.clientReferenceId == -// entry.value -// .firstWhereOrNull( -// (element) => element.isHeadOfHousehold, -// ) -// ?.individualClientReferenceId, -// ); -// individualMembersList.firstWhereOrNull( -// (element) => -// element.clientReferenceId == -// entry.value -// .firstWhereOrNull( -// (element) => element.isHeadOfHousehold, -// ) -// ?.individualClientReferenceId, -// ); -// -// if (head == null || beneficiaries.isEmpty) continue; -// -// // Search for project beneficiaries based on client reference ID and project. -// -// if (beneficiaries.isNotEmpty) { -// // Create a container for household members and associated data. -// containers.add( -// HouseholdMemberWrapper( -// household: householdresult, -// headOfHousehold: head, -// members: beneficiaryType == BeneficiaryType.individual -// ? beneficiaryIndividuals -// : individualMembersList, -// projectBeneficiaries: beneficiaries, -// tasks: tasks.isEmpty ? null : tasks, -// sideEffects: sideEffects.isEmpty ? null : sideEffects, -// referrals: referrals.isEmpty ? null : referrals, -// ), -// ); -// } -// -// // Update the state with the results and mark the search as completed. -// } -// super.emit(state.copyWith( -// searchQuery: event.searchText, -// householdMembers: [...containers], -// loading: false, -// offset: event.offset + event.limit, -// limit: event.limit, -// )); -// } -// } diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart index 463f947ab..2c0d32f91 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart @@ -9,7 +9,6 @@ import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:registration_delivery/pages/beneficiary/refused_delivery.dart'; import 'package:registration_delivery/utils/constants.dart'; import '../../router/registration_delivery_router.gm.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart index 4529889f9..f73e756db 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart @@ -29,10 +29,10 @@ class BeneficiaryDetailsPage extends LocalizedStatefulWidget { }); @override - State createState() => _BeneficiaryDetailsPageState(); + State createState() => BeneficiaryDetailsPageState(); } -class _BeneficiaryDetailsPageState +class BeneficiaryDetailsPageState extends LocalizedState { @override void initState() { diff --git a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart index 010bc671d..66817995d 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart @@ -34,10 +34,10 @@ class DeliverInterventionPage extends LocalizedStatefulWidget { @override State createState() => - _DeliverInterventionPageState(); + DeliverInterventionPageState(); } -class _DeliverInterventionPageState +class DeliverInterventionPageState extends LocalizedState { // Constants for form control keys static const _resourceDeliveredKey = 'resourceDelivered'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart b/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart index 5059661ff..70e8e8acd 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart @@ -37,10 +37,10 @@ class DoseAdministeredPage extends LocalizedStatefulWidget { }); @override - State createState() => _DoseAdministeredPageState(); + State createState() => DoseAdministeredPageState(); } -class _DoseAdministeredPageState extends LocalizedState { +class DoseAdministeredPageState extends LocalizedState { static const _doseAdministeredKey = 'doseAdministered'; bool doseAdministered = false; bool formSubmitted = false; diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index db9843a78..285d338d2 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -88,7 +88,7 @@ class _HouseholdOverviewPageState ), onPressed: () async { await context.router - .push(DeliverInterventionRoute()); + .push(BeneficiaryChecklistRoute()); }, ) : DigitElevatedButton( @@ -113,8 +113,8 @@ class _HouseholdOverviewPageState ), ); - await context.router - .push(DeliverInterventionRoute()); + await context.router.push( + BeneficiaryChecklistRoute()); }, child: Center( child: Text( @@ -292,7 +292,7 @@ class _HouseholdOverviewPageState getStatusAttributes(state, deliverInterventionState)[ 'textLabel'], - ), + ), // [TODO: map task status accordingly based on projectBeneficiaries and tasks] iconTextColor: getStatusAttributes(state, deliverInterventionState)['color'], iconColor: getStatusAttributes(state, @@ -356,22 +356,23 @@ class _HouseholdOverviewPageState ?.clientReferenceId; final projectBeneficiary = - // beneficiaryType != - // BeneficiaryType.individual - // ? [ - // state.householdMemberWrapper - // .projectBeneficiaries.first, - // ] - // : - state.householdMemberWrapper - .projectBeneficiaries - ?.where( - (element) => - element - .beneficiaryClientReferenceId == - e.clientReferenceId, - ) - .toList(); + beneficiaryType != + BeneficiaryType.individual + ? [ + state + .householdMemberWrapper + .projectBeneficiaries! + .first, + ] + : state.householdMemberWrapper + .projectBeneficiaries + ?.where( + (element) => + element + .beneficiaryClientReferenceId == + e.clientReferenceId, + ) + .toList(); final taskData = (projectBeneficiary ?? []) .isNotEmpty diff --git a/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart b/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart index d6f9f5b61..2199df0d0 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart @@ -31,10 +31,10 @@ class RecordPastDeliveryDetailsPage extends LocalizedStatefulWidget { @override State createState() => - _RecordPastDeliveryDetailsPageState(); + RecordPastDeliveryDetailsPageState(); } -class _RecordPastDeliveryDetailsPageState +class RecordPastDeliveryDetailsPageState extends LocalizedState { static const _recordDoseAdministeredKey = 'recordDoseAdministered'; @override diff --git a/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart b/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart index 1dd998341..256fb74ef 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart @@ -31,10 +31,10 @@ class ReferBeneficiaryPage extends LocalizedStatefulWidget { required this.projectBeneficiaryClientRefId, }); @override - State createState() => _ReferBeneficiaryPageState(); + State createState() => ReferBeneficiaryPageState(); } -class _ReferBeneficiaryPageState extends LocalizedState { +class ReferBeneficiaryPageState extends LocalizedState { static const _dateOfReferralKey = 'dateOfReferral'; static const _administrativeUnitKey = 'administrativeUnit'; static const _referredByKey = 'referredBy'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart index 775c81a1a..edafcfc9e 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart @@ -24,10 +24,10 @@ class RefusedDeliveryPage extends LocalizedStatefulWidget { }); @override - State createState() => _RefusedDeliveryPageState(); + State createState() => RefusedDeliveryPageState(); } -class _RefusedDeliveryPageState extends LocalizedState { +class RefusedDeliveryPageState extends LocalizedState { static const _dataOfRefusalKey = 'dateOfAdministration'; static const _reasonOfRefusal = 'reasonOfRefusal'; static const _deliveryCommentKey = 'deliveryComment'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart b/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart index 02bacb784..3f479f68c 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart @@ -32,10 +32,10 @@ class SideEffectsPage extends LocalizedStatefulWidget { }); @override - State createState() => _SideEffectsPageState(); + State createState() => SideEffectsPageState(); } -class _SideEffectsPageState extends LocalizedState { +class SideEffectsPageState extends LocalizedState { List symptomsValues = []; List symptomsTypes = []; bool symptomsSelected = true; diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart index 639439d26..b7cd6a8aa 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart @@ -20,10 +20,10 @@ class HouseholdAcknowledgementPage extends LocalizedStatefulWidget { @override State createState() => - _HouseholdAcknowledgementPageState(); + HouseholdAcknowledgementPageState(); } -class _HouseholdAcknowledgementPageState +class HouseholdAcknowledgementPageState extends LocalizedState { @override Widget build(BuildContext context) { diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart index 55061ef97..ca9a04d45 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart @@ -28,10 +28,10 @@ class RecordDeliveryCycle extends LocalizedStatefulWidget { }); @override - State createState() => _RecordDeliveryCycleState(); + State createState() => RecordDeliveryCycleState(); } -class _RecordDeliveryCycleState extends LocalizedState { +class RecordDeliveryCycleState extends LocalizedState { bool isExpanded = false; bool isDivider = false; diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart index 6369cf16f..e1b7e02a0 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart @@ -19,10 +19,10 @@ class SplashAcknowledgementPage extends LocalizedStatefulWidget { @override State createState() => - _SplashAcknowledgementPageState(); + SplashAcknowledgementPageState(); } -class _SplashAcknowledgementPageState +class SplashAcknowledgementPageState extends LocalizedState { @override void initState() { diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart index a79925a75..10b7e82b8 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart @@ -20,10 +20,10 @@ class BeneficiaryAcknowledgementPage extends LocalizedStatefulWidget { @override State createState() => - _BeneficiaryAcknowledgementPageState(); + BeneficiaryAcknowledgementPageState(); } -class _BeneficiaryAcknowledgementPageState +class BeneficiaryAcknowledgementPageState extends LocalizedState { @override Widget build(BuildContext context) { diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart index 49ebb7bfa..504acb5a6 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart @@ -25,10 +25,10 @@ class HouseDetailsPage extends LocalizedStatefulWidget { }); @override - State createState() => _HouseDetailsPageState(); + State createState() => HouseDetailsPageState(); } -class _HouseDetailsPageState extends LocalizedState { +class HouseDetailsPageState extends LocalizedState { static const _noOfRoomsKey = 'noOfRooms'; List? selectedHouseStructureTypes; diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart index 22cb73c9e..bd774ddfc 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart @@ -27,10 +27,10 @@ class HouseHoldDetailsPage extends LocalizedStatefulWidget { }); @override - State createState() => _HouseHoldDetailsPageState(); + State createState() => HouseHoldDetailsPageState(); } -class _HouseHoldDetailsPageState extends LocalizedState { +class HouseHoldDetailsPageState extends LocalizedState { static const _dateOfRegistrationKey = 'dateOfRegistration'; static const _memberCountKey = 'memberCount'; static const _pregnantWomenCountKey = 'pregnantWomenCount'; diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index ebbb27a18..102de8d89 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -27,10 +27,10 @@ class HouseholdLocationPage extends LocalizedStatefulWidget { }); @override - State createState() => _HouseholdLocationPageState(); + State createState() => HouseholdLocationPageState(); } -class _HouseholdLocationPageState +class HouseholdLocationPageState extends LocalizedState { static const _administrationAreaKey = 'administrationArea'; static const _addressLine1Key = 'addressLine1'; diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index 79409ea49..bdb0cda4e 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -37,11 +37,10 @@ class IndividualDetailsPage extends LocalizedStatefulWidget { }); @override - State createState() => _IndividualDetailsPageState(); + State createState() => IndividualDetailsPageState(); } -class _IndividualDetailsPageState - extends LocalizedState { +class IndividualDetailsPageState extends LocalizedState { static const _individualNameKey = 'individualName'; static const _idTypeKey = 'idType'; static const _idNumberKey = 'idNumber'; diff --git a/packages/registration_delivery/lib/pages/reason_for_deletion.dart b/packages/registration_delivery/lib/pages/reason_for_deletion.dart index 7e2e97916..4d4de2ad7 100644 --- a/packages/registration_delivery/lib/pages/reason_for_deletion.dart +++ b/packages/registration_delivery/lib/pages/reason_for_deletion.dart @@ -22,10 +22,10 @@ class ReasonForDeletionPage extends LocalizedStatefulWidget { }); @override - State createState() => _ReasonForDeletionPageState(); + State createState() => ReasonForDeletionPageState(); } -class _ReasonForDeletionPageState +class ReasonForDeletionPageState extends LocalizedState { static const _reasonForDeletionKey = 'reasonForDeletion'; diff --git a/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart b/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart index bf8e76016..45a6b8e05 100644 --- a/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart +++ b/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart @@ -8,9 +8,7 @@ import 'package:registration_delivery/data/repositories/local/individual_global_ import 'package:registration_delivery/utils/extensions/extensions.dart'; import '../blocs/household_details/household_details.dart'; -import '../blocs/search_households/proximity_search.dart'; import '../blocs/search_households/search_bloc_common_wrapper.dart'; -import '../blocs/search_households/search_by_head.dart'; import '../blocs/search_households/search_households.dart'; import '../blocs/search_households/tag_by_search.dart'; import '../data/repositories/local/household_global_search.dart'; diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index f11b95240..7d40a8c37 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -81,64 +81,40 @@ class _SearchBeneficiaryPageState onNotification: (scrollNotification) { if (scrollNotification is ScrollUpdateNotification) { final metrics = scrollNotification.metrics; - blocWrapper.individualGlobalSearchBloc - .add(SearchHouseholdsEvent.paginate(scrollMetrics: metrics)); - // if (metrics.atEdge && - // isProximityEnabled && - // searchController.text == '' && - // metrics.pixels != 0) { - // // [TODO: Handle the null check at Bloc level for Event parameters - // blocWrapper.individualGlobalSearchBloc - // .add(SearchHouseholdsEvent.individualGlobalSearch( - // globalSearchParams: GlobalSearchParameters( - // isProximityEnabled: isProximityEnabled, - // latitude: lat, - // longitude: long, - // maxRadius: RegistrationDeliverySingleton().maxRadius, - // nameSearch: null, - // filter: null, - // offset: blocWrapper.individualGlobalSearchBloc.state.offset, - // limit: blocWrapper.individualGlobalSearchBloc.state.limit, - // beneficiaryType: - // RegistrationDeliverySingleton().beneficiaryType, - // ))); - // } else if (metrics.atEdge && - // searchController.text != '' && - // metrics.pixels != 0) { - // blocWrapper.searchByHeadBloc - // .add(SearchHouseholdsEvent.searchByHouseholdHead( - // searchText: searchController.text, - // projectId: RegistrationDeliverySingleton().projectId!, - // isProximityEnabled: isProximityEnabled, - // offset: blocWrapper.searchByHeadBloc.state.offset, - // limit: blocWrapper.searchByHeadBloc.state.limit, - // )); - // } else if (metrics.atEdge && - // selectedFilters.isNotEmpty && - // metrics.pixels != 0) { - // blocWrapper.individualGlobalSearchBloc.add( - // SearchHouseholdsEvent.searchByStatus( - // projectId: RegistrationDeliverySingleton().projectId!, - // offset: blocWrapper.individualGlobalSearchBloc.state.offset, - // limit: blocWrapper.individualGlobalSearchBloc.state.limit, - // status: selectedFilters, - // ), - // ); - // } else if (metrics.atEdge && - // selectedFilters.isNotEmpty && - // metrics.pixels != 0) { - // blocWrapper.statusSearchBloc.add( - // SearchHouseholdsEvent.searchByStatus( - // projectId: RegistrationDeliverySingleton().projectId!, - // offset: blocWrapper.statusSearchBloc.state.offset, - // limit: blocWrapper.statusSearchBloc.state.limit, - // status: selectedFilters, - // ), - // ); - // } + if (metrics.atEdge && metrics.pixels != 0) { + if (RegistrationDeliverySingleton().beneficiaryType == + BeneficiaryType.individual) { + blocWrapper.individualGlobalSearchBloc + .add(SearchHouseholdsEvent.individualGlobalSearch( + globalSearchParams: GlobalSearchParameters( + isProximityEnabled: isProximityEnabled, + latitude: lat, + longitude: long, + maxRadius: RegistrationDeliverySingleton().maxRadius, + nameSearch: searchController.text, + filter: selectedFilters, + offset: + blocWrapper.individualGlobalSearchBloc.state.offset + + blocWrapper.individualGlobalSearchBloc.state.limit, + limit: blocWrapper.individualGlobalSearchBloc.state.limit, + ))); + } else { + blocWrapper.houseHoldGlobalSearchBloc + .add(SearchHouseholdsEvent.houseHoldGlobalSearch( + globalSearchParams: GlobalSearchParameters( + isProximityEnabled: isProximityEnabled, + latitude: lat, + longitude: long, + maxRadius: RegistrationDeliverySingleton().maxRadius, + nameSearch: searchController.text, + filter: selectedFilters, + offset: blocWrapper.houseHoldGlobalSearchBloc.state.offset + + blocWrapper.houseHoldGlobalSearchBloc.state.limit, + limit: blocWrapper.houseHoldGlobalSearchBloc.state.limit, + ))); + } + } } - // Return true to allow the notification to continue to be dispatched to further ancestors. - return true; }, child: ScrollableContent( @@ -248,12 +224,16 @@ class _SearchBeneficiaryPageState selectedFilters.isNotEmpty ? Align( alignment: Alignment.topLeft, - child: SingleChildScrollView( - scrollDirection: Axis.horizontal, - child: Row( - children: [ - for (var filter in selectedFilters) - Padding( + child: SizedBox( + height: + MediaQuery.of(context).size.height * + 0.05, + child: ListView.builder( + shrinkWrap: true, + scrollDirection: Axis.horizontal, + itemCount: selectedFilters.length, + itemBuilder: (context, index) { + return Padding( padding: const EdgeInsets.all( kPadding / 2), child: Container( @@ -272,9 +252,10 @@ class _SearchBeneficiaryPageState child: Row( children: [ Text( - localizations - .translate( - filter), + localizations.translate( + getStatus( + selectedFilters[ + index])), style: TextStyle( color: const DigitColors() .davyGray)), @@ -288,9 +269,9 @@ class _SearchBeneficiaryPageState GestureDetector( onTap: () { setState(() { - selectedFilters - .remove( - filter); + selectedFilters.remove( + selectedFilters[ + index]); }); blocWrapper .clearEvent(); @@ -309,9 +290,8 @@ class _SearchBeneficiaryPageState ) ], ), - )), - ], - ), + )); + }), ), ) : const Offstage(), @@ -507,7 +487,17 @@ class _SearchBeneficiaryPageState } } + triggerClearEvent() { + blocWrapper.clearEvent(); + setState(() { + isProximityEnabled = false; + searchController.clear(); + selectedFilters = []; + }); + } + void triggerGlobalSearchEvent() { + blocWrapper.clearEvent(); if (RegistrationDeliverySingleton().beneficiaryType == BeneficiaryType.individual) { blocWrapper.individualGlobalSearchBloc @@ -537,4 +527,32 @@ class _SearchBeneficiaryPageState ))); } } + + String getStatus(String selectedFilter) { + final statusMap = { + Status.delivered.toValue(): Status.delivered, + Status.notDelivered.toValue(): Status.notDelivered, + Status.visited.toValue(): Status.visited, + Status.notVisited.toValue(): Status.notVisited, + Status.beneficiaryRefused.toValue(): Status.beneficiaryRefused, + Status.beneficiaryReferred.toValue(): Status.beneficiaryReferred, + Status.administeredSuccess.toValue(): Status.administeredSuccess, + Status.administeredFailed.toValue(): Status.administeredFailed, + Status.inComplete.toValue(): Status.inComplete, + Status.toAdminister.toValue(): Status.toAdminister, + Status.closed.toValue(): Status.closed, + Status.registered.toValue(): Status.registered, + Status.notRegistered.toValue(): Status.notRegistered, + }; + + var mappedStatus = statusMap.entries + .where((element) => element.value.name == selectedFilter) + .first + .key; + if (mappedStatus != null) { + return mappedStatus; + } else { + return selectedFilter; + } + } } diff --git a/packages/registration_delivery/lib/pages/summary_page.dart b/packages/registration_delivery/lib/pages/summary_page.dart index bc1bd30c2..8a8f4a3b8 100644 --- a/packages/registration_delivery/lib/pages/summary_page.dart +++ b/packages/registration_delivery/lib/pages/summary_page.dart @@ -5,7 +5,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:registration_delivery/models/entities/additional_fields_type.dart'; import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; import 'package:registration_delivery/widgets/back_navigation_help_header.dart'; -import 'package:registration_delivery/widgets/details_card.dart'; +import 'package:digit_components/widgets/atoms/details_card.dart'; import 'package:registration_delivery/widgets/showcase/showcase_button.dart'; import '../../../widgets/localized.dart'; @@ -23,10 +23,10 @@ class SummaryPage extends LocalizedStatefulWidget { }); @override - State createState() => _SummaryPageState(); + State createState() => SummaryPageState(); } -class _SummaryPageState extends LocalizedState { +class SummaryPageState extends LocalizedState { final clickedStatus = ValueNotifier(false); String getLocalizedMessage(String code) { diff --git a/packages/registration_delivery/lib/registration_delivery.dart b/packages/registration_delivery/lib/registration_delivery.dart index 98e2184ad..e5ea482e9 100644 --- a/packages/registration_delivery/lib/registration_delivery.dart +++ b/packages/registration_delivery/lib/registration_delivery.dart @@ -11,9 +11,7 @@ export 'blocs/household_details/household_details.dart'; export 'blocs/household_location/household_location.dart'; export 'blocs/household_overview/household_overview.dart'; export 'blocs/referral_management/referral_management.dart'; -export 'blocs/search_households/proximity_search.dart'; export 'blocs/search_households/search_bloc_common_wrapper.dart'; -export 'blocs/search_households/search_by_head.dart'; export 'blocs/search_households/search_households.dart'; export 'blocs/search_households/tag_by_search.dart'; export 'blocs/side_effects/side_effects.dart'; diff --git a/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart index 41e472699..e3b66c660 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart @@ -25,10 +25,10 @@ class ResourceBeneficiaryCard extends LocalizedStatefulWidget { @override State createState() => - _ResourceBeneficiaryCardState(); + ResourceBeneficiaryCardState(); } -class _ResourceBeneficiaryCardState +class ResourceBeneficiaryCardState extends LocalizedState { @override Widget build(BuildContext context) { diff --git a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart index 5ee907aed..3b2d94207 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart @@ -95,13 +95,15 @@ class _ViewBeneficiaryCardState extends LocalizedState { // BeneficiaryType.individual // ? [householdMember.projectBeneficiaries!.first] // : - householdMember.projectBeneficiaries - ?.where( - (element) => - element.beneficiaryClientReferenceId == - e.clientReferenceId, - ) - .toList(); + householdMember.projectBeneficiaries?.where((element) { + if (RegistrationDeliverySingleton().beneficiaryType == + BeneficiaryType.individual) { + return element.beneficiaryClientReferenceId == e.clientReferenceId; + } else { + return element.beneficiaryClientReferenceId == + householdMember.household!.clientReferenceId; + } + }).toList(); final taskData = (projectBeneficiary ?? []).isNotEmpty ? householdMember.tasks @@ -257,11 +259,17 @@ class _ViewBeneficiaryCardState extends LocalizedState { final isBeneficiaryRefused = checkIfBeneficiaryRefused(householdMember.tasks); - final projectBeneficiary = householdMember.projectBeneficiaries - ?.where((p) => - p.beneficiaryClientReferenceId == - householdMember.headOfHousehold?.clientReferenceId) - .firstOrNull; + final projectBeneficiary = householdMember.projectBeneficiaries?.where((p) { + if (RegistrationDeliverySingleton().beneficiaryType == + BeneficiaryType.individual) { + return p.beneficiaryClientReferenceId == + householdMember.headOfHousehold?.clientReferenceId; + } else { + return p.beneficiaryClientReferenceId == + householdMember.household?.clientReferenceId; + } + }).firstOrNull; + final tasks = householdMember.tasks?.where((t) => t.projectBeneficiaryClientReferenceId == projectBeneficiary?.clientReferenceId); @@ -289,7 +297,11 @@ class _ViewBeneficiaryCardState extends LocalizedState { : '${householdMember.members?.length ?? 1} ${householdMember.members?.length == 1 ? localizations.translate(i18.beneficiaryDetails.householdMemberSingular) : localizations.translate(i18.beneficiaryDetails.householdMemberPlural)}', status: getStatus( tasks ?? [], - householdMember.projectBeneficiaries ?? [], + householdMember.projectBeneficiaries! + .where((element) => + element.beneficiaryClientReferenceId == + householdMember.household!.clientReferenceId) + .toList(), isNotEligible, isBeneficiaryRefused), title: [ @@ -398,17 +410,35 @@ class _ViewBeneficiaryCardState extends LocalizedState { if (tasks.isEmpty) { return Status.registered.toValue(); } else { - bool isIndividual = RegistrationDeliverySingleton().beneficiaryType == - BeneficiaryType.individual; - if (isIndividual && !isNotEligible && !isBeneficiaryRefused || - !isIndividual) { - return Status.visited.toValue(); - } else { - return Status.notVisited.toValue(); - } + return getTaskStatus(tasks).toValue(); } } else { return Status.notRegistered.toValue(); } } + + Status getTaskStatus(Iterable tasks) { + final statusMap = { + Status.delivered.toValue(): Status.delivered, + Status.notDelivered.toValue(): Status.notDelivered, + Status.visited.toValue(): Status.visited, + Status.notVisited.toValue(): Status.notVisited, + Status.beneficiaryRefused.toValue(): Status.beneficiaryRefused, + Status.beneficiaryReferred.toValue(): Status.beneficiaryReferred, + Status.administeredSuccess.toValue(): Status.administeredSuccess, + Status.administeredFailed.toValue(): Status.administeredFailed, + Status.inComplete.toValue(): Status.inComplete, + Status.toAdminister.toValue(): Status.toAdminister, + Status.closed.toValue(): Status.closed, + }; + + for (var task in tasks) { + final mappedStatus = statusMap[task.status]; + if (mappedStatus != null) { + return mappedStatus; + } + } + + return Status.registered.toValue(); + } } diff --git a/packages/registration_delivery/lib/widgets/progress_bar/beneficiary_progress.dart b/packages/registration_delivery/lib/widgets/progress_bar/beneficiary_progress.dart index 3c39fa856..5ae9047bd 100644 --- a/packages/registration_delivery/lib/widgets/progress_bar/beneficiary_progress.dart +++ b/packages/registration_delivery/lib/widgets/progress_bar/beneficiary_progress.dart @@ -22,10 +22,10 @@ class BeneficiaryProgressBar extends StatefulWidget { }); @override - State createState() => _BeneficiaryProgressBarState(); + State createState() => BeneficiaryProgressBarState(); } -class _BeneficiaryProgressBarState extends State { +class BeneficiaryProgressBarState extends State { int current = 0; @override diff --git a/packages/registration_delivery/lib/widgets/showcase/showcase_button.dart b/packages/registration_delivery/lib/widgets/showcase/showcase_button.dart index c6d093e26..32f0e5f1b 100644 --- a/packages/registration_delivery/lib/widgets/showcase/showcase_button.dart +++ b/packages/registration_delivery/lib/widgets/showcase/showcase_button.dart @@ -15,10 +15,10 @@ class ShowcaseButton extends LocalizedStatefulWidget { const ShowcaseButton({super.key, this.showcaseFor}); @override - LocalizedState createState() => _ShowcaseButtonState(); + LocalizedState createState() => ShowcaseButtonState(); } -class _ShowcaseButtonState extends LocalizedState { +class ShowcaseButtonState extends LocalizedState { @override Widget build(BuildContext context) { return TextButton( diff --git a/packages/registration_delivery/lib/widgets/showcase/showcase_wrappers.dart b/packages/registration_delivery/lib/widgets/showcase/showcase_wrappers.dart index a2ac9e398..e18064225 100644 --- a/packages/registration_delivery/lib/widgets/showcase/showcase_wrappers.dart +++ b/packages/registration_delivery/lib/widgets/showcase/showcase_wrappers.dart @@ -33,10 +33,10 @@ class ShowcaseItemWrapperWidget extends LocalizedStatefulWidget { @override LocalizedState createState() => - _ShowcaseItemWrapperWidgetState(); + ShowcaseItemWrapperWidgetState(); } -class _ShowcaseItemWrapperWidgetState +class ShowcaseItemWrapperWidgetState extends LocalizedState { @override Widget build(BuildContext context) { diff --git a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart index e2e4f8566..093dce6c9 100644 --- a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart +++ b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart @@ -16,10 +16,10 @@ class StatusFilter extends LocalizedStatefulWidget { }); @override - State createState() => _StatusFilterState(); + State createState() => StatusFilterState(); } -class _StatusFilterState extends LocalizedState { +class StatusFilterState extends LocalizedState { List selectedButtons = []; @override @@ -37,7 +37,6 @@ class _StatusFilterState extends LocalizedState { SelectionBox( options: getFilters() ?? [], allowMultipleSelection: true, - width: 115, initialSelection: [ ...selectedButtons ], // [TODO : fix selected not displaying] diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 99fcaaa55..27c4a6008 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -419,10 +419,11 @@ packages: digit_components: dependency: "direct main" description: - path: "../digit_components" - relative: true - source: path - version: "1.0.0+3" + name: digit_components + sha256: c9fb77852995d45d26e7bec9c945002f33c99d1399cfe30696a925d3ed3ae57d + url: "https://pub.dev" + source: hosted + version: "1.0.0+5" digit_data_model: dependency: "direct main" description: diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index cce3bb27d..37df4f265 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -1,6 +1,6 @@ name: registration_delivery description: This package enables health facility workers to register a household and individual members and deliver the resources. -version: 1.0.2+1 +version: 0.0.0-dev.10 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/registration_delivery repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0+2 + digit_components: ^1.0.0+5 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 From 2e7ad2655c63dccea3dad0bc9ecd5c15a630c720 Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Thu, 18 Jul 2024 12:37:22 +0530 Subject: [PATCH 055/241] Created a new package for marking closed household (#459) * Created a new package for marking closed household * fixed build issues * updated the name to userAction --------- Co-authored-by: rachana-egov --- .../lib/pages/home.dart | 24 +- .../lib/router/app_router.dart | 24 +- .../lib/router/app_router.gr.dart | 1 + .../lib/utils/constants.dart | 2 + .../lib/utils/extensions/context_utility.dart | 1 + .../lib/utils/extensions/extensions.dart | 1 + .../lib/utils/i18_key_constants.dart | 2 + .../lib/utils/localization_delegates.dart | 10 + .../lib/utils/utils.dart | 2 + .../network_manager_provider_wrapper.dart | 11 + .../showcase/config/home_showcase.dart | 8 +- .../pubspec.lock | 21 +- .../pubspec.yaml | 1 + packages/closed_household/.gitignore | 29 + packages/closed_household/.metadata | 10 + packages/closed_household/CHANGELOG.md | 3 + packages/closed_household/LICENSE | 1 + packages/closed_household/README.md | 39 + .../closed_household/analysis_options.yaml | 4 + .../assets/icons/app_icon.png | Bin 0 -> 10790 bytes .../assets/icons/svg/mychecklist.svg | 7 + .../assets/icons/svg/no_result.svg | 101 ++ .../assets/images/powered_by_digit.png | Bin 0 -> 5524 bytes packages/closed_household/build.yaml | 10 + .../lib/blocs/app_localization.dart | 50 + .../lib/blocs/closed_household.dart | 73 ++ .../lib/blocs/closed_household.freezed.dart | 565 +++++++++ ...losed_household_localization_delegate.dart | 32 + .../lib/closed_household.dart | 7 + .../local/base/user_action_base.dart | 17 + .../data/repositories/local/user_action.dart | 118 ++ .../lib/data/repositories/oplog/oplog.dart | 32 + .../lib/models/entities/action.dart | 9 + .../lib/models/entities/action.mapper.dart | 57 + .../lib/models/entities/status.dart | 13 + .../lib/models/entities/status.mapper.dart | 69 + .../lib/models/entities/user_action.dart | 126 ++ .../models/entities/user_action.mapper.dart | 704 +++++++++++ .../closed_household_acknowledgement.dart | 47 + .../lib/pages/closed_household_details.dart | 206 +++ .../lib/pages/closed_household_summary.dart | 227 ++++ .../lib/pages/closed_household_wrapper.dart | 42 + .../lib/router/closed_household_router.dart | 31 + .../router/closed_household_router.gm.dart | 225 ++++ .../closed_household/lib/utils/constants.dart | 7 + .../lib/utils/extensions/context_utility.dart | 28 + .../lib/utils/extensions/extensions.dart | 67 + .../lib/utils/i18_key_constants.dart | 167 +++ .../closed_household/lib/utils/utils.dart | 51 + .../widgets/back_navigation_help_header.dart | 85 ++ .../lib/widgets/localized.dart | 33 + .../config/closed_household_details.dart | 31 + .../showcase/config/showcase_constants.dart | 7 + .../lib/widgets/showcase/showcase_button.dart | 73 ++ .../widgets/showcase/showcase_wrappers.dart | 65 + packages/closed_household/pubspec.yaml | 61 + .../test/closed_household_test.dart | 7 + .../lib/widgets/atoms/details_card.dart | 86 +- .../data/local_store/sql_store/sql_store.dart | 2 + .../local_store/sql_store/sql_store.g.dart | 1119 +++++++++++++++++ .../tables/package_tables/user_action.dart | 40 + packages/digit_data_model/lib/data_model.dart | 1 + packages/registration_delivery/pubspec.lock | 55 + tools/closed_household_package_imports.dart | 58 + 64 files changed, 4949 insertions(+), 56 deletions(-) create mode 100644 packages/closed_household/.gitignore create mode 100644 packages/closed_household/.metadata create mode 100644 packages/closed_household/CHANGELOG.md create mode 100644 packages/closed_household/LICENSE create mode 100644 packages/closed_household/README.md create mode 100644 packages/closed_household/analysis_options.yaml create mode 100644 packages/closed_household/assets/icons/app_icon.png create mode 100644 packages/closed_household/assets/icons/svg/mychecklist.svg create mode 100644 packages/closed_household/assets/icons/svg/no_result.svg create mode 100644 packages/closed_household/assets/images/powered_by_digit.png create mode 100644 packages/closed_household/build.yaml create mode 100644 packages/closed_household/lib/blocs/app_localization.dart create mode 100644 packages/closed_household/lib/blocs/closed_household.dart create mode 100644 packages/closed_household/lib/blocs/closed_household.freezed.dart create mode 100644 packages/closed_household/lib/blocs/closed_household_localization_delegate.dart create mode 100644 packages/closed_household/lib/closed_household.dart create mode 100644 packages/closed_household/lib/data/repositories/local/base/user_action_base.dart create mode 100644 packages/closed_household/lib/data/repositories/local/user_action.dart create mode 100644 packages/closed_household/lib/data/repositories/oplog/oplog.dart create mode 100644 packages/closed_household/lib/models/entities/action.dart create mode 100644 packages/closed_household/lib/models/entities/action.mapper.dart create mode 100644 packages/closed_household/lib/models/entities/status.dart create mode 100644 packages/closed_household/lib/models/entities/status.mapper.dart create mode 100644 packages/closed_household/lib/models/entities/user_action.dart create mode 100644 packages/closed_household/lib/models/entities/user_action.mapper.dart create mode 100644 packages/closed_household/lib/pages/closed_household_acknowledgement.dart create mode 100644 packages/closed_household/lib/pages/closed_household_details.dart create mode 100644 packages/closed_household/lib/pages/closed_household_summary.dart create mode 100644 packages/closed_household/lib/pages/closed_household_wrapper.dart create mode 100644 packages/closed_household/lib/router/closed_household_router.dart create mode 100644 packages/closed_household/lib/router/closed_household_router.gm.dart create mode 100644 packages/closed_household/lib/utils/constants.dart create mode 100644 packages/closed_household/lib/utils/extensions/context_utility.dart create mode 100644 packages/closed_household/lib/utils/extensions/extensions.dart create mode 100644 packages/closed_household/lib/utils/i18_key_constants.dart create mode 100644 packages/closed_household/lib/utils/utils.dart create mode 100644 packages/closed_household/lib/widgets/back_navigation_help_header.dart create mode 100644 packages/closed_household/lib/widgets/localized.dart create mode 100644 packages/closed_household/lib/widgets/showcase/config/closed_household_details.dart create mode 100644 packages/closed_household/lib/widgets/showcase/config/showcase_constants.dart create mode 100644 packages/closed_household/lib/widgets/showcase/showcase_button.dart create mode 100644 packages/closed_household/lib/widgets/showcase/showcase_wrappers.dart create mode 100644 packages/closed_household/pubspec.yaml create mode 100644 packages/closed_household/test/closed_household_test.dart create mode 100644 packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/user_action.dart create mode 100644 tools/closed_household_package_imports.dart diff --git a/apps/health_campaign_field_worker_app/lib/pages/home.dart b/apps/health_campaign_field_worker_app/lib/pages/home.dart index ea9ec49c4..162be093b 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/home.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/home.dart @@ -2,6 +2,10 @@ import 'dart:async'; import 'package:attendance_management/attendance_management.dart'; import 'package:attendance_management/router/attendance_router.gm.dart'; +import 'package:closed_household/pages/closed_household_details.dart'; +import 'package:closed_household/pages/closed_household_wrapper.dart'; +import 'package:closed_household/router/closed_household_router.gm.dart'; +import 'package:closed_household/utils/utils.dart'; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/widgets/atoms/digit_toaster.dart'; @@ -460,6 +464,15 @@ class _HomePageState extends LocalizedState { }, ), ), + i18.home.closeHouseHoldLabel: homeShowcaseData.closeHouseHold.buildWith( + child: HomeItemCard( + icon: Icons.home_filled, + label: i18.home.closeHouseHoldLabel, + onPressed: () { + context.router.push(ClosedHouseholdWrapperRoute()); + }, + ), + ), }; final Map homeItemsShowcaseMap = { @@ -480,6 +493,7 @@ class _HomePageState extends LocalizedState { i18.home.manageAttendanceLabel: homeShowcaseData.manageAttendance.showcaseKey, i18.home.db: homeShowcaseData.db.showcaseKey, + i18.home.closeHouseHoldLabel: homeShowcaseData.closeHouseHold.showcaseKey, }; final homeItemsLabel = [ @@ -494,6 +508,7 @@ class _HomePageState extends LocalizedState { i18.home.beneficiaryReferralLabel, i18.home.manageAttendanceLabel, i18.home.db, + i18.home.closeHouseHoldLabel, ]; final List filteredLabels = homeItemsLabel @@ -502,11 +517,11 @@ class _HomePageState extends LocalizedState { .map((e) => e.displayName) .toList() .contains(element) || - element == i18.home.db) + element == i18.home.db || element == i18.home.closeHouseHoldLabel) // TODO: need to add close household inside mdms .toList(); final showcaseKeys = filteredLabels - .where((f) => f != i18.home.db) + .where((f) => f != i18.home.db && f != i18.home.closeHouseHoldLabel) // TODO: need to add close household inside mdms .map((label) => homeItemsShowcaseMap[label]!) .toList(); @@ -639,6 +654,11 @@ void setPackagesSingleton(BuildContext context) { .toList(), ); + ClosedHouseholdSingleton().setInitialData( + loggedInUserUuid: context.loggedInUserUuid, + projectId: context.projectId, + ); + AttendanceSingleton().setInitialData( projectId: context.projectId, diff --git a/apps/health_campaign_field_worker_app/lib/router/app_router.dart b/apps/health_campaign_field_worker_app/lib/router/app_router.dart index 84eda48d7..3f65e855a 100644 --- a/apps/health_campaign_field_worker_app/lib/router/app_router.dart +++ b/apps/health_campaign_field_worker_app/lib/router/app_router.dart @@ -1,6 +1,8 @@ import 'package:attendance_management/router/attendance_router.dart'; import 'package:attendance_management/router/attendance_router.gm.dart'; import 'package:auto_route/auto_route.dart'; +import 'package:closed_household/router/closed_household_router.dart'; +import 'package:closed_household/router/closed_household_router.gm.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_scanner/router/digit_scanner_router.dart'; import 'package:digit_scanner/router/digit_scanner_router.gm.dart'; @@ -53,6 +55,7 @@ part 'app_router.gr.dart'; ReferralReconciliationRoute, DigitScannerPackageRoute, RegistrationDeliveryRoute, + ClosedHouseholdPackageRoute, ], ) class AppRouter extends _$AppRouter { @@ -107,8 +110,7 @@ class AppRouter extends _$AppRouter { page: HouseHoldDetailsRoute.page, path: 'household-details'), AutoRoute( - page: HouseDetailsRoute.page, - path: 'house-details'), + page: HouseDetailsRoute.page, path: 'house-details'), AutoRoute( page: HouseholdLocationRoute.page, path: 'household-location', @@ -186,6 +188,24 @@ class AppRouter extends _$AppRouter { ), ]), + /// close household + AutoRoute( + page: ClosedHouseholdWrapperRoute.page, + path: 'closed-household-wrapper', + children: [ + AutoRoute( + page: ClosedHouseholdDetailsRoute.page, + path: 'closed-household-details', + initial: true, + ), + AutoRoute( + page: ClosedHouseholdSummaryRoute.page, + path: 'closed-household-summary'), + AutoRoute( + page: ClosedHouseholdAcknowledgementRoute.page, + path: 'closed-household-acknowledgement'), + ]), + AutoRoute( page: ChecklistWrapperRoute.page, path: 'checklist', diff --git a/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart b/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart index f867a8cbf..ff60f5644 100644 --- a/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart +++ b/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart @@ -310,6 +310,7 @@ abstract class _$AppRouter extends RootStackRouter { ...ReferralReconciliationRoute().pagesMap, ...DigitScannerPackageRoute().pagesMap, ...RegistrationDeliveryRoute().pagesMap, + ...ClosedHouseholdPackageRoute().pagesMap, }; } diff --git a/apps/health_campaign_field_worker_app/lib/utils/constants.dart b/apps/health_campaign_field_worker_app/lib/utils/constants.dart index 8ea41b143..8696a6d69 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/constants.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/constants.dart @@ -1,4 +1,5 @@ import 'package:attendance_management/attendance_management.dart'; +import 'package:closed_household/utils/utils.dart'; import 'package:collection/collection.dart'; import 'package:digit_components/utils/app_logger.dart'; import 'package:digit_data_model/data_model.dart'; @@ -258,6 +259,7 @@ class Constants { errorDumpApiPath: envConfig.variables.dumpErrorApiPath, hierarchyType: envConfig.variables.hierarchyType); RegistrationDeliverySingleton().setTenantId(envConfig.variables.tenantId); + ClosedHouseholdSingleton().setTenantId(envConfig.variables.tenantId); AttendanceSingleton().setTenantId(envConfig.variables.tenantId); ReferralReconSingleton().setTenantId(envConfig.variables.tenantId); InventorySingleton().setTenantId(tenantId: envConfig.variables.tenantId); diff --git a/apps/health_campaign_field_worker_app/lib/utils/extensions/context_utility.dart b/apps/health_campaign_field_worker_app/lib/utils/extensions/context_utility.dart index 50f92e1b9..916f2cc61 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/extensions/context_utility.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/extensions/context_utility.dart @@ -101,6 +101,7 @@ extension ContextUtilityExtensions on BuildContext { } // INFO: Set Boundary for packages RegistrationDeliverySingleton().setBoundary(boundary: selectedBoundary); + ClosedHouseholdSingleton().setBoundary(boundary: selectedBoundary); InventorySingleton().setBoundaryName(boundaryName: selectedBoundary.name!); ReferralReconSingleton().setBoundary(boundary: selectedBoundary); return selectedBoundary; diff --git a/apps/health_campaign_field_worker_app/lib/utils/extensions/extensions.dart b/apps/health_campaign_field_worker_app/lib/utils/extensions/extensions.dart index ae6f6bc98..daa11a867 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/extensions/extensions.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/extensions/extensions.dart @@ -1,4 +1,5 @@ // Importing necessary packages and files +import 'package:closed_household/utils/utils.dart'; import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; diff --git a/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart b/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart index aae850231..f3f00e8aa 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart @@ -594,6 +594,8 @@ class Home { String get db => 'HOME_DB_LABEL'; String get beneficiaryReferralLabel => 'HOME_BENEFICIARY_REFERRAL_LABEL'; String get manageAttendanceLabel => 'HOME_MANAGE_ATTENDANCE_LABEL'; + + String get closeHouseHoldLabel => 'HOME_CLOSE_HOUSEHOLD_LABEL'; } class AcknowledgementSuccess { diff --git a/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart b/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart index d6a5936b3..ad15b746f 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart @@ -1,3 +1,6 @@ +import 'package:closed_household/blocs/app_localization.dart' + as closed_household_localization; +import 'package:closed_household/utils/i18_key_constants.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:isar/isar.dart'; import 'package:attendance_management/blocs/app_localization.dart' @@ -64,5 +67,12 @@ getAppLocalizationDelegates({ ), appConfig.languages!, ), + closed_household_localization.ClosedHouseholdLocalization.getDelegate( + getLocalizationString( + isar, + selectedLocale, + ), + appConfig.languages!, + ), ]; } diff --git a/apps/health_campaign_field_worker_app/lib/utils/utils.dart b/apps/health_campaign_field_worker_app/lib/utils/utils.dart index ebcf613f8..2fef1e81c 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/utils.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/utils.dart @@ -414,6 +414,7 @@ int getSyncCount(List oplogs) { case DataModelType.referral: case DataModelType.hFReferral: case DataModelType.attendance: + case DataModelType.userAction: return true; default: return false; @@ -433,6 +434,7 @@ int getSyncCount(List oplogs) { case DataModelType.referral: case DataModelType.hFReferral: case DataModelType.attendance: + case DataModelType.userAction: return true; default: return false; diff --git a/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart b/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart index 6bd4bf8df..cb8bdd3f4 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart +++ b/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart @@ -1,6 +1,9 @@ import 'dart:io'; import 'package:attendance_management/attendance_management.dart'; +import 'package:closed_household/data/repositories/local/user_action.dart'; +import 'package:closed_household/data/repositories/oplog/oplog.dart'; +import 'package:closed_household/models/entities/user_action.dart'; import 'package:inventory_management/inventory_management.dart'; import 'package:registration_delivery/registration_delivery.dart'; import 'package:referral_reconciliation/referral_reconciliation.dart'; @@ -264,6 +267,14 @@ class NetworkManagerProviderWrapper extends StatelessWidget { StockReconciliationOpLogManager(isar), ), ), + RepositoryProvider< + LocalRepository>( + create: (_) => ClosedHouseholdLocalRepository( + sql, + ClosedHouseholdOpLogManager(isar), + ), + ), // INFO Need to add packages here ]; } diff --git a/apps/health_campaign_field_worker_app/lib/widgets/showcase/config/home_showcase.dart b/apps/health_campaign_field_worker_app/lib/widgets/showcase/config/home_showcase.dart index cf5104bc1..ee862af19 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/showcase/config/home_showcase.dart +++ b/apps/health_campaign_field_worker_app/lib/widgets/showcase/config/home_showcase.dart @@ -23,7 +23,8 @@ class _HomePageShowcaseData { supervisorComplaints, supervisorSyncData, deleteAll, - db + db, + closeHouseHold, ]; final distributorProgressBar = ShowcaseItemBuilder( @@ -97,4 +98,9 @@ class _HomePageShowcaseData { final db = ShowcaseItemBuilder( messageLocalizationKey: i18.home.db, ); + + final closeHouseHold = ShowcaseItemBuilder( + messageLocalizationKey: i18.home.closeHouseHoldLabel, + ); + } diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 262b33a3f..5464bb0a4 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -336,6 +336,13 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" + closed_household: + dependency: "direct main" + description: + path: "../../packages/closed_household" + relative: true + source: path + version: "0.0.0-dev.1" code_builder: dependency: transitive description: @@ -489,10 +496,9 @@ packages: digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "0e1ec8e4d2776fcc4a8118ac85043b8876466ec7399c14880f3d585ad3586ef6" - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_data_model" + relative: true + source: path version: "1.0.2" digit_firebase_services: dependency: "direct main" @@ -511,10 +517,9 @@ packages: digit_showcase: dependency: "direct main" description: - name: digit_showcase - sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_showcase" + relative: true + source: path version: "1.0.0" dio: dependency: "direct main" diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 9806f2247..49f39928f 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -71,6 +71,7 @@ dependencies: referral_reconciliation: ^1.0.2 digit_data_model: ^1.0.2 registration_delivery: ^1.0.2 + closed_household: ^0.0.1 disable_battery_optimization: ^1.1.1 dev_dependencies: diff --git a/packages/closed_household/.gitignore b/packages/closed_household/.gitignore new file mode 100644 index 000000000..ac5aa9893 --- /dev/null +++ b/packages/closed_household/.gitignore @@ -0,0 +1,29 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. +/pubspec.lock +**/doc/api/ +.dart_tool/ +build/ diff --git a/packages/closed_household/.metadata b/packages/closed_household/.metadata new file mode 100644 index 000000000..b2c661a57 --- /dev/null +++ b/packages/closed_household/.metadata @@ -0,0 +1,10 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "67457e669f79e9f8d13d7a68fe09775fefbb79f4" + channel: "stable" + +project_type: package diff --git a/packages/closed_household/CHANGELOG.md b/packages/closed_household/CHANGELOG.md new file mode 100644 index 000000000..73c941694 --- /dev/null +++ b/packages/closed_household/CHANGELOG.md @@ -0,0 +1,3 @@ +## 0.0.0-dev.1 + +* TODO: Describe initial release. diff --git a/packages/closed_household/LICENSE b/packages/closed_household/LICENSE new file mode 100644 index 000000000..ba75c69f7 --- /dev/null +++ b/packages/closed_household/LICENSE @@ -0,0 +1 @@ +TODO: Add your license here. diff --git a/packages/closed_household/README.md b/packages/closed_household/README.md new file mode 100644 index 000000000..02fe8ecab --- /dev/null +++ b/packages/closed_household/README.md @@ -0,0 +1,39 @@ + + +TODO: Put a short description of the package here that helps potential users +know whether this package might be useful for them. + +## Features + +TODO: List what your package can do. Maybe include images, gifs, or videos. + +## Getting started + +TODO: List prerequisites and provide or point to information on how to +start using the package. + +## Usage + +TODO: Include short and useful examples for package users. Add longer examples +to `/example` folder. + +```dart +const like = 'sample'; +``` + +## Additional information + +TODO: Tell users more about the package: where to find more information, how to +contribute to the package, how to file issues, what response they can expect +from the package authors, and more. diff --git a/packages/closed_household/analysis_options.yaml b/packages/closed_household/analysis_options.yaml new file mode 100644 index 000000000..a5744c1cf --- /dev/null +++ b/packages/closed_household/analysis_options.yaml @@ -0,0 +1,4 @@ +include: package:flutter_lints/flutter.yaml + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/packages/closed_household/assets/icons/app_icon.png b/packages/closed_household/assets/icons/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e9e2930ca86e716425b2fca130d8eaee3802293d GIT binary patch literal 10790 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 literal 0 HcmV?d00001 diff --git a/packages/closed_household/assets/icons/svg/mychecklist.svg b/packages/closed_household/assets/icons/svg/mychecklist.svg new file mode 100644 index 000000000..826f196b1 --- /dev/null +++ b/packages/closed_household/assets/icons/svg/mychecklist.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/packages/closed_household/assets/icons/svg/no_result.svg b/packages/closed_household/assets/icons/svg/no_result.svg new file mode 100644 index 000000000..dd93d89db --- /dev/null +++ b/packages/closed_household/assets/icons/svg/no_result.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/closed_household/assets/images/powered_by_digit.png b/packages/closed_household/assets/images/powered_by_digit.png new file mode 100644 index 0000000000000000000000000000000000000000..f83334fd6168e2aadc21bac07d217b53600ee296 GIT binary patch literal 5524 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 localizedStrings; + final List languages; + + ClosedHouseholdLocalization(this.locale, this.localizedStrings, this.languages); + + // Method to get the current localization instance from context + static ClosedHouseholdLocalization of(BuildContext context) { + return Localizations.of(context, ClosedHouseholdLocalization)!; + } + + static final List _localizedStrings = []; + + // Method to get the delegate for localization + static LocalizationsDelegate getDelegate( + Future localizedStrings, List languages) => + ClosedHouseholdLocalizationDelegate(localizedStrings, languages); + + // Method to load localized strings + Future load() async { + _localizedStrings.clear(); + // Iterate over localized strings and filter based on locale + for (var element in await localizedStrings) { + if (element.locale == '${locale.languageCode}_${locale.countryCode}') { + _localizedStrings.add(element); + } + } + + return true; + } + + // Method to translate a given localized value + String translate(String localizedValues) { + if (_localizedStrings.isEmpty) { + return localizedValues; + } else { + final index = _localizedStrings.indexWhere( + (medium) => medium.code == localizedValues, + ); + + return index != -1 ? _localizedStrings[index].message : localizedValues; + } + } +} diff --git a/packages/closed_household/lib/blocs/closed_household.dart b/packages/closed_household/lib/blocs/closed_household.dart new file mode 100644 index 000000000..d9de62b61 --- /dev/null +++ b/packages/closed_household/lib/blocs/closed_household.dart @@ -0,0 +1,73 @@ +import 'dart:async'; + +import 'package:closed_household/models/entities/user_action.dart'; +import 'package:digit_data_model/data/data_repository.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; + +import '../pages/closed_household_details.dart'; + +part 'closed_household.freezed.dart'; + +typedef ClosedHouseholdEmitter = Emitter; + +class ClosedHouseholdBloc extends Bloc { + final DataRepository + closedHouseholdRepository; + + ClosedHouseholdBloc( + super.initialState, { + required this.closedHouseholdRepository, + }) { + on(_handleSubmit); + on(_handleSummary); + } + + FutureOr _handleSubmit( + ClosedHouseholdSubmitEvent event, + ClosedHouseholdEmitter emit, + ) async { + emit(state.copyWith(loading: true)); + try { + if (event.isEditing) { + await closedHouseholdRepository.update(event.userAction); + } else { + await closedHouseholdRepository.create(event.userAction); + } + } catch (error) { + rethrow; + } finally { + emit(state.copyWith(loading: false)); + } + } + + FutureOr _handleSummary( + ClosedHouseholdSummaryEvent event, + ClosedHouseholdEmitter emit, + ) async { + emit(state.copyWith(summary: event.summary)); + } + +} + +@freezed +class ClosedHouseholdEvent with _$ClosedHouseholdEvent { + const factory ClosedHouseholdEvent.handleSubmit( + UserActionModel userAction, + bool isEditing, + ) = ClosedHouseholdSubmitEvent; + + const factory ClosedHouseholdEvent.handleSummary( + UserActionModel summary, + ) = ClosedHouseholdSummaryEvent; +} + +@freezed +class ClosedHouseholdState with _$ClosedHouseholdState { + const factory ClosedHouseholdState({ + @Default(false) bool loading, + @Default(false) bool isEditing, + List? userActions, + UserActionModel? summary, + }) = _ClosedHouseholdState; +} diff --git a/packages/closed_household/lib/blocs/closed_household.freezed.dart b/packages/closed_household/lib/blocs/closed_household.freezed.dart new file mode 100644 index 000000000..70b9f05c5 --- /dev/null +++ b/packages/closed_household/lib/blocs/closed_household.freezed.dart @@ -0,0 +1,565 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'closed_household.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + +/// @nodoc +mixin _$ClosedHouseholdEvent { + @optionalTypeArgs + TResult when({ + required TResult Function(UserActionModel userAction, bool isEditing) + handleSubmit, + required TResult Function(UserActionModel summary) handleSummary, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function(UserActionModel userAction, bool isEditing)? handleSubmit, + TResult? Function(UserActionModel summary)? handleSummary, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult maybeWhen({ + TResult Function(UserActionModel userAction, bool isEditing)? handleSubmit, + TResult Function(UserActionModel summary)? handleSummary, + required TResult orElse(), + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult map({ + required TResult Function(ClosedHouseholdSubmitEvent value) handleSubmit, + required TResult Function(ClosedHouseholdSummaryEvent value) handleSummary, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(ClosedHouseholdSubmitEvent value)? handleSubmit, + TResult? Function(ClosedHouseholdSummaryEvent value)? handleSummary, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult maybeMap({ + TResult Function(ClosedHouseholdSubmitEvent value)? handleSubmit, + TResult Function(ClosedHouseholdSummaryEvent value)? handleSummary, + required TResult orElse(), + }) => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $ClosedHouseholdEventCopyWith<$Res> { + factory $ClosedHouseholdEventCopyWith(ClosedHouseholdEvent value, + $Res Function(ClosedHouseholdEvent) then) = + _$ClosedHouseholdEventCopyWithImpl<$Res, ClosedHouseholdEvent>; +} + +/// @nodoc +class _$ClosedHouseholdEventCopyWithImpl<$Res, + $Val extends ClosedHouseholdEvent> + implements $ClosedHouseholdEventCopyWith<$Res> { + _$ClosedHouseholdEventCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; +} + +/// @nodoc +abstract class _$$ClosedHouseholdSubmitEventImplCopyWith<$Res> { + factory _$$ClosedHouseholdSubmitEventImplCopyWith( + _$ClosedHouseholdSubmitEventImpl value, + $Res Function(_$ClosedHouseholdSubmitEventImpl) then) = + __$$ClosedHouseholdSubmitEventImplCopyWithImpl<$Res>; + @useResult + $Res call({UserActionModel userAction, bool isEditing}); +} + +/// @nodoc +class __$$ClosedHouseholdSubmitEventImplCopyWithImpl<$Res> + extends _$ClosedHouseholdEventCopyWithImpl<$Res, + _$ClosedHouseholdSubmitEventImpl> + implements _$$ClosedHouseholdSubmitEventImplCopyWith<$Res> { + __$$ClosedHouseholdSubmitEventImplCopyWithImpl( + _$ClosedHouseholdSubmitEventImpl _value, + $Res Function(_$ClosedHouseholdSubmitEventImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? userAction = null, + Object? isEditing = null, + }) { + return _then(_$ClosedHouseholdSubmitEventImpl( + null == userAction + ? _value.userAction + : userAction // ignore: cast_nullable_to_non_nullable + as UserActionModel, + null == isEditing + ? _value.isEditing + : isEditing // ignore: cast_nullable_to_non_nullable + as bool, + )); + } +} + +/// @nodoc + +class _$ClosedHouseholdSubmitEventImpl implements ClosedHouseholdSubmitEvent { + const _$ClosedHouseholdSubmitEventImpl(this.userAction, this.isEditing); + + @override + final UserActionModel userAction; + @override + final bool isEditing; + + @override + String toString() { + return 'ClosedHouseholdEvent.handleSubmit(userAction: $userAction, isEditing: $isEditing)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$ClosedHouseholdSubmitEventImpl && + (identical(other.userAction, userAction) || + other.userAction == userAction) && + (identical(other.isEditing, isEditing) || + other.isEditing == isEditing)); + } + + @override + int get hashCode => Object.hash(runtimeType, userAction, isEditing); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$ClosedHouseholdSubmitEventImplCopyWith<_$ClosedHouseholdSubmitEventImpl> + get copyWith => __$$ClosedHouseholdSubmitEventImplCopyWithImpl< + _$ClosedHouseholdSubmitEventImpl>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function(UserActionModel userAction, bool isEditing) + handleSubmit, + required TResult Function(UserActionModel summary) handleSummary, + }) { + return handleSubmit(userAction, isEditing); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function(UserActionModel userAction, bool isEditing)? handleSubmit, + TResult? Function(UserActionModel summary)? handleSummary, + }) { + return handleSubmit?.call(userAction, isEditing); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function(UserActionModel userAction, bool isEditing)? handleSubmit, + TResult Function(UserActionModel summary)? handleSummary, + required TResult orElse(), + }) { + if (handleSubmit != null) { + return handleSubmit(userAction, isEditing); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(ClosedHouseholdSubmitEvent value) handleSubmit, + required TResult Function(ClosedHouseholdSummaryEvent value) handleSummary, + }) { + return handleSubmit(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(ClosedHouseholdSubmitEvent value)? handleSubmit, + TResult? Function(ClosedHouseholdSummaryEvent value)? handleSummary, + }) { + return handleSubmit?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(ClosedHouseholdSubmitEvent value)? handleSubmit, + TResult Function(ClosedHouseholdSummaryEvent value)? handleSummary, + required TResult orElse(), + }) { + if (handleSubmit != null) { + return handleSubmit(this); + } + return orElse(); + } +} + +abstract class ClosedHouseholdSubmitEvent implements ClosedHouseholdEvent { + const factory ClosedHouseholdSubmitEvent( + final UserActionModel userAction, final bool isEditing) = + _$ClosedHouseholdSubmitEventImpl; + + UserActionModel get userAction; + bool get isEditing; + @JsonKey(ignore: true) + _$$ClosedHouseholdSubmitEventImplCopyWith<_$ClosedHouseholdSubmitEventImpl> + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class _$$ClosedHouseholdSummaryEventImplCopyWith<$Res> { + factory _$$ClosedHouseholdSummaryEventImplCopyWith( + _$ClosedHouseholdSummaryEventImpl value, + $Res Function(_$ClosedHouseholdSummaryEventImpl) then) = + __$$ClosedHouseholdSummaryEventImplCopyWithImpl<$Res>; + @useResult + $Res call({UserActionModel summary}); +} + +/// @nodoc +class __$$ClosedHouseholdSummaryEventImplCopyWithImpl<$Res> + extends _$ClosedHouseholdEventCopyWithImpl<$Res, + _$ClosedHouseholdSummaryEventImpl> + implements _$$ClosedHouseholdSummaryEventImplCopyWith<$Res> { + __$$ClosedHouseholdSummaryEventImplCopyWithImpl( + _$ClosedHouseholdSummaryEventImpl _value, + $Res Function(_$ClosedHouseholdSummaryEventImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? summary = null, + }) { + return _then(_$ClosedHouseholdSummaryEventImpl( + null == summary + ? _value.summary + : summary // ignore: cast_nullable_to_non_nullable + as UserActionModel, + )); + } +} + +/// @nodoc + +class _$ClosedHouseholdSummaryEventImpl implements ClosedHouseholdSummaryEvent { + const _$ClosedHouseholdSummaryEventImpl(this.summary); + + @override + final UserActionModel summary; + + @override + String toString() { + return 'ClosedHouseholdEvent.handleSummary(summary: $summary)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$ClosedHouseholdSummaryEventImpl && + (identical(other.summary, summary) || other.summary == summary)); + } + + @override + int get hashCode => Object.hash(runtimeType, summary); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$ClosedHouseholdSummaryEventImplCopyWith<_$ClosedHouseholdSummaryEventImpl> + get copyWith => __$$ClosedHouseholdSummaryEventImplCopyWithImpl< + _$ClosedHouseholdSummaryEventImpl>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function(UserActionModel userAction, bool isEditing) + handleSubmit, + required TResult Function(UserActionModel summary) handleSummary, + }) { + return handleSummary(summary); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function(UserActionModel userAction, bool isEditing)? handleSubmit, + TResult? Function(UserActionModel summary)? handleSummary, + }) { + return handleSummary?.call(summary); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function(UserActionModel userAction, bool isEditing)? handleSubmit, + TResult Function(UserActionModel summary)? handleSummary, + required TResult orElse(), + }) { + if (handleSummary != null) { + return handleSummary(summary); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(ClosedHouseholdSubmitEvent value) handleSubmit, + required TResult Function(ClosedHouseholdSummaryEvent value) handleSummary, + }) { + return handleSummary(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(ClosedHouseholdSubmitEvent value)? handleSubmit, + TResult? Function(ClosedHouseholdSummaryEvent value)? handleSummary, + }) { + return handleSummary?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(ClosedHouseholdSubmitEvent value)? handleSubmit, + TResult Function(ClosedHouseholdSummaryEvent value)? handleSummary, + required TResult orElse(), + }) { + if (handleSummary != null) { + return handleSummary(this); + } + return orElse(); + } +} + +abstract class ClosedHouseholdSummaryEvent implements ClosedHouseholdEvent { + const factory ClosedHouseholdSummaryEvent(final UserActionModel summary) = + _$ClosedHouseholdSummaryEventImpl; + + UserActionModel get summary; + @JsonKey(ignore: true) + _$$ClosedHouseholdSummaryEventImplCopyWith<_$ClosedHouseholdSummaryEventImpl> + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +mixin _$ClosedHouseholdState { + bool get loading => throw _privateConstructorUsedError; + bool get isEditing => throw _privateConstructorUsedError; + List? get userActions => throw _privateConstructorUsedError; + UserActionModel? get summary => throw _privateConstructorUsedError; + + @JsonKey(ignore: true) + $ClosedHouseholdStateCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $ClosedHouseholdStateCopyWith<$Res> { + factory $ClosedHouseholdStateCopyWith(ClosedHouseholdState value, + $Res Function(ClosedHouseholdState) then) = + _$ClosedHouseholdStateCopyWithImpl<$Res, ClosedHouseholdState>; + @useResult + $Res call( + {bool loading, + bool isEditing, + List? userActions, + UserActionModel? summary}); +} + +/// @nodoc +class _$ClosedHouseholdStateCopyWithImpl<$Res, + $Val extends ClosedHouseholdState> + implements $ClosedHouseholdStateCopyWith<$Res> { + _$ClosedHouseholdStateCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? loading = null, + Object? isEditing = null, + Object? userActions = freezed, + Object? summary = freezed, + }) { + return _then(_value.copyWith( + loading: null == loading + ? _value.loading + : loading // ignore: cast_nullable_to_non_nullable + as bool, + isEditing: null == isEditing + ? _value.isEditing + : isEditing // ignore: cast_nullable_to_non_nullable + as bool, + userActions: freezed == userActions + ? _value.userActions + : userActions // ignore: cast_nullable_to_non_nullable + as List?, + summary: freezed == summary + ? _value.summary + : summary // ignore: cast_nullable_to_non_nullable + as UserActionModel?, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$ClosedHouseholdStateImplCopyWith<$Res> + implements $ClosedHouseholdStateCopyWith<$Res> { + factory _$$ClosedHouseholdStateImplCopyWith(_$ClosedHouseholdStateImpl value, + $Res Function(_$ClosedHouseholdStateImpl) then) = + __$$ClosedHouseholdStateImplCopyWithImpl<$Res>; + @override + @useResult + $Res call( + {bool loading, + bool isEditing, + List? userActions, + UserActionModel? summary}); +} + +/// @nodoc +class __$$ClosedHouseholdStateImplCopyWithImpl<$Res> + extends _$ClosedHouseholdStateCopyWithImpl<$Res, _$ClosedHouseholdStateImpl> + implements _$$ClosedHouseholdStateImplCopyWith<$Res> { + __$$ClosedHouseholdStateImplCopyWithImpl(_$ClosedHouseholdStateImpl _value, + $Res Function(_$ClosedHouseholdStateImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? loading = null, + Object? isEditing = null, + Object? userActions = freezed, + Object? summary = freezed, + }) { + return _then(_$ClosedHouseholdStateImpl( + loading: null == loading + ? _value.loading + : loading // ignore: cast_nullable_to_non_nullable + as bool, + isEditing: null == isEditing + ? _value.isEditing + : isEditing // ignore: cast_nullable_to_non_nullable + as bool, + userActions: freezed == userActions + ? _value._userActions + : userActions // ignore: cast_nullable_to_non_nullable + as List?, + summary: freezed == summary + ? _value.summary + : summary // ignore: cast_nullable_to_non_nullable + as UserActionModel?, + )); + } +} + +/// @nodoc + +class _$ClosedHouseholdStateImpl implements _ClosedHouseholdState { + const _$ClosedHouseholdStateImpl( + {this.loading = false, + this.isEditing = false, + final List? userActions, + this.summary}) + : _userActions = userActions; + + @override + @JsonKey() + final bool loading; + @override + @JsonKey() + final bool isEditing; + final List? _userActions; + @override + List? get userActions { + final value = _userActions; + if (value == null) return null; + if (_userActions is EqualUnmodifiableListView) return _userActions; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); + } + + @override + final UserActionModel? summary; + + @override + String toString() { + return 'ClosedHouseholdState(loading: $loading, isEditing: $isEditing, userActions: $userActions, summary: $summary)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$ClosedHouseholdStateImpl && + (identical(other.loading, loading) || other.loading == loading) && + (identical(other.isEditing, isEditing) || + other.isEditing == isEditing) && + const DeepCollectionEquality() + .equals(other._userActions, _userActions) && + (identical(other.summary, summary) || other.summary == summary)); + } + + @override + int get hashCode => Object.hash(runtimeType, loading, isEditing, + const DeepCollectionEquality().hash(_userActions), summary); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$ClosedHouseholdStateImplCopyWith<_$ClosedHouseholdStateImpl> + get copyWith => + __$$ClosedHouseholdStateImplCopyWithImpl<_$ClosedHouseholdStateImpl>( + this, _$identity); +} + +abstract class _ClosedHouseholdState implements ClosedHouseholdState { + const factory _ClosedHouseholdState( + {final bool loading, + final bool isEditing, + final List? userActions, + final UserActionModel? summary}) = _$ClosedHouseholdStateImpl; + + @override + bool get loading; + @override + bool get isEditing; + @override + List? get userActions; + @override + UserActionModel? get summary; + @override + @JsonKey(ignore: true) + _$$ClosedHouseholdStateImplCopyWith<_$ClosedHouseholdStateImpl> + get copyWith => throw _privateConstructorUsedError; +} diff --git a/packages/closed_household/lib/blocs/closed_household_localization_delegate.dart b/packages/closed_household/lib/blocs/closed_household_localization_delegate.dart new file mode 100644 index 000000000..ae3165f1c --- /dev/null +++ b/packages/closed_household/lib/blocs/closed_household_localization_delegate.dart @@ -0,0 +1,32 @@ +import 'package:flutter/material.dart'; +import 'app_localization.dart'; + +class ClosedHouseholdLocalizationDelegate + extends LocalizationsDelegate { + final Future localizedStrings; + final List languages; + + const ClosedHouseholdLocalizationDelegate(this.localizedStrings, this.languages); + + @override + bool isSupported(Locale locale) { + return languages.map((e) { + final results = e.value.split('_'); + if (results.isNotEmpty) return results.first; + }).contains(locale.languageCode); + } + + @override + Future load(Locale locale) async { + ClosedHouseholdLocalization localization = + ClosedHouseholdLocalization(locale, localizedStrings, languages); + await localization.load(); + + return localization; + } + + @override + bool shouldReload(covariant LocalizationsDelegate old) { + return true; + } +} diff --git a/packages/closed_household/lib/closed_household.dart b/packages/closed_household/lib/closed_household.dart new file mode 100644 index 000000000..85ea3603b --- /dev/null +++ b/packages/closed_household/lib/closed_household.dart @@ -0,0 +1,7 @@ +library closed_household; + +export 'blocs/app_localization.dart'; +export 'utils/utils.dart' show ClosedHouseholdSingleton; +export 'pages/closed_household_details.dart'; +export 'pages/closed_household_summary.dart'; + diff --git a/packages/closed_household/lib/data/repositories/local/base/user_action_base.dart b/packages/closed_household/lib/data/repositories/local/base/user_action_base.dart new file mode 100644 index 000000000..d2e547f71 --- /dev/null +++ b/packages/closed_household/lib/data/repositories/local/base/user_action_base.dart @@ -0,0 +1,17 @@ +import 'package:closed_household/models/entities/user_action.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:drift/drift.dart'; + + +abstract class UserActionLocalBaseRepository + extends LocalRepository { + + const UserActionLocalBaseRepository( + super.sql, super.opLogManager,); + + @override + DataModelType get type => DataModelType.task; + + @override + TableInfo get table => sql.task; +} diff --git a/packages/closed_household/lib/data/repositories/local/user_action.dart b/packages/closed_household/lib/data/repositories/local/user_action.dart new file mode 100644 index 000000000..2de95900f --- /dev/null +++ b/packages/closed_household/lib/data/repositories/local/user_action.dart @@ -0,0 +1,118 @@ +import 'dart:async'; + +import 'package:collection/collection.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:drift/drift.dart'; +import '../../../models/entities/user_action.dart'; + +class ClosedHouseholdLocalRepository extends LocalRepository { + ClosedHouseholdLocalRepository( + super.sql, + super.opLogManager, + ); + + void listenToChanges({ + required UserActionSearchModel query, + required void Function(List data) listener, + }) async { + return retryLocalCallOperation(() async { + final select = sql.select(sql.userAction) + ..where((t) => buildOr([ + if (query.projectId != null) + t.projectId.equals(query.projectId!), + ])); + + select.watch().listen((results) { + final data = results + .map((userAction) { + return UserActionModel( + id: userAction.id, + clientReferenceId: userAction.clientReferenceId, + rowVersion: userAction.rowVersion, + tenantId: userAction.tenantId, + isDeleted: userAction.isDeleted, + projectId: userAction.projectId, + status: userAction.status, + action: userAction.action, + ); + }) + .whereNotNull() + .where((element) => element.isDeleted != true) + .toList(); + + listener(data); + }); + }); + } + + @override + FutureOr> search( + UserActionSearchModel query, [ + String? userId, + ]) async { + return retryLocalCallOperation>(() async { + //TODO: implement search + return []; + }); + } + + @override + FutureOr bulkCreate( + List entities, + ) async { + final userActionCompanions = entities.map((e) => e.companion).toList(); + + await sql.batch((batch) async { + batch.insertAll( + sql.userAction, + userActionCompanions, + mode: InsertMode.insertOrReplace, + ); + }); + } + + + @override + FutureOr update( + UserActionModel entity, { + bool createOpLog = true, + }) async { + final userActionCompanion = entity.companion; + + await sql.batch((batch) { + batch.update( + sql.userAction, + userActionCompanion, + where: (table) => table.clientReferenceId.equals( + entity.clientReferenceId, + ), + ); + }); + + await super.update(entity, createOpLog: createOpLog); + } + + @override + FutureOr create( + UserActionModel entity, { + bool createOpLog = true, + DataOperation dataOperation = DataOperation.create, + }) async { + retryLocalCallOperation(() async { + final closedHouseholdCompanion = entity.companion; + + await sql.batch((batch) async { + batch.insert( + sql.userAction, + closedHouseholdCompanion, + mode: InsertMode.insertOrReplace, + ); + }); + + await super.create(entity, createOpLog: createOpLog); + }); + } + + @override + DataModelType get type => DataModelType.userAction; +} diff --git a/packages/closed_household/lib/data/repositories/oplog/oplog.dart b/packages/closed_household/lib/data/repositories/oplog/oplog.dart new file mode 100644 index 000000000..570bc1ba0 --- /dev/null +++ b/packages/closed_household/lib/data/repositories/oplog/oplog.dart @@ -0,0 +1,32 @@ +import 'package:digit_data_model/data_model.dart'; + +import '../../../models/entities/user_action.dart'; + +class ClosedHouseholdOpLogManager extends OpLogManager { + ClosedHouseholdOpLogManager(super.isar); + + @override + UserActionModel applyServerGeneratedIdToEntity( + UserActionModel entity, + String serverGeneratedId, + int rowVersion, + ) => + entity.copyWith( + id: serverGeneratedId, + rowVersion: rowVersion, + ); + + @override + String getClientReferenceId(UserActionModel entity) => + entity.clientReferenceId; + + @override + String? getServerGeneratedId(UserActionModel entity) => entity.id; + + @override + int? getRowVersion(UserActionModel entity) => entity.rowVersion; + + @override + bool? getNonRecoverableError(UserActionModel entity) => + entity.nonRecoverableError; +} diff --git a/packages/closed_household/lib/models/entities/action.dart b/packages/closed_household/lib/models/entities/action.dart new file mode 100644 index 000000000..c4e114385 --- /dev/null +++ b/packages/closed_household/lib/models/entities/action.dart @@ -0,0 +1,9 @@ +import 'package:dart_mappable/dart_mappable.dart'; + +part 'action.mapper.dart'; +@MappableEnum(caseStyle: CaseStyle.upperCase) +enum Actions { + @MappableValue("CLOSED_HOUSEHOLD") closeHousehold, + @MappableValue("LOCATION_CAPTURE") locationCapture, + @MappableValue("OTHER") other, +} \ No newline at end of file diff --git a/packages/closed_household/lib/models/entities/action.mapper.dart b/packages/closed_household/lib/models/entities/action.mapper.dart new file mode 100644 index 000000000..50dd31e10 --- /dev/null +++ b/packages/closed_household/lib/models/entities/action.mapper.dart @@ -0,0 +1,57 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter + +part of 'action.dart'; + +class ActionsMapper extends EnumMapper { + ActionsMapper._(); + + static ActionsMapper? _instance; + static ActionsMapper ensureInitialized() { + if (_instance == null) { + MapperContainer.globals.use(_instance = ActionsMapper._()); + } + return _instance!; + } + + static Actions fromValue(dynamic value) { + ensureInitialized(); + return MapperContainer.globals.fromValue(value); + } + + @override + Actions decode(dynamic value) { + switch (value) { + case "CLOSED_HOUSEHOLD": + return Actions.closeHousehold; + case "LOCATION_CAPTURE": + return Actions.locationCapture; + case "OTHER": + return Actions.other; + default: + throw MapperException.unknownEnumValue(value); + } + } + + @override + dynamic encode(Actions self) { + switch (self) { + case Actions.closeHousehold: + return "CLOSED_HOUSEHOLD"; + case Actions.locationCapture: + return "LOCATION_CAPTURE"; + case Actions.other: + return "OTHER"; + } + } +} + +extension ActionsMapperExtension on Actions { + dynamic toValue() { + ActionsMapper.ensureInitialized(); + return MapperContainer.globals.toValue(this); + } +} diff --git a/packages/closed_household/lib/models/entities/status.dart b/packages/closed_household/lib/models/entities/status.dart new file mode 100644 index 000000000..707761f26 --- /dev/null +++ b/packages/closed_household/lib/models/entities/status.dart @@ -0,0 +1,13 @@ +// Generated using mason. Do not modify by hand +import 'package:dart_mappable/dart_mappable.dart'; + +part 'status.mapper.dart'; +@MappableEnum(caseStyle: CaseStyle.upperCase) +enum Status { + @MappableValue("CLOSED_HOUSEHOLD") closeHousehold, + @MappableValue("LOCATION_CAPTURE") locationCapture, + @MappableValue("REFUSED") refused, + @MappableValue("SPRAYED") sprayed, + @MappableValue("INELIGIBLE") ineligible, + @MappableValue("RESOLVED") resolved, +} \ No newline at end of file diff --git a/packages/closed_household/lib/models/entities/status.mapper.dart b/packages/closed_household/lib/models/entities/status.mapper.dart new file mode 100644 index 000000000..75df6ba0e --- /dev/null +++ b/packages/closed_household/lib/models/entities/status.mapper.dart @@ -0,0 +1,69 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter + +part of 'status.dart'; + +class StatusMapper extends EnumMapper { + StatusMapper._(); + + static StatusMapper? _instance; + static StatusMapper ensureInitialized() { + if (_instance == null) { + MapperContainer.globals.use(_instance = StatusMapper._()); + } + return _instance!; + } + + static Status fromValue(dynamic value) { + ensureInitialized(); + return MapperContainer.globals.fromValue(value); + } + + @override + Status decode(dynamic value) { + switch (value) { + case "CLOSED_HOUSEHOLD": + return Status.closeHousehold; + case "LOCATION_CAPTURE": + return Status.locationCapture; + case "REFUSED": + return Status.refused; + case "SPRAYED": + return Status.sprayed; + case "INELIGIBLE": + return Status.ineligible; + case "RESOLVED": + return Status.resolved; + default: + throw MapperException.unknownEnumValue(value); + } + } + + @override + dynamic encode(Status self) { + switch (self) { + case Status.closeHousehold: + return "CLOSED_HOUSEHOLD"; + case Status.locationCapture: + return "LOCATION_CAPTURE"; + case Status.refused: + return "REFUSED"; + case Status.sprayed: + return "SPRAYED"; + case Status.ineligible: + return "INELIGIBLE"; + case Status.resolved: + return "RESOLVED"; + } + } +} + +extension StatusMapperExtension on Status { + dynamic toValue() { + StatusMapper.ensureInitialized(); + return MapperContainer.globals.toValue(this); + } +} diff --git a/packages/closed_household/lib/models/entities/user_action.dart b/packages/closed_household/lib/models/entities/user_action.dart new file mode 100644 index 000000000..1b05bab61 --- /dev/null +++ b/packages/closed_household/lib/models/entities/user_action.dart @@ -0,0 +1,126 @@ +// Generated using mason. Do not modify by hand +import 'package:dart_mappable/dart_mappable.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:drift/drift.dart'; + +part 'user_action.mapper.dart'; + +@MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) +class UserActionSearchModel extends EntitySearchModel with UserActionSearchModelMappable { + final List? id; + final List? clientReferenceId; + final String? projectId; + final String? tenantId; + final String? createdBy; + final String? status; + final int? offset; + final int? limit; + + UserActionSearchModel({ + this.id, + this.projectId, + this.createdBy, + this.status, + this.offset, + this.limit, + this.clientReferenceId, + this.tenantId, + super.boundaryCode, + super.isDeleted, + }); + + @MappableConstructor() + UserActionSearchModel.ignoreDeleted({ + this.id, + this.projectId, + this.createdBy, + this.status, + this.offset, + this.limit, + this.clientReferenceId, + this.tenantId, + super.boundaryCode, + }); +} + +@MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) +class UserActionModel extends EntityModel with UserActionModelMappable { + static const schemaName = 'UserAction'; + + final String? id; + final String? projectId; + final String? status; + final bool? nonRecoverableError; + final String clientReferenceId; + final String? tenantId; + final String? boundary; + final int? rowVersion; + final String? resourceTag; + final String? beneficiaryTag; + final String? action; + final double? latitude; + final double? longitude; + final double? locationAccuracy; + final UserActionAdditionalFields? additionalFields; + + UserActionModel({ + this.additionalFields, + this.id, + this.projectId, + this.status, + this.nonRecoverableError = false, + required this.clientReferenceId, + this.tenantId, + this.boundary, + this.rowVersion, + this.beneficiaryTag, + this.resourceTag, + this.action, + this.longitude, + this.latitude, + this.locationAccuracy, + super.auditDetails, + super.clientAuditDetails, + super.isDeleted = false, + }) : super(); + + + UserActionCompanion get companion { + return UserActionCompanion( + auditCreatedBy: Value(auditDetails?.createdBy), + auditCreatedTime: Value(auditDetails?.createdTime), + auditModifiedBy: Value(auditDetails?.lastModifiedBy), + clientCreatedTime: Value(clientAuditDetails?.createdTime), + clientModifiedTime: Value(clientAuditDetails?.lastModifiedTime), + clientCreatedBy: Value(clientAuditDetails?.createdBy), + clientModifiedBy: Value(clientAuditDetails?.lastModifiedBy), + auditModifiedTime: Value(auditDetails?.lastModifiedTime), + additionalFields: Value(additionalFields?.toJson()), + isDeleted: Value(isDeleted), + id: Value(id), + projectId: Value(projectId), + status: Value(status), + nonRecoverableError: Value(nonRecoverableError), + clientReferenceId: Value(clientReferenceId), + tenantId: Value(tenantId), + boundaryCode: Value(boundary), + rowVersion: Value(rowVersion), + action: Value(action), + beneficiaryTags: Value(beneficiaryTag), + resourceTags: Value(resourceTag), + latitude: Value(latitude), + longitude: Value(longitude), + locationAccuracy: Value(locationAccuracy), + ); + } +} + +@MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) +class UserActionAdditionalFields extends AdditionalFields + with UserActionAdditionalFieldsMappable { + UserActionAdditionalFields({ + super.schema = 'UserAction', + required super.version, + super.fields, + }); +} diff --git a/packages/closed_household/lib/models/entities/user_action.mapper.dart b/packages/closed_household/lib/models/entities/user_action.mapper.dart new file mode 100644 index 000000000..15ec2cb7d --- /dev/null +++ b/packages/closed_household/lib/models/entities/user_action.mapper.dart @@ -0,0 +1,704 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter + +part of 'user_action.dart'; + +class UserActionSearchModelMapper + extends SubClassMapperBase { + UserActionSearchModelMapper._(); + + static UserActionSearchModelMapper? _instance; + static UserActionSearchModelMapper ensureInitialized() { + if (_instance == null) { + MapperContainer.globals.use(_instance = UserActionSearchModelMapper._()); + } + return _instance!; + } + + @override + final String id = 'UserActionSearchModel'; + + static List? _$id(UserActionSearchModel v) => v.id; + static const Field> _f$id = + Field('id', _$id, opt: true); + static String? _$projectId(UserActionSearchModel v) => v.projectId; + static const Field _f$projectId = + Field('projectId', _$projectId, opt: true); + static String? _$createdBy(UserActionSearchModel v) => v.createdBy; + static const Field _f$createdBy = + Field('createdBy', _$createdBy, opt: true); + static String? _$status(UserActionSearchModel v) => v.status; + static const Field _f$status = + Field('status', _$status, opt: true); + static int? _$offset(UserActionSearchModel v) => v.offset; + static const Field _f$offset = + Field('offset', _$offset, opt: true); + static int? _$limit(UserActionSearchModel v) => v.limit; + static const Field _f$limit = + Field('limit', _$limit, opt: true); + static List? _$clientReferenceId(UserActionSearchModel v) => + v.clientReferenceId; + static const Field> _f$clientReferenceId = + Field('clientReferenceId', _$clientReferenceId, opt: true); + static String? _$tenantId(UserActionSearchModel v) => v.tenantId; + static const Field _f$tenantId = + Field('tenantId', _$tenantId, opt: true); + static String? _$boundaryCode(UserActionSearchModel v) => v.boundaryCode; + static const Field _f$boundaryCode = + Field('boundaryCode', _$boundaryCode, opt: true); + static AuditDetails? _$auditDetails(UserActionSearchModel v) => + v.auditDetails; + static const Field _f$auditDetails = + Field('auditDetails', _$auditDetails, mode: FieldMode.member); + static AdditionalFields? _$additionalFields(UserActionSearchModel v) => + v.additionalFields; + static const Field + _f$additionalFields = + Field('additionalFields', _$additionalFields, mode: FieldMode.member); + + @override + final MappableFields fields = const { + #id: _f$id, + #projectId: _f$projectId, + #createdBy: _f$createdBy, + #status: _f$status, + #offset: _f$offset, + #limit: _f$limit, + #clientReferenceId: _f$clientReferenceId, + #tenantId: _f$tenantId, + #boundaryCode: _f$boundaryCode, + #auditDetails: _f$auditDetails, + #additionalFields: _f$additionalFields, + }; + @override + final bool ignoreNull = true; + + @override + final String discriminatorKey = 'type'; + @override + final dynamic discriminatorValue = MappableClass.useAsDefault; + @override + late final ClassMapperBase superMapper = + EntitySearchModelMapper.ensureInitialized(); + + static UserActionSearchModel _instantiate(DecodingData data) { + return UserActionSearchModel.ignoreDeleted( + id: data.dec(_f$id), + projectId: data.dec(_f$projectId), + createdBy: data.dec(_f$createdBy), + status: data.dec(_f$status), + offset: data.dec(_f$offset), + limit: data.dec(_f$limit), + clientReferenceId: data.dec(_f$clientReferenceId), + tenantId: data.dec(_f$tenantId), + boundaryCode: data.dec(_f$boundaryCode)); + } + + @override + final Function instantiate = _instantiate; + + static UserActionSearchModel fromMap(Map map) { + return ensureInitialized().decodeMap(map); + } + + static UserActionSearchModel fromJson(String json) { + return ensureInitialized().decodeJson(json); + } +} + +mixin UserActionSearchModelMappable { + String toJson() { + return UserActionSearchModelMapper.ensureInitialized() + .encodeJson(this as UserActionSearchModel); + } + + Map toMap() { + return UserActionSearchModelMapper.ensureInitialized() + .encodeMap(this as UserActionSearchModel); + } + + UserActionSearchModelCopyWith + get copyWith => _UserActionSearchModelCopyWithImpl( + this as UserActionSearchModel, $identity, $identity); + @override + String toString() { + return UserActionSearchModelMapper.ensureInitialized() + .stringifyValue(this as UserActionSearchModel); + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (runtimeType == other.runtimeType && + UserActionSearchModelMapper.ensureInitialized() + .isValueEqual(this as UserActionSearchModel, other)); + } + + @override + int get hashCode { + return UserActionSearchModelMapper.ensureInitialized() + .hashValue(this as UserActionSearchModel); + } +} + +extension UserActionSearchModelValueCopy<$R, $Out> + on ObjectCopyWith<$R, UserActionSearchModel, $Out> { + UserActionSearchModelCopyWith<$R, UserActionSearchModel, $Out> + get $asUserActionSearchModel => + $base.as((v, t, t2) => _UserActionSearchModelCopyWithImpl(v, t, t2)); +} + +abstract class UserActionSearchModelCopyWith< + $R, + $In extends UserActionSearchModel, + $Out> implements EntitySearchModelCopyWith<$R, $In, $Out> { + ListCopyWith<$R, String, ObjectCopyWith<$R, String, String>>? get id; + ListCopyWith<$R, String, ObjectCopyWith<$R, String, String>>? + get clientReferenceId; + @override + $R call( + {List? id, + String? projectId, + String? createdBy, + String? status, + int? offset, + int? limit, + List? clientReferenceId, + String? tenantId, + String? boundaryCode}); + UserActionSearchModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>( + Then<$Out2, $R2> t); +} + +class _UserActionSearchModelCopyWithImpl<$R, $Out> + extends ClassCopyWithBase<$R, UserActionSearchModel, $Out> + implements UserActionSearchModelCopyWith<$R, UserActionSearchModel, $Out> { + _UserActionSearchModelCopyWithImpl(super.value, super.then, super.then2); + + @override + late final ClassMapperBase $mapper = + UserActionSearchModelMapper.ensureInitialized(); + @override + ListCopyWith<$R, String, ObjectCopyWith<$R, String, String>>? get id => + $value.id != null + ? ListCopyWith($value.id!, (v, t) => ObjectCopyWith(v, $identity, t), + (v) => call(id: v)) + : null; + @override + ListCopyWith<$R, String, ObjectCopyWith<$R, String, String>>? + get clientReferenceId => $value.clientReferenceId != null + ? ListCopyWith( + $value.clientReferenceId!, + (v, t) => ObjectCopyWith(v, $identity, t), + (v) => call(clientReferenceId: v)) + : null; + @override + $R call( + {Object? id = $none, + Object? projectId = $none, + Object? createdBy = $none, + Object? status = $none, + Object? offset = $none, + Object? limit = $none, + Object? clientReferenceId = $none, + Object? tenantId = $none, + Object? boundaryCode = $none}) => + $apply(FieldCopyWithData({ + if (id != $none) #id: id, + if (projectId != $none) #projectId: projectId, + if (createdBy != $none) #createdBy: createdBy, + if (status != $none) #status: status, + if (offset != $none) #offset: offset, + if (limit != $none) #limit: limit, + if (clientReferenceId != $none) #clientReferenceId: clientReferenceId, + if (tenantId != $none) #tenantId: tenantId, + if (boundaryCode != $none) #boundaryCode: boundaryCode + })); + @override + UserActionSearchModel $make(CopyWithData data) => + UserActionSearchModel.ignoreDeleted( + id: data.get(#id, or: $value.id), + projectId: data.get(#projectId, or: $value.projectId), + createdBy: data.get(#createdBy, or: $value.createdBy), + status: data.get(#status, or: $value.status), + offset: data.get(#offset, or: $value.offset), + limit: data.get(#limit, or: $value.limit), + clientReferenceId: + data.get(#clientReferenceId, or: $value.clientReferenceId), + tenantId: data.get(#tenantId, or: $value.tenantId), + boundaryCode: data.get(#boundaryCode, or: $value.boundaryCode)); + + @override + UserActionSearchModelCopyWith<$R2, UserActionSearchModel, $Out2> + $chain<$R2, $Out2>(Then<$Out2, $R2> t) => + _UserActionSearchModelCopyWithImpl($value, $cast, t); +} + +class UserActionModelMapper extends SubClassMapperBase { + UserActionModelMapper._(); + + static UserActionModelMapper? _instance; + static UserActionModelMapper ensureInitialized() { + if (_instance == null) { + MapperContainer.globals.use(_instance = UserActionModelMapper._()); + } + return _instance!; + } + + @override + final String id = 'UserActionModel'; + + static UserActionAdditionalFields? _$additionalFields(UserActionModel v) => + v.additionalFields; + static const Field + _f$additionalFields = + Field('additionalFields', _$additionalFields, opt: true); + static String? _$id(UserActionModel v) => v.id; + static const Field _f$id = + Field('id', _$id, opt: true); + static String? _$projectId(UserActionModel v) => v.projectId; + static const Field _f$projectId = + Field('projectId', _$projectId, opt: true); + static String? _$status(UserActionModel v) => v.status; + static const Field _f$status = + Field('status', _$status, opt: true); + static bool? _$nonRecoverableError(UserActionModel v) => + v.nonRecoverableError; + static const Field _f$nonRecoverableError = Field( + 'nonRecoverableError', _$nonRecoverableError, + opt: true, def: false); + static String _$clientReferenceId(UserActionModel v) => v.clientReferenceId; + static const Field _f$clientReferenceId = + Field('clientReferenceId', _$clientReferenceId); + static String? _$tenantId(UserActionModel v) => v.tenantId; + static const Field _f$tenantId = + Field('tenantId', _$tenantId, opt: true); + static String? _$boundary(UserActionModel v) => v.boundary; + static const Field _f$boundary = + Field('boundary', _$boundary, opt: true); + static int? _$rowVersion(UserActionModel v) => v.rowVersion; + static const Field _f$rowVersion = + Field('rowVersion', _$rowVersion, opt: true); + static String? _$beneficiaryTag(UserActionModel v) => v.beneficiaryTag; + static const Field _f$beneficiaryTag = + Field('beneficiaryTag', _$beneficiaryTag, opt: true); + static String? _$resourceTag(UserActionModel v) => v.resourceTag; + static const Field _f$resourceTag = + Field('resourceTag', _$resourceTag, opt: true); + static String? _$action(UserActionModel v) => v.action; + static const Field _f$action = + Field('action', _$action, opt: true); + static double? _$longitude(UserActionModel v) => v.longitude; + static const Field _f$longitude = + Field('longitude', _$longitude, opt: true); + static double? _$latitude(UserActionModel v) => v.latitude; + static const Field _f$latitude = + Field('latitude', _$latitude, opt: true); + static double? _$locationAccuracy(UserActionModel v) => v.locationAccuracy; + static const Field _f$locationAccuracy = + Field('locationAccuracy', _$locationAccuracy, opt: true); + static AuditDetails? _$auditDetails(UserActionModel v) => v.auditDetails; + static const Field _f$auditDetails = + Field('auditDetails', _$auditDetails, opt: true); + static ClientAuditDetails? _$clientAuditDetails(UserActionModel v) => + v.clientAuditDetails; + static const Field + _f$clientAuditDetails = + Field('clientAuditDetails', _$clientAuditDetails, opt: true); + static bool? _$isDeleted(UserActionModel v) => v.isDeleted; + static const Field _f$isDeleted = + Field('isDeleted', _$isDeleted, opt: true, def: false); + + @override + final MappableFields fields = const { + #additionalFields: _f$additionalFields, + #id: _f$id, + #projectId: _f$projectId, + #status: _f$status, + #nonRecoverableError: _f$nonRecoverableError, + #clientReferenceId: _f$clientReferenceId, + #tenantId: _f$tenantId, + #boundary: _f$boundary, + #rowVersion: _f$rowVersion, + #beneficiaryTag: _f$beneficiaryTag, + #resourceTag: _f$resourceTag, + #action: _f$action, + #longitude: _f$longitude, + #latitude: _f$latitude, + #locationAccuracy: _f$locationAccuracy, + #auditDetails: _f$auditDetails, + #clientAuditDetails: _f$clientAuditDetails, + #isDeleted: _f$isDeleted, + }; + @override + final bool ignoreNull = true; + + @override + final String discriminatorKey = 'type'; + @override + final dynamic discriminatorValue = MappableClass.useAsDefault; + @override + late final ClassMapperBase superMapper = + EntityModelMapper.ensureInitialized(); + + static UserActionModel _instantiate(DecodingData data) { + return UserActionModel( + additionalFields: data.dec(_f$additionalFields), + id: data.dec(_f$id), + projectId: data.dec(_f$projectId), + status: data.dec(_f$status), + nonRecoverableError: data.dec(_f$nonRecoverableError), + clientReferenceId: data.dec(_f$clientReferenceId), + tenantId: data.dec(_f$tenantId), + boundary: data.dec(_f$boundary), + rowVersion: data.dec(_f$rowVersion), + beneficiaryTag: data.dec(_f$beneficiaryTag), + resourceTag: data.dec(_f$resourceTag), + action: data.dec(_f$action), + longitude: data.dec(_f$longitude), + latitude: data.dec(_f$latitude), + locationAccuracy: data.dec(_f$locationAccuracy), + auditDetails: data.dec(_f$auditDetails), + clientAuditDetails: data.dec(_f$clientAuditDetails), + isDeleted: data.dec(_f$isDeleted)); + } + + @override + final Function instantiate = _instantiate; + + static UserActionModel fromMap(Map map) { + return ensureInitialized().decodeMap(map); + } + + static UserActionModel fromJson(String json) { + return ensureInitialized().decodeJson(json); + } +} + +mixin UserActionModelMappable { + String toJson() { + return UserActionModelMapper.ensureInitialized() + .encodeJson(this as UserActionModel); + } + + Map toMap() { + return UserActionModelMapper.ensureInitialized() + .encodeMap(this as UserActionModel); + } + + UserActionModelCopyWith + get copyWith => _UserActionModelCopyWithImpl( + this as UserActionModel, $identity, $identity); + @override + String toString() { + return UserActionModelMapper.ensureInitialized() + .stringifyValue(this as UserActionModel); + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (runtimeType == other.runtimeType && + UserActionModelMapper.ensureInitialized() + .isValueEqual(this as UserActionModel, other)); + } + + @override + int get hashCode { + return UserActionModelMapper.ensureInitialized() + .hashValue(this as UserActionModel); + } +} + +extension UserActionModelValueCopy<$R, $Out> + on ObjectCopyWith<$R, UserActionModel, $Out> { + UserActionModelCopyWith<$R, UserActionModel, $Out> get $asUserActionModel => + $base.as((v, t, t2) => _UserActionModelCopyWithImpl(v, t, t2)); +} + +abstract class UserActionModelCopyWith<$R, $In extends UserActionModel, $Out> + implements EntityModelCopyWith<$R, $In, $Out> { + UserActionAdditionalFieldsCopyWith<$R, UserActionAdditionalFields, + UserActionAdditionalFields>? get additionalFields; + @override + AuditDetailsCopyWith<$R, AuditDetails, AuditDetails>? get auditDetails; + @override + ClientAuditDetailsCopyWith<$R, ClientAuditDetails, ClientAuditDetails>? + get clientAuditDetails; + @override + $R call( + {UserActionAdditionalFields? additionalFields, + String? id, + String? projectId, + String? status, + bool? nonRecoverableError, + String? clientReferenceId, + String? tenantId, + String? boundary, + int? rowVersion, + String? beneficiaryTag, + String? resourceTag, + String? action, + double? longitude, + double? latitude, + double? locationAccuracy, + AuditDetails? auditDetails, + ClientAuditDetails? clientAuditDetails, + bool? isDeleted}); + UserActionModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>( + Then<$Out2, $R2> t); +} + +class _UserActionModelCopyWithImpl<$R, $Out> + extends ClassCopyWithBase<$R, UserActionModel, $Out> + implements UserActionModelCopyWith<$R, UserActionModel, $Out> { + _UserActionModelCopyWithImpl(super.value, super.then, super.then2); + + @override + late final ClassMapperBase $mapper = + UserActionModelMapper.ensureInitialized(); + @override + UserActionAdditionalFieldsCopyWith<$R, UserActionAdditionalFields, + UserActionAdditionalFields>? + get additionalFields => $value.additionalFields?.copyWith + .$chain((v) => call(additionalFields: v)); + @override + AuditDetailsCopyWith<$R, AuditDetails, AuditDetails>? get auditDetails => + $value.auditDetails?.copyWith.$chain((v) => call(auditDetails: v)); + @override + ClientAuditDetailsCopyWith<$R, ClientAuditDetails, ClientAuditDetails>? + get clientAuditDetails => $value.clientAuditDetails?.copyWith + .$chain((v) => call(clientAuditDetails: v)); + @override + $R call( + {Object? additionalFields = $none, + Object? id = $none, + Object? projectId = $none, + Object? status = $none, + Object? nonRecoverableError = $none, + String? clientReferenceId, + Object? tenantId = $none, + Object? boundary = $none, + Object? rowVersion = $none, + Object? beneficiaryTag = $none, + Object? resourceTag = $none, + Object? action = $none, + Object? longitude = $none, + Object? latitude = $none, + Object? locationAccuracy = $none, + Object? auditDetails = $none, + Object? clientAuditDetails = $none, + Object? isDeleted = $none}) => + $apply(FieldCopyWithData({ + if (additionalFields != $none) #additionalFields: additionalFields, + if (id != $none) #id: id, + if (projectId != $none) #projectId: projectId, + if (status != $none) #status: status, + if (nonRecoverableError != $none) + #nonRecoverableError: nonRecoverableError, + if (clientReferenceId != null) #clientReferenceId: clientReferenceId, + if (tenantId != $none) #tenantId: tenantId, + if (boundary != $none) #boundary: boundary, + if (rowVersion != $none) #rowVersion: rowVersion, + if (beneficiaryTag != $none) #beneficiaryTag: beneficiaryTag, + if (resourceTag != $none) #resourceTag: resourceTag, + if (action != $none) #action: action, + if (longitude != $none) #longitude: longitude, + if (latitude != $none) #latitude: latitude, + if (locationAccuracy != $none) #locationAccuracy: locationAccuracy, + if (auditDetails != $none) #auditDetails: auditDetails, + if (clientAuditDetails != $none) + #clientAuditDetails: clientAuditDetails, + if (isDeleted != $none) #isDeleted: isDeleted + })); + @override + UserActionModel $make(CopyWithData data) => UserActionModel( + additionalFields: + data.get(#additionalFields, or: $value.additionalFields), + id: data.get(#id, or: $value.id), + projectId: data.get(#projectId, or: $value.projectId), + status: data.get(#status, or: $value.status), + nonRecoverableError: + data.get(#nonRecoverableError, or: $value.nonRecoverableError), + clientReferenceId: + data.get(#clientReferenceId, or: $value.clientReferenceId), + tenantId: data.get(#tenantId, or: $value.tenantId), + boundary: data.get(#boundary, or: $value.boundary), + rowVersion: data.get(#rowVersion, or: $value.rowVersion), + beneficiaryTag: data.get(#beneficiaryTag, or: $value.beneficiaryTag), + resourceTag: data.get(#resourceTag, or: $value.resourceTag), + action: data.get(#action, or: $value.action), + longitude: data.get(#longitude, or: $value.longitude), + latitude: data.get(#latitude, or: $value.latitude), + locationAccuracy: + data.get(#locationAccuracy, or: $value.locationAccuracy), + auditDetails: data.get(#auditDetails, or: $value.auditDetails), + clientAuditDetails: + data.get(#clientAuditDetails, or: $value.clientAuditDetails), + isDeleted: data.get(#isDeleted, or: $value.isDeleted)); + + @override + UserActionModelCopyWith<$R2, UserActionModel, $Out2> $chain<$R2, $Out2>( + Then<$Out2, $R2> t) => + _UserActionModelCopyWithImpl($value, $cast, t); +} + +class UserActionAdditionalFieldsMapper + extends SubClassMapperBase { + UserActionAdditionalFieldsMapper._(); + + static UserActionAdditionalFieldsMapper? _instance; + static UserActionAdditionalFieldsMapper ensureInitialized() { + if (_instance == null) { + MapperContainer.globals + .use(_instance = UserActionAdditionalFieldsMapper._()); + } + return _instance!; + } + + @override + final String id = 'UserActionAdditionalFields'; + + static String _$schema(UserActionAdditionalFields v) => v.schema; + static const Field _f$schema = + Field('schema', _$schema, opt: true, def: 'UserAction'); + static int _$version(UserActionAdditionalFields v) => v.version; + static const Field _f$version = + Field('version', _$version); + static List _$fields(UserActionAdditionalFields v) => + v.fields; + static const Field> + _f$fields = Field('fields', _$fields, opt: true, def: const []); + + @override + final MappableFields fields = const { + #schema: _f$schema, + #version: _f$version, + #fields: _f$fields, + }; + @override + final bool ignoreNull = true; + + @override + final String discriminatorKey = 'type'; + @override + final dynamic discriminatorValue = MappableClass.useAsDefault; + @override + late final ClassMapperBase superMapper = + AdditionalFieldsMapper.ensureInitialized(); + + static UserActionAdditionalFields _instantiate(DecodingData data) { + return UserActionAdditionalFields( + schema: data.dec(_f$schema), + version: data.dec(_f$version), + fields: data.dec(_f$fields)); + } + + @override + final Function instantiate = _instantiate; + + static UserActionAdditionalFields fromMap(Map map) { + return ensureInitialized().decodeMap(map); + } + + static UserActionAdditionalFields fromJson(String json) { + return ensureInitialized().decodeJson(json); + } +} + +mixin UserActionAdditionalFieldsMappable { + String toJson() { + return UserActionAdditionalFieldsMapper.ensureInitialized() + .encodeJson( + this as UserActionAdditionalFields); + } + + Map toMap() { + return UserActionAdditionalFieldsMapper.ensureInitialized() + .encodeMap( + this as UserActionAdditionalFields); + } + + UserActionAdditionalFieldsCopyWith + get copyWith => _UserActionAdditionalFieldsCopyWithImpl( + this as UserActionAdditionalFields, $identity, $identity); + @override + String toString() { + return UserActionAdditionalFieldsMapper.ensureInitialized() + .stringifyValue(this as UserActionAdditionalFields); + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (runtimeType == other.runtimeType && + UserActionAdditionalFieldsMapper.ensureInitialized() + .isValueEqual(this as UserActionAdditionalFields, other)); + } + + @override + int get hashCode { + return UserActionAdditionalFieldsMapper.ensureInitialized() + .hashValue(this as UserActionAdditionalFields); + } +} + +extension UserActionAdditionalFieldsValueCopy<$R, $Out> + on ObjectCopyWith<$R, UserActionAdditionalFields, $Out> { + UserActionAdditionalFieldsCopyWith<$R, UserActionAdditionalFields, $Out> + get $asUserActionAdditionalFields => $base + .as((v, t, t2) => _UserActionAdditionalFieldsCopyWithImpl(v, t, t2)); +} + +abstract class UserActionAdditionalFieldsCopyWith< + $R, + $In extends UserActionAdditionalFields, + $Out> implements AdditionalFieldsCopyWith<$R, $In, $Out> { + @override + ListCopyWith<$R, AdditionalField, + AdditionalFieldCopyWith<$R, AdditionalField, AdditionalField>> get fields; + @override + $R call({String? schema, int? version, List? fields}); + UserActionAdditionalFieldsCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>( + Then<$Out2, $R2> t); +} + +class _UserActionAdditionalFieldsCopyWithImpl<$R, $Out> + extends ClassCopyWithBase<$R, UserActionAdditionalFields, $Out> + implements + UserActionAdditionalFieldsCopyWith<$R, UserActionAdditionalFields, + $Out> { + _UserActionAdditionalFieldsCopyWithImpl(super.value, super.then, super.then2); + + @override + late final ClassMapperBase $mapper = + UserActionAdditionalFieldsMapper.ensureInitialized(); + @override + ListCopyWith<$R, AdditionalField, + AdditionalFieldCopyWith<$R, AdditionalField, AdditionalField>> + get fields => ListCopyWith($value.fields, (v, t) => v.copyWith.$chain(t), + (v) => call(fields: v)); + @override + $R call({String? schema, int? version, List? fields}) => + $apply(FieldCopyWithData({ + if (schema != null) #schema: schema, + if (version != null) #version: version, + if (fields != null) #fields: fields + })); + @override + UserActionAdditionalFields $make(CopyWithData data) => + UserActionAdditionalFields( + schema: data.get(#schema, or: $value.schema), + version: data.get(#version, or: $value.version), + fields: data.get(#fields, or: $value.fields)); + + @override + UserActionAdditionalFieldsCopyWith<$R2, UserActionAdditionalFields, $Out2> + $chain<$R2, $Out2>(Then<$Out2, $R2> t) => + _UserActionAdditionalFieldsCopyWithImpl($value, $cast, t); +} diff --git a/packages/closed_household/lib/pages/closed_household_acknowledgement.dart b/packages/closed_household/lib/pages/closed_household_acknowledgement.dart new file mode 100644 index 000000000..8cdc00795 --- /dev/null +++ b/packages/closed_household/lib/pages/closed_household_acknowledgement.dart @@ -0,0 +1,47 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:digit_components/digit_components.dart'; +import 'package:flutter/material.dart'; + +import '../../../utils/i18_key_constants.dart' as i18; +import '../../../widgets/localized.dart'; + +@RoutePage() +class ClosedHouseholdAcknowledgementPage extends LocalizedStatefulWidget { + + const ClosedHouseholdAcknowledgementPage({ + super.key, + super.appLocalizations, + }); + + @override + State createState() => + _ClosedHouseholdAcknowledgementPageState(); +} + +class _ClosedHouseholdAcknowledgementPageState + extends LocalizedState { + @override + Widget build(BuildContext context) { + return PopScope( + canPop: false, + child: Scaffold( + body: DigitAcknowledgement.success( + action: () { + final parent = context.router.parent() as StackRouter; + // Pop twice to navigate back to the previous screen + parent.popUntilRoot(); + }, + enableViewHousehold: false, + actionLabel: localizations + .translate(i18.acknowledgementSuccess.actionLabelText), + description: localizations.translate( + i18.acknowledgementSuccess.acknowledgementDescriptionText, + ), + label: localizations.translate( + i18.acknowledgementSuccess.acknowledgementLabelText, + ), + ), + ), + ); + } +} diff --git a/packages/closed_household/lib/pages/closed_household_details.dart b/packages/closed_household/lib/pages/closed_household_details.dart new file mode 100644 index 000000000..3751ae5df --- /dev/null +++ b/packages/closed_household/lib/pages/closed_household_details.dart @@ -0,0 +1,206 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:closed_household/blocs/closed_household.dart'; +import 'package:closed_household/closed_household.dart'; +import 'package:digit_components/digit_components.dart'; +import 'package:digit_components/widgets/atoms/text_block.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import '../../utils/i18_key_constants.dart' as i18; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:reactive_forms/reactive_forms.dart'; + + +import '../models/entities/user_action.dart'; +import '../router/closed_household_router.gm.dart'; +import '../widgets/back_navigation_help_header.dart'; +import '../widgets/localized.dart'; + +@RoutePage() +class ClosedHouseholdDetailsPage extends LocalizedStatefulWidget { + const ClosedHouseholdDetailsPage({ + super.key, + super.appLocalizations, + }); + + @override + State createState() => _ClosedHouseholdDetailsPageState(); +} + +class _ClosedHouseholdDetailsPageState + extends LocalizedState { + static const _administrationAreaKey = 'administrationArea'; + static const _householdHeadNameKey = 'householdHeadName'; + static const _latKey = 'lat'; + static const _lngKey = 'lng'; + static const _accuracyKey = 'accuracy'; + static const maxLength = 64; + + @override + void initState() { + //final registrationState = context.read().state; + + super.initState(); + } + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + final bloc = context.read(); + final router = context.router; + + return Scaffold( + body: ReactiveFormBuilder( + form: () => buildForm(bloc.state), + builder: (_, form, __) => BlocListener( + listener: (context, locationState) { + final lat = locationState.latitude; + final lng = locationState.longitude; + final accuracy = locationState.accuracy; + + form.control(_latKey).value ??= lat; + form.control(_lngKey).value ??= lng; + form.control(_accuracyKey).value ??= accuracy; + }, + listenWhen: (previous, current) { + final lat = form.control(_latKey).value; + final lng = form.control(_lngKey).value; + final accuracy = form.control(_accuracyKey).value; + + return lat != null || lng != null || accuracy != null + ? false + : true; + }, + child: BlocBuilder( + builder: (context, state) { + return ScrollableContent( + enableFixedButton: true, + header: const Column( + children: [ + BackNavigationHelpHeaderWidget( + //showcaseButton: ShowcaseButton(), //TODO: + showHelp: false, + ), + ], + ), + footer: DigitCard( + margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), + padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), + child: BlocBuilder( + builder: (context, locationState) { + return DigitElevatedButton( + onPressed: (){ + final summary = UserActionModel( + clientReferenceId: IdGen.i.identifier, + latitude: form.control(_latKey).value, + longitude: form.control(_lngKey).value, + locationAccuracy: form.control(_accuracyKey).value, + additionalFields: + UserActionAdditionalFields( + version: 1, + fields: [ + AdditionalField( + 'householdHead', + form.control(_householdHeadNameKey).value ?? '', + ), + ], + ), + ); + context.read().add( + ClosedHouseholdEvent.handleSummary(summary), + ); + context.router.push(ClosedHouseholdSummaryRoute()); + }, + child: Center( + child: Text( + localizations.translate( + i18.common.coreCommonNext, + ), + ), + ), + ); + }, + ), + ), + slivers: [ + SliverToBoxAdapter( + child: DigitCard( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + TextBlock( + heading: localizations.translate( + i18.closeHousehold + .closeHouseHoldDetailLabel, + ), + headingStyle: theme.textTheme.displayMedium, + body: localizations.translate( + i18.closeHousehold + .closeHouseHoldDetailDescLabel, + + ),), + Column(children: [ + DigitTextFormField( + formControlName: _administrationAreaKey, + label: localizations.translate( + i18.closeHousehold + .villageName, + ), + readOnly: true, + ), + DigitTextFormField( + readOnly: true, + formControlName: _accuracyKey, + label: localizations.translate( + i18.closeHousehold + .accuracyLabel, + ), + ), + + DigitTextFormField( + formControlName: _householdHeadNameKey, + label: localizations.translate( + i18.closeHousehold + .headNameLabel, + ), + ), + ]), + ], + ), + ), + ), + ], + ); + } + ), + ), + ), + ); + } + + FormGroup buildForm(ClosedHouseholdState state) { + + return fb.group({ + _administrationAreaKey: FormControl( + value: localizations.translate( + ClosedHouseholdSingleton().boundary!.name.toString()), + validators: [Validators.required], + ), + + _householdHeadNameKey: FormControl( + value: '', + validators: [], + ), + _latKey: FormControl(value: state.userActions?.first.latitude, validators: [ + ]), + _lngKey: FormControl( + value: state.userActions?.first.longitude, + ), + _accuracyKey: FormControl( + value: state.userActions?.first.locationAccuracy, + ), + }); + } +} + diff --git a/packages/closed_household/lib/pages/closed_household_summary.dart b/packages/closed_household/lib/pages/closed_household_summary.dart new file mode 100644 index 000000000..d87765c95 --- /dev/null +++ b/packages/closed_household/lib/pages/closed_household_summary.dart @@ -0,0 +1,227 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:closed_household/blocs/closed_household.dart'; +import 'package:closed_household/models/entities/action.dart'; +import 'package:closed_household/models/entities/status.dart'; +import 'package:closed_household/models/entities/user_action.dart'; +import 'package:closed_household/router/closed_household_router.gm.dart'; +import 'package:closed_household/utils/extensions/extensions.dart'; +import 'package:digit_components/digit_components.dart'; +import 'package:digit_components/utils/date_utils.dart'; +import 'package:digit_components/widgets/atoms/details_card.dart'; +import 'package:digit_data_model/data_model.dart'; +import '../../models/entities/action.dart' as action; +import 'package:digit_scanner/blocs/scanner.dart'; +import 'package:digit_scanner/pages/qr_scanner.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +import '../../../widgets/localized.dart'; +import '../../utils/i18_key_constants.dart' as i18; +import '../../utils/utils.dart'; +import '../widgets/back_navigation_help_header.dart'; +import '../widgets/showcase/showcase_button.dart'; + +@RoutePage() +class ClosedHouseholdSummaryPage extends LocalizedStatefulWidget { + const ClosedHouseholdSummaryPage({ + super.key, + super.appLocalizations, + }); + + @override + State createState() => + _ClosedHouseholdSummaryPageState(); +} + +class _ClosedHouseholdSummaryPageState + extends LocalizedState { + String getLocalizedMessage(String code) { + return localizations.translate(code); + } + + @override + Widget build(BuildContext context) { + return BlocBuilder( + builder: (context, householdState) { + return Scaffold( + body: ScrollableContent( + enableFixedButton: true, + header: const BackNavigationHelpHeaderWidget( + showHelp: false, + showcaseButton: ShowcaseButton(), + ), + footer: DigitCard( + margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), + padding: + const EdgeInsets.fromLTRB(kPadding, kPadding, kPadding, 0), + child: BlocBuilder( + builder: (context, scannerState) { + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + GestureDetector( + onTap: () { + Navigator.of(context).push( + //[TODO: Add the route to auto_route] + MaterialPageRoute( + builder: (context) => const DigitScannerPage( + quantity: 1, + isGS1code: false, + singleValue: true, + isEditEnabled: true, + ), + settings: + const RouteSettings(name: '/qr-scanner'), + ), + ); + }, + child: Container( + color: const DigitColors().seaShellGray, + padding: const EdgeInsets.symmetric( + vertical: kPadding, horizontal: kPadding * 3), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon( + Icons.qr_code_scanner, + color: const DigitColors().burningOrange, + size: kPadding * 3, + ), + const SizedBox( + width: kPadding, + ), + Flexible( + child: Text( + localizations.translate(i18.closeHousehold + .closeHouseholdVoucherScannerLabel), + style: Theme.of(context) + .textTheme + .bodyLarge + ?.copyWith( + color: + const DigitColors().burningOrange, + fontWeight: FontWeight.w500, + fontSize: 19, + ), + ), + ), + ], + ), + ), + ), + DigitElevatedButton( + onPressed: () { + final userAction = UserActionModel( + action: action.Actions.closeHousehold.toValue(), + projectId: ClosedHouseholdSingleton().projectId, + status: Status.closeHousehold.toValue(), + tenantId: ClosedHouseholdSingleton().tenantId, + clientReferenceId: IdGen.i.identifier, + latitude: householdState.summary?.latitude, + longitude: householdState.summary?.longitude, + boundary: ClosedHouseholdSingleton().boundary?.code, + locationAccuracy: + householdState.summary?.locationAccuracy, + additionalFields: + householdState.summary?.additionalFields, + beneficiaryTag: scannerState.qrCodes.first, + clientAuditDetails: ClientAuditDetails( + createdBy: + ClosedHouseholdSingleton().loggedInUserUuid!, + createdTime: context.millisecondsSinceEpoch(), + ), + auditDetails: AuditDetails( + createdBy: + ClosedHouseholdSingleton().loggedInUserUuid!, + createdTime: context.millisecondsSinceEpoch(), + ), + ); + context.read().add( + ClosedHouseholdEvent.handleSubmit( + userAction, false)); + context.router + .push(ClosedHouseholdAcknowledgementRoute()); + }, + child: Center( + child: Text( + localizations + .translate(i18.common.coreCommonSubmit), + ), + ), + ), + ], + ); + }), + ), + slivers: [ + SliverToBoxAdapter( + child: Column( + children: [ + DigitCard( + child: LabelValueList( + heading: localizations.translate( + i18.closeHousehold.closeHouseholdSummaryLabel), + withDivider: false, + items: [ + LabelValuePair( + label: localizations.translate( + i18.closeHousehold.closeHouseholdDate), + value: (DigitDateUtils.getDateFromTimestamp(DateTime.now().millisecondsSinceEpoch)).toString(), + ), + LabelValuePair( + label: localizations.translate( + i18.closeHousehold.closeHouseholdVillageName), + value: ClosedHouseholdSingleton() + .boundary! + .name + .toString(), + ), + LabelValuePair( + label: localizations.translate( + i18.closeHousehold.closeHouseholdHeadName), + value: householdState + .summary?.additionalFields?.fields + .where((h) => h.key == 'householdHead') + .firstOrNull + ?.value ?? + localizations + .translate(i18.common.coreCommonNA), + ), + LabelValuePair( + label: localizations.translate(i18 + .closeHousehold.closeHouseholdGpsAccuracyLabel), + value: householdState.summary?.locationAccuracy + .toString() ?? + localizations + .translate(i18.common.coreCommonNA), + ), + ]), + ), + BlocBuilder( + builder: (context, state) { + if (state.qrCodes.isNotEmpty) { + return DigitCard( + child: LabelValueList( + heading: localizations.translate(i18.closeHousehold + .closeHouseholdVoucherSummaryLabel), + withDivider: false, + items: [ + LabelValuePair( + label: localizations.translate(i18.closeHousehold + .closeHouseholdVoucherCodeLabel), + value: state.qrCodes.first, + ), + ], + ), + ); + } else { + return Container(); // Return an empty container if qrCodes is empty + } + }), + ], + ), + ) + ])); + }); + } +} diff --git a/packages/closed_household/lib/pages/closed_household_wrapper.dart b/packages/closed_household/lib/pages/closed_household_wrapper.dart new file mode 100644 index 000000000..b354876a7 --- /dev/null +++ b/packages/closed_household/lib/pages/closed_household_wrapper.dart @@ -0,0 +1,42 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:closed_household/blocs/closed_household.dart'; +import 'package:closed_household/models/entities/user_action.dart'; +import 'package:closed_household/utils/extensions/extensions.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + + +@RoutePage() +class ClosedHouseholdWrapperPage extends StatelessWidget { + final bool isEditing; + + const ClosedHouseholdWrapperPage({ + super.key, + this.isEditing = false, + }); + + @override + Widget build(BuildContext context) { + + final closedHouseholdRepo = + context.repository(context); + + return MultiBlocProvider( + providers: [ + BlocProvider( + create: (_) => ClosedHouseholdBloc( + ClosedHouseholdState( + isEditing: isEditing, + ), + closedHouseholdRepository: closedHouseholdRepo, + ), + ), + ], + child: BlocBuilder( + builder: (context, houseHoldOverviewState) { + return const AutoRouter(); + }, + ), + ); + } +} diff --git a/packages/closed_household/lib/router/closed_household_router.dart b/packages/closed_household/lib/router/closed_household_router.dart new file mode 100644 index 000000000..ead0995e8 --- /dev/null +++ b/packages/closed_household/lib/router/closed_household_router.dart @@ -0,0 +1,31 @@ +import 'package:auto_route/auto_route.dart'; + +import 'closed_household_router.gm.dart'; + + +@AutoRouterConfig.module() +class ClosedHouseholdPackageRoute extends $ClosedHouseholdPackageRoute { + @override + RouteType get defaultRouteType => const RouteType.material(); + + @override + List routes = [ + AutoRoute( + page: ClosedHouseholdWrapperRoute.page, + path: 'closed-household-wrapper', + children: [ + AutoRoute( + page: ClosedHouseholdDetailsRoute.page, + path: 'closed-household-details', + initial: true, + ), + AutoRoute( + page: ClosedHouseholdSummaryRoute.page, + path: 'closed-household-summary'), + AutoRoute( + page: ClosedHouseholdAcknowledgementRoute.page, + path: 'closed-household-acknowledgement'), + ]), + + ]; +} diff --git a/packages/closed_household/lib/router/closed_household_router.gm.dart b/packages/closed_household/lib/router/closed_household_router.gm.dart new file mode 100644 index 000000000..1c735e32c --- /dev/null +++ b/packages/closed_household/lib/router/closed_household_router.gm.dart @@ -0,0 +1,225 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +// ************************************************************************** +// AutoRouterGenerator +// ************************************************************************** + +// ignore_for_file: type=lint +// coverage:ignore-file + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:auto_route/auto_route.dart' as _i5; +import 'package:closed_household/blocs/app_localization.dart' as _i7; +import 'package:closed_household/closed_household.dart' as _i8; +import 'package:closed_household/pages/closed_household_acknowledgement.dart' + as _i1; +import 'package:closed_household/pages/closed_household_details.dart' as _i2; +import 'package:closed_household/pages/closed_household_summary.dart' as _i3; +import 'package:closed_household/pages/closed_household_wrapper.dart' as _i4; +import 'package:flutter/material.dart' as _i6; + +abstract class $ClosedHouseholdPackageRoute extends _i5.AutoRouterModule { + @override + final Map pagesMap = { + ClosedHouseholdAcknowledgementRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const ClosedHouseholdAcknowledgementRouteArgs()); + return _i5.AutoRoutePage( + routeData: routeData, + child: _i1.ClosedHouseholdAcknowledgementPage( + key: args.key, + appLocalizations: args.appLocalizations, + ), + ); + }, + ClosedHouseholdDetailsRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const ClosedHouseholdDetailsRouteArgs()); + return _i5.AutoRoutePage( + routeData: routeData, + child: _i2.ClosedHouseholdDetailsPage( + key: args.key, + appLocalizations: args.appLocalizations, + ), + ); + }, + ClosedHouseholdSummaryRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const ClosedHouseholdSummaryRouteArgs()); + return _i5.AutoRoutePage( + routeData: routeData, + child: _i3.ClosedHouseholdSummaryPage( + key: args.key, + appLocalizations: args.appLocalizations, + ), + ); + }, + ClosedHouseholdWrapperRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const ClosedHouseholdWrapperRouteArgs()); + return _i5.AutoRoutePage( + routeData: routeData, + child: _i4.ClosedHouseholdWrapperPage( + key: args.key, + isEditing: args.isEditing, + ), + ); + }, + }; +} + +/// generated route for +/// [_i1.ClosedHouseholdAcknowledgementPage] +class ClosedHouseholdAcknowledgementRoute + extends _i5.PageRouteInfo { + ClosedHouseholdAcknowledgementRoute({ + _i6.Key? key, + _i7.ClosedHouseholdLocalization? appLocalizations, + List<_i5.PageRouteInfo>? children, + }) : super( + ClosedHouseholdAcknowledgementRoute.name, + args: ClosedHouseholdAcknowledgementRouteArgs( + key: key, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'ClosedHouseholdAcknowledgementRoute'; + + static const _i5.PageInfo page = + _i5.PageInfo(name); +} + +class ClosedHouseholdAcknowledgementRouteArgs { + const ClosedHouseholdAcknowledgementRouteArgs({ + this.key, + this.appLocalizations, + }); + + final _i6.Key? key; + + final _i7.ClosedHouseholdLocalization? appLocalizations; + + @override + String toString() { + return 'ClosedHouseholdAcknowledgementRouteArgs{key: $key, appLocalizations: $appLocalizations}'; + } +} + +/// generated route for +/// [_i2.ClosedHouseholdDetailsPage] +class ClosedHouseholdDetailsRoute + extends _i5.PageRouteInfo { + ClosedHouseholdDetailsRoute({ + _i6.Key? key, + _i8.ClosedHouseholdLocalization? appLocalizations, + List<_i5.PageRouteInfo>? children, + }) : super( + ClosedHouseholdDetailsRoute.name, + args: ClosedHouseholdDetailsRouteArgs( + key: key, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'ClosedHouseholdDetailsRoute'; + + static const _i5.PageInfo page = + _i5.PageInfo(name); +} + +class ClosedHouseholdDetailsRouteArgs { + const ClosedHouseholdDetailsRouteArgs({ + this.key, + this.appLocalizations, + }); + + final _i6.Key? key; + + final _i8.ClosedHouseholdLocalization? appLocalizations; + + @override + String toString() { + return 'ClosedHouseholdDetailsRouteArgs{key: $key, appLocalizations: $appLocalizations}'; + } +} + +/// generated route for +/// [_i3.ClosedHouseholdSummaryPage] +class ClosedHouseholdSummaryRoute + extends _i5.PageRouteInfo { + ClosedHouseholdSummaryRoute({ + _i6.Key? key, + _i7.ClosedHouseholdLocalization? appLocalizations, + List<_i5.PageRouteInfo>? children, + }) : super( + ClosedHouseholdSummaryRoute.name, + args: ClosedHouseholdSummaryRouteArgs( + key: key, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'ClosedHouseholdSummaryRoute'; + + static const _i5.PageInfo page = + _i5.PageInfo(name); +} + +class ClosedHouseholdSummaryRouteArgs { + const ClosedHouseholdSummaryRouteArgs({ + this.key, + this.appLocalizations, + }); + + final _i6.Key? key; + + final _i7.ClosedHouseholdLocalization? appLocalizations; + + @override + String toString() { + return 'ClosedHouseholdSummaryRouteArgs{key: $key, appLocalizations: $appLocalizations}'; + } +} + +/// generated route for +/// [_i4.ClosedHouseholdWrapperPage] +class ClosedHouseholdWrapperRoute + extends _i5.PageRouteInfo { + ClosedHouseholdWrapperRoute({ + _i6.Key? key, + bool isEditing = false, + List<_i5.PageRouteInfo>? children, + }) : super( + ClosedHouseholdWrapperRoute.name, + args: ClosedHouseholdWrapperRouteArgs( + key: key, + isEditing: isEditing, + ), + initialChildren: children, + ); + + static const String name = 'ClosedHouseholdWrapperRoute'; + + static const _i5.PageInfo page = + _i5.PageInfo(name); +} + +class ClosedHouseholdWrapperRouteArgs { + const ClosedHouseholdWrapperRouteArgs({ + this.key, + this.isEditing = false, + }); + + final _i6.Key? key; + + final bool isEditing; + + @override + String toString() { + return 'ClosedHouseholdWrapperRouteArgs{key: $key, isEditing: $isEditing}'; + } +} diff --git a/packages/closed_household/lib/utils/constants.dart b/packages/closed_household/lib/utils/constants.dart new file mode 100644 index 000000000..00223163c --- /dev/null +++ b/packages/closed_household/lib/utils/constants.dart @@ -0,0 +1,7 @@ +class Constants { + + final String dateFormat = 'dd/MM/yyyy'; + final String notAvailable = 'N/A'; + final String dateTimeExtFormat = 'dd-MM-yyyy'; + static const String checklistViewDateFormat = 'dd/MM/yyyy hh:mm a'; +} \ No newline at end of file diff --git a/packages/closed_household/lib/utils/extensions/context_utility.dart b/packages/closed_household/lib/utils/extensions/context_utility.dart new file mode 100644 index 000000000..9e29ab907 --- /dev/null +++ b/packages/closed_household/lib/utils/extensions/context_utility.dart @@ -0,0 +1,28 @@ +part of 'extensions.dart'; + +extension ContextUtilityExtensions on BuildContext { + int millisecondsSinceEpoch([DateTime? dateTime]) { + return (dateTime ?? DateTime.now()).millisecondsSinceEpoch; + } + + Future get packageInfo async { + final info = await PackageInfo.fromPlatform(); + + return info.version; + } + + + DataRepository + repository( + BuildContext context, + ) { + switch (ClosedHouseholdSingleton().persistenceConfiguration) { + case PersistenceConfiguration.offlineFirst: + return context.read>(); + case PersistenceConfiguration.onlineOnly: + return context.read>(); + default: + return context.read>(); + } + } +} diff --git a/packages/closed_household/lib/utils/extensions/extensions.dart b/packages/closed_household/lib/utils/extensions/extensions.dart new file mode 100644 index 000000000..a9f422079 --- /dev/null +++ b/packages/closed_household/lib/utils/extensions/extensions.dart @@ -0,0 +1,67 @@ +// Importing necessary packages and files +import 'package:digit_data_model/data_model.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:intl/intl.dart'; +import 'package:package_info_plus/package_info_plus.dart'; +import '../constants.dart'; + +import '../utils.dart'; + +part 'context_utility.dart'; + +// Extension to calculate age based on a DateTime object. +extension DateAgeExtension on DateTime { + int get age { + DateTime currentDate = DateTime.now(); + int ageInYears = currentDate.year - year; + int ageInMonths = currentDate.month - month; + + if (currentDate.day < day) { + ageInMonths--; + } + + if (ageInMonths < 0) { + ageInYears--; + ageInMonths += 12; + } + + return ageInYears; + } +} + +// Extension to format a DateTime object to a string. +extension DateTimeExtension on DateTime? { + String? getFormattedDate() { + if (this == null) return null; + + return DateFormat(Constants().dateTimeExtFormat).format(this!); + } +} + +// Extension to increment an integer by a specific value. +extension IntIncrementer on int? { + int get increment { + return _incrementBy(1); + } + + int _incrementBy(int value) { + return this == null ? value : (this! + value); + } +} + +// Extension to remove duplicates from a list based on a provided constraint. +extension UniqueListItem on List { + void removeDuplicates(I Function(E element) constraintMapper) { + final distinctList = map(constraintMapper).toSet(); + + retainWhere((element) => distinctList.remove(constraintMapper(element))); + } +} + +// Extension to convert an integer (epoch) to a DateTime object. +extension EpochToDateTime on int? { + DateTime? get toDateTime { + return this == null ? null : DateTime.fromMillisecondsSinceEpoch(this!); + } +} diff --git a/packages/closed_household/lib/utils/i18_key_constants.dart b/packages/closed_household/lib/utils/i18_key_constants.dart new file mode 100644 index 000000000..0c4523abc --- /dev/null +++ b/packages/closed_household/lib/utils/i18_key_constants.dart @@ -0,0 +1,167 @@ +const common = Common(); +const acknowledgementSuccess = AcknowledgementSuccess(); +const closeHousehold = CloseHousehold(); +const closedHouseholdDetailsShowcase = ClosedHouseholdDetailsShowcase(); + +class Common { + const Common(); + + String get coreCommonContinue => 'CORE_COMMON_CONTINUE'; + + String get coreCommonAge => 'CORE_COMMON_AGE'; + + String get coreCommonName => 'CORE_COMMON_NAME'; + + String get coreCommonEmailId => 'CORE_COMMON_EMAIL_ID'; + + String get coreCommonGender => 'CORE_COMMON_GENDER'; + + String get coreCommonMobileNumber => 'CORE_COMMON_MOBILE_NUMBER'; + + String get coreCommonSubmit => 'CORE_COMMON_SUBMIT'; + + String get coreCommonSave => 'CORE_COMMON_SAVE'; + + String get coreCommonCancel => 'CORE_COMMON_CANCEL'; + + String get corecommonRequired => 'CORE_COMMON_REQUIRED'; + + String get searchByName => 'CORE_COMMON_SEARCH_BY_NAME'; + + String get coreCommonReasonRequired => 'CORE_COMMON_REASON_REQUIRED'; + + String get corecommonclose => 'CORE_COMMON_CLOSE'; + + String get coreCommonOk => 'CORE_COMMON_OK'; + + String get coreCommonNA => 'CORE_COMMON_NA'; + + String get coreCommonProfile => 'CORE_COMMON_PROFILE'; + + String get coreCommonLogout => 'CORE_COMMON_LOGOUT'; + + String get coreCommonBack => 'CORE_COMMON_BACK'; + + String get coreCommonHelp => 'CORE_COMMON_HELP'; + + String get coreCommonHome => 'CORE_COMMON_HOME'; + + String get coreCommonViewDownloadedData => 'CORE_COMMON_VIEW_DOWNLOADED_DATA'; + + String get coreCommonlanguage => 'CORE_COMMON_LANGUAGE'; + + String get coreCommonSyncProgress => 'CORE_COMMON_SYNC_PROGRESS'; + + String get coreCommonDataSynced => 'CORE_COMMON_DATA_SYNCED'; + + String get coreCommonDataSyncFailed => 'CORE_COMMON_DATA_SYNC_FAILED'; + + String get coreCommonDataSyncRetry => 'CORE_COMMON_DATA_SYNC_RETRY'; + + String get connectionLabel => 'CORE_COMMON_CONNECTION_LABEL'; + + String get connectionContent => 'CORE_COMMON_CONNECTION_CONTENT'; + + String get coreCommonSkip => 'CORE_COMMON_SKIP'; + + String get coreCommonNext => 'CORE_COMMON_NEXT'; + + String get coreCommonYes => 'CORE_COMMON_YES'; + + String get coreCommonNo => 'CORE_COMMON_NO'; + String get coreCommonGoback => 'CORE_COMMON_GO_BACK'; + + String get coreCommonRequiredItems => 'CORE_COMMON_REQUIRED_ITEMS'; + + String get min2CharsRequired => 'MIN_2_CHARS_REQUIRED'; + + String get maxCharsRequired => 'MAX_CHARS_ALLOWED'; + + String get maxValue => 'MAX_VALUE_ALLOWED'; + String get minValue => 'MIN_VALUE_ALLOWED'; + + String get noResultsFound => 'NO_RESULTS_FOUND'; + + String get noProjectSelected => 'NO_PROJECT_SELECTED'; + + String get coreCommonSyncInProgress => 'CORE_COMMON_SYNC_IN_PROGRESS'; + + String get facilitySearchHeaderLabel => 'FACILITY_SEARCH_HEADER_LABEL'; + String get projectFacilitySearchHeaderLabel => + 'PROJECT_FACILITY_SEARCH_HEADER_LABEL'; + + String get coreCommonDownload => 'CORE_COMMON_DOWNLOAD'; + + String get coreCommonDownloadFailed => 'CORE_COMMON_DOWNLOAD_FAILED'; + + String get noMatchFound => 'CORE_COMMON_NO_MATCH_FOUND'; + + String get scanBales => 'CORE_COMMON_SCAN_BALES'; + String get ageInMonths => 'AGE_IN_MONTHS_LABEL'; +} + + +class AcknowledgementSuccess { + const AcknowledgementSuccess(); + + String get actionLabelText => 'ACKNOWLEDGEMENT_SUCCESS_ACTION_LABEL_TEXT'; + + String get acknowledgementDescriptionText => + 'ACKNOWLEDGEMENT_SUCCESS_DESCRIPTION_TEXT'; + + String get acknowledgementLabelText => 'ACKNOWLEDGEMENT_SUCCESS_LABEL_TEXT'; + + String get goToHome => 'GO_TO_HOME_SCREEN'; + String get downloadmoredata => 'DOWNLOAD_MORE_DATA'; + String get dataDownloadedSuccessLabel => 'DATA_DOWNLOADED_SUCCESS_LABEL'; +} + +class CloseHousehold { + const CloseHousehold(); + + String get closeHouseHoldDetailLabel => 'CLOSE_HOUSEHOLD_DETAIL_LABEL'; + + String get closeHouseHoldDetailDescLabel => 'CLOSE_HOUSEHOLD_DETAIL_DESC_LABEL'; + + String get villageName => 'CLOSE_HOUSEHOLD_VILLAGE_NAME_LABEL'; + + String get accuracyLabel => 'CLOSE_HOUSEHOLD_GPS_ACCURACY_LABEL'; + + String get headNameLabel => 'CLOSE_HOUSEHOLD_HEAD_NAME_LABEL'; + + String get closeHouseholdDate => 'CLOSE_HOUSEHOLD_SUMMARY_DATE_LABEL'; + + String get closeHouseholdVillageName => 'CLOSE_HOUSEHOLD_SUMMARY_VILLAGE_NAME_LABEL'; + + String get closeHouseholdHeadName => 'CLOSE_HOUSEHOLD_SUMMARY_HEAD_NAME_LABEL'; + + String get closeHouseholdGpsAccuracyLabel => 'CLOSE_HOUSEHOLD_SUMMARY_GPS_ACCURACY_LABEL'; + + String get closeHouseholdSummaryLabel => 'CLOSE_HOUSEHOLD_SUMMARY_LABEL'; + + String get closeHouseholdVoucherSummaryLabel => 'CLOSE_HOUSEHOLD_SUMMARY_VOUCHERS_LABEL'; + + String get closeHouseholdVoucherCodeLabel => 'CLOSE_HOUSEHOLD_SUMMARY_VOUCHER_CODE_LABEL'; + + String get closeHouseholdVoucherScannerLabel => 'CLOSE_HOUSEHOLD_VOUCHER_SCANNER_LABEL'; +} + + +class ClosedHouseholdDetailsShowcase { + const ClosedHouseholdDetailsShowcase(); + + String get villageName { + return 'HOUSEHOLD_LOCATION_SHOWCASE_VILLAGE_NAME'; + } + + String get gpsAccuracy { + return 'HOUSEHOLD_LOCATION_SHOWCASE_GPS_ACCURACY'; + } + + String get householdHeadName { + return 'HOUSEHOLD_LOCATION_SHOWCASE_HEAD_NAME'; + } + +} + + diff --git a/packages/closed_household/lib/utils/utils.dart b/packages/closed_household/lib/utils/utils.dart new file mode 100644 index 000000000..e59933409 --- /dev/null +++ b/packages/closed_household/lib/utils/utils.dart @@ -0,0 +1,51 @@ + +// create a singleton class for Closed Household package where set data and get data methods are defined + +import 'package:digit_data_model/models/entities/boundary.dart'; +import 'package:digit_data_model/utils/utils.dart'; + +class ClosedHouseholdSingleton { + static final ClosedHouseholdSingleton _singleton = + ClosedHouseholdSingleton._internal(); + + factory ClosedHouseholdSingleton() { + return _singleton; + } + + ClosedHouseholdSingleton._internal(); + + String? _tenantId; + String? _loggedInUserUuid; + String? _projectId; + BoundaryModel? _boundaryModel; + PersistenceConfiguration? _persistenceConfiguration = PersistenceConfiguration + .offlineFirst; // Default to offline first persistence configuration + + void setBoundary({required BoundaryModel boundary}) { + _boundaryModel = boundary; + } + + void setPersistenceConfiguration( + {required PersistenceConfiguration persistenceConfiguration}) { + _persistenceConfiguration = persistenceConfiguration; + } + + void setInitialData({ + required String loggedInUserUuid, + required String projectId, + }) { + _loggedInUserUuid = loggedInUserUuid; + _projectId = projectId; + } + + void setTenantId(String tenantId) { + _tenantId = tenantId; + } + + String? get tenantId => _tenantId; + String? get loggedInUserUuid => _loggedInUserUuid; + String? get projectId => _projectId; + PersistenceConfiguration? get persistenceConfiguration => + _persistenceConfiguration; + BoundaryModel? get boundary => _boundaryModel; +} \ No newline at end of file diff --git a/packages/closed_household/lib/widgets/back_navigation_help_header.dart b/packages/closed_household/lib/widgets/back_navigation_help_header.dart new file mode 100644 index 000000000..251c8e6a3 --- /dev/null +++ b/packages/closed_household/lib/widgets/back_navigation_help_header.dart @@ -0,0 +1,85 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:closed_household/blocs/app_localization.dart'; +import 'package:closed_household/widgets/showcase/showcase_button.dart'; +import 'package:digit_components/digit_components.dart'; +import 'package:flutter/material.dart'; + +import '../../utils/i18_key_constants.dart' as i18; + +class BackNavigationHelpHeaderWidget extends StatelessWidget { + final bool showHelp; + final bool showBackNavigation; + final bool showLogoutCTA; + final VoidCallback? helpClicked; + final VoidCallback? handleBack; + final ShowcaseButton? showcaseButton; + + const BackNavigationHelpHeaderWidget({ + super.key, + this.showHelp = false, //hiding help + this.showBackNavigation = true, + this.showLogoutCTA = false, + this.helpClicked, + this.handleBack, + this.showcaseButton, + }); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + + return Padding( + padding: const EdgeInsets.all(kPadding / 2), + child: Row( + children: [ + Expanded( + child: Row( + children: [ + if (showBackNavigation) + Flexible( + child: TextButton.icon( + style: TextButton.styleFrom( + foregroundColor: theme.colorScheme.onBackground, + padding: EdgeInsets.zero, + ), + onPressed: () { + context.router.maybePop(); + handleBack != null ? handleBack!() : null; + }, + icon: const Icon(Icons.arrow_left_sharp), + label: Text( + ClosedHouseholdLocalization.of(context).translate( + i18.common.coreCommonBack, + ), + overflow: TextOverflow.ellipsis, + ), + ), + ), + ], + ), + ), + SizedBox(width: showHelp ? kPadding * 2 : 0), + if (showHelp) + TextButton( + style: TextButton.styleFrom(padding: EdgeInsets.zero), + onPressed: helpClicked, + child: Row( + children: [ + Text( + ClosedHouseholdLocalization.of(context) + .translate(i18.common.coreCommonHelp), + overflow: TextOverflow.ellipsis, + ), + const Icon( + Icons.help_outline_outlined, + ), // Add the icon to the right + ], + ), + ), + SizedBox(width: showcaseButton != null ? 16 : 0), + if (showcaseButton != null) showcaseButton!, + ], + ), + ); + } +} diff --git a/packages/closed_household/lib/widgets/localized.dart b/packages/closed_household/lib/widgets/localized.dart new file mode 100644 index 000000000..35b88fe1b --- /dev/null +++ b/packages/closed_household/lib/widgets/localized.dart @@ -0,0 +1,33 @@ +import 'package:flutter/material.dart'; +import '../blocs/app_localization.dart'; + +abstract class LocalizedStatefulWidget extends StatefulWidget { + final ClosedHouseholdLocalization? appLocalizations; + + const LocalizedStatefulWidget({ + super.key, + this.appLocalizations, + }); +} + +abstract class LocalizedState + extends State { + late ClosedHouseholdLocalization _localizations; + + ClosedHouseholdLocalization get localizations => _localizations; + + set localizations(ClosedHouseholdLocalization localizations) { + if (mounted) { + setState(() { + _localizations = localizations; + }); + } + } + + @override + @mustCallSuper + void didChangeDependencies() { + _localizations = widget.appLocalizations ?? ClosedHouseholdLocalization.of(context); + super.didChangeDependencies(); + } +} diff --git a/packages/closed_household/lib/widgets/showcase/config/closed_household_details.dart b/packages/closed_household/lib/widgets/showcase/config/closed_household_details.dart new file mode 100644 index 000000000..4363942ab --- /dev/null +++ b/packages/closed_household/lib/widgets/showcase/config/closed_household_details.dart @@ -0,0 +1,31 @@ +part of 'showcase_constants.dart'; + +class _ClosedHouseholdDetailsShowcaseData { + static final _ClosedHouseholdDetailsShowcaseData _instance = + _ClosedHouseholdDetailsShowcaseData._(); + + _ClosedHouseholdDetailsShowcaseData._(); + + factory _ClosedHouseholdDetailsShowcaseData() => _instance; + + List get showcaseData => [ + villageName, + gpsAccuracy, + householdHeadName, + ]; + + final villageName = ShowcaseItemBuilder( + messageLocalizationKey: i18.closedHouseholdDetailsShowcase.villageName, + ); + + final gpsAccuracy = ShowcaseItemBuilder( + messageLocalizationKey: + i18.closedHouseholdDetailsShowcase.gpsAccuracy, + ); + + final householdHeadName = ShowcaseItemBuilder( + messageLocalizationKey: + i18.closedHouseholdDetailsShowcase.householdHeadName, + ); + +} diff --git a/packages/closed_household/lib/widgets/showcase/config/showcase_constants.dart b/packages/closed_household/lib/widgets/showcase/config/showcase_constants.dart new file mode 100644 index 000000000..db1a08d79 --- /dev/null +++ b/packages/closed_household/lib/widgets/showcase/config/showcase_constants.dart @@ -0,0 +1,7 @@ +import '../../../utils/i18_key_constants.dart' as i18; +import '../showcase_wrappers.dart'; + + +part 'closed_household_details.dart'; + +final closedHouseholdDetailsShowcaseData = _ClosedHouseholdDetailsShowcaseData(); diff --git a/packages/closed_household/lib/widgets/showcase/showcase_button.dart b/packages/closed_household/lib/widgets/showcase/showcase_button.dart new file mode 100644 index 000000000..9e7b1f968 --- /dev/null +++ b/packages/closed_household/lib/widgets/showcase/showcase_button.dart @@ -0,0 +1,73 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:closed_household/blocs/app_localization.dart'; +import 'package:closed_household/router/closed_household_router.gm.dart'; +import 'package:digit_components/theme/digit_theme.dart'; +import 'package:digit_showcase/showcase_widget.dart'; +import 'package:flutter/material.dart'; +import '../../utils/i18_key_constants.dart' as i18; +import '../localized.dart'; +import 'config/showcase_constants.dart'; + +class ShowcaseButton extends LocalizedStatefulWidget { + final Iterable? showcaseFor; + + const ShowcaseButton({super.key, this.showcaseFor}); + + @override + LocalizedState createState() => _ShowcaseButtonState(); +} + +class _ShowcaseButtonState extends LocalizedState { + @override + Widget build(BuildContext context) { + return TextButton( + style: TextButton.styleFrom(padding: EdgeInsets.zero), + onPressed: () { + if (widget.showcaseFor?.isNotEmpty == true) { + ShowcaseWidget.of(context).startShowCase( + widget.showcaseFor!.toList(), + ); + + return; + } + + final current = context.router.current.name; + final paths = _showcasePathsForRoute(current); + + if (paths == null) return; + if (paths.isEmpty) return; + + ShowcaseWidget.of(context).startShowCase(paths.toList()); + }, + child: Row( + children: [ + Padding( + padding: const EdgeInsets.fromLTRB( + kPadding, + kPadding, + kPadding / 2, + kPadding, + ), + child: Text( + ClosedHouseholdLocalization.of(context) + .translate(i18.common.coreCommonHelp), + overflow: TextOverflow.ellipsis, + ), + ), + const Icon(Icons.help_outline), + ], + ), + ); + } + + Iterable? _showcasePathsForRoute(String routeName) { + switch (routeName) { + case ClosedHouseholdDetailsRoute.name: + return closedHouseholdDetailsShowcaseData.showcaseData.map( + (e) => e.showcaseKey, + ); + default: + return null; + } + } +} diff --git a/packages/closed_household/lib/widgets/showcase/showcase_wrappers.dart b/packages/closed_household/lib/widgets/showcase/showcase_wrappers.dart new file mode 100644 index 000000000..a2ac9e398 --- /dev/null +++ b/packages/closed_household/lib/widgets/showcase/showcase_wrappers.dart @@ -0,0 +1,65 @@ +import 'package:digit_showcase/showcase.dart'; +import 'package:flutter/material.dart'; + +import '../localized.dart'; + +const kPadding = 8.0; + +class ShowcaseItemBuilder { + final GlobalKey showcaseKey; + final String messageLocalizationKey; + + ShowcaseItemBuilder({required this.messageLocalizationKey}) + : showcaseKey = GlobalKey(debugLabel: messageLocalizationKey); + + Widget buildWith({required Widget child}) => ShowcaseItemWrapperWidget( + showcaseKey: showcaseKey, + messageLocalizationKey: messageLocalizationKey, + child: child, + ); +} + +class ShowcaseItemWrapperWidget extends LocalizedStatefulWidget { + final Widget child; + final String messageLocalizationKey; + final GlobalKey showcaseKey; + + const ShowcaseItemWrapperWidget({ + super.key, + required this.messageLocalizationKey, + required this.child, + required this.showcaseKey, + }); + + @override + LocalizedState createState() => + _ShowcaseItemWrapperWidgetState(); +} + +class _ShowcaseItemWrapperWidgetState + extends LocalizedState { + @override + Widget build(BuildContext context) { + return Showcase( + key: widget.showcaseKey, + disableMovingAnimation: true, + disableScaleAnimation: true, + description: localizations.translate(widget.messageLocalizationKey), + targetPadding: const EdgeInsets.fromLTRB( + kPadding / 2, + kPadding / 2, + kPadding / 2, + kPadding / 2, + ), + child: Container( + padding: const EdgeInsets.fromLTRB( + kPadding / 2, + kPadding / 2, + kPadding / 2, + kPadding / 2, + ), + child: widget.child, + ), + ); + } +} diff --git a/packages/closed_household/pubspec.yaml b/packages/closed_household/pubspec.yaml new file mode 100644 index 000000000..1e5731728 --- /dev/null +++ b/packages/closed_household/pubspec.yaml @@ -0,0 +1,61 @@ +name: closed_household +description: This package enables health facility workers to close a household. +version: 0.0.0-dev.1 +homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/closed_household +repository: https://github.com/egovernments/health-campaign-field-worker-app + +environment: + sdk: '>=3.0.0 <4.0.0' + flutter: ">=1.17.0" + +dependencies: + flutter: + sdk: flutter + digit_components: ^1.0.0+2 + flutter_bloc: ^8.1.1 + freezed_annotation: ^2.1.0 + build_runner: ^2.2.1 + reactive_forms: ^14.1.0 + fluttertoast: ^8.1.2 + overlay_builder: ^1.1.0 + intl: ^0.18.0 + flutter_svg: ^2.0.8 + dart_mappable: ^4.2.0 + drift: ^2.0.0 + sqlite3_flutter_libs: ^0.5.10 + path_provider: ^2.0.11 + path: ^1.8.2 + drift_db_viewer: ^2.0.0 + uuid: ^3.0.6 + recase: ^4.1.0 + pluto_grid: ^7.0.1 + digit_scanner: ^1.0.2 + gs1_barcode_parser: ^1.0.5 + auto_route: ^7.8.4 + digit_data_model: ^1.0.2 + package_info_plus: ^5.0.1 + digit_showcase: ^1.0.0 + collection: ^1.16.0 + flutter_keyboard_visibility: ^5.4.0 + stream_transform: ^2.1.0 + async: ^2.11.0 + formula_parser: ^2.0.1 + + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^3.0.1 + dart_code_metrics: ^5.7.6 + freezed: ^2.1.0+1 + json_serializable: ^6.4.0 + drift_dev: ^2.14.1 + bloc_test: ^9.1.0 + mocktail: ^1.0.2 + dart_mappable_builder: ^4.2.0 + auto_route_generator: ^7.3.2 + +flutter: + assets: + - assets/images/ + - assets/icons/svg/ \ No newline at end of file diff --git a/packages/closed_household/test/closed_household_test.dart b/packages/closed_household/test/closed_household_test.dart new file mode 100644 index 000000000..556802868 --- /dev/null +++ b/packages/closed_household/test/closed_household_test.dart @@ -0,0 +1,7 @@ +import 'package:flutter_test/flutter_test.dart'; + +import 'package:closed_household/closed_household.dart'; + +void main() { + //TODO: add tests +} diff --git a/packages/digit_components/lib/widgets/atoms/details_card.dart b/packages/digit_components/lib/widgets/atoms/details_card.dart index ce04a268a..b213a165e 100644 --- a/packages/digit_components/lib/widgets/atoms/details_card.dart +++ b/packages/digit_components/lib/widgets/atoms/details_card.dart @@ -64,50 +64,50 @@ class LabelValueList extends StatelessWidget { padding: padding ?? const EdgeInsets.symmetric(vertical: 8.0), child: item.isInline ? Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - // Label taking 30% width - Expanded( - flex: 6, // 45% width - child: Text( - item.label, - style: textTheme.headlineSmall?.copyWith( - color: const DigitColors().woodsmokeBlack, - ), - ), - ), - const SizedBox( - width: kPadding * 4), // Gap between label and value - // Value taking rest of the width - Expanded( - flex: 8, // Remaining 55% width - child: Text( - item.value, - style: textTheme.bodySmall?.copyWith( - color: const DigitColors().woodsmokeBlack, - ), - ), - ), - ], - ) + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Label taking 30% width + Expanded( + flex: 6, // 45% width + child: Text( + item.label, + style: textTheme.headlineSmall?.copyWith( + color: const DigitColors().woodsmokeBlack, + ), + ), + ), + const SizedBox( + width: kPadding * 4), // Gap between label and value + // Value taking rest of the width + Expanded( + flex: 8, // Remaining 55% width + child: Text( + item.value, + style: textTheme.bodySmall?.copyWith( + color: const DigitColors().woodsmokeBlack, + ), + ), + ), + ], + ) : Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - item.label, - style: textTheme.headlineSmall?.copyWith( - color: const DigitColors().woodsmokeBlack, - ), - ), - const SizedBox(height: 4), - Text( - item.value, - style: textTheme.bodySmall?.copyWith( - color: const DigitColors().woodsmokeBlack, - ), - ), - ], + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + item.label, + style: textTheme.headlineSmall?.copyWith( + color: const DigitColors().woodsmokeBlack, ), + ), + const SizedBox(height: 4), + Text( + item.value, + style: textTheme.bodySmall?.copyWith( + color: const DigitColors().woodsmokeBlack, + ), + ), + ], + ), ); } } @@ -122,4 +122,4 @@ class LabelValuePair { required this.value, this.isInline = true, }); -} +} \ No newline at end of file diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart index e5a60169f..84d961de2 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart @@ -35,6 +35,7 @@ import 'tables/package_tables/stock.dart'; import 'tables/package_tables/stock_reconciliation.dart'; import 'tables/package_tables/task.dart'; import 'tables/package_tables/task_resource.dart'; +import 'tables/package_tables/user_action.dart'; import 'tables/pgr_service.dart'; import 'tables/product.dart'; import 'tables/product_variant.dart'; @@ -98,6 +99,7 @@ part 'sql_store.g.dart'; TaskResource, SideEffect, Referral, + UserAction, ]) class LocalSqlDataStore extends _$LocalSqlDataStore { /// The constructor for `LocalSqlDataStore`. diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart index e742720b6..e51bc80e0 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart @@ -38695,6 +38695,1123 @@ class ReferralCompanion extends UpdateCompanion { } } +class $UserActionTable extends UserAction + with TableInfo<$UserActionTable, UserActionData> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $UserActionTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _tenantIdMeta = + const VerificationMeta('tenantId'); + @override + late final GeneratedColumn tenantId = GeneratedColumn( + 'tenant_id', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _projectIdMeta = + const VerificationMeta('projectId'); + @override + late final GeneratedColumn projectId = GeneratedColumn( + 'project_id', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _clientReferenceIdMeta = + const VerificationMeta('clientReferenceId'); + @override + late final GeneratedColumn clientReferenceId = + GeneratedColumn('client_reference_id', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + static const VerificationMeta _latitudeMeta = + const VerificationMeta('latitude'); + @override + late final GeneratedColumn latitude = GeneratedColumn( + 'latitude', aliasedName, true, + type: DriftSqlType.double, requiredDuringInsert: false); + static const VerificationMeta _longitudeMeta = + const VerificationMeta('longitude'); + @override + late final GeneratedColumn longitude = GeneratedColumn( + 'longitude', aliasedName, true, + type: DriftSqlType.double, requiredDuringInsert: false); + static const VerificationMeta _locationAccuracyMeta = + const VerificationMeta('locationAccuracy'); + @override + late final GeneratedColumn locationAccuracy = GeneratedColumn( + 'location_accuracy', aliasedName, true, + type: DriftSqlType.double, requiredDuringInsert: false); + static const VerificationMeta _boundaryCodeMeta = + const VerificationMeta('boundaryCode'); + @override + late final GeneratedColumn boundaryCode = GeneratedColumn( + 'boundary_code', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _statusMeta = const VerificationMeta('status'); + @override + late final GeneratedColumn status = GeneratedColumn( + 'status', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _additionalFieldsMeta = + const VerificationMeta('additionalFields'); + @override + late final GeneratedColumn additionalFields = GeneratedColumn( + 'additional_fields', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _auditCreatedByMeta = + const VerificationMeta('auditCreatedBy'); + @override + late final GeneratedColumn auditCreatedBy = GeneratedColumn( + 'audit_created_by', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _auditCreatedTimeMeta = + const VerificationMeta('auditCreatedTime'); + @override + late final GeneratedColumn auditCreatedTime = GeneratedColumn( + 'audit_created_time', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + static const VerificationMeta _auditModifiedByMeta = + const VerificationMeta('auditModifiedBy'); + @override + late final GeneratedColumn auditModifiedBy = GeneratedColumn( + 'audit_modified_by', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _auditModifiedTimeMeta = + const VerificationMeta('auditModifiedTime'); + @override + late final GeneratedColumn auditModifiedTime = GeneratedColumn( + 'audit_modified_time', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + static const VerificationMeta _nonRecoverableErrorMeta = + const VerificationMeta('nonRecoverableError'); + @override + late final GeneratedColumn nonRecoverableError = GeneratedColumn( + 'non_recoverable_error', aliasedName, true, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("non_recoverable_error" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _clientCreatedTimeMeta = + const VerificationMeta('clientCreatedTime'); + @override + late final GeneratedColumn clientCreatedTime = GeneratedColumn( + 'client_created_time', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + static const VerificationMeta _clientCreatedByMeta = + const VerificationMeta('clientCreatedBy'); + @override + late final GeneratedColumn clientCreatedBy = GeneratedColumn( + 'client_created_by', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _clientModifiedByMeta = + const VerificationMeta('clientModifiedBy'); + @override + late final GeneratedColumn clientModifiedBy = GeneratedColumn( + 'client_modified_by', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _clientModifiedTimeMeta = + const VerificationMeta('clientModifiedTime'); + @override + late final GeneratedColumn clientModifiedTime = GeneratedColumn( + 'client_modified_time', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + static const VerificationMeta _rowVersionMeta = + const VerificationMeta('rowVersion'); + @override + late final GeneratedColumn rowVersion = GeneratedColumn( + 'row_version', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + static const VerificationMeta _isDeletedMeta = + const VerificationMeta('isDeleted'); + @override + late final GeneratedColumn isDeleted = GeneratedColumn( + 'is_deleted', aliasedName, true, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('CHECK ("is_deleted" IN (0, 1))'), + defaultValue: const Constant(false)); + static const VerificationMeta _actionMeta = const VerificationMeta('action'); + @override + late final GeneratedColumn action = GeneratedColumn( + 'action', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _beneficiaryTagsMeta = + const VerificationMeta('beneficiaryTags'); + @override + late final GeneratedColumn beneficiaryTags = GeneratedColumn( + 'beneficiary_tags', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _resourceTagsMeta = + const VerificationMeta('resourceTags'); + @override + late final GeneratedColumn resourceTags = GeneratedColumn( + 'resource_tags', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + @override + List get $columns => [ + id, + tenantId, + projectId, + clientReferenceId, + latitude, + longitude, + locationAccuracy, + boundaryCode, + status, + additionalFields, + auditCreatedBy, + auditCreatedTime, + auditModifiedBy, + auditModifiedTime, + nonRecoverableError, + clientCreatedTime, + clientCreatedBy, + clientModifiedBy, + clientModifiedTime, + rowVersion, + isDeleted, + action, + beneficiaryTags, + resourceTags + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'user_action'; + @override + VerificationContext validateIntegrity(Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } + if (data.containsKey('tenant_id')) { + context.handle(_tenantIdMeta, + tenantId.isAcceptableOrUnknown(data['tenant_id']!, _tenantIdMeta)); + } + if (data.containsKey('project_id')) { + context.handle(_projectIdMeta, + projectId.isAcceptableOrUnknown(data['project_id']!, _projectIdMeta)); + } + if (data.containsKey('client_reference_id')) { + context.handle( + _clientReferenceIdMeta, + clientReferenceId.isAcceptableOrUnknown( + data['client_reference_id']!, _clientReferenceIdMeta)); + } else if (isInserting) { + context.missing(_clientReferenceIdMeta); + } + if (data.containsKey('latitude')) { + context.handle(_latitudeMeta, + latitude.isAcceptableOrUnknown(data['latitude']!, _latitudeMeta)); + } + if (data.containsKey('longitude')) { + context.handle(_longitudeMeta, + longitude.isAcceptableOrUnknown(data['longitude']!, _longitudeMeta)); + } + if (data.containsKey('location_accuracy')) { + context.handle( + _locationAccuracyMeta, + locationAccuracy.isAcceptableOrUnknown( + data['location_accuracy']!, _locationAccuracyMeta)); + } + if (data.containsKey('boundary_code')) { + context.handle( + _boundaryCodeMeta, + boundaryCode.isAcceptableOrUnknown( + data['boundary_code']!, _boundaryCodeMeta)); + } + if (data.containsKey('status')) { + context.handle(_statusMeta, + status.isAcceptableOrUnknown(data['status']!, _statusMeta)); + } + if (data.containsKey('additional_fields')) { + context.handle( + _additionalFieldsMeta, + additionalFields.isAcceptableOrUnknown( + data['additional_fields']!, _additionalFieldsMeta)); + } + if (data.containsKey('audit_created_by')) { + context.handle( + _auditCreatedByMeta, + auditCreatedBy.isAcceptableOrUnknown( + data['audit_created_by']!, _auditCreatedByMeta)); + } + if (data.containsKey('audit_created_time')) { + context.handle( + _auditCreatedTimeMeta, + auditCreatedTime.isAcceptableOrUnknown( + data['audit_created_time']!, _auditCreatedTimeMeta)); + } + if (data.containsKey('audit_modified_by')) { + context.handle( + _auditModifiedByMeta, + auditModifiedBy.isAcceptableOrUnknown( + data['audit_modified_by']!, _auditModifiedByMeta)); + } + if (data.containsKey('audit_modified_time')) { + context.handle( + _auditModifiedTimeMeta, + auditModifiedTime.isAcceptableOrUnknown( + data['audit_modified_time']!, _auditModifiedTimeMeta)); + } + if (data.containsKey('non_recoverable_error')) { + context.handle( + _nonRecoverableErrorMeta, + nonRecoverableError.isAcceptableOrUnknown( + data['non_recoverable_error']!, _nonRecoverableErrorMeta)); + } + if (data.containsKey('client_created_time')) { + context.handle( + _clientCreatedTimeMeta, + clientCreatedTime.isAcceptableOrUnknown( + data['client_created_time']!, _clientCreatedTimeMeta)); + } + if (data.containsKey('client_created_by')) { + context.handle( + _clientCreatedByMeta, + clientCreatedBy.isAcceptableOrUnknown( + data['client_created_by']!, _clientCreatedByMeta)); + } + if (data.containsKey('client_modified_by')) { + context.handle( + _clientModifiedByMeta, + clientModifiedBy.isAcceptableOrUnknown( + data['client_modified_by']!, _clientModifiedByMeta)); + } + if (data.containsKey('client_modified_time')) { + context.handle( + _clientModifiedTimeMeta, + clientModifiedTime.isAcceptableOrUnknown( + data['client_modified_time']!, _clientModifiedTimeMeta)); + } + if (data.containsKey('row_version')) { + context.handle( + _rowVersionMeta, + rowVersion.isAcceptableOrUnknown( + data['row_version']!, _rowVersionMeta)); + } + if (data.containsKey('is_deleted')) { + context.handle(_isDeletedMeta, + isDeleted.isAcceptableOrUnknown(data['is_deleted']!, _isDeletedMeta)); + } + if (data.containsKey('action')) { + context.handle(_actionMeta, + action.isAcceptableOrUnknown(data['action']!, _actionMeta)); + } + if (data.containsKey('beneficiary_tags')) { + context.handle( + _beneficiaryTagsMeta, + beneficiaryTags.isAcceptableOrUnknown( + data['beneficiary_tags']!, _beneficiaryTagsMeta)); + } + if (data.containsKey('resource_tags')) { + context.handle( + _resourceTagsMeta, + resourceTags.isAcceptableOrUnknown( + data['resource_tags']!, _resourceTagsMeta)); + } + return context; + } + + @override + Set get $primaryKey => {auditCreatedBy, clientReferenceId}; + @override + UserActionData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return UserActionData( + id: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}id']), + tenantId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}tenant_id']), + projectId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}project_id']), + clientReferenceId: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}client_reference_id'])!, + latitude: attachedDatabase.typeMapping + .read(DriftSqlType.double, data['${effectivePrefix}latitude']), + longitude: attachedDatabase.typeMapping + .read(DriftSqlType.double, data['${effectivePrefix}longitude']), + locationAccuracy: attachedDatabase.typeMapping.read( + DriftSqlType.double, data['${effectivePrefix}location_accuracy']), + boundaryCode: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}boundary_code']), + status: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}status']), + additionalFields: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}additional_fields']), + auditCreatedBy: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}audit_created_by']), + auditCreatedTime: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}audit_created_time']), + auditModifiedBy: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}audit_modified_by']), + auditModifiedTime: attachedDatabase.typeMapping.read( + DriftSqlType.int, data['${effectivePrefix}audit_modified_time']), + nonRecoverableError: attachedDatabase.typeMapping.read( + DriftSqlType.bool, data['${effectivePrefix}non_recoverable_error']), + clientCreatedTime: attachedDatabase.typeMapping.read( + DriftSqlType.int, data['${effectivePrefix}client_created_time']), + clientCreatedBy: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}client_created_by']), + clientModifiedBy: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}client_modified_by']), + clientModifiedTime: attachedDatabase.typeMapping.read( + DriftSqlType.int, data['${effectivePrefix}client_modified_time']), + rowVersion: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}row_version']), + isDeleted: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}is_deleted']), + action: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}action']), + beneficiaryTags: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}beneficiary_tags']), + resourceTags: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}resource_tags']), + ); + } + + @override + $UserActionTable createAlias(String alias) { + return $UserActionTable(attachedDatabase, alias); + } +} + +class UserActionData extends DataClass implements Insertable { + final String? id; + final String? tenantId; + final String? projectId; + final String clientReferenceId; + final double? latitude; + final double? longitude; + final double? locationAccuracy; + final String? boundaryCode; + final String? status; + final String? additionalFields; + final String? auditCreatedBy; + final int? auditCreatedTime; + final String? auditModifiedBy; + final int? auditModifiedTime; + final bool? nonRecoverableError; + final int? clientCreatedTime; + final String? clientCreatedBy; + final String? clientModifiedBy; + final int? clientModifiedTime; + final int? rowVersion; + final bool? isDeleted; + final String? action; + final String? beneficiaryTags; + final String? resourceTags; + const UserActionData( + {this.id, + this.tenantId, + this.projectId, + required this.clientReferenceId, + this.latitude, + this.longitude, + this.locationAccuracy, + this.boundaryCode, + this.status, + this.additionalFields, + this.auditCreatedBy, + this.auditCreatedTime, + this.auditModifiedBy, + this.auditModifiedTime, + this.nonRecoverableError, + this.clientCreatedTime, + this.clientCreatedBy, + this.clientModifiedBy, + this.clientModifiedTime, + this.rowVersion, + this.isDeleted, + this.action, + this.beneficiaryTags, + this.resourceTags}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (!nullToAbsent || id != null) { + map['id'] = Variable(id); + } + if (!nullToAbsent || tenantId != null) { + map['tenant_id'] = Variable(tenantId); + } + if (!nullToAbsent || projectId != null) { + map['project_id'] = Variable(projectId); + } + map['client_reference_id'] = Variable(clientReferenceId); + if (!nullToAbsent || latitude != null) { + map['latitude'] = Variable(latitude); + } + if (!nullToAbsent || longitude != null) { + map['longitude'] = Variable(longitude); + } + if (!nullToAbsent || locationAccuracy != null) { + map['location_accuracy'] = Variable(locationAccuracy); + } + if (!nullToAbsent || boundaryCode != null) { + map['boundary_code'] = Variable(boundaryCode); + } + if (!nullToAbsent || status != null) { + map['status'] = Variable(status); + } + if (!nullToAbsent || additionalFields != null) { + map['additional_fields'] = Variable(additionalFields); + } + if (!nullToAbsent || auditCreatedBy != null) { + map['audit_created_by'] = Variable(auditCreatedBy); + } + if (!nullToAbsent || auditCreatedTime != null) { + map['audit_created_time'] = Variable(auditCreatedTime); + } + if (!nullToAbsent || auditModifiedBy != null) { + map['audit_modified_by'] = Variable(auditModifiedBy); + } + if (!nullToAbsent || auditModifiedTime != null) { + map['audit_modified_time'] = Variable(auditModifiedTime); + } + if (!nullToAbsent || nonRecoverableError != null) { + map['non_recoverable_error'] = Variable(nonRecoverableError); + } + if (!nullToAbsent || clientCreatedTime != null) { + map['client_created_time'] = Variable(clientCreatedTime); + } + if (!nullToAbsent || clientCreatedBy != null) { + map['client_created_by'] = Variable(clientCreatedBy); + } + if (!nullToAbsent || clientModifiedBy != null) { + map['client_modified_by'] = Variable(clientModifiedBy); + } + if (!nullToAbsent || clientModifiedTime != null) { + map['client_modified_time'] = Variable(clientModifiedTime); + } + if (!nullToAbsent || rowVersion != null) { + map['row_version'] = Variable(rowVersion); + } + if (!nullToAbsent || isDeleted != null) { + map['is_deleted'] = Variable(isDeleted); + } + if (!nullToAbsent || action != null) { + map['action'] = Variable(action); + } + if (!nullToAbsent || beneficiaryTags != null) { + map['beneficiary_tags'] = Variable(beneficiaryTags); + } + if (!nullToAbsent || resourceTags != null) { + map['resource_tags'] = Variable(resourceTags); + } + return map; + } + + UserActionCompanion toCompanion(bool nullToAbsent) { + return UserActionCompanion( + id: id == null && nullToAbsent ? const Value.absent() : Value(id), + tenantId: tenantId == null && nullToAbsent + ? const Value.absent() + : Value(tenantId), + projectId: projectId == null && nullToAbsent + ? const Value.absent() + : Value(projectId), + clientReferenceId: Value(clientReferenceId), + latitude: latitude == null && nullToAbsent + ? const Value.absent() + : Value(latitude), + longitude: longitude == null && nullToAbsent + ? const Value.absent() + : Value(longitude), + locationAccuracy: locationAccuracy == null && nullToAbsent + ? const Value.absent() + : Value(locationAccuracy), + boundaryCode: boundaryCode == null && nullToAbsent + ? const Value.absent() + : Value(boundaryCode), + status: + status == null && nullToAbsent ? const Value.absent() : Value(status), + additionalFields: additionalFields == null && nullToAbsent + ? const Value.absent() + : Value(additionalFields), + auditCreatedBy: auditCreatedBy == null && nullToAbsent + ? const Value.absent() + : Value(auditCreatedBy), + auditCreatedTime: auditCreatedTime == null && nullToAbsent + ? const Value.absent() + : Value(auditCreatedTime), + auditModifiedBy: auditModifiedBy == null && nullToAbsent + ? const Value.absent() + : Value(auditModifiedBy), + auditModifiedTime: auditModifiedTime == null && nullToAbsent + ? const Value.absent() + : Value(auditModifiedTime), + nonRecoverableError: nonRecoverableError == null && nullToAbsent + ? const Value.absent() + : Value(nonRecoverableError), + clientCreatedTime: clientCreatedTime == null && nullToAbsent + ? const Value.absent() + : Value(clientCreatedTime), + clientCreatedBy: clientCreatedBy == null && nullToAbsent + ? const Value.absent() + : Value(clientCreatedBy), + clientModifiedBy: clientModifiedBy == null && nullToAbsent + ? const Value.absent() + : Value(clientModifiedBy), + clientModifiedTime: clientModifiedTime == null && nullToAbsent + ? const Value.absent() + : Value(clientModifiedTime), + rowVersion: rowVersion == null && nullToAbsent + ? const Value.absent() + : Value(rowVersion), + isDeleted: isDeleted == null && nullToAbsent + ? const Value.absent() + : Value(isDeleted), + action: + action == null && nullToAbsent ? const Value.absent() : Value(action), + beneficiaryTags: beneficiaryTags == null && nullToAbsent + ? const Value.absent() + : Value(beneficiaryTags), + resourceTags: resourceTags == null && nullToAbsent + ? const Value.absent() + : Value(resourceTags), + ); + } + + factory UserActionData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return UserActionData( + id: serializer.fromJson(json['id']), + tenantId: serializer.fromJson(json['tenantId']), + projectId: serializer.fromJson(json['projectId']), + clientReferenceId: serializer.fromJson(json['clientReferenceId']), + latitude: serializer.fromJson(json['latitude']), + longitude: serializer.fromJson(json['longitude']), + locationAccuracy: serializer.fromJson(json['locationAccuracy']), + boundaryCode: serializer.fromJson(json['boundaryCode']), + status: serializer.fromJson(json['status']), + additionalFields: serializer.fromJson(json['additionalFields']), + auditCreatedBy: serializer.fromJson(json['auditCreatedBy']), + auditCreatedTime: serializer.fromJson(json['auditCreatedTime']), + auditModifiedBy: serializer.fromJson(json['auditModifiedBy']), + auditModifiedTime: serializer.fromJson(json['auditModifiedTime']), + nonRecoverableError: + serializer.fromJson(json['nonRecoverableError']), + clientCreatedTime: serializer.fromJson(json['clientCreatedTime']), + clientCreatedBy: serializer.fromJson(json['clientCreatedBy']), + clientModifiedBy: serializer.fromJson(json['clientModifiedBy']), + clientModifiedTime: serializer.fromJson(json['clientModifiedTime']), + rowVersion: serializer.fromJson(json['rowVersion']), + isDeleted: serializer.fromJson(json['isDeleted']), + action: serializer.fromJson(json['action']), + beneficiaryTags: serializer.fromJson(json['beneficiaryTags']), + resourceTags: serializer.fromJson(json['resourceTags']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'tenantId': serializer.toJson(tenantId), + 'projectId': serializer.toJson(projectId), + 'clientReferenceId': serializer.toJson(clientReferenceId), + 'latitude': serializer.toJson(latitude), + 'longitude': serializer.toJson(longitude), + 'locationAccuracy': serializer.toJson(locationAccuracy), + 'boundaryCode': serializer.toJson(boundaryCode), + 'status': serializer.toJson(status), + 'additionalFields': serializer.toJson(additionalFields), + 'auditCreatedBy': serializer.toJson(auditCreatedBy), + 'auditCreatedTime': serializer.toJson(auditCreatedTime), + 'auditModifiedBy': serializer.toJson(auditModifiedBy), + 'auditModifiedTime': serializer.toJson(auditModifiedTime), + 'nonRecoverableError': serializer.toJson(nonRecoverableError), + 'clientCreatedTime': serializer.toJson(clientCreatedTime), + 'clientCreatedBy': serializer.toJson(clientCreatedBy), + 'clientModifiedBy': serializer.toJson(clientModifiedBy), + 'clientModifiedTime': serializer.toJson(clientModifiedTime), + 'rowVersion': serializer.toJson(rowVersion), + 'isDeleted': serializer.toJson(isDeleted), + 'action': serializer.toJson(action), + 'beneficiaryTags': serializer.toJson(beneficiaryTags), + 'resourceTags': serializer.toJson(resourceTags), + }; + } + + UserActionData copyWith( + {Value id = const Value.absent(), + Value tenantId = const Value.absent(), + Value projectId = const Value.absent(), + String? clientReferenceId, + Value latitude = const Value.absent(), + Value longitude = const Value.absent(), + Value locationAccuracy = const Value.absent(), + Value boundaryCode = const Value.absent(), + Value status = const Value.absent(), + Value additionalFields = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value rowVersion = const Value.absent(), + Value isDeleted = const Value.absent(), + Value action = const Value.absent(), + Value beneficiaryTags = const Value.absent(), + Value resourceTags = const Value.absent()}) => + UserActionData( + id: id.present ? id.value : this.id, + tenantId: tenantId.present ? tenantId.value : this.tenantId, + projectId: projectId.present ? projectId.value : this.projectId, + clientReferenceId: clientReferenceId ?? this.clientReferenceId, + latitude: latitude.present ? latitude.value : this.latitude, + longitude: longitude.present ? longitude.value : this.longitude, + locationAccuracy: locationAccuracy.present + ? locationAccuracy.value + : this.locationAccuracy, + boundaryCode: + boundaryCode.present ? boundaryCode.value : this.boundaryCode, + status: status.present ? status.value : this.status, + additionalFields: additionalFields.present + ? additionalFields.value + : this.additionalFields, + auditCreatedBy: + auditCreatedBy.present ? auditCreatedBy.value : this.auditCreatedBy, + auditCreatedTime: auditCreatedTime.present + ? auditCreatedTime.value + : this.auditCreatedTime, + auditModifiedBy: auditModifiedBy.present + ? auditModifiedBy.value + : this.auditModifiedBy, + auditModifiedTime: auditModifiedTime.present + ? auditModifiedTime.value + : this.auditModifiedTime, + nonRecoverableError: nonRecoverableError.present + ? nonRecoverableError.value + : this.nonRecoverableError, + clientCreatedTime: clientCreatedTime.present + ? clientCreatedTime.value + : this.clientCreatedTime, + clientCreatedBy: clientCreatedBy.present + ? clientCreatedBy.value + : this.clientCreatedBy, + clientModifiedBy: clientModifiedBy.present + ? clientModifiedBy.value + : this.clientModifiedBy, + clientModifiedTime: clientModifiedTime.present + ? clientModifiedTime.value + : this.clientModifiedTime, + rowVersion: rowVersion.present ? rowVersion.value : this.rowVersion, + isDeleted: isDeleted.present ? isDeleted.value : this.isDeleted, + action: action.present ? action.value : this.action, + beneficiaryTags: beneficiaryTags.present + ? beneficiaryTags.value + : this.beneficiaryTags, + resourceTags: + resourceTags.present ? resourceTags.value : this.resourceTags, + ); + @override + String toString() { + return (StringBuffer('UserActionData(') + ..write('id: $id, ') + ..write('tenantId: $tenantId, ') + ..write('projectId: $projectId, ') + ..write('clientReferenceId: $clientReferenceId, ') + ..write('latitude: $latitude, ') + ..write('longitude: $longitude, ') + ..write('locationAccuracy: $locationAccuracy, ') + ..write('boundaryCode: $boundaryCode, ') + ..write('status: $status, ') + ..write('additionalFields: $additionalFields, ') + ..write('auditCreatedBy: $auditCreatedBy, ') + ..write('auditCreatedTime: $auditCreatedTime, ') + ..write('auditModifiedBy: $auditModifiedBy, ') + ..write('auditModifiedTime: $auditModifiedTime, ') + ..write('nonRecoverableError: $nonRecoverableError, ') + ..write('clientCreatedTime: $clientCreatedTime, ') + ..write('clientCreatedBy: $clientCreatedBy, ') + ..write('clientModifiedBy: $clientModifiedBy, ') + ..write('clientModifiedTime: $clientModifiedTime, ') + ..write('rowVersion: $rowVersion, ') + ..write('isDeleted: $isDeleted, ') + ..write('action: $action, ') + ..write('beneficiaryTags: $beneficiaryTags, ') + ..write('resourceTags: $resourceTags') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hashAll([ + id, + tenantId, + projectId, + clientReferenceId, + latitude, + longitude, + locationAccuracy, + boundaryCode, + status, + additionalFields, + auditCreatedBy, + auditCreatedTime, + auditModifiedBy, + auditModifiedTime, + nonRecoverableError, + clientCreatedTime, + clientCreatedBy, + clientModifiedBy, + clientModifiedTime, + rowVersion, + isDeleted, + action, + beneficiaryTags, + resourceTags + ]); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is UserActionData && + other.id == this.id && + other.tenantId == this.tenantId && + other.projectId == this.projectId && + other.clientReferenceId == this.clientReferenceId && + other.latitude == this.latitude && + other.longitude == this.longitude && + other.locationAccuracy == this.locationAccuracy && + other.boundaryCode == this.boundaryCode && + other.status == this.status && + other.additionalFields == this.additionalFields && + other.auditCreatedBy == this.auditCreatedBy && + other.auditCreatedTime == this.auditCreatedTime && + other.auditModifiedBy == this.auditModifiedBy && + other.auditModifiedTime == this.auditModifiedTime && + other.nonRecoverableError == this.nonRecoverableError && + other.clientCreatedTime == this.clientCreatedTime && + other.clientCreatedBy == this.clientCreatedBy && + other.clientModifiedBy == this.clientModifiedBy && + other.clientModifiedTime == this.clientModifiedTime && + other.rowVersion == this.rowVersion && + other.isDeleted == this.isDeleted && + other.action == this.action && + other.beneficiaryTags == this.beneficiaryTags && + other.resourceTags == this.resourceTags); +} + +class UserActionCompanion extends UpdateCompanion { + final Value id; + final Value tenantId; + final Value projectId; + final Value clientReferenceId; + final Value latitude; + final Value longitude; + final Value locationAccuracy; + final Value boundaryCode; + final Value status; + final Value additionalFields; + final Value auditCreatedBy; + final Value auditCreatedTime; + final Value auditModifiedBy; + final Value auditModifiedTime; + final Value nonRecoverableError; + final Value clientCreatedTime; + final Value clientCreatedBy; + final Value clientModifiedBy; + final Value clientModifiedTime; + final Value rowVersion; + final Value isDeleted; + final Value action; + final Value beneficiaryTags; + final Value resourceTags; + final Value rowid; + const UserActionCompanion({ + this.id = const Value.absent(), + this.tenantId = const Value.absent(), + this.projectId = const Value.absent(), + this.clientReferenceId = const Value.absent(), + this.latitude = const Value.absent(), + this.longitude = const Value.absent(), + this.locationAccuracy = const Value.absent(), + this.boundaryCode = const Value.absent(), + this.status = const Value.absent(), + this.additionalFields = const Value.absent(), + this.auditCreatedBy = const Value.absent(), + this.auditCreatedTime = const Value.absent(), + this.auditModifiedBy = const Value.absent(), + this.auditModifiedTime = const Value.absent(), + this.nonRecoverableError = const Value.absent(), + this.clientCreatedTime = const Value.absent(), + this.clientCreatedBy = const Value.absent(), + this.clientModifiedBy = const Value.absent(), + this.clientModifiedTime = const Value.absent(), + this.rowVersion = const Value.absent(), + this.isDeleted = const Value.absent(), + this.action = const Value.absent(), + this.beneficiaryTags = const Value.absent(), + this.resourceTags = const Value.absent(), + this.rowid = const Value.absent(), + }); + UserActionCompanion.insert({ + this.id = const Value.absent(), + this.tenantId = const Value.absent(), + this.projectId = const Value.absent(), + required String clientReferenceId, + this.latitude = const Value.absent(), + this.longitude = const Value.absent(), + this.locationAccuracy = const Value.absent(), + this.boundaryCode = const Value.absent(), + this.status = const Value.absent(), + this.additionalFields = const Value.absent(), + this.auditCreatedBy = const Value.absent(), + this.auditCreatedTime = const Value.absent(), + this.auditModifiedBy = const Value.absent(), + this.auditModifiedTime = const Value.absent(), + this.nonRecoverableError = const Value.absent(), + this.clientCreatedTime = const Value.absent(), + this.clientCreatedBy = const Value.absent(), + this.clientModifiedBy = const Value.absent(), + this.clientModifiedTime = const Value.absent(), + this.rowVersion = const Value.absent(), + this.isDeleted = const Value.absent(), + this.action = const Value.absent(), + this.beneficiaryTags = const Value.absent(), + this.resourceTags = const Value.absent(), + this.rowid = const Value.absent(), + }) : clientReferenceId = Value(clientReferenceId); + static Insertable custom({ + Expression? id, + Expression? tenantId, + Expression? projectId, + Expression? clientReferenceId, + Expression? latitude, + Expression? longitude, + Expression? locationAccuracy, + Expression? boundaryCode, + Expression? status, + Expression? additionalFields, + Expression? auditCreatedBy, + Expression? auditCreatedTime, + Expression? auditModifiedBy, + Expression? auditModifiedTime, + Expression? nonRecoverableError, + Expression? clientCreatedTime, + Expression? clientCreatedBy, + Expression? clientModifiedBy, + Expression? clientModifiedTime, + Expression? rowVersion, + Expression? isDeleted, + Expression? action, + Expression? beneficiaryTags, + Expression? resourceTags, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (tenantId != null) 'tenant_id': tenantId, + if (projectId != null) 'project_id': projectId, + if (clientReferenceId != null) 'client_reference_id': clientReferenceId, + if (latitude != null) 'latitude': latitude, + if (longitude != null) 'longitude': longitude, + if (locationAccuracy != null) 'location_accuracy': locationAccuracy, + if (boundaryCode != null) 'boundary_code': boundaryCode, + if (status != null) 'status': status, + if (additionalFields != null) 'additional_fields': additionalFields, + if (auditCreatedBy != null) 'audit_created_by': auditCreatedBy, + if (auditCreatedTime != null) 'audit_created_time': auditCreatedTime, + if (auditModifiedBy != null) 'audit_modified_by': auditModifiedBy, + if (auditModifiedTime != null) 'audit_modified_time': auditModifiedTime, + if (nonRecoverableError != null) + 'non_recoverable_error': nonRecoverableError, + if (clientCreatedTime != null) 'client_created_time': clientCreatedTime, + if (clientCreatedBy != null) 'client_created_by': clientCreatedBy, + if (clientModifiedBy != null) 'client_modified_by': clientModifiedBy, + if (clientModifiedTime != null) + 'client_modified_time': clientModifiedTime, + if (rowVersion != null) 'row_version': rowVersion, + if (isDeleted != null) 'is_deleted': isDeleted, + if (action != null) 'action': action, + if (beneficiaryTags != null) 'beneficiary_tags': beneficiaryTags, + if (resourceTags != null) 'resource_tags': resourceTags, + if (rowid != null) 'rowid': rowid, + }); + } + + UserActionCompanion copyWith( + {Value? id, + Value? tenantId, + Value? projectId, + Value? clientReferenceId, + Value? latitude, + Value? longitude, + Value? locationAccuracy, + Value? boundaryCode, + Value? status, + Value? additionalFields, + Value? auditCreatedBy, + Value? auditCreatedTime, + Value? auditModifiedBy, + Value? auditModifiedTime, + Value? nonRecoverableError, + Value? clientCreatedTime, + Value? clientCreatedBy, + Value? clientModifiedBy, + Value? clientModifiedTime, + Value? rowVersion, + Value? isDeleted, + Value? action, + Value? beneficiaryTags, + Value? resourceTags, + Value? rowid}) { + return UserActionCompanion( + id: id ?? this.id, + tenantId: tenantId ?? this.tenantId, + projectId: projectId ?? this.projectId, + clientReferenceId: clientReferenceId ?? this.clientReferenceId, + latitude: latitude ?? this.latitude, + longitude: longitude ?? this.longitude, + locationAccuracy: locationAccuracy ?? this.locationAccuracy, + boundaryCode: boundaryCode ?? this.boundaryCode, + status: status ?? this.status, + additionalFields: additionalFields ?? this.additionalFields, + auditCreatedBy: auditCreatedBy ?? this.auditCreatedBy, + auditCreatedTime: auditCreatedTime ?? this.auditCreatedTime, + auditModifiedBy: auditModifiedBy ?? this.auditModifiedBy, + auditModifiedTime: auditModifiedTime ?? this.auditModifiedTime, + nonRecoverableError: nonRecoverableError ?? this.nonRecoverableError, + clientCreatedTime: clientCreatedTime ?? this.clientCreatedTime, + clientCreatedBy: clientCreatedBy ?? this.clientCreatedBy, + clientModifiedBy: clientModifiedBy ?? this.clientModifiedBy, + clientModifiedTime: clientModifiedTime ?? this.clientModifiedTime, + rowVersion: rowVersion ?? this.rowVersion, + isDeleted: isDeleted ?? this.isDeleted, + action: action ?? this.action, + beneficiaryTags: beneficiaryTags ?? this.beneficiaryTags, + resourceTags: resourceTags ?? this.resourceTags, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (tenantId.present) { + map['tenant_id'] = Variable(tenantId.value); + } + if (projectId.present) { + map['project_id'] = Variable(projectId.value); + } + if (clientReferenceId.present) { + map['client_reference_id'] = Variable(clientReferenceId.value); + } + if (latitude.present) { + map['latitude'] = Variable(latitude.value); + } + if (longitude.present) { + map['longitude'] = Variable(longitude.value); + } + if (locationAccuracy.present) { + map['location_accuracy'] = Variable(locationAccuracy.value); + } + if (boundaryCode.present) { + map['boundary_code'] = Variable(boundaryCode.value); + } + if (status.present) { + map['status'] = Variable(status.value); + } + if (additionalFields.present) { + map['additional_fields'] = Variable(additionalFields.value); + } + if (auditCreatedBy.present) { + map['audit_created_by'] = Variable(auditCreatedBy.value); + } + if (auditCreatedTime.present) { + map['audit_created_time'] = Variable(auditCreatedTime.value); + } + if (auditModifiedBy.present) { + map['audit_modified_by'] = Variable(auditModifiedBy.value); + } + if (auditModifiedTime.present) { + map['audit_modified_time'] = Variable(auditModifiedTime.value); + } + if (nonRecoverableError.present) { + map['non_recoverable_error'] = Variable(nonRecoverableError.value); + } + if (clientCreatedTime.present) { + map['client_created_time'] = Variable(clientCreatedTime.value); + } + if (clientCreatedBy.present) { + map['client_created_by'] = Variable(clientCreatedBy.value); + } + if (clientModifiedBy.present) { + map['client_modified_by'] = Variable(clientModifiedBy.value); + } + if (clientModifiedTime.present) { + map['client_modified_time'] = Variable(clientModifiedTime.value); + } + if (rowVersion.present) { + map['row_version'] = Variable(rowVersion.value); + } + if (isDeleted.present) { + map['is_deleted'] = Variable(isDeleted.value); + } + if (action.present) { + map['action'] = Variable(action.value); + } + if (beneficiaryTags.present) { + map['beneficiary_tags'] = Variable(beneficiaryTags.value); + } + if (resourceTags.present) { + map['resource_tags'] = Variable(resourceTags.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('UserActionCompanion(') + ..write('id: $id, ') + ..write('tenantId: $tenantId, ') + ..write('projectId: $projectId, ') + ..write('clientReferenceId: $clientReferenceId, ') + ..write('latitude: $latitude, ') + ..write('longitude: $longitude, ') + ..write('locationAccuracy: $locationAccuracy, ') + ..write('boundaryCode: $boundaryCode, ') + ..write('status: $status, ') + ..write('additionalFields: $additionalFields, ') + ..write('auditCreatedBy: $auditCreatedBy, ') + ..write('auditCreatedTime: $auditCreatedTime, ') + ..write('auditModifiedBy: $auditModifiedBy, ') + ..write('auditModifiedTime: $auditModifiedTime, ') + ..write('nonRecoverableError: $nonRecoverableError, ') + ..write('clientCreatedTime: $clientCreatedTime, ') + ..write('clientCreatedBy: $clientCreatedBy, ') + ..write('clientModifiedBy: $clientModifiedBy, ') + ..write('clientModifiedTime: $clientModifiedTime, ') + ..write('rowVersion: $rowVersion, ') + ..write('isDeleted: $isDeleted, ') + ..write('action: $action, ') + ..write('beneficiaryTags: $beneficiaryTags, ') + ..write('resourceTags: $resourceTags, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + abstract class _$LocalSqlDataStore extends GeneratedDatabase { _$LocalSqlDataStore(QueryExecutor e) : super(e); late final $AttendanceRegisterTable attendanceRegister = @@ -38747,6 +39864,7 @@ abstract class _$LocalSqlDataStore extends GeneratedDatabase { late final $TaskResourceTable taskResource = $TaskResourceTable(this); late final $SideEffectTable sideEffect = $SideEffectTable(this); late final $ReferralTable referral = $ReferralTable(this); + late final $UserActionTable userAction = $UserActionTable(this); late final Index attendanceClientref = Index('attendance_clientref', 'CREATE INDEX attendance_clientref ON attendance (client_reference_id)'); late final Index attendanceIndividualid = Index('attendance_individualid', @@ -38857,6 +39975,7 @@ abstract class _$LocalSqlDataStore extends GeneratedDatabase { taskResource, sideEffect, referral, + userAction, attendanceClientref, attendanceIndividualid, projectClinetref, diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/user_action.dart b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/user_action.dart new file mode 100644 index 000000000..d83da4c7a --- /dev/null +++ b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/user_action.dart @@ -0,0 +1,40 @@ +import 'package:drift/drift.dart'; + +class UserAction extends Table { + TextColumn get id => text().nullable()(); + TextColumn get tenantId => text().nullable()(); + TextColumn get projectId => text().nullable()(); + TextColumn get clientReferenceId => text()(); + RealColumn get latitude => real().nullable()(); + RealColumn get longitude => real().nullable()(); + RealColumn get locationAccuracy => real().nullable()(); + TextColumn get boundaryCode => text().nullable()(); + TextColumn get status => text().nullable()(); + TextColumn get additionalFields => text().nullable()(); + TextColumn get auditCreatedBy => text().nullable()(); + IntColumn get auditCreatedTime => integer().nullable()(); + TextColumn get auditModifiedBy => text().nullable()(); + IntColumn get auditModifiedTime => integer().nullable()(); + BoolColumn get nonRecoverableError => + boolean().nullable().withDefault(const Constant(false))(); + + IntColumn get clientCreatedTime => integer().nullable()(); + TextColumn get clientCreatedBy => text().nullable()(); + TextColumn get clientModifiedBy => text().nullable()(); + IntColumn get clientModifiedTime => integer().nullable()(); + + IntColumn get rowVersion => integer().nullable()(); + BoolColumn get isDeleted => + boolean().nullable().withDefault(const Constant(false))(); + + TextColumn get action => text().nullable()(); + TextColumn get beneficiaryTags => text().nullable()(); + TextColumn get resourceTags => text().nullable()(); + + + @override + Set get primaryKey => { + auditCreatedBy, + clientReferenceId, + }; +} diff --git a/packages/digit_data_model/lib/data_model.dart b/packages/digit_data_model/lib/data_model.dart index 15e7ae7be..cd9c5769c 100644 --- a/packages/digit_data_model/lib/data_model.dart +++ b/packages/digit_data_model/lib/data_model.dart @@ -277,4 +277,5 @@ enum DataModelType { hFReferral, attendanceRegister, attendance, + userAction, } diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 27c4a6008..db910c2a5 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "4eec93681221723a686ad580c2e7d960e1017cf1a4e0a263c2573c2c6b0bf5cd" + url: "https://pub.dev" + source: hosted + version: "1.3.25" analyzer: dependency: transitive description: @@ -432,6 +440,13 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.2" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_scanner: dependency: "direct main" description: @@ -512,6 +527,46 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "53316975310c8af75a96e365f9fccb67d1c544ef0acdbf0d88bbe30eedd1c4f9" + url: "https://pub.dev" + source: hosted + version: "2.27.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: "1003a5a03a61fc9a22ef49f37cbcb9e46c86313a7b2e7029b9390cf8c6fc32cb" + url: "https://pub.dev" + source: hosted + version: "5.1.0" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: c8e1d59385eee98de63c92f961d2a7062c5d9a65e7f45bdc7f1b0b205aab2492 + url: "https://pub.dev" + source: hosted + version: "2.11.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: c4f1b723d417bc9c4774810e774ff91df8fb0032d33fb2888b2c887e865581b8 + url: "https://pub.dev" + source: hosted + version: "3.4.18" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: c5a11fca3df76a98e3fa68fde8b10a08aacb9a7639f619fbfd4dad6c67a08643 + url: "https://pub.dev" + source: hosted + version: "3.6.25" fixnum: dependency: transitive description: diff --git a/tools/closed_household_package_imports.dart b/tools/closed_household_package_imports.dart new file mode 100644 index 000000000..372e4d65a --- /dev/null +++ b/tools/closed_household_package_imports.dart @@ -0,0 +1,58 @@ +import 'dart:io'; + +void main() { + var appDir = Directory.current.path; + + // Define the paths + var appRoot = '$appDir/apps/health_campaign_field_worker_app/lib'; + var localizationDelegatesFilePath = + '$appRoot/utils/localization_delegates.dart'; + + _createLocalizationDelegatesFile(localizationDelegatesFilePath); + + // Run dart format on the localization_delegates.dart file + Process.run('dart', ['format', localizationDelegatesFilePath]) + .then((ProcessResult results) { + print(results.stdout); + }); +} + +void _createLocalizationDelegatesFile(String localizationDelegatesFilePath) { + // Define the import statement and delegate for localization + var importStatement = + "import 'package:closed_household/blocs/app_localization.dart'\n as closed_household_localization;"; + var delegate = + "closed_household_localization.ClosedHouseholdLocalization.getDelegate(\n getLocalizationString(\n isar,\n selectedLocale,\n ),\n appConfig.languages!,\n ),"; + + // Read the localization delegates file + var localizationDelegatesFile = File(localizationDelegatesFilePath); + var localizationDelegatesFileContent = + localizationDelegatesFile.readAsStringSync(); + + var normalizedFileContent = + localizationDelegatesFileContent.replaceAll(RegExp(r'\s'), ''); + + // Check if the import statement and delegate already exist in the file + // If not, add them to the file + if (!normalizedFileContent + .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { + localizationDelegatesFileContent = + '$importStatement\n$localizationDelegatesFileContent'; + print('The import statement was added.'); + } + + if (!normalizedFileContent.contains(delegate.replaceAll(RegExp(r'\s'), ''))) { + var lastDelegateIndex = + localizationDelegatesFileContent.lastIndexOf(RegExp(r',')); + if (lastDelegateIndex != -1) { + localizationDelegatesFileContent = + localizationDelegatesFileContent.substring(0, lastDelegateIndex + 1) + + '\n $delegate' + + localizationDelegatesFileContent.substring(lastDelegateIndex + 1); + print('The delegate was added.'); + } + } + + // Write the updated content back to the file + localizationDelegatesFile.writeAsStringSync(localizationDelegatesFileContent); +} From 9ba7186ec2de8038fbf17ccef0cdf6b1a359046c Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Thu, 18 Jul 2024 14:10:55 +0530 Subject: [PATCH 056/241] HCMPRE-98 - Inventory TeamCode fixes, Filter search fixes (#460) * added translator for administration area * Fixed Facility search based on tenant ID * Added disable battery optimization permission for background service * Added disable battery optimization ask permission on App start and background service start * HLM-5984:: Get Precise location on Submitting latitude longitude details * Reverted install_bricks.sh * added new status REGISTERED, NOT_REGISTERED updated conditional check for status by project beneficiaries * added static status_filter.dart integration in search_beneficiary.dart * TODO for selected_filters display condition * integrated household search filters with mdms implemented search based on filters with pagination for Registered and NotRegistered * updated status filter component merge with develop * create individual_global_search and implemented search * Auto Create Project Beneficiary on Edit Household, and disable record delivery if no project beneficiary present * Conflicts resolved * implemented household_global_search.dart fixed individual_global_search.dart * updated proximity search for household_global_search.dart * Pop State recapture during registration flow, Disable delivery flow for individual based campaign if project beneficiaries is empty (#456) * updated class state from private for customization override in registration_delivery and inventory added pagination for filter search TODO: combination search for registered and not registered needs fix which return only last selected results * adding missed changes for last commit * displaying selected filter value for applied filters in search_beneficiary.dart * updated changelog for inventory and registration_delivery for new dev versions * updated pubspec lock of registration_delivery * removed multiple filter selection modified filter search * fixed delivery team scanner issues in stock_details.dart * Fixed - missing addition of scanned resources to additional fields filter search bug fixes * HCMPRE-74, HCMPRE-82, HCMPRE-83:: Household Reload Fix, Validations for Household details added (#458) * updated individual global search added beneficiary type check in view_beneficiary_card.dart removed commented code in household_overview.dart * Added null check for beneficiaryTag in closed_household_summary.dart --------- Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> --- .../pubspec.lock | 13 +- .../lib/pages/closed_household_summary.dart | 2 +- packages/inventory_management/CHANGELOG.md | 7 +- .../lib/pages/record_stock/stock_details.dart | 57 ++- .../pages/record_stock/warehouse_details.dart | 2 +- packages/inventory_management/pubspec.yaml | 2 +- packages/registration_delivery/CHANGELOG.md | 7 +- .../local/household_global_search.dart | 158 +++---- .../local/individual_global_search.dart | 96 ++-- .../pages/beneficiary/household_overview.dart | 42 +- .../household_details.dart | 413 ++++++++++-------- .../individual_details.dart | 19 +- .../lib/pages/search_beneficiary.dart | 24 +- .../lib/utils/i18_key_constants.dart | 4 +- .../beneficiary/view_beneficiary_card.dart | 22 +- .../lib/widgets/member_card/member_card.dart | 56 +-- .../widgets/status_filter/status_filter.dart | 2 +- 17 files changed, 479 insertions(+), 447 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 5464bb0a4..8bad5620b 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -492,7 +492,7 @@ packages: path: "../../packages/digit_components" relative: true source: path - version: "1.0.0+3" + version: "1.0.0+5" digit_data_model: dependency: "direct main" description: @@ -517,9 +517,10 @@ packages: digit_showcase: dependency: "direct main" description: - path: "../../packages/digit_showcase" - relative: true - source: path + name: digit_showcase + sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" + url: "https://pub.dev" + source: hosted version: "1.0.0" dio: dependency: "direct main" @@ -1106,7 +1107,7 @@ packages: path: "../../packages/inventory_management" relative: true source: path - version: "1.0.2+1" + version: "0.0.0-dev.11" io: dependency: transitive description: @@ -1528,7 +1529,7 @@ packages: path: "../../packages/registration_delivery" relative: true source: path - version: "1.0.2+1" + version: "0.0.0-dev.10" remove_emoji_input_formatter: dependency: transitive description: diff --git a/packages/closed_household/lib/pages/closed_household_summary.dart b/packages/closed_household/lib/pages/closed_household_summary.dart index d87765c95..a141cf5f8 100644 --- a/packages/closed_household/lib/pages/closed_household_summary.dart +++ b/packages/closed_household/lib/pages/closed_household_summary.dart @@ -124,7 +124,7 @@ class _ClosedHouseholdSummaryPageState householdState.summary?.locationAccuracy, additionalFields: householdState.summary?.additionalFields, - beneficiaryTag: scannerState.qrCodes.first, + beneficiaryTag: scannerState.qrCodes.isNotEmpty ? scannerState.qrCodes.first : null, clientAuditDetails: ClientAuditDetails( createdBy: ClosedHouseholdSingleton().loggedInUserUuid!, diff --git a/packages/inventory_management/CHANGELOG.md b/packages/inventory_management/CHANGELOG.md index 365d5f9d0..fb268de06 100644 --- a/packages/inventory_management/CHANGELOG.md +++ b/packages/inventory_management/CHANGELOG.md @@ -56,4 +56,9 @@ ## 0.0.0-dev.10 * Updated PageState class to public for customization -* Updated digit_components \ No newline at end of file +* Updated digit_components + +## 0.0.0-dev.11 + +* Added DeliveryTeam Facility in record stock screen +* Added scanned resources to additional fields \ No newline at end of file diff --git a/packages/inventory_management/lib/pages/record_stock/stock_details.dart b/packages/inventory_management/lib/pages/record_stock/stock_details.dart index f733b38c7..f3df593d7 100644 --- a/packages/inventory_management/lib/pages/record_stock/stock_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/stock_details.dart @@ -49,6 +49,8 @@ class StockDetailsPageState extends LocalizedState { String? selectedFacilityId; List transportTypes = []; + List scannedResources = []; + FormGroup _form(StockRecordEntryType stockType) { return fb.group({ _productVariantKey: FormControl(), @@ -184,6 +186,11 @@ class StockDetailsPageState extends LocalizedState { builder: (context, form, child) { return BlocBuilder( builder: (context, scannerState) { + if (scannerState.barCodes.isNotEmpty) { + scannedResources.clear(); + scannedResources.addAll(scannerState.barCodes); + } + return ScrollableContent( header: Column(children: [ BackNavigationHelpHeaderWidget( @@ -213,8 +220,20 @@ class StockDetailsPageState extends LocalizedState { 0, ), child: ReactiveFormConsumer( - builder: (context, form, child) => - DigitElevatedButton( + builder: (context, form, child) { + if (form + .control(_deliveryTeamKey) + .value + .toString() + .isEmpty || + form.control(_deliveryTeamKey).value == null || + scannerState.qrCodes.isNotEmpty) { + form.control(_deliveryTeamKey).value = + scannerState.qrCodes.isNotEmpty + ? scannerState.qrCodes.last + : ''; + } + return DigitElevatedButton( onPressed: !form.valid ? null : () async { @@ -543,6 +562,12 @@ class StockDetailsPageState extends LocalizedState { lng, ), ], + if (scannerState + .barCodes + .isNotEmpty) + addBarCodesToFields( + scannerState + .barCodes), ], ) : null, @@ -619,8 +644,8 @@ class StockDetailsPageState extends LocalizedState { .translate(i18.common.coreCommonSubmit), ), ), - ), - ), + ); + }), ), children: [ DigitCard( @@ -704,7 +729,7 @@ class StockDetailsPageState extends LocalizedState { await context.router.push( InventoryFacilitySelectionRoute( facilities: - facilities)) + allFacilities)) as FacilityModel?; if (facility == null) return; @@ -760,7 +785,7 @@ class StockDetailsPageState extends LocalizedState { final facility = await context.router.push( InventoryFacilitySelectionRoute( - facilities: facilities, + facilities: allFacilities, ), ) as FacilityModel?; @@ -1022,14 +1047,12 @@ class StockDetailsPageState extends LocalizedState { ), ], ), - ...scannerState.barCodes - .map((e) => Align( - alignment: - Alignment.centerLeft, - child: Text(e.elements.values - .first.data - .toString()), - )) + ...scannedResources.map((e) => Align( + alignment: Alignment.centerLeft, + child: Text(e + .elements.values.first.data + .toString()), + )) ]) ], ), @@ -1069,7 +1092,7 @@ class StockDetailsPageState extends LocalizedState { /// /// @param barCodes The list of GS1Barcode objects to be processed. /// @return A map where the keys and values are joined by '|'. - Map addBarCodesToFields(List barCodes) { + AdditionalField addBarCodesToFields(List barCodes) { List keys = []; List values = []; for (var element in barCodes) { @@ -1078,8 +1101,6 @@ class StockDetailsPageState extends LocalizedState { values.add(e.value.data.toString()); } } - return { - keys.join('|'): values.join('|'), - }; + return AdditionalField(keys.join('|'), values.join('|')); } } diff --git a/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart b/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart index a31344982..de24d5850 100644 --- a/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart @@ -421,7 +421,7 @@ class WarehouseDetailsPageState extends LocalizedState { builder: (context) => const DigitScannerPage( quantity: 1, - isGS1code: true, + isGS1code: false, singleValue: false, ), settings: const RouteSettings( diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index 6b3197932..53f172fc9 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -1,6 +1,6 @@ name: inventory_management description: This package offers inventory management features, allowing users to view stock reports and perform inventory resource reconciliation. -version: 0.0.0-dev.10 +version: 0.0.0-dev.11 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/inventory_management repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration_delivery/CHANGELOG.md index 359b39b7d..0382877b8 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration_delivery/CHANGELOG.md @@ -65,4 +65,9 @@ * Added pagination for filter search * Updated PageState class to public for customization -* Updated digit_components \ No newline at end of file +* Updated digit_components + +## 0.0.0-dev.11 + +* Fixed filter search bug fixes +* Updated task status on view_beneficiary card \ No newline at end of file diff --git a/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart b/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart index 2581228c7..41129b637 100644 --- a/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart +++ b/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart @@ -28,8 +28,16 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { var nameSelectQuery = await nameSearch(proximitySelectQuery, params, super.sql); - var filterSelectQuery = - await filterSearch(nameSelectQuery, params, super.sql); + var filterSelectQuery = nameSelectQuery; + + if (params.filter != null && params.filter!.isNotEmpty) { + for (var element in params.filter!) { + filterSelectQuery = + await filterSearch(filterSelectQuery, element, super.sql); + } + } else { + filterSelectQuery = nameSelectQuery; + } await filterSelectQuery.limit(params.limit ?? 50, offset: params.offset ?? 0); @@ -168,96 +176,6 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { return selectQuery; } - filterSearch( - selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) async { - var sql = super.sql; - if (params.filter == null || params.filter!.isEmpty) { - return selectQuery; - } else if (params.filter != null && - params.filter!.isNotEmpty && - selectQuery == null) { - for (var filter in params.filter!) { - if (filter == Status.registered.name) { - selectQuery = super.sql.household.select(); - selectQuery = selectQuery.join([ - leftOuterJoin( - sql.projectBeneficiary, - sql.projectBeneficiary.beneficiaryClientReferenceId - .equalsExp(super.sql.household.clientReferenceId), - ) - ]) - ..where(sql.projectBeneficiary.beneficiaryClientReferenceId - .isNotNull()); - } else if (filter == Status.notRegistered.name) { - selectQuery = super.sql.household.select(); - selectQuery = selectQuery.join([ - leftOuterJoin( - sql.projectBeneficiary, - sql.projectBeneficiary.beneficiaryClientReferenceId - .equalsExp(super.sql.household.clientReferenceId), - ) - ]) - ..where( - sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); - } - } - } else if (params.filter != null && - params.filter!.isNotEmpty && - selectQuery != null) { - for (var filter in params.filter!) { - if (filter == Status.registered.name) { - selectQuery = selectQuery.join([ - leftOuterJoin( - sql.projectBeneficiary, - sql.projectBeneficiary.beneficiaryClientReferenceId - .equalsExp(super.sql.household.clientReferenceId), - ) - ]) - ..where(sql.projectBeneficiary.beneficiaryClientReferenceId - .isNotNull()); - } else if (filter == Status.notRegistered.name) { - selectQuery = selectQuery.join([ - leftOuterJoin( - sql.projectBeneficiary, - sql.projectBeneficiary.beneficiaryClientReferenceId - .equalsExp(super.sql.household.clientReferenceId), - ) - ]) - ..where( - sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); - } - } - } - return selectQuery; - } - - joinName(LocalSqlDataStore sql) { - return leftOuterJoin( - sql.name, - sql.name.individualClientReferenceId.equalsExp( - sql.individual.clientReferenceId, - ), - ); - } - - joinHouseHoldAddress(LocalSqlDataStore sql) { - return leftOuterJoin( - sql.address, - sql.address.relatedClientReferenceId.equalsExp( - sql.household.clientReferenceId, - ), - ); - } - - joinIndividualAddress(LocalSqlDataStore sql) { - return leftOuterJoin( - sql.address, - sql.address.relatedClientReferenceId.equalsExp( - sql.individual.clientReferenceId, - ), - ); - } - performProximitySearch( selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) { return (selectQuery @@ -309,6 +227,62 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { ])); } + filterSearch(selectQuery, String filter, LocalSqlDataStore sql) async { + var sql = super.sql; + if (selectQuery == null) { + selectQuery = super.sql.household.select().join([ + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(super.sql.household.clientReferenceId)) + ]) + ..where(filter == Status.registered.name + ? sql.projectBeneficiary.beneficiaryClientReferenceId.isNotNull() + : sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); + } else if (selectQuery != null) { + selectQuery = selectQuery.join([ + leftOuterJoin( + sql.projectBeneficiary, + filter == Status.registered.name + ? sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(super.sql.household.clientReferenceId) + : sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(super.sql.household.clientReferenceId)) + ]) + ..where(filter == Status.registered.name + ? sql.projectBeneficiary.beneficiaryClientReferenceId.isNotNull() + : sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); + } + return selectQuery; + } + + joinName(LocalSqlDataStore sql) { + return leftOuterJoin( + sql.name, + sql.name.individualClientReferenceId.equalsExp( + sql.individual.clientReferenceId, + ), + ); + } + + joinHouseHoldAddress(LocalSqlDataStore sql) { + return leftOuterJoin( + sql.address, + sql.address.relatedClientReferenceId.equalsExp( + sql.household.clientReferenceId, + ), + ); + } + + joinIndividualAddress(LocalSqlDataStore sql) { + return leftOuterJoin( + sql.address, + sql.address.relatedClientReferenceId.equalsExp( + sql.individual.clientReferenceId, + ), + ); + } + joinIndividual(LocalSqlDataStore sql) { return leftOuterJoin( sql.individual, diff --git a/packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart b/packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart index 732d67a11..7227825f4 100644 --- a/packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart +++ b/packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart @@ -27,8 +27,16 @@ class IndividualGlobalSearchRepository extends LocalRepository { var nameSelectQuery = await nameSearch(proximitySelectQuery, params, super.sql); - var filterSelectQuery = - await filterSearch(nameSelectQuery, params, super.sql); + var filterSelectQuery = nameSelectQuery; + + if (params.filter != null && params.filter!.isNotEmpty) { + for (var element in params.filter!) { + filterSelectQuery = + await filterSearch(filterSelectQuery, element, super.sql); + } + } else { + filterSelectQuery = nameSelectQuery; + } await filterSelectQuery.limit(params.limit ?? 50, offset: params.offset ?? 0); @@ -136,71 +144,35 @@ class IndividualGlobalSearchRepository extends LocalRepository { ]); selectQuery = searchByName(selectQuery, params, sql); } - print(selectQuery.toString()); return selectQuery; } - filterSearch( - selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) { + filterSearch(selectQuery, String filter, LocalSqlDataStore sql) async { var sql = super.sql; - if (params.filter == null || params.filter!.isEmpty) { - return selectQuery; - } else if (params.filter != null && - params.filter!.isNotEmpty && - selectQuery == null) { - for (var filter in params.filter!) { - if (filter == Status.registered.name) { - selectQuery = super.sql.individual.select(); - selectQuery = selectQuery.join([ - leftOuterJoin( - sql.projectBeneficiary, - sql.projectBeneficiary.beneficiaryClientReferenceId - .equalsExp(super.sql.individual.clientReferenceId), - ) - ]) - ..where(sql.projectBeneficiary.beneficiaryClientReferenceId - .isNotNull()); - } else if (filter == Status.notRegistered.name) { - selectQuery = super.sql.individual.select(); - selectQuery = selectQuery.join([ - leftOuterJoin( - sql.projectBeneficiary, - sql.projectBeneficiary.beneficiaryClientReferenceId - .equalsExp(super.sql.individual.clientReferenceId), - ) - ]) - ..where( - sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); - } - } - } else if (params.filter != null && - params.filter!.isNotEmpty && - selectQuery != null) { - for (var filter in params.filter!) { - if (filter == Status.registered.name) { - selectQuery = selectQuery.join([ - leftOuterJoin( - sql.projectBeneficiary, - sql.projectBeneficiary.beneficiaryClientReferenceId - .equalsExp(super.sql.individual.clientReferenceId), - ) - ]) - ..where(sql.projectBeneficiary.beneficiaryClientReferenceId - .isNotNull()); - } else if (filter == Status.notRegistered.name) { - selectQuery = selectQuery.join([ - leftOuterJoin( - sql.projectBeneficiary, - sql.projectBeneficiary.beneficiaryClientReferenceId - .equalsExp(super.sql.individual.clientReferenceId), - ) - ]) - ..where( - sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); - } - } + if (selectQuery == null) { + selectQuery = super.sql.individual.select().join([ + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(super.sql.individual.clientReferenceId)) + ]) + ..where(filter == Status.registered.name + ? sql.projectBeneficiary.beneficiaryClientReferenceId.isNotNull() + : sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); + } else if (selectQuery != null) { + selectQuery = selectQuery.join([ + leftOuterJoin( + sql.projectBeneficiary, + filter == Status.registered.name + ? sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(super.sql.individual.clientReferenceId) + : sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(super.sql.individual.clientReferenceId)) + ]) + ..where(filter == Status.registered.name + ? sql.projectBeneficiary.beneficiaryClientReferenceId.isNotNull() + : sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); } - print(selectQuery.toString()); return selectQuery; } diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index 285d338d2..494ebb634 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -355,24 +355,16 @@ class _HouseholdOverviewPageState e.clientReferenceId) ?.clientReferenceId; - final projectBeneficiary = - beneficiaryType != - BeneficiaryType.individual - ? [ - state - .householdMemberWrapper - .projectBeneficiaries! - .first, - ] - : state.householdMemberWrapper - .projectBeneficiaries - ?.where( - (element) => - element - .beneficiaryClientReferenceId == - e.clientReferenceId, - ) - .toList(); + final projectBeneficiary = state + .householdMemberWrapper + .projectBeneficiaries + ?.where( + (element) => + element + .beneficiaryClientReferenceId == + e.clientReferenceId, + ) + .toList(); final taskData = (projectBeneficiary ?? []) .isNotEmpty @@ -658,10 +650,16 @@ class _HouseholdOverviewPageState ), Center( child: DigitIconButton( - onPressed: () => addIndividual( - context, - state.householdMemberWrapper.household!, - ), + onPressed: (state.householdMemberWrapper + .projectBeneficiaries ?? + []) + .isEmpty + ? null + : () => addIndividual( + context, + state.householdMemberWrapper + .household!, + ), iconText: localizations.translate( i18.householdOverView .householdOverViewAddActionText, diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart index bd774ddfc..d3bac9a10 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart @@ -1,11 +1,13 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; +import 'package:digit_components/widgets/atoms/digit_toaster.dart'; import 'package:digit_components/widgets/atoms/text_block.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:registration_delivery/blocs/household_overview/household_overview.dart'; +import 'package:registration_delivery/blocs/search_households/search_households.dart'; import 'package:registration_delivery/models/entities/additional_fields_type.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; @@ -75,223 +77,246 @@ class HouseHoldDetailsPageState extends LocalizedState { final children = form.control(_childrenCountKey).value as int; - registrationState.maybeWhen( - orElse: () { - return; - }, - create: ( - addressModel, - householdModel, - individualModel, - projectBeneficiaryModel, - registrationDate, - searchQuery, - loading, - isHeadOfHousehold, - ) { - var household = householdModel; - household ??= HouseholdModel( - tenantId: RegistrationDeliverySingleton().tenantId, - clientReferenceId: - householdModel?.clientReferenceId ?? - IdGen.i.identifier, - rowVersion: 1, - clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context.millisecondsSinceEpoch(), - lastModifiedBy: RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: context.millisecondsSinceEpoch(), - ), - auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context.millisecondsSinceEpoch(), - lastModifiedBy: RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: context.millisecondsSinceEpoch(), - ), - ); - - household = household.copyWith( - rowVersion: 1, + if (memberCount < (pregnantWomen + children)) { + DigitToast.show(context, + options: DigitToastOptions( + localizations.translate( + i18.householdDetails.memberCountError), + true, + theme)); + } else { + registrationState.maybeWhen( + orElse: () { + return; + }, + create: ( + addressModel, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + searchQuery, + loading, + isHeadOfHousehold, + ) { + var household = householdModel; + household ??= HouseholdModel( tenantId: RegistrationDeliverySingleton().tenantId, clientReferenceId: householdModel?.clientReferenceId ?? IdGen.i.identifier, - memberCount: memberCount, + rowVersion: 1, clientAuditDetails: ClientAuditDetails( createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid - .toString(), + .loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), lastModifiedBy: RegistrationDeliverySingleton() - .loggedInUserUuid - .toString(), + .loggedInUserUuid, lastModifiedTime: context.millisecondsSinceEpoch(), ), auditDetails: AuditDetails( createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid - .toString(), + .loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), lastModifiedBy: RegistrationDeliverySingleton() - .loggedInUserUuid - .toString(), + .loggedInUserUuid, lastModifiedTime: context.millisecondsSinceEpoch(), ), - address: addressModel, - additionalFields: - HouseholdAdditionalFields(version: 1, fields: [ - //[TODO: Use pregnant women form value based on project config - ...?householdModel?.additionalFields?.fields - .where((e) => - e.key != - AdditionalFieldsType.pregnantWomen - .toValue() && - e.key != - AdditionalFieldsType.children - .toValue()), - AdditionalField( - AdditionalFieldsType.pregnantWomen.toValue(), - pregnantWomen, - ), - AdditionalField( - AdditionalFieldsType.children.toValue(), - children, - ) - ])); + ); - bloc.add( - BeneficiaryRegistrationSaveHouseholdDetailsEvent( - household: household, - registrationDate: dateOfRegistration, - ), - ); - context.router.push( - IndividualDetailsRoute(isHeadOfHousehold: true), - ); - }, - editHousehold: ( - addressModel, - householdModel, - individuals, - registrationDate, - projectBeneficiaryModel, - loading, - ) { - var household = householdModel.copyWith( - memberCount: memberCount, - address: addressModel, - clientAuditDetails: (householdModel - .clientAuditDetails?.createdBy != - null && - householdModel - .clientAuditDetails?.createdTime != - null) - ? ClientAuditDetails( - createdBy: householdModel - .clientAuditDetails!.createdBy, - createdTime: householdModel - .clientAuditDetails!.createdTime, - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: - DateTime.now().millisecondsSinceEpoch, - ) - : null, - rowVersion: householdModel.rowVersion, - additionalFields: HouseholdAdditionalFields( - version: - householdModel.additionalFields?.version ?? - 1, - fields: [ - //[TODO: Use pregnant women form value based on project config - ...?householdModel.additionalFields?.fields - .where((e) => - e.key != - AdditionalFieldsType.pregnantWomen - .toValue() && - e.key != - AdditionalFieldsType.children - .toValue()), - AdditionalField( - AdditionalFieldsType.pregnantWomen - .toValue(), - pregnantWomen, - ), - AdditionalField( - AdditionalFieldsType.children.toValue(), - children, - ) - ])); + household = household.copyWith( + rowVersion: 1, + tenantId: + RegistrationDeliverySingleton().tenantId, + clientReferenceId: + householdModel?.clientReferenceId ?? + IdGen.i.identifier, + memberCount: memberCount, + clientAuditDetails: ClientAuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid + .toString(), + createdTime: context.millisecondsSinceEpoch(), + lastModifiedBy: RegistrationDeliverySingleton() + .loggedInUserUuid + .toString(), + lastModifiedTime: + context.millisecondsSinceEpoch(), + ), + auditDetails: AuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid + .toString(), + createdTime: context.millisecondsSinceEpoch(), + lastModifiedBy: RegistrationDeliverySingleton() + .loggedInUserUuid + .toString(), + lastModifiedTime: + context.millisecondsSinceEpoch(), + ), + address: addressModel, + additionalFields: HouseholdAdditionalFields( + version: 1, + fields: [ + //[TODO: Use pregnant women form value based on project config + ...?householdModel?.additionalFields?.fields + .where((e) => + e.key != + AdditionalFieldsType + .pregnantWomen + .toValue() && + e.key != + AdditionalFieldsType.children + .toValue()), + AdditionalField( + AdditionalFieldsType.pregnantWomen + .toValue(), + pregnantWomen, + ), + AdditionalField( + AdditionalFieldsType.children.toValue(), + children, + ) + ])); - bloc.add( - BeneficiaryRegistrationUpdateHouseholdDetailsEvent( - household: household.copyWith( - clientAuditDetails: - (addressModel.clientAuditDetails?.createdBy != - null && - addressModel.clientAuditDetails - ?.createdTime != - null) - ? ClientAuditDetails( - createdBy: addressModel - .clientAuditDetails!.createdBy, - createdTime: addressModel - .clientAuditDetails!.createdTime, - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: - context.millisecondsSinceEpoch(), - ) - : null, - ), - addressModel: addressModel.copyWith( - clientAuditDetails: - (addressModel.clientAuditDetails?.createdBy != - null && - addressModel.clientAuditDetails - ?.createdTime != - null) - ? ClientAuditDetails( - createdBy: addressModel - .clientAuditDetails!.createdBy, - createdTime: addressModel - .clientAuditDetails!.createdTime, - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: - context.millisecondsSinceEpoch(), - ) - : null, + bloc.add( + BeneficiaryRegistrationSaveHouseholdDetailsEvent( + household: household, + registrationDate: dateOfRegistration, ), - ), - ); - final overviewBloc = - context.read(); + ); + context.router.push( + IndividualDetailsRoute(isHeadOfHousehold: true), + ); + }, + editHousehold: ( + addressModel, + householdModel, + individuals, + registrationDate, + projectBeneficiaryModel, + loading, + ) { + var household = householdModel.copyWith( + memberCount: memberCount, + address: addressModel, + clientAuditDetails: (householdModel + .clientAuditDetails?.createdBy != + null && + householdModel.clientAuditDetails + ?.createdTime != + null) + ? ClientAuditDetails( + createdBy: householdModel + .clientAuditDetails!.createdBy, + createdTime: householdModel + .clientAuditDetails!.createdTime, + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: + DateTime.now().millisecondsSinceEpoch, + ) + : null, + rowVersion: householdModel.rowVersion, + additionalFields: HouseholdAdditionalFields( + version: householdModel + .additionalFields?.version ?? + 1, + fields: [ + //[TODO: Use pregnant women form value based on project config + ...?householdModel.additionalFields?.fields + .where((e) => + e.key != + AdditionalFieldsType + .pregnantWomen + .toValue() && + e.key != + AdditionalFieldsType.children + .toValue()), + AdditionalField( + AdditionalFieldsType.pregnantWomen + .toValue(), + pregnantWomen, + ), + AdditionalField( + AdditionalFieldsType.children.toValue(), + children, + ) + ])); - overviewBloc.add( - HouseholdOverviewReloadEvent( - projectId: RegistrationDeliverySingleton() - .projectId - .toString(), - projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType ?? - BeneficiaryType.household, - ), - ); + bloc.add( + BeneficiaryRegistrationUpdateHouseholdDetailsEvent( + household: household.copyWith( + clientAuditDetails: (addressModel + .clientAuditDetails + ?.createdBy != + null && + addressModel.clientAuditDetails + ?.createdTime != + null) + ? ClientAuditDetails( + createdBy: addressModel + .clientAuditDetails!.createdBy, + createdTime: addressModel + .clientAuditDetails!.createdTime, + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: + context.millisecondsSinceEpoch(), + ) + : null, + ), + addressModel: addressModel.copyWith( + clientAuditDetails: (addressModel + .clientAuditDetails + ?.createdBy != + null && + addressModel.clientAuditDetails + ?.createdTime != + null) + ? ClientAuditDetails( + createdBy: addressModel + .clientAuditDetails!.createdBy, + createdTime: addressModel + .clientAuditDetails!.createdTime, + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: + context.millisecondsSinceEpoch(), + ) + : null, + ), + ), + ); + final overviewBloc = + context.read(); - (router.parent() as StackRouter).maybePop(); - }, - ); + overviewBloc.add( + HouseholdOverviewReloadEvent( + projectId: RegistrationDeliverySingleton() + .projectId + .toString(), + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType ?? + BeneficiaryType.household, + ), + ); + HouseholdMemberWrapper memberWrapper = + overviewBloc.state.householdMemberWrapper; + final route = router.parent() as StackRouter; + route.popUntilRouteWithName( + SearchBeneficiaryRoute.name); + route.push( + BeneficiaryWrapperRoute(wrapper: memberWrapper)); + }, + ); + } }, child: Center( child: Text( diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index bdb0cda4e..c01de9a39 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -14,10 +14,12 @@ import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:intl/intl.dart'; import 'package:reactive_forms/reactive_forms.dart'; +import 'package:registration_delivery/blocs/search_households/search_households.dart'; import 'package:registration_delivery/utils/constants.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; import '../../blocs/beneficiary_registration/beneficiary_registration.dart'; +import '../../blocs/household_overview/household_overview.dart'; import '../../router/registration_delivery_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; @@ -68,7 +70,22 @@ class IndividualDetailsPageState extends LocalizedState { state.mapOrNull( persisted: (value) { if (value.navigateToRoot) { - (router.parent() as StackRouter).maybePop(); + final overviewBloc = context.read(); + + overviewBloc.add( + HouseholdOverviewReloadEvent( + projectId: + RegistrationDeliverySingleton().projectId.toString(), + projectBeneficiaryType: + RegistrationDeliverySingleton().beneficiaryType ?? + BeneficiaryType.household, + ), + ); + HouseholdMemberWrapper memberWrapper = + overviewBloc.state.householdMemberWrapper; + final route = router.parent() as StackRouter; + route.popUntilRouteWithName(SearchBeneficiaryRoute.name); + route.push(BeneficiaryWrapperRoute(wrapper: memberWrapper)); } }, ); diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index 7d40a8c37..ff5e0aec7 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -277,9 +277,17 @@ class _SearchBeneficiaryPageState .clearEvent(); }, child: Container( - color: - const DigitColors() - .davyGray, + decoration: + BoxDecoration( + color: + const DigitColors() + .davyGray, + borderRadius: + BorderRadius + .circular( + kPadding / + 2), + ), child: Icon( Icons.close, color: @@ -371,7 +379,7 @@ class _SearchBeneficiaryPageState isProximityEnabled = false; }); searchController.clear(); - + selectedFilters.clear(); blocWrapper.clearEvent(); }, ), @@ -470,7 +478,10 @@ class _SearchBeneficiaryPageState content: StatusFilter(selectedFilters: selectedFilters), )); - if (filters != null) { + if (filters != null && filters.isNotEmpty) { + setState(() { + selectedFilters = []; + }); for (var filter in filters) { if (!selectedFilters.contains(filter)) { setState(() { @@ -480,9 +491,6 @@ class _SearchBeneficiaryPageState } triggerGlobalSearchEvent(); } else { - setState(() { - selectedFilters = []; - }); blocWrapper.clearEvent(); } } diff --git a/packages/registration_delivery/lib/utils/i18_key_constants.dart b/packages/registration_delivery/lib/utils/i18_key_constants.dart index e5c0c4170..1a09daeee 100644 --- a/packages/registration_delivery/lib/utils/i18_key_constants.dart +++ b/packages/registration_delivery/lib/utils/i18_key_constants.dart @@ -391,6 +391,7 @@ class HouseholdDetails { String get noOfRoomsLabel => 'NO_OF_ROOMS_LABEL'; String get houseDetailsLabel => 'HOUSE_DETAILS_LABEL'; String get selectStructureTypeError => 'PLEASE_SELECT_STRUCTURE_TYPE'; + String get memberCountError => 'MEMBER_COUNT_ERROR'; String get typeOfStructure => 'TYPE_OF_STRUCTURE'; } @@ -489,7 +490,8 @@ class DeliverIntervention { const DeliverIntervention(); String get deliverInterventionLabel => 'DELIVER_INTERVENTION_LABEL'; - String get beneficiaryChecklistDialogTitle => 'BENEFICIARY_CHECKLIST_DIALOG_TITLE'; + String get beneficiaryChecklistDialogTitle => + 'BENEFICIARY_CHECKLIST_DIALOG_TITLE'; String get refusedDeliveryLabel => 'REFUSED_DELIVERY_LABEL'; String get refusedDeliveryVisitDateLabel => 'REFUSED_DELIVERY_VISIT_DATE'; diff --git a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart index 3b2d94207..865a9b289 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart @@ -47,7 +47,7 @@ class _ViewBeneficiaryCardState extends LocalizedState { super.didUpdateWidget(oldWidget); } - bool _isCardExpanded = true; + bool _isCardExpanded = false; bool get isCardExpanded => _isCardExpanded; @@ -91,10 +91,6 @@ class _ViewBeneficiaryCardState extends LocalizedState { final tableData = householdMember.members?.map( (e) { final projectBeneficiary = - // RegistrationDeliverySingleton().beneficiaryType != - // BeneficiaryType.individual - // ? [householdMember.projectBeneficiaries!.first] - // : householdMember.projectBeneficiaries?.where((element) { if (RegistrationDeliverySingleton().beneficiaryType == BeneficiaryType.individual) { @@ -297,11 +293,17 @@ class _ViewBeneficiaryCardState extends LocalizedState { : '${householdMember.members?.length ?? 1} ${householdMember.members?.length == 1 ? localizations.translate(i18.beneficiaryDetails.householdMemberSingular) : localizations.translate(i18.beneficiaryDetails.householdMemberPlural)}', status: getStatus( tasks ?? [], - householdMember.projectBeneficiaries! - .where((element) => - element.beneficiaryClientReferenceId == - householdMember.household!.clientReferenceId) - .toList(), + householdMember.projectBeneficiaries!.where((element) { + if (RegistrationDeliverySingleton().beneficiaryType == + BeneficiaryType.individual) { + return element.beneficiaryClientReferenceId == + householdMember + .headOfHousehold?.clientReferenceId; + } else { + return element.beneficiaryClientReferenceId == + householdMember.household?.clientReferenceId; + } + }).toList(), isNotEligible, isBeneficiaryRefused), title: [ diff --git a/packages/registration_delivery/lib/widgets/member_card/member_card.dart b/packages/registration_delivery/lib/widgets/member_card/member_card.dart index f1fe1ad2c..dee7c4834 100644 --- a/packages/registration_delivery/lib/widgets/member_card/member_card.dart +++ b/packages/registration_delivery/lib/widgets/member_card/member_card.dart @@ -105,34 +105,36 @@ class MemberCard extends StatelessWidget { child: Align( alignment: Alignment.topRight, child: DigitIconButton( - onPressed: () => DigitActionDialog.show( - context, - widget: ActionCard( - items: [ - ActionCardModel( - icon: Icons.person, - label: localizations.translate( - i18.memberCard.assignAsHouseholdhead, - ), - action: isHead ? null : setAsHeadAction, - ), - ActionCardModel( - icon: Icons.edit, - label: localizations.translate( - i18.memberCard.editIndividualDetails, - ), - action: editMemberAction, - ), - ActionCardModel( - icon: Icons.delete, - label: localizations.translate( - i18.memberCard.deleteIndividualActionText, + onPressed: (projectBeneficiaries ?? []).isEmpty + ? null + : () => DigitActionDialog.show( + context, + widget: ActionCard( + items: [ + ActionCardModel( + icon: Icons.person, + label: localizations.translate( + i18.memberCard.assignAsHouseholdhead, + ), + action: isHead ? null : setAsHeadAction, + ), + ActionCardModel( + icon: Icons.edit, + label: localizations.translate( + i18.memberCard.editIndividualDetails, + ), + action: editMemberAction, + ), + ActionCardModel( + icon: Icons.delete, + label: localizations.translate( + i18.memberCard.deleteIndividualActionText, + ), + action: isHead ? null : deleteMemberAction, + ), + ], + ), ), - action: isHead ? null : deleteMemberAction, - ), - ], - ), - ), iconText: localizations.translate( i18.memberCard.editDetails, ), diff --git a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart index 093dce6c9..5060ee501 100644 --- a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart +++ b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart @@ -36,7 +36,7 @@ class StatusFilterState extends LocalizedState { children: [ SelectionBox( options: getFilters() ?? [], - allowMultipleSelection: true, + allowMultipleSelection: false, initialSelection: [ ...selectedButtons ], // [TODO : fix selected not displaying] From 888fdb25f8875f900986fec19758de9869163a7d Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Tue, 23 Jul 2024 20:48:27 +0530 Subject: [PATCH 057/241] Hcmpre 118 - Closed Household, Filter improvements, Bug fixes (#467) * added translator for administration area * Fixed Facility search based on tenant ID * Added disable battery optimization permission for background service * Added disable battery optimization ask permission on App start and background service start * HLM-5984:: Get Precise location on Submitting latitude longitude details * Reverted install_bricks.sh * added new status REGISTERED, NOT_REGISTERED updated conditional check for status by project beneficiaries * added static status_filter.dart integration in search_beneficiary.dart * TODO for selected_filters display condition * integrated household search filters with mdms implemented search based on filters with pagination for Registered and NotRegistered * updated status filter component merge with develop * create individual_global_search and implemented search * Auto Create Project Beneficiary on Edit Household, and disable record delivery if no project beneficiary present * Conflicts resolved * implemented household_global_search.dart fixed individual_global_search.dart * updated proximity search for household_global_search.dart * Pop State recapture during registration flow, Disable delivery flow for individual based campaign if project beneficiaries is empty (#456) * updated class state from private for customization override in registration_delivery and inventory added pagination for filter search TODO: combination search for registered and not registered needs fix which return only last selected results * adding missed changes for last commit * displaying selected filter value for applied filters in search_beneficiary.dart * updated changelog for inventory and registration_delivery for new dev versions * updated pubspec lock of registration_delivery * removed multiple filter selection modified filter search * fixed delivery team scanner issues in stock_details.dart * Fixed - missing addition of scanned resources to additional fields filter search bug fixes * HCMPRE-74, HCMPRE-82, HCMPRE-83:: Household Reload Fix, Validations for Household details added (#458) * updated individual global search added beneficiary type check in view_beneficiary_card.dart removed commented code in household_overview.dart * Added null check for beneficiaryTag in closed_household_summary.dart * Exposed Registration delivery pages * updated remote repository and some miner fixes (#461) Co-authored-by: rachana-egov * HCMPRE-82:: Validations and Bug Fixes * small css fixes (#462) Co-authored-by: rachana-egov Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> * merge fix * added closed household search * status model fix * Closed-household-registration (#464) * closed-household-registration * closed-household-registration * updated pub file --------- Co-authored-by: rachana-egov * added closed household init file modified user_action.dart model and db corrected modified closed household status * updated registration for closed household * added closed_household search and updating closed household status * clearing search before navigating to registration flow * getting last tasks in household_overview.dart * HCMPRE-107:: Summary page added for Delivery Flow, HCMPRE-111:: Disable Delete household if beneficiary not present (#463) * Validation and gps fixes * fixed closed household count clearing closedhould results for clear * pagination fix for closed household * sync down for closed household, updated scan voucher button, and remove the tag when we navigate to a different page (#465) Co-authored-by: rachana-egov * DeliverySummary Route added to main app * seperated closedhousehold search Bug fixes - HCMPRE-112, 110, 113 * updated all the points of this ticket HCMPRE-120 (#466) Co-authored-by: rachana-egov * Bug Fixes, dev version release of packages * HCMPRE-119:: IRS Demo fixes (#468) * HCMPRE-119:: IRS Demo fixes * Removed unused code * updated closed button action to push closedhousehold tasks filter with last fix * updated validation for closed household name and fix error message size (#470) Co-authored-by: rachana-egov * Irs demo fix patch (#469) * HCMPRE-119:: IRS Demo fixes * Removed unused code * Edit Household if no project beneficiary fix * reverted hiding of digit search bar when closed filter is applied * status update based on last task status in household_overview.dart mapped administered success in beneficiary_card.dart moved getstatus to utils.dart * fixed offset increasing twice * HCMPRE-121:: Enter manual code fix and Search Beneficiary fixes (#471) * HCMPRE-121:: Enter manual code fix and Search Beneficiary fixes * Added date formats to constants * fixed offset increasing twice closed household distance fix emitting scanner state loading * dev version bump-up for registration and scanner * version updates for packages --------- Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: rachana-egov --- .../assets/icons/svg/closed_household.svg | 10 + .../lib/app.dart | 13 + .../no_sql/schema/entity_mapper.dart | 5 + .../lib/data/network_manager.dart | 6 + .../lib/data/repositories/sync/sync_down.dart | 50 ++ .../lib/data/repositories/sync/sync_up.dart | 1 + .../lib/pages/home.dart | 35 +- .../lib/router/app_router.dart | 4 + .../lib/utils/constants.dart | 9 + .../lib/utils/i18_key_constants.dart | 2 +- .../lib/utils/utils.dart | 3 + .../lib/widgets/home/home_item_card.dart | 6 +- .../network_manager_provider_wrapper.dart | 8 + .../showcase/config/home_showcase.dart | 7 +- .../pubspec.lock | 72 +- .../pubspec.yaml | 9 +- packages/closed_household/CHANGELOG.md | 3 +- packages/closed_household/LICENSE | 22 +- packages/closed_household/README.md | 60 +- .../lib/blocs/closed_household.dart | 61 +- .../lib/blocs/closed_household.freezed.dart | 267 +++++- .../lib/closed_household.dart | 13 + .../lib/closed_household.init.dart | 16 + .../local/base/user_action_base.dart | 4 +- .../data/repositories/local/user_action.dart | 115 ++- .../data/repositories/remote/user_action.dart | 15 + .../lib/models/entities/status.dart | 1 - .../lib/models/entities/status.mapper.dart | 4 - .../lib/models/entities/user_action.dart | 10 +- .../models/entities/user_action.mapper.dart | 18 +- .../lib/pages/closed_household_details.dart | 240 +++--- .../lib/pages/closed_household_summary.dart | 92 +- .../lib/utils/i18_key_constants.dart | 2 + packages/closed_household/pubspec.yaml | 8 +- packages/digit_components/CHANGELOG.md | 151 ++-- .../digit_components/example/pubspec.lock | 2 +- .../lib/widgets/atoms/details_card.dart | 88 +- .../lib/widgets/atoms/digit_icon_button.dart | 13 +- .../atoms/digit_integer_form_picker.dart | 39 +- .../atoms/digit_reactive_search_dropdown.dart | 2 +- .../lib/widgets/atoms/selection_card.dart | 75 +- .../lib/widgets/digit_search_bar.dart | 8 +- packages/digit_components/pubspec.yaml | 2 +- packages/digit_data_model/CHANGELOG.md | 24 +- .../local_store/no_sql/schema/oplog.g.dart | 2 + .../local_store/sql_store/sql_store.g.dart | 140 ++- .../tables/package_tables/user_action.dart | 4 +- .../data/repositories/remote/boundary.dart | 3 +- .../digit_data_model/lib/utils/constants.dart | 2 + packages/digit_data_model/pubspec.yaml | 2 +- packages/digit_scanner/CHANGELOG.md | 47 +- packages/digit_scanner/example/pubspec.lock | 2 +- packages/digit_scanner/lib/blocs/scanner.dart | 4 +- .../digit_scanner/lib/pages/qr_scanner.dart | 172 ++-- packages/digit_scanner/pubspec.lock | 2 +- packages/digit_scanner/pubspec.yaml | 3 +- packages/inventory_management/CHANGELOG.md | 66 +- .../lib/pages/record_stock/stock_details.dart | 534 +++++------- packages/inventory_management/pubspec.yaml | 2 +- packages/registration_delivery/CHANGELOG.md | 87 +- .../beneficiary_registration.dart | 4 + .../beneficiary_registration.freezed.dart | 82 +- .../deliver_intervention.dart | 21 +- .../deliver_intervention.freezed.dart | 200 ++++- .../household_global_seach.dart | 259 +++--- .../individual_global_search.dart | 5 - .../search_bloc_common_wrapper.dart | 4 +- .../search_households/search_households.dart | 16 +- .../search_households.freezed.dart | 812 +----------------- .../search_households/tag_by_search.dart | 3 - .../local/closed_household_search.dart | 117 +++ .../local/household_global_search.dart | 207 ++--- .../local/project_beneficiary.dart | 1 - .../lib/data/repositories/local/referral.dart | 1 - .../entities/additional_fields_type.dart | 2 + .../additional_fields_type.mapper.dart | 4 + .../lib/models/entities/status.dart | 4 +- .../lib/models/entities/status.mapper.dart | 8 +- .../beneficiary/beneficiary_checklist.dart | 37 +- .../beneficiary/deliver_intervention.dart | 149 +--- .../beneficiary/delivery_summary_page.dart | 356 ++++++++ .../pages/beneficiary/household_overview.dart | 363 ++++---- .../pages/beneficiary/refused_delivery.dart | 18 +- .../widgets/view_closed_household.dart | 95 ++ .../house_details.dart | 77 +- .../household_details.dart | 754 ++++++++-------- .../household_location.dart | 630 +++++++------- .../individual_details.dart | 9 +- .../lib/pages/search_beneficiary.dart | 272 ++++-- .../lib/pages/summary_page.dart | 106 ++- .../lib/registration_delivery.dart | 2 + .../router/registration_delivery_router.dart | 5 +- .../registration_delivery_router.gm.dart | 586 +++++++------ .../lib/utils/constants.dart | 1 + .../lib/utils/i18_key_constants.dart | 14 + .../lib/utils/utils.dart | 33 +- .../widgets/beneficiary/beneficiary_card.dart | 37 +- .../beneficiary/view_beneficiary_card.dart | 45 +- .../lib/widgets/member_card/member_card.dart | 1 + .../showcase/config/household_details.dart | 2 + .../showcase/config/household_location.dart | 5 + .../widgets/status_filter/status_filter.dart | 5 +- packages/registration_delivery/pubspec.lock | 131 +-- packages/registration_delivery/pubspec.yaml | 9 +- tools/registration_delivery_imports.dart | 4 + 105 files changed, 4580 insertions(+), 3583 deletions(-) create mode 100644 apps/health_campaign_field_worker_app/assets/icons/svg/closed_household.svg create mode 100644 packages/closed_household/lib/closed_household.init.dart create mode 100644 packages/closed_household/lib/data/repositories/remote/user_action.dart create mode 100644 packages/registration_delivery/lib/data/repositories/local/closed_household_search.dart create mode 100644 packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart create mode 100644 packages/registration_delivery/lib/pages/beneficiary/widgets/view_closed_household.dart diff --git a/apps/health_campaign_field_worker_app/assets/icons/svg/closed_household.svg b/apps/health_campaign_field_worker_app/assets/icons/svg/closed_household.svg new file mode 100644 index 000000000..98b73eed4 --- /dev/null +++ b/apps/health_campaign_field_worker_app/assets/icons/svg/closed_household.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/apps/health_campaign_field_worker_app/lib/app.dart b/apps/health_campaign_field_worker_app/lib/app.dart index 1576fdd07..1e6fe336c 100644 --- a/apps/health_campaign_field_worker_app/lib/app.dart +++ b/apps/health_campaign_field_worker_app/lib/app.dart @@ -1,4 +1,6 @@ import 'package:attendance_management/attendance_management.dart'; +import 'package:closed_household/blocs/closed_household.dart'; +import 'package:closed_household/closed_household.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_scanner/blocs/scanner.dart'; @@ -24,6 +26,7 @@ import 'router/app_navigator_observer.dart'; import 'router/app_router.dart'; import 'utils/environment_config.dart'; import 'utils/localization_delegates.dart'; +import 'utils/typedefs.dart'; import 'utils/utils.dart'; import 'widgets/network_manager_provider_wrapper.dart'; @@ -297,6 +300,16 @@ class MainApplicationState extends State ProjectFacilitySearchModel>(), ), ), + BlocProvider( + create: (_) { + return ClosedHouseholdBloc( + const ClosedHouseholdState(), + closedHouseholdRepository: context + .repository(), + ); + }, + lazy: false, + ), ], child: BlocBuilder( builder: (context, langState) { diff --git a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/entity_mapper.dart b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/entity_mapper.dart index d44596109..afbb93f11 100644 --- a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/entity_mapper.dart +++ b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/entity_mapper.dart @@ -1,4 +1,5 @@ import 'package:attendance_management/models/entities/attendance_log.dart'; +import 'package:closed_household/models/entities/user_action.dart'; import 'package:digit_data_model/data/local_store/no_sql/schema/entity_mapper_listener.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:inventory_management/models/entities/stock.dart'; @@ -80,6 +81,10 @@ class EntityMapper extends EntityMapperListener { final entity = PgrServiceModelMapper.fromJson(entityString); return entity; + case "userAction": + final entity = UserActionModelMapper.fromJson(entityString); + return entity; + default: final entity = EntityModelMapper.fromJson(entityString); return entity; diff --git a/apps/health_campaign_field_worker_app/lib/data/network_manager.dart b/apps/health_campaign_field_worker_app/lib/data/network_manager.dart index 649e8391a..297c3e85b 100644 --- a/apps/health_campaign_field_worker_app/lib/data/network_manager.dart +++ b/apps/health_campaign_field_worker_app/lib/data/network_manager.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'dart:convert'; +import 'package:closed_household/models/entities/user_action.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter_background_service/flutter_background_service.dart'; @@ -166,6 +167,11 @@ class NetworkManager { .map((e) => ReferralModelMapper.fromJson(jsonEncode(e))) .toList(); await local.bulkCreate(entity); + case "UserAction": + final entity = entityList + .map((e) => UserActionModelMapper.fromJson(jsonEncode(e))) + .toList(); + await local.bulkCreate(entity); default: final entity = entityList .map((e) => EntityModelMapper.fromJson(jsonEncode(e))) diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/sync/sync_down.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/sync/sync_down.dart index b400bc564..c0b9b01b8 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/sync/sync_down.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/sync/sync_down.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:attendance_management/attendance_management.dart'; +import 'package:closed_household/models/entities/user_action.dart'; import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:inventory_management/models/entities/stock.dart'; @@ -461,6 +462,55 @@ class PerformSyncDown { } break; + + case DataModelType.userAction: + responseEntities = await remote.search(UserActionSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) return; + final userActionModel = element.entity as UserActionModel; + var responseEntity = + responseEntities.whereType().firstWhereOrNull( + (e) => + e.clientReferenceId == userActionModel.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: userActionModel.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(userActionModel.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + userActionModel.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; + case DataModelType.hFReferral: responseEntities = await remote.search( HFReferralSearchModel( diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/sync/sync_up.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/sync/sync_up.dart index fdf1ab1dd..b5a8995ce 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/sync/sync_up.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/sync/sync_up.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'package:closed_household/closed_household.dart'; import 'package:collection/collection.dart'; import 'package:digit_components/utils/app_logger.dart'; import 'package:digit_data_model/data_model.dart'; diff --git a/apps/health_campaign_field_worker_app/lib/pages/home.dart b/apps/health_campaign_field_worker_app/lib/pages/home.dart index 162be093b..6fb2cc45f 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/home.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/home.dart @@ -2,8 +2,7 @@ import 'dart:async'; import 'package:attendance_management/attendance_management.dart'; import 'package:attendance_management/router/attendance_router.gm.dart'; -import 'package:closed_household/pages/closed_household_details.dart'; -import 'package:closed_household/pages/closed_household_wrapper.dart'; +import 'package:closed_household/models/entities/user_action.dart'; import 'package:closed_household/router/closed_household_router.gm.dart'; import 'package:closed_household/utils/utils.dart'; import 'package:connectivity_plus/connectivity_plus.dart'; @@ -16,6 +15,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_background_service/flutter_background_service.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:flutter_svg/svg.dart'; import 'package:inventory_management/inventory_management.dart'; import 'package:inventory_management/router/inventory_router.gm.dart'; import 'package:referral_reconciliation/referral_reconciliation.dart'; @@ -329,6 +329,18 @@ class _HomePageState extends LocalizedState { }, ), ), + i18.home.closedHouseHoldLabel: homeShowcaseData.closedHouseHold.buildWith( + child: HomeItemCard( + icon: Icons.home, + enableCustomIcon: true, + customIconSize: 48, + customIcon: Constants.closedHouseholdSvg, + label: i18.home.closedHouseHoldLabel, + onPressed: () { + context.router.push(ClosedHouseholdWrapperRoute()); + }, + ), + ), i18.home.manageStockLabel: homeShowcaseData.warehouseManagerManageStock.buildWith( child: HomeItemCard( @@ -464,15 +476,6 @@ class _HomePageState extends LocalizedState { }, ), ), - i18.home.closeHouseHoldLabel: homeShowcaseData.closeHouseHold.buildWith( - child: HomeItemCard( - icon: Icons.home_filled, - label: i18.home.closeHouseHoldLabel, - onPressed: () { - context.router.push(ClosedHouseholdWrapperRoute()); - }, - ), - ), }; final Map homeItemsShowcaseMap = { @@ -493,12 +496,13 @@ class _HomePageState extends LocalizedState { i18.home.manageAttendanceLabel: homeShowcaseData.manageAttendance.showcaseKey, i18.home.db: homeShowcaseData.db.showcaseKey, - i18.home.closeHouseHoldLabel: homeShowcaseData.closeHouseHold.showcaseKey, + i18.home.closedHouseHoldLabel: homeShowcaseData.closedHouseHold.showcaseKey, }; final homeItemsLabel = [ // INFO: Need to add items label of package Here i18.home.beneficiaryLabel, + i18.home.closedHouseHoldLabel, i18.home.manageStockLabel, i18.home.stockReconciliationLabel, i18.home.myCheckList, @@ -508,7 +512,6 @@ class _HomePageState extends LocalizedState { i18.home.beneficiaryReferralLabel, i18.home.manageAttendanceLabel, i18.home.db, - i18.home.closeHouseHoldLabel, ]; final List filteredLabels = homeItemsLabel @@ -517,11 +520,11 @@ class _HomePageState extends LocalizedState { .map((e) => e.displayName) .toList() .contains(element) || - element == i18.home.db || element == i18.home.closeHouseHoldLabel) // TODO: need to add close household inside mdms + element == i18.home.db || element == i18.home.closedHouseHoldLabel) // TODO: need to add close household inside mdms .toList(); final showcaseKeys = filteredLabels - .where((f) => f != i18.home.db && f != i18.home.closeHouseHoldLabel) // TODO: need to add close household inside mdms + .where((f) => f != i18.home.db && f != i18.home.closedHouseHoldLabel) // TODO: need to add close household inside mdms .map((label) => homeItemsShowcaseMap[label]!) .toList(); @@ -571,6 +574,7 @@ class _HomePageState extends LocalizedState { context.read< LocalRepository>(), + context.read>(), ], remoteRepositories: [ // INFO : Need to add repo repo of package Here @@ -602,6 +606,7 @@ class _HomePageState extends LocalizedState { context.read< RemoteRepository>(), + context.read>(), ], ), ); diff --git a/apps/health_campaign_field_worker_app/lib/router/app_router.dart b/apps/health_campaign_field_worker_app/lib/router/app_router.dart index 3f65e855a..0c4a80566 100644 --- a/apps/health_campaign_field_worker_app/lib/router/app_router.dart +++ b/apps/health_campaign_field_worker_app/lib/router/app_router.dart @@ -184,6 +184,10 @@ class AppRouter extends _$AppRouter { path: 'household-acknowledgement', ), AutoRoute(page: ChecklistViewRoute.page, path: 'view'), + AutoRoute( + page: DeliverySummaryRoute.page, + path: 'delivery-summary', + ), ], ), ]), diff --git a/apps/health_campaign_field_worker_app/lib/utils/constants.dart b/apps/health_campaign_field_worker_app/lib/utils/constants.dart index 8696a6d69..c57fcc33f 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/constants.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/constants.dart @@ -1,4 +1,7 @@ import 'package:attendance_management/attendance_management.dart'; +import 'package:closed_household/data/repositories/local/user_action.dart'; +import 'package:closed_household/data/repositories/oplog/oplog.dart'; +import 'package:closed_household/data/repositories/remote/user_action.dart'; import 'package:closed_household/utils/utils.dart'; import 'package:collection/collection.dart'; import 'package:digit_components/utils/app_logger.dart'; @@ -122,6 +125,7 @@ class Constants { ), ), TaskLocalRepository(sql, TaskOpLogManager(isar)), + ClosedHouseholdLocalRepository(sql, ClosedHouseholdOpLogManager(isar)), SideEffectLocalRepository(sql, SideEffectOpLogManager(isar)), ReferralLocalRepository(sql, ReferralOpLogManager(isar)), StockLocalRepository(sql, StockOpLogManager(isar)), @@ -141,6 +145,7 @@ class Constants { sql, HFReferralOpLogManager(isar), ), + ClosedHouseholdLocalRepository(sql, ClosedHouseholdOpLogManager(isar)), ]; } @@ -165,6 +170,8 @@ class Constants { _version = version; } + static const String closedHouseholdSvg = 'assets/icons/svg/closed_household.svg'; + static List getRemoteRepositories( Dio dio, Map> actionMap, @@ -224,6 +231,8 @@ class Constants { AttendanceLogRemoteRepository(dio, actionMap: actions), if (value == DataModelType.hFReferral) HFReferralRemoteRepository(dio, actionMap: actions), + if (value == DataModelType.userAction) + UserActionRemoteRepository(dio, actionMap: actions), ]); } diff --git a/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart b/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart index f3f00e8aa..dfa46329f 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart @@ -595,7 +595,7 @@ class Home { String get beneficiaryReferralLabel => 'HOME_BENEFICIARY_REFERRAL_LABEL'; String get manageAttendanceLabel => 'HOME_MANAGE_ATTENDANCE_LABEL'; - String get closeHouseHoldLabel => 'HOME_CLOSE_HOUSEHOLD_LABEL'; + String get closedHouseHoldLabel => 'HOME_CLOSE_HOUSEHOLD_LABEL'; } class AcknowledgementSuccess { diff --git a/apps/health_campaign_field_worker_app/lib/utils/utils.dart b/apps/health_campaign_field_worker_app/lib/utils/utils.dart index 2fef1e81c..bf4173cf6 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/utils.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/utils.dart @@ -5,6 +5,8 @@ import 'dart:io'; import 'package:attendance_management/attendance_management.dart' as attendance_mappers; +import 'package:closed_household/closed_household.dart' + as closed_household_mappers; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:digit_components/theme/digit_theme.dart'; import 'package:digit_components/widgets/atoms/digit_toaster.dart'; @@ -395,6 +397,7 @@ initializeAllMappers() async { Future(() => inventory_mappers.initializeMappers()), Future(() => data_model_mappers.initializeMappers()), Future(() => registration_delivery_mappers.initializeMappers()), + Future(() => closed_household_mappers.initializeMappers()), ]; await Future.wait(initializations); } diff --git a/apps/health_campaign_field_worker_app/lib/widgets/home/home_item_card.dart b/apps/health_campaign_field_worker_app/lib/widgets/home/home_item_card.dart index 9351bdb7a..6a63e84f5 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/home/home_item_card.dart +++ b/apps/health_campaign_field_worker_app/lib/widgets/home/home_item_card.dart @@ -9,6 +9,7 @@ class HomeItemCard extends StatelessWidget { final String customIcon; final String label; final VoidCallback? onPressed; + final double? customIconSize; final bool enableCustomIcon; const HomeItemCard({ @@ -16,6 +17,7 @@ class HomeItemCard extends StatelessWidget { required this.label, this.enableCustomIcon = false, this.customIcon = "", + this.customIconSize, this.onPressed, super.key, }); @@ -38,8 +40,8 @@ class HomeItemCard extends StatelessWidget { if (enableCustomIcon) SvgPicture.asset( customIcon, - width: 25, - height: 25, + width: customIconSize ?? 25, + height: customIconSize ?? 25, ), if (!enableCustomIcon) Icon( diff --git a/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart b/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart index cb8bdd3f4..5c60c02ca 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart +++ b/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:attendance_management/attendance_management.dart'; import 'package:closed_household/data/repositories/local/user_action.dart'; import 'package:closed_household/data/repositories/oplog/oplog.dart'; +import 'package:closed_household/data/repositories/remote/user_action.dart'; import 'package:closed_household/models/entities/user_action.dart'; import 'package:inventory_management/inventory_management.dart'; import 'package:registration_delivery/registration_delivery.dart'; @@ -496,6 +497,13 @@ class NetworkManagerProviderWrapper extends StatelessWidget { create: (_) => StockReconciliationRemoteRepository(dio, actionMap: actions), ), + if (value == DataModelType.userAction) + RepositoryProvider< + RemoteRepository>( + create: (_) => + UserActionRemoteRepository(dio, actionMap: actions), + ), // INFO Need to add packages here ]); } diff --git a/apps/health_campaign_field_worker_app/lib/widgets/showcase/config/home_showcase.dart b/apps/health_campaign_field_worker_app/lib/widgets/showcase/config/home_showcase.dart index ee862af19..850ee01c2 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/showcase/config/home_showcase.dart +++ b/apps/health_campaign_field_worker_app/lib/widgets/showcase/config/home_showcase.dart @@ -24,7 +24,7 @@ class _HomePageShowcaseData { supervisorSyncData, deleteAll, db, - closeHouseHold, + closedHouseHold, ]; final distributorProgressBar = ShowcaseItemBuilder( @@ -99,8 +99,7 @@ class _HomePageShowcaseData { messageLocalizationKey: i18.home.db, ); - final closeHouseHold = ShowcaseItemBuilder( - messageLocalizationKey: i18.home.closeHouseHoldLabel, + final closedHouseHold = ShowcaseItemBuilder( + messageLocalizationKey: i18.home.closedHouseHoldLabel, ); - } diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 8bad5620b..97616fc0f 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -68,10 +68,11 @@ packages: attendance_management: dependency: "direct main" description: - path: "../../packages/attendance_management" - relative: true - source: path - version: "1.0.1+1" + name: attendance_management + sha256: "7a3719dcca80be6f9475bea2b1e5226e67fcc60f3c3c55d849aa4f7216512a43" + url: "https://pub.dev" + source: hosted + version: "1.0.1" audioplayers: dependency: "direct main" description: @@ -337,11 +338,12 @@ packages: source: hosted version: "1.1.1" closed_household: - dependency: "direct main" + dependency: transitive description: - path: "../../packages/closed_household" - relative: true - source: path + name: closed_household + sha256: "47d46553b034fceac6acda81e16f10b2d51a93cb509f5d596480a2bb6ff8aea3" + url: "https://pub.dev" + source: hosted version: "0.0.0-dev.1" code_builder: dependency: transitive @@ -489,17 +491,19 @@ packages: digit_components: dependency: "direct main" description: - path: "../../packages/digit_components" - relative: true - source: path - version: "1.0.0+5" + name: digit_components + sha256: "5c4702cfa2d05aa98756c1ecdae2593ad5cc4254a47341588b3269e004a22525" + url: "https://pub.dev" + source: hosted + version: "1.0.0+7" digit_data_model: dependency: "direct main" description: - path: "../../packages/digit_data_model" - relative: true - source: path - version: "1.0.2" + name: digit_data_model + sha256: "1258b5e96c6f63d32ab042a1d739360c93cab302e2f230b416dc4c54021e5e55" + url: "https://pub.dev" + source: hosted + version: "1.0.3-dev.1" digit_firebase_services: dependency: "direct main" description: @@ -510,10 +514,11 @@ packages: digit_scanner: dependency: "direct main" description: - path: "../../packages/digit_scanner" - relative: true - source: path - version: "1.0.2" + name: digit_scanner + sha256: bc172291df5ffe720e3d471fbc5c542086b8efecbdb6e25ee737381cc47c8e05 + url: "https://pub.dev" + source: hosted + version: "1.0.3-dev.1" digit_showcase: dependency: "direct main" description: @@ -1104,10 +1109,11 @@ packages: inventory_management: dependency: "direct main" description: - path: "../../packages/inventory_management" - relative: true - source: path - version: "0.0.0-dev.11" + name: inventory_management + sha256: "2be2d09552432266bef3c11f2cd6d12ce83f39339c925d350aeda764c2acfef9" + url: "https://pub.dev" + source: hosted + version: "1.0.2" io: dependency: transitive description: @@ -1519,17 +1525,19 @@ packages: referral_reconciliation: dependency: "direct main" description: - path: "../../packages/referral_reconciliation" - relative: true - source: path + name: referral_reconciliation + sha256: "27f03bb51743cb9b25419fc1089507ee95693270a43233b92194298b1f87779c" + url: "https://pub.dev" + source: hosted version: "1.0.2" registration_delivery: dependency: "direct main" description: - path: "../../packages/registration_delivery" - relative: true - source: path - version: "0.0.0-dev.10" + name: registration_delivery + sha256: f585fefa762ac708358455d76c43476a66df236b5855ffcc87a18840acf9666c + url: "https://pub.dev" + source: hosted + version: "1.0.3-dev.2" remove_emoji_input_formatter: dependency: transitive description: @@ -2064,5 +2072,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <4.0.0" + dart: ">=3.2.0 <3.9.0" flutter: ">=3.16.0" diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 49f39928f..04344b0c7 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -1,7 +1,7 @@ name: health_campaign_field_worker_app description: A new Flutter project. publish_to: 'none' -version: 1.4.0+0 +version: 1.5.0+0 environment: sdk: '>=3.0.0 <=4.0.0' @@ -18,7 +18,7 @@ dependencies: sqlite3_flutter_libs: ^0.5.10 path_provider: ^2.0.11 path: ^1.8.2 - digit_components: ^1.0.0+2 + digit_components: ^1.0.0+7 auto_route: ^7.8.4 flutter_bloc: ^8.1.1 collection: ^1.16.0 @@ -66,12 +66,11 @@ dependencies: google_mlkit_barcode_scanning: ^0.10.0 camera: ^0.10.5+7 attendance_management: ^1.0.1 - digit_scanner: ^1.0.2 + digit_scanner: ^1.0.3-dev.1 inventory_management: ^1.0.2 referral_reconciliation: ^1.0.2 digit_data_model: ^1.0.2 - registration_delivery: ^1.0.2 - closed_household: ^0.0.1 + registration_delivery: ^1.0.3-dev.2 disable_battery_optimization: ^1.1.1 dev_dependencies: diff --git a/packages/closed_household/CHANGELOG.md b/packages/closed_household/CHANGELOG.md index 73c941694..a6dbba968 100644 --- a/packages/closed_household/CHANGELOG.md +++ b/packages/closed_household/CHANGELOG.md @@ -1,3 +1,4 @@ ## 0.0.0-dev.1 -* TODO: Describe initial release. +* Initial release of closed household flow + diff --git a/packages/closed_household/LICENSE b/packages/closed_household/LICENSE index ba75c69f7..f7d7ac958 100644 --- a/packages/closed_household/LICENSE +++ b/packages/closed_household/LICENSE @@ -1 +1,21 @@ -TODO: Add your license here. +MIT License + +Copyright (c) 2024 eGovernments Foundation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/packages/closed_household/README.md b/packages/closed_household/README.md index 02fe8ecab..346dcdc82 100644 --- a/packages/closed_household/README.md +++ b/packages/closed_household/README.md @@ -1,39 +1,49 @@ - - -TODO: Put a short description of the package here that helps potential users -know whether this package might be useful for them. +ClosedHousehold helps health workers to mark a house hold closed after visiting and record the details like latitude and name of household head member. ## Features -TODO: List what your package can do. Maybe include images, gifs, or videos. +* Create a closed household +* Update user actions like Resolved, Sprayed etc. ## Getting started +To use this package, add the following dependency to your `pubspec.yaml` file: -TODO: List prerequisites and provide or point to information on how to -start using the package. +```yaml +dependencies: + closed_household: ^any +``` ## Usage -TODO: Include short and useful examples for package users. Add longer examples -to `/example` folder. +To Navigate to any screens of the package: + +First add closed_household_router to your main app router + +Navigate to the required screen using the below code and pass the required data: + +```dart +context.router.push(ClosedHouseholdDetailsRoute(),); +``` + +To Consume any bloc of the package in main app: + +```dart +BlocProvider(create: (context) {return ClosedHouseholdBloc();},), +``` + +Closed Household package requires below data to be passed from main app: ```dart -const like = 'sample'; +String? _tenantId; +String? _loggedInUserUuid; +String? _projectId; +BoundaryModel? _boundaryModel; +PersistenceConfiguration? _persistenceConfiguration = PersistenceConfiguration + .offlineFirst; ``` -## Additional information +To set the required data use: + +```dart +ClosedHouseholdSingleton().setInitialData(); -TODO: Tell users more about the package: where to find more information, how to -contribute to the package, how to file issues, what response they can expect -from the package authors, and more. diff --git a/packages/closed_household/lib/blocs/closed_household.dart b/packages/closed_household/lib/blocs/closed_household.dart index d9de62b61..7c5e94eae 100644 --- a/packages/closed_household/lib/blocs/closed_household.dart +++ b/packages/closed_household/lib/blocs/closed_household.dart @@ -1,11 +1,11 @@ import 'dart:async'; import 'package:closed_household/models/entities/user_action.dart'; -import 'package:digit_data_model/data/data_repository.dart'; +import 'package:digit_data_model/data_model.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import '../pages/closed_household_details.dart'; +import '../models/entities/status.dart'; part 'closed_household.freezed.dart'; @@ -21,6 +21,7 @@ class ClosedHouseholdBloc extends Bloc _handleSubmit( @@ -48,6 +49,54 @@ class ClosedHouseholdBloc extends Bloc _handleUpdate( + ClosedHouseholdUpdateEvent event, + ClosedHouseholdEmitter emit, + ) async { + emit(state.copyWith(loading: true)); + + try { + List userActions = []; + + userActions = await closedHouseholdRepository.search( + UserActionSearchModel(clientReferenceId: [event.selectedClientReferenceId]), + ); + + if (userActions.isNotEmpty) { + final userAction = userActions.first; + final updatedUserAction = userAction.copyWith( + status: Status.resolved.toValue(), + additionalFields: UserActionAdditionalFields( + version: 1, + fields: [ + AdditionalField( + 'HouseholdId', + event.selectedHouseholdId, + ), + ], + ), + ); + + await closedHouseholdRepository.update(updatedUserAction); + + emit(state.copyWith( + loading: false, + userActions: [updatedUserAction], + )); + } else { + emit(state.copyWith( + loading: false, + userActions: [], + )); + } + } catch (error) { + emit(state.copyWith( + loading: false, + userActions: [], + )); + } + } + } @freezed @@ -60,6 +109,12 @@ class ClosedHouseholdEvent with _$ClosedHouseholdEvent { const factory ClosedHouseholdEvent.handleSummary( UserActionModel summary, ) = ClosedHouseholdSummaryEvent; + + const factory ClosedHouseholdEvent.handleUpdate( + String selectedClientReferenceId, + String selectedHouseholdId, + ) = ClosedHouseholdUpdateEvent; + } @freezed @@ -69,5 +124,7 @@ class ClosedHouseholdState with _$ClosedHouseholdState { @Default(false) bool isEditing, List? userActions, UserActionModel? summary, + String? selectedClientReferenceId, + String? selectedHouseholdId, }) = _ClosedHouseholdState; } diff --git a/packages/closed_household/lib/blocs/closed_household.freezed.dart b/packages/closed_household/lib/blocs/closed_household.freezed.dart index 70b9f05c5..e0dbe9128 100644 --- a/packages/closed_household/lib/blocs/closed_household.freezed.dart +++ b/packages/closed_household/lib/blocs/closed_household.freezed.dart @@ -21,18 +21,27 @@ mixin _$ClosedHouseholdEvent { required TResult Function(UserActionModel userAction, bool isEditing) handleSubmit, required TResult Function(UserActionModel summary) handleSummary, + required TResult Function( + String selectedClientReferenceId, String selectedHouseholdId) + handleUpdate, }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? whenOrNull({ TResult? Function(UserActionModel userAction, bool isEditing)? handleSubmit, TResult? Function(UserActionModel summary)? handleSummary, + TResult? Function( + String selectedClientReferenceId, String selectedHouseholdId)? + handleUpdate, }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeWhen({ TResult Function(UserActionModel userAction, bool isEditing)? handleSubmit, TResult Function(UserActionModel summary)? handleSummary, + TResult Function( + String selectedClientReferenceId, String selectedHouseholdId)? + handleUpdate, required TResult orElse(), }) => throw _privateConstructorUsedError; @@ -40,18 +49,21 @@ mixin _$ClosedHouseholdEvent { TResult map({ required TResult Function(ClosedHouseholdSubmitEvent value) handleSubmit, required TResult Function(ClosedHouseholdSummaryEvent value) handleSummary, + required TResult Function(ClosedHouseholdUpdateEvent value) handleUpdate, }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? mapOrNull({ TResult? Function(ClosedHouseholdSubmitEvent value)? handleSubmit, TResult? Function(ClosedHouseholdSummaryEvent value)? handleSummary, + TResult? Function(ClosedHouseholdUpdateEvent value)? handleUpdate, }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeMap({ TResult Function(ClosedHouseholdSubmitEvent value)? handleSubmit, TResult Function(ClosedHouseholdSummaryEvent value)? handleSummary, + TResult Function(ClosedHouseholdUpdateEvent value)? handleUpdate, required TResult orElse(), }) => throw _privateConstructorUsedError; @@ -157,6 +169,9 @@ class _$ClosedHouseholdSubmitEventImpl implements ClosedHouseholdSubmitEvent { required TResult Function(UserActionModel userAction, bool isEditing) handleSubmit, required TResult Function(UserActionModel summary) handleSummary, + required TResult Function( + String selectedClientReferenceId, String selectedHouseholdId) + handleUpdate, }) { return handleSubmit(userAction, isEditing); } @@ -166,6 +181,9 @@ class _$ClosedHouseholdSubmitEventImpl implements ClosedHouseholdSubmitEvent { TResult? whenOrNull({ TResult? Function(UserActionModel userAction, bool isEditing)? handleSubmit, TResult? Function(UserActionModel summary)? handleSummary, + TResult? Function( + String selectedClientReferenceId, String selectedHouseholdId)? + handleUpdate, }) { return handleSubmit?.call(userAction, isEditing); } @@ -175,6 +193,9 @@ class _$ClosedHouseholdSubmitEventImpl implements ClosedHouseholdSubmitEvent { TResult maybeWhen({ TResult Function(UserActionModel userAction, bool isEditing)? handleSubmit, TResult Function(UserActionModel summary)? handleSummary, + TResult Function( + String selectedClientReferenceId, String selectedHouseholdId)? + handleUpdate, required TResult orElse(), }) { if (handleSubmit != null) { @@ -188,6 +209,7 @@ class _$ClosedHouseholdSubmitEventImpl implements ClosedHouseholdSubmitEvent { TResult map({ required TResult Function(ClosedHouseholdSubmitEvent value) handleSubmit, required TResult Function(ClosedHouseholdSummaryEvent value) handleSummary, + required TResult Function(ClosedHouseholdUpdateEvent value) handleUpdate, }) { return handleSubmit(this); } @@ -197,6 +219,7 @@ class _$ClosedHouseholdSubmitEventImpl implements ClosedHouseholdSubmitEvent { TResult? mapOrNull({ TResult? Function(ClosedHouseholdSubmitEvent value)? handleSubmit, TResult? Function(ClosedHouseholdSummaryEvent value)? handleSummary, + TResult? Function(ClosedHouseholdUpdateEvent value)? handleUpdate, }) { return handleSubmit?.call(this); } @@ -206,6 +229,7 @@ class _$ClosedHouseholdSubmitEventImpl implements ClosedHouseholdSubmitEvent { TResult maybeMap({ TResult Function(ClosedHouseholdSubmitEvent value)? handleSubmit, TResult Function(ClosedHouseholdSummaryEvent value)? handleSummary, + TResult Function(ClosedHouseholdUpdateEvent value)? handleUpdate, required TResult orElse(), }) { if (handleSubmit != null) { @@ -298,6 +322,9 @@ class _$ClosedHouseholdSummaryEventImpl implements ClosedHouseholdSummaryEvent { required TResult Function(UserActionModel userAction, bool isEditing) handleSubmit, required TResult Function(UserActionModel summary) handleSummary, + required TResult Function( + String selectedClientReferenceId, String selectedHouseholdId) + handleUpdate, }) { return handleSummary(summary); } @@ -307,6 +334,9 @@ class _$ClosedHouseholdSummaryEventImpl implements ClosedHouseholdSummaryEvent { TResult? whenOrNull({ TResult? Function(UserActionModel userAction, bool isEditing)? handleSubmit, TResult? Function(UserActionModel summary)? handleSummary, + TResult? Function( + String selectedClientReferenceId, String selectedHouseholdId)? + handleUpdate, }) { return handleSummary?.call(summary); } @@ -316,6 +346,9 @@ class _$ClosedHouseholdSummaryEventImpl implements ClosedHouseholdSummaryEvent { TResult maybeWhen({ TResult Function(UserActionModel userAction, bool isEditing)? handleSubmit, TResult Function(UserActionModel summary)? handleSummary, + TResult Function( + String selectedClientReferenceId, String selectedHouseholdId)? + handleUpdate, required TResult orElse(), }) { if (handleSummary != null) { @@ -329,6 +362,7 @@ class _$ClosedHouseholdSummaryEventImpl implements ClosedHouseholdSummaryEvent { TResult map({ required TResult Function(ClosedHouseholdSubmitEvent value) handleSubmit, required TResult Function(ClosedHouseholdSummaryEvent value) handleSummary, + required TResult Function(ClosedHouseholdUpdateEvent value) handleUpdate, }) { return handleSummary(this); } @@ -338,6 +372,7 @@ class _$ClosedHouseholdSummaryEventImpl implements ClosedHouseholdSummaryEvent { TResult? mapOrNull({ TResult? Function(ClosedHouseholdSubmitEvent value)? handleSubmit, TResult? Function(ClosedHouseholdSummaryEvent value)? handleSummary, + TResult? Function(ClosedHouseholdUpdateEvent value)? handleUpdate, }) { return handleSummary?.call(this); } @@ -347,6 +382,7 @@ class _$ClosedHouseholdSummaryEventImpl implements ClosedHouseholdSummaryEvent { TResult maybeMap({ TResult Function(ClosedHouseholdSubmitEvent value)? handleSubmit, TResult Function(ClosedHouseholdSummaryEvent value)? handleSummary, + TResult Function(ClosedHouseholdUpdateEvent value)? handleUpdate, required TResult orElse(), }) { if (handleSummary != null) { @@ -366,12 +402,180 @@ abstract class ClosedHouseholdSummaryEvent implements ClosedHouseholdEvent { get copyWith => throw _privateConstructorUsedError; } +/// @nodoc +abstract class _$$ClosedHouseholdUpdateEventImplCopyWith<$Res> { + factory _$$ClosedHouseholdUpdateEventImplCopyWith( + _$ClosedHouseholdUpdateEventImpl value, + $Res Function(_$ClosedHouseholdUpdateEventImpl) then) = + __$$ClosedHouseholdUpdateEventImplCopyWithImpl<$Res>; + @useResult + $Res call({String selectedClientReferenceId, String selectedHouseholdId}); +} + +/// @nodoc +class __$$ClosedHouseholdUpdateEventImplCopyWithImpl<$Res> + extends _$ClosedHouseholdEventCopyWithImpl<$Res, + _$ClosedHouseholdUpdateEventImpl> + implements _$$ClosedHouseholdUpdateEventImplCopyWith<$Res> { + __$$ClosedHouseholdUpdateEventImplCopyWithImpl( + _$ClosedHouseholdUpdateEventImpl _value, + $Res Function(_$ClosedHouseholdUpdateEventImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? selectedClientReferenceId = null, + Object? selectedHouseholdId = null, + }) { + return _then(_$ClosedHouseholdUpdateEventImpl( + null == selectedClientReferenceId + ? _value.selectedClientReferenceId + : selectedClientReferenceId // ignore: cast_nullable_to_non_nullable + as String, + null == selectedHouseholdId + ? _value.selectedHouseholdId + : selectedHouseholdId // ignore: cast_nullable_to_non_nullable + as String, + )); + } +} + +/// @nodoc + +class _$ClosedHouseholdUpdateEventImpl implements ClosedHouseholdUpdateEvent { + const _$ClosedHouseholdUpdateEventImpl( + this.selectedClientReferenceId, this.selectedHouseholdId); + + @override + final String selectedClientReferenceId; + @override + final String selectedHouseholdId; + + @override + String toString() { + return 'ClosedHouseholdEvent.handleUpdate(selectedClientReferenceId: $selectedClientReferenceId, selectedHouseholdId: $selectedHouseholdId)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$ClosedHouseholdUpdateEventImpl && + (identical(other.selectedClientReferenceId, + selectedClientReferenceId) || + other.selectedClientReferenceId == selectedClientReferenceId) && + (identical(other.selectedHouseholdId, selectedHouseholdId) || + other.selectedHouseholdId == selectedHouseholdId)); + } + + @override + int get hashCode => + Object.hash(runtimeType, selectedClientReferenceId, selectedHouseholdId); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$ClosedHouseholdUpdateEventImplCopyWith<_$ClosedHouseholdUpdateEventImpl> + get copyWith => __$$ClosedHouseholdUpdateEventImplCopyWithImpl< + _$ClosedHouseholdUpdateEventImpl>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function(UserActionModel userAction, bool isEditing) + handleSubmit, + required TResult Function(UserActionModel summary) handleSummary, + required TResult Function( + String selectedClientReferenceId, String selectedHouseholdId) + handleUpdate, + }) { + return handleUpdate(selectedClientReferenceId, selectedHouseholdId); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function(UserActionModel userAction, bool isEditing)? handleSubmit, + TResult? Function(UserActionModel summary)? handleSummary, + TResult? Function( + String selectedClientReferenceId, String selectedHouseholdId)? + handleUpdate, + }) { + return handleUpdate?.call(selectedClientReferenceId, selectedHouseholdId); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function(UserActionModel userAction, bool isEditing)? handleSubmit, + TResult Function(UserActionModel summary)? handleSummary, + TResult Function( + String selectedClientReferenceId, String selectedHouseholdId)? + handleUpdate, + required TResult orElse(), + }) { + if (handleUpdate != null) { + return handleUpdate(selectedClientReferenceId, selectedHouseholdId); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(ClosedHouseholdSubmitEvent value) handleSubmit, + required TResult Function(ClosedHouseholdSummaryEvent value) handleSummary, + required TResult Function(ClosedHouseholdUpdateEvent value) handleUpdate, + }) { + return handleUpdate(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(ClosedHouseholdSubmitEvent value)? handleSubmit, + TResult? Function(ClosedHouseholdSummaryEvent value)? handleSummary, + TResult? Function(ClosedHouseholdUpdateEvent value)? handleUpdate, + }) { + return handleUpdate?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(ClosedHouseholdSubmitEvent value)? handleSubmit, + TResult Function(ClosedHouseholdSummaryEvent value)? handleSummary, + TResult Function(ClosedHouseholdUpdateEvent value)? handleUpdate, + required TResult orElse(), + }) { + if (handleUpdate != null) { + return handleUpdate(this); + } + return orElse(); + } +} + +abstract class ClosedHouseholdUpdateEvent implements ClosedHouseholdEvent { + const factory ClosedHouseholdUpdateEvent( + final String selectedClientReferenceId, + final String selectedHouseholdId) = _$ClosedHouseholdUpdateEventImpl; + + String get selectedClientReferenceId; + String get selectedHouseholdId; + @JsonKey(ignore: true) + _$$ClosedHouseholdUpdateEventImplCopyWith<_$ClosedHouseholdUpdateEventImpl> + get copyWith => throw _privateConstructorUsedError; +} + /// @nodoc mixin _$ClosedHouseholdState { bool get loading => throw _privateConstructorUsedError; bool get isEditing => throw _privateConstructorUsedError; List? get userActions => throw _privateConstructorUsedError; UserActionModel? get summary => throw _privateConstructorUsedError; + String? get selectedClientReferenceId => throw _privateConstructorUsedError; + String? get selectedHouseholdId => throw _privateConstructorUsedError; @JsonKey(ignore: true) $ClosedHouseholdStateCopyWith get copyWith => @@ -388,7 +592,9 @@ abstract class $ClosedHouseholdStateCopyWith<$Res> { {bool loading, bool isEditing, List? userActions, - UserActionModel? summary}); + UserActionModel? summary, + String? selectedClientReferenceId, + String? selectedHouseholdId}); } /// @nodoc @@ -409,6 +615,8 @@ class _$ClosedHouseholdStateCopyWithImpl<$Res, Object? isEditing = null, Object? userActions = freezed, Object? summary = freezed, + Object? selectedClientReferenceId = freezed, + Object? selectedHouseholdId = freezed, }) { return _then(_value.copyWith( loading: null == loading @@ -427,6 +635,14 @@ class _$ClosedHouseholdStateCopyWithImpl<$Res, ? _value.summary : summary // ignore: cast_nullable_to_non_nullable as UserActionModel?, + selectedClientReferenceId: freezed == selectedClientReferenceId + ? _value.selectedClientReferenceId + : selectedClientReferenceId // ignore: cast_nullable_to_non_nullable + as String?, + selectedHouseholdId: freezed == selectedHouseholdId + ? _value.selectedHouseholdId + : selectedHouseholdId // ignore: cast_nullable_to_non_nullable + as String?, ) as $Val); } } @@ -443,7 +659,9 @@ abstract class _$$ClosedHouseholdStateImplCopyWith<$Res> {bool loading, bool isEditing, List? userActions, - UserActionModel? summary}); + UserActionModel? summary, + String? selectedClientReferenceId, + String? selectedHouseholdId}); } /// @nodoc @@ -461,6 +679,8 @@ class __$$ClosedHouseholdStateImplCopyWithImpl<$Res> Object? isEditing = null, Object? userActions = freezed, Object? summary = freezed, + Object? selectedClientReferenceId = freezed, + Object? selectedHouseholdId = freezed, }) { return _then(_$ClosedHouseholdStateImpl( loading: null == loading @@ -479,6 +699,14 @@ class __$$ClosedHouseholdStateImplCopyWithImpl<$Res> ? _value.summary : summary // ignore: cast_nullable_to_non_nullable as UserActionModel?, + selectedClientReferenceId: freezed == selectedClientReferenceId + ? _value.selectedClientReferenceId + : selectedClientReferenceId // ignore: cast_nullable_to_non_nullable + as String?, + selectedHouseholdId: freezed == selectedHouseholdId + ? _value.selectedHouseholdId + : selectedHouseholdId // ignore: cast_nullable_to_non_nullable + as String?, )); } } @@ -490,7 +718,9 @@ class _$ClosedHouseholdStateImpl implements _ClosedHouseholdState { {this.loading = false, this.isEditing = false, final List? userActions, - this.summary}) + this.summary, + this.selectedClientReferenceId, + this.selectedHouseholdId}) : _userActions = userActions; @override @@ -511,10 +741,14 @@ class _$ClosedHouseholdStateImpl implements _ClosedHouseholdState { @override final UserActionModel? summary; + @override + final String? selectedClientReferenceId; + @override + final String? selectedHouseholdId; @override String toString() { - return 'ClosedHouseholdState(loading: $loading, isEditing: $isEditing, userActions: $userActions, summary: $summary)'; + return 'ClosedHouseholdState(loading: $loading, isEditing: $isEditing, userActions: $userActions, summary: $summary, selectedClientReferenceId: $selectedClientReferenceId, selectedHouseholdId: $selectedHouseholdId)'; } @override @@ -527,12 +761,23 @@ class _$ClosedHouseholdStateImpl implements _ClosedHouseholdState { other.isEditing == isEditing) && const DeepCollectionEquality() .equals(other._userActions, _userActions) && - (identical(other.summary, summary) || other.summary == summary)); + (identical(other.summary, summary) || other.summary == summary) && + (identical(other.selectedClientReferenceId, + selectedClientReferenceId) || + other.selectedClientReferenceId == selectedClientReferenceId) && + (identical(other.selectedHouseholdId, selectedHouseholdId) || + other.selectedHouseholdId == selectedHouseholdId)); } @override - int get hashCode => Object.hash(runtimeType, loading, isEditing, - const DeepCollectionEquality().hash(_userActions), summary); + int get hashCode => Object.hash( + runtimeType, + loading, + isEditing, + const DeepCollectionEquality().hash(_userActions), + summary, + selectedClientReferenceId, + selectedHouseholdId); @JsonKey(ignore: true) @override @@ -548,7 +793,9 @@ abstract class _ClosedHouseholdState implements ClosedHouseholdState { {final bool loading, final bool isEditing, final List? userActions, - final UserActionModel? summary}) = _$ClosedHouseholdStateImpl; + final UserActionModel? summary, + final String? selectedClientReferenceId, + final String? selectedHouseholdId}) = _$ClosedHouseholdStateImpl; @override bool get loading; @@ -559,6 +806,10 @@ abstract class _ClosedHouseholdState implements ClosedHouseholdState { @override UserActionModel? get summary; @override + String? get selectedClientReferenceId; + @override + String? get selectedHouseholdId; + @override @JsonKey(ignore: true) _$$ClosedHouseholdStateImplCopyWith<_$ClosedHouseholdStateImpl> get copyWith => throw _privateConstructorUsedError; diff --git a/packages/closed_household/lib/closed_household.dart b/packages/closed_household/lib/closed_household.dart index 85ea3603b..8f624e673 100644 --- a/packages/closed_household/lib/closed_household.dart +++ b/packages/closed_household/lib/closed_household.dart @@ -1,7 +1,20 @@ +@MappableLib( + generateInitializerForScope: InitializerScope.package, +) library closed_household; +import 'package:dart_mappable/dart_mappable.dart'; + export 'blocs/app_localization.dart'; +export 'blocs/closed_household.dart'; +export 'models/entities/user_action.dart'; +export 'models/entities/action.dart'; +export 'models/entities/status.dart'; export 'utils/utils.dart' show ClosedHouseholdSingleton; export 'pages/closed_household_details.dart'; export 'pages/closed_household_summary.dart'; +export 'pages/closed_household_acknowledgement.dart'; +export 'pages/closed_household_wrapper.dart'; +export 'closed_household.init.dart'; + diff --git a/packages/closed_household/lib/closed_household.init.dart b/packages/closed_household/lib/closed_household.init.dart new file mode 100644 index 000000000..177565941 --- /dev/null +++ b/packages/closed_household/lib/closed_household.init.dart @@ -0,0 +1,16 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element + +import 'models/entities/action.dart' as p0; +import 'models/entities/status.dart' as p1; +import 'models/entities/user_action.dart' as p2; + +void initializeMappers() { + p0.ActionsMapper.ensureInitialized(); + p1.StatusMapper.ensureInitialized(); + p2.UserActionSearchModelMapper.ensureInitialized(); + p2.UserActionModelMapper.ensureInitialized(); + p2.UserActionAdditionalFieldsMapper.ensureInitialized(); +} diff --git a/packages/closed_household/lib/data/repositories/local/base/user_action_base.dart b/packages/closed_household/lib/data/repositories/local/base/user_action_base.dart index d2e547f71..1954f63bb 100644 --- a/packages/closed_household/lib/data/repositories/local/base/user_action_base.dart +++ b/packages/closed_household/lib/data/repositories/local/base/user_action_base.dart @@ -10,8 +10,8 @@ abstract class UserActionLocalBaseRepository super.sql, super.opLogManager,); @override - DataModelType get type => DataModelType.task; + DataModelType get type => DataModelType.userAction; @override - TableInfo get table => sql.task; + TableInfo get table => sql.userAction; } diff --git a/packages/closed_household/lib/data/repositories/local/user_action.dart b/packages/closed_household/lib/data/repositories/local/user_action.dart index 2de95900f..d0d3a4dec 100644 --- a/packages/closed_household/lib/data/repositories/local/user_action.dart +++ b/packages/closed_household/lib/data/repositories/local/user_action.dart @@ -5,11 +5,12 @@ import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; import '../../../models/entities/user_action.dart'; -class ClosedHouseholdLocalRepository extends LocalRepository { +class ClosedHouseholdLocalRepository + extends LocalRepository { ClosedHouseholdLocalRepository( - super.sql, - super.opLogManager, - ); + super.sql, + super.opLogManager, + ); void listenToChanges({ required UserActionSearchModel query, @@ -18,24 +19,23 @@ class ClosedHouseholdLocalRepository extends LocalRepository buildOr([ - if (query.projectId != null) - t.projectId.equals(query.projectId!), - ])); + if (query.projectId != null) t.projectId.equals(query.projectId!), + ])); select.watch().listen((results) { final data = results .map((userAction) { - return UserActionModel( - id: userAction.id, - clientReferenceId: userAction.clientReferenceId, - rowVersion: userAction.rowVersion, - tenantId: userAction.tenantId, - isDeleted: userAction.isDeleted, - projectId: userAction.projectId, - status: userAction.status, - action: userAction.action, - ); - }) + return UserActionModel( + id: userAction.id, + clientReferenceId: userAction.clientReferenceId, + rowVersion: userAction.rowVersion, + tenantId: userAction.tenantId, + isDeleted: userAction.isDeleted, + projectId: userAction.projectId, + status: userAction.status, + action: userAction.action, + ); + }) .whereNotNull() .where((element) => element.isDeleted != true) .toList(); @@ -47,19 +47,69 @@ class ClosedHouseholdLocalRepository extends LocalRepository> search( - UserActionSearchModel query, [ - String? userId, - ]) async { + UserActionSearchModel query, [ + String? userId, + ]) async { return retryLocalCallOperation>(() async { - //TODO: implement search - return []; + final userAction = sql.select(sql.userAction).join([]); + + if (query.projectId != null) { + userAction.where( + sql.userAction.clientReferenceId + .equals(query.clientReferenceId!.first), + ); + } + + final results = await userAction.get(); + final userActionTable = results.map((e) => e.readTable(sql.userAction)); + return userActionTable + .map((e) => UserActionModel( + clientReferenceId: e.clientReferenceId, + action: e.action, + additionalFields: e.additionalFields != null + ? UserActionAdditionalFieldsMapper.fromJson( + e.additionalFields!.toString()) + : null, + auditDetails: + (e.auditCreatedBy != null && e.auditCreatedTime != null) + ? AuditDetails( + createdBy: e.auditCreatedBy!, + createdTime: e.auditCreatedTime!, + lastModifiedBy: e.auditModifiedBy, + lastModifiedTime: e.auditModifiedTime, + ) + : null, + clientAuditDetails: + (e.clientCreatedBy != null && e.clientCreatedTime != null) + ? ClientAuditDetails( + createdBy: e.clientCreatedBy!, + createdTime: e.clientCreatedTime!, + lastModifiedBy: e.clientModifiedBy, + lastModifiedTime: e.clientModifiedTime, + ) + : null, + beneficiaryTag: e.beneficiaryTag, + boundaryCode: e.boundaryCode, + id: e.id, + projectId: e.projectId, + rowVersion: e.rowVersion, + status: e.status, + tenantId: e.tenantId, + isDeleted: e.isDeleted, + latitude: e.latitude, + locationAccuracy: e.locationAccuracy, + longitude: e.longitude, + nonRecoverableError: e.nonRecoverableError, + resourceTag: e.resourceTag, + )) + .toList(); }); } @override FutureOr bulkCreate( - List entities, - ) async { + List entities, + ) async { final userActionCompanions = entities.map((e) => e.companion).toList(); await sql.batch((batch) async { @@ -71,12 +121,11 @@ class ClosedHouseholdLocalRepository extends LocalRepository update( - UserActionModel entity, { - bool createOpLog = true, - }) async { + UserActionModel entity, { + bool createOpLog = true, + }) async { final userActionCompanion = entity.companion; await sql.batch((batch) { @@ -94,10 +143,10 @@ class ClosedHouseholdLocalRepository extends LocalRepository create( - UserActionModel entity, { - bool createOpLog = true, - DataOperation dataOperation = DataOperation.create, - }) async { + UserActionModel entity, { + bool createOpLog = true, + DataOperation dataOperation = DataOperation.create, + }) async { retryLocalCallOperation(() async { final closedHouseholdCompanion = entity.companion; diff --git a/packages/closed_household/lib/data/repositories/remote/user_action.dart b/packages/closed_household/lib/data/repositories/remote/user_action.dart new file mode 100644 index 000000000..ac8bfece0 --- /dev/null +++ b/packages/closed_household/lib/data/repositories/remote/user_action.dart @@ -0,0 +1,15 @@ +import 'package:closed_household/models/entities/user_action.dart'; +import 'package:digit_data_model/data_model.dart'; + +class UserActionRemoteRepository + extends RemoteRepository { + UserActionRemoteRepository( + super.dio, { + required super.actionMap, + super.entityName = 'UserAction', + super.isSearchResponsePlural = true, + }); + + @override + DataModelType get type => DataModelType.userAction; +} diff --git a/packages/closed_household/lib/models/entities/status.dart b/packages/closed_household/lib/models/entities/status.dart index 707761f26..ca33d1de4 100644 --- a/packages/closed_household/lib/models/entities/status.dart +++ b/packages/closed_household/lib/models/entities/status.dart @@ -5,7 +5,6 @@ part 'status.mapper.dart'; @MappableEnum(caseStyle: CaseStyle.upperCase) enum Status { @MappableValue("CLOSED_HOUSEHOLD") closeHousehold, - @MappableValue("LOCATION_CAPTURE") locationCapture, @MappableValue("REFUSED") refused, @MappableValue("SPRAYED") sprayed, @MappableValue("INELIGIBLE") ineligible, diff --git a/packages/closed_household/lib/models/entities/status.mapper.dart b/packages/closed_household/lib/models/entities/status.mapper.dart index 75df6ba0e..dd006a045 100644 --- a/packages/closed_household/lib/models/entities/status.mapper.dart +++ b/packages/closed_household/lib/models/entities/status.mapper.dart @@ -27,8 +27,6 @@ class StatusMapper extends EnumMapper { switch (value) { case "CLOSED_HOUSEHOLD": return Status.closeHousehold; - case "LOCATION_CAPTURE": - return Status.locationCapture; case "REFUSED": return Status.refused; case "SPRAYED": @@ -47,8 +45,6 @@ class StatusMapper extends EnumMapper { switch (self) { case Status.closeHousehold: return "CLOSED_HOUSEHOLD"; - case Status.locationCapture: - return "LOCATION_CAPTURE"; case Status.refused: return "REFUSED"; case Status.sprayed: diff --git a/packages/closed_household/lib/models/entities/user_action.dart b/packages/closed_household/lib/models/entities/user_action.dart index 1b05bab61..87094e261 100644 --- a/packages/closed_household/lib/models/entities/user_action.dart +++ b/packages/closed_household/lib/models/entities/user_action.dart @@ -53,7 +53,7 @@ class UserActionModel extends EntityModel with UserActionModelMappable { final bool? nonRecoverableError; final String clientReferenceId; final String? tenantId; - final String? boundary; + final String? boundaryCode; final int? rowVersion; final String? resourceTag; final String? beneficiaryTag; @@ -71,7 +71,7 @@ class UserActionModel extends EntityModel with UserActionModelMappable { this.nonRecoverableError = false, required this.clientReferenceId, this.tenantId, - this.boundary, + this.boundaryCode, this.rowVersion, this.beneficiaryTag, this.resourceTag, @@ -103,11 +103,11 @@ class UserActionModel extends EntityModel with UserActionModelMappable { nonRecoverableError: Value(nonRecoverableError), clientReferenceId: Value(clientReferenceId), tenantId: Value(tenantId), - boundaryCode: Value(boundary), + boundaryCode: Value(boundaryCode), rowVersion: Value(rowVersion), action: Value(action), - beneficiaryTags: Value(beneficiaryTag), - resourceTags: Value(resourceTag), + beneficiaryTag: Value(beneficiaryTag), + resourceTag: Value(resourceTag), latitude: Value(latitude), longitude: Value(longitude), locationAccuracy: Value(locationAccuracy), diff --git a/packages/closed_household/lib/models/entities/user_action.mapper.dart b/packages/closed_household/lib/models/entities/user_action.mapper.dart index 15ec2cb7d..02fcc7ef9 100644 --- a/packages/closed_household/lib/models/entities/user_action.mapper.dart +++ b/packages/closed_household/lib/models/entities/user_action.mapper.dart @@ -277,9 +277,9 @@ class UserActionModelMapper extends SubClassMapperBase { static String? _$tenantId(UserActionModel v) => v.tenantId; static const Field _f$tenantId = Field('tenantId', _$tenantId, opt: true); - static String? _$boundary(UserActionModel v) => v.boundary; - static const Field _f$boundary = - Field('boundary', _$boundary, opt: true); + static String? _$boundaryCode(UserActionModel v) => v.boundaryCode; + static const Field _f$boundaryCode = + Field('boundaryCode', _$boundaryCode, opt: true); static int? _$rowVersion(UserActionModel v) => v.rowVersion; static const Field _f$rowVersion = Field('rowVersion', _$rowVersion, opt: true); @@ -322,7 +322,7 @@ class UserActionModelMapper extends SubClassMapperBase { #nonRecoverableError: _f$nonRecoverableError, #clientReferenceId: _f$clientReferenceId, #tenantId: _f$tenantId, - #boundary: _f$boundary, + #boundaryCode: _f$boundaryCode, #rowVersion: _f$rowVersion, #beneficiaryTag: _f$beneficiaryTag, #resourceTag: _f$resourceTag, @@ -354,7 +354,7 @@ class UserActionModelMapper extends SubClassMapperBase { nonRecoverableError: data.dec(_f$nonRecoverableError), clientReferenceId: data.dec(_f$clientReferenceId), tenantId: data.dec(_f$tenantId), - boundary: data.dec(_f$boundary), + boundaryCode: data.dec(_f$boundaryCode), rowVersion: data.dec(_f$rowVersion), beneficiaryTag: data.dec(_f$beneficiaryTag), resourceTag: data.dec(_f$resourceTag), @@ -438,7 +438,7 @@ abstract class UserActionModelCopyWith<$R, $In extends UserActionModel, $Out> bool? nonRecoverableError, String? clientReferenceId, String? tenantId, - String? boundary, + String? boundaryCode, int? rowVersion, String? beneficiaryTag, String? resourceTag, @@ -482,7 +482,7 @@ class _UserActionModelCopyWithImpl<$R, $Out> Object? nonRecoverableError = $none, String? clientReferenceId, Object? tenantId = $none, - Object? boundary = $none, + Object? boundaryCode = $none, Object? rowVersion = $none, Object? beneficiaryTag = $none, Object? resourceTag = $none, @@ -502,7 +502,7 @@ class _UserActionModelCopyWithImpl<$R, $Out> #nonRecoverableError: nonRecoverableError, if (clientReferenceId != null) #clientReferenceId: clientReferenceId, if (tenantId != $none) #tenantId: tenantId, - if (boundary != $none) #boundary: boundary, + if (boundaryCode != $none) #boundaryCode: boundaryCode, if (rowVersion != $none) #rowVersion: rowVersion, if (beneficiaryTag != $none) #beneficiaryTag: beneficiaryTag, if (resourceTag != $none) #resourceTag: resourceTag, @@ -527,7 +527,7 @@ class _UserActionModelCopyWithImpl<$R, $Out> clientReferenceId: data.get(#clientReferenceId, or: $value.clientReferenceId), tenantId: data.get(#tenantId, or: $value.tenantId), - boundary: data.get(#boundary, or: $value.boundary), + boundaryCode: data.get(#boundaryCode, or: $value.boundaryCode), rowVersion: data.get(#rowVersion, or: $value.rowVersion), beneficiaryTag: data.get(#beneficiaryTag, or: $value.beneficiaryTag), resourceTag: data.get(#resourceTag, or: $value.resourceTag), diff --git a/packages/closed_household/lib/pages/closed_household_details.dart b/packages/closed_household/lib/pages/closed_household_details.dart index 3751ae5df..f86cebdac 100644 --- a/packages/closed_household/lib/pages/closed_household_details.dart +++ b/packages/closed_household/lib/pages/closed_household_details.dart @@ -1,17 +1,14 @@ import 'package:auto_route/auto_route.dart'; -import 'package:closed_household/blocs/closed_household.dart'; import 'package:closed_household/closed_household.dart'; import 'package:digit_components/digit_components.dart'; +import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_components/widgets/atoms/text_block.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import '../../utils/i18_key_constants.dart' as i18; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; - -import '../models/entities/user_action.dart'; +import '../../utils/i18_key_constants.dart' as i18; import '../router/closed_household_router.gm.dart'; import '../widgets/back_navigation_help_header.dart'; import '../widgets/localized.dart'; @@ -24,10 +21,11 @@ class ClosedHouseholdDetailsPage extends LocalizedStatefulWidget { }); @override - State createState() => _ClosedHouseholdDetailsPageState(); + State createState() => + ClosedHouseholdDetailsPageState(); } -class _ClosedHouseholdDetailsPageState +class ClosedHouseholdDetailsPageState extends LocalizedState { static const _administrationAreaKey = 'administrationArea'; static const _householdHeadNameKey = 'householdHeadName'; @@ -38,8 +36,16 @@ class _ClosedHouseholdDetailsPageState @override void initState() { - //final registrationState = context.read().state; - + context.read().add(const LoadLocationEvent()); + + WidgetsBinding.instance.addPostFrameCallback((_) { + // Show the dialog after the first frame is built + DigitComponentsUtils().showLocationCapturingDialog( + context, + localizations.translate(i18.common.locationCapturing), + DigitSyncDialogType.inProgress, + ); + }); super.initState(); } @@ -54,10 +60,15 @@ class _ClosedHouseholdDetailsPageState form: () => buildForm(bloc.state), builder: (_, form, __) => BlocListener( listener: (context, locationState) { + if (locationState.accuracy != null) { + //Hide the dialog after 1 seconds + Future.delayed(const Duration(seconds: 1), () { + DigitComponentsUtils().hideLocationDialog(context); + }); + } final lat = locationState.latitude; final lng = locationState.longitude; final accuracy = locationState.accuracy; - form.control(_latKey).value ??= lat; form.control(_lngKey).value ??= lng; form.control(_accuracyKey).value ??= accuracy; @@ -72,128 +83,132 @@ class _ClosedHouseholdDetailsPageState : true; }, child: BlocBuilder( - builder: (context, state) { - return ScrollableContent( - enableFixedButton: true, - header: const Column( - children: [ - BackNavigationHelpHeaderWidget( - //showcaseButton: ShowcaseButton(), //TODO: - showHelp: false, - ), - ], - ), - footer: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: BlocBuilder( - builder: (context, locationState) { - return DigitElevatedButton( - onPressed: (){ - final summary = UserActionModel( - clientReferenceId: IdGen.i.identifier, - latitude: form.control(_latKey).value, - longitude: form.control(_lngKey).value, - locationAccuracy: form.control(_accuracyKey).value, - additionalFields: - UserActionAdditionalFields( - version: 1, - fields: [ - AdditionalField( - 'householdHead', - form.control(_householdHeadNameKey).value ?? '', - ), - ], - ), - ); - context.read().add( - ClosedHouseholdEvent.handleSummary(summary), - ); - context.router.push(ClosedHouseholdSummaryRoute()); - }, - child: Center( - child: Text( - localizations.translate( - i18.common.coreCommonNext, - ), + builder: (context, state) { + return ScrollableContent( + enableFixedButton: true, + header: const Column( + children: [ + BackNavigationHelpHeaderWidget( + //showcaseButton: ShowcaseButton(), //TODO: + showHelp: false, + ), + ], + ), + footer: DigitCard( + margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), + padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), + child: BlocBuilder( + builder: (context, locationState) { + return DigitElevatedButton( + onPressed: () { + final summary = UserActionModel( + clientReferenceId: IdGen.i.identifier, + latitude: form.control(_latKey).value, + longitude: form.control(_lngKey).value, + locationAccuracy: form.control(_accuracyKey).value, + additionalFields: form + .control(_householdHeadNameKey) + .value != + null + ? UserActionAdditionalFields( + version: 1, + fields: [ + AdditionalField( + 'householdHead', + form + .control(_householdHeadNameKey) + .value ?? + '', + ), + ], + ) + : null, + ); + context.read().add( + ClosedHouseholdEvent.handleSummary(summary), + ); + context.router.push(ClosedHouseholdSummaryRoute()); + }, + child: Center( + child: Text( + localizations.translate( + i18.common.coreCommonNext, ), ), - ); - }, - ), + ), + ); + }, ), - slivers: [ - SliverToBoxAdapter( - child: DigitCard( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - TextBlock( - heading: localizations.translate( - i18.closeHousehold - .closeHouseHoldDetailLabel, - ), - headingStyle: theme.textTheme.displayMedium, - body: localizations.translate( - i18.closeHousehold - .closeHouseHoldDetailDescLabel, - - ),), - Column(children: [ - DigitTextFormField( - formControlName: _administrationAreaKey, - label: localizations.translate( - i18.closeHousehold - .villageName, - ), - readOnly: true, + ), + slivers: [ + SliverToBoxAdapter( + child: DigitCard( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + TextBlock( + heading: localizations.translate( + i18.closeHousehold.closeHouseHoldDetailLabel, + ), + headingStyle: theme.textTheme.displayMedium, + body: localizations.translate( + i18.closeHousehold.closeHouseHoldDetailDescLabel, + ), + ), + Column(children: [ + DigitTextFormField( + formControlName: _administrationAreaKey, + label: localizations.translate( + i18.closeHousehold.villageName, ), - DigitTextFormField( - readOnly: true, - formControlName: _accuracyKey, - label: localizations.translate( - i18.closeHousehold - .accuracyLabel, - ), + readOnly: true, + ), + DigitTextFormField( + readOnly: true, + formControlName: _accuracyKey, + label: localizations.translate( + i18.closeHousehold.accuracyLabel, ), - - DigitTextFormField( - formControlName: _householdHeadNameKey, - label: localizations.translate( - i18.closeHousehold - .headNameLabel, - ), + ), + DigitTextFormField( + formControlName: _householdHeadNameKey, + label: localizations.translate( + i18.closeHousehold.headNameLabel, ), - ]), - ], - ), + validationMessages: { + 'maxLength': (object) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', maxLength.toString()), + }, + ), + ]), + ], ), ), - ], - ); - } - ), + ), + ], + ); + }), ), ), ); } FormGroup buildForm(ClosedHouseholdState state) { - return fb.group({ _administrationAreaKey: FormControl( - value: localizations.translate( - ClosedHouseholdSingleton().boundary!.name.toString()), + value: localizations + .translate(ClosedHouseholdSingleton().boundary!.name.toString()), validators: [Validators.required], ), - _householdHeadNameKey: FormControl( - value: '', - validators: [], + validators: [ + Validators.maxLength(200), + ], ), - _latKey: FormControl(value: state.userActions?.first.latitude, validators: [ - ]), + _latKey: FormControl( + value: state.userActions?.first.latitude, validators: []), _lngKey: FormControl( value: state.userActions?.first.longitude, ), @@ -203,4 +218,3 @@ class _ClosedHouseholdDetailsPageState }); } } - diff --git a/packages/closed_household/lib/pages/closed_household_summary.dart b/packages/closed_household/lib/pages/closed_household_summary.dart index a141cf5f8..6144e8475 100644 --- a/packages/closed_household/lib/pages/closed_household_summary.dart +++ b/packages/closed_household/lib/pages/closed_household_summary.dart @@ -30,15 +30,27 @@ class ClosedHouseholdSummaryPage extends LocalizedStatefulWidget { @override State createState() => - _ClosedHouseholdSummaryPageState(); + ClosedHouseholdSummaryPageState(); } -class _ClosedHouseholdSummaryPageState +class ClosedHouseholdSummaryPageState extends LocalizedState { String getLocalizedMessage(String code) { return localizations.translate(code); } + @override + void initState() { + context + .read() + .add( + const DigitScannerEvent + .handleScanner( + qrCode: [], + barCode: [])); + super.initState(); + } + @override Widget build(BuildContext context) { return BlocBuilder( @@ -59,55 +71,30 @@ class _ClosedHouseholdSummaryPageState return Column( mainAxisSize: MainAxisSize.min, children: [ - GestureDetector( - onTap: () { + DigitOutlineIconButton( + buttonStyle: OutlinedButton.styleFrom( + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.zero, + ), + ), + onPressed: () { Navigator.of(context).push( - //[TODO: Add the route to auto_route] + // [TODO: Add the route to auto_route] MaterialPageRoute( - builder: (context) => const DigitScannerPage( + builder: (context) => + const DigitScannerPage( quantity: 1, isGS1code: false, singleValue: true, - isEditEnabled: true, ), - settings: - const RouteSettings(name: '/qr-scanner'), + settings: const RouteSettings( + name: '/qr-scanner'), ), ); }, - child: Container( - color: const DigitColors().seaShellGray, - padding: const EdgeInsets.symmetric( - vertical: kPadding, horizontal: kPadding * 3), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Icon( - Icons.qr_code_scanner, - color: const DigitColors().burningOrange, - size: kPadding * 3, - ), - const SizedBox( - width: kPadding, - ), - Flexible( - child: Text( - localizations.translate(i18.closeHousehold - .closeHouseholdVoucherScannerLabel), - style: Theme.of(context) - .textTheme - .bodyLarge - ?.copyWith( - color: - const DigitColors().burningOrange, - fontWeight: FontWeight.w500, - fontSize: 19, - ), - ), - ), - ], - ), - ), + icon: Icons.qr_code, + label: localizations.translate(i18.closeHousehold + .closeHouseholdVoucherScannerLabel), ), DigitElevatedButton( onPressed: () { @@ -119,12 +106,13 @@ class _ClosedHouseholdSummaryPageState clientReferenceId: IdGen.i.identifier, latitude: householdState.summary?.latitude, longitude: householdState.summary?.longitude, - boundary: ClosedHouseholdSingleton().boundary?.code, + boundaryCode: ClosedHouseholdSingleton().boundary?.code, locationAccuracy: householdState.summary?.locationAccuracy, - additionalFields: - householdState.summary?.additionalFields, - beneficiaryTag: scannerState.qrCodes.isNotEmpty ? scannerState.qrCodes.first : null, + additionalFields: householdState.summary?.additionalFields, + beneficiaryTag: scannerState.qrCodes.isNotEmpty + ? scannerState.qrCodes.first + : null, clientAuditDetails: ClientAuditDetails( createdBy: ClosedHouseholdSingleton().loggedInUserUuid!, @@ -139,6 +127,7 @@ class _ClosedHouseholdSummaryPageState context.read().add( ClosedHouseholdEvent.handleSubmit( userAction, false)); + ///clear the scanner context.router .push(ClosedHouseholdAcknowledgementRoute()); }, @@ -166,7 +155,9 @@ class _ClosedHouseholdSummaryPageState LabelValuePair( label: localizations.translate( i18.closeHousehold.closeHouseholdDate), - value: (DigitDateUtils.getDateFromTimestamp(DateTime.now().millisecondsSinceEpoch)).toString(), + value: (DigitDateUtils.getDateFromTimestamp( + DateTime.now().millisecondsSinceEpoch, dateFormat: 'dd MMM yyyy')) + .toString(), ), LabelValuePair( label: localizations.translate( @@ -190,8 +181,9 @@ class _ClosedHouseholdSummaryPageState LabelValuePair( label: localizations.translate(i18 .closeHousehold.closeHouseholdGpsAccuracyLabel), - value: householdState.summary?.locationAccuracy - .toString() ?? + value: householdState.summary?.locationAccuracy != null + ? '${householdState.summary?.locationAccuracy?.toStringAsFixed(2) } ${localizations.translate(i18.common.coreCommonMeters)}' + : localizations .translate(i18.common.coreCommonNA), ), @@ -215,7 +207,7 @@ class _ClosedHouseholdSummaryPageState ), ); } else { - return Container(); // Return an empty container if qrCodes is empty + return const SizedBox(); } }), ], diff --git a/packages/closed_household/lib/utils/i18_key_constants.dart b/packages/closed_household/lib/utils/i18_key_constants.dart index 0c4523abc..cd87d39cf 100644 --- a/packages/closed_household/lib/utils/i18_key_constants.dart +++ b/packages/closed_household/lib/utils/i18_key_constants.dart @@ -98,6 +98,8 @@ class Common { String get scanBales => 'CORE_COMMON_SCAN_BALES'; String get ageInMonths => 'AGE_IN_MONTHS_LABEL'; + String get locationCapturing => 'CAPTURING_LOCATION'; + String get coreCommonMeters => 'CORE_COMMON_METERS'; } diff --git a/packages/closed_household/pubspec.yaml b/packages/closed_household/pubspec.yaml index 1e5731728..6a1071342 100644 --- a/packages/closed_household/pubspec.yaml +++ b/packages/closed_household/pubspec.yaml @@ -1,7 +1,7 @@ name: closed_household -description: This package enables health facility workers to close a household. +description: This package enables health facility workers to mark household closed and update. version: 0.0.0-dev.1 -homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/closed_household +homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/develop/packages/closed_household repository: https://github.com/egovernments/health-campaign-field-worker-app environment: @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0+2 + digit_components: ^1.0.0+6 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 @@ -32,7 +32,7 @@ dependencies: digit_scanner: ^1.0.2 gs1_barcode_parser: ^1.0.5 auto_route: ^7.8.4 - digit_data_model: ^1.0.2 + digit_data_model: ^1.0.3-dev.1 package_info_plus: ^5.0.1 digit_showcase: ^1.0.0 collection: ^1.16.0 diff --git a/packages/digit_components/CHANGELOG.md b/packages/digit_components/CHANGELOG.md index debe501cb..924780bd3 100644 --- a/packages/digit_components/CHANGELOG.md +++ b/packages/digit_components/CHANGELOG.md @@ -1,118 +1,103 @@ -## 0.0.1 - -* Initial Releaase - -## 0.0.1+1 - -* Read Me file added - -## 0.0.1+2 - -* Read Me file modified with Components example - -## 0.0.1+3 - -* example file added - -## 0.0.1+4 - -* dart doc added and auto generated files added - -## 0.0.1+5 - -* Example file with Reactive Forms - -## 0.0.1+6 - -* Updated Components behaviour in ReadMe File - -## 0.0.1+8 - -* Updated Images in ReadMe File - -## 0.0.2+0 - -* Updated digit_components to the latest version - -## 0.0.2+1 +## 1.0.0+7 +* Added buttonDisabled for DigitIconButton -* Updated digit_components missing utils and components +## 1.0.0+6 +* Added text direction for DigitIconButton +* SelectionBox UI fixes +* Details card UI fixes -## 0.0.3+1 +## 1.0.0+5 +* Added new component details_card -* Synced digit_components with flutter 3.16.5 version +## 1.0.0+4 +* Added new component selected box -## 0.0.3+2 +## 1.0.0+3 +* Capture and Hide Location Dialog added to utils -* Updated repository URL and dart doc +## 1.0.0+2 +* DigitTextField component update -## 0.0.3+3 +## 1.0.0+1 +* Stable release with searchable dropdown fix -* Updated intl version 0.18.1 +## 1.0.0 +* Stable release -## 0.0.3+4 +## 0.0.3+16 +* Removed flutter_localizations dependency -* Updated example folder +## 0.0.3+15 +* Updated digit_components to develop branch -## 0.0.3+5 +## 0.0.3+14 +* Reactive Drop down fix -* Updated flutter sdk version +## 0.0.3+13 +* Fixed empty string issue in searchable_dropdown_field -## 0.0.3+6 +## 0.0.3+12 +* Downgraded intl to 0.18.0 -* Updated flutter repository url +## 0.0.3+11 +* Removed flutter localizations dependency -## 0.0.3+7 +## 0.0.3+10 +* Updated homepage url -* Updated intl version and added pubspec_override +## 0.0.3+9 +* Updated homepage url ## 0.0.3+8 - * Updated intl version and added pubspec_override -## 0.0.3+9 - -* Updated homepage url - -## 0.0.3+10 +## 0.0.3+7 +* Updated intl version and added pubspec_override -* Updated homepage url +## 0.0.3+6 +* Updated flutter repository url -## 0.0.3+11 +## 0.0.3+5 +* Updated flutter sdk version -* Removed flutter localizations dependency +## 0.0.3+4 +* Updated example folder -## 0.0.3+12 +## 0.0.3+3 +* Updated intl version 0.18.1 -* Downgraded intl to 0.18.0 +## 0.0.3+2 +* Updated repository URL and dart doc -## 0.0.3+13 +## 0.0.3+1 +* Synced digit_components with flutter 3.16.5 version -* Fixed empty string issue in searchable_dropdown_field +## 0.0.2+1 +* Updated digit_components missing utils and components -## 0.0.3+14 -* Reactive Drop down fix +## 0.0.2+0 +* Updated digit_components to the latest version -## 0.0.3+15 -* Updated digit_components to develop branch +## 0.0.1+8 +* Updated Images in ReadMe File -## 0.0.3+16 -* Removed flutter_localizations dependency +## 0.0.1+6 +* Updated Components behaviour in ReadMe File -## 1.0.0 -* Stable release +## 0.0.1+5 +* Example file with Reactive Forms -## 1.0.0+1 -* Stable release with searchable dropdown fix +## 0.0.1+4 +* dart doc added and auto generated files added -## 1.0.0+2 -* DigitTextField component update +## 0.0.1+3 +* example file added -## 1.0.0+3 -* Capture and Hide Location Dialog added to utils +## 0.0.1+2 +* Read Me file modified with Components example -## 1.0.0+4 -* Added new component selected box +## 0.0.1+1 +* Read Me file added -## 1.0.0+5 -* Added new component details_card \ No newline at end of file +## 0.0.1 +* Initial Releaase \ No newline at end of file diff --git a/packages/digit_components/example/pubspec.lock b/packages/digit_components/example/pubspec.lock index 72557cd81..4d6b52780 100644 --- a/packages/digit_components/example/pubspec.lock +++ b/packages/digit_components/example/pubspec.lock @@ -231,7 +231,7 @@ packages: path: ".." relative: true source: path - version: "1.0.0+5" + version: "1.0.0+7" easy_stepper: dependency: transitive description: diff --git a/packages/digit_components/lib/widgets/atoms/details_card.dart b/packages/digit_components/lib/widgets/atoms/details_card.dart index b213a165e..e79e0fccb 100644 --- a/packages/digit_components/lib/widgets/atoms/details_card.dart +++ b/packages/digit_components/lib/widgets/atoms/details_card.dart @@ -64,50 +64,52 @@ class LabelValueList extends StatelessWidget { padding: padding ?? const EdgeInsets.symmetric(vertical: 8.0), child: item.isInline ? Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - // Label taking 30% width - Expanded( - flex: 6, // 45% width - child: Text( - item.label, - style: textTheme.headlineSmall?.copyWith( - color: const DigitColors().woodsmokeBlack, - ), - ), - ), - const SizedBox( - width: kPadding * 4), // Gap between label and value - // Value taking rest of the width - Expanded( - flex: 8, // Remaining 55% width - child: Text( - item.value, - style: textTheme.bodySmall?.copyWith( - color: const DigitColors().woodsmokeBlack, - ), - ), - ), - ], - ) + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Label taking 30% width + Expanded( + flex: 6, // 45% width + child: Text( + item.label, + style: textTheme.headlineSmall?.copyWith( + height: 1.14, + color: const DigitColors().woodsmokeBlack, + ), + ), + ), + const SizedBox( + width: kPadding * 4), // Gap between label and value + // Value taking rest of the width + Expanded( + flex: 8, // Remaining 55% width + child: Text( + item.value, + style: textTheme.bodyLarge?.copyWith( + height: 1.14, + color: const DigitColors().woodsmokeBlack, + ), + ), + ), + ], + ) : Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - item.label, - style: textTheme.headlineSmall?.copyWith( - color: const DigitColors().woodsmokeBlack, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + item.label, + style: textTheme.headlineSmall?.copyWith( + color: const DigitColors().woodsmokeBlack, + ), + ), + const SizedBox(height: 4), + Text( + item.value, + style: textTheme.bodyMedium?.copyWith( + color: const DigitColors().woodsmokeBlack, + ), + ), + ], ), - ), - const SizedBox(height: 4), - Text( - item.value, - style: textTheme.bodySmall?.copyWith( - color: const DigitColors().woodsmokeBlack, - ), - ), - ], - ), ); } } @@ -122,4 +124,4 @@ class LabelValuePair { required this.value, this.isInline = true, }); -} \ No newline at end of file +} diff --git a/packages/digit_components/lib/widgets/atoms/digit_icon_button.dart b/packages/digit_components/lib/widgets/atoms/digit_icon_button.dart index 8868ac1e0..7a2a734b2 100644 --- a/packages/digit_components/lib/widgets/atoms/digit_icon_button.dart +++ b/packages/digit_components/lib/widgets/atoms/digit_icon_button.dart @@ -8,6 +8,8 @@ class DigitIconButton extends StatelessWidget { final ImageIcon? imageIcon; final Color? iconColor; final Color? iconTextColor; + final TextDirection textDirection; + final bool buttonDisabled; const DigitIconButton({ super.key, @@ -18,6 +20,8 @@ class DigitIconButton extends StatelessWidget { this.imageIcon, this.iconColor, this.iconTextColor, + this.textDirection = TextDirection.ltr, + this.buttonDisabled = false, }); @override @@ -30,6 +34,7 @@ class DigitIconButton extends StatelessWidget { ), onPressed: onPressed, child: Row( + textDirection: textDirection, mainAxisSize: MainAxisSize.min, children: [ Flexible( @@ -37,7 +42,9 @@ class DigitIconButton extends StatelessWidget { Icon( icon, size: iconSize, - color: iconColor ?? theme.colorScheme.secondary, + color: buttonDisabled == false + ? iconColor ?? theme.colorScheme.secondary + : theme.colorScheme.outline, ), ), const SizedBox( @@ -47,7 +54,9 @@ class DigitIconButton extends StatelessWidget { Text( iconText!, style: TextStyle( - color: iconTextColor ?? theme.colorScheme.secondary, + color: buttonDisabled == false + ? iconTextColor ?? theme.colorScheme.secondary + : theme.colorScheme.outline, fontSize: 16), ), ], diff --git a/packages/digit_components/lib/widgets/atoms/digit_integer_form_picker.dart b/packages/digit_components/lib/widgets/atoms/digit_integer_form_picker.dart index dc9f00e5c..d8bae2e05 100644 --- a/packages/digit_components/lib/widgets/atoms/digit_integer_form_picker.dart +++ b/packages/digit_components/lib/widgets/atoms/digit_integer_form_picker.dart @@ -11,6 +11,7 @@ class DigitIntegerFormPicker extends StatelessWidget { final FormGroup form; final String formControlName; final double? buttonWidth; + final void Function()? onChange; const DigitIntegerFormPicker({ super.key, this.minimum, @@ -21,6 +22,7 @@ class DigitIntegerFormPicker extends StatelessWidget { required this.form, required this.label, this.buttonWidth, + this.onChange, }); @override @@ -43,26 +45,27 @@ class DigitIntegerFormPicker extends StatelessWidget { child: IntrinsicHeight( child: Row( children: [ - _buildButton( - context, - border: Border( - left: _borderSide, - bottom: _borderSide, - top: _borderSide, - ), - icon: Icons.remove, - onPressed: () => minimum != null + _buildButton(context, + border: Border( + left: _borderSide, + bottom: _borderSide, + top: _borderSide, + ), + icon: Icons.remove, onPressed: () { + minimum != null ? form.control(formControlName).value > minimum || form.control(formControlName).value == null ? form.control(formControlName).value -= 1 : 1 - : form.control(formControlName).value -= 1, - ), + : form.control(formControlName).value -= 1; + if (onChange != null) { + onChange!(); + } + }), Expanded( child: SizedBox( - height: kPadding*5, + height: kPadding * 5, child: ReactiveTextField( - readOnly: true, textAlign: TextAlign.center, formControlName: formControlName, @@ -79,8 +82,12 @@ class DigitIntegerFormPicker extends StatelessWidget { bottom: _borderSide, top: _borderSide, ), - icon: Icons.add, - onPressed: () => form.control(formControlName).value += 1), + icon: Icons.add, onPressed: () { + form.control(formControlName).value += 1; + if (onChange != null) { + onChange!(); + } + }), ], ), )); @@ -94,7 +101,7 @@ class DigitIntegerFormPicker extends StatelessWidget { }) => SizedBox( width: buttonWidth ?? 100, - height: kPadding*5, + height: kPadding * 5, child: Material( shape: border, color: Theme.of(context).colorScheme.background, diff --git a/packages/digit_components/lib/widgets/atoms/digit_reactive_search_dropdown.dart b/packages/digit_components/lib/widgets/atoms/digit_reactive_search_dropdown.dart index 225d9b3f3..edf83a84d 100644 --- a/packages/digit_components/lib/widgets/atoms/digit_reactive_search_dropdown.dart +++ b/packages/digit_components/lib/widgets/atoms/digit_reactive_search_dropdown.dart @@ -53,7 +53,7 @@ class _DigitReactiveSearchDropdownState Widget build(BuildContext context) { return LabeledField( padding: widget.padding ?? const EdgeInsets.only(top: kPadding * 2), - label: '${widget.label}${widget.isRequired ? '*' : ''}', + label: '${widget.label}${widget.isRequired ? ' *' : ''}', child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, diff --git a/packages/digit_components/lib/widgets/atoms/selection_card.dart b/packages/digit_components/lib/widgets/atoms/selection_card.dart index c47a424fe..045336e84 100644 --- a/packages/digit_components/lib/widgets/atoms/selection_card.dart +++ b/packages/digit_components/lib/widgets/atoms/selection_card.dart @@ -11,6 +11,7 @@ class SelectionBox extends StatefulWidget { final bool allowMultipleSelection; final String Function(T) valueMapper; final bool isRequired; + final bool equalWidthOptions; const SelectionBox({ Key? key, @@ -23,6 +24,7 @@ class SelectionBox extends StatefulWidget { this.allowMultipleSelection = true, required this.valueMapper, this.isRequired = false, + this.equalWidthOptions = false, }) : super(key: key); @override @@ -31,6 +33,7 @@ class SelectionBox extends StatefulWidget { class _SelectionBoxState extends State> { final List _selectedOptions = []; + double? _maxOptionWidth; @override void initState() { @@ -38,6 +41,37 @@ class _SelectionBoxState extends State> { if (widget.initialSelection != null) { _selectedOptions.addAll(widget.initialSelection!); } + + if (widget.equalWidthOptions) { + WidgetsBinding.instance.addPostFrameCallback((_) { + _calculateMaxOptionWidth(); + }); + } + } + + void _calculateMaxOptionWidth() { + double maxWidth = 0; + final textTheme = Theme.of(context).textTheme; + + for (var option in widget.options) { + final textPainter = TextPainter( + text: TextSpan( + text: widget.valueMapper(option), + style: textTheme.bodyLarge?.copyWith( + color: const DigitColors().woodsmokeBlack, + ), + ), + textDirection: TextDirection.ltr, + ); + textPainter.layout(); + if (textPainter.size.width > maxWidth) { + maxWidth = textPainter.size.width; + } + } + + setState(() { + _maxOptionWidth = maxWidth + kPadding * 5; /// Add padding + }); } void _onOptionTap(T option) { @@ -68,7 +102,7 @@ class _SelectionBoxState extends State> { return GestureDetector( onTap: () => _onOptionTap(option), child: Container( - width: widget.width, + width: widget.equalWidthOptions ? _maxOptionWidth : widget.width, padding: const EdgeInsets.symmetric( vertical: kPadding, horizontal: kPadding * 2), decoration: BoxDecoration( @@ -83,6 +117,7 @@ class _SelectionBoxState extends State> { ), child: Row( mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.center, children: [ Flexible( child: Text( @@ -90,13 +125,13 @@ class _SelectionBoxState extends State> { overflow: TextOverflow.ellipsis, textAlign: TextAlign.center, style: isSelected - ? textTheme.bodyMedium?.copyWith( - color: const DigitColors().white, - fontWeight: FontWeight.w700, - ) - : textTheme.bodyMedium?.copyWith( - color: const DigitColors().woodsmokeBlack, - ), + ? textTheme.bodyLarge?.copyWith( + color: const DigitColors().white, + fontWeight: FontWeight.w700, + ) + : textTheme.bodyLarge?.copyWith( + color: const DigitColors().woodsmokeBlack, + ), ), ), ], @@ -120,16 +155,17 @@ class _SelectionBoxState extends State> { isRequired: widget.isRequired, child: Container( width: MediaQuery.of(context).size.width, - padding: const EdgeInsets.all(kPadding * 3), + padding: const EdgeInsets.all(kPadding * 2), decoration: BoxDecoration( color: const DigitColors().alabasterWhite, borderRadius: BorderRadius.circular(kPadding / 2), border: Border.all( - color: const DigitColors().quillGray, + color: widget.errorMessage != null ?const DigitColors().lavaRed: const DigitColors().quillGray, width: 1, ), ), child: Wrap( + alignment: WrapAlignment.center, spacing: kPadding * 3, runSpacing: kPadding * 3, children: widget.options.map(_buildOption).toList(), @@ -143,28 +179,11 @@ class _SelectionBoxState extends State> { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Column( - children: [ - const SizedBox( - height: 2, - ), - SizedBox( - height: kPadding * 2, - width: kPadding * 2, - child: Icon( - Icons.info, - color: const DigitColors().lavaRed, - size: kPadding * 2, - ), - ), - ], - ), - const SizedBox(width: kPadding / 2), Flexible( fit: FlexFit.tight, child: Text( widget.errorMessage!, - style: textTheme.bodyLarge?.copyWith( + style: textTheme.bodySmall?.copyWith( color: const DigitColors().lavaRed, ), ), diff --git a/packages/digit_components/lib/widgets/digit_search_bar.dart b/packages/digit_components/lib/widgets/digit_search_bar.dart index 16ab7771f..088f27a48 100644 --- a/packages/digit_components/lib/widgets/digit_search_bar.dart +++ b/packages/digit_components/lib/widgets/digit_search_bar.dart @@ -33,7 +33,7 @@ class DigitSearchBar extends StatelessWidget { shape: RoundedRectangleBorder( side: BorderSide(color: theme.scaffoldBackgroundColor, width: 1), borderRadius: BorderRadius.circular( - borderRadius != null ? (borderRadius! * 3) : 30), + borderRadius != null ? (borderRadius! * 3) : 12), ), margin: margin, child: Padding( @@ -57,17 +57,17 @@ class DigitSearchBar extends StatelessWidget { fillColor: theme.cardColor, contentPadding: contentPadding ?? const EdgeInsets.only( - left: 16.0, + left: 0, bottom: 8.0, top: 8.0, ), focusedBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(borderRadius ?? 10.0), + borderRadius: BorderRadius.circular(borderRadius ?? 0.0), borderSide: BorderSide(color: theme.cardColor), ), enabledBorder: UnderlineInputBorder( borderSide: BorderSide(color: theme.scaffoldBackgroundColor), - borderRadius: BorderRadius.circular(borderRadius ?? 10.0), + borderRadius: BorderRadius.circular(borderRadius ?? 0.0), ), ), ), diff --git a/packages/digit_components/pubspec.yaml b/packages/digit_components/pubspec.yaml index e02e334fd..90e068937 100644 --- a/packages/digit_components/pubspec.yaml +++ b/packages/digit_components/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_components description: Digit UI Design specification Flutter widgets. Import this package by adding digit_components in respective pubspec.yaml dependencies. -version: 1.0.0+5 +version: 1.0.0+7 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_components repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/digit_data_model/CHANGELOG.md b/packages/digit_data_model/CHANGELOG.md index 027280c32..020262c67 100644 --- a/packages/digit_data_model/CHANGELOG.md +++ b/packages/digit_data_model/CHANGELOG.md @@ -1,23 +1,27 @@ -## 0.0.0-dev.1 +## 1.0.3-dev.1 -* Digit Data Model Initial Release +* Added new user_actions db -## 0.0.0-dev.2 +## 1.0.2 -* Boundary v2 Integrated, to use Boundary v1 0.0.0-dev.1 version can be used +* Added try catch for local repository to handle db lock -## 0.0.0-dev.3 +## 1.0.1 -* Supports boundary v2 and updated single entities to list for all search models +* Added Service and Service Definition Bloc ## 1.0.0 * Initial stable release -## 1.0.1 +## 0.0.0-dev.3 -* Added Service and Service Definition Bloc +* Supports boundary v2 and updated single entities to list for all search models -## 1.0.2 +## 0.0.0-dev.2 -* Added try catch for local repository to handle db lock +* Boundary v2 Integrated, to use Boundary v1 0.0.0-dev.1 version can be used + +## 0.0.0-dev.1 + +* Digit Data Model Initial Release \ No newline at end of file diff --git a/packages/digit_data_model/lib/data/local_store/no_sql/schema/oplog.g.dart b/packages/digit_data_model/lib/data/local_store/no_sql/schema/oplog.g.dart index 5521d966a..1eb7aa4a2 100644 --- a/packages/digit_data_model/lib/data/local_store/no_sql/schema/oplog.g.dart +++ b/packages/digit_data_model/lib/data/local_store/no_sql/schema/oplog.g.dart @@ -290,6 +290,7 @@ const _OpLogentityTypeEnumValueMap = { r'hFReferral': r'hFReferral', r'attendanceRegister': r'attendanceRegister', r'attendance': r'attendance', + r'userAction': r'userAction', }; const _OpLogentityTypeValueEnumMap = { r'user': DataModelType.user, @@ -324,6 +325,7 @@ const _OpLogentityTypeValueEnumMap = { r'hFReferral': DataModelType.hFReferral, r'attendanceRegister': DataModelType.attendanceRegister, r'attendance': DataModelType.attendance, + r'userAction': DataModelType.userAction, }; const _OpLogoperationEnumValueMap = { r'create': r'create', diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart index e51bc80e0..94e2ac4ff 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart @@ -38838,17 +38838,17 @@ class $UserActionTable extends UserAction late final GeneratedColumn action = GeneratedColumn( 'action', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _beneficiaryTagsMeta = - const VerificationMeta('beneficiaryTags'); + static const VerificationMeta _beneficiaryTagMeta = + const VerificationMeta('beneficiaryTag'); @override - late final GeneratedColumn beneficiaryTags = GeneratedColumn( - 'beneficiary_tags', aliasedName, true, + late final GeneratedColumn beneficiaryTag = GeneratedColumn( + 'beneficiary_tag', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _resourceTagsMeta = - const VerificationMeta('resourceTags'); + static const VerificationMeta _resourceTagMeta = + const VerificationMeta('resourceTag'); @override - late final GeneratedColumn resourceTags = GeneratedColumn( - 'resource_tags', aliasedName, true, + late final GeneratedColumn resourceTag = GeneratedColumn( + 'resource_tag', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false); @override List get $columns => [ @@ -38874,8 +38874,8 @@ class $UserActionTable extends UserAction rowVersion, isDeleted, action, - beneficiaryTags, - resourceTags + beneficiaryTag, + resourceTag ]; @override String get aliasedName => _alias ?? actualTableName; @@ -39004,17 +39004,17 @@ class $UserActionTable extends UserAction context.handle(_actionMeta, action.isAcceptableOrUnknown(data['action']!, _actionMeta)); } - if (data.containsKey('beneficiary_tags')) { + if (data.containsKey('beneficiary_tag')) { context.handle( - _beneficiaryTagsMeta, - beneficiaryTags.isAcceptableOrUnknown( - data['beneficiary_tags']!, _beneficiaryTagsMeta)); + _beneficiaryTagMeta, + beneficiaryTag.isAcceptableOrUnknown( + data['beneficiary_tag']!, _beneficiaryTagMeta)); } - if (data.containsKey('resource_tags')) { + if (data.containsKey('resource_tag')) { context.handle( - _resourceTagsMeta, - resourceTags.isAcceptableOrUnknown( - data['resource_tags']!, _resourceTagsMeta)); + _resourceTagMeta, + resourceTag.isAcceptableOrUnknown( + data['resource_tag']!, _resourceTagMeta)); } return context; } @@ -39069,10 +39069,10 @@ class $UserActionTable extends UserAction .read(DriftSqlType.bool, data['${effectivePrefix}is_deleted']), action: attachedDatabase.typeMapping .read(DriftSqlType.string, data['${effectivePrefix}action']), - beneficiaryTags: attachedDatabase.typeMapping.read( - DriftSqlType.string, data['${effectivePrefix}beneficiary_tags']), - resourceTags: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}resource_tags']), + beneficiaryTag: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}beneficiary_tag']), + resourceTag: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}resource_tag']), ); } @@ -39105,8 +39105,8 @@ class UserActionData extends DataClass implements Insertable { final int? rowVersion; final bool? isDeleted; final String? action; - final String? beneficiaryTags; - final String? resourceTags; + final String? beneficiaryTag; + final String? resourceTag; const UserActionData( {this.id, this.tenantId, @@ -39130,8 +39130,8 @@ class UserActionData extends DataClass implements Insertable { this.rowVersion, this.isDeleted, this.action, - this.beneficiaryTags, - this.resourceTags}); + this.beneficiaryTag, + this.resourceTag}); @override Map toColumns(bool nullToAbsent) { final map = {}; @@ -39199,11 +39199,11 @@ class UserActionData extends DataClass implements Insertable { if (!nullToAbsent || action != null) { map['action'] = Variable(action); } - if (!nullToAbsent || beneficiaryTags != null) { - map['beneficiary_tags'] = Variable(beneficiaryTags); + if (!nullToAbsent || beneficiaryTag != null) { + map['beneficiary_tag'] = Variable(beneficiaryTag); } - if (!nullToAbsent || resourceTags != null) { - map['resource_tags'] = Variable(resourceTags); + if (!nullToAbsent || resourceTag != null) { + map['resource_tag'] = Variable(resourceTag); } return map; } @@ -39270,12 +39270,12 @@ class UserActionData extends DataClass implements Insertable { : Value(isDeleted), action: action == null && nullToAbsent ? const Value.absent() : Value(action), - beneficiaryTags: beneficiaryTags == null && nullToAbsent + beneficiaryTag: beneficiaryTag == null && nullToAbsent ? const Value.absent() - : Value(beneficiaryTags), - resourceTags: resourceTags == null && nullToAbsent + : Value(beneficiaryTag), + resourceTag: resourceTag == null && nullToAbsent ? const Value.absent() - : Value(resourceTags), + : Value(resourceTag), ); } @@ -39306,8 +39306,8 @@ class UserActionData extends DataClass implements Insertable { rowVersion: serializer.fromJson(json['rowVersion']), isDeleted: serializer.fromJson(json['isDeleted']), action: serializer.fromJson(json['action']), - beneficiaryTags: serializer.fromJson(json['beneficiaryTags']), - resourceTags: serializer.fromJson(json['resourceTags']), + beneficiaryTag: serializer.fromJson(json['beneficiaryTag']), + resourceTag: serializer.fromJson(json['resourceTag']), ); } @override @@ -39336,8 +39336,8 @@ class UserActionData extends DataClass implements Insertable { 'rowVersion': serializer.toJson(rowVersion), 'isDeleted': serializer.toJson(isDeleted), 'action': serializer.toJson(action), - 'beneficiaryTags': serializer.toJson(beneficiaryTags), - 'resourceTags': serializer.toJson(resourceTags), + 'beneficiaryTag': serializer.toJson(beneficiaryTag), + 'resourceTag': serializer.toJson(resourceTag), }; } @@ -39364,8 +39364,8 @@ class UserActionData extends DataClass implements Insertable { Value rowVersion = const Value.absent(), Value isDeleted = const Value.absent(), Value action = const Value.absent(), - Value beneficiaryTags = const Value.absent(), - Value resourceTags = const Value.absent()}) => + Value beneficiaryTag = const Value.absent(), + Value resourceTag = const Value.absent()}) => UserActionData( id: id.present ? id.value : this.id, tenantId: tenantId.present ? tenantId.value : this.tenantId, @@ -39411,11 +39411,9 @@ class UserActionData extends DataClass implements Insertable { rowVersion: rowVersion.present ? rowVersion.value : this.rowVersion, isDeleted: isDeleted.present ? isDeleted.value : this.isDeleted, action: action.present ? action.value : this.action, - beneficiaryTags: beneficiaryTags.present - ? beneficiaryTags.value - : this.beneficiaryTags, - resourceTags: - resourceTags.present ? resourceTags.value : this.resourceTags, + beneficiaryTag: + beneficiaryTag.present ? beneficiaryTag.value : this.beneficiaryTag, + resourceTag: resourceTag.present ? resourceTag.value : this.resourceTag, ); @override String toString() { @@ -39442,8 +39440,8 @@ class UserActionData extends DataClass implements Insertable { ..write('rowVersion: $rowVersion, ') ..write('isDeleted: $isDeleted, ') ..write('action: $action, ') - ..write('beneficiaryTags: $beneficiaryTags, ') - ..write('resourceTags: $resourceTags') + ..write('beneficiaryTag: $beneficiaryTag, ') + ..write('resourceTag: $resourceTag') ..write(')')) .toString(); } @@ -39472,8 +39470,8 @@ class UserActionData extends DataClass implements Insertable { rowVersion, isDeleted, action, - beneficiaryTags, - resourceTags + beneficiaryTag, + resourceTag ]); @override bool operator ==(Object other) => @@ -39501,8 +39499,8 @@ class UserActionData extends DataClass implements Insertable { other.rowVersion == this.rowVersion && other.isDeleted == this.isDeleted && other.action == this.action && - other.beneficiaryTags == this.beneficiaryTags && - other.resourceTags == this.resourceTags); + other.beneficiaryTag == this.beneficiaryTag && + other.resourceTag == this.resourceTag); } class UserActionCompanion extends UpdateCompanion { @@ -39528,8 +39526,8 @@ class UserActionCompanion extends UpdateCompanion { final Value rowVersion; final Value isDeleted; final Value action; - final Value beneficiaryTags; - final Value resourceTags; + final Value beneficiaryTag; + final Value resourceTag; final Value rowid; const UserActionCompanion({ this.id = const Value.absent(), @@ -39554,8 +39552,8 @@ class UserActionCompanion extends UpdateCompanion { this.rowVersion = const Value.absent(), this.isDeleted = const Value.absent(), this.action = const Value.absent(), - this.beneficiaryTags = const Value.absent(), - this.resourceTags = const Value.absent(), + this.beneficiaryTag = const Value.absent(), + this.resourceTag = const Value.absent(), this.rowid = const Value.absent(), }); UserActionCompanion.insert({ @@ -39581,8 +39579,8 @@ class UserActionCompanion extends UpdateCompanion { this.rowVersion = const Value.absent(), this.isDeleted = const Value.absent(), this.action = const Value.absent(), - this.beneficiaryTags = const Value.absent(), - this.resourceTags = const Value.absent(), + this.beneficiaryTag = const Value.absent(), + this.resourceTag = const Value.absent(), this.rowid = const Value.absent(), }) : clientReferenceId = Value(clientReferenceId); static Insertable custom({ @@ -39608,8 +39606,8 @@ class UserActionCompanion extends UpdateCompanion { Expression? rowVersion, Expression? isDeleted, Expression? action, - Expression? beneficiaryTags, - Expression? resourceTags, + Expression? beneficiaryTag, + Expression? resourceTag, Expression? rowid, }) { return RawValuesInsertable({ @@ -39637,8 +39635,8 @@ class UserActionCompanion extends UpdateCompanion { if (rowVersion != null) 'row_version': rowVersion, if (isDeleted != null) 'is_deleted': isDeleted, if (action != null) 'action': action, - if (beneficiaryTags != null) 'beneficiary_tags': beneficiaryTags, - if (resourceTags != null) 'resource_tags': resourceTags, + if (beneficiaryTag != null) 'beneficiary_tag': beneficiaryTag, + if (resourceTag != null) 'resource_tag': resourceTag, if (rowid != null) 'rowid': rowid, }); } @@ -39666,8 +39664,8 @@ class UserActionCompanion extends UpdateCompanion { Value? rowVersion, Value? isDeleted, Value? action, - Value? beneficiaryTags, - Value? resourceTags, + Value? beneficiaryTag, + Value? resourceTag, Value? rowid}) { return UserActionCompanion( id: id ?? this.id, @@ -39692,8 +39690,8 @@ class UserActionCompanion extends UpdateCompanion { rowVersion: rowVersion ?? this.rowVersion, isDeleted: isDeleted ?? this.isDeleted, action: action ?? this.action, - beneficiaryTags: beneficiaryTags ?? this.beneficiaryTags, - resourceTags: resourceTags ?? this.resourceTags, + beneficiaryTag: beneficiaryTag ?? this.beneficiaryTag, + resourceTag: resourceTag ?? this.resourceTag, rowid: rowid ?? this.rowid, ); } @@ -39767,11 +39765,11 @@ class UserActionCompanion extends UpdateCompanion { if (action.present) { map['action'] = Variable(action.value); } - if (beneficiaryTags.present) { - map['beneficiary_tags'] = Variable(beneficiaryTags.value); + if (beneficiaryTag.present) { + map['beneficiary_tag'] = Variable(beneficiaryTag.value); } - if (resourceTags.present) { - map['resource_tags'] = Variable(resourceTags.value); + if (resourceTag.present) { + map['resource_tag'] = Variable(resourceTag.value); } if (rowid.present) { map['rowid'] = Variable(rowid.value); @@ -39804,8 +39802,8 @@ class UserActionCompanion extends UpdateCompanion { ..write('rowVersion: $rowVersion, ') ..write('isDeleted: $isDeleted, ') ..write('action: $action, ') - ..write('beneficiaryTags: $beneficiaryTags, ') - ..write('resourceTags: $resourceTags, ') + ..write('beneficiaryTag: $beneficiaryTag, ') + ..write('resourceTag: $resourceTag, ') ..write('rowid: $rowid') ..write(')')) .toString(); diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/user_action.dart b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/user_action.dart index d83da4c7a..53154fc8f 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/user_action.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/user_action.dart @@ -28,8 +28,8 @@ class UserAction extends Table { boolean().nullable().withDefault(const Constant(false))(); TextColumn get action => text().nullable()(); - TextColumn get beneficiaryTags => text().nullable()(); - TextColumn get resourceTags => text().nullable()(); + TextColumn get beneficiaryTag => text().nullable()(); + TextColumn get resourceTag => text().nullable()(); @override diff --git a/packages/digit_data_model/lib/data/repositories/remote/boundary.dart b/packages/digit_data_model/lib/data/repositories/remote/boundary.dart index a46cbdd45..8f009bc10 100644 --- a/packages/digit_data_model/lib/data/repositories/remote/boundary.dart +++ b/packages/digit_data_model/lib/data/repositories/remote/boundary.dart @@ -5,6 +5,7 @@ import 'dart:async'; import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:dio/dio.dart'; +import 'package:recase/recase.dart'; class BoundaryRemoteRepository extends RemoteRepository { @@ -108,7 +109,7 @@ class BoundaryRemoteRepository materializedPath: [...materializedPath, e.code ?? ''].join('.'), boundaryNum: [...materializedPath, e.code ?? ''].length, label: e.boundaryType, - name: e.code?.split('_').lastOrNull ?? e.code, + name: e.code?.split('_').lastOrNull?.titleCase ?? e.code?.titleCase, ); boundaryModelList.add(boundary.copyWith(children: [])); diff --git a/packages/digit_data_model/lib/utils/constants.dart b/packages/digit_data_model/lib/utils/constants.dart index 4cea7c768..6539fa0f3 100644 --- a/packages/digit_data_model/lib/utils/constants.dart +++ b/packages/digit_data_model/lib/utils/constants.dart @@ -58,6 +58,8 @@ class DataModels { return DataModelType.referral; case 'HFReferrals': return DataModelType.hFReferral; + case 'UserAction': + return DataModelType.userAction; default: return DataModelType.householdMember; } diff --git a/packages/digit_data_model/pubspec.yaml b/packages/digit_data_model/pubspec.yaml index bb7434c85..de7b83138 100644 --- a/packages/digit_data_model/pubspec.yaml +++ b/packages/digit_data_model/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_data_model description: The digit_data_model package is a data modeling library. It defines various classes, enums, and functions. -version: 1.0.2 +version: 1.0.3-dev.1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_data_model repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/digit_scanner/CHANGELOG.md b/packages/digit_scanner/CHANGELOG.md index 3a21adb11..d8c0bdbbc 100644 --- a/packages/digit_scanner/CHANGELOG.md +++ b/packages/digit_scanner/CHANGELOG.md @@ -1,44 +1,45 @@ -## 0.0.0-dev.1 +## 1.0.3-dev.1 +* Fix for manual entry result not reflecting -Digit Scanner Package Setup and Initialization +## 1.0.2 -## 0.0.0-dev.2 +* UI Fixes +* Added audio to correct scan and invalid scan -Added Flutter version constraints +## 1.0.1 -## 0.0.0-dev.3 +* Updated digit_components to latest version -Removed flutter localizations dependency +## 1.0.0+1 -## 0.0.0-dev.4 +* Initial stable Release -Updated repository and homepage url +## 1.0.0 -## 0.0.0-dev.5 +* GS1 Barcodes-Removed Enter Manual Code -Updated digit_components version for dropdown fix +## 0.0.0-dev.7 -## 0.0.0-dev.6 +Reverted disable button change -Disabled Submit button for manual code not entered +## 0.0.0-dev.6 -## 0.0.0-dev.7 +Updated digit_components version for dropdown fix -Reverted disable button change +## 0.0.0-dev.5 -## 1.0.0 +Updated repository and homepage url -Initial stable Release +## 0.0.0-dev.4 -## 1.0.0+1 +Removed flutter localizations dependency -* Updated digit_components to latest version +## 0.0.0-dev.3 -## 1.0.1 +Added Flutter version constraints -* GS1 Barcodes-Removed Enter Manual Code +## 0.0.0-dev.2 -## 1.0.2 +Digit Scanner Package Setup and Initialization -* UI Fixes -* Added audio to correct scan and invalid scan +## 0.0.0-dev.1 \ No newline at end of file diff --git a/packages/digit_scanner/example/pubspec.lock b/packages/digit_scanner/example/pubspec.lock index b3255a1d4..f3920bc04 100644 --- a/packages/digit_scanner/example/pubspec.lock +++ b/packages/digit_scanner/example/pubspec.lock @@ -319,7 +319,7 @@ packages: path: ".." relative: true source: path - version: "1.0.2" + version: "1.0.3-dev.1" easy_stepper: dependency: transitive description: diff --git a/packages/digit_scanner/lib/blocs/scanner.dart b/packages/digit_scanner/lib/blocs/scanner.dart index 11284ed4d..1aafa54c3 100644 --- a/packages/digit_scanner/lib/blocs/scanner.dart +++ b/packages/digit_scanner/lib/blocs/scanner.dart @@ -20,7 +20,9 @@ class DigitScannerBloc extends Bloc { DigitScannerEmitter emit, ) async { try { - emit(state.copyWith(barCodes: event.barCode, qrCodes: event.qrCode)); + emit(state.copyWith(loading: true)); + emit(state.copyWith( + barCodes: event.barCode, qrCodes: event.qrCode)); } catch (error) { rethrow; } finally { diff --git a/packages/digit_scanner/lib/pages/qr_scanner.dart b/packages/digit_scanner/lib/pages/qr_scanner.dart index 9512feb5e..c4e4b037e 100644 --- a/packages/digit_scanner/lib/pages/qr_scanner.dart +++ b/packages/digit_scanner/lib/pages/qr_scanner.dart @@ -4,12 +4,14 @@ import 'package:audioplayers/audioplayers.dart'; import 'package:auto_route/auto_route.dart'; import 'package:camera/camera.dart'; import 'package:digit_components/digit_components.dart'; +import 'package:digit_components/widgets/atoms/digit_toaster.dart'; import 'package:digit_scanner/utils/scanner_utils.dart'; import 'package:digit_scanner/widgets/localized.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:google_mlkit_barcode_scanning/google_mlkit_barcode_scanning.dart'; import 'package:gs1_barcode_parser/gs1_barcode_parser.dart'; +import 'package:reactive_forms/reactive_forms.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../blocs/scanner.dart'; @@ -51,7 +53,7 @@ class _DigitScannerPageState extends LocalizedState { bool manualCode = false; bool flashStatus = false; final GlobalKey qrKey = GlobalKey(debugLabel: 'QR'); - final _resourceController = TextEditingController(); + static const _manualCodeFormKey = 'manualCode'; @override void initState() { @@ -184,8 +186,6 @@ class _DigitScannerPageState extends LocalizedState { ); setState(() { manualCode = true; - _resourceController.value = - const TextEditingValue(); }); }, child: Padding( @@ -402,77 +402,100 @@ class _DigitScannerPageState extends LocalizedState { ), ], ) - : DigitCard( - child: ScrollableContent( - backgroundColor: theme.colorScheme.onError, - header: GestureDetector( - onTap: () { - setState(() { - manualCode = false; - initializeCameras(); - }); - }, - child: const Align( - alignment: Alignment.topRight, - child: Icon(Icons.close), - ), - ), - footer: DigitElevatedButton( - onPressed: () async { - final bloc = context.read(); - codes.add(_resourceController.value.text); - bloc.add( - DigitScannerEvent.handleScanner( - barCode: state.barCodes, - qrCode: codes, - ), - ); - if (widget.isGS1code && - result.length < widget.quantity) { - DigitScannerUtils().buildDialog( - context, - localizations, - widget.quantity, - ); - } + : BlocBuilder( + builder: (context, state) { + return ReactiveFormBuilder( + form: () => buildForm(), + builder: (context, form, child) { + return DigitCard( + child: ScrollableContent( + backgroundColor: theme.colorScheme.onError, + header: GestureDetector( + onTap: () { + setState(() { + manualCode = false; + initializeCameras(); + }); + }, + child: const Align( + alignment: Alignment.topRight, + child: Icon(Icons.close), + ), + ), + footer: DigitElevatedButton( + onPressed: () async { + if (form + .control(_manualCodeFormKey) + .value == + null || + form + .control(_manualCodeFormKey) + .value + .toString() + .trim() + .isEmpty) { + DigitToast.show(context, + options: DigitToastOptions( + localizations.translate( + i18.scanner.enterManualCode), + true, + theme, + )); + } else { + final bloc = + context.read(); + codes.add(form + .control(_manualCodeFormKey) + .value); + bloc.add( + DigitScannerEvent.handleScanner( + barCode: state.barCodes, + qrCode: codes, + ), + ); + if (widget.isGS1code && + result.length < widget.quantity) { + DigitScannerUtils().buildDialog( + context, + localizations, + widget.quantity, + ); + } - setState(() { - manualCode = false; - initializeCameras(); - }); - }, - child: Text(localizations.translate( - i18.common.coreCommonSubmit, - )), - ), - children: [ - Align( - alignment: Alignment.topLeft, - child: Text( - localizations.translate( - i18.scanner.enterManualCode, + setState(() { + manualCode = false; + initializeCameras(); + }); + } + }, + child: Text(localizations.translate( + i18.common.coreCommonSubmit, + )), + ), + children: [ + Align( + alignment: Alignment.topLeft, + child: Text( + localizations.translate( + i18.scanner.enterManualCode, + ), + style: theme.textTheme.headlineLarge, + ), + ), + const SizedBox( + height: kPadding * 2, + ), + DigitTextFormField( + formControlName: _manualCodeFormKey, + label: localizations.translate( + i18.scanner.resourceCode, + ), + ), + ], ), - style: theme.textTheme.headlineLarge, - ), - ), - const SizedBox( - height: kPadding * 2, - ), - Text(localizations.translate( - i18.scanner.manualCodeDescription, - )), - const SizedBox( - height: kPadding * 2, - ), - DigitTextField( - label: localizations.translate( - i18.scanner.resourceCode, - ), - controller: _resourceController, - ), - ], - ), - ) + ); + }); + }) : const Center( child: CircularProgressIndicator(), ); @@ -577,4 +600,9 @@ class _DigitScannerPageState extends LocalizedState { : ImageFormatGroup.bgra8888, ); } + + FormGroup buildForm() { + return fb + .group({_manualCodeFormKey: FormControl()}); + } } diff --git a/packages/digit_scanner/pubspec.lock b/packages/digit_scanner/pubspec.lock index 8b1128eba..4f77af87f 100644 --- a/packages/digit_scanner/pubspec.lock +++ b/packages/digit_scanner/pubspec.lock @@ -929,7 +929,7 @@ packages: source: hosted version: "0.8.1" reactive_forms: - dependency: transitive + dependency: "direct main" description: name: reactive_forms sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" diff --git a/packages/digit_scanner/pubspec.yaml b/packages/digit_scanner/pubspec.yaml index 5ca4ebb43..5eb1b1c9d 100644 --- a/packages/digit_scanner/pubspec.yaml +++ b/packages/digit_scanner/pubspec.yaml @@ -17,7 +17,7 @@ repository: https://github.com/egovernments/health-campaign-field-worker-app # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.0.2 +version: 1.0.3-dev.1 environment: sdk: '>=2.19.4 <3.9.0' @@ -48,6 +48,7 @@ dependencies: path_provider: ^2.0.11 path: ^1.8.2 google_mlkit_commons: ^0.6.0 + reactive_forms: ^14.1.0 dev_dependencies: flutter_test: diff --git a/packages/inventory_management/CHANGELOG.md b/packages/inventory_management/CHANGELOG.md index fb268de06..b25f0c06c 100644 --- a/packages/inventory_management/CHANGELOG.md +++ b/packages/inventory_management/CHANGELOG.md @@ -1,64 +1,64 @@ -## 0.0.0-dev.1 +## 1.0.3-dev.1 -* Inventory Management Initial Release +* Added missing DeliveryTeam Facility in record stock screen +* Added missing scanned resources to additional fields during entry -## 0.0.0-dev.2 +## 0.0.0-dev.10 -* Removed unused package dependencies from pubspec.yaml +* Updated PageState class to public for customization +* Updated digit_components -## 0.0.0-dev.3 +## 1.0.2+1 -* Updated intl package version +* Get Precise location on Submitting latitude longitude details -## 0.0.0-dev.4 +## 1.0.2 -* Removed fonts references from pubspec.yaml +* Localization support added for missing fields +* Added try catch for local repository to handle db lock -## 0.0.0-dev.5 +## 1.0.1 -* Updated digit_components version for dropdown fix +* Bug fixes and enhancements +* Updated digit_components and digit_scanner to latest versions -## 0.0.0-dev.6 +## 1.0.0 -* Updated digit_data_model to latest version -* Fixed Report Type mapping to value +* Initial stable Release -## 0.0.0-dev.7 +## 0.0.0-dev.9 -* Fixed Lost report type mapping to value +* Updated digit_scanner to latest version ## 0.0.0-dev.8 * Updated digit_scanner to latest version -## 0.0.0-dev.9 +## 0.0.0-dev.7 -* Updated digit_scanner to latest version +* Fixed Lost report type mapping to value -## 1.0.0 +## 0.0.0-dev.6 -* Initial stable Release +* Updated digit_data_model to latest version +* Fixed Report Type mapping to value -## 1.0.1 +## 0.0.0-dev.5 -* Bug fixes and enhancements -* Updated digit_components and digit_scanner to latest versions +* Updated digit_components version for dropdown fix -## 1.0.2 +## 0.0.0-dev.4 -* Localization support added for missing fields -* Added try catch for local repository to handle db lock +* Removed fonts references from pubspec.yaml -## 1.0.2+1 +## 0.0.0-dev.3 -* Get Precise location on Submitting latitude longitude details +* Updated intl package version -## 0.0.0-dev.10 +## 0.0.0-dev.2 -* Updated PageState class to public for customization -* Updated digit_components +* Removed unused package dependencies from pubspec.yaml -## 0.0.0-dev.11 +## 0.0.0-dev.1 -* Added DeliveryTeam Facility in record stock screen -* Added scanned resources to additional fields \ No newline at end of file +* Inventory Management Initial Release \ No newline at end of file diff --git a/packages/inventory_management/lib/pages/record_stock/stock_details.dart b/packages/inventory_management/lib/pages/record_stock/stock_details.dart index f3df593d7..67037e2b6 100644 --- a/packages/inventory_management/lib/pages/record_stock/stock_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/stock_details.dart @@ -310,331 +310,257 @@ class StockDetailsPageState extends LocalizedState { () async { DigitComponentsUtils() .hideLocationDialog(context); - await DigitSyncDialog.show(context, - type: - DigitSyncDialogType.complete, - label: localizations.translate( - i18.common.locationCaptured), - primaryAction: DigitDialogActions( - label: localizations - .translate(i18 - .common.ctaProceed), - action: (ctx) async { - DigitComponentsUtils() - .hideLocationDialog( - context); - final bloc = context.read< - RecordStockBloc>(); - - final productVariant = form - .control( - _productVariantKey) - .value - as ProductVariantModel; - - switch (entryType) { - case StockRecordEntryType - .receipt: - transactionReason = - TransactionReason - .received - .toValue(); - break; - case StockRecordEntryType - .dispatch: - transactionReason = - null; - break; - case StockRecordEntryType - .returned: - transactionReason = - TransactionReason - .returned - .toValue(); - break; - default: - transactionReason = form - .control( - _transactionReasonKey, - ) - .value as String?; - break; - } + final bloc = + context.read(); - final quantity = form - .control( - _transactionQuantityKey) - .value; + final productVariant = form + .control(_productVariantKey) + .value as ProductVariantModel; - final waybillNumber = form - .control( - _waybillNumberKey) - .value as String?; + switch (entryType) { + case StockRecordEntryType.receipt: + transactionReason = + TransactionReason.received + .toValue(); + break; + case StockRecordEntryType.dispatch: + transactionReason = null; + break; + case StockRecordEntryType.returned: + transactionReason = + TransactionReason.returned + .toValue(); + break; + default: + transactionReason = form + .control( + _transactionReasonKey, + ) + .value as String?; + break; + } - final waybillQuantity = form - .control( - _waybillQuantityKey) - .value as String?; + final quantity = form + .control(_transactionQuantityKey) + .value; - final vehicleNumber = form - .control( - _vehicleNumberKey) - .value as String?; + final waybillNumber = form + .control(_waybillNumberKey) + .value as String?; - final lat = - locationState.latitude; - final lng = - locationState.longitude; + final waybillQuantity = form + .control(_waybillQuantityKey) + .value as String?; - final hasLocationData = - lat != null && - lng != null; + final vehicleNumber = form + .control(_vehicleNumberKey) + .value as String?; - final comments = form - .control(_commentsKey) - .value as String?; + final lat = locationState.latitude; + final lng = locationState.longitude; - final deliveryTeamName = form - .control( - _deliveryTeamKey) - .value as String?; + final hasLocationData = + lat != null && lng != null; - String? senderId; - String? senderType; - String? receiverId; - String? receiverType; + final comments = form + .control(_commentsKey) + .value as String?; - final primaryType = - BlocProvider.of< - RecordStockBloc>( - context, - ).state.primaryType; + final deliveryTeamName = form + .control(_deliveryTeamKey) + .value as String?; - final primaryId = - BlocProvider.of< - RecordStockBloc>( - context, - ).state.primaryId; + String? senderId; + String? senderType; + String? receiverId; + String? receiverType; - switch (entryType) { - case StockRecordEntryType - .receipt: - case StockRecordEntryType - .loss: - case StockRecordEntryType - .damaged: - if (deliveryTeamSelected) { - senderId = - deliveryTeamName; - senderType = "STAFF"; - } else { - senderId = - secondaryParty - ?.id; - senderType = - "WAREHOUSE"; - } - receiverId = primaryId; - receiverType = - primaryType; + final primaryType = + BlocProvider.of( + context, + ).state.primaryType; - break; - case StockRecordEntryType - .dispatch: - case StockRecordEntryType - .returned: - if (deliveryTeamSelected) { - receiverId = - deliveryTeamName; - receiverType = - "STAFF"; - } else { - receiverId = - secondaryParty - ?.id; - receiverType = - "WAREHOUSE"; - } - senderId = primaryId; - senderType = - primaryType; - break; - } + final primaryId = + BlocProvider.of( + context, + ).state.primaryId; - final stockModel = - StockModel( - clientReferenceId: - IdGen.i.identifier, - productVariantId: - productVariant.id, - transactionReason: - transactionReason, - transactionType: - transactionType, - referenceId: - stockState.projectId, - referenceIdType: - 'PROJECT', - quantity: - quantity.toString(), - waybillNumber: - waybillNumber, - receiverId: receiverId, - receiverType: - receiverType, - senderId: senderId, - senderType: senderType, - auditDetails: - AuditDetails( - createdBy: - InventorySingleton() - .loggedInUserUuid, - createdTime: context - .millisecondsSinceEpoch(), - ), - clientAuditDetails: - ClientAuditDetails( - createdBy: - InventorySingleton() - .loggedInUserUuid, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: - InventorySingleton() - .loggedInUserUuid, - lastModifiedTime: context - .millisecondsSinceEpoch(), - ), - additionalFields: [ - waybillQuantity, - vehicleNumber, - comments, - ].any((element) => - element != - null) || - hasLocationData - ? StockAdditionalFields( - version: 1, - fields: [ - if (waybillQuantity != - null && - waybillQuantity - .trim() - .isNotEmpty) - AdditionalField( - 'waybill_quantity', - waybillQuantity, - ), - if (vehicleNumber != - null && - vehicleNumber - .trim() - .isNotEmpty) - AdditionalField( - 'vehicle_number', - vehicleNumber, - ), - if (comments != - null && - comments - .trim() - .isNotEmpty) - AdditionalField( - 'comments', - comments, - ), - if (deliveryTeamName != - null && - deliveryTeamName - .trim() - .isNotEmpty) - AdditionalField( - 'deliveryTeam', - deliveryTeamName, - ), - if (hasLocationData) ...[ - AdditionalField( - 'lat', - lat, - ), - AdditionalField( - 'lng', - lng, - ), - ], - if (scannerState - .barCodes - .isNotEmpty) - addBarCodesToFields( - scannerState - .barCodes), - ], - ) - : null, - ); + switch (entryType) { + case StockRecordEntryType.receipt: + case StockRecordEntryType.loss: + case StockRecordEntryType.damaged: + if (deliveryTeamSelected) { + senderId = deliveryTeamName; + senderType = "STAFF"; + } else { + senderId = secondaryParty?.id; + senderType = "WAREHOUSE"; + } + receiverId = primaryId; + receiverType = primaryType; - bloc.add( - RecordStockSaveStockDetailsEvent( - stockModel: stockModel, - ), - ); + break; + case StockRecordEntryType.dispatch: + case StockRecordEntryType.returned: + if (deliveryTeamSelected) { + receiverId = deliveryTeamName; + receiverType = "STAFF"; + } else { + receiverId = secondaryParty?.id; + receiverType = "WAREHOUSE"; + } + senderId = primaryId; + senderType = primaryType; + break; + } - final submit = - await DigitDialog.show< - bool>( - context, - options: - DigitDialogOptions( - key: const Key( - 'submitDialog'), - titleText: localizations - .translate( - i18.stockDetails - .dialogTitle, + final stockModel = StockModel( + clientReferenceId: + IdGen.i.identifier, + productVariantId: productVariant.id, + transactionReason: + transactionReason, + transactionType: transactionType, + referenceId: stockState.projectId, + referenceIdType: 'PROJECT', + quantity: quantity.toString(), + waybillNumber: waybillNumber, + receiverId: receiverId, + receiverType: receiverType, + senderId: senderId, + senderType: senderType, + auditDetails: AuditDetails( + createdBy: InventorySingleton() + .loggedInUserUuid, + createdTime: context + .millisecondsSinceEpoch(), + ), + clientAuditDetails: + ClientAuditDetails( + createdBy: InventorySingleton() + .loggedInUserUuid, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: + InventorySingleton() + .loggedInUserUuid, + lastModifiedTime: context + .millisecondsSinceEpoch(), + ), + additionalFields: [ + waybillQuantity, + vehicleNumber, + comments, + ].any((element) => + element != null) || + hasLocationData + ? StockAdditionalFields( + version: 1, + fields: [ + if (waybillQuantity != + null && + waybillQuantity + .trim() + .isNotEmpty) + AdditionalField( + 'waybill_quantity', + waybillQuantity, ), - contentText: - localizations - .translate( - i18.stockDetails - .dialogContent, + if (vehicleNumber != + null && + vehicleNumber + .trim() + .isNotEmpty) + AdditionalField( + 'vehicle_number', + vehicleNumber, ), - primaryAction: - DigitDialogActions( - label: localizations - .translate( - i18.common - .coreCommonSubmit, - ), - action: (context) { - Navigator.of( - context, - rootNavigator: - true, - ).pop(true); - }, + if (comments != null && + comments + .trim() + .isNotEmpty) + AdditionalField( + 'comments', + comments, ), - secondaryAction: - DigitDialogActions( - label: localizations - .translate( - i18.common - .coreCommonCancel, - ), - action: (context) => - Navigator.of( - context, - rootNavigator: true, - ).pop(false), + if (deliveryTeamName != + null && + deliveryTeamName + .trim() + .isNotEmpty) + AdditionalField( + 'deliveryTeam', + deliveryTeamName, ), - ), - ); + if (hasLocationData) ...[ + AdditionalField( + 'lat', + lat, + ), + AdditionalField( + 'lng', + lng, + ), + ], + if (scannerState + .barCodes.isNotEmpty) + addBarCodesToFields( + scannerState + .barCodes), + ], + ) + : null, + ); + + bloc.add( + RecordStockSaveStockDetailsEvent( + stockModel: stockModel, + ), + ); + + final submit = + await DigitDialog.show( + context, + options: DigitDialogOptions( + key: const Key('submitDialog'), + titleText: + localizations.translate( + i18.stockDetails.dialogTitle, + ), + contentText: + localizations.translate( + i18.stockDetails.dialogContent, + ), + primaryAction: DigitDialogActions( + label: localizations.translate( + i18.common.coreCommonSubmit, + ), + action: (context) { + Navigator.of( + context, + rootNavigator: true, + ).pop(true); + }, + ), + secondaryAction: + DigitDialogActions( + label: localizations.translate( + i18.common.coreCommonCancel, + ), + action: (context) => + Navigator.of( + context, + rootNavigator: true, + ).pop(false), + ), + ), + ); - if (submit ?? false) { - bloc.add( - const RecordStockCreateStockEntryEvent(), - ); - } - })); + if (submit ?? false) { + bloc.add( + const RecordStockCreateStockEntryEvent(), + ); + } }); } }, diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index 53f172fc9..f63e21671 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -1,6 +1,6 @@ name: inventory_management description: This package offers inventory management features, allowing users to view stock reports and perform inventory resource reconciliation. -version: 0.0.0-dev.11 +version: 1.0.3-dev.1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/inventory_management repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration_delivery/CHANGELOG.md index 0382877b8..8940f7b75 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration_delivery/CHANGELOG.md @@ -1,73 +1,80 @@ -## 0.0.0-dev.1 +## 1.0.3-dev.2 -* Registration and Delivery Initial Release +* Closed household search fixes +* Tasks status fixes on beneficiary card and overview page +* Updated digit_components and digit_scanner versions -## 0.0.0-dev.2 +## 1.0.3-dev.1 -* Boundary v2 Integrated, to use Boundary v1 0.0.0-dev.1 version can be used +* Fixed filter search bug fixes and improvements +* Updated task status on view_beneficiary card +* Implemented closed household flow filter and update -## 0.0.0-dev.3 +## 0.0.0-dev.10 -* Updated digit_data_model to latest version +* Added pagination for filter search +* Updated PageState class to public for customization +* Updated digit_components -## 0.0.0-dev.4 +## 0.0.0-dev.9 -* Added null check for fetching product variants +* Updated individual details file for exposing individual state +* Updated household_overview for BeneficiaryChecklistRoute -## 0.0.0-dev.5 +## 0.0.0-dev.8 -* Facility dialog empty pop up fix on initial load +* Added query builder and registry updated changes +* Added New screens - house details -## 0.0.0-dev.6 +## 1.0.2+1 -* Updated digit_scanner to latest version +* Get Precise location on Submitting latitude longitude details -## 0.0.0-dev.7 +## 1.0.2 -* Fixed Duplicate routing issue +* Added try catch for local repository to handle db lock +* Localisation support added for missing fields +* Bug fixes and enhancements -## 1.0.0 +## 1.0.1 -* Initial stable version +* Moved service and service definition bloc to digit_data_model package +* Removed downsync model +* Added HouseholdDetailsBloc in registration_delivery_wrapper page +* Updated digit_data_model to latest version ## 1.0.0+1 * Updated digit_showcase to latest version -## 1.0.1 +## 1.0.0 -* Moved service and service definition bloc to digit_data_model package -* Removed downsync model -* Added HouseholdDetailsBloc in registration_delivery_wrapper page -* Updated digit_data_model to latest version +* Initial stable version -## 1.0.2 +## 0.0.0-dev.7 -* Added try catch for local repository to handle db lock -* Localisation support added for missing fields -* Bug fixes and enhancements +* Fixed Duplicate routing issue -## 1.0.2+1 +## 0.0.0-dev.6 -* Get Precise location on Submitting latitude longitude details +* Updated digit_scanner to latest version -## 0.0.0-dev.8 +## 0.0.0-dev.5 -* Added query builder and registry updated changes -* Added New screens - house details +* Facility dialog empty pop up fix on initial load -## 0.0.0-dev.9 +## 0.0.0-dev.4 -* Updated individual details file for exposing individual state -* Updated household_overview for BeneficiaryChecklistRoute +* Added null check for fetching product variants -## 0.0.0-dev.10 +## 0.0.0-dev.3 -* Added pagination for filter search -* Updated PageState class to public for customization -* Updated digit_components +* Updated digit_data_model to latest version -## 0.0.0-dev.11 +## 0.0.0-dev.2 + +* Boundary v2 Integrated, to use Boundary v1 0.0.0-dev.1 version can be used + +## 0.0.0-dev.1 -* Fixed filter search bug fixes -* Updated task status on view_beneficiary card \ No newline at end of file +* Registration and Delivery Initial Release \ No newline at end of file diff --git a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart index 4b70fa0a9..9e8279d75 100644 --- a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart +++ b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart @@ -153,6 +153,7 @@ class BeneficiaryRegistrationBloc : LocalityModel(code: code, name: name); emit(BeneficiaryRegistrationSummaryState( navigateToRoot: false, + selectedClosedHouseholdID: value.selectedClosedHouseholdID, householdModel: household?.copyWith( address: address?.copyWith( relatedClientReferenceId: household.clientReferenceId, @@ -200,6 +201,7 @@ class BeneficiaryRegistrationBloc summary: (value) async { if (event.navigateToSummary) { emit(BeneficiaryRegistrationState.create( + selectedClosedHouseholdID: value.selectedClosedHouseholdID, addressModel: value.householdModel?.address, householdModel: value.householdModel, individualModel: value.individualModel, @@ -712,6 +714,7 @@ class BeneficiaryRegistrationState with _$BeneficiaryRegistrationState { ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, @Default(false) bool loading, @Default(false) bool isHeadOfHousehold, }) = BeneficiaryRegistrationCreateState; @@ -757,6 +760,7 @@ class BeneficiaryRegistrationState with _$BeneficiaryRegistrationState { ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, @Default(false) bool loading, @Default(false) bool isHeadOfHousehold, }) = BeneficiaryRegistrationSummaryState; diff --git a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart index a6ec3b32e..326629de2 100644 --- a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart +++ b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart @@ -3268,6 +3268,7 @@ mixin _$BeneficiaryRegistrationState { ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) create, @@ -3306,6 +3307,7 @@ mixin _$BeneficiaryRegistrationState { ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) summary, @@ -3320,6 +3322,7 @@ mixin _$BeneficiaryRegistrationState { ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -3358,6 +3361,7 @@ mixin _$BeneficiaryRegistrationState { ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -3372,6 +3376,7 @@ mixin _$BeneficiaryRegistrationState { ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -3410,6 +3415,7 @@ mixin _$BeneficiaryRegistrationState { ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -3525,6 +3531,7 @@ abstract class _$$BeneficiaryRegistrationCreateStateImplCopyWith<$Res> ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold}); } @@ -3548,6 +3555,7 @@ class __$$BeneficiaryRegistrationCreateStateImplCopyWithImpl<$Res> Object? projectBeneficiaryModel = freezed, Object? registrationDate = freezed, Object? searchQuery = freezed, + Object? selectedClosedHouseholdID = freezed, Object? loading = null, Object? isHeadOfHousehold = null, }) { @@ -3576,6 +3584,10 @@ class __$$BeneficiaryRegistrationCreateStateImplCopyWithImpl<$Res> ? _value.searchQuery : searchQuery // ignore: cast_nullable_to_non_nullable as String?, + selectedClosedHouseholdID: freezed == selectedClosedHouseholdID + ? _value.selectedClosedHouseholdID + : selectedClosedHouseholdID // ignore: cast_nullable_to_non_nullable + as String?, loading: null == loading ? _value.loading : loading // ignore: cast_nullable_to_non_nullable @@ -3599,6 +3611,7 @@ class _$BeneficiaryRegistrationCreateStateImpl this.projectBeneficiaryModel, this.registrationDate, this.searchQuery, + this.selectedClosedHouseholdID, this.loading = false, this.isHeadOfHousehold = false}); @@ -3615,6 +3628,8 @@ class _$BeneficiaryRegistrationCreateStateImpl @override final String? searchQuery; @override + final String? selectedClosedHouseholdID; + @override @JsonKey() final bool loading; @override @@ -3623,7 +3638,7 @@ class _$BeneficiaryRegistrationCreateStateImpl @override String toString() { - return 'BeneficiaryRegistrationState.create(addressModel: $addressModel, householdModel: $householdModel, individualModel: $individualModel, projectBeneficiaryModel: $projectBeneficiaryModel, registrationDate: $registrationDate, searchQuery: $searchQuery, loading: $loading, isHeadOfHousehold: $isHeadOfHousehold)'; + return 'BeneficiaryRegistrationState.create(addressModel: $addressModel, householdModel: $householdModel, individualModel: $individualModel, projectBeneficiaryModel: $projectBeneficiaryModel, registrationDate: $registrationDate, searchQuery: $searchQuery, selectedClosedHouseholdID: $selectedClosedHouseholdID, loading: $loading, isHeadOfHousehold: $isHeadOfHousehold)'; } @override @@ -3644,6 +3659,9 @@ class _$BeneficiaryRegistrationCreateStateImpl other.registrationDate == registrationDate) && (identical(other.searchQuery, searchQuery) || other.searchQuery == searchQuery) && + (identical(other.selectedClosedHouseholdID, + selectedClosedHouseholdID) || + other.selectedClosedHouseholdID == selectedClosedHouseholdID) && (identical(other.loading, loading) || other.loading == loading) && (identical(other.isHeadOfHousehold, isHeadOfHousehold) || other.isHeadOfHousehold == isHeadOfHousehold)); @@ -3658,6 +3676,7 @@ class _$BeneficiaryRegistrationCreateStateImpl projectBeneficiaryModel, registrationDate, searchQuery, + selectedClosedHouseholdID, loading, isHeadOfHousehold); @@ -3679,6 +3698,7 @@ class _$BeneficiaryRegistrationCreateStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) create, @@ -3717,6 +3737,7 @@ class _$BeneficiaryRegistrationCreateStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) summary, @@ -3728,6 +3749,7 @@ class _$BeneficiaryRegistrationCreateStateImpl projectBeneficiaryModel, registrationDate, searchQuery, + selectedClosedHouseholdID, loading, isHeadOfHousehold); } @@ -3742,6 +3764,7 @@ class _$BeneficiaryRegistrationCreateStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -3780,6 +3803,7 @@ class _$BeneficiaryRegistrationCreateStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -3791,6 +3815,7 @@ class _$BeneficiaryRegistrationCreateStateImpl projectBeneficiaryModel, registrationDate, searchQuery, + selectedClosedHouseholdID, loading, isHeadOfHousehold); } @@ -3805,6 +3830,7 @@ class _$BeneficiaryRegistrationCreateStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -3843,6 +3869,7 @@ class _$BeneficiaryRegistrationCreateStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -3856,6 +3883,7 @@ class _$BeneficiaryRegistrationCreateStateImpl projectBeneficiaryModel, registrationDate, searchQuery, + selectedClosedHouseholdID, loading, isHeadOfHousehold); } @@ -3924,6 +3952,7 @@ abstract class BeneficiaryRegistrationCreateState final ProjectBeneficiaryModel? projectBeneficiaryModel, final DateTime? registrationDate, final String? searchQuery, + final String? selectedClosedHouseholdID, final bool loading, final bool isHeadOfHousehold}) = _$BeneficiaryRegistrationCreateStateImpl; @@ -3935,6 +3964,7 @@ abstract class BeneficiaryRegistrationCreateState ProjectBeneficiaryModel? get projectBeneficiaryModel; DateTime? get registrationDate; String? get searchQuery; + String? get selectedClosedHouseholdID; @override bool get loading; bool get isHeadOfHousehold; @@ -4099,6 +4129,7 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) create, @@ -4137,6 +4168,7 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) summary, @@ -4155,6 +4187,7 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -4193,6 +4226,7 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -4211,6 +4245,7 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -4249,6 +4284,7 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -4471,6 +4507,7 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) create, @@ -4509,6 +4546,7 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) summary, @@ -4527,6 +4565,7 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -4565,6 +4604,7 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -4583,6 +4623,7 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -4621,6 +4662,7 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -4813,6 +4855,7 @@ class _$BeneficiaryRegistrationAddMemberStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) create, @@ -4851,6 +4894,7 @@ class _$BeneficiaryRegistrationAddMemberStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) summary, @@ -4868,6 +4912,7 @@ class _$BeneficiaryRegistrationAddMemberStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -4906,6 +4951,7 @@ class _$BeneficiaryRegistrationAddMemberStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -4923,6 +4969,7 @@ class _$BeneficiaryRegistrationAddMemberStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -4961,6 +5008,7 @@ class _$BeneficiaryRegistrationAddMemberStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -5216,6 +5264,7 @@ class _$BeneficiaryRegistrationPersistedStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) create, @@ -5254,6 +5303,7 @@ class _$BeneficiaryRegistrationPersistedStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) summary, @@ -5279,6 +5329,7 @@ class _$BeneficiaryRegistrationPersistedStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -5317,6 +5368,7 @@ class _$BeneficiaryRegistrationPersistedStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -5342,6 +5394,7 @@ class _$BeneficiaryRegistrationPersistedStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -5380,6 +5433,7 @@ class _$BeneficiaryRegistrationPersistedStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -5499,6 +5553,7 @@ abstract class _$$BeneficiaryRegistrationSummaryStateImplCopyWith<$Res> ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold}); } @@ -5522,6 +5577,7 @@ class __$$BeneficiaryRegistrationSummaryStateImplCopyWithImpl<$Res> Object? projectBeneficiaryModel = freezed, Object? registrationDate = freezed, Object? addressModel = freezed, + Object? selectedClosedHouseholdID = freezed, Object? loading = null, Object? isHeadOfHousehold = null, }) { @@ -5550,6 +5606,10 @@ class __$$BeneficiaryRegistrationSummaryStateImplCopyWithImpl<$Res> ? _value.addressModel : addressModel // ignore: cast_nullable_to_non_nullable as AddressModel?, + selectedClosedHouseholdID: freezed == selectedClosedHouseholdID + ? _value.selectedClosedHouseholdID + : selectedClosedHouseholdID // ignore: cast_nullable_to_non_nullable + as String?, loading: null == loading ? _value.loading : loading // ignore: cast_nullable_to_non_nullable @@ -5573,6 +5633,7 @@ class _$BeneficiaryRegistrationSummaryStateImpl this.projectBeneficiaryModel, this.registrationDate, this.addressModel, + this.selectedClosedHouseholdID, this.loading = false, this.isHeadOfHousehold = false}); @@ -5590,6 +5651,8 @@ class _$BeneficiaryRegistrationSummaryStateImpl @override final AddressModel? addressModel; @override + final String? selectedClosedHouseholdID; + @override @JsonKey() final bool loading; @override @@ -5598,7 +5661,7 @@ class _$BeneficiaryRegistrationSummaryStateImpl @override String toString() { - return 'BeneficiaryRegistrationState.summary(navigateToRoot: $navigateToRoot, householdModel: $householdModel, individualModel: $individualModel, projectBeneficiaryModel: $projectBeneficiaryModel, registrationDate: $registrationDate, addressModel: $addressModel, loading: $loading, isHeadOfHousehold: $isHeadOfHousehold)'; + return 'BeneficiaryRegistrationState.summary(navigateToRoot: $navigateToRoot, householdModel: $householdModel, individualModel: $individualModel, projectBeneficiaryModel: $projectBeneficiaryModel, registrationDate: $registrationDate, addressModel: $addressModel, selectedClosedHouseholdID: $selectedClosedHouseholdID, loading: $loading, isHeadOfHousehold: $isHeadOfHousehold)'; } @override @@ -5619,6 +5682,9 @@ class _$BeneficiaryRegistrationSummaryStateImpl other.registrationDate == registrationDate) && (identical(other.addressModel, addressModel) || other.addressModel == addressModel) && + (identical(other.selectedClosedHouseholdID, + selectedClosedHouseholdID) || + other.selectedClosedHouseholdID == selectedClosedHouseholdID) && (identical(other.loading, loading) || other.loading == loading) && (identical(other.isHeadOfHousehold, isHeadOfHousehold) || other.isHeadOfHousehold == isHeadOfHousehold)); @@ -5633,6 +5699,7 @@ class _$BeneficiaryRegistrationSummaryStateImpl projectBeneficiaryModel, registrationDate, addressModel, + selectedClosedHouseholdID, loading, isHeadOfHousehold); @@ -5654,6 +5721,7 @@ class _$BeneficiaryRegistrationSummaryStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) create, @@ -5692,6 +5760,7 @@ class _$BeneficiaryRegistrationSummaryStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) summary, @@ -5703,6 +5772,7 @@ class _$BeneficiaryRegistrationSummaryStateImpl projectBeneficiaryModel, registrationDate, addressModel, + selectedClosedHouseholdID, loading, isHeadOfHousehold); } @@ -5717,6 +5787,7 @@ class _$BeneficiaryRegistrationSummaryStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -5755,6 +5826,7 @@ class _$BeneficiaryRegistrationSummaryStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -5766,6 +5838,7 @@ class _$BeneficiaryRegistrationSummaryStateImpl projectBeneficiaryModel, registrationDate, addressModel, + selectedClosedHouseholdID, loading, isHeadOfHousehold); } @@ -5780,6 +5853,7 @@ class _$BeneficiaryRegistrationSummaryStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -5818,6 +5892,7 @@ class _$BeneficiaryRegistrationSummaryStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, + String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -5831,6 +5906,7 @@ class _$BeneficiaryRegistrationSummaryStateImpl projectBeneficiaryModel, registrationDate, addressModel, + selectedClosedHouseholdID, loading, isHeadOfHousehold); } @@ -5899,6 +5975,7 @@ abstract class BeneficiaryRegistrationSummaryState final ProjectBeneficiaryModel? projectBeneficiaryModel, final DateTime? registrationDate, final AddressModel? addressModel, + final String? selectedClosedHouseholdID, final bool loading, final bool isHeadOfHousehold}) = _$BeneficiaryRegistrationSummaryStateImpl; @@ -5911,6 +5988,7 @@ abstract class BeneficiaryRegistrationSummaryState DateTime? get registrationDate; @override AddressModel? get addressModel; + String? get selectedClosedHouseholdID; @override bool get loading; bool get isHeadOfHousehold; diff --git a/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart b/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart index ce95a751d..210687424 100644 --- a/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart +++ b/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart @@ -4,6 +4,7 @@ import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:registration_delivery/blocs/search_households/search_households.dart'; import '../../models/entities/additional_fields_type.dart'; import '../../models/entities/deliver_strategy_type.dart'; @@ -60,14 +61,17 @@ class DeliverInterventionBloc ? null : LocalityModel(code: code, name: name); - await taskRepository.create(event.task.copyWith( - address: event.task.address?.copyWith( - locality: localityModel, - ), - )); + if (!event.navigateToSummary) { + await taskRepository.create(event.task.copyWith( + address: event.task.address?.copyWith( + locality: localityModel, + ), + )); + } + emit(state.copyWith( - oldTask: event.task, - )); + oldTask: event.task, + householdMemberWrapper: event.householdMemberWrapper)); } } catch (error) { rethrow; @@ -243,6 +247,8 @@ class DeliverInterventionEvent with _$DeliverInterventionEvent { required TaskModel task, required bool isEditing, required BoundaryModel boundaryModel, + @Default(false) bool navigateToSummary, + HouseholdMemberWrapper? householdMemberWrapper, }) = DeliverInterventionSubmitEvent; const factory DeliverInterventionEvent.handleSearch({ @@ -273,6 +279,7 @@ class DeliverInterventionState with _$DeliverInterventionState { List? pastCycles, @Default(true) bool hasCycleArrived, @Default(false) bool isLastDoseOfCycle, + HouseholdMemberWrapper? householdMemberWrapper, List? tasks, List? futureDeliveries, List? futureTask, diff --git a/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.freezed.dart b/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.freezed.dart index 496a94259..fd519292a 100644 --- a/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.freezed.dart +++ b/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.freezed.dart @@ -19,7 +19,11 @@ mixin _$DeliverInterventionEvent { @optionalTypeArgs TResult when({ required TResult Function( - TaskModel task, bool isEditing, BoundaryModel boundaryModel) + TaskModel task, + bool isEditing, + BoundaryModel boundaryModel, + bool navigateToSummary, + HouseholdMemberWrapper? householdMemberWrapper) handleSubmit, required TResult Function(TaskSearchModel taskSearch) handleSearch, required TResult Function( @@ -33,7 +37,11 @@ mixin _$DeliverInterventionEvent { @optionalTypeArgs TResult? whenOrNull({ TResult? Function( - TaskModel task, bool isEditing, BoundaryModel boundaryModel)? + TaskModel task, + bool isEditing, + BoundaryModel boundaryModel, + bool navigateToSummary, + HouseholdMemberWrapper? householdMemberWrapper)? handleSubmit, TResult? Function(TaskSearchModel taskSearch)? handleSearch, TResult? Function( @@ -47,7 +55,11 @@ mixin _$DeliverInterventionEvent { @optionalTypeArgs TResult maybeWhen({ TResult Function( - TaskModel task, bool isEditing, BoundaryModel boundaryModel)? + TaskModel task, + bool isEditing, + BoundaryModel boundaryModel, + bool navigateToSummary, + HouseholdMemberWrapper? householdMemberWrapper)? handleSubmit, TResult Function(TaskSearchModel taskSearch)? handleSearch, TResult Function( @@ -122,7 +134,14 @@ abstract class _$$DeliverInterventionSubmitEventImplCopyWith<$Res> { $Res Function(_$DeliverInterventionSubmitEventImpl) then) = __$$DeliverInterventionSubmitEventImplCopyWithImpl<$Res>; @useResult - $Res call({TaskModel task, bool isEditing, BoundaryModel boundaryModel}); + $Res call( + {TaskModel task, + bool isEditing, + BoundaryModel boundaryModel, + bool navigateToSummary, + HouseholdMemberWrapper? householdMemberWrapper}); + + $HouseholdMemberWrapperCopyWith<$Res>? get householdMemberWrapper; } /// @nodoc @@ -141,6 +160,8 @@ class __$$DeliverInterventionSubmitEventImplCopyWithImpl<$Res> Object? task = null, Object? isEditing = null, Object? boundaryModel = null, + Object? navigateToSummary = null, + Object? householdMemberWrapper = freezed, }) { return _then(_$DeliverInterventionSubmitEventImpl( task: null == task @@ -155,8 +176,29 @@ class __$$DeliverInterventionSubmitEventImplCopyWithImpl<$Res> ? _value.boundaryModel : boundaryModel // ignore: cast_nullable_to_non_nullable as BoundaryModel, + navigateToSummary: null == navigateToSummary + ? _value.navigateToSummary + : navigateToSummary // ignore: cast_nullable_to_non_nullable + as bool, + householdMemberWrapper: freezed == householdMemberWrapper + ? _value.householdMemberWrapper + : householdMemberWrapper // ignore: cast_nullable_to_non_nullable + as HouseholdMemberWrapper?, )); } + + @override + @pragma('vm:prefer-inline') + $HouseholdMemberWrapperCopyWith<$Res>? get householdMemberWrapper { + if (_value.householdMemberWrapper == null) { + return null; + } + + return $HouseholdMemberWrapperCopyWith<$Res>(_value.householdMemberWrapper!, + (value) { + return _then(_value.copyWith(householdMemberWrapper: value)); + }); + } } /// @nodoc @@ -166,7 +208,9 @@ class _$DeliverInterventionSubmitEventImpl const _$DeliverInterventionSubmitEventImpl( {required this.task, required this.isEditing, - required this.boundaryModel}); + required this.boundaryModel, + this.navigateToSummary = false, + this.householdMemberWrapper}); @override final TaskModel task; @@ -174,10 +218,15 @@ class _$DeliverInterventionSubmitEventImpl final bool isEditing; @override final BoundaryModel boundaryModel; + @override + @JsonKey() + final bool navigateToSummary; + @override + final HouseholdMemberWrapper? householdMemberWrapper; @override String toString() { - return 'DeliverInterventionEvent.handleSubmit(task: $task, isEditing: $isEditing, boundaryModel: $boundaryModel)'; + return 'DeliverInterventionEvent.handleSubmit(task: $task, isEditing: $isEditing, boundaryModel: $boundaryModel, navigateToSummary: $navigateToSummary, householdMemberWrapper: $householdMemberWrapper)'; } @override @@ -189,11 +238,16 @@ class _$DeliverInterventionSubmitEventImpl (identical(other.isEditing, isEditing) || other.isEditing == isEditing) && (identical(other.boundaryModel, boundaryModel) || - other.boundaryModel == boundaryModel)); + other.boundaryModel == boundaryModel) && + (identical(other.navigateToSummary, navigateToSummary) || + other.navigateToSummary == navigateToSummary) && + (identical(other.householdMemberWrapper, householdMemberWrapper) || + other.householdMemberWrapper == householdMemberWrapper)); } @override - int get hashCode => Object.hash(runtimeType, task, isEditing, boundaryModel); + int get hashCode => Object.hash(runtimeType, task, isEditing, boundaryModel, + navigateToSummary, householdMemberWrapper); @JsonKey(ignore: true) @override @@ -207,7 +261,11 @@ class _$DeliverInterventionSubmitEventImpl @optionalTypeArgs TResult when({ required TResult Function( - TaskModel task, bool isEditing, BoundaryModel boundaryModel) + TaskModel task, + bool isEditing, + BoundaryModel boundaryModel, + bool navigateToSummary, + HouseholdMemberWrapper? householdMemberWrapper) handleSubmit, required TResult Function(TaskSearchModel taskSearch) handleSearch, required TResult Function( @@ -217,14 +275,19 @@ class _$DeliverInterventionSubmitEventImpl IndividualModel? individualModel, ProjectTypeModel projectType) setActiveCycleDose, }) { - return handleSubmit(task, isEditing, boundaryModel); + return handleSubmit(task, isEditing, boundaryModel, navigateToSummary, + householdMemberWrapper); } @override @optionalTypeArgs TResult? whenOrNull({ TResult? Function( - TaskModel task, bool isEditing, BoundaryModel boundaryModel)? + TaskModel task, + bool isEditing, + BoundaryModel boundaryModel, + bool navigateToSummary, + HouseholdMemberWrapper? householdMemberWrapper)? handleSubmit, TResult? Function(TaskSearchModel taskSearch)? handleSearch, TResult? Function( @@ -234,14 +297,19 @@ class _$DeliverInterventionSubmitEventImpl IndividualModel? individualModel, ProjectTypeModel projectType)? setActiveCycleDose, }) { - return handleSubmit?.call(task, isEditing, boundaryModel); + return handleSubmit?.call(task, isEditing, boundaryModel, navigateToSummary, + householdMemberWrapper); } @override @optionalTypeArgs TResult maybeWhen({ TResult Function( - TaskModel task, bool isEditing, BoundaryModel boundaryModel)? + TaskModel task, + bool isEditing, + BoundaryModel boundaryModel, + bool navigateToSummary, + HouseholdMemberWrapper? householdMemberWrapper)? handleSubmit, TResult Function(TaskSearchModel taskSearch)? handleSearch, TResult Function( @@ -253,7 +321,8 @@ class _$DeliverInterventionSubmitEventImpl required TResult orElse(), }) { if (handleSubmit != null) { - return handleSubmit(task, isEditing, boundaryModel); + return handleSubmit(task, isEditing, boundaryModel, navigateToSummary, + householdMemberWrapper); } return orElse(); } @@ -311,12 +380,16 @@ abstract class DeliverInterventionSubmitEvent const factory DeliverInterventionSubmitEvent( {required final TaskModel task, required final bool isEditing, - required final BoundaryModel boundaryModel}) = + required final BoundaryModel boundaryModel, + final bool navigateToSummary, + final HouseholdMemberWrapper? householdMemberWrapper}) = _$DeliverInterventionSubmitEventImpl; TaskModel get task; bool get isEditing; BoundaryModel get boundaryModel; + bool get navigateToSummary; + HouseholdMemberWrapper? get householdMemberWrapper; @JsonKey(ignore: true) _$$DeliverInterventionSubmitEventImplCopyWith< _$DeliverInterventionSubmitEventImpl> @@ -395,7 +468,11 @@ class _$DeliverInterventionSearchEventImpl @optionalTypeArgs TResult when({ required TResult Function( - TaskModel task, bool isEditing, BoundaryModel boundaryModel) + TaskModel task, + bool isEditing, + BoundaryModel boundaryModel, + bool navigateToSummary, + HouseholdMemberWrapper? householdMemberWrapper) handleSubmit, required TResult Function(TaskSearchModel taskSearch) handleSearch, required TResult Function( @@ -412,7 +489,11 @@ class _$DeliverInterventionSearchEventImpl @optionalTypeArgs TResult? whenOrNull({ TResult? Function( - TaskModel task, bool isEditing, BoundaryModel boundaryModel)? + TaskModel task, + bool isEditing, + BoundaryModel boundaryModel, + bool navigateToSummary, + HouseholdMemberWrapper? householdMemberWrapper)? handleSubmit, TResult? Function(TaskSearchModel taskSearch)? handleSearch, TResult? Function( @@ -429,7 +510,11 @@ class _$DeliverInterventionSearchEventImpl @optionalTypeArgs TResult maybeWhen({ TResult Function( - TaskModel task, bool isEditing, BoundaryModel boundaryModel)? + TaskModel task, + bool isEditing, + BoundaryModel boundaryModel, + bool navigateToSummary, + HouseholdMemberWrapper? householdMemberWrapper)? handleSubmit, TResult Function(TaskSearchModel taskSearch)? handleSearch, TResult Function( @@ -603,7 +688,11 @@ class _$DeliverInterventionCycleFutureDoseSelectionEventImpl @optionalTypeArgs TResult when({ required TResult Function( - TaskModel task, bool isEditing, BoundaryModel boundaryModel) + TaskModel task, + bool isEditing, + BoundaryModel boundaryModel, + bool navigateToSummary, + HouseholdMemberWrapper? householdMemberWrapper) handleSubmit, required TResult Function(TaskSearchModel taskSearch) handleSearch, required TResult Function( @@ -620,7 +709,11 @@ class _$DeliverInterventionCycleFutureDoseSelectionEventImpl @optionalTypeArgs TResult? whenOrNull({ TResult? Function( - TaskModel task, bool isEditing, BoundaryModel boundaryModel)? + TaskModel task, + bool isEditing, + BoundaryModel boundaryModel, + bool navigateToSummary, + HouseholdMemberWrapper? householdMemberWrapper)? handleSubmit, TResult? Function(TaskSearchModel taskSearch)? handleSearch, TResult? Function( @@ -637,7 +730,11 @@ class _$DeliverInterventionCycleFutureDoseSelectionEventImpl @optionalTypeArgs TResult maybeWhen({ TResult Function( - TaskModel task, bool isEditing, BoundaryModel boundaryModel)? + TaskModel task, + bool isEditing, + BoundaryModel boundaryModel, + bool navigateToSummary, + HouseholdMemberWrapper? householdMemberWrapper)? handleSubmit, TResult Function(TaskSearchModel taskSearch)? handleSearch, TResult Function( @@ -834,7 +931,11 @@ class _$DeliverInterventionActiveCycleDoseSelectionEventImpl @optionalTypeArgs TResult when({ required TResult Function( - TaskModel task, bool isEditing, BoundaryModel boundaryModel) + TaskModel task, + bool isEditing, + BoundaryModel boundaryModel, + bool navigateToSummary, + HouseholdMemberWrapper? householdMemberWrapper) handleSubmit, required TResult Function(TaskSearchModel taskSearch) handleSearch, required TResult Function( @@ -852,7 +953,11 @@ class _$DeliverInterventionActiveCycleDoseSelectionEventImpl @optionalTypeArgs TResult? whenOrNull({ TResult? Function( - TaskModel task, bool isEditing, BoundaryModel boundaryModel)? + TaskModel task, + bool isEditing, + BoundaryModel boundaryModel, + bool navigateToSummary, + HouseholdMemberWrapper? householdMemberWrapper)? handleSubmit, TResult? Function(TaskSearchModel taskSearch)? handleSearch, TResult? Function( @@ -870,7 +975,11 @@ class _$DeliverInterventionActiveCycleDoseSelectionEventImpl @optionalTypeArgs TResult maybeWhen({ TResult Function( - TaskModel task, bool isEditing, BoundaryModel boundaryModel)? + TaskModel task, + bool isEditing, + BoundaryModel boundaryModel, + bool navigateToSummary, + HouseholdMemberWrapper? householdMemberWrapper)? handleSubmit, TResult Function(TaskSearchModel taskSearch)? handleSearch, TResult Function( @@ -964,6 +1073,8 @@ mixin _$DeliverInterventionState { List? get pastCycles => throw _privateConstructorUsedError; bool get hasCycleArrived => throw _privateConstructorUsedError; bool get isLastDoseOfCycle => throw _privateConstructorUsedError; + HouseholdMemberWrapper? get householdMemberWrapper => + throw _privateConstructorUsedError; List? get tasks => throw _privateConstructorUsedError; List? get futureDeliveries => throw _privateConstructorUsedError; @@ -989,10 +1100,13 @@ abstract class $DeliverInterventionStateCopyWith<$Res> { List? pastCycles, bool hasCycleArrived, bool isLastDoseOfCycle, + HouseholdMemberWrapper? householdMemberWrapper, List? tasks, List? futureDeliveries, List? futureTask, TaskModel? oldTask}); + + $HouseholdMemberWrapperCopyWith<$Res>? get householdMemberWrapper; } /// @nodoc @@ -1016,6 +1130,7 @@ class _$DeliverInterventionStateCopyWithImpl<$Res, Object? pastCycles = freezed, Object? hasCycleArrived = null, Object? isLastDoseOfCycle = null, + Object? householdMemberWrapper = freezed, Object? tasks = freezed, Object? futureDeliveries = freezed, Object? futureTask = freezed, @@ -1050,6 +1165,10 @@ class _$DeliverInterventionStateCopyWithImpl<$Res, ? _value.isLastDoseOfCycle : isLastDoseOfCycle // ignore: cast_nullable_to_non_nullable as bool, + householdMemberWrapper: freezed == householdMemberWrapper + ? _value.householdMemberWrapper + : householdMemberWrapper // ignore: cast_nullable_to_non_nullable + as HouseholdMemberWrapper?, tasks: freezed == tasks ? _value.tasks : tasks // ignore: cast_nullable_to_non_nullable @@ -1068,6 +1187,19 @@ class _$DeliverInterventionStateCopyWithImpl<$Res, as TaskModel?, ) as $Val); } + + @override + @pragma('vm:prefer-inline') + $HouseholdMemberWrapperCopyWith<$Res>? get householdMemberWrapper { + if (_value.householdMemberWrapper == null) { + return null; + } + + return $HouseholdMemberWrapperCopyWith<$Res>(_value.householdMemberWrapper!, + (value) { + return _then(_value.copyWith(householdMemberWrapper: value) as $Val); + }); + } } /// @nodoc @@ -1087,10 +1219,14 @@ abstract class _$$DeliverInterventionStateImplCopyWith<$Res> List? pastCycles, bool hasCycleArrived, bool isLastDoseOfCycle, + HouseholdMemberWrapper? householdMemberWrapper, List? tasks, List? futureDeliveries, List? futureTask, TaskModel? oldTask}); + + @override + $HouseholdMemberWrapperCopyWith<$Res>? get householdMemberWrapper; } /// @nodoc @@ -1113,6 +1249,7 @@ class __$$DeliverInterventionStateImplCopyWithImpl<$Res> Object? pastCycles = freezed, Object? hasCycleArrived = null, Object? isLastDoseOfCycle = null, + Object? householdMemberWrapper = freezed, Object? tasks = freezed, Object? futureDeliveries = freezed, Object? futureTask = freezed, @@ -1147,6 +1284,10 @@ class __$$DeliverInterventionStateImplCopyWithImpl<$Res> ? _value.isLastDoseOfCycle : isLastDoseOfCycle // ignore: cast_nullable_to_non_nullable as bool, + householdMemberWrapper: freezed == householdMemberWrapper + ? _value.householdMemberWrapper + : householdMemberWrapper // ignore: cast_nullable_to_non_nullable + as HouseholdMemberWrapper?, tasks: freezed == tasks ? _value._tasks : tasks // ignore: cast_nullable_to_non_nullable @@ -1178,6 +1319,7 @@ class _$DeliverInterventionStateImpl implements _DeliverInterventionState { final List? pastCycles, this.hasCycleArrived = true, this.isLastDoseOfCycle = false, + this.householdMemberWrapper, final List? tasks, final List? futureDeliveries, final List? futureTask, @@ -1215,6 +1357,8 @@ class _$DeliverInterventionStateImpl implements _DeliverInterventionState { @override @JsonKey() final bool isLastDoseOfCycle; + @override + final HouseholdMemberWrapper? householdMemberWrapper; final List? _tasks; @override List? get tasks { @@ -1251,7 +1395,7 @@ class _$DeliverInterventionStateImpl implements _DeliverInterventionState { @override String toString() { - return 'DeliverInterventionState(loading: $loading, isEditing: $isEditing, cycle: $cycle, dose: $dose, pastCycles: $pastCycles, hasCycleArrived: $hasCycleArrived, isLastDoseOfCycle: $isLastDoseOfCycle, tasks: $tasks, futureDeliveries: $futureDeliveries, futureTask: $futureTask, oldTask: $oldTask)'; + return 'DeliverInterventionState(loading: $loading, isEditing: $isEditing, cycle: $cycle, dose: $dose, pastCycles: $pastCycles, hasCycleArrived: $hasCycleArrived, isLastDoseOfCycle: $isLastDoseOfCycle, householdMemberWrapper: $householdMemberWrapper, tasks: $tasks, futureDeliveries: $futureDeliveries, futureTask: $futureTask, oldTask: $oldTask)'; } @override @@ -1270,6 +1414,8 @@ class _$DeliverInterventionStateImpl implements _DeliverInterventionState { other.hasCycleArrived == hasCycleArrived) && (identical(other.isLastDoseOfCycle, isLastDoseOfCycle) || other.isLastDoseOfCycle == isLastDoseOfCycle) && + (identical(other.householdMemberWrapper, householdMemberWrapper) || + other.householdMemberWrapper == householdMemberWrapper) && const DeepCollectionEquality().equals(other._tasks, _tasks) && const DeepCollectionEquality() .equals(other._futureDeliveries, _futureDeliveries) && @@ -1288,6 +1434,7 @@ class _$DeliverInterventionStateImpl implements _DeliverInterventionState { const DeepCollectionEquality().hash(_pastCycles), hasCycleArrived, isLastDoseOfCycle, + householdMemberWrapper, const DeepCollectionEquality().hash(_tasks), const DeepCollectionEquality().hash(_futureDeliveries), const DeepCollectionEquality().hash(_futureTask), @@ -1310,6 +1457,7 @@ abstract class _DeliverInterventionState implements DeliverInterventionState { final List? pastCycles, final bool hasCycleArrived, final bool isLastDoseOfCycle, + final HouseholdMemberWrapper? householdMemberWrapper, final List? tasks, final List? futureDeliveries, final List? futureTask, @@ -1330,6 +1478,8 @@ abstract class _DeliverInterventionState implements DeliverInterventionState { @override bool get isLastDoseOfCycle; @override + HouseholdMemberWrapper? get householdMemberWrapper; + @override List? get tasks; @override List? get futureDeliveries; diff --git a/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart b/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart index d7a4b84d2..192b58112 100644 --- a/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart +++ b/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart @@ -1,8 +1,8 @@ import 'dart:async'; +import 'package:closed_household/closed_household.dart' hide Status; import 'package:collection/collection.dart'; import 'package:digit_data_model/models/entities/individual.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:registration_delivery/blocs/search_households/search_households.dart'; import '../../models/entities/household.dart'; @@ -10,26 +10,27 @@ import '../../models/entities/household_member.dart'; import '../../models/entities/project_beneficiary.dart'; import '../../models/entities/referral.dart'; import '../../models/entities/side_effect.dart'; +import '../../models/entities/status.dart'; import '../../models/entities/task.dart'; import '../../utils/global_search_parameters.dart'; class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { - HouseHoldGlobalSearchBloc( - {required super.userUid, - required super.projectId, - required super.individual, - required super.householdMember, - required super.household, - required super.projectBeneficiary, - required super.taskDataRepository, - required super.beneficiaryType, - required super.sideEffectDataRepository, - required super.addressRepository, - required super.referralDataRepository, - required super.individualGlobalSearchRepository, - required super.houseHoldGlobalSearchRepository}) { + HouseHoldGlobalSearchBloc({ + required super.userUid, + required super.projectId, + required super.individual, + required super.householdMember, + required super.household, + required super.projectBeneficiary, + required super.taskDataRepository, + required super.beneficiaryType, + required super.sideEffectDataRepository, + required super.addressRepository, + required super.referralDataRepository, + required super.individualGlobalSearchRepository, + required super.houseHoldGlobalSearchRepository, + }) { on(_houseHoldGlobalSearch); - on(_paginate); } Future _houseHoldGlobalSearch( @@ -37,9 +38,11 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { SearchHouseholdsEmitter emit, ) async { final containers = [...state.householdMembers]; + final List closedHouseholds = [...state.closedHouseholds]; List householdList = []; List individualsList = []; + List householdMembersList = []; List projectBeneficiariesList = []; List taskList = []; List sideEffectsList = []; @@ -62,124 +65,130 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { var list = results.map((e) => e).toList(); - late List houseHoldClientReferenceIds = []; - - list.forEach((e) { - houseHoldClientReferenceIds.add(e.clientReferenceId); - }); - - householdList = await household.search(HouseholdSearchModel( - clientReferenceId: - houseHoldClientReferenceIds.map((e) => e.toString()).toList())); - - // Search for individual results using the extracted IDs and search text. - final List householdMembers = - await fetchHouseholdMembersBulk( - null, - houseHoldClientReferenceIds, - ); - - final List individualClientReferenceIds = householdMembers - .map((e) => e.individualClientReferenceId.toString()) - .toList(); - - individualsList = await individual.search( - IndividualSearchModel(clientReferenceId: individualClientReferenceIds), - ); - - // Group household members by household client reference ID - final groupedHouseholdsMembers = householdMembers - .groupListsBy((element) => element.householdClientReferenceId); - - householdList = await household.search(HouseholdSearchModel( - clientReferenceId: householdMembers - .map((e) => e.householdClientReferenceId.toString()) - .toList(), - )); - - projectBeneficiariesList = await projectBeneficiary.search( - ProjectBeneficiarySearchModel( - beneficiaryClientReferenceId: - houseHoldClientReferenceIds.map((e) => e).toList())); - - if (projectBeneficiariesList.isNotEmpty) { - taskList = await fetchTaskbyProjectBeneficiary(projectBeneficiariesList); - sideEffectsList = - await sideEffectDataRepository.search(SideEffectSearchModel( - taskClientReferenceId: - taskList.map((e) => e.clientReferenceId).toList(), - )); - referralsList = await referralDataRepository.search(ReferralSearchModel( - projectBeneficiaryClientReferenceId: - projectBeneficiariesList.map((e) => e.clientReferenceId).toList(), + if (event.globalSearchParams.filter!.contains(Status.closeHousehold.name)) { + list.forEach((e) { + closedHouseholds.add(e); + }); + + emit(state.copyWith( + loading: false, + offset: + event.globalSearchParams.offset! + event.globalSearchParams.limit!, + limit: event.globalSearchParams.limit!, + closedHouseholds: closedHouseholds, )); - } - - for (final entry in groupedHouseholdsMembers.entries) { - HouseholdModel filteredHousehold; - List filteredIndividuals; - List filteredTasks; - final householdId = entry.key; - if (householdId == null) continue; + } else { + late List houseHoldClientReferenceIds = []; - // Filter household based on household ID - filteredHousehold = - householdList.firstWhere((e) => e.clientReferenceId == householdId); + list.forEach((e) { + houseHoldClientReferenceIds.add(e.clientReferenceId); + }); - // Extract individual client reference IDs from household members - final List membersIds = - entry.value.map((e) => e.individualClientReferenceId).toList(); + householdList = await household.search(HouseholdSearchModel( + clientReferenceId: + houseHoldClientReferenceIds.map((e) => e.toString()).toList())); - // Filter individuals based on individual client reference IDs - filteredIndividuals = individualsList - .where((element) => membersIds.contains(element.clientReferenceId)) - .toList(); + // Search for individual results using the extracted IDs and search text. + householdMembersList = await fetchHouseholdMembersBulk( + null, + houseHoldClientReferenceIds, + ); - // Filter tasks based on project beneficiary client reference IDs - filteredTasks = taskList - .where((element) => - projectBeneficiariesList.first.clientReferenceId == - element.projectBeneficiaryClientReferenceId) + final List individualClientReferenceIds = householdMembersList + .map((e) => e.individualClientReferenceId.toString()) .toList(); - // Find the head of the household - final head = filteredIndividuals.firstWhereOrNull( - (element) => - element.clientReferenceId == - entry.value - .firstWhereOrNull( - (element) => element.isHeadOfHousehold, - ) - ?.individualClientReferenceId, + individualsList = await individual.search( + IndividualSearchModel(clientReferenceId: individualClientReferenceIds), ); - // Skip if no head of household or no filtered beneficiaries - if (head == null) continue; - - // Add household member wrapper to containers - containers.add( - HouseholdMemberWrapper( - household: filteredHousehold, - headOfHousehold: head, - members: filteredIndividuals, - projectBeneficiaries: projectBeneficiariesList, - tasks: filteredTasks.isEmpty ? null : filteredTasks, - sideEffects: sideEffectsList.isEmpty ? null : sideEffectsList, - referrals: referralsList.isEmpty ? null : referralsList, - ), - ); + projectBeneficiariesList = await projectBeneficiary.search( + ProjectBeneficiarySearchModel( + beneficiaryClientReferenceId: + houseHoldClientReferenceIds.map((e) => e).toList())); + + if (projectBeneficiariesList.isNotEmpty) { + taskList = + await fetchTaskbyProjectBeneficiary(projectBeneficiariesList); + sideEffectsList = + await sideEffectDataRepository.search(SideEffectSearchModel( + taskClientReferenceId: + taskList.map((e) => e.clientReferenceId).toList(), + )); + referralsList = await referralDataRepository.search(ReferralSearchModel( + projectBeneficiaryClientReferenceId: + projectBeneficiariesList.map((e) => e.clientReferenceId).toList(), + )); + } + + final groupedHouseholdsMembers = householdMembersList + .groupListsBy((element) => element.householdClientReferenceId); + + for (final entry in groupedHouseholdsMembers.entries) { + HouseholdModel filteredHousehold; + List filteredIndividuals; + List filteredTasks = []; + final householdId = entry.key; + if (householdId == null) continue; + + // Filter household based on household ID + filteredHousehold = + householdList.firstWhere((e) => e.clientReferenceId == householdId); + + // Extract individual client reference IDs from household members + final List membersIds = + entry.value.map((e) => e.individualClientReferenceId).toList(); + + // Filter individuals based on individual client reference IDs + filteredIndividuals = individualsList + .where((element) => membersIds.contains(element.clientReferenceId)) + .toList(); + + // Filter tasks based on project beneficiary client reference IDs + for (var beneficiary in projectBeneficiariesList) { + var tasksForBeneficiary = taskList.where((element) => + beneficiary.clientReferenceId == + element.projectBeneficiaryClientReferenceId); + + filteredTasks.addAll(tasksForBeneficiary); + } + + // Find the head of the household + final head = filteredIndividuals.firstWhereOrNull( + (element) => + element.clientReferenceId == + entry.value + .firstWhereOrNull( + (element) => element.isHeadOfHousehold, + ) + ?.individualClientReferenceId, + ); + + // Skip if no head of household or no filtered beneficiaries + if (head == null) continue; + + // Add household member wrapper to containers + containers.add( + HouseholdMemberWrapper( + household: filteredHousehold, + headOfHousehold: head, + members: filteredIndividuals, + projectBeneficiaries: projectBeneficiariesList, + tasks: filteredTasks.isEmpty ? null : filteredTasks, + sideEffects: sideEffectsList.isEmpty ? null : sideEffectsList, + referrals: referralsList.isEmpty ? null : referralsList, + ), + ); + } + + emit(state.copyWith( + householdMembers: containers, + loading: false, + searchQuery: event.globalSearchParams.nameSearch, + offset: + event.globalSearchParams.offset! + event.globalSearchParams.limit!, + limit: event.globalSearchParams.limit!, + )); } - - emit(state.copyWith( - householdMembers: containers, - loading: false, - searchQuery: event.globalSearchParams.nameSearch, - offset: - event.globalSearchParams.offset! + event.globalSearchParams.limit!, - limit: event.globalSearchParams.limit!, - )); } - - FutureOr _paginate(SearchHouseholdsPaginateEvent event, - Emitter emit) {} } diff --git a/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart b/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart index 0199cc069..b9d25cf84 100644 --- a/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart +++ b/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart @@ -2,7 +2,6 @@ import 'dart:async'; import 'package:collection/collection.dart'; import 'package:digit_data_model/models/entities/individual.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:registration_delivery/blocs/search_households/search_households.dart'; import '../../models/entities/household.dart'; @@ -29,7 +28,6 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { required super.individualGlobalSearchRepository, required super.houseHoldGlobalSearchRepository}) { on(_individualGlobalSearch); - on(_paginate); } Future _individualGlobalSearch( @@ -174,7 +172,4 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { limit: event.globalSearchParams.limit!, )); } - - FutureOr _paginate(SearchHouseholdsPaginateEvent event, - Emitter emit) {} } diff --git a/packages/registration_delivery/lib/blocs/search_households/search_bloc_common_wrapper.dart b/packages/registration_delivery/lib/blocs/search_households/search_bloc_common_wrapper.dart index 0e85aaf4b..b612a83f4 100644 --- a/packages/registration_delivery/lib/blocs/search_households/search_bloc_common_wrapper.dart +++ b/packages/registration_delivery/lib/blocs/search_households/search_bloc_common_wrapper.dart @@ -24,12 +24,14 @@ class SearchBlocWrapper implements StateStreamableSource { searchHouseholdsBloc.stream, individualGlobalSearchBloc.stream, tagSearchBloc.stream, - houseHoldGlobalSearchBloc.stream + houseHoldGlobalSearchBloc.stream, ]); void dispatch(SearchHouseholdsEvent event) { if (event is IndividualGlobalSearchEvent) { individualGlobalSearchBloc.add(event); + } else if (event is HouseHoldGlobalSearchEvent) { + houseHoldGlobalSearchBloc.add(event); } else if (event is SearchHouseholdsByTagEvent) { tagSearchBloc.add(event); } else { diff --git a/packages/registration_delivery/lib/blocs/search_households/search_households.dart b/packages/registration_delivery/lib/blocs/search_households/search_households.dart index 2a1a14eb5..a5ec4fc71 100644 --- a/packages/registration_delivery/lib/blocs/search_households/search_households.dart +++ b/packages/registration_delivery/lib/blocs/search_households/search_households.dart @@ -1,13 +1,12 @@ // GENERATED using mason_cli import 'dart:async'; +import 'package:closed_household/models/entities/user_action.dart'; import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/utils/typedefs.dart'; -import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:registration_delivery/blocs/search_households/individual_global_search.dart'; import 'package:stream_transform/stream_transform.dart'; import '../../data/repositories/local/household_global_search.dart'; @@ -18,7 +17,6 @@ import '../../models/entities/household_member.dart'; import '../../models/entities/project_beneficiary.dart'; import '../../models/entities/referral.dart'; import '../../models/entities/side_effect.dart'; -import '../../models/entities/status.dart'; import '../../models/entities/task.dart'; import '../../utils/global_search_parameters.dart'; import '../../utils/typedefs.dart'; @@ -159,6 +157,7 @@ class SearchHouseholdsBloc emit(state.copyWith( searchQuery: null, householdMembers: [], + closedHouseholds: [], tag: null, )); } @@ -240,13 +239,6 @@ class SearchHouseholdsEvent with _$SearchHouseholdsEvent { required HouseholdModel householdModel, }) = SearchHouseholdsByHouseholdsEvent; - const factory SearchHouseholdsEvent.searchByStatus({ - required String projectId, - required final int offset, - required final int limit, - required List status, - }) = SearchHouseholdsByStatusEvent; - const factory SearchHouseholdsEvent.searchByHouseholdHead({ required String searchText, required String projectId, @@ -282,9 +274,6 @@ class SearchHouseholdsEvent with _$SearchHouseholdsEvent { const factory SearchHouseholdsEvent.houseHoldGlobalSearch({ required GlobalSearchParameters globalSearchParams, }) = HouseHoldGlobalSearchEvent; - - const factory SearchHouseholdsEvent.paginate( - {required ScrollMetrics scrollMetrics}) = SearchHouseholdsPaginateEvent; } @freezed @@ -298,6 +287,7 @@ class SearchHouseholdsState with _$SearchHouseholdsState { String? searchQuery, String? tag, @Default([]) List householdMembers, + @Default([]) List closedHouseholds, }) = _SearchHouseholdsState; bool get resultsNotFound { diff --git a/packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart b/packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart index a0c366a0a..ec3cf4b0d 100644 --- a/packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart +++ b/packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart @@ -27,9 +27,6 @@ mixin _$SearchHouseholdsEvent { bool isProximityEnabled, HouseholdModel householdModel) searchByHousehold, - required TResult Function( - String projectId, int offset, int limit, List status) - searchByStatus, required TResult Function( String searchText, String projectId, @@ -50,7 +47,6 @@ mixin _$SearchHouseholdsEvent { individualGlobalSearch, required TResult Function(GlobalSearchParameters globalSearchParams) houseHoldGlobalSearch, - required TResult Function(ScrollMetrics scrollMetrics) paginate, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -64,9 +60,6 @@ mixin _$SearchHouseholdsEvent { bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, - TResult? Function( - String projectId, int offset, int limit, List status)? - searchByStatus, TResult? Function( String searchText, String projectId, @@ -87,7 +80,6 @@ mixin _$SearchHouseholdsEvent { individualGlobalSearch, TResult? Function(GlobalSearchParameters globalSearchParams)? houseHoldGlobalSearch, - TResult? Function(ScrollMetrics scrollMetrics)? paginate, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -101,9 +93,6 @@ mixin _$SearchHouseholdsEvent { bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, - TResult Function( - String projectId, int offset, int limit, List status)? - searchByStatus, TResult Function( String searchText, String projectId, @@ -124,7 +113,6 @@ mixin _$SearchHouseholdsEvent { individualGlobalSearch, TResult Function(GlobalSearchParameters globalSearchParams)? houseHoldGlobalSearch, - TResult Function(ScrollMetrics scrollMetrics)? paginate, required TResult orElse(), }) => throw _privateConstructorUsedError; @@ -134,8 +122,6 @@ mixin _$SearchHouseholdsEvent { initialize, required TResult Function(SearchHouseholdsByHouseholdsEvent value) searchByHousehold, - required TResult Function(SearchHouseholdsByStatusEvent value) - searchByStatus, required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) searchByHouseholdHead, required TResult Function(SearchHouseholdsByProximityEvent value) @@ -146,7 +132,6 @@ mixin _$SearchHouseholdsEvent { individualGlobalSearch, required TResult Function(HouseHoldGlobalSearchEvent value) houseHoldGlobalSearch, - required TResult Function(SearchHouseholdsPaginateEvent value) paginate, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -154,7 +139,6 @@ mixin _$SearchHouseholdsEvent { TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, TResult? Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, - TResult? Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult? Function(SearchHouseholdsByProximityEvent value)? @@ -164,7 +148,6 @@ mixin _$SearchHouseholdsEvent { TResult? Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, - TResult? Function(SearchHouseholdsPaginateEvent value)? paginate, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -172,7 +155,6 @@ mixin _$SearchHouseholdsEvent { TResult Function(SearchHouseholdsInitializedEvent value)? initialize, TResult Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, - TResult Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, @@ -180,7 +162,6 @@ mixin _$SearchHouseholdsEvent { TResult Function(SearchHouseholdsClearEvent value)? clear, TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, - TResult Function(SearchHouseholdsPaginateEvent value)? paginate, required TResult orElse(), }) => throw _privateConstructorUsedError; @@ -257,9 +238,6 @@ class _$SearchHouseholdsInitializedEventImpl bool isProximityEnabled, HouseholdModel householdModel) searchByHousehold, - required TResult Function( - String projectId, int offset, int limit, List status) - searchByStatus, required TResult Function( String searchText, String projectId, @@ -280,7 +258,6 @@ class _$SearchHouseholdsInitializedEventImpl individualGlobalSearch, required TResult Function(GlobalSearchParameters globalSearchParams) houseHoldGlobalSearch, - required TResult Function(ScrollMetrics scrollMetrics) paginate, }) { return initialize(); } @@ -297,9 +274,6 @@ class _$SearchHouseholdsInitializedEventImpl bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, - TResult? Function( - String projectId, int offset, int limit, List status)? - searchByStatus, TResult? Function( String searchText, String projectId, @@ -320,7 +294,6 @@ class _$SearchHouseholdsInitializedEventImpl individualGlobalSearch, TResult? Function(GlobalSearchParameters globalSearchParams)? houseHoldGlobalSearch, - TResult? Function(ScrollMetrics scrollMetrics)? paginate, }) { return initialize?.call(); } @@ -337,9 +310,6 @@ class _$SearchHouseholdsInitializedEventImpl bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, - TResult Function( - String projectId, int offset, int limit, List status)? - searchByStatus, TResult Function( String searchText, String projectId, @@ -360,7 +330,6 @@ class _$SearchHouseholdsInitializedEventImpl individualGlobalSearch, TResult Function(GlobalSearchParameters globalSearchParams)? houseHoldGlobalSearch, - TResult Function(ScrollMetrics scrollMetrics)? paginate, required TResult orElse(), }) { if (initialize != null) { @@ -376,8 +345,6 @@ class _$SearchHouseholdsInitializedEventImpl initialize, required TResult Function(SearchHouseholdsByHouseholdsEvent value) searchByHousehold, - required TResult Function(SearchHouseholdsByStatusEvent value) - searchByStatus, required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) searchByHouseholdHead, required TResult Function(SearchHouseholdsByProximityEvent value) @@ -388,7 +355,6 @@ class _$SearchHouseholdsInitializedEventImpl individualGlobalSearch, required TResult Function(HouseHoldGlobalSearchEvent value) houseHoldGlobalSearch, - required TResult Function(SearchHouseholdsPaginateEvent value) paginate, }) { return initialize(this); } @@ -399,7 +365,6 @@ class _$SearchHouseholdsInitializedEventImpl TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, TResult? Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, - TResult? Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult? Function(SearchHouseholdsByProximityEvent value)? @@ -409,7 +374,6 @@ class _$SearchHouseholdsInitializedEventImpl TResult? Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, - TResult? Function(SearchHouseholdsPaginateEvent value)? paginate, }) { return initialize?.call(this); } @@ -420,7 +384,6 @@ class _$SearchHouseholdsInitializedEventImpl TResult Function(SearchHouseholdsInitializedEvent value)? initialize, TResult Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, - TResult Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, @@ -428,7 +391,6 @@ class _$SearchHouseholdsInitializedEventImpl TResult Function(SearchHouseholdsClearEvent value)? clear, TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, - TResult Function(SearchHouseholdsPaginateEvent value)? paginate, required TResult orElse(), }) { if (initialize != null) { @@ -582,9 +544,6 @@ class _$SearchHouseholdsByHouseholdsEventImpl bool isProximityEnabled, HouseholdModel householdModel) searchByHousehold, - required TResult Function( - String projectId, int offset, int limit, List status) - searchByStatus, required TResult Function( String searchText, String projectId, @@ -605,7 +564,6 @@ class _$SearchHouseholdsByHouseholdsEventImpl individualGlobalSearch, required TResult Function(GlobalSearchParameters globalSearchParams) houseHoldGlobalSearch, - required TResult Function(ScrollMetrics scrollMetrics) paginate, }) { return searchByHousehold(projectId, latitude, longitude, maxRadius, isProximityEnabled, householdModel); @@ -623,9 +581,6 @@ class _$SearchHouseholdsByHouseholdsEventImpl bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, - TResult? Function( - String projectId, int offset, int limit, List status)? - searchByStatus, TResult? Function( String searchText, String projectId, @@ -646,7 +601,6 @@ class _$SearchHouseholdsByHouseholdsEventImpl individualGlobalSearch, TResult? Function(GlobalSearchParameters globalSearchParams)? houseHoldGlobalSearch, - TResult? Function(ScrollMetrics scrollMetrics)? paginate, }) { return searchByHousehold?.call(projectId, latitude, longitude, maxRadius, isProximityEnabled, householdModel); @@ -664,9 +618,6 @@ class _$SearchHouseholdsByHouseholdsEventImpl bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, - TResult Function( - String projectId, int offset, int limit, List status)? - searchByStatus, TResult Function( String searchText, String projectId, @@ -687,7 +638,6 @@ class _$SearchHouseholdsByHouseholdsEventImpl individualGlobalSearch, TResult Function(GlobalSearchParameters globalSearchParams)? houseHoldGlobalSearch, - TResult Function(ScrollMetrics scrollMetrics)? paginate, required TResult orElse(), }) { if (searchByHousehold != null) { @@ -704,8 +654,6 @@ class _$SearchHouseholdsByHouseholdsEventImpl initialize, required TResult Function(SearchHouseholdsByHouseholdsEvent value) searchByHousehold, - required TResult Function(SearchHouseholdsByStatusEvent value) - searchByStatus, required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) searchByHouseholdHead, required TResult Function(SearchHouseholdsByProximityEvent value) @@ -716,7 +664,6 @@ class _$SearchHouseholdsByHouseholdsEventImpl individualGlobalSearch, required TResult Function(HouseHoldGlobalSearchEvent value) houseHoldGlobalSearch, - required TResult Function(SearchHouseholdsPaginateEvent value) paginate, }) { return searchByHousehold(this); } @@ -727,7 +674,6 @@ class _$SearchHouseholdsByHouseholdsEventImpl TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, TResult? Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, - TResult? Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult? Function(SearchHouseholdsByProximityEvent value)? @@ -737,7 +683,6 @@ class _$SearchHouseholdsByHouseholdsEventImpl TResult? Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, - TResult? Function(SearchHouseholdsPaginateEvent value)? paginate, }) { return searchByHousehold?.call(this); } @@ -748,7 +693,6 @@ class _$SearchHouseholdsByHouseholdsEventImpl TResult Function(SearchHouseholdsInitializedEvent value)? initialize, TResult Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, - TResult Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, @@ -756,7 +700,6 @@ class _$SearchHouseholdsByHouseholdsEventImpl TResult Function(SearchHouseholdsClearEvent value)? clear, TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, - TResult Function(SearchHouseholdsPaginateEvent value)? paginate, required TResult orElse(), }) { if (searchByHousehold != null) { @@ -789,320 +732,6 @@ abstract class SearchHouseholdsByHouseholdsEvent get copyWith => throw _privateConstructorUsedError; } -/// @nodoc -abstract class _$$SearchHouseholdsByStatusEventImplCopyWith<$Res> { - factory _$$SearchHouseholdsByStatusEventImplCopyWith( - _$SearchHouseholdsByStatusEventImpl value, - $Res Function(_$SearchHouseholdsByStatusEventImpl) then) = - __$$SearchHouseholdsByStatusEventImplCopyWithImpl<$Res>; - @useResult - $Res call({String projectId, int offset, int limit, List status}); -} - -/// @nodoc -class __$$SearchHouseholdsByStatusEventImplCopyWithImpl<$Res> - extends _$SearchHouseholdsEventCopyWithImpl<$Res, - _$SearchHouseholdsByStatusEventImpl> - implements _$$SearchHouseholdsByStatusEventImplCopyWith<$Res> { - __$$SearchHouseholdsByStatusEventImplCopyWithImpl( - _$SearchHouseholdsByStatusEventImpl _value, - $Res Function(_$SearchHouseholdsByStatusEventImpl) _then) - : super(_value, _then); - - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? projectId = null, - Object? offset = null, - Object? limit = null, - Object? status = null, - }) { - return _then(_$SearchHouseholdsByStatusEventImpl( - projectId: null == projectId - ? _value.projectId - : projectId // ignore: cast_nullable_to_non_nullable - as String, - offset: null == offset - ? _value.offset - : offset // ignore: cast_nullable_to_non_nullable - as int, - limit: null == limit - ? _value.limit - : limit // ignore: cast_nullable_to_non_nullable - as int, - status: null == status - ? _value._status - : status // ignore: cast_nullable_to_non_nullable - as List, - )); - } -} - -/// @nodoc - -class _$SearchHouseholdsByStatusEventImpl - implements SearchHouseholdsByStatusEvent { - const _$SearchHouseholdsByStatusEventImpl( - {required this.projectId, - required this.offset, - required this.limit, - required final List status}) - : _status = status; - - @override - final String projectId; - @override - final int offset; - @override - final int limit; - final List _status; - @override - List get status { - if (_status is EqualUnmodifiableListView) return _status; - // ignore: implicit_dynamic_type - return EqualUnmodifiableListView(_status); - } - - @override - String toString() { - return 'SearchHouseholdsEvent.searchByStatus(projectId: $projectId, offset: $offset, limit: $limit, status: $status)'; - } - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$SearchHouseholdsByStatusEventImpl && - (identical(other.projectId, projectId) || - other.projectId == projectId) && - (identical(other.offset, offset) || other.offset == offset) && - (identical(other.limit, limit) || other.limit == limit) && - const DeepCollectionEquality().equals(other._status, _status)); - } - - @override - int get hashCode => Object.hash(runtimeType, projectId, offset, limit, - const DeepCollectionEquality().hash(_status)); - - @JsonKey(ignore: true) - @override - @pragma('vm:prefer-inline') - _$$SearchHouseholdsByStatusEventImplCopyWith< - _$SearchHouseholdsByStatusEventImpl> - get copyWith => __$$SearchHouseholdsByStatusEventImplCopyWithImpl< - _$SearchHouseholdsByStatusEventImpl>(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function() initialize, - required TResult Function( - String projectId, - double? latitude, - double? longitude, - double? maxRadius, - bool isProximityEnabled, - HouseholdModel householdModel) - searchByHousehold, - required TResult Function( - String projectId, int offset, int limit, List status) - searchByStatus, - required TResult Function( - String searchText, - String projectId, - bool isProximityEnabled, - double? latitude, - double? longitude, - double? maxRadius, - String? tag, - int offset, - int limit) - searchByHouseholdHead, - required TResult Function(double latitude, double longititude, - String projectId, double maxRadius, int offset, int limit) - searchByProximity, - required TResult Function(String tag, String projectId) searchByTag, - required TResult Function() clear, - required TResult Function(GlobalSearchParameters globalSearchParams) - individualGlobalSearch, - required TResult Function(GlobalSearchParameters globalSearchParams) - houseHoldGlobalSearch, - required TResult Function(ScrollMetrics scrollMetrics) paginate, - }) { - return searchByStatus(projectId, offset, limit, status); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult? Function()? initialize, - TResult? Function( - String projectId, - double? latitude, - double? longitude, - double? maxRadius, - bool isProximityEnabled, - HouseholdModel householdModel)? - searchByHousehold, - TResult? Function( - String projectId, int offset, int limit, List status)? - searchByStatus, - TResult? Function( - String searchText, - String projectId, - bool isProximityEnabled, - double? latitude, - double? longitude, - double? maxRadius, - String? tag, - int offset, - int limit)? - searchByHouseholdHead, - TResult? Function(double latitude, double longititude, String projectId, - double maxRadius, int offset, int limit)? - searchByProximity, - TResult? Function(String tag, String projectId)? searchByTag, - TResult? Function()? clear, - TResult? Function(GlobalSearchParameters globalSearchParams)? - individualGlobalSearch, - TResult? Function(GlobalSearchParameters globalSearchParams)? - houseHoldGlobalSearch, - TResult? Function(ScrollMetrics scrollMetrics)? paginate, - }) { - return searchByStatus?.call(projectId, offset, limit, status); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function()? initialize, - TResult Function( - String projectId, - double? latitude, - double? longitude, - double? maxRadius, - bool isProximityEnabled, - HouseholdModel householdModel)? - searchByHousehold, - TResult Function( - String projectId, int offset, int limit, List status)? - searchByStatus, - TResult Function( - String searchText, - String projectId, - bool isProximityEnabled, - double? latitude, - double? longitude, - double? maxRadius, - String? tag, - int offset, - int limit)? - searchByHouseholdHead, - TResult Function(double latitude, double longititude, String projectId, - double maxRadius, int offset, int limit)? - searchByProximity, - TResult Function(String tag, String projectId)? searchByTag, - TResult Function()? clear, - TResult Function(GlobalSearchParameters globalSearchParams)? - individualGlobalSearch, - TResult Function(GlobalSearchParameters globalSearchParams)? - houseHoldGlobalSearch, - TResult Function(ScrollMetrics scrollMetrics)? paginate, - required TResult orElse(), - }) { - if (searchByStatus != null) { - return searchByStatus(projectId, offset, limit, status); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(SearchHouseholdsInitializedEvent value) - initialize, - required TResult Function(SearchHouseholdsByHouseholdsEvent value) - searchByHousehold, - required TResult Function(SearchHouseholdsByStatusEvent value) - searchByStatus, - required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) - searchByHouseholdHead, - required TResult Function(SearchHouseholdsByProximityEvent value) - searchByProximity, - required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, - required TResult Function(SearchHouseholdsClearEvent value) clear, - required TResult Function(IndividualGlobalSearchEvent value) - individualGlobalSearch, - required TResult Function(HouseHoldGlobalSearchEvent value) - houseHoldGlobalSearch, - required TResult Function(SearchHouseholdsPaginateEvent value) paginate, - }) { - return searchByStatus(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, - TResult? Function(SearchHouseholdsByHouseholdsEvent value)? - searchByHousehold, - TResult? Function(SearchHouseholdsByStatusEvent value)? searchByStatus, - TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? - searchByHouseholdHead, - TResult? Function(SearchHouseholdsByProximityEvent value)? - searchByProximity, - TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, - TResult? Function(SearchHouseholdsClearEvent value)? clear, - TResult? Function(IndividualGlobalSearchEvent value)? - individualGlobalSearch, - TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, - TResult? Function(SearchHouseholdsPaginateEvent value)? paginate, - }) { - return searchByStatus?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(SearchHouseholdsInitializedEvent value)? initialize, - TResult Function(SearchHouseholdsByHouseholdsEvent value)? - searchByHousehold, - TResult Function(SearchHouseholdsByStatusEvent value)? searchByStatus, - TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? - searchByHouseholdHead, - TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, - TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, - TResult Function(SearchHouseholdsClearEvent value)? clear, - TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, - TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, - TResult Function(SearchHouseholdsPaginateEvent value)? paginate, - required TResult orElse(), - }) { - if (searchByStatus != null) { - return searchByStatus(this); - } - return orElse(); - } -} - -abstract class SearchHouseholdsByStatusEvent implements SearchHouseholdsEvent { - const factory SearchHouseholdsByStatusEvent( - {required final String projectId, - required final int offset, - required final int limit, - required final List status}) = - _$SearchHouseholdsByStatusEventImpl; - - String get projectId; - int get offset; - int get limit; - List get status; - @JsonKey(ignore: true) - _$$SearchHouseholdsByStatusEventImplCopyWith< - _$SearchHouseholdsByStatusEventImpl> - get copyWith => throw _privateConstructorUsedError; -} - /// @nodoc abstract class _$$SearchHouseholdsSearchByHouseholdHeadEventImplCopyWith<$Res> { factory _$$SearchHouseholdsSearchByHouseholdHeadEventImplCopyWith( @@ -1274,9 +903,6 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl bool isProximityEnabled, HouseholdModel householdModel) searchByHousehold, - required TResult Function( - String projectId, int offset, int limit, List status) - searchByStatus, required TResult Function( String searchText, String projectId, @@ -1297,7 +923,6 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl individualGlobalSearch, required TResult Function(GlobalSearchParameters globalSearchParams) houseHoldGlobalSearch, - required TResult Function(ScrollMetrics scrollMetrics) paginate, }) { return searchByHouseholdHead(searchText, projectId, isProximityEnabled, latitude, longitude, maxRadius, tag, offset, limit); @@ -1315,9 +940,6 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, - TResult? Function( - String projectId, int offset, int limit, List status)? - searchByStatus, TResult? Function( String searchText, String projectId, @@ -1338,7 +960,6 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl individualGlobalSearch, TResult? Function(GlobalSearchParameters globalSearchParams)? houseHoldGlobalSearch, - TResult? Function(ScrollMetrics scrollMetrics)? paginate, }) { return searchByHouseholdHead?.call(searchText, projectId, isProximityEnabled, latitude, longitude, maxRadius, tag, offset, limit); @@ -1356,9 +977,6 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, - TResult Function( - String projectId, int offset, int limit, List status)? - searchByStatus, TResult Function( String searchText, String projectId, @@ -1379,7 +997,6 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl individualGlobalSearch, TResult Function(GlobalSearchParameters globalSearchParams)? houseHoldGlobalSearch, - TResult Function(ScrollMetrics scrollMetrics)? paginate, required TResult orElse(), }) { if (searchByHouseholdHead != null) { @@ -1396,8 +1013,6 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl initialize, required TResult Function(SearchHouseholdsByHouseholdsEvent value) searchByHousehold, - required TResult Function(SearchHouseholdsByStatusEvent value) - searchByStatus, required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) searchByHouseholdHead, required TResult Function(SearchHouseholdsByProximityEvent value) @@ -1408,7 +1023,6 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl individualGlobalSearch, required TResult Function(HouseHoldGlobalSearchEvent value) houseHoldGlobalSearch, - required TResult Function(SearchHouseholdsPaginateEvent value) paginate, }) { return searchByHouseholdHead(this); } @@ -1419,7 +1033,6 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, TResult? Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, - TResult? Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult? Function(SearchHouseholdsByProximityEvent value)? @@ -1429,7 +1042,6 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl TResult? Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, - TResult? Function(SearchHouseholdsPaginateEvent value)? paginate, }) { return searchByHouseholdHead?.call(this); } @@ -1440,7 +1052,6 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl TResult Function(SearchHouseholdsInitializedEvent value)? initialize, TResult Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, - TResult Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, @@ -1448,7 +1059,6 @@ class _$SearchHouseholdsSearchByHouseholdHeadEventImpl TResult Function(SearchHouseholdsClearEvent value)? clear, TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, - TResult Function(SearchHouseholdsPaginateEvent value)? paginate, required TResult orElse(), }) { if (searchByHouseholdHead != null) { @@ -1623,9 +1233,6 @@ class _$SearchHouseholdsByProximityEventImpl bool isProximityEnabled, HouseholdModel householdModel) searchByHousehold, - required TResult Function( - String projectId, int offset, int limit, List status) - searchByStatus, required TResult Function( String searchText, String projectId, @@ -1646,7 +1253,6 @@ class _$SearchHouseholdsByProximityEventImpl individualGlobalSearch, required TResult Function(GlobalSearchParameters globalSearchParams) houseHoldGlobalSearch, - required TResult Function(ScrollMetrics scrollMetrics) paginate, }) { return searchByProximity( latitude, longititude, projectId, maxRadius, offset, limit); @@ -1664,9 +1270,6 @@ class _$SearchHouseholdsByProximityEventImpl bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, - TResult? Function( - String projectId, int offset, int limit, List status)? - searchByStatus, TResult? Function( String searchText, String projectId, @@ -1687,7 +1290,6 @@ class _$SearchHouseholdsByProximityEventImpl individualGlobalSearch, TResult? Function(GlobalSearchParameters globalSearchParams)? houseHoldGlobalSearch, - TResult? Function(ScrollMetrics scrollMetrics)? paginate, }) { return searchByProximity?.call( latitude, longititude, projectId, maxRadius, offset, limit); @@ -1705,9 +1307,6 @@ class _$SearchHouseholdsByProximityEventImpl bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, - TResult Function( - String projectId, int offset, int limit, List status)? - searchByStatus, TResult Function( String searchText, String projectId, @@ -1728,7 +1327,6 @@ class _$SearchHouseholdsByProximityEventImpl individualGlobalSearch, TResult Function(GlobalSearchParameters globalSearchParams)? houseHoldGlobalSearch, - TResult Function(ScrollMetrics scrollMetrics)? paginate, required TResult orElse(), }) { if (searchByProximity != null) { @@ -1745,8 +1343,6 @@ class _$SearchHouseholdsByProximityEventImpl initialize, required TResult Function(SearchHouseholdsByHouseholdsEvent value) searchByHousehold, - required TResult Function(SearchHouseholdsByStatusEvent value) - searchByStatus, required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) searchByHouseholdHead, required TResult Function(SearchHouseholdsByProximityEvent value) @@ -1757,7 +1353,6 @@ class _$SearchHouseholdsByProximityEventImpl individualGlobalSearch, required TResult Function(HouseHoldGlobalSearchEvent value) houseHoldGlobalSearch, - required TResult Function(SearchHouseholdsPaginateEvent value) paginate, }) { return searchByProximity(this); } @@ -1768,7 +1363,6 @@ class _$SearchHouseholdsByProximityEventImpl TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, TResult? Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, - TResult? Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult? Function(SearchHouseholdsByProximityEvent value)? @@ -1778,7 +1372,6 @@ class _$SearchHouseholdsByProximityEventImpl TResult? Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, - TResult? Function(SearchHouseholdsPaginateEvent value)? paginate, }) { return searchByProximity?.call(this); } @@ -1789,7 +1382,6 @@ class _$SearchHouseholdsByProximityEventImpl TResult Function(SearchHouseholdsInitializedEvent value)? initialize, TResult Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, - TResult Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, @@ -1797,7 +1389,6 @@ class _$SearchHouseholdsByProximityEventImpl TResult Function(SearchHouseholdsClearEvent value)? clear, TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, - TResult Function(SearchHouseholdsPaginateEvent value)? paginate, required TResult orElse(), }) { if (searchByProximity != null) { @@ -1916,9 +1507,6 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { bool isProximityEnabled, HouseholdModel householdModel) searchByHousehold, - required TResult Function( - String projectId, int offset, int limit, List status) - searchByStatus, required TResult Function( String searchText, String projectId, @@ -1939,7 +1527,6 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { individualGlobalSearch, required TResult Function(GlobalSearchParameters globalSearchParams) houseHoldGlobalSearch, - required TResult Function(ScrollMetrics scrollMetrics) paginate, }) { return searchByTag(tag, projectId); } @@ -1956,9 +1543,6 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, - TResult? Function( - String projectId, int offset, int limit, List status)? - searchByStatus, TResult? Function( String searchText, String projectId, @@ -1979,7 +1563,6 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { individualGlobalSearch, TResult? Function(GlobalSearchParameters globalSearchParams)? houseHoldGlobalSearch, - TResult? Function(ScrollMetrics scrollMetrics)? paginate, }) { return searchByTag?.call(tag, projectId); } @@ -1996,9 +1579,6 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, - TResult Function( - String projectId, int offset, int limit, List status)? - searchByStatus, TResult Function( String searchText, String projectId, @@ -2019,7 +1599,6 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { individualGlobalSearch, TResult Function(GlobalSearchParameters globalSearchParams)? houseHoldGlobalSearch, - TResult Function(ScrollMetrics scrollMetrics)? paginate, required TResult orElse(), }) { if (searchByTag != null) { @@ -2035,8 +1614,6 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { initialize, required TResult Function(SearchHouseholdsByHouseholdsEvent value) searchByHousehold, - required TResult Function(SearchHouseholdsByStatusEvent value) - searchByStatus, required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) searchByHouseholdHead, required TResult Function(SearchHouseholdsByProximityEvent value) @@ -2047,7 +1624,6 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { individualGlobalSearch, required TResult Function(HouseHoldGlobalSearchEvent value) houseHoldGlobalSearch, - required TResult Function(SearchHouseholdsPaginateEvent value) paginate, }) { return searchByTag(this); } @@ -2058,7 +1634,6 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, TResult? Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, - TResult? Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult? Function(SearchHouseholdsByProximityEvent value)? @@ -2068,7 +1643,6 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { TResult? Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, - TResult? Function(SearchHouseholdsPaginateEvent value)? paginate, }) { return searchByTag?.call(this); } @@ -2079,7 +1653,6 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { TResult Function(SearchHouseholdsInitializedEvent value)? initialize, TResult Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, - TResult Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, @@ -2087,7 +1660,6 @@ class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { TResult Function(SearchHouseholdsClearEvent value)? clear, TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, - TResult Function(SearchHouseholdsPaginateEvent value)? paginate, required TResult orElse(), }) { if (searchByTag != null) { @@ -2160,9 +1732,6 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { bool isProximityEnabled, HouseholdModel householdModel) searchByHousehold, - required TResult Function( - String projectId, int offset, int limit, List status) - searchByStatus, required TResult Function( String searchText, String projectId, @@ -2183,7 +1752,6 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { individualGlobalSearch, required TResult Function(GlobalSearchParameters globalSearchParams) houseHoldGlobalSearch, - required TResult Function(ScrollMetrics scrollMetrics) paginate, }) { return clear(); } @@ -2200,9 +1768,6 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, - TResult? Function( - String projectId, int offset, int limit, List status)? - searchByStatus, TResult? Function( String searchText, String projectId, @@ -2223,7 +1788,6 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { individualGlobalSearch, TResult? Function(GlobalSearchParameters globalSearchParams)? houseHoldGlobalSearch, - TResult? Function(ScrollMetrics scrollMetrics)? paginate, }) { return clear?.call(); } @@ -2240,9 +1804,6 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, - TResult Function( - String projectId, int offset, int limit, List status)? - searchByStatus, TResult Function( String searchText, String projectId, @@ -2263,7 +1824,6 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { individualGlobalSearch, TResult Function(GlobalSearchParameters globalSearchParams)? houseHoldGlobalSearch, - TResult Function(ScrollMetrics scrollMetrics)? paginate, required TResult orElse(), }) { if (clear != null) { @@ -2279,8 +1839,6 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { initialize, required TResult Function(SearchHouseholdsByHouseholdsEvent value) searchByHousehold, - required TResult Function(SearchHouseholdsByStatusEvent value) - searchByStatus, required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) searchByHouseholdHead, required TResult Function(SearchHouseholdsByProximityEvent value) @@ -2291,7 +1849,6 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { individualGlobalSearch, required TResult Function(HouseHoldGlobalSearchEvent value) houseHoldGlobalSearch, - required TResult Function(SearchHouseholdsPaginateEvent value) paginate, }) { return clear(this); } @@ -2302,7 +1859,6 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, TResult? Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, - TResult? Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult? Function(SearchHouseholdsByProximityEvent value)? @@ -2312,7 +1868,6 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { TResult? Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, - TResult? Function(SearchHouseholdsPaginateEvent value)? paginate, }) { return clear?.call(this); } @@ -2323,7 +1878,6 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { TResult Function(SearchHouseholdsInitializedEvent value)? initialize, TResult Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, - TResult Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, @@ -2331,7 +1885,6 @@ class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { TResult Function(SearchHouseholdsClearEvent value)? clear, TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, - TResult Function(SearchHouseholdsPaginateEvent value)? paginate, required TResult orElse(), }) { if (clear != null) { @@ -2423,9 +1976,6 @@ class _$IndividualGlobalSearchEventImpl implements IndividualGlobalSearchEvent { bool isProximityEnabled, HouseholdModel householdModel) searchByHousehold, - required TResult Function( - String projectId, int offset, int limit, List status) - searchByStatus, required TResult Function( String searchText, String projectId, @@ -2446,7 +1996,6 @@ class _$IndividualGlobalSearchEventImpl implements IndividualGlobalSearchEvent { individualGlobalSearch, required TResult Function(GlobalSearchParameters globalSearchParams) houseHoldGlobalSearch, - required TResult Function(ScrollMetrics scrollMetrics) paginate, }) { return individualGlobalSearch(globalSearchParams); } @@ -2463,9 +2012,6 @@ class _$IndividualGlobalSearchEventImpl implements IndividualGlobalSearchEvent { bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, - TResult? Function( - String projectId, int offset, int limit, List status)? - searchByStatus, TResult? Function( String searchText, String projectId, @@ -2486,7 +2032,6 @@ class _$IndividualGlobalSearchEventImpl implements IndividualGlobalSearchEvent { individualGlobalSearch, TResult? Function(GlobalSearchParameters globalSearchParams)? houseHoldGlobalSearch, - TResult? Function(ScrollMetrics scrollMetrics)? paginate, }) { return individualGlobalSearch?.call(globalSearchParams); } @@ -2503,9 +2048,6 @@ class _$IndividualGlobalSearchEventImpl implements IndividualGlobalSearchEvent { bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, - TResult Function( - String projectId, int offset, int limit, List status)? - searchByStatus, TResult Function( String searchText, String projectId, @@ -2526,7 +2068,6 @@ class _$IndividualGlobalSearchEventImpl implements IndividualGlobalSearchEvent { individualGlobalSearch, TResult Function(GlobalSearchParameters globalSearchParams)? houseHoldGlobalSearch, - TResult Function(ScrollMetrics scrollMetrics)? paginate, required TResult orElse(), }) { if (individualGlobalSearch != null) { @@ -2542,8 +2083,6 @@ class _$IndividualGlobalSearchEventImpl implements IndividualGlobalSearchEvent { initialize, required TResult Function(SearchHouseholdsByHouseholdsEvent value) searchByHousehold, - required TResult Function(SearchHouseholdsByStatusEvent value) - searchByStatus, required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) searchByHouseholdHead, required TResult Function(SearchHouseholdsByProximityEvent value) @@ -2554,7 +2093,6 @@ class _$IndividualGlobalSearchEventImpl implements IndividualGlobalSearchEvent { individualGlobalSearch, required TResult Function(HouseHoldGlobalSearchEvent value) houseHoldGlobalSearch, - required TResult Function(SearchHouseholdsPaginateEvent value) paginate, }) { return individualGlobalSearch(this); } @@ -2565,7 +2103,6 @@ class _$IndividualGlobalSearchEventImpl implements IndividualGlobalSearchEvent { TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, TResult? Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, - TResult? Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult? Function(SearchHouseholdsByProximityEvent value)? @@ -2575,7 +2112,6 @@ class _$IndividualGlobalSearchEventImpl implements IndividualGlobalSearchEvent { TResult? Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, - TResult? Function(SearchHouseholdsPaginateEvent value)? paginate, }) { return individualGlobalSearch?.call(this); } @@ -2586,7 +2122,6 @@ class _$IndividualGlobalSearchEventImpl implements IndividualGlobalSearchEvent { TResult Function(SearchHouseholdsInitializedEvent value)? initialize, TResult Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, - TResult Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, @@ -2594,7 +2129,6 @@ class _$IndividualGlobalSearchEventImpl implements IndividualGlobalSearchEvent { TResult Function(SearchHouseholdsClearEvent value)? clear, TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, - TResult Function(SearchHouseholdsPaginateEvent value)? paginate, required TResult orElse(), }) { if (individualGlobalSearch != null) { @@ -2693,9 +2227,6 @@ class _$HouseHoldGlobalSearchEventImpl implements HouseHoldGlobalSearchEvent { bool isProximityEnabled, HouseholdModel householdModel) searchByHousehold, - required TResult Function( - String projectId, int offset, int limit, List status) - searchByStatus, required TResult Function( String searchText, String projectId, @@ -2716,7 +2247,6 @@ class _$HouseHoldGlobalSearchEventImpl implements HouseHoldGlobalSearchEvent { individualGlobalSearch, required TResult Function(GlobalSearchParameters globalSearchParams) houseHoldGlobalSearch, - required TResult Function(ScrollMetrics scrollMetrics) paginate, }) { return houseHoldGlobalSearch(globalSearchParams); } @@ -2733,9 +2263,6 @@ class _$HouseHoldGlobalSearchEventImpl implements HouseHoldGlobalSearchEvent { bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, - TResult? Function( - String projectId, int offset, int limit, List status)? - searchByStatus, TResult? Function( String searchText, String projectId, @@ -2756,7 +2283,6 @@ class _$HouseHoldGlobalSearchEventImpl implements HouseHoldGlobalSearchEvent { individualGlobalSearch, TResult? Function(GlobalSearchParameters globalSearchParams)? houseHoldGlobalSearch, - TResult? Function(ScrollMetrics scrollMetrics)? paginate, }) { return houseHoldGlobalSearch?.call(globalSearchParams); } @@ -2773,9 +2299,6 @@ class _$HouseHoldGlobalSearchEventImpl implements HouseHoldGlobalSearchEvent { bool isProximityEnabled, HouseholdModel householdModel)? searchByHousehold, - TResult Function( - String projectId, int offset, int limit, List status)? - searchByStatus, TResult Function( String searchText, String projectId, @@ -2796,7 +2319,6 @@ class _$HouseHoldGlobalSearchEventImpl implements HouseHoldGlobalSearchEvent { individualGlobalSearch, TResult Function(GlobalSearchParameters globalSearchParams)? houseHoldGlobalSearch, - TResult Function(ScrollMetrics scrollMetrics)? paginate, required TResult orElse(), }) { if (houseHoldGlobalSearch != null) { @@ -2812,8 +2334,6 @@ class _$HouseHoldGlobalSearchEventImpl implements HouseHoldGlobalSearchEvent { initialize, required TResult Function(SearchHouseholdsByHouseholdsEvent value) searchByHousehold, - required TResult Function(SearchHouseholdsByStatusEvent value) - searchByStatus, required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) searchByHouseholdHead, required TResult Function(SearchHouseholdsByProximityEvent value) @@ -2824,7 +2344,6 @@ class _$HouseHoldGlobalSearchEventImpl implements HouseHoldGlobalSearchEvent { individualGlobalSearch, required TResult Function(HouseHoldGlobalSearchEvent value) houseHoldGlobalSearch, - required TResult Function(SearchHouseholdsPaginateEvent value) paginate, }) { return houseHoldGlobalSearch(this); } @@ -2835,7 +2354,6 @@ class _$HouseHoldGlobalSearchEventImpl implements HouseHoldGlobalSearchEvent { TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, TResult? Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, - TResult? Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult? Function(SearchHouseholdsByProximityEvent value)? @@ -2845,7 +2363,6 @@ class _$HouseHoldGlobalSearchEventImpl implements HouseHoldGlobalSearchEvent { TResult? Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, - TResult? Function(SearchHouseholdsPaginateEvent value)? paginate, }) { return houseHoldGlobalSearch?.call(this); } @@ -2856,7 +2373,6 @@ class _$HouseHoldGlobalSearchEventImpl implements HouseHoldGlobalSearchEvent { TResult Function(SearchHouseholdsInitializedEvent value)? initialize, TResult Function(SearchHouseholdsByHouseholdsEvent value)? searchByHousehold, - TResult Function(SearchHouseholdsByStatusEvent value)? searchByStatus, TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, @@ -2864,7 +2380,6 @@ class _$HouseHoldGlobalSearchEventImpl implements HouseHoldGlobalSearchEvent { TResult Function(SearchHouseholdsClearEvent value)? clear, TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, - TResult Function(SearchHouseholdsPaginateEvent value)? paginate, required TResult orElse(), }) { if (houseHoldGlobalSearch != null) { @@ -2885,279 +2400,6 @@ abstract class HouseHoldGlobalSearchEvent implements SearchHouseholdsEvent { get copyWith => throw _privateConstructorUsedError; } -/// @nodoc -abstract class _$$SearchHouseholdsPaginateEventImplCopyWith<$Res> { - factory _$$SearchHouseholdsPaginateEventImplCopyWith( - _$SearchHouseholdsPaginateEventImpl value, - $Res Function(_$SearchHouseholdsPaginateEventImpl) then) = - __$$SearchHouseholdsPaginateEventImplCopyWithImpl<$Res>; - @useResult - $Res call({ScrollMetrics scrollMetrics}); -} - -/// @nodoc -class __$$SearchHouseholdsPaginateEventImplCopyWithImpl<$Res> - extends _$SearchHouseholdsEventCopyWithImpl<$Res, - _$SearchHouseholdsPaginateEventImpl> - implements _$$SearchHouseholdsPaginateEventImplCopyWith<$Res> { - __$$SearchHouseholdsPaginateEventImplCopyWithImpl( - _$SearchHouseholdsPaginateEventImpl _value, - $Res Function(_$SearchHouseholdsPaginateEventImpl) _then) - : super(_value, _then); - - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? scrollMetrics = null, - }) { - return _then(_$SearchHouseholdsPaginateEventImpl( - scrollMetrics: null == scrollMetrics - ? _value.scrollMetrics - : scrollMetrics // ignore: cast_nullable_to_non_nullable - as ScrollMetrics, - )); - } -} - -/// @nodoc - -class _$SearchHouseholdsPaginateEventImpl - implements SearchHouseholdsPaginateEvent { - const _$SearchHouseholdsPaginateEventImpl({required this.scrollMetrics}); - - @override - final ScrollMetrics scrollMetrics; - - @override - String toString() { - return 'SearchHouseholdsEvent.paginate(scrollMetrics: $scrollMetrics)'; - } - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$SearchHouseholdsPaginateEventImpl && - (identical(other.scrollMetrics, scrollMetrics) || - other.scrollMetrics == scrollMetrics)); - } - - @override - int get hashCode => Object.hash(runtimeType, scrollMetrics); - - @JsonKey(ignore: true) - @override - @pragma('vm:prefer-inline') - _$$SearchHouseholdsPaginateEventImplCopyWith< - _$SearchHouseholdsPaginateEventImpl> - get copyWith => __$$SearchHouseholdsPaginateEventImplCopyWithImpl< - _$SearchHouseholdsPaginateEventImpl>(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function() initialize, - required TResult Function( - String projectId, - double? latitude, - double? longitude, - double? maxRadius, - bool isProximityEnabled, - HouseholdModel householdModel) - searchByHousehold, - required TResult Function( - String projectId, int offset, int limit, List status) - searchByStatus, - required TResult Function( - String searchText, - String projectId, - bool isProximityEnabled, - double? latitude, - double? longitude, - double? maxRadius, - String? tag, - int offset, - int limit) - searchByHouseholdHead, - required TResult Function(double latitude, double longititude, - String projectId, double maxRadius, int offset, int limit) - searchByProximity, - required TResult Function(String tag, String projectId) searchByTag, - required TResult Function() clear, - required TResult Function(GlobalSearchParameters globalSearchParams) - individualGlobalSearch, - required TResult Function(GlobalSearchParameters globalSearchParams) - houseHoldGlobalSearch, - required TResult Function(ScrollMetrics scrollMetrics) paginate, - }) { - return paginate(scrollMetrics); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult? Function()? initialize, - TResult? Function( - String projectId, - double? latitude, - double? longitude, - double? maxRadius, - bool isProximityEnabled, - HouseholdModel householdModel)? - searchByHousehold, - TResult? Function( - String projectId, int offset, int limit, List status)? - searchByStatus, - TResult? Function( - String searchText, - String projectId, - bool isProximityEnabled, - double? latitude, - double? longitude, - double? maxRadius, - String? tag, - int offset, - int limit)? - searchByHouseholdHead, - TResult? Function(double latitude, double longititude, String projectId, - double maxRadius, int offset, int limit)? - searchByProximity, - TResult? Function(String tag, String projectId)? searchByTag, - TResult? Function()? clear, - TResult? Function(GlobalSearchParameters globalSearchParams)? - individualGlobalSearch, - TResult? Function(GlobalSearchParameters globalSearchParams)? - houseHoldGlobalSearch, - TResult? Function(ScrollMetrics scrollMetrics)? paginate, - }) { - return paginate?.call(scrollMetrics); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function()? initialize, - TResult Function( - String projectId, - double? latitude, - double? longitude, - double? maxRadius, - bool isProximityEnabled, - HouseholdModel householdModel)? - searchByHousehold, - TResult Function( - String projectId, int offset, int limit, List status)? - searchByStatus, - TResult Function( - String searchText, - String projectId, - bool isProximityEnabled, - double? latitude, - double? longitude, - double? maxRadius, - String? tag, - int offset, - int limit)? - searchByHouseholdHead, - TResult Function(double latitude, double longititude, String projectId, - double maxRadius, int offset, int limit)? - searchByProximity, - TResult Function(String tag, String projectId)? searchByTag, - TResult Function()? clear, - TResult Function(GlobalSearchParameters globalSearchParams)? - individualGlobalSearch, - TResult Function(GlobalSearchParameters globalSearchParams)? - houseHoldGlobalSearch, - TResult Function(ScrollMetrics scrollMetrics)? paginate, - required TResult orElse(), - }) { - if (paginate != null) { - return paginate(scrollMetrics); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(SearchHouseholdsInitializedEvent value) - initialize, - required TResult Function(SearchHouseholdsByHouseholdsEvent value) - searchByHousehold, - required TResult Function(SearchHouseholdsByStatusEvent value) - searchByStatus, - required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) - searchByHouseholdHead, - required TResult Function(SearchHouseholdsByProximityEvent value) - searchByProximity, - required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, - required TResult Function(SearchHouseholdsClearEvent value) clear, - required TResult Function(IndividualGlobalSearchEvent value) - individualGlobalSearch, - required TResult Function(HouseHoldGlobalSearchEvent value) - houseHoldGlobalSearch, - required TResult Function(SearchHouseholdsPaginateEvent value) paginate, - }) { - return paginate(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, - TResult? Function(SearchHouseholdsByHouseholdsEvent value)? - searchByHousehold, - TResult? Function(SearchHouseholdsByStatusEvent value)? searchByStatus, - TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? - searchByHouseholdHead, - TResult? Function(SearchHouseholdsByProximityEvent value)? - searchByProximity, - TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, - TResult? Function(SearchHouseholdsClearEvent value)? clear, - TResult? Function(IndividualGlobalSearchEvent value)? - individualGlobalSearch, - TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, - TResult? Function(SearchHouseholdsPaginateEvent value)? paginate, - }) { - return paginate?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(SearchHouseholdsInitializedEvent value)? initialize, - TResult Function(SearchHouseholdsByHouseholdsEvent value)? - searchByHousehold, - TResult Function(SearchHouseholdsByStatusEvent value)? searchByStatus, - TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? - searchByHouseholdHead, - TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, - TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, - TResult Function(SearchHouseholdsClearEvent value)? clear, - TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, - TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, - TResult Function(SearchHouseholdsPaginateEvent value)? paginate, - required TResult orElse(), - }) { - if (paginate != null) { - return paginate(this); - } - return orElse(); - } -} - -abstract class SearchHouseholdsPaginateEvent implements SearchHouseholdsEvent { - const factory SearchHouseholdsPaginateEvent( - {required final ScrollMetrics scrollMetrics}) = - _$SearchHouseholdsPaginateEventImpl; - - ScrollMetrics get scrollMetrics; - @JsonKey(ignore: true) - _$$SearchHouseholdsPaginateEventImplCopyWith< - _$SearchHouseholdsPaginateEventImpl> - get copyWith => throw _privateConstructorUsedError; -} - /// @nodoc mixin _$SearchHouseholdsState { int get offset => throw _privateConstructorUsedError; @@ -3167,6 +2409,8 @@ mixin _$SearchHouseholdsState { String? get tag => throw _privateConstructorUsedError; List get householdMembers => throw _privateConstructorUsedError; + List get closedHouseholds => + throw _privateConstructorUsedError; @JsonKey(ignore: true) $SearchHouseholdsStateCopyWith get copyWith => @@ -3185,7 +2429,8 @@ abstract class $SearchHouseholdsStateCopyWith<$Res> { bool loading, String? searchQuery, String? tag, - List householdMembers}); + List householdMembers, + List closedHouseholds}); } /// @nodoc @@ -3208,6 +2453,7 @@ class _$SearchHouseholdsStateCopyWithImpl<$Res, Object? searchQuery = freezed, Object? tag = freezed, Object? householdMembers = null, + Object? closedHouseholds = null, }) { return _then(_value.copyWith( offset: null == offset @@ -3234,6 +2480,10 @@ class _$SearchHouseholdsStateCopyWithImpl<$Res, ? _value.householdMembers : householdMembers // ignore: cast_nullable_to_non_nullable as List, + closedHouseholds: null == closedHouseholds + ? _value.closedHouseholds + : closedHouseholds // ignore: cast_nullable_to_non_nullable + as List, ) as $Val); } } @@ -3253,7 +2503,8 @@ abstract class _$$SearchHouseholdsStateImplCopyWith<$Res> bool loading, String? searchQuery, String? tag, - List householdMembers}); + List householdMembers, + List closedHouseholds}); } /// @nodoc @@ -3274,6 +2525,7 @@ class __$$SearchHouseholdsStateImplCopyWithImpl<$Res> Object? searchQuery = freezed, Object? tag = freezed, Object? householdMembers = null, + Object? closedHouseholds = null, }) { return _then(_$SearchHouseholdsStateImpl( offset: null == offset @@ -3300,6 +2552,10 @@ class __$$SearchHouseholdsStateImplCopyWithImpl<$Res> ? _value._householdMembers : householdMembers // ignore: cast_nullable_to_non_nullable as List, + closedHouseholds: null == closedHouseholds + ? _value._closedHouseholds + : closedHouseholds // ignore: cast_nullable_to_non_nullable + as List, )); } } @@ -3313,8 +2569,10 @@ class _$SearchHouseholdsStateImpl extends _SearchHouseholdsState { this.loading = false, this.searchQuery, this.tag, - final List householdMembers = const []}) + final List householdMembers = const [], + final List closedHouseholds = const []}) : _householdMembers = householdMembers, + _closedHouseholds = closedHouseholds, super._(); @override @@ -3340,9 +2598,19 @@ class _$SearchHouseholdsStateImpl extends _SearchHouseholdsState { return EqualUnmodifiableListView(_householdMembers); } + final List _closedHouseholds; + @override + @JsonKey() + List get closedHouseholds { + if (_closedHouseholds is EqualUnmodifiableListView) + return _closedHouseholds; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_closedHouseholds); + } + @override String toString() { - return 'SearchHouseholdsState(offset: $offset, limit: $limit, loading: $loading, searchQuery: $searchQuery, tag: $tag, householdMembers: $householdMembers)'; + return 'SearchHouseholdsState(offset: $offset, limit: $limit, loading: $loading, searchQuery: $searchQuery, tag: $tag, householdMembers: $householdMembers, closedHouseholds: $closedHouseholds)'; } @override @@ -3357,12 +2625,21 @@ class _$SearchHouseholdsStateImpl extends _SearchHouseholdsState { other.searchQuery == searchQuery) && (identical(other.tag, tag) || other.tag == tag) && const DeepCollectionEquality() - .equals(other._householdMembers, _householdMembers)); + .equals(other._householdMembers, _householdMembers) && + const DeepCollectionEquality() + .equals(other._closedHouseholds, _closedHouseholds)); } @override - int get hashCode => Object.hash(runtimeType, offset, limit, loading, - searchQuery, tag, const DeepCollectionEquality().hash(_householdMembers)); + int get hashCode => Object.hash( + runtimeType, + offset, + limit, + loading, + searchQuery, + tag, + const DeepCollectionEquality().hash(_householdMembers), + const DeepCollectionEquality().hash(_closedHouseholds)); @JsonKey(ignore: true) @override @@ -3379,7 +2656,8 @@ abstract class _SearchHouseholdsState extends SearchHouseholdsState { final bool loading, final String? searchQuery, final String? tag, - final List householdMembers}) = + final List householdMembers, + final List closedHouseholds}) = _$SearchHouseholdsStateImpl; const _SearchHouseholdsState._() : super._(); @@ -3396,6 +2674,8 @@ abstract class _SearchHouseholdsState extends SearchHouseholdsState { @override List get householdMembers; @override + List get closedHouseholds; + @override @JsonKey(ignore: true) _$$SearchHouseholdsStateImplCopyWith<_$SearchHouseholdsStateImpl> get copyWith => throw _privateConstructorUsedError; diff --git a/packages/registration_delivery/lib/blocs/search_households/tag_by_search.dart b/packages/registration_delivery/lib/blocs/search_households/tag_by_search.dart index 0cc03a469..33ef8f30f 100644 --- a/packages/registration_delivery/lib/blocs/search_households/tag_by_search.dart +++ b/packages/registration_delivery/lib/blocs/search_households/tag_by_search.dart @@ -40,9 +40,6 @@ class TagSearchBloc extends SearchHouseholdsBloc { ), ); - /* [TODO: Need to handle the Tag search based on Beneficary Type - current implementation is based on the individual based project - ] */ List individuals = []; List households = []; diff --git a/packages/registration_delivery/lib/data/repositories/local/closed_household_search.dart b/packages/registration_delivery/lib/data/repositories/local/closed_household_search.dart new file mode 100644 index 000000000..422af90be --- /dev/null +++ b/packages/registration_delivery/lib/data/repositories/local/closed_household_search.dart @@ -0,0 +1,117 @@ +import 'dart:async'; +import 'dart:math' as math; +import 'package:closed_household/models/entities/user_action.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:drift/drift.dart'; +import 'package:closed_household/closed_household.dart' as closed_status + show Status, StatusMapperExtension; + +import '../../../utils/global_search_parameters.dart'; + +class ClosedHouseholdHoldSearchLocalRepository { + FutureOr> performClosedHouseholdSearch( + GlobalSearchParameters params, LocalSqlDataStore sql) async { + return retryLocalCallOperation>(() async { + var selectQuery = sql.select(sql.userAction).join([]); + + if (params.isProximityEnabled) { + await performProximitySearch(selectQuery, params, sql); + } else { + selectQuery = selectQuery + ..where(sql.userAction.status + .equals(closed_status.Status.closeHousehold.toValue())); + } + + selectQuery.limit(params.limit ?? 50, offset: params.offset ?? 0); + + final results = await selectQuery.get(); + + return results + .map((e) { + final userAction = e.readTableOrNull(sql.userAction); + + return UserActionModel( + id: userAction?.id, + tenantId: userAction?.tenantId, + action: userAction?.action, + clientReferenceId: userAction!.clientReferenceId, + rowVersion: userAction.rowVersion, + auditDetails: (userAction.auditCreatedBy != null && + userAction.auditCreatedTime != null) + ? AuditDetails( + createdBy: userAction.auditCreatedBy!, + createdTime: userAction.auditCreatedTime!, + lastModifiedBy: userAction.auditModifiedBy, + lastModifiedTime: userAction.auditModifiedTime, + ) + : null, + clientAuditDetails: (userAction.clientCreatedBy != null && + userAction.clientCreatedTime != null) + ? ClientAuditDetails( + createdBy: userAction.clientCreatedBy!, + createdTime: userAction.clientCreatedTime!, + lastModifiedBy: userAction.clientModifiedBy, + lastModifiedTime: userAction.clientModifiedTime, + ) + : null, + beneficiaryTag: userAction.beneficiaryTag != null && + userAction.beneficiaryTag!.isNotEmpty + ? userAction.beneficiaryTag + : null, + boundaryCode: userAction.boundaryCode, + isDeleted: userAction.isDeleted, + latitude: userAction.latitude, + longitude: userAction.longitude, + locationAccuracy: userAction.locationAccuracy, + nonRecoverableError: userAction.nonRecoverableError, + projectId: userAction.projectId, + resourceTag: userAction.resourceTag, + status: userAction.status, + additionalFields: userAction.additionalFields != null && + userAction.additionalFields!.isNotEmpty + ? UserActionAdditionalFieldsMapper.fromJson( + userAction.additionalFields.toString()) + : null); + }) + .where((element) => element.isDeleted != true) + .toList(); + }); + } + + performProximitySearch( + selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) async { + return await (selectQuery + ..where(buildAnd([ + if (params.latitude != null && + params.longitude != null && + params.maxRadius != null) + CustomExpression(''' + (6371393 * acos( + cos(${params.latitude! * math.pi / 180.0}) * cos((user_action.latitude * ${math.pi / 180.0})) + * cos((user_action.longitude * ${math.pi / 180.0}) - ${params.longitude! * math.pi / 180.0}) + + sin(${params.latitude! * math.pi / 180.0}) * sin((user_action.latitude * ${math.pi / 180.0})) + )) <= ${params.maxRadius!} + '''), + if (params.latitude != null && + params.longitude != null && + params.maxRadius != null) + sql.userAction.longitude.isNotNull(), + sql.userAction.latitude.isNotNull(), + ]))) + .orderBy([ + if (params.latitude != null && + params.longitude != null && + params.maxRadius != null) + OrderingTerm( + expression: CustomExpression(''' + (6371393 * acos( + cos(${params.latitude! * math.pi / 180.0}) * cos((user_action.latitude * ${math.pi / 180.0})) + * cos((user_action.longitude * ${math.pi / 180.0}) - ${params.longitude! * math.pi / 180.0}) + + sin(${params.latitude! * math.pi / 180.0}) * sin((user_action.latitude * ${math.pi / 180.0})) + )) + '''), + mode: OrderingMode.asc, + ), + ]); + } +} diff --git a/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart b/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart index 41129b637..d2e8c7112 100644 --- a/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart +++ b/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart @@ -1,12 +1,12 @@ import 'dart:async'; import 'dart:math' as math; - import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; import '../../../models/entities/household.dart'; import '../../../models/entities/status.dart'; import '../../../utils/global_search_parameters.dart'; +import 'closed_household_search.dart'; class HouseHoldGlobalSearchRepository extends LocalRepository { HouseHoldGlobalSearchRepository(super.sql, super.opLogManager); @@ -20,111 +20,121 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { DataModelType get type => throw UnimplementedError(); houseHoldGlobalSearch(GlobalSearchParameters params) async { - dynamic selectQuery; + if (params.filter!.contains(Status.closeHousehold.name)) { + return await ClosedHouseholdHoldSearchLocalRepository() + .performClosedHouseholdSearch(params, super.sql); + } else { + dynamic selectQuery; - var proximitySelectQuery = - await proximitySearch(selectQuery, params, super.sql); + var proximitySelectQuery = + await proximitySearch(selectQuery, params, super.sql); - var nameSelectQuery = - await nameSearch(proximitySelectQuery, params, super.sql); + var nameSelectQuery = + await nameSearch(proximitySelectQuery, params, super.sql); - var filterSelectQuery = nameSelectQuery; + var filterSelectQuery = nameSelectQuery; - if (params.filter != null && params.filter!.isNotEmpty) { - for (var element in params.filter!) { - filterSelectQuery = - await filterSearch(filterSelectQuery, element, super.sql); + if (params.filter != null && params.filter!.isNotEmpty) { + for (var filter in params.filter!) { + filterSelectQuery = + await filterSearch(filterSelectQuery, params, filter, super.sql); + } + } else { + filterSelectQuery = nameSelectQuery; } - } else { - filterSelectQuery = nameSelectQuery; - } - await filterSelectQuery.limit(params.limit ?? 50, - offset: params.offset ?? 0); + if (filterSelectQuery == null) { + return []; + } else { + await filterSelectQuery.limit(params.limit ?? 50, + offset: params.offset ?? 0); - final results = await filterSelectQuery.get(); + final results = await filterSelectQuery.get(); - return results - .map((e) { - final household = e.readTable(sql.household); - final address = e.readTableOrNull(sql.address); + return results + .map((e) { + final household = e.readTable(sql.household); + final address = e.readTableOrNull(sql.address); - return HouseholdModel( - id: household.id, - tenantId: household.tenantId, - clientReferenceId: household.clientReferenceId, - memberCount: household.memberCount, - rowVersion: household.rowVersion, - isDeleted: household.isDeleted, - additionalFields: household.additionalFields != null && - household.additionalFields.toString().isNotEmpty - ? HouseholdAdditionalFieldsMapper.fromJson( - household.additionalFields.toString()) - : null, - auditDetails: (household.auditCreatedBy != null && - household.auditCreatedTime != null) - ? AuditDetails( - createdBy: household.auditCreatedBy!, - createdTime: household.auditCreatedTime!, - lastModifiedBy: household.auditModifiedBy, - lastModifiedTime: household.auditModifiedTime, - ) - : null, - clientAuditDetails: (household.clientCreatedBy != null && - household.clientCreatedTime != null) - ? ClientAuditDetails( - createdBy: household.clientCreatedBy!, - createdTime: household.clientCreatedTime!, - lastModifiedBy: household.clientModifiedBy, - lastModifiedTime: household.clientModifiedTime, - ) - : null, - address: address == null - ? null - : AddressModel( - id: address.id, - relatedClientReferenceId: household.clientReferenceId, - tenantId: address.tenantId, - doorNo: address.doorNo, - latitude: address.latitude, - longitude: address.longitude, - landmark: address.landmark, - locationAccuracy: address.locationAccuracy, - addressLine1: address.addressLine1, - addressLine2: address.addressLine2, - city: address.city, - pincode: address.pincode, - locality: address.localityBoundaryCode != null - ? LocalityModel( - code: address.localityBoundaryCode!, - name: address.localityBoundaryName, - ) - : null, - type: address.type, - rowVersion: address.rowVersion, - auditDetails: (household.auditCreatedBy != null && - household.auditCreatedBy != null) - ? AuditDetails( - createdBy: household.auditCreatedBy!, - createdTime: household.auditCreatedTime!, - lastModifiedBy: household.auditModifiedBy, - lastModifiedTime: household.auditModifiedTime, - ) - : null, - clientAuditDetails: (household.clientCreatedBy != null && - household.clientCreatedTime != null) - ? ClientAuditDetails( - createdBy: household.clientCreatedBy!, - createdTime: household.clientCreatedTime!, - lastModifiedBy: household.clientModifiedBy, - lastModifiedTime: household.clientModifiedTime, - ) - : null, - ), - ); - }) - .where((element) => element.isDeleted != true) - .toList(); + return HouseholdModel( + id: household.id, + tenantId: household.tenantId, + clientReferenceId: household.clientReferenceId, + memberCount: household.memberCount, + rowVersion: household.rowVersion, + isDeleted: household.isDeleted, + additionalFields: household.additionalFields != null && + household.additionalFields.toString().isNotEmpty + ? HouseholdAdditionalFieldsMapper.fromJson( + household.additionalFields.toString()) + : null, + auditDetails: (household.auditCreatedBy != null && + household.auditCreatedTime != null) + ? AuditDetails( + createdBy: household.auditCreatedBy!, + createdTime: household.auditCreatedTime!, + lastModifiedBy: household.auditModifiedBy, + lastModifiedTime: household.auditModifiedTime, + ) + : null, + clientAuditDetails: (household.clientCreatedBy != null && + household.clientCreatedTime != null) + ? ClientAuditDetails( + createdBy: household.clientCreatedBy!, + createdTime: household.clientCreatedTime!, + lastModifiedBy: household.clientModifiedBy, + lastModifiedTime: household.clientModifiedTime, + ) + : null, + address: address == null + ? null + : AddressModel( + id: address.id, + relatedClientReferenceId: household.clientReferenceId, + tenantId: address.tenantId, + doorNo: address.doorNo, + latitude: address.latitude, + longitude: address.longitude, + landmark: address.landmark, + locationAccuracy: address.locationAccuracy, + addressLine1: address.addressLine1, + addressLine2: address.addressLine2, + city: address.city, + pincode: address.pincode, + locality: address.localityBoundaryCode != null + ? LocalityModel( + code: address.localityBoundaryCode!, + name: address.localityBoundaryName, + ) + : null, + type: address.type, + rowVersion: address.rowVersion, + auditDetails: (household.auditCreatedBy != null && + household.auditCreatedBy != null) + ? AuditDetails( + createdBy: household.auditCreatedBy!, + createdTime: household.auditCreatedTime!, + lastModifiedBy: household.auditModifiedBy, + lastModifiedTime: household.auditModifiedTime, + ) + : null, + clientAuditDetails: (household.clientCreatedBy != + null && + household.clientCreatedTime != null) + ? ClientAuditDetails( + createdBy: household.clientCreatedBy!, + createdTime: household.clientCreatedTime!, + lastModifiedBy: household.clientModifiedBy, + lastModifiedTime: household.clientModifiedTime, + ) + : null, + ), + ); + }) + .where((element) => element.isDeleted != true) + .toList(); + } + } } proximitySearch( @@ -227,7 +237,8 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { ])); } - filterSearch(selectQuery, String filter, LocalSqlDataStore sql) async { + filterSearch(selectQuery, GlobalSearchParameters params, String filter, + LocalSqlDataStore sql) async { var sql = super.sql; if (selectQuery == null) { selectQuery = super.sql.household.select().join([ diff --git a/packages/registration_delivery/lib/data/repositories/local/project_beneficiary.dart b/packages/registration_delivery/lib/data/repositories/local/project_beneficiary.dart index f263aff49..1a63c8013 100644 --- a/packages/registration_delivery/lib/data/repositories/local/project_beneficiary.dart +++ b/packages/registration_delivery/lib/data/repositories/local/project_beneficiary.dart @@ -3,7 +3,6 @@ import 'dart:async'; import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; import 'package:registration_delivery/models/entities/project_beneficiary.dart'; -import 'package:registration_delivery/utils/utils.dart'; class ProjectBeneficiaryLocalRepository extends LocalRepository< ProjectBeneficiaryModel, ProjectBeneficiarySearchModel> { diff --git a/packages/registration_delivery/lib/data/repositories/local/referral.dart b/packages/registration_delivery/lib/data/repositories/local/referral.dart index 9fe366ebf..5bd72f96d 100644 --- a/packages/registration_delivery/lib/data/repositories/local/referral.dart +++ b/packages/registration_delivery/lib/data/repositories/local/referral.dart @@ -4,7 +4,6 @@ import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; import 'package:registration_delivery/models/entities/referral.dart'; -import 'package:registration_delivery/utils/utils.dart'; class ReferralLocalRepository extends LocalRepository { diff --git a/packages/registration_delivery/lib/models/entities/additional_fields_type.dart b/packages/registration_delivery/lib/models/entities/additional_fields_type.dart index cef1dff0c..5906e3791 100644 --- a/packages/registration_delivery/lib/models/entities/additional_fields_type.dart +++ b/packages/registration_delivery/lib/models/entities/additional_fields_type.dart @@ -47,4 +47,6 @@ enum AdditionalFieldsType { noOfRooms, @MappableValue("houseStructureTypes") houseStructureTypes, + @MappableValue("reasonOfRefusal") + reasonOfRefusal, } diff --git a/packages/registration_delivery/lib/models/entities/additional_fields_type.mapper.dart b/packages/registration_delivery/lib/models/entities/additional_fields_type.mapper.dart index 4e1b69830..62bd69053 100644 --- a/packages/registration_delivery/lib/models/entities/additional_fields_type.mapper.dart +++ b/packages/registration_delivery/lib/models/entities/additional_fields_type.mapper.dart @@ -67,6 +67,8 @@ class AdditionalFieldsTypeMapper extends EnumMapper { return AdditionalFieldsType.noOfRooms; case "houseStructureTypes": return AdditionalFieldsType.houseStructureTypes; + case "reasonOfRefusal": + return AdditionalFieldsType.reasonOfRefusal; default: throw MapperException.unknownEnumValue(value); } @@ -117,6 +119,8 @@ class AdditionalFieldsTypeMapper extends EnumMapper { return "noOfRooms"; case AdditionalFieldsType.houseStructureTypes: return "houseStructureTypes"; + case AdditionalFieldsType.reasonOfRefusal: + return "reasonOfRefusal"; } } } diff --git a/packages/registration_delivery/lib/models/entities/status.dart b/packages/registration_delivery/lib/models/entities/status.dart index 2f6e7332f..ce87a526e 100644 --- a/packages/registration_delivery/lib/models/entities/status.dart +++ b/packages/registration_delivery/lib/models/entities/status.dart @@ -29,7 +29,7 @@ enum Status { registered, @MappableValue("NOT_REGISTERED") notRegistered, - @MappableValue("CLOSED") - closed, + @MappableValue("CLOSED_HOUSEHOLD") + closeHousehold, ; } diff --git a/packages/registration_delivery/lib/models/entities/status.mapper.dart b/packages/registration_delivery/lib/models/entities/status.mapper.dart index 8ca8cb587..55ae4bcf1 100644 --- a/packages/registration_delivery/lib/models/entities/status.mapper.dart +++ b/packages/registration_delivery/lib/models/entities/status.mapper.dart @@ -49,8 +49,8 @@ class StatusMapper extends EnumMapper { return Status.registered; case "NOT_REGISTERED": return Status.notRegistered; - case "CLOSED": - return Status.closed; + case "CLOSED_HOUSEHOLD": + return Status.closeHousehold; default: throw MapperException.unknownEnumValue(value); } @@ -83,8 +83,8 @@ class StatusMapper extends EnumMapper { return "REGISTERED"; case Status.notRegistered: return "NOT_REGISTERED"; - case Status.closed: - return "CLOSED"; + case Status.closeHousehold: + return "CLOSED_HOUSEHOLD"; } } } diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart index 2c0d32f91..b70ed802b 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart @@ -35,6 +35,7 @@ class _BeneficiaryChecklistPageState extends LocalizedState { String isStateChanged = ''; var submitTriggered = false; + var validFields = true; List controller = []; List additionalController = []; List? initialAttributes; @@ -131,18 +132,13 @@ class _BeneficiaryChecklistPageState 'Boolean' && (controller[i].text == '')) )) { setState(() { + validFields = false; validChecklist = false; }); } } if (!validChecklist) { - DigitToast.show(context, - options: DigitToastOptions( - localizations.translate(i18.common.corecommonRequired), - true, - theme, - )); return; } List attributes = []; @@ -247,17 +243,9 @@ class _BeneficiaryChecklistPageState Form( key: checklistFormKey, //assigning key to form child: DigitCard( + padding: EdgeInsets.zero, + child: Column(children: [ - Padding( - padding: const EdgeInsets.only(bottom: 8), - child: Text( - '${localizations.translate( - selectedServiceDefinition!.code.toString(), - )} ${localizations.translate(i18.checklist.checklist)}', - style: theme.textTheme.displayMedium, - textAlign: TextAlign.left, - ), - ), ...initialAttributes!.map(( e, ) { @@ -400,7 +388,7 @@ class _BeneficiaryChecklistPageState Align( alignment: Alignment.topLeft, child: Padding( - padding: const EdgeInsets.all(8), + padding: EdgeInsets.zero, child: Column( children: [ Text( @@ -431,6 +419,8 @@ class _BeneficiaryChecklistPageState i18.common.coreCommonNo, ); }, + errorMessage: ( !validFields && + (controller[index].text == '')) ? localizations.translate(i18.common.corecommonRequired) : null, initialSelection: controller[index].text == 'true' @@ -453,10 +443,17 @@ class _BeneficiaryChecklistPageState submitTriggered, ), ); + setState(() { + controller[index].value = + TextEditingValue( + text: curValue.first + .toString(), + ); + }); + }else{ controller[index].value = - TextEditingValue( - text: curValue.first - .toString(), + const TextEditingValue( + text: '', ); } }, diff --git a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart index 66817995d..f9a2e1f7e 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart @@ -12,11 +12,11 @@ import 'package:registration_delivery/models/entities/deliver_strategy_type.dart import 'package:registration_delivery/registration_delivery.dart'; import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; +import 'package:registration_delivery/utils/utils.dart'; import '../../models/entities/additional_fields_type.dart'; import '../../models/entities/status.dart'; import '../../utils/i18_key_constants.dart' as i18; -import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; import '../../widgets/beneficiary/resource_beneficiary_card.dart'; import '../../widgets/component_wrapper/product_variant_bloc_wrapper.dart'; @@ -70,112 +70,29 @@ class DeliverInterventionPageState FormGroup form, HouseholdMemberWrapper householdMember, ProjectBeneficiaryModel projectBeneficiary) async { - if (shouldSubmit == false) { - await DigitSyncDialog.show(context, - type: DigitSyncDialogType.complete, - label: localizations.translate(i18.common.locationCaptured), - primaryAction: DigitDialogActions( - label: localizations.translate( - i18.beneficiaryDetails.ctaProceed, - ), - action: (ctx) async { - DigitComponentsUtils().hideLocationDialog(context); - final lat = locationState.latitude; - final long = locationState.longitude; - shouldSubmit = await DigitDialog.show( + final lat = locationState.latitude; + final long = locationState.longitude; + context.read().add( + DeliverInterventionSubmitEvent( + task: _getTaskModel( context, - options: DigitDialogOptions( - titleText: localizations - .translate(i18.deliverIntervention.dialogTitle), - contentText: localizations - .translate(i18.deliverIntervention.dialogContent), - primaryAction: DigitDialogActions( - label: localizations.translate(i18.common.coreCommonSubmit), - action: (ctx) { - clickedStatus.value = true; - Navigator.of(context, rootNavigator: true).pop(true); - }, - ), - secondaryAction: DigitDialogActions( - label: localizations.translate(i18.common.coreCommonCancel), - action: (context) => - Navigator.of(context, rootNavigator: true).pop(false), - ), - ), - ); - if (shouldSubmit ?? false) { - if (context.mounted) { - context.read().add( - DeliverInterventionSubmitEvent( - task: _getTaskModel( - context, - form: form, - oldTask: null, - projectBeneficiaryClientReferenceId: - projectBeneficiary.clientReferenceId, - dose: deliverInterventionState.dose, - cycle: deliverInterventionState.cycle, - deliveryStrategy: - DeliverStrategyType.direct.toValue(), - address: - householdMember.members?.first.address?.first, - latitude: lat, - longitude: long, - ), - isEditing: false, - boundaryModel: - RegistrationDeliverySingleton().boundary!, - ), - ); - - if (deliverInterventionState.futureDeliveries != null && - deliverInterventionState.futureDeliveries!.isNotEmpty && - RegistrationDeliverySingleton() - .projectType - ?.cycles - ?.isNotEmpty == - true) { - context.router.popUntilRouteWithName( - BeneficiaryWrapperRoute.name, - ); - context.router.push( - SplashAcknowledgementRoute( - enableBackToSearch: false, - ), - ); - } else { - final reloadState = context.read(); - - Future.delayed( - const Duration( - milliseconds: 1000, - ), - () { - reloadState.add( - HouseholdOverviewReloadEvent( - projectId: - RegistrationDeliverySingleton().projectId!, - projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, - ), - ); - }, - ).then( - (value) { - context.router.popAndPush( - HouseholdAcknowledgementRoute( - enableViewHousehold: true, - ), - ); - }, - ); - } - } - } - }, - )); - } + form: form, + oldTask: null, + projectBeneficiaryClientReferenceId: + projectBeneficiary.clientReferenceId, + dose: deliverInterventionState.dose, + cycle: deliverInterventionState.cycle, + deliveryStrategy: DeliverStrategyType.direct.toValue(), + address: householdMember.members?.first.address?.first, + latitude: lat, + longitude: long, + ), + isEditing: false, + boundaryModel: RegistrationDeliverySingleton().boundary!, + navigateToSummary: true, + householdMemberWrapper: householdMember), + ); + context.router.push(DeliverySummaryRoute()); } void handleLocationState( @@ -668,8 +585,7 @@ class DeliverInterventionPageState } } bool hasDuplicateProductIdOrNoProductId = - groupedVariants.values.any((variants) => variants.length > 1) || - deliveredProducts.any((ele) => ele?.productId == null); + deliveredProducts.any((ele) => ele?.productId == null); return hasDuplicateProductIdOrNoProductId; } @@ -804,8 +720,19 @@ class DeliverInterventionPageState // Add controllers for each product variant to the _controllers list. - _controllers - .addAll(productVariants!.map((e) => productVariants.indexOf(e))); + if ((bloc.tasks?.last.resources ?? []).isNotEmpty) { + _controllers.addAll(bloc.tasks!.last.resources!.mapIndexed((e, i) => i)); + } else { + var groupedVariants = >{}; + variants?.forEach((variant) { + if (!groupedVariants.containsKey(variant.productId)) { + groupedVariants[variant.productId!] = []; + } + groupedVariants[variant.productId]!.add(variant); + }); + + _controllers.addAll(groupedVariants.keys.mapIndexed((e, i) => i)); + } return fb.group({ _doseAdministrationKey: FormControl( @@ -844,7 +771,7 @@ class DeliverInterventionPageState (element) => element.id == productVariants - .elementAt(_controllers.indexOf(e)) + ?.elementAt(_controllers.indexOf(e)) .productVariantId, ) : null, diff --git a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart new file mode 100644 index 000000000..cbb2b8923 --- /dev/null +++ b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart @@ -0,0 +1,356 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:digit_components/digit_components.dart'; +import 'package:digit_components/widgets/atoms/details_card.dart'; +import 'package:digit_data_model/blocs/product_variant/product_variant.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:recase/recase.dart'; +import 'package:registration_delivery/blocs/delivery_intervention/deliver_intervention.dart'; +import 'package:registration_delivery/blocs/household_overview/household_overview.dart'; +import 'package:registration_delivery/models/entities/additional_fields_type.dart'; +import 'package:registration_delivery/models/entities/status.dart'; +import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; +import 'package:registration_delivery/utils/utils.dart'; +import 'package:registration_delivery/widgets/back_navigation_help_header.dart'; +import 'package:registration_delivery/widgets/component_wrapper/product_variant_bloc_wrapper.dart'; +import 'package:registration_delivery/widgets/showcase/showcase_button.dart'; + +import '../../../widgets/localized.dart'; +import '../../utils/i18_key_constants.dart' as i18; + +@RoutePage() +class DeliverySummaryPage extends LocalizedStatefulWidget { + const DeliverySummaryPage({ + super.key, + super.appLocalizations, + }); + + @override + State createState() => DeliverySummaryPageState(); +} + +class DeliverySummaryPageState extends LocalizedState { + final clickedStatus = ValueNotifier(false); + + String getLocalizedMessage(String code) { + return localizations.translate(code); + } + + @override + Widget build(BuildContext context) { + return ProductVariantBlocWrapper( + child: Scaffold( + body: BlocConsumer( + listener: (context, deliverState) { + final router = context.router; + }, + builder: (context, deliverState) { + return ScrollableContent( + enableFixedButton: true, + header: Column(children: [ + const BackNavigationHelpHeaderWidget( + showHelp: false, + showcaseButton: ShowcaseButton(), + ), + Padding( + padding: + const EdgeInsets.only(bottom: kPadding, left: kPadding), + child: Align( + alignment: Alignment.centerLeft, + child: Text( + localizations.translate( + i18.common.coreCommonSummaryDetails, + ), + style: DigitTheme + .instance.mobileTheme.textTheme.displayMedium, + ), + ), + ), + ]), + footer: DigitCard( + margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), + padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), + child: ValueListenableBuilder( + valueListenable: clickedStatus, + builder: (context, bool isClicked, _) { + return DigitElevatedButton( + onPressed: isClicked + ? null + : () async { + final submit = await DigitDialog.show( + context, + options: DigitDialogOptions( + titleText: localizations.translate( + i18.deliverIntervention.dialogTitle), + contentText: localizations.translate( + i18.deliverIntervention.dialogContent), + primaryAction: DigitDialogActions( + label: localizations + .translate(i18.common.coreCommonSubmit), + action: (ctx) { + clickedStatus.value = true; + Navigator.of(context, rootNavigator: true) + .pop(true); + }, + ), + secondaryAction: DigitDialogActions( + label: localizations + .translate(i18.common.coreCommonCancel), + action: (context) => Navigator.of(context, + rootNavigator: true) + .pop(false), + ), + ), + ); + if (submit ?? false) { + if (context.mounted) { + context.read().add( + DeliverInterventionSubmitEvent( + task: deliverState.oldTask!, + isEditing: false, + boundaryModel: + RegistrationDeliverySingleton() + .boundary!, + ), + ); + + if (deliverState.futureDeliveries != null && + deliverState + .futureDeliveries!.isNotEmpty && + RegistrationDeliverySingleton() + .projectType + ?.cycles + ?.isNotEmpty == + true) { + context.router.popUntilRouteWithName( + BeneficiaryWrapperRoute.name, + ); + context.router.push( + SplashAcknowledgementRoute( + enableBackToSearch: false, + ), + ); + } else { + final reloadState = + context.read(); + + Future.delayed( + const Duration( + milliseconds: 1000, + ), + () { + reloadState.add( + HouseholdOverviewReloadEvent( + projectId: + RegistrationDeliverySingleton() + .projectId!, + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType!, + ), + ); + }, + ).then( + (value) { + context.router.popAndPush( + HouseholdAcknowledgementRoute( + enableViewHousehold: true, + ), + ); + }, + ); + } + } + } + }, + child: Center( + child: Text( + localizations.translate(i18.common.coreCommonNext), + ), + ), + ); + }, + ), + ), + slivers: [ + SliverToBoxAdapter( + child: Column( + children: [ + DigitCard( + child: LabelValueList( + heading: localizations.translate(i18 + .householdLocation.householdLocationLabelText), + withDivider: true, + items: [ + LabelValuePair( + label: localizations.translate( + i18.householdLocation.villageLabel), + value: deliverState.householdMemberWrapper + ?.household?.address?.locality?.code + .split('_') + .last + .titleCase ?? + localizations + .translate(i18.common.coreCommonNA), + isInline: true), + LabelValuePair( + label: localizations.translate( + i18.householdLocation.landmarkFormLabel), + value: deliverState.householdMemberWrapper + ?.household?.address?.landmark ?? + localizations + .translate(i18.common.coreCommonNA), + isInline: true), + ]), + ), + DigitCard( + child: LabelValueList( + heading: localizations.translate( + i18.householdDetails.householdDetailsLabel), + withDivider: true, + items: [ + LabelValuePair( + label: localizations.translate( + i18.beneficiaryDetails.totalMembers), + value: deliverState.householdMemberWrapper + ?.household?.memberCount + .toString() ?? + '0', + isInline: true), + LabelValuePair( + label: localizations.translate(i18 + .householdDetails + .noOfPregnantWomenCountLabel), + value: deliverState.householdMemberWrapper + ?.household?.additionalFields?.fields + .where((h) => + h.key == + AdditionalFieldsType.pregnantWomen + .toValue()) + .firstOrNull + ?.value + .toString() ?? + '0', + isInline: true), + LabelValuePair( + label: localizations.translate(i18 + .householdDetails + .noOfChildrenBelow5YearsLabel), + value: deliverState.householdMemberWrapper + ?.household?.additionalFields?.fields + .where((h) => + h.key == + AdditionalFieldsType.children + .toValue()) + .firstOrNull + ?.value + .toString() ?? + '0', + isInline: true), + ]), + ), + DigitCard( + child: LabelValueList( + heading: localizations.translate( + i18.householdDetails.houseDetailsLabel), + withDivider: true, + items: [ + LabelValuePair( + label: localizations.translate( + i18.householdDetails.noOfRoomsLabel), + value: deliverState.householdMemberWrapper + ?.household?.additionalFields?.fields + .where((h) => + h.key == + AdditionalFieldsType.noOfRooms + .toValue()) + .firstOrNull + ?.value + .toString() ?? + '0', + isInline: true), + LabelValuePair( + label: localizations.translate( + i18.householdDetails.typeOfStructure), + value: (deliverState + .householdMemberWrapper + ?.household + ?.additionalFields + ?.fields + .where((h) => + h.key == + AdditionalFieldsType + .houseStructureTypes + .toValue()) + .firstOrNull + ?.value ?? + []) + .toString() + .split('|') + .map((item) => getLocalizedMessage(item)) + .toList() + .join(', '), + isInline: true), + ]), + ), + BlocBuilder( + builder: (context, productState) { + final variants = productState.whenOrNull( + fetched: (productVariants) { + final resourcesDelivered = deliverState + .oldTask?.resources + ?.map((e) => productVariants + .where((p) => p.id == e.productVariantId) + .first) + .toList(); + return resourcesDelivered; + }, + ); + return DigitCard( + child: LabelValueList( + heading: localizations.translate( + '${RegistrationDeliverySingleton().selectedProject?.name}_${i18.deliverIntervention.deliveryDetailsLabel}_${deliverState.oldTask?.status}'), + withDivider: true, + items: [ + LabelValuePair( + label: localizations.translate(deliverState + .oldTask?.status == + Status.administeredFailed.toValue() + ? i18.deliverIntervention + .reasonForRefusalLabel + : i18.deliverIntervention + .typeOfInsecticideUsed), + value: deliverState.oldTask?.status == + Status.administeredFailed.toValue() + ? deliverState.oldTask?.additionalFields?.fields + .where((d) => + d.key == + AdditionalFieldsType + .reasonOfRefusal + .toValue()) + .firstOrNull + ?.value ?? + localizations.translate( + i18.common.coreCommonNA) + : variants + ?.map((e) => + localizations.translate(e.sku ?? + e.variation.toString())) + .toList() + .join(', ') + .toString() ?? + localizations + .translate(i18.common.coreCommonNA), + ), + ]), + ); + }), + ], + ), + ) + ]); + }, + )), + ); + } +} diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index 494ebb634..ffb4945dc 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -80,7 +80,7 @@ class _HouseholdOverviewPageState margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), padding: const EdgeInsets.fromLTRB( kPadding, 0, kPadding, 0), - child: deliverInterventionState.tasks?.first.status == + child: deliverInterventionState.tasks?.last.status == Status.administeredSuccess.toValue() ? DigitOutLineButton( label: localizations.translate( @@ -135,38 +135,189 @@ class _HouseholdOverviewPageState crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.max, children: [ - Align( - alignment: Alignment.centerLeft, - child: DigitIconButton( - onPressed: () { - final projectId = - RegistrationDeliverySingleton() - .projectId!; - - final bloc = - context.read(); - bloc.add( - HouseholdOverviewReloadEvent( - projectId: projectId, - projectBeneficiaryType: beneficiaryType, - ), - ); - DigitActionDialog.show( - context, - widget: ActionCard( - items: [ - ActionCardModel( - icon: Icons.edit, - label: localizations.translate( - i18.householdOverView - .householdOverViewEditLabel, - ), - action: () async { - Navigator.of( - context, - rootNavigator: true, - ).pop(); + if ((state.householdMemberWrapper + .projectBeneficiaries ?? + []) + .isNotEmpty) + Align( + alignment: Alignment.centerLeft, + child: DigitIconButton( + onPressed: () { + final projectId = + RegistrationDeliverySingleton() + .projectId!; + + final bloc = + context.read(); + bloc.add( + HouseholdOverviewReloadEvent( + projectId: projectId, + projectBeneficiaryType: + beneficiaryType, + ), + ); + DigitActionDialog.show( + context, + widget: ActionCard( + items: [ + ActionCardModel( + icon: Icons.edit, + label: localizations.translate( + i18.householdOverView + .householdOverViewEditLabel, + ), + action: () async { + Navigator.of( + context, + rootNavigator: true, + ).pop(); + + HouseholdMemberWrapper wrapper = + state + .householdMemberWrapper; + + final timestamp = wrapper + .headOfHousehold + ?.clientAuditDetails + ?.createdTime; + final date = DateTime + .fromMillisecondsSinceEpoch( + timestamp ?? + DateTime.now() + .millisecondsSinceEpoch, + ); + final address = + wrapper.household?.address; + + if (address == null) return; + + final projectBeneficiary = state + .householdMemberWrapper + .projectBeneficiaries + ?.firstWhereOrNull( + (element) => + element + .beneficiaryClientReferenceId == + wrapper.household + ?.clientReferenceId, + ); + + await context.router.root.push( + BeneficiaryRegistrationWrapperRoute( + initialState: + BeneficiaryRegistrationEditHouseholdState( + addressModel: address, + individualModel: state + .householdMemberWrapper + .members ?? + [], + householdModel: state + .householdMemberWrapper + .household!, + registrationDate: date, + projectBeneficiaryModel: + projectBeneficiary, + ), + children: [ + HouseholdLocationRoute(), + ], + ), + ); + }, + ), + ], + ), + ); + }, + iconText: localizations.translate( + i18.householdOverView + .householdOverViewEditIconText, + ), + icon: Icons.edit, + ), + ), + // BlocBuilder( + // builder: (ctx, deliverInterventionState) => + // Offstage( + // offstage: beneficiaryType == + // BeneficiaryType.individual, + // child: Align( + // alignment: Alignment.centerLeft, + // child: DigitIconButton( + // icon: getStatusAttributes(state, + // deliverInterventionState)['icon'], + // iconText: localizations.translate( + // getStatusAttributes(state, + // deliverInterventionState)[ + // 'textLabel'], + // ), // [TODO: map task status accordingly based on projectBeneficiaries and tasks] + // iconTextColor: getStatusAttributes(state, + // deliverInterventionState)['color'], + // iconColor: getStatusAttributes(state, + // deliverInterventionState)['color'], + // ), + // ), + // ), + // ), + Padding( + padding: const EdgeInsets.only( + left: kPadding, + right: kPadding, + ), + child: Text( + localizations.translate(i18.householdOverView + .householdOverViewLabel), + style: theme.textTheme.displayMedium, + ), + ), + Padding( + padding: const EdgeInsets.only( + left: kPadding, + right: kPadding, + ), + child: BlocBuilder( + builder: (ctx, deliverInterventionState) { + return Column( + children: [ + DigitTableCard( + element: { + localizations.translate(i18 + .householdOverView + .householdOverViewHouseholdHeadNameLabel): + state + .householdMemberWrapper + .headOfHousehold + ?.name + ?.givenName, + localizations.translate( + i18.householdLocation + .administrationAreaFormLabel, + ): RegistrationDeliverySingleton() + .boundary + ?.name, + localizations.translate( + i18.deliverIntervention + .memberCountText, + ): state.householdMemberWrapper + .household?.memberCount, + localizations.translate(i18 + .beneficiaryDetails + .status): localizations.translate( + getStatusAttributes(state, + deliverInterventionState)[ + 'textLabel'], + ) + }, + ), + if ((state.householdMemberWrapper + .projectBeneficiaries ?? + []) + .isEmpty) + DigitElevatedButton( + onPressed: () async { HouseholdMemberWrapper wrapper = state.householdMemberWrapper; @@ -219,123 +370,17 @@ class _HouseholdOverviewPageState ), ); }, - ), - ActionCardModel( - icon: Icons.delete, - label: localizations.translate(i18 - .householdOverView - .householdOverViewDeleteLabel), - action: () => DigitDialog.show( - context, - options: DigitDialogOptions( - titleText: - localizations.translate(i18 - .householdOverView - .householdOverViewActionCardTitle), - primaryAction: - DigitDialogActions( - label: localizations.translate(i18 - .householdOverView - .householdOverViewPrimaryActionLabel), - action: (ctx) { - Navigator.of( - ctx, - rootNavigator: true, - ) - ..pop() - ..pop(); - context.router.push( - ReasonForDeletionRoute( - isHousholdDelete: true, - ), - ); - }, - ), - secondaryAction: - DigitDialogActions( - label: localizations.translate(i18 - .householdOverView - .householdOverViewSecondaryActionLabel), - action: (context) { - Navigator.of( - context, - rootNavigator: true, - ).pop(); - }, + child: Center( + child: Text( + localizations.translate( + i18.householdOverView + .householdOverViewEditIconText, ), ), - ), - ), - ], - ), - ); - }, - iconText: localizations.translate( - i18.householdOverView - .householdOverViewEditIconText, - ), - icon: Icons.edit, - ), - ), - BlocBuilder( - builder: (ctx, deliverInterventionState) => - Offstage( - offstage: beneficiaryType == - BeneficiaryType.individual, - child: Align( - alignment: Alignment.centerLeft, - child: DigitIconButton( - icon: getStatusAttributes(state, - deliverInterventionState)['icon'], - iconText: localizations.translate( - getStatusAttributes(state, - deliverInterventionState)[ - 'textLabel'], - ), // [TODO: map task status accordingly based on projectBeneficiaries and tasks] - iconTextColor: getStatusAttributes(state, - deliverInterventionState)['color'], - iconColor: getStatusAttributes(state, - deliverInterventionState)['color'], - ), - ), - ), - ), - Padding( - padding: const EdgeInsets.only( - left: kPadding, - right: kPadding, - ), - child: Text( - localizations.translate(i18.householdOverView - .householdOverViewLabel), - style: theme.textTheme.displayMedium, - ), - ), - Padding( - padding: const EdgeInsets.only( - left: kPadding, - right: kPadding, - ), - child: DigitTableCard( - element: { - localizations.translate(i18 - .householdOverView - .householdOverViewHouseholdHeadNameLabel): - state.householdMemberWrapper - .headOfHousehold?.name?.givenName, - localizations.translate( - i18.householdLocation - .administrationAreaFormLabel, - ): RegistrationDeliverySingleton() - .boundary - ?.name, - localizations.translate( - i18.deliverIntervention.memberCountText, - ): state.householdMemberWrapper.household - ?.memberCount, - }, - ), + )) + ], + ); + }), ), Column( children: @@ -362,7 +407,14 @@ class _HouseholdOverviewPageState (element) => element .beneficiaryClientReferenceId == - e.clientReferenceId, + (RegistrationDeliverySingleton() + .beneficiaryType == + BeneficiaryType.individual + ? e.clientReferenceId + : state + .householdMemberWrapper + .household + ?.clientReferenceId), ) .toList(); @@ -650,6 +702,10 @@ class _HouseholdOverviewPageState ), Center( child: DigitIconButton( + buttonDisabled: (state.householdMemberWrapper + .projectBeneficiaries ?? + []) + .isEmpty, onPressed: (state.householdMemberWrapper .projectBeneficiaries ?? []) @@ -717,21 +773,18 @@ class _HouseholdOverviewPageState if ((state.householdMemberWrapper.projectBeneficiaries ?? []).isNotEmpty) { textLabel = deliverInterventionState.tasks?.isNotEmpty ?? false - ? (deliverInterventionState.tasks?.first.status == - Status.administeredSuccess.toValue() - ? i18.householdOverView.householdOverViewDeliveredIconLabel - : i18.householdOverView.householdOverViewNotDeliveredIconLabel) - : i18.householdOverView.householdOverViewRegisteredIconLabel; + ? getTaskStatus(deliverInterventionState.tasks ?? []).toValue() + : Status.registered.toValue(); color = deliverInterventionState.tasks?.isNotEmpty ?? false - ? (deliverInterventionState.tasks?.first.status == + ? (deliverInterventionState.tasks?.last.status == Status.administeredSuccess.toValue() ? DigitTheme.instance.colorScheme.onSurfaceVariant : DigitTheme.instance.colorScheme.error) : DigitTheme.instance.colorScheme.onSurfaceVariant; icon = deliverInterventionState.tasks?.isNotEmpty ?? false - ? (deliverInterventionState.tasks?.first.status == + ? (deliverInterventionState.tasks?.last.status == Status.administeredSuccess.toValue() ? Icons.check_circle : Icons.info_rounded) diff --git a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart index edafcfc9e..43cfc20d8 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart @@ -5,6 +5,7 @@ import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; +import 'package:registration_delivery/models/entities/additional_fields_type.dart'; import 'package:registration_delivery/registration_delivery.dart'; import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; @@ -105,6 +106,9 @@ class RefusedDeliveryPageState extends LocalizedState { context.read().add( DeliverInterventionSubmitEvent( + navigateToSummary: true, + householdMemberWrapper: + registrationState.householdMemberWrapper, task: TaskModel( projectBeneficiaryClientReferenceId: projectBeneficiary?.first @@ -137,11 +141,14 @@ class RefusedDeliveryPageState extends LocalizedState { version: 1, fields: [ AdditionalField( - 'taskStatus', + AdditionalFieldsType.reasonOfRefusal + .toValue(), reasonOfRefusal, ), - AdditionalField( - 'comments', + if (refusalComment != null) + AdditionalField( + AdditionalFieldsType.deliveryComment + .toValue(), refusalComment, ), ], @@ -152,10 +159,7 @@ class RefusedDeliveryPageState extends LocalizedState { RegistrationDeliverySingleton().boundary!, ), ); - context.router - .popAndPush(HouseholdAcknowledgementRoute( - enableViewHousehold: true, - )); + context.router.push(DeliverySummaryRoute()); }, child: Center( child: Text( diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/view_closed_household.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/view_closed_household.dart new file mode 100644 index 000000000..1edb474a7 --- /dev/null +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/view_closed_household.dart @@ -0,0 +1,95 @@ +import 'package:closed_household/models/entities/user_action.dart'; +import 'package:digit_components/digit_components.dart'; +import 'package:flutter/material.dart'; + +import '../../../utils/i18_key_constants.dart' as i18; +import '../../../widgets/beneficiary/beneficiary_card.dart'; +import '../../../widgets/localized.dart'; + +class ViewClosedHouseholdCard extends LocalizedStatefulWidget { + final UserActionModel userAction; + final VoidCallback? onOpenPressed; + final double? distance; + + const ViewClosedHouseholdCard({ + super.key, + super.appLocalizations, + required this.userAction, + this.onOpenPressed, + this.distance, + }); + + @override + State createState() => + _ViewClosedHouseholdCardState(); +} + +class _ViewClosedHouseholdCardState + extends LocalizedState { + late UserActionModel userAction; + + @override + void initState() { + userAction = widget.userAction; + super.initState(); + } + + @override + void didUpdateWidget(covariant ViewClosedHouseholdCard oldWidget) { + userAction = widget.userAction; + super.didUpdateWidget(oldWidget); + } + + bool _isCardExpanded = false; + + bool get isCardExpanded => _isCardExpanded; + + set isCardExpanded(bool value) => setState(() => _isCardExpanded = value); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + + return DigitCard( + child: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + width: MediaQuery.of(context).size.width / 1.8, + child: BeneficiaryCard( + status: widget.userAction.status ?? '', + title: widget.userAction.additionalFields != null + ? widget.userAction.additionalFields?.fields + .where((h) => h.key == 'householdHead') + .firstOrNull + ?.value + : 'Unnamed', + description: widget.distance != null + ? ((widget.distance!) * 1000).round() > 999 + ? '(${((widget.distance!).round())} km)' + : '(${((widget.distance!) * 1000).round()} mts)' + : '', + ), + ), + Flexible( + child: DigitOutLineButton( + buttonStyle: OutlinedButton.styleFrom( + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.zero, + ), + ), + label: + localizations.translate(i18.searchBeneficiary.iconLabel), + onPressed: widget.onOpenPressed, + ), + ), + ], + ), + ], + ), + ); + } +} diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart index 504acb5a6..8fd16607c 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart @@ -30,21 +30,12 @@ class HouseDetailsPage extends LocalizedStatefulWidget { class HouseDetailsPageState extends LocalizedState { static const _noOfRoomsKey = 'noOfRooms'; + static const _householdStructureKey = 'householdStructure'; List? selectedHouseStructureTypes; @override void initState() { final registrationState = context.read().state; - setState(() { - selectedHouseStructureTypes = registrationState - .householdModel?.additionalFields?.fields - .where((e) => - e.key == AdditionalFieldsType.houseStructureTypes.toValue()) - .first - .value - .toString() - .split("|"); - }); super.initState(); } @@ -78,16 +69,17 @@ class HouseDetailsPageState extends LocalizedState { child: DigitElevatedButton( onPressed: () { form.markAllAsTouched(); + if (form.control(_householdStructureKey).value == null) { + setState(() { + form + .control(_householdStructureKey) + .setErrors({'': true}); + }); + } + if (!form.valid) return; - if ((selectedHouseStructureTypes ?? []).isEmpty) { - DigitToast.show(context, - options: DigitToastOptions( - localizations.translate(i18.householdDetails - .selectStructureTypeError), - true, - theme, - )); - } else { + selectedHouseStructureTypes = form.control(_householdStructureKey).value; + final noOfRooms = form.control(_noOfRoomsKey).value as int; registrationState.maybeWhen( @@ -102,6 +94,7 @@ class HouseDetailsPageState extends LocalizedState { registrationDate, searchQuery, loading, + selectedClosedHouseholdID, isHeadOfHousehold, ) { var houseModel = HouseholdModel( @@ -115,6 +108,7 @@ class HouseDetailsPageState extends LocalizedState { createdTime: context.millisecondsSinceEpoch(), ), + memberCount: householdModel?.memberCount, clientAuditDetails: ClientAuditDetails( createdBy: RegistrationDeliverySingleton() .loggedInUserUuid!, @@ -207,7 +201,6 @@ class HouseDetailsPageState extends LocalizedState { router.push(HouseHoldDetailsRoute()); }, ); - } }, child: Center( child: Text( @@ -239,8 +232,9 @@ class HouseDetailsPageState extends LocalizedState { houseShowcaseData.typeOfStructure.buildWith( child: SelectionBox( isRequired: true, - title: i18.householdDetails.typeOfStructure, - width: 120, + title: localizations.translate( + i18.householdDetails.typeOfStructure), + equalWidthOptions: true, allowMultipleSelection: false, options: RegistrationDeliverySingleton() .houseStructureTypes ?? @@ -259,14 +253,37 @@ class HouseDetailsPageState extends LocalizedState { .toString() .split("|"), onSelectionChanged: (values) { - setState(() { - selectedHouseStructureTypes = values; - }); + form + .control(_householdStructureKey) + .markAsTouched(); + if(values.isEmpty){ + form + .control(_householdStructureKey) + .value = null; + setState(() { + form + .control(_householdStructureKey) + .setErrors({'': true}); + }); + }else{ + setState(() { + form.control(_householdStructureKey).value = values; + }); + } }, valueMapper: (value) { return localizations .translate(value.toString()); }, + errorMessage: form + .control(_householdStructureKey) + .hasErrors && + form + .control(_householdStructureKey) + .touched + ? localizations.translate(i18.householdDetails + .selectStructureTypeError) + : null, ), ), houseShowcaseData.noOfRooms.buildWith( @@ -309,6 +326,16 @@ class HouseDetailsPageState extends LocalizedState { .toString() ?? '1') : 1), + _householdStructureKey: FormControl>( + value: state + .householdModel?.additionalFields?.fields + .where((e) => + e.key == AdditionalFieldsType.houseStructureTypes.toValue()) + .first + .value + .toString() + .split("|"), + ) }); } } diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart index d3bac9a10..c50cafe2c 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart @@ -47,376 +47,433 @@ class HouseHoldDetailsPageState extends LocalizedState { return Scaffold( body: ReactiveFormBuilder( form: () => buildForm(bloc.state), - builder: (context, form, child) => BlocBuilder< - BeneficiaryRegistrationBloc, BeneficiaryRegistrationState>( - builder: (context, registrationState) { - return ScrollableContent( - header: const Column(children: [ - BackNavigationHelpHeaderWidget( - showHelp: false, - showcaseButton: ShowcaseButton(), - ), - ]), - enableFixedButton: true, - footer: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: DigitElevatedButton( - onPressed: () { - form.markAllAsTouched(); - if (!form.valid) return; - - final memberCount = - form.control(_memberCountKey).value as int; + builder: (context, form, child) { + int pregnantWomen = form.control(_pregnantWomenCountKey).value; + int children = form.control(_childrenCountKey).value; + int memberCount = form.control(_memberCountKey).value; + return BlocBuilder( + builder: (context, registrationState) { + return ScrollableContent( + header: const Column(children: [ + BackNavigationHelpHeaderWidget( + showHelp: false, + showcaseButton: ShowcaseButton(), + ), + ]), + enableFixedButton: true, + footer: DigitCard( + margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), + padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), + child: DigitElevatedButton( + onPressed: () { + form.markAllAsTouched(); + if (!form.valid) return; - final dateOfRegistration = - form.control(_dateOfRegistrationKey).value as DateTime; - //[TODO: Use pregnant women form value based on project config - final pregnantWomen = - form.control(_pregnantWomenCountKey).value as int; - final children = - form.control(_childrenCountKey).value as int; + final memberCount = + form.control(_memberCountKey).value as int; - if (memberCount < (pregnantWomen + children)) { - DigitToast.show(context, - options: DigitToastOptions( - localizations.translate( - i18.householdDetails.memberCountError), - true, - theme)); - } else { - registrationState.maybeWhen( - orElse: () { - return; - }, - create: ( - addressModel, - householdModel, - individualModel, - projectBeneficiaryModel, - registrationDate, - searchQuery, - loading, - isHeadOfHousehold, - ) { - var household = householdModel; - household ??= HouseholdModel( - tenantId: RegistrationDeliverySingleton().tenantId, - clientReferenceId: - householdModel?.clientReferenceId ?? - IdGen.i.identifier, - rowVersion: 1, - clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context.millisecondsSinceEpoch(), - lastModifiedBy: RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: - context.millisecondsSinceEpoch(), - ), - auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context.millisecondsSinceEpoch(), - lastModifiedBy: RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: - context.millisecondsSinceEpoch(), - ), - ); + final dateOfRegistration = form + .control(_dateOfRegistrationKey) + .value as DateTime; + //[TODO: Use pregnant women form value based on project config + final pregnantWomen = + form.control(_pregnantWomenCountKey).value as int; + final children = + form.control(_childrenCountKey).value as int; - household = household.copyWith( - rowVersion: 1, + if (memberCount < (pregnantWomen + children)) { + DigitToast.show(context, + options: DigitToastOptions( + localizations.translate( + i18.householdDetails.memberCountError), + true, + theme)); + } else { + registrationState.maybeWhen( + orElse: () { + return; + }, + create: ( + addressModel, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + searchQuery, + selectedClosedHouseholdID, + loading, + isHeadOfHousehold, + ) { + var household = householdModel; + household ??= HouseholdModel( tenantId: RegistrationDeliverySingleton().tenantId, clientReferenceId: householdModel?.clientReferenceId ?? IdGen.i.identifier, - memberCount: memberCount, + rowVersion: 1, clientAuditDetails: ClientAuditDetails( createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid - .toString(), + .loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), lastModifiedBy: RegistrationDeliverySingleton() - .loggedInUserUuid - .toString(), + .loggedInUserUuid, lastModifiedTime: context.millisecondsSinceEpoch(), ), auditDetails: AuditDetails( createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid - .toString(), + .loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), lastModifiedBy: RegistrationDeliverySingleton() - .loggedInUserUuid - .toString(), + .loggedInUserUuid, lastModifiedTime: context.millisecondsSinceEpoch(), ), - address: addressModel, - additionalFields: HouseholdAdditionalFields( - version: 1, - fields: [ - //[TODO: Use pregnant women form value based on project config - ...?householdModel?.additionalFields?.fields - .where((e) => - e.key != - AdditionalFieldsType - .pregnantWomen - .toValue() && - e.key != - AdditionalFieldsType.children - .toValue()), - AdditionalField( - AdditionalFieldsType.pregnantWomen - .toValue(), - pregnantWomen, - ), - AdditionalField( - AdditionalFieldsType.children.toValue(), - children, - ) - ])); + ); - bloc.add( - BeneficiaryRegistrationSaveHouseholdDetailsEvent( - household: household, - registrationDate: dateOfRegistration, - ), - ); - context.router.push( - IndividualDetailsRoute(isHeadOfHousehold: true), - ); - }, - editHousehold: ( - addressModel, - householdModel, - individuals, - registrationDate, - projectBeneficiaryModel, - loading, - ) { - var household = householdModel.copyWith( - memberCount: memberCount, - address: addressModel, - clientAuditDetails: (householdModel - .clientAuditDetails?.createdBy != - null && - householdModel.clientAuditDetails - ?.createdTime != - null) - ? ClientAuditDetails( - createdBy: householdModel - .clientAuditDetails!.createdBy, - createdTime: householdModel - .clientAuditDetails!.createdTime, - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: - DateTime.now().millisecondsSinceEpoch, - ) - : null, - rowVersion: householdModel.rowVersion, - additionalFields: HouseholdAdditionalFields( - version: householdModel - .additionalFields?.version ?? - 1, - fields: [ - //[TODO: Use pregnant women form value based on project config - ...?householdModel.additionalFields?.fields - .where((e) => - e.key != - AdditionalFieldsType - .pregnantWomen - .toValue() && - e.key != - AdditionalFieldsType.children - .toValue()), - AdditionalField( - AdditionalFieldsType.pregnantWomen - .toValue(), - pregnantWomen, - ), - AdditionalField( - AdditionalFieldsType.children.toValue(), - children, - ) - ])); - - bloc.add( - BeneficiaryRegistrationUpdateHouseholdDetailsEvent( - household: household.copyWith( - clientAuditDetails: (addressModel - .clientAuditDetails - ?.createdBy != - null && - addressModel.clientAuditDetails - ?.createdTime != - null) - ? ClientAuditDetails( - createdBy: addressModel - .clientAuditDetails!.createdBy, - createdTime: addressModel - .clientAuditDetails!.createdTime, - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: - context.millisecondsSinceEpoch(), + household = household.copyWith( + rowVersion: 1, + tenantId: + RegistrationDeliverySingleton().tenantId, + clientReferenceId: + householdModel?.clientReferenceId ?? + IdGen.i.identifier, + memberCount: memberCount, + clientAuditDetails: ClientAuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid + .toString(), + createdTime: context.millisecondsSinceEpoch(), + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid + .toString(), + lastModifiedTime: + context.millisecondsSinceEpoch(), + ), + auditDetails: AuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid + .toString(), + createdTime: context.millisecondsSinceEpoch(), + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid + .toString(), + lastModifiedTime: + context.millisecondsSinceEpoch(), + ), + address: addressModel, + additionalFields: HouseholdAdditionalFields( + version: 1, + fields: [ + //[TODO: Use pregnant women form value based on project config + ...?householdModel + ?.additionalFields?.fields + .where((e) => + e.key != + AdditionalFieldsType + .pregnantWomen + .toValue() && + e.key != + AdditionalFieldsType.children + .toValue()), + AdditionalField( + AdditionalFieldsType.pregnantWomen + .toValue(), + pregnantWomen, + ), + AdditionalField( + AdditionalFieldsType.children.toValue(), + children, ) - : null, + ])); + + bloc.add( + BeneficiaryRegistrationSaveHouseholdDetailsEvent( + household: household, + registrationDate: dateOfRegistration, ), - addressModel: addressModel.copyWith( - clientAuditDetails: (addressModel + ); + context.router.push( + IndividualDetailsRoute(isHeadOfHousehold: true), + ); + }, + editHousehold: ( + addressModel, + householdModel, + individuals, + registrationDate, + projectBeneficiaryModel, + loading, + ) { + var household = householdModel.copyWith( + memberCount: memberCount, + address: addressModel, + clientAuditDetails: (householdModel .clientAuditDetails ?.createdBy != null && - addressModel.clientAuditDetails + householdModel.clientAuditDetails ?.createdTime != null) ? ClientAuditDetails( - createdBy: addressModel + createdBy: householdModel .clientAuditDetails!.createdBy, - createdTime: addressModel + createdTime: householdModel .clientAuditDetails!.createdTime, lastModifiedBy: RegistrationDeliverySingleton() .loggedInUserUuid, - lastModifiedTime: - context.millisecondsSinceEpoch(), + lastModifiedTime: DateTime.now() + .millisecondsSinceEpoch, ) : null, + rowVersion: householdModel.rowVersion, + additionalFields: HouseholdAdditionalFields( + version: householdModel + .additionalFields?.version ?? + 1, + fields: [ + //[TODO: Use pregnant women form value based on project config + ...?householdModel + .additionalFields?.fields + .where((e) => + e.key != + AdditionalFieldsType + .pregnantWomen + .toValue() && + e.key != + AdditionalFieldsType.children + .toValue()), + AdditionalField( + AdditionalFieldsType.pregnantWomen + .toValue(), + pregnantWomen, + ), + AdditionalField( + AdditionalFieldsType.children.toValue(), + children, + ) + ])); + + bloc.add( + BeneficiaryRegistrationUpdateHouseholdDetailsEvent( + household: household.copyWith( + clientAuditDetails: (addressModel + .clientAuditDetails + ?.createdBy != + null && + addressModel.clientAuditDetails + ?.createdTime != + null) + ? ClientAuditDetails( + createdBy: addressModel + .clientAuditDetails!.createdBy, + createdTime: addressModel + .clientAuditDetails!.createdTime, + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: + context.millisecondsSinceEpoch(), + ) + : null, + ), + addressModel: addressModel.copyWith( + clientAuditDetails: (addressModel + .clientAuditDetails + ?.createdBy != + null && + addressModel.clientAuditDetails + ?.createdTime != + null) + ? ClientAuditDetails( + createdBy: addressModel + .clientAuditDetails!.createdBy, + createdTime: addressModel + .clientAuditDetails!.createdTime, + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: + context.millisecondsSinceEpoch(), + ) + : null, + ), ), - ), - ); - final overviewBloc = - context.read(); + ); + final overviewBloc = + context.read(); - overviewBloc.add( - HouseholdOverviewReloadEvent( - projectId: RegistrationDeliverySingleton() - .projectId - .toString(), - projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType ?? - BeneficiaryType.household, - ), - ); - HouseholdMemberWrapper memberWrapper = - overviewBloc.state.householdMemberWrapper; - final route = router.parent() as StackRouter; - route.popUntilRouteWithName( - SearchBeneficiaryRoute.name); - route.push( - BeneficiaryWrapperRoute(wrapper: memberWrapper)); - }, - ); - } - }, - child: Center( - child: Text( - registrationState.mapOrNull( - editHousehold: (value) => localizations - .translate(i18.common.coreCommonSave), - ) ?? - localizations - .translate(i18.householdDetails.actionLabel), + overviewBloc.add( + HouseholdOverviewReloadEvent( + projectId: RegistrationDeliverySingleton() + .projectId + .toString(), + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType ?? + BeneficiaryType.household, + ), + ); + HouseholdMemberWrapper memberWrapper = + overviewBloc.state.householdMemberWrapper; + final route = router.parent() as StackRouter; + route.popUntilRouteWithName( + SearchBeneficiaryRoute.name); + route.push(BeneficiaryWrapperRoute( + wrapper: memberWrapper)); + }, + ); + } + }, + child: Center( + child: Text( + registrationState.mapOrNull( + editHousehold: (value) => localizations + .translate(i18.common.coreCommonSave), + ) ?? + localizations + .translate(i18.householdDetails.actionLabel), + ), ), ), ), - ), - slivers: [ - SliverToBoxAdapter( - child: DigitCard( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - TextBlock( - padding: const EdgeInsets.only(top: kPadding), - heading: localizations.translate( - i18.householdDetails.householdDetailsLabel, - ), - headingStyle: theme.textTheme.displayMedium, - body: localizations.translate( - i18.householdDetails.householdDetailsDescription, + slivers: [ + SliverToBoxAdapter( + child: DigitCard( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + TextBlock( + padding: const EdgeInsets.only(top: kPadding), + heading: localizations.translate( + i18.householdDetails.householdDetailsLabel, + ), + headingStyle: theme.textTheme.displayMedium, + body: localizations.translate( + i18.householdDetails.householdDetailsDescription, + ), ), - ), - Column(children: [ - householdDetailsShowcaseData.dateOfRegistration - .buildWith( - child: DigitDateFormPicker( - isEnabled: false, - formControlName: _dateOfRegistrationKey, - label: localizations.translate( - i18.householdDetails.dateOfRegistrationLabel, - ), - isRequired: false, - confirmText: localizations.translate( - i18.common.coreCommonOk, - ), - cancelText: localizations.translate( - i18.common.coreCommonCancel, + Column(children: [ + householdDetailsShowcaseData.dateOfRegistration + .buildWith( + child: DigitDateFormPicker( + isEnabled: false, + formControlName: _dateOfRegistrationKey, + label: localizations.translate( + i18.householdDetails.dateOfRegistrationLabel, + ), + isRequired: false, + confirmText: localizations.translate( + i18.common.coreCommonOk, + ), + cancelText: localizations.translate( + i18.common.coreCommonCancel, + ), ), ), - ), - householdDetailsShowcaseData - .numberOfMembersLivingInHousehold - .buildWith( - child: DigitIntegerFormPicker( - minimum: 1, - form: form, - formControlName: _memberCountKey, - label: localizations.translate( - i18.householdDetails.noOfMembersCountLabel, + //[TODO: Use pregnant women form value based on project config + householdDetailsShowcaseData + .numberOfPregnantWomenInHousehold + .buildWith( + child: DigitIntegerFormPicker( + minimum: 0, + maximum: 20, + onChange: () { + int pregnantWomen = form + .control(_pregnantWomenCountKey) + .value; + int children = + form.control(_childrenCountKey).value; + int memberCount = + form.control(_memberCountKey).value; + form.control(_memberCountKey).value = + memberCount < (children + pregnantWomen) + ? children + pregnantWomen + : memberCount; + }, + form: form, + formControlName: _pregnantWomenCountKey, + label: localizations.translate( + i18.householdDetails + .noOfPregnantWomenCountLabel, + ), + incrementer: true, ), - incrementer: true, ), - ), - //[TODO: Use pregnant women form value based on project config - householdDetailsShowcaseData - .numberOfPregnantWomenInHousehold - .buildWith( - child: DigitIntegerFormPicker( - minimum: 0, - form: form, - formControlName: _pregnantWomenCountKey, - label: localizations.translate( - i18.householdDetails - .noOfPregnantWomenCountLabel, + householdDetailsShowcaseData + .numberOfChildrenBelow5InHousehold + .buildWith( + child: DigitIntegerFormPicker( + minimum: 0, + maximum: 20, + onChange: () { + int pregnantWomen = form + .control(_pregnantWomenCountKey) + .value; + int children = + form.control(_childrenCountKey).value; + int memberCount = + form.control(_memberCountKey).value; + form.control(_memberCountKey).value = + memberCount <= (children + pregnantWomen) + ? children + pregnantWomen + : memberCount; + }, + form: form, + formControlName: _childrenCountKey, + label: localizations.translate( + i18.householdDetails + .noOfChildrenBelow5YearsLabel, + ), + incrementer: true, ), - incrementer: true, ), - ), - householdDetailsShowcaseData - .numberOfChildrenBelow5InHousehold - .buildWith( - child: DigitIntegerFormPicker( - minimum: 0, - form: form, - formControlName: _childrenCountKey, - label: localizations.translate( - i18.householdDetails - .noOfChildrenBelow5YearsLabel, + householdDetailsShowcaseData + .numberOfMembersLivingInHousehold + .buildWith( + child: DigitIntegerFormPicker( + minimum: children + pregnantWomen != 0 + ? children + pregnantWomen + : 1, + maximum: 20, + onChange: () { + int pregnantWomen = form + .control(_pregnantWomenCountKey) + .value; + int children = + form.control(_childrenCountKey).value; + int memberCount = + form.control(_memberCountKey).value; + if (memberCount <= pregnantWomen + children) { + form.control(_memberCountKey).value = + (children + pregnantWomen); + } + }, + form: form, + formControlName: _memberCountKey, + label: localizations.translate( + i18.householdDetails.noOfMembersCountLabel, + ), + incrementer: true, ), - incrementer: true, ), - ), - ]), - const SizedBox(height: 16), - ], + ]), + const SizedBox(height: 16), + ], + ), ), ), - ), - ], - ); - }, - ), + ], + ); + }, + ); + }, ), ); } @@ -438,37 +495,44 @@ class HouseHoldDetailsPageState extends LocalizedState { return fb.group({ _dateOfRegistrationKey: FormControl(value: registrationDate, validators: []), - _memberCountKey: FormControl(value: household?.memberCount ?? 1), + _memberCountKey: FormControl( + value: household?.memberCount ?? 1, + validators: [Validators.max(20)], + ), _pregnantWomenCountKey: FormControl( - value: household?.additionalFields?.fields - .where((h) => - h.key == AdditionalFieldsType.pregnantWomen.toValue()) - .firstOrNull - ?.value != - null - ? int.tryParse(household?.additionalFields?.fields - .where((h) => - h.key == AdditionalFieldsType.pregnantWomen.toValue()) - .firstOrNull - ?.value - .toString() ?? - '0') - : 0), + value: household?.additionalFields?.fields + .where((h) => + h.key == AdditionalFieldsType.pregnantWomen.toValue()) + .firstOrNull + ?.value != + null + ? int.tryParse(household?.additionalFields?.fields + .where((h) => + h.key == AdditionalFieldsType.pregnantWomen.toValue()) + .firstOrNull + ?.value + .toString() ?? + '0') + : 0, + validators: [Validators.max(20)], + ), _childrenCountKey: FormControl( - value: household?.additionalFields?.fields - .where((h) => - h.key == AdditionalFieldsType.children.toValue()) - .firstOrNull - ?.value != - null - ? int.tryParse(household?.additionalFields?.fields - .where((h) => - h.key == AdditionalFieldsType.children.toValue()) - .firstOrNull - ?.value - .toString() ?? - '0') - : 0) + value: household?.additionalFields?.fields + .where( + (h) => h.key == AdditionalFieldsType.children.toValue()) + .firstOrNull + ?.value != + null + ? int.tryParse(household?.additionalFields?.fields + .where( + (h) => h.key == AdditionalFieldsType.children.toValue()) + .firstOrNull + ?.value + .toString() ?? + '0') + : 0, + validators: [Validators.max(20)], + ) }); } } diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index 102de8d89..1a196c54b 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -30,8 +30,7 @@ class HouseholdLocationPage extends LocalizedStatefulWidget { State createState() => HouseholdLocationPageState(); } -class HouseholdLocationPageState - extends LocalizedState { +class HouseholdLocationPageState extends LocalizedState { static const _administrationAreaKey = 'administrationArea'; static const _addressLine1Key = 'addressLine1'; static const _addressLine2Key = 'addressLine2'; @@ -44,7 +43,22 @@ class HouseholdLocationPageState @override void initState() { + final regState = context.read().state; context.read().add(const LoadLocationEvent()); + regState.maybeMap( + orElse: () => false, + editHousehold: (value) => false, + create: (value) { + WidgetsBinding.instance.addPostFrameCallback((_) { + // Show the dialog after the first frame is built + DigitComponentsUtils().showLocationCapturingDialog( + context, + localizations.translate(i18.common.locationCapturing), + DigitSyncDialogType.inProgress, + ); + }); + return true; + }); super.initState(); } @@ -55,343 +69,327 @@ class HouseholdLocationPageState final router = context.router; return Scaffold( - body: ReactiveFormBuilder( - form: () => buildForm(bloc.state), - builder: (_, form, __) => BlocListener( - listener: (context, locationState) { - final lat = locationState.latitude; - final lng = locationState.longitude; - final accuracy = locationState.accuracy; + body: BlocBuilder(builder: (context, registrationState) { + return ReactiveFormBuilder( + form: () => buildForm(bloc.state), + builder: (_, form, __) => BlocListener( + listener: (context, locationState) { + registrationState.maybeMap( + orElse: () => false, + create: (value) { + if (locationState.accuracy != null) { + //Hide the dialog after 1 seconds + Future.delayed(const Duration(seconds: 1), () { + DigitComponentsUtils().hideLocationDialog(context); + }); + } + }); + if (locationState.accuracy != null) { + final lat = locationState.latitude; + final lng = locationState.longitude; + final accuracy = locationState.accuracy; - form.control(_latKey).value ??= lat; - form.control(_lngKey).value ??= lng; - form.control(_accuracyKey).value ??= accuracy; - }, - listenWhen: (previous, current) { - final lat = form.control(_latKey).value; - final lng = form.control(_lngKey).value; - final accuracy = form.control(_accuracyKey).value; + form.control(_latKey).value ??= lat; + form.control(_lngKey).value ??= lng; + form.control(_accuracyKey).value ??= accuracy; + } + }, + listenWhen: (previous, current) { + final lat = form.control(_latKey).value; + final lng = form.control(_lngKey).value; + final accuracy = form.control(_accuracyKey).value; - return lat != null || lng != null || accuracy != null - ? false - : true; - }, - child: BlocBuilder( - builder: (context, registrationState) { - return ScrollableContent( - enableFixedButton: true, - header: const Column( - children: [ - BackNavigationHelpHeaderWidget( - showcaseButton: ShowcaseButton(), - showHelp: false, - ), - ], - ), - footer: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: BlocBuilder( - builder: (context, locationState) { - return DigitElevatedButton( - onPressed: () { - form.markAllAsTouched(); - if (!form.valid) return; + return lat != null || lng != null || accuracy != null + ? false + : true; + }, + child: ScrollableContent( + enableFixedButton: true, + header: const Column( + children: [ + BackNavigationHelpHeaderWidget( + showcaseButton: ShowcaseButton(), + showHelp: false, + ), + ], + ), + footer: DigitCard( + margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), + padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), + child: BlocBuilder( + builder: (context, locationState) { + return DigitElevatedButton( + onPressed: () { + form.markAllAsTouched(); + if (!form.valid) return; - final addressLine1 = - form.control(_addressLine1Key).value as String?; - final addressLine2 = - form.control(_addressLine2Key).value as String?; - final landmark = - form.control(_landmarkKey).value as String?; - final postalCode = - form.control(_postalCodeKey).value as String?; - context - .read() - .add(const LoadLocationEvent()); - DigitComponentsUtils().showLocationCapturingDialog( - context, - localizations - .translate(i18.common.locationCapturing), - DigitSyncDialogType.inProgress); - Future.delayed(const Duration(seconds: 2), () async { - // After delay, hide the initial dialog - DigitComponentsUtils().hideLocationDialog(context); - await DigitSyncDialog.show(context, - type: DigitSyncDialogType.complete, - label: localizations - .translate(i18.common.locationCaptured), - primaryAction: DigitDialogActions( - label: localizations.translate( - i18.beneficiaryDetails.ctaProceed, - ), - action: (ctx) async { - DigitComponentsUtils() - .hideLocationDialog(context); - registrationState.maybeWhen( - orElse: () { - return; - }, - create: ( - address, - householdModel, - individualModel, - projectBeneficiaryModel, - registrationDate, - searchQuery, - loading, - isHeadOfHousehold, - ) { - var addressModel = AddressModel( - addressLine1: addressLine1 != null && - addressLine1.trim().isNotEmpty - ? addressLine1 - : null, - addressLine2: addressLine2 != null && - addressLine2.trim().isNotEmpty - ? addressLine2 - : null, - landmark: landmark != null && - landmark.trim().isNotEmpty - ? landmark - : null, - pincode: postalCode != null && - postalCode.trim().isNotEmpty - ? postalCode - : null, - type: AddressType.correspondence, - latitude: - form.control(_latKey).value ?? - locationState.latitude, - longitude: - form.control(_lngKey).value ?? - locationState.longitude, - locationAccuracy: form - .control(_accuracyKey) - .value ?? - locationState.accuracy, - locality: LocalityModel( - code: - RegistrationDeliverySingleton() - .boundary! - .code!, - name: - RegistrationDeliverySingleton() - .boundary! - .name, - ), - tenantId: - RegistrationDeliverySingleton() - .tenantId, - rowVersion: 1, - auditDetails: AuditDetails( - createdBy: - RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context - .millisecondsSinceEpoch(), - ), - clientAuditDetails: - ClientAuditDetails( - createdBy: - RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: context - .millisecondsSinceEpoch(), - ), - ); + final addressLine1 = + form.control(_addressLine1Key).value as String?; + final addressLine2 = + form.control(_addressLine2Key).value as String?; + final landmark = + form.control(_landmarkKey).value as String?; + final postalCode = + form.control(_postalCodeKey).value as String?; + registrationState.maybeWhen( + orElse: () { + return; + }, + create: ( + address, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + searchQuery, + selectedClosedHouseholdID, + loading, + isHeadOfHousehold, + ) { + var addressModel = AddressModel( + addressLine1: addressLine1 != null && + addressLine1.trim().isNotEmpty + ? addressLine1 + : null, + addressLine2: addressLine2 != null && + addressLine2.trim().isNotEmpty + ? addressLine2 + : null, + landmark: + landmark != null && landmark.trim().isNotEmpty + ? landmark + : null, + pincode: postalCode != null && + postalCode.trim().isNotEmpty + ? postalCode + : null, + type: AddressType.correspondence, + latitude: form.control(_latKey).value ?? + locationState.latitude, + longitude: form.control(_lngKey).value ?? + locationState.longitude, + locationAccuracy: + form.control(_accuracyKey).value ?? + locationState.accuracy, + locality: LocalityModel( + code: RegistrationDeliverySingleton() + .boundary! + .code!, + name: RegistrationDeliverySingleton() + .boundary! + .name, + ), + tenantId: + RegistrationDeliverySingleton().tenantId, + rowVersion: 1, + auditDetails: AuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: context.millisecondsSinceEpoch(), + ), + clientAuditDetails: ClientAuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: context.millisecondsSinceEpoch(), + lastModifiedBy: RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: + context.millisecondsSinceEpoch(), + ), + ); - bloc.add( - BeneficiaryRegistrationSaveAddressEvent( - addressModel, - ), - ); - router.push(HouseDetailsRoute()); - }, - editHousehold: ( - address, - householdModel, - individuals, - registrationDate, - projectBeneficiaryModel, - loading, - ) { - var addressModel = address.copyWith( - addressLine1: addressLine1 != null && - addressLine1.trim().isNotEmpty - ? addressLine1 - : null, - addressLine2: addressLine2 != null && - addressLine2.trim().isNotEmpty - ? addressLine2 - : null, - landmark: landmark != null && - landmark.trim().isNotEmpty - ? landmark - : null, - locality: address.locality, - pincode: postalCode != null && - postalCode.trim().isNotEmpty - ? postalCode - : null, - type: AddressType.correspondence, - latitude: form.control(_latKey).value, - longitude: - form.control(_lngKey).value, - locationAccuracy: - form.control(_accuracyKey).value, - ); - // TODO [Linking of Voucher for Household based project need to be handled] + bloc.add( + BeneficiaryRegistrationSaveAddressEvent( + addressModel, + ), + ); + router.push(HouseDetailsRoute()); + }, + editHousehold: ( + address, + householdModel, + individuals, + registrationDate, + projectBeneficiaryModel, + loading, + ) { + var addressModel = address.copyWith( + addressLine1: addressLine1 != null && + addressLine1.trim().isNotEmpty + ? addressLine1 + : null, + addressLine2: addressLine2 != null && + addressLine2.trim().isNotEmpty + ? addressLine2 + : null, + landmark: + landmark != null && landmark.trim().isNotEmpty + ? landmark + : null, + locality: address.locality, + pincode: postalCode != null && + postalCode.trim().isNotEmpty + ? postalCode + : null, + type: AddressType.correspondence, + latitude: form.control(_latKey).value, + longitude: form.control(_lngKey).value, + locationAccuracy: + form.control(_accuracyKey).value, + ); + // TODO [Linking of Voucher for Household based project need to be handled] - bloc.add( - BeneficiaryRegistrationSaveAddressEvent( - addressModel, - ), - ); - router.push(HouseDetailsRoute()); - }, - ); - }, - )); - }); - }, - child: Center( - child: Text( - localizations.translate( - i18.householdLocation.actionLabel, - ), + bloc.add( + BeneficiaryRegistrationSaveAddressEvent( + addressModel, + ), + ); + router.push(HouseDetailsRoute()); + }, + ); + }, + child: Center( + child: Text( + localizations.translate( + i18.householdLocation.actionLabel, ), ), - ); - }, - ), + ), + ); + }, ), - slivers: [ - SliverToBoxAdapter( - child: DigitCard( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - TextBlock( - padding: const EdgeInsets.only(top: kPadding), - heading: localizations.translate( + ), + slivers: [ + SliverToBoxAdapter( + child: DigitCard( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + TextBlock( + padding: const EdgeInsets.only(top: kPadding), + heading: localizations.translate( + i18.householdLocation.householdLocationLabelText, + ), + headingStyle: theme.textTheme.displayMedium, + body: localizations.translate( + i18.householdLocation + .householdLocationDescriptionText, + )), + Column(children: [ + householdLocationShowcaseData.administrativeArea + .buildWith( + child: DigitTextFormField( + formControlName: _administrationAreaKey, + label: localizations.translate( i18.householdLocation - .householdLocationLabelText, + .administrationAreaFormLabel, ), - headingStyle: theme.textTheme.displayMedium, - body: localizations.translate( - i18.householdLocation - .householdLocationDescriptionText, - )), - Column(children: [ - householdLocationShowcaseData.administrativeArea - .buildWith( - child: DigitTextFormField( - formControlName: _administrationAreaKey, - label: localizations.translate( - i18.householdLocation - .administrationAreaFormLabel, - ), - readOnly: true, - isRequired: true, - validationMessages: { - 'required': (_) => localizations.translate( - i18.householdLocation - .administrationAreaRequiredValidation, - ), - }, + readOnly: true, + isRequired: true, + validationMessages: { + 'required': (_) => localizations.translate( + i18.householdLocation + .administrationAreaRequiredValidation, + ), + }, + ), + ), + householdLocationShowcaseData.gpsAccuracy.buildWith( + child: DigitTextFormField( + formControlName: _accuracyKey, + label: localizations.translate( + i18.householdLocation.gpsAccuracyLabel, ), + readOnly: true, + validationMessages: { + 'required': (_) => localizations.translate( + i18.common.corecommonRequired, + ), + }, ), - householdLocationShowcaseData.addressLine1 - .buildWith( - child: DigitTextFormField( - formControlName: _addressLine1Key, - label: localizations.translate( - i18.householdLocation - .householdAddressLine1LabelText, - ), - validationMessages: { - 'required': (_) => localizations.translate( - i18.common.min2CharsRequired, - ), - 'maxLength': (object) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', maxLength.toString()), - }, + ), + householdLocationShowcaseData.addressLine1.buildWith( + child: DigitTextFormField( + formControlName: _addressLine1Key, + label: localizations.translate( + i18.householdLocation + .householdAddressLine1LabelText, ), + validationMessages: { + 'required': (_) => localizations.translate( + i18.common.min2CharsRequired, + ), + 'maxLength': (object) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', maxLength.toString()), + }, ), - householdLocationShowcaseData.addressLine2 - .buildWith( - child: DigitTextFormField( - formControlName: _addressLine2Key, - label: localizations.translate( - i18.householdLocation - .householdAddressLine2LabelText, - ), - validationMessages: { - 'required': (_) => localizations.translate( - i18.common.min2CharsRequired, - ), - 'maxLength': (object) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', maxLength.toString()), - }, + ), + householdLocationShowcaseData.addressLine2.buildWith( + child: DigitTextFormField( + formControlName: _addressLine2Key, + label: localizations.translate( + i18.householdLocation + .householdAddressLine2LabelText, ), + validationMessages: { + 'required': (_) => localizations.translate( + i18.common.min2CharsRequired, + ), + 'maxLength': (object) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', maxLength.toString()), + }, ), - householdLocationShowcaseData.landmark.buildWith( - child: DigitTextFormField( - formControlName: _landmarkKey, - label: localizations.translate( - i18.householdLocation.landmarkFormLabel, - ), - validationMessages: { - 'required': (_) => localizations.translate( - i18.common.min2CharsRequired, - ), - 'maxLength': (object) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', maxLength.toString()), - }, + ), + householdLocationShowcaseData.landmark.buildWith( + child: DigitTextFormField( + formControlName: _landmarkKey, + label: localizations.translate( + i18.householdLocation.landmarkFormLabel, ), + validationMessages: { + 'required': (_) => localizations.translate( + i18.common.min2CharsRequired, + ), + 'maxLength': (object) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', maxLength.toString()), + }, ), - householdLocationShowcaseData.postalCode.buildWith( - child: DigitTextFormField( - keyboardType: TextInputType.text, - formControlName: _postalCodeKey, - label: localizations.translate( - i18.householdLocation.postalCodeFormLabel, - ), - validationMessages: { - 'required': (_) => localizations.translate( - i18.common.min2CharsRequired, - ), - 'maxLength': (object) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', '6'), - }, - inputFormatters: [ - FilteringTextInputFormatter.digitsOnly, - ], + ), + householdLocationShowcaseData.postalCode.buildWith( + child: DigitTextFormField( + keyboardType: TextInputType.text, + formControlName: _postalCodeKey, + label: localizations.translate( + i18.householdLocation.postalCodeFormLabel, ), + validationMessages: { + 'required': (_) => localizations.translate( + i18.common.min2CharsRequired, + ), + 'maxLength': (object) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', '6'), + }, + inputFormatters: [ + FilteringTextInputFormatter.digitsOnly, + ], ), - ]), - ], - ), + ), + ]), + ], ), ), - ], - ); - }, + ), + ], + ), ), - ), - ), + ); + }), ); } diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index c01de9a39..530686a15 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -91,6 +91,7 @@ class IndividualDetailsPageState extends LocalizedState { ); }, builder: (context, state) { + // context. return ScrollableContent( enableFixedButton: true, header: const Column(children: [ @@ -141,6 +142,7 @@ class IndividualDetailsPageState extends LocalizedState { projectBeneficiaryModel, registrationDate, searchQuery, + selectedClosedHouseholdID, loading, isHeadOfHousehold, ) async { @@ -340,7 +342,7 @@ class IndividualDetailsPageState extends LocalizedState { individualDetailsShowcaseData.nameOfIndividual .buildWith( child: DigitTextFormField( - formControlName: 'individualName', + formControlName: _individualNameKey, label: localizations.translate( i18.individualDetails.nameLabelText, ), @@ -549,6 +551,9 @@ class IndividualDetailsPageState extends LocalizedState { (RegistrationDeliverySingleton().beneficiaryType == BeneficiaryType.individual)) BlocBuilder( + buildWhen: (p, c) { + return true; + }, builder: (context, state) => state .qrCodes.isNotEmpty ? Row( @@ -570,7 +575,7 @@ class IndividualDetailsPageState extends LocalizedState { child: Text( overflow: TextOverflow.ellipsis, localizations - .translate(state.qrCodes.first), + .translate(state.qrCodes.last), ), ), Padding( diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index ff5e0aec7..52adfbe65 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -6,7 +6,7 @@ import 'package:digit_scanner/pages/qr_scanner.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart'; -import 'package:registration_delivery/blocs/search_households/individual_global_search.dart'; +import 'package:registration_delivery/pages/beneficiary/widgets/view_closed_household.dart'; import 'package:registration_delivery/registration_delivery.dart'; import '../../utils/i18_key_constants.dart' as i18; @@ -174,6 +174,7 @@ class _SearchBeneficiaryPageState triggerGlobalSearchEvent(); } else { blocWrapper.clearEvent(); + triggerGlobalSearchEvent(); } }, ), @@ -215,10 +216,15 @@ class _SearchBeneficiaryPageState ), Align( alignment: Alignment.topLeft, - child: DigitIconButton( - iconText: getFilterIconNLabel()['label'], - icon: getFilterIconNLabel()['icon'], - onPressed: () => showFilterDialog(), + child: Padding( + padding: + const EdgeInsets.only(left: kPadding), + child: DigitIconButton( + textDirection: TextDirection.rtl, + iconText: getFilterIconNLabel()['label'], + icon: getFilterIconNLabel()['icon'], + onPressed: () => showFilterDialog(), + ), ), ), selectedFilters.isNotEmpty @@ -260,7 +266,7 @@ class _SearchBeneficiaryPageState color: const DigitColors() .davyGray)), Text( - '(${searchHouseholdsState.householdMembers.length})', + '(${selectedFilters.contains(Status.closeHousehold.name) ? searchHouseholdsState.closedHouseholds.length : searchHouseholdsState.householdMembers.length})', style: TextStyle( color: const DigitColors() .davyGray)), @@ -275,6 +281,7 @@ class _SearchBeneficiaryPageState }); blocWrapper .clearEvent(); + triggerGlobalSearchEvent(); }, child: Container( decoration: @@ -341,54 +348,158 @@ class _SearchBeneficiaryPageState }, child: BlocBuilder( builder: (context, locationState) { - return SliverList( - delegate: SliverChildBuilderDelegate( - (ctx, index) { - final i = searchHouseholdsState.householdMembers - .elementAt(index); - final distance = calculateDistance( - Coordinate( - lat, - long, - ), - Coordinate( - i.household?.address?.latitude, - i.household?.address?.longitude, - ), - ); + return searchHouseholdsState.closedHouseholds.isNotEmpty + ? SliverList( + delegate: SliverChildBuilderDelegate( + (ctx, index) { + final i = searchHouseholdsState.closedHouseholds + .elementAt(index); - return Container( - margin: const EdgeInsets.only(bottom: kPadding), - child: ViewBeneficiaryCard( - distance: isProximityEnabled ? distance : null, - householdMember: i, - onOpenPressed: () async { - final scannerBloc = - context.read(); + final distance = calculateDistance( + Coordinate( + lat, + long, + ), + Coordinate( + i.latitude, + i.longitude, + ), + ); - scannerBloc.add( - const DigitScannerEvent.handleScanner(), + return ViewClosedHouseholdCard( + userAction: i, + onOpenPressed: () async { + setState(() { + selectedFilters = []; + }); + blocWrapper.clearEvent(); + await context.router.push( + BeneficiaryRegistrationWrapperRoute( + initialState: + BeneficiaryRegistrationCreateState( + searchQuery: i + .additionalFields?.fields + .where((h) => + h.key == 'householdHead') + .firstOrNull + ?.value, + selectedClosedHouseholdID: + i.clientReferenceId, + ), + ), + ); + }, + distance: + isProximityEnabled ? distance : null, + ); + }, + childCount: + searchHouseholdsState.closedHouseholds.length, + ), + ) + : SliverList( + delegate: SliverChildBuilderDelegate( + (ctx, index) { + final i = searchHouseholdsState.householdMembers + .elementAt(index); + final projectBeneficiaries = + i.projectBeneficiaries?.where((element) { + if (RegistrationDeliverySingleton() + .beneficiaryType == + BeneficiaryType.individual) { + return element + .beneficiaryClientReferenceId == + i.household?.clientReferenceId; + } else { + return element + .beneficiaryClientReferenceId == + i.household!.clientReferenceId; + } + }).toList(); + final taskData = (projectBeneficiaries ?? []) + .isNotEmpty && + i.tasks != null + ? i.tasks + ?.where((element) => + element + .projectBeneficiaryClientReferenceId == + projectBeneficiaries + ?.first.clientReferenceId) + .toList() + : null; + final referralData = (projectBeneficiaries ?? + []) + .isNotEmpty + ? i.referrals + ?.where((element) => + element + .projectBeneficiaryClientReferenceId == + projectBeneficiaries + ?.first.clientReferenceId) + .toList() + : null; + final sideEffects = + taskData != null && taskData.isNotEmpty + ? i.sideEffects + ?.where((element) => + element.taskClientReferenceId == + taskData.last.clientReferenceId) + .toList() + : null; + final memberWrapper = HouseholdMemberWrapper( + household: i.household, + headOfHousehold: i.headOfHousehold, + members: i.members, + projectBeneficiaries: projectBeneficiaries, + tasks: taskData, + sideEffects: sideEffects, + referrals: referralData, ); + final distance = calculateDistance( + Coordinate( + lat, + long, + ), + Coordinate( + memberWrapper.household?.address?.latitude, + memberWrapper.household?.address?.longitude, + ), + ); + + return Container( + margin: + const EdgeInsets.only(bottom: kPadding), + child: ViewBeneficiaryCard( + distance: + isProximityEnabled ? distance : null, + householdMember: memberWrapper, + onOpenPressed: () async { + final scannerBloc = + context.read(); + + scannerBloc.add( + const DigitScannerEvent.handleScanner(), + ); - await context.router.push( - BeneficiaryWrapperRoute( - wrapper: i, + await context.router.push( + BeneficiaryWrapperRoute( + wrapper: memberWrapper, + ), + ); + setState(() { + isProximityEnabled = false; + }); + searchController.clear(); + selectedFilters.clear(); + blocWrapper.clearEvent(); + }, ), ); - setState(() { - isProximityEnabled = false; - }); - searchController.clear(); - selectedFilters.clear(); - blocWrapper.clearEvent(); }, + childCount: + searchHouseholdsState.householdMembers.length, ), ); - }, - childCount: - searchHouseholdsState.householdMembers.length, - ), - ); }, ), ), @@ -491,48 +602,51 @@ class _SearchBeneficiaryPageState } triggerGlobalSearchEvent(); } else { + setState(() { + selectedFilters = []; + }); blocWrapper.clearEvent(); + triggerGlobalSearchEvent(); } } - triggerClearEvent() { - blocWrapper.clearEvent(); - setState(() { - isProximityEnabled = false; - searchController.clear(); - selectedFilters = []; - }); - } - void triggerGlobalSearchEvent() { blocWrapper.clearEvent(); if (RegistrationDeliverySingleton().beneficiaryType == BeneficiaryType.individual) { - blocWrapper.individualGlobalSearchBloc - .add(SearchHouseholdsEvent.individualGlobalSearch( - globalSearchParams: GlobalSearchParameters( - isProximityEnabled: isProximityEnabled, - latitude: lat, - longitude: long, - maxRadius: RegistrationDeliverySingleton().maxRadius, - nameSearch: searchController.text, - filter: selectedFilters, - offset: offset, - limit: limit, - ))); + if (isProximityEnabled || + selectedFilters.isNotEmpty || + searchController.text.isNotEmpty) { + blocWrapper.individualGlobalSearchBloc + .add(SearchHouseholdsEvent.individualGlobalSearch( + globalSearchParams: GlobalSearchParameters( + isProximityEnabled: isProximityEnabled, + latitude: lat, + longitude: long, + maxRadius: RegistrationDeliverySingleton().maxRadius, + nameSearch: searchController.text, + filter: selectedFilters, + offset: offset, + limit: limit, + ))); + } } else { - blocWrapper.houseHoldGlobalSearchBloc - .add(SearchHouseholdsEvent.houseHoldGlobalSearch( - globalSearchParams: GlobalSearchParameters( - isProximityEnabled: isProximityEnabled, - latitude: lat, - longitude: long, - maxRadius: RegistrationDeliverySingleton().maxRadius, - nameSearch: searchController.text, - filter: selectedFilters, - offset: offset, - limit: limit, - ))); + if (isProximityEnabled || + selectedFilters.isNotEmpty || + searchController.text.isNotEmpty) { + blocWrapper.houseHoldGlobalSearchBloc + .add(SearchHouseholdsEvent.houseHoldGlobalSearch( + globalSearchParams: GlobalSearchParameters( + isProximityEnabled: isProximityEnabled, + latitude: lat, + longitude: long, + maxRadius: RegistrationDeliverySingleton().maxRadius, + nameSearch: searchController.text, + filter: selectedFilters, + offset: offset, + limit: limit, + ))); + } } } @@ -548,7 +662,7 @@ class _SearchBeneficiaryPageState Status.administeredFailed.toValue(): Status.administeredFailed, Status.inComplete.toValue(): Status.inComplete, Status.toAdminister.toValue(): Status.toAdminister, - Status.closed.toValue(): Status.closed, + Status.closeHousehold.toValue(): Status.closeHousehold, Status.registered.toValue(): Status.registered, Status.notRegistered.toValue(): Status.notRegistered, }; diff --git a/packages/registration_delivery/lib/pages/summary_page.dart b/packages/registration_delivery/lib/pages/summary_page.dart index 8a8f4a3b8..63f22f036 100644 --- a/packages/registration_delivery/lib/pages/summary_page.dart +++ b/packages/registration_delivery/lib/pages/summary_page.dart @@ -1,11 +1,14 @@ import 'package:auto_route/auto_route.dart'; +import 'package:closed_household/blocs/closed_household.dart'; import 'package:digit_components/digit_components.dart'; +import 'package:digit_components/utils/date_utils.dart'; +import 'package:digit_components/widgets/atoms/details_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:recase/recase.dart'; import 'package:registration_delivery/models/entities/additional_fields_type.dart'; import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; import 'package:registration_delivery/widgets/back_navigation_help_header.dart'; -import 'package:digit_components/widgets/atoms/details_card.dart'; import 'package:registration_delivery/widgets/showcase/showcase_button.dart'; import '../../../widgets/localized.dart'; @@ -13,6 +16,7 @@ import '../../utils/i18_key_constants.dart' as i18; import '../blocs/beneficiary_registration/beneficiary_registration.dart'; import '../blocs/search_households/search_bloc_common_wrapper.dart'; import '../blocs/search_households/search_households.dart'; +import '../utils/constants.dart'; import '../utils/utils.dart'; @RoutePage() @@ -86,7 +90,7 @@ class SummaryPageState extends LocalizedState { alignment: Alignment.centerLeft, child: Text( localizations.translate( - i18.individualDetails.individualsDetailsLabelText, + i18.common.coreCommonSummaryDetails, ), style: DigitTheme .instance.mobileTheme.textTheme.displayMedium, @@ -122,6 +126,7 @@ class SummaryPageState extends LocalizedState { projectBeneficiaryModel, registrationDate, addressModel, + selectedClosedHouseholdID, loading, isHeadOfHousehold, ) async { @@ -170,6 +175,14 @@ class SummaryPageState extends LocalizedState { tag: projectBeneficiaryModel?.tag, navigateToSummary: false), ); + if (selectedClosedHouseholdID != null && + householdModel != null) { + context.read().add( + ClosedHouseholdEvent.handleUpdate( + selectedClosedHouseholdID, + householdModel + .clientReferenceId)); + } } } }, @@ -205,7 +218,9 @@ class SummaryPageState extends LocalizedState { value: householdState.householdModel?.address ?.locality?.code .split('_') - .last ?? + .last + .toString() + .titleCase ?? localizations .translate(i18.common.coreCommonNA), isInline: true), @@ -306,6 +321,91 @@ class SummaryPageState extends LocalizedState { isInline: true), ]), ), + DigitCard( + child: LabelValueList( + heading: localizations.translate(i18 + .individualDetails.individualsDetailsLabelText), + withDivider: true, + items: [ + LabelValuePair( + label: localizations.translate( + i18.individualDetails.nameLabelText), + value: householdState.maybeWhen( + orElse: () => localizations + .translate(i18.common.coreCommonNA), + summary: ( + navigateToRoot, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + addressModel, + selectedClosedHouseholdID, + loading, + isHeadOfHousehold, + ) => + individualModel?.name?.givenName ?? + localizations.translate( + i18.common.coreCommonNA)), + ), + LabelValuePair( + label: localizations.translate( + i18.individualDetails.dobLabelText), + value: householdState.maybeWhen( + orElse: () => localizations + .translate(i18.common.coreCommonNA), + summary: ( + navigateToRoot, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + addressModel, + selectedClosedHouseholdID, + loading, + isHeadOfHousehold, + ) => + individualModel?.dateOfBirth != null + ? DigitDateUtils.getFilteredDate( + DigitDateUtils + .getFormattedDateToDateTime( + individualModel + ?.dateOfBirth ?? + '') + .toString(), + dateFormat: Constants() + .dateMonthYearFormat) + .toString() + : localizations.translate( + i18.common.coreCommonNA)), + ), + LabelValuePair( + label: localizations.translate( + i18.individualDetails.genderLabelText), + value: householdState.maybeWhen( + orElse: () => localizations + .translate(i18.common.coreCommonNA), + summary: ( + navigateToRoot, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + addressModel, + selectedClosedHouseholdID, + loading, + isHeadOfHousehold, + ) => + individualModel?.gender != null + ? localizations.translate( + individualModel?.gender?.name + .toUpperCase() ?? + '') + : localizations.translate( + i18.common.coreCommonNA)), + ), + ]), + ), ], ), ) diff --git a/packages/registration_delivery/lib/registration_delivery.dart b/packages/registration_delivery/lib/registration_delivery.dart index e5ea482e9..b68284906 100644 --- a/packages/registration_delivery/lib/registration_delivery.dart +++ b/packages/registration_delivery/lib/registration_delivery.dart @@ -56,12 +56,14 @@ export 'pages/beneficiary/widgets/record_delivery_cycle.dart'; export 'pages/beneficiary/widgets/splash_acknowledgement.dart'; export 'pages/beneficiary_registration/beneficiary_acknowledgement.dart'; export 'pages/beneficiary_registration/beneficiary_registration_wrapper.dart'; +export 'pages/beneficiary_registration/house_details.dart'; export 'pages/beneficiary_registration/household_details.dart'; export 'pages/beneficiary_registration/household_location.dart'; export 'pages/beneficiary_registration/individual_details.dart'; export 'pages/reason_for_deletion.dart'; export 'pages/registration_delivery_wrapper.dart'; export 'pages/search_beneficiary.dart'; +export 'pages/summary_page.dart'; export 'router/registration_delivery_router.dart'; export 'utils/typedefs.dart'; export 'utils/utils.dart' show RegistrationDeliverySingleton; diff --git a/packages/registration_delivery/lib/router/registration_delivery_router.dart b/packages/registration_delivery/lib/router/registration_delivery_router.dart index add4b1a90..14d14e52f 100644 --- a/packages/registration_delivery/lib/router/registration_delivery_router.dart +++ b/packages/registration_delivery/lib/router/registration_delivery_router.dart @@ -1,5 +1,4 @@ import 'package:auto_route/auto_route.dart'; -import 'package:registration_delivery/pages/beneficiary/refused_delivery.dart'; import 'registration_delivery_router.gm.dart'; @@ -104,6 +103,10 @@ class RegistrationDeliveryRoute extends $RegistrationDeliveryRoute { page: HouseholdAcknowledgementRoute.page, path: 'household-acknowledgement', ), + AutoRoute( + page: DeliverySummaryRoute.page, + path: 'delivery-summary', + ), ], ), ]), diff --git a/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart b/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart index 47738683a..9f7594328 100644 --- a/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart +++ b/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart @@ -8,13 +8,13 @@ // coverage:ignore-file // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'package:auto_route/auto_route.dart' as _i24; -import 'package:digit_data_model/data_model.dart' as _i29; -import 'package:flutter/material.dart' as _i25; -import 'package:registration_delivery/blocs/app_localization.dart' as _i26; +import 'package:auto_route/auto_route.dart' as _i25; +import 'package:digit_data_model/data_model.dart' as _i30; +import 'package:flutter/material.dart' as _i26; +import 'package:registration_delivery/blocs/app_localization.dart' as _i27; import 'package:registration_delivery/blocs/search_households/search_households.dart' - as _i28; -import 'package:registration_delivery/models/entities/task.dart' as _i30; + as _i29; +import 'package:registration_delivery/models/entities/task.dart' as _i31; import 'package:registration_delivery/pages/beneficiary/beneficiary_checklist.dart' as _i2; import 'package:registration_delivery/pages/beneficiary/beneficiary_details.dart' @@ -23,50 +23,52 @@ import 'package:registration_delivery/pages/beneficiary/beneficiary_wrapper.dart as _i5; import 'package:registration_delivery/pages/beneficiary/deliver_intervention.dart' as _i6; -import 'package:registration_delivery/pages/beneficiary/dose_administered.dart' +import 'package:registration_delivery/pages/beneficiary/delivery_summary_page.dart' as _i7; -import 'package:registration_delivery/pages/beneficiary/facility_selection.dart' +import 'package:registration_delivery/pages/beneficiary/dose_administered.dart' as _i8; +import 'package:registration_delivery/pages/beneficiary/facility_selection.dart' + as _i9; import 'package:registration_delivery/pages/beneficiary/household_overview.dart' - as _i13; + as _i14; import 'package:registration_delivery/pages/beneficiary/record_past_delivery_details.dart' - as _i16; -import 'package:registration_delivery/pages/beneficiary/refer_beneficiary.dart' as _i17; -import 'package:registration_delivery/pages/beneficiary/refused_delivery.dart' +import 'package:registration_delivery/pages/beneficiary/refer_beneficiary.dart' as _i18; +import 'package:registration_delivery/pages/beneficiary/refused_delivery.dart' + as _i19; import 'package:registration_delivery/pages/beneficiary/side_effects.dart' - as _i21; + as _i22; import 'package:registration_delivery/pages/beneficiary/widgets/household_acknowledgement.dart' - as _i11; + as _i12; import 'package:registration_delivery/pages/beneficiary/widgets/splash_acknowledgement.dart' - as _i22; + as _i23; import 'package:registration_delivery/pages/beneficiary_registration/beneficiary_acknowledgement.dart' as _i1; import 'package:registration_delivery/pages/beneficiary_registration/beneficiary_registration_wrapper.dart' as _i4; import 'package:registration_delivery/pages/beneficiary_registration/house_details.dart' - as _i9; -import 'package:registration_delivery/pages/beneficiary_registration/household_details.dart' as _i10; +import 'package:registration_delivery/pages/beneficiary_registration/household_details.dart' + as _i11; import 'package:registration_delivery/pages/beneficiary_registration/household_location.dart' - as _i12; + as _i13; import 'package:registration_delivery/pages/beneficiary_registration/individual_details.dart' - as _i14; -import 'package:registration_delivery/pages/reason_for_deletion.dart' as _i15; + as _i15; +import 'package:registration_delivery/pages/reason_for_deletion.dart' as _i16; import 'package:registration_delivery/pages/registration_delivery_wrapper.dart' - as _i19; -import 'package:registration_delivery/pages/search_beneficiary.dart' as _i20; -import 'package:registration_delivery/pages/summary_page.dart' as _i23; -import 'package:registration_delivery/registration_delivery.dart' as _i27; + as _i20; +import 'package:registration_delivery/pages/search_beneficiary.dart' as _i21; +import 'package:registration_delivery/pages/summary_page.dart' as _i24; +import 'package:registration_delivery/registration_delivery.dart' as _i28; -abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { +abstract class $RegistrationDeliveryRoute extends _i25.AutoRouterModule { @override - final Map pagesMap = { + final Map pagesMap = { BeneficiaryAcknowledgementRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const BeneficiaryAcknowledgementRouteArgs()); - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, child: _i1.BeneficiaryAcknowledgementPage( key: args.key, @@ -78,7 +80,7 @@ abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { BeneficiaryChecklistRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const BeneficiaryChecklistRouteArgs()); - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, child: _i2.BeneficiaryChecklistPage( key: args.key, @@ -90,7 +92,7 @@ abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { BeneficiaryDetailsRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const BeneficiaryDetailsRouteArgs()); - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, child: _i3.BeneficiaryDetailsPage( key: args.key, @@ -100,9 +102,9 @@ abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { }, BeneficiaryRegistrationWrapperRoute.name: (routeData) { final args = routeData.argsAs(); - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, - child: _i24.WrappedRoute( + child: _i25.WrappedRoute( child: _i4.BeneficiaryRegistrationWrapperPage( key: args.key, initialState: args.initialState, @@ -111,7 +113,7 @@ abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { }, BeneficiaryWrapperRoute.name: (routeData) { final args = routeData.argsAs(); - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, child: _i5.BeneficiaryWrapperPage( key: args.key, @@ -123,7 +125,7 @@ abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { DeliverInterventionRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const DeliverInterventionRouteArgs()); - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, child: _i6.DeliverInterventionPage( key: args.key, @@ -132,12 +134,23 @@ abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { ), ); }, + DeliverySummaryRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const DeliverySummaryRouteArgs()); + return _i25.AutoRoutePage( + routeData: routeData, + child: _i7.DeliverySummaryPage( + key: args.key, + appLocalizations: args.appLocalizations, + ), + ); + }, DoseAdministeredRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const DoseAdministeredRouteArgs()); - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, - child: _i7.DoseAdministeredPage( + child: _i8.DoseAdministeredPage( key: args.key, appLocalizations: args.appLocalizations, ), @@ -145,9 +158,9 @@ abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { }, FacilitySelectionRoute.name: (routeData) { final args = routeData.argsAs(); - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, - child: _i8.FacilitySelectionPage( + child: _i9.FacilitySelectionPage( key: args.key, facilities: args.facilities, ), @@ -156,9 +169,9 @@ abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { HouseDetailsRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const HouseDetailsRouteArgs()); - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, - child: _i9.HouseDetailsPage( + child: _i10.HouseDetailsPage( key: args.key, appLocalizations: args.appLocalizations, ), @@ -167,9 +180,9 @@ abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { HouseHoldDetailsRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const HouseHoldDetailsRouteArgs()); - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, - child: _i10.HouseHoldDetailsPage( + child: _i11.HouseHoldDetailsPage( key: args.key, appLocalizations: args.appLocalizations, ), @@ -178,9 +191,9 @@ abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { HouseholdAcknowledgementRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const HouseholdAcknowledgementRouteArgs()); - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, - child: _i11.HouseholdAcknowledgementPage( + child: _i12.HouseholdAcknowledgementPage( key: args.key, appLocalizations: args.appLocalizations, enableViewHousehold: args.enableViewHousehold, @@ -190,9 +203,9 @@ abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { HouseholdLocationRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const HouseholdLocationRouteArgs()); - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, - child: _i12.HouseholdLocationPage( + child: _i13.HouseholdLocationPage( key: args.key, appLocalizations: args.appLocalizations, ), @@ -201,9 +214,9 @@ abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { HouseholdOverviewRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const HouseholdOverviewRouteArgs()); - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, - child: _i13.HouseholdOverviewPage( + child: _i14.HouseholdOverviewPage( key: args.key, appLocalizations: args.appLocalizations, ), @@ -212,9 +225,9 @@ abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { IndividualDetailsRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const IndividualDetailsRouteArgs()); - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, - child: _i14.IndividualDetailsPage( + child: _i15.IndividualDetailsPage( key: args.key, appLocalizations: args.appLocalizations, isHeadOfHousehold: args.isHeadOfHousehold, @@ -224,9 +237,9 @@ abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { ReasonForDeletionRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const ReasonForDeletionRouteArgs()); - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, - child: _i15.ReasonForDeletionPage( + child: _i16.ReasonForDeletionPage( key: args.key, appLocalizations: args.appLocalizations, isHousholdDelete: args.isHousholdDelete, @@ -236,9 +249,9 @@ abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { RecordPastDeliveryDetailsRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const RecordPastDeliveryDetailsRouteArgs()); - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, - child: _i16.RecordPastDeliveryDetailsPage( + child: _i17.RecordPastDeliveryDetailsPage( key: args.key, appLocalizations: args.appLocalizations, tasks: args.tasks, @@ -247,9 +260,9 @@ abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { }, ReferBeneficiaryRoute.name: (routeData) { final args = routeData.argsAs(); - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, - child: _i17.ReferBeneficiaryPage( + child: _i18.ReferBeneficiaryPage( key: args.key, appLocalizations: args.appLocalizations, isEditing: args.isEditing, @@ -260,26 +273,26 @@ abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { RefusedDeliveryRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const RefusedDeliveryRouteArgs()); - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, - child: _i18.RefusedDeliveryPage( + child: _i19.RefusedDeliveryPage( key: args.key, appLocalizations: args.appLocalizations, ), ); }, RegistrationDeliveryWrapperRoute.name: (routeData) { - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, - child: const _i19.RegistrationDeliveryWrapperPage(), + child: const _i20.RegistrationDeliveryWrapperPage(), ); }, SearchBeneficiaryRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const SearchBeneficiaryRouteArgs()); - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, - child: _i20.SearchBeneficiaryPage( + child: _i21.SearchBeneficiaryPage( key: args.key, appLocalizations: args.appLocalizations, ), @@ -287,9 +300,9 @@ abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { }, SideEffectsRoute.name: (routeData) { final args = routeData.argsAs(); - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, - child: _i21.SideEffectsPage( + child: _i22.SideEffectsPage( key: args.key, appLocalizations: args.appLocalizations, tasks: args.tasks, @@ -300,9 +313,9 @@ abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { SplashAcknowledgementRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const SplashAcknowledgementRouteArgs()); - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, - child: _i22.SplashAcknowledgementPage( + child: _i23.SplashAcknowledgementPage( key: args.key, appLocalizations: args.appLocalizations, enableBackToSearch: args.enableBackToSearch, @@ -312,9 +325,9 @@ abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { SummaryRoute.name: (routeData) { final args = routeData.argsAs( orElse: () => const SummaryRouteArgs()); - return _i24.AutoRoutePage( + return _i25.AutoRoutePage( routeData: routeData, - child: _i23.SummaryPage( + child: _i24.SummaryPage( key: args.key, appLocalizations: args.appLocalizations, ), @@ -326,12 +339,12 @@ abstract class $RegistrationDeliveryRoute extends _i24.AutoRouterModule { /// generated route for /// [_i1.BeneficiaryAcknowledgementPage] class BeneficiaryAcknowledgementRoute - extends _i24.PageRouteInfo { + extends _i25.PageRouteInfo { BeneficiaryAcknowledgementRoute({ - _i25.Key? key, - _i26.RegistrationDeliveryLocalization? appLocalizations, + _i26.Key? key, + _i27.RegistrationDeliveryLocalization? appLocalizations, bool? enableViewHousehold, - List<_i24.PageRouteInfo>? children, + List<_i25.PageRouteInfo>? children, }) : super( BeneficiaryAcknowledgementRoute.name, args: BeneficiaryAcknowledgementRouteArgs( @@ -344,8 +357,8 @@ class BeneficiaryAcknowledgementRoute static const String name = 'BeneficiaryAcknowledgementRoute'; - static const _i24.PageInfo page = - _i24.PageInfo(name); + static const _i25.PageInfo page = + _i25.PageInfo(name); } class BeneficiaryAcknowledgementRouteArgs { @@ -355,9 +368,9 @@ class BeneficiaryAcknowledgementRouteArgs { this.enableViewHousehold, }); - final _i25.Key? key; + final _i26.Key? key; - final _i26.RegistrationDeliveryLocalization? appLocalizations; + final _i27.RegistrationDeliveryLocalization? appLocalizations; final bool? enableViewHousehold; @@ -370,12 +383,12 @@ class BeneficiaryAcknowledgementRouteArgs { /// generated route for /// [_i2.BeneficiaryChecklistPage] class BeneficiaryChecklistRoute - extends _i24.PageRouteInfo { + extends _i25.PageRouteInfo { BeneficiaryChecklistRoute({ - _i25.Key? key, + _i26.Key? key, String? beneficiaryClientRefId, - _i26.RegistrationDeliveryLocalization? appLocalizations, - List<_i24.PageRouteInfo>? children, + _i27.RegistrationDeliveryLocalization? appLocalizations, + List<_i25.PageRouteInfo>? children, }) : super( BeneficiaryChecklistRoute.name, args: BeneficiaryChecklistRouteArgs( @@ -388,8 +401,8 @@ class BeneficiaryChecklistRoute static const String name = 'BeneficiaryChecklistRoute'; - static const _i24.PageInfo page = - _i24.PageInfo(name); + static const _i25.PageInfo page = + _i25.PageInfo(name); } class BeneficiaryChecklistRouteArgs { @@ -399,11 +412,11 @@ class BeneficiaryChecklistRouteArgs { this.appLocalizations, }); - final _i25.Key? key; + final _i26.Key? key; final String? beneficiaryClientRefId; - final _i26.RegistrationDeliveryLocalization? appLocalizations; + final _i27.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -414,11 +427,11 @@ class BeneficiaryChecklistRouteArgs { /// generated route for /// [_i3.BeneficiaryDetailsPage] class BeneficiaryDetailsRoute - extends _i24.PageRouteInfo { + extends _i25.PageRouteInfo { BeneficiaryDetailsRoute({ - _i25.Key? key, - _i26.RegistrationDeliveryLocalization? appLocalizations, - List<_i24.PageRouteInfo>? children, + _i26.Key? key, + _i27.RegistrationDeliveryLocalization? appLocalizations, + List<_i25.PageRouteInfo>? children, }) : super( BeneficiaryDetailsRoute.name, args: BeneficiaryDetailsRouteArgs( @@ -430,8 +443,8 @@ class BeneficiaryDetailsRoute static const String name = 'BeneficiaryDetailsRoute'; - static const _i24.PageInfo page = - _i24.PageInfo(name); + static const _i25.PageInfo page = + _i25.PageInfo(name); } class BeneficiaryDetailsRouteArgs { @@ -440,9 +453,9 @@ class BeneficiaryDetailsRouteArgs { this.appLocalizations, }); - final _i25.Key? key; + final _i26.Key? key; - final _i26.RegistrationDeliveryLocalization? appLocalizations; + final _i27.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -453,11 +466,11 @@ class BeneficiaryDetailsRouteArgs { /// generated route for /// [_i4.BeneficiaryRegistrationWrapperPage] class BeneficiaryRegistrationWrapperRoute - extends _i24.PageRouteInfo { + extends _i25.PageRouteInfo { BeneficiaryRegistrationWrapperRoute({ - _i25.Key? key, - required _i27.BeneficiaryRegistrationState initialState, - List<_i24.PageRouteInfo>? children, + _i26.Key? key, + required _i28.BeneficiaryRegistrationState initialState, + List<_i25.PageRouteInfo>? children, }) : super( BeneficiaryRegistrationWrapperRoute.name, args: BeneficiaryRegistrationWrapperRouteArgs( @@ -469,8 +482,8 @@ class BeneficiaryRegistrationWrapperRoute static const String name = 'BeneficiaryRegistrationWrapperRoute'; - static const _i24.PageInfo page = - _i24.PageInfo(name); + static const _i25.PageInfo page = + _i25.PageInfo(name); } class BeneficiaryRegistrationWrapperRouteArgs { @@ -479,9 +492,9 @@ class BeneficiaryRegistrationWrapperRouteArgs { required this.initialState, }); - final _i25.Key? key; + final _i26.Key? key; - final _i27.BeneficiaryRegistrationState initialState; + final _i28.BeneficiaryRegistrationState initialState; @override String toString() { @@ -492,12 +505,12 @@ class BeneficiaryRegistrationWrapperRouteArgs { /// generated route for /// [_i5.BeneficiaryWrapperPage] class BeneficiaryWrapperRoute - extends _i24.PageRouteInfo { + extends _i25.PageRouteInfo { BeneficiaryWrapperRoute({ - _i25.Key? key, - required _i28.HouseholdMemberWrapper wrapper, + _i26.Key? key, + required _i29.HouseholdMemberWrapper wrapper, bool isEditing = false, - List<_i24.PageRouteInfo>? children, + List<_i25.PageRouteInfo>? children, }) : super( BeneficiaryWrapperRoute.name, args: BeneficiaryWrapperRouteArgs( @@ -510,8 +523,8 @@ class BeneficiaryWrapperRoute static const String name = 'BeneficiaryWrapperRoute'; - static const _i24.PageInfo page = - _i24.PageInfo(name); + static const _i25.PageInfo page = + _i25.PageInfo(name); } class BeneficiaryWrapperRouteArgs { @@ -521,9 +534,9 @@ class BeneficiaryWrapperRouteArgs { this.isEditing = false, }); - final _i25.Key? key; + final _i26.Key? key; - final _i28.HouseholdMemberWrapper wrapper; + final _i29.HouseholdMemberWrapper wrapper; final bool isEditing; @@ -536,12 +549,12 @@ class BeneficiaryWrapperRouteArgs { /// generated route for /// [_i6.DeliverInterventionPage] class DeliverInterventionRoute - extends _i24.PageRouteInfo { + extends _i25.PageRouteInfo { DeliverInterventionRoute({ - _i25.Key? key, - _i26.RegistrationDeliveryLocalization? appLocalizations, + _i26.Key? key, + _i27.RegistrationDeliveryLocalization? appLocalizations, bool isEditing = false, - List<_i24.PageRouteInfo>? children, + List<_i25.PageRouteInfo>? children, }) : super( DeliverInterventionRoute.name, args: DeliverInterventionRouteArgs( @@ -554,8 +567,8 @@ class DeliverInterventionRoute static const String name = 'DeliverInterventionRoute'; - static const _i24.PageInfo page = - _i24.PageInfo(name); + static const _i25.PageInfo page = + _i25.PageInfo(name); } class DeliverInterventionRouteArgs { @@ -565,9 +578,9 @@ class DeliverInterventionRouteArgs { this.isEditing = false, }); - final _i25.Key? key; + final _i26.Key? key; - final _i26.RegistrationDeliveryLocalization? appLocalizations; + final _i27.RegistrationDeliveryLocalization? appLocalizations; final bool isEditing; @@ -578,13 +591,52 @@ class DeliverInterventionRouteArgs { } /// generated route for -/// [_i7.DoseAdministeredPage] +/// [_i7.DeliverySummaryPage] +class DeliverySummaryRoute + extends _i25.PageRouteInfo { + DeliverySummaryRoute({ + _i26.Key? key, + _i27.RegistrationDeliveryLocalization? appLocalizations, + List<_i25.PageRouteInfo>? children, + }) : super( + DeliverySummaryRoute.name, + args: DeliverySummaryRouteArgs( + key: key, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'DeliverySummaryRoute'; + + static const _i25.PageInfo page = + _i25.PageInfo(name); +} + +class DeliverySummaryRouteArgs { + const DeliverySummaryRouteArgs({ + this.key, + this.appLocalizations, + }); + + final _i26.Key? key; + + final _i27.RegistrationDeliveryLocalization? appLocalizations; + + @override + String toString() { + return 'DeliverySummaryRouteArgs{key: $key, appLocalizations: $appLocalizations}'; + } +} + +/// generated route for +/// [_i8.DoseAdministeredPage] class DoseAdministeredRoute - extends _i24.PageRouteInfo { + extends _i25.PageRouteInfo { DoseAdministeredRoute({ - _i25.Key? key, - _i26.RegistrationDeliveryLocalization? appLocalizations, - List<_i24.PageRouteInfo>? children, + _i26.Key? key, + _i27.RegistrationDeliveryLocalization? appLocalizations, + List<_i25.PageRouteInfo>? children, }) : super( DoseAdministeredRoute.name, args: DoseAdministeredRouteArgs( @@ -596,8 +648,8 @@ class DoseAdministeredRoute static const String name = 'DoseAdministeredRoute'; - static const _i24.PageInfo page = - _i24.PageInfo(name); + static const _i25.PageInfo page = + _i25.PageInfo(name); } class DoseAdministeredRouteArgs { @@ -606,9 +658,9 @@ class DoseAdministeredRouteArgs { this.appLocalizations, }); - final _i25.Key? key; + final _i26.Key? key; - final _i26.RegistrationDeliveryLocalization? appLocalizations; + final _i27.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -617,13 +669,13 @@ class DoseAdministeredRouteArgs { } /// generated route for -/// [_i8.FacilitySelectionPage] +/// [_i9.FacilitySelectionPage] class FacilitySelectionRoute - extends _i24.PageRouteInfo { + extends _i25.PageRouteInfo { FacilitySelectionRoute({ - _i25.Key? key, - required List<_i29.FacilityModel> facilities, - List<_i24.PageRouteInfo>? children, + _i26.Key? key, + required List<_i30.FacilityModel> facilities, + List<_i25.PageRouteInfo>? children, }) : super( FacilitySelectionRoute.name, args: FacilitySelectionRouteArgs( @@ -635,8 +687,8 @@ class FacilitySelectionRoute static const String name = 'FacilitySelectionRoute'; - static const _i24.PageInfo page = - _i24.PageInfo(name); + static const _i25.PageInfo page = + _i25.PageInfo(name); } class FacilitySelectionRouteArgs { @@ -645,9 +697,9 @@ class FacilitySelectionRouteArgs { required this.facilities, }); - final _i25.Key? key; + final _i26.Key? key; - final List<_i29.FacilityModel> facilities; + final List<_i30.FacilityModel> facilities; @override String toString() { @@ -656,12 +708,12 @@ class FacilitySelectionRouteArgs { } /// generated route for -/// [_i9.HouseDetailsPage] -class HouseDetailsRoute extends _i24.PageRouteInfo { +/// [_i10.HouseDetailsPage] +class HouseDetailsRoute extends _i25.PageRouteInfo { HouseDetailsRoute({ - _i25.Key? key, - _i26.RegistrationDeliveryLocalization? appLocalizations, - List<_i24.PageRouteInfo>? children, + _i26.Key? key, + _i27.RegistrationDeliveryLocalization? appLocalizations, + List<_i25.PageRouteInfo>? children, }) : super( HouseDetailsRoute.name, args: HouseDetailsRouteArgs( @@ -673,8 +725,8 @@ class HouseDetailsRoute extends _i24.PageRouteInfo { static const String name = 'HouseDetailsRoute'; - static const _i24.PageInfo page = - _i24.PageInfo(name); + static const _i25.PageInfo page = + _i25.PageInfo(name); } class HouseDetailsRouteArgs { @@ -683,9 +735,9 @@ class HouseDetailsRouteArgs { this.appLocalizations, }); - final _i25.Key? key; + final _i26.Key? key; - final _i26.RegistrationDeliveryLocalization? appLocalizations; + final _i27.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -694,13 +746,13 @@ class HouseDetailsRouteArgs { } /// generated route for -/// [_i10.HouseHoldDetailsPage] +/// [_i11.HouseHoldDetailsPage] class HouseHoldDetailsRoute - extends _i24.PageRouteInfo { + extends _i25.PageRouteInfo { HouseHoldDetailsRoute({ - _i25.Key? key, - _i26.RegistrationDeliveryLocalization? appLocalizations, - List<_i24.PageRouteInfo>? children, + _i26.Key? key, + _i27.RegistrationDeliveryLocalization? appLocalizations, + List<_i25.PageRouteInfo>? children, }) : super( HouseHoldDetailsRoute.name, args: HouseHoldDetailsRouteArgs( @@ -712,8 +764,8 @@ class HouseHoldDetailsRoute static const String name = 'HouseHoldDetailsRoute'; - static const _i24.PageInfo page = - _i24.PageInfo(name); + static const _i25.PageInfo page = + _i25.PageInfo(name); } class HouseHoldDetailsRouteArgs { @@ -722,9 +774,9 @@ class HouseHoldDetailsRouteArgs { this.appLocalizations, }); - final _i25.Key? key; + final _i26.Key? key; - final _i26.RegistrationDeliveryLocalization? appLocalizations; + final _i27.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -733,14 +785,14 @@ class HouseHoldDetailsRouteArgs { } /// generated route for -/// [_i11.HouseholdAcknowledgementPage] +/// [_i12.HouseholdAcknowledgementPage] class HouseholdAcknowledgementRoute - extends _i24.PageRouteInfo { + extends _i25.PageRouteInfo { HouseholdAcknowledgementRoute({ - _i25.Key? key, - _i26.RegistrationDeliveryLocalization? appLocalizations, + _i26.Key? key, + _i27.RegistrationDeliveryLocalization? appLocalizations, bool? enableViewHousehold, - List<_i24.PageRouteInfo>? children, + List<_i25.PageRouteInfo>? children, }) : super( HouseholdAcknowledgementRoute.name, args: HouseholdAcknowledgementRouteArgs( @@ -753,8 +805,8 @@ class HouseholdAcknowledgementRoute static const String name = 'HouseholdAcknowledgementRoute'; - static const _i24.PageInfo page = - _i24.PageInfo(name); + static const _i25.PageInfo page = + _i25.PageInfo(name); } class HouseholdAcknowledgementRouteArgs { @@ -764,9 +816,9 @@ class HouseholdAcknowledgementRouteArgs { this.enableViewHousehold, }); - final _i25.Key? key; + final _i26.Key? key; - final _i26.RegistrationDeliveryLocalization? appLocalizations; + final _i27.RegistrationDeliveryLocalization? appLocalizations; final bool? enableViewHousehold; @@ -777,13 +829,13 @@ class HouseholdAcknowledgementRouteArgs { } /// generated route for -/// [_i12.HouseholdLocationPage] +/// [_i13.HouseholdLocationPage] class HouseholdLocationRoute - extends _i24.PageRouteInfo { + extends _i25.PageRouteInfo { HouseholdLocationRoute({ - _i25.Key? key, - _i26.RegistrationDeliveryLocalization? appLocalizations, - List<_i24.PageRouteInfo>? children, + _i26.Key? key, + _i27.RegistrationDeliveryLocalization? appLocalizations, + List<_i25.PageRouteInfo>? children, }) : super( HouseholdLocationRoute.name, args: HouseholdLocationRouteArgs( @@ -795,8 +847,8 @@ class HouseholdLocationRoute static const String name = 'HouseholdLocationRoute'; - static const _i24.PageInfo page = - _i24.PageInfo(name); + static const _i25.PageInfo page = + _i25.PageInfo(name); } class HouseholdLocationRouteArgs { @@ -805,9 +857,9 @@ class HouseholdLocationRouteArgs { this.appLocalizations, }); - final _i25.Key? key; + final _i26.Key? key; - final _i26.RegistrationDeliveryLocalization? appLocalizations; + final _i27.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -816,13 +868,13 @@ class HouseholdLocationRouteArgs { } /// generated route for -/// [_i13.HouseholdOverviewPage] +/// [_i14.HouseholdOverviewPage] class HouseholdOverviewRoute - extends _i24.PageRouteInfo { + extends _i25.PageRouteInfo { HouseholdOverviewRoute({ - _i25.Key? key, - _i26.RegistrationDeliveryLocalization? appLocalizations, - List<_i24.PageRouteInfo>? children, + _i26.Key? key, + _i27.RegistrationDeliveryLocalization? appLocalizations, + List<_i25.PageRouteInfo>? children, }) : super( HouseholdOverviewRoute.name, args: HouseholdOverviewRouteArgs( @@ -834,8 +886,8 @@ class HouseholdOverviewRoute static const String name = 'HouseholdOverviewRoute'; - static const _i24.PageInfo page = - _i24.PageInfo(name); + static const _i25.PageInfo page = + _i25.PageInfo(name); } class HouseholdOverviewRouteArgs { @@ -844,9 +896,9 @@ class HouseholdOverviewRouteArgs { this.appLocalizations, }); - final _i25.Key? key; + final _i26.Key? key; - final _i26.RegistrationDeliveryLocalization? appLocalizations; + final _i27.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -855,14 +907,14 @@ class HouseholdOverviewRouteArgs { } /// generated route for -/// [_i14.IndividualDetailsPage] +/// [_i15.IndividualDetailsPage] class IndividualDetailsRoute - extends _i24.PageRouteInfo { + extends _i25.PageRouteInfo { IndividualDetailsRoute({ - _i25.Key? key, - _i26.RegistrationDeliveryLocalization? appLocalizations, + _i26.Key? key, + _i27.RegistrationDeliveryLocalization? appLocalizations, bool isHeadOfHousehold = false, - List<_i24.PageRouteInfo>? children, + List<_i25.PageRouteInfo>? children, }) : super( IndividualDetailsRoute.name, args: IndividualDetailsRouteArgs( @@ -875,8 +927,8 @@ class IndividualDetailsRoute static const String name = 'IndividualDetailsRoute'; - static const _i24.PageInfo page = - _i24.PageInfo(name); + static const _i25.PageInfo page = + _i25.PageInfo(name); } class IndividualDetailsRouteArgs { @@ -886,9 +938,9 @@ class IndividualDetailsRouteArgs { this.isHeadOfHousehold = false, }); - final _i25.Key? key; + final _i26.Key? key; - final _i26.RegistrationDeliveryLocalization? appLocalizations; + final _i27.RegistrationDeliveryLocalization? appLocalizations; final bool isHeadOfHousehold; @@ -899,14 +951,14 @@ class IndividualDetailsRouteArgs { } /// generated route for -/// [_i15.ReasonForDeletionPage] +/// [_i16.ReasonForDeletionPage] class ReasonForDeletionRoute - extends _i24.PageRouteInfo { + extends _i25.PageRouteInfo { ReasonForDeletionRoute({ - _i25.Key? key, - _i26.RegistrationDeliveryLocalization? appLocalizations, + _i26.Key? key, + _i27.RegistrationDeliveryLocalization? appLocalizations, bool isHousholdDelete = false, - List<_i24.PageRouteInfo>? children, + List<_i25.PageRouteInfo>? children, }) : super( ReasonForDeletionRoute.name, args: ReasonForDeletionRouteArgs( @@ -919,8 +971,8 @@ class ReasonForDeletionRoute static const String name = 'ReasonForDeletionRoute'; - static const _i24.PageInfo page = - _i24.PageInfo(name); + static const _i25.PageInfo page = + _i25.PageInfo(name); } class ReasonForDeletionRouteArgs { @@ -930,9 +982,9 @@ class ReasonForDeletionRouteArgs { this.isHousholdDelete = false, }); - final _i25.Key? key; + final _i26.Key? key; - final _i26.RegistrationDeliveryLocalization? appLocalizations; + final _i27.RegistrationDeliveryLocalization? appLocalizations; final bool isHousholdDelete; @@ -943,14 +995,14 @@ class ReasonForDeletionRouteArgs { } /// generated route for -/// [_i16.RecordPastDeliveryDetailsPage] +/// [_i17.RecordPastDeliveryDetailsPage] class RecordPastDeliveryDetailsRoute - extends _i24.PageRouteInfo { + extends _i25.PageRouteInfo { RecordPastDeliveryDetailsRoute({ - _i25.Key? key, - _i26.RegistrationDeliveryLocalization? appLocalizations, - List<_i30.TaskModel>? tasks, - List<_i24.PageRouteInfo>? children, + _i26.Key? key, + _i27.RegistrationDeliveryLocalization? appLocalizations, + List<_i31.TaskModel>? tasks, + List<_i25.PageRouteInfo>? children, }) : super( RecordPastDeliveryDetailsRoute.name, args: RecordPastDeliveryDetailsRouteArgs( @@ -963,8 +1015,8 @@ class RecordPastDeliveryDetailsRoute static const String name = 'RecordPastDeliveryDetailsRoute'; - static const _i24.PageInfo page = - _i24.PageInfo(name); + static const _i25.PageInfo page = + _i25.PageInfo(name); } class RecordPastDeliveryDetailsRouteArgs { @@ -974,11 +1026,11 @@ class RecordPastDeliveryDetailsRouteArgs { this.tasks, }); - final _i25.Key? key; + final _i26.Key? key; - final _i26.RegistrationDeliveryLocalization? appLocalizations; + final _i27.RegistrationDeliveryLocalization? appLocalizations; - final List<_i30.TaskModel>? tasks; + final List<_i31.TaskModel>? tasks; @override String toString() { @@ -987,15 +1039,15 @@ class RecordPastDeliveryDetailsRouteArgs { } /// generated route for -/// [_i17.ReferBeneficiaryPage] +/// [_i18.ReferBeneficiaryPage] class ReferBeneficiaryRoute - extends _i24.PageRouteInfo { + extends _i25.PageRouteInfo { ReferBeneficiaryRoute({ - _i25.Key? key, - _i26.RegistrationDeliveryLocalization? appLocalizations, + _i26.Key? key, + _i27.RegistrationDeliveryLocalization? appLocalizations, bool isEditing = false, required String projectBeneficiaryClientRefId, - List<_i24.PageRouteInfo>? children, + List<_i25.PageRouteInfo>? children, }) : super( ReferBeneficiaryRoute.name, args: ReferBeneficiaryRouteArgs( @@ -1009,8 +1061,8 @@ class ReferBeneficiaryRoute static const String name = 'ReferBeneficiaryRoute'; - static const _i24.PageInfo page = - _i24.PageInfo(name); + static const _i25.PageInfo page = + _i25.PageInfo(name); } class ReferBeneficiaryRouteArgs { @@ -1021,9 +1073,9 @@ class ReferBeneficiaryRouteArgs { required this.projectBeneficiaryClientRefId, }); - final _i25.Key? key; + final _i26.Key? key; - final _i26.RegistrationDeliveryLocalization? appLocalizations; + final _i27.RegistrationDeliveryLocalization? appLocalizations; final bool isEditing; @@ -1036,13 +1088,13 @@ class ReferBeneficiaryRouteArgs { } /// generated route for -/// [_i18.RefusedDeliveryPage] +/// [_i19.RefusedDeliveryPage] class RefusedDeliveryRoute - extends _i24.PageRouteInfo { + extends _i25.PageRouteInfo { RefusedDeliveryRoute({ - _i25.Key? key, - _i26.RegistrationDeliveryLocalization? appLocalizations, - List<_i24.PageRouteInfo>? children, + _i26.Key? key, + _i27.RegistrationDeliveryLocalization? appLocalizations, + List<_i25.PageRouteInfo>? children, }) : super( RefusedDeliveryRoute.name, args: RefusedDeliveryRouteArgs( @@ -1054,8 +1106,8 @@ class RefusedDeliveryRoute static const String name = 'RefusedDeliveryRoute'; - static const _i24.PageInfo page = - _i24.PageInfo(name); + static const _i25.PageInfo page = + _i25.PageInfo(name); } class RefusedDeliveryRouteArgs { @@ -1064,9 +1116,9 @@ class RefusedDeliveryRouteArgs { this.appLocalizations, }); - final _i25.Key? key; + final _i26.Key? key; - final _i26.RegistrationDeliveryLocalization? appLocalizations; + final _i27.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -1075,9 +1127,9 @@ class RefusedDeliveryRouteArgs { } /// generated route for -/// [_i19.RegistrationDeliveryWrapperPage] -class RegistrationDeliveryWrapperRoute extends _i24.PageRouteInfo { - const RegistrationDeliveryWrapperRoute({List<_i24.PageRouteInfo>? children}) +/// [_i20.RegistrationDeliveryWrapperPage] +class RegistrationDeliveryWrapperRoute extends _i25.PageRouteInfo { + const RegistrationDeliveryWrapperRoute({List<_i25.PageRouteInfo>? children}) : super( RegistrationDeliveryWrapperRoute.name, initialChildren: children, @@ -1085,17 +1137,17 @@ class RegistrationDeliveryWrapperRoute extends _i24.PageRouteInfo { static const String name = 'RegistrationDeliveryWrapperRoute'; - static const _i24.PageInfo page = _i24.PageInfo(name); + static const _i25.PageInfo page = _i25.PageInfo(name); } /// generated route for -/// [_i20.SearchBeneficiaryPage] +/// [_i21.SearchBeneficiaryPage] class SearchBeneficiaryRoute - extends _i24.PageRouteInfo { + extends _i25.PageRouteInfo { SearchBeneficiaryRoute({ - _i25.Key? key, - _i26.RegistrationDeliveryLocalization? appLocalizations, - List<_i24.PageRouteInfo>? children, + _i26.Key? key, + _i27.RegistrationDeliveryLocalization? appLocalizations, + List<_i25.PageRouteInfo>? children, }) : super( SearchBeneficiaryRoute.name, args: SearchBeneficiaryRouteArgs( @@ -1107,8 +1159,8 @@ class SearchBeneficiaryRoute static const String name = 'SearchBeneficiaryRoute'; - static const _i24.PageInfo page = - _i24.PageInfo(name); + static const _i25.PageInfo page = + _i25.PageInfo(name); } class SearchBeneficiaryRouteArgs { @@ -1117,9 +1169,9 @@ class SearchBeneficiaryRouteArgs { this.appLocalizations, }); - final _i25.Key? key; + final _i26.Key? key; - final _i26.RegistrationDeliveryLocalization? appLocalizations; + final _i27.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { @@ -1128,14 +1180,14 @@ class SearchBeneficiaryRouteArgs { } /// generated route for -/// [_i21.SideEffectsPage] -class SideEffectsRoute extends _i24.PageRouteInfo { +/// [_i22.SideEffectsPage] +class SideEffectsRoute extends _i25.PageRouteInfo { SideEffectsRoute({ - _i25.Key? key, - _i26.RegistrationDeliveryLocalization? appLocalizations, - required List<_i30.TaskModel> tasks, + _i26.Key? key, + _i27.RegistrationDeliveryLocalization? appLocalizations, + required List<_i31.TaskModel> tasks, bool isEditing = false, - List<_i24.PageRouteInfo>? children, + List<_i25.PageRouteInfo>? children, }) : super( SideEffectsRoute.name, args: SideEffectsRouteArgs( @@ -1149,8 +1201,8 @@ class SideEffectsRoute extends _i24.PageRouteInfo { static const String name = 'SideEffectsRoute'; - static const _i24.PageInfo page = - _i24.PageInfo(name); + static const _i25.PageInfo page = + _i25.PageInfo(name); } class SideEffectsRouteArgs { @@ -1161,11 +1213,11 @@ class SideEffectsRouteArgs { this.isEditing = false, }); - final _i25.Key? key; + final _i26.Key? key; - final _i26.RegistrationDeliveryLocalization? appLocalizations; + final _i27.RegistrationDeliveryLocalization? appLocalizations; - final List<_i30.TaskModel> tasks; + final List<_i31.TaskModel> tasks; final bool isEditing; @@ -1176,14 +1228,14 @@ class SideEffectsRouteArgs { } /// generated route for -/// [_i22.SplashAcknowledgementPage] +/// [_i23.SplashAcknowledgementPage] class SplashAcknowledgementRoute - extends _i24.PageRouteInfo { + extends _i25.PageRouteInfo { SplashAcknowledgementRoute({ - _i25.Key? key, - _i26.RegistrationDeliveryLocalization? appLocalizations, + _i26.Key? key, + _i27.RegistrationDeliveryLocalization? appLocalizations, bool? enableBackToSearch, - List<_i24.PageRouteInfo>? children, + List<_i25.PageRouteInfo>? children, }) : super( SplashAcknowledgementRoute.name, args: SplashAcknowledgementRouteArgs( @@ -1196,8 +1248,8 @@ class SplashAcknowledgementRoute static const String name = 'SplashAcknowledgementRoute'; - static const _i24.PageInfo page = - _i24.PageInfo(name); + static const _i25.PageInfo page = + _i25.PageInfo(name); } class SplashAcknowledgementRouteArgs { @@ -1207,9 +1259,9 @@ class SplashAcknowledgementRouteArgs { this.enableBackToSearch, }); - final _i25.Key? key; + final _i26.Key? key; - final _i26.RegistrationDeliveryLocalization? appLocalizations; + final _i27.RegistrationDeliveryLocalization? appLocalizations; final bool? enableBackToSearch; @@ -1220,12 +1272,12 @@ class SplashAcknowledgementRouteArgs { } /// generated route for -/// [_i23.SummaryPage] -class SummaryRoute extends _i24.PageRouteInfo { +/// [_i24.SummaryPage] +class SummaryRoute extends _i25.PageRouteInfo { SummaryRoute({ - _i25.Key? key, - _i26.RegistrationDeliveryLocalization? appLocalizations, - List<_i24.PageRouteInfo>? children, + _i26.Key? key, + _i27.RegistrationDeliveryLocalization? appLocalizations, + List<_i25.PageRouteInfo>? children, }) : super( SummaryRoute.name, args: SummaryRouteArgs( @@ -1237,8 +1289,8 @@ class SummaryRoute extends _i24.PageRouteInfo { static const String name = 'SummaryRoute'; - static const _i24.PageInfo page = - _i24.PageInfo(name); + static const _i25.PageInfo page = + _i25.PageInfo(name); } class SummaryRouteArgs { @@ -1247,9 +1299,9 @@ class SummaryRouteArgs { this.appLocalizations, }); - final _i25.Key? key; + final _i26.Key? key; - final _i26.RegistrationDeliveryLocalization? appLocalizations; + final _i27.RegistrationDeliveryLocalization? appLocalizations; @override String toString() { diff --git a/packages/registration_delivery/lib/utils/constants.dart b/packages/registration_delivery/lib/utils/constants.dart index f644b71d5..9859c90e4 100644 --- a/packages/registration_delivery/lib/utils/constants.dart +++ b/packages/registration_delivery/lib/utils/constants.dart @@ -9,6 +9,7 @@ class Constants { final String deliveryTeam = 'Delivery Team'; final String notAvailable = 'N/A'; final String dateTimeExtFormat = 'dd-MM-yyyy'; + final String dateMonthYearFormat = 'dd MMMM yyyy'; static const String checklistViewDateFormat = 'dd/MM/yyyy hh:mm a'; } diff --git a/packages/registration_delivery/lib/utils/i18_key_constants.dart b/packages/registration_delivery/lib/utils/i18_key_constants.dart index 1a09daeee..2f5d76a3b 100644 --- a/packages/registration_delivery/lib/utils/i18_key_constants.dart +++ b/packages/registration_delivery/lib/utils/i18_key_constants.dart @@ -116,6 +116,9 @@ class Common { String get ageInMonths => 'AGE_IN_MONTHS_LABEL'; String get locationCapturing => 'CAPTURING_LOCATION'; String get locationCaptured => 'LOCATION_CAPTURED'; + String get coreCommonSummaryDetails => 'CORE_COMMON_SUMMARY_DETAILS'; + + String get metersNear => 'METERS_NEAR'; } class SearchBeneficiary { @@ -297,6 +300,7 @@ class HouseholdLocation { 'HOUSEHOLD_LOCATION_DESCRIPTION_TEXT'; String get administrationAreaFormLabel => 'ADMINISTRATION_AREA_FORM_LABEL'; + String get gpsAccuracyLabel => 'CLOSE_HOUSEHOLD_GPS_ACCURACY_LABEL'; String get administrationAreaRequiredValidation => 'HOUSEHOLD_LOCATION_ADMINISTRATION_AREA_REQUIRED_VALIDATION'; @@ -507,6 +511,9 @@ class DeliverIntervention { String get resourceDeliveredLabel => 'DELIVER_INTERVENTION_RESOURCE_DELIVERED_LABEL'; + String get typeOfInsecticideUsed => + 'DELIVER_INTERVENTION_TYPE_OF_INSECTICIDE_USED'; + String get resourceDeliveredError => 'DELIVER_INTERVENTION_RESOURCE_DELIVERED_ERROR'; @@ -516,6 +523,9 @@ class DeliverIntervention { String get deliveryCommentLabel => 'DELIVER_INTERVENTION_DELIVERY_COMMENT_LABEL'; + String get deliveryDetailsLabel => + 'DELIVER_INTERVENTION_DELIVERY_DETAILS_LABEL'; + String get idTypeText => 'DELIVER_INTERVENTION_ID_TYPE_TEXT'; String get idNumberText => 'DELIVER_INTERVENTION_ID_NUMBER_TEXT'; @@ -724,6 +734,10 @@ class HouseholdLocationShowcase { return 'HOUSEHOLD_LOCATION_SHOWCASE_ADMINISTRATIVE_AREA'; } + String get gpsAccuracy { + return 'HOUSEHOLD_LOCATION_SHOWCASE_GPS_ACCURACY_LABEL'; + } + String get landmark { return 'HOUSEHOLD_LOCATION_SHOWCASE_LANDMARK'; } diff --git a/packages/registration_delivery/lib/utils/utils.dart b/packages/registration_delivery/lib/utils/utils.dart index 6f43efbe7..25bac280a 100644 --- a/packages/registration_delivery/lib/utils/utils.dart +++ b/packages/registration_delivery/lib/utils/utils.dart @@ -47,7 +47,7 @@ class CustomValidator { ) { if (control.value != null && control.value.toString().isNotEmpty && - control.value.toString().length < 10) { + control.value.toString().length < 9) { return {'minLength': true}; } } @@ -89,7 +89,7 @@ bool checkIfBeneficiaryRefused( ) { final isBeneficiaryRefused = (tasks != null && (tasks ?? []).isNotEmpty && - tasks.last.status == Status.beneficiaryRefused.toValue()); + tasks.last.status == Status.administeredFailed.toValue()); return isBeneficiaryRefused; } @@ -332,7 +332,7 @@ class RegistrationDeliverySingleton { required List? deliveryCommentOptions, required List? symptomsTypes, required List? searchHouseHoldFilter, - required List? referralReasons, + required List? referralReasons, required List? houseStructureTypes, required List? refusalReasons, }) { @@ -428,3 +428,30 @@ bool allDosesDelivered( } } } + +Status getTaskStatus(Iterable tasks) { + final statusMap = { + Status.delivered.toValue(): Status.delivered, + Status.notDelivered.toValue(): Status.notDelivered, + Status.visited.toValue(): Status.visited, + Status.notVisited.toValue(): Status.notVisited, + Status.beneficiaryRefused.toValue(): Status.beneficiaryRefused, + Status.beneficiaryReferred.toValue(): Status.beneficiaryReferred, + Status.administeredSuccess.toValue(): Status.administeredSuccess, + Status.administeredFailed.toValue(): Status.administeredFailed, + Status.inComplete.toValue(): Status.inComplete, + Status.toAdminister.toValue(): Status.toAdminister, + Status.closeHousehold.toValue(): Status.closeHousehold, + }; + + if (tasks.isEmpty) { + return Status.registered.toValue(); + } else { + final mappedStatus = statusMap[tasks.last.status]; + if (mappedStatus != null) { + return mappedStatus; + } + } + + return Status.registered.toValue(); +} diff --git a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart index b36483f2a..753cf2918 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart @@ -6,16 +6,16 @@ import '../../models/entities/status.dart'; class BeneficiaryCard extends StatelessWidget { final String title; - final String subtitle; - final String description; + final String? subtitle; + final String? description; final String? status; final String? statusType; const BeneficiaryCard({ super.key, required this.title, - required this.subtitle, - required this.description, + this.subtitle, + this.description, this.status, this.statusType, }); @@ -38,7 +38,8 @@ class BeneficiaryCard extends StatelessWidget { Offstage( offstage: status == null, child: status == Status.visited.toValue() || - status == Status.registered.toValue() + status == Status.registered.toValue() || + status == Status.administeredSuccess.toValue() ? DigitIconButton( icon: Icons.check_circle, iconText: RegistrationDeliveryLocalization.of(context) @@ -54,20 +55,22 @@ class BeneficiaryCard extends StatelessWidget { iconColor: theme.colorScheme.error, ), ), - Padding( - padding: const EdgeInsets.all(4), - child: Text( - subtitle, - style: theme.textTheme.bodyMedium, + if (subtitle != null) + Padding( + padding: const EdgeInsets.all(4), + child: Text( + subtitle!, + style: theme.textTheme.bodyMedium, + ), ), - ), - Padding( - padding: const EdgeInsets.all(4), - child: Text( - description, - style: theme.textTheme.bodySmall, + if (description != null) + Padding( + padding: const EdgeInsets.all(4), + child: Text( + description!, + style: theme.textTheme.bodySmall, + ), ), - ), ], ); } diff --git a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart index 865a9b289..549104966 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart @@ -29,10 +29,10 @@ class ViewBeneficiaryCard extends LocalizedStatefulWidget { }); @override - State createState() => _ViewBeneficiaryCardState(); + State createState() => ViewBeneficiaryCardState(); } -class _ViewBeneficiaryCardState extends LocalizedState { +class ViewBeneficiaryCardState extends LocalizedState { late HouseholdMemberWrapper householdMember; @override @@ -101,7 +101,8 @@ class _ViewBeneficiaryCardState extends LocalizedState { } }).toList(); - final taskData = (projectBeneficiary ?? []).isNotEmpty + final taskData = (projectBeneficiary ?? []).isNotEmpty && + householdMember.tasks != null ? householdMember.tasks ?.where((element) => element.projectBeneficiaryClientReferenceId == @@ -249,8 +250,12 @@ class _ViewBeneficiaryCardState extends LocalizedState { months: ageInMonths, ), RegistrationDeliverySingleton().projectType, - householdMember.tasks?.last, - householdMember.sideEffects, + (householdMember.tasks ?? []).isNotEmpty + ? householdMember.tasks?.last + : null, + (householdMember.sideEffects ?? []).isNotEmpty + ? householdMember.sideEffects + : null, ); final isBeneficiaryRefused = @@ -304,7 +309,10 @@ class _ViewBeneficiaryCardState extends LocalizedState { householdMember.household?.clientReferenceId; } }).toList(), - isNotEligible, + RegistrationDeliverySingleton().beneficiaryType == + BeneficiaryType.individual + ? isNotEligible + : false, isBeneficiaryRefused), title: [ householdMember.headOfHousehold?.name?.givenName, @@ -418,29 +426,4 @@ class _ViewBeneficiaryCardState extends LocalizedState { return Status.notRegistered.toValue(); } } - - Status getTaskStatus(Iterable tasks) { - final statusMap = { - Status.delivered.toValue(): Status.delivered, - Status.notDelivered.toValue(): Status.notDelivered, - Status.visited.toValue(): Status.visited, - Status.notVisited.toValue(): Status.notVisited, - Status.beneficiaryRefused.toValue(): Status.beneficiaryRefused, - Status.beneficiaryReferred.toValue(): Status.beneficiaryReferred, - Status.administeredSuccess.toValue(): Status.administeredSuccess, - Status.administeredFailed.toValue(): Status.administeredFailed, - Status.inComplete.toValue(): Status.inComplete, - Status.toAdminister.toValue(): Status.toAdminister, - Status.closed.toValue(): Status.closed, - }; - - for (var task in tasks) { - final mappedStatus = statusMap[task.status]; - if (mappedStatus != null) { - return mappedStatus; - } - } - - return Status.registered.toValue(); - } } diff --git a/packages/registration_delivery/lib/widgets/member_card/member_card.dart b/packages/registration_delivery/lib/widgets/member_card/member_card.dart index dee7c4834..d7a6ed604 100644 --- a/packages/registration_delivery/lib/widgets/member_card/member_card.dart +++ b/packages/registration_delivery/lib/widgets/member_card/member_card.dart @@ -105,6 +105,7 @@ class MemberCard extends StatelessWidget { child: Align( alignment: Alignment.topRight, child: DigitIconButton( + buttonDisabled: (projectBeneficiaries ?? []).isEmpty, onPressed: (projectBeneficiaries ?? []).isEmpty ? null : () => DigitActionDialog.show( diff --git a/packages/registration_delivery/lib/widgets/showcase/config/household_details.dart b/packages/registration_delivery/lib/widgets/showcase/config/household_details.dart index a8ca14ae5..92541d23b 100644 --- a/packages/registration_delivery/lib/widgets/showcase/config/household_details.dart +++ b/packages/registration_delivery/lib/widgets/showcase/config/household_details.dart @@ -11,6 +11,8 @@ class _HouseholdDetailsShowcaseData { List get showcaseData => [ dateOfRegistration, numberOfMembersLivingInHousehold, + numberOfPregnantWomenInHousehold, + numberOfChildrenBelow5InHousehold, ]; final dateOfRegistration = ShowcaseItemBuilder( diff --git a/packages/registration_delivery/lib/widgets/showcase/config/household_location.dart b/packages/registration_delivery/lib/widgets/showcase/config/household_location.dart index c0f57b187..5a164ce5a 100644 --- a/packages/registration_delivery/lib/widgets/showcase/config/household_location.dart +++ b/packages/registration_delivery/lib/widgets/showcase/config/household_location.dart @@ -10,6 +10,7 @@ class _HouseholdLocationShowcaseData { List get showcaseData => [ administrativeArea, + gpsAccuracy, addressLine1, addressLine2, landmark, @@ -20,6 +21,10 @@ class _HouseholdLocationShowcaseData { messageLocalizationKey: i18.householdLocationShowcase.administrativeArea, ); + final gpsAccuracy = ShowcaseItemBuilder( + messageLocalizationKey: i18.householdLocationShowcase.gpsAccuracy, + ); + final landmark = ShowcaseItemBuilder( messageLocalizationKey: i18.householdLocationShowcase.landmark, ); diff --git a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart index 5060ee501..aa317a36e 100644 --- a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart +++ b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart @@ -37,6 +37,7 @@ class StatusFilterState extends LocalizedState { SelectionBox( options: getFilters() ?? [], allowMultipleSelection: false, + equalWidthOptions: true, initialSelection: [ ...selectedButtons ], // [TODO : fix selected not displaying] @@ -110,9 +111,11 @@ class StatusFilterState extends LocalizedState { void assignSelectedButtons() { setState(() { selectedButtons = widget.selectedFilters! - .map((e) => Status.values.where((element) => element.toValue() == e)) + .map((e) => Status.values.where((element) => element.name == e)) .expand((element) => element) .toList(); + + }); } } diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index db910c2a5..204b9fbcc 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "4eec93681221723a686ad580c2e7d960e1017cf1a4e0a263c2573c2c6b0bf5cd" - url: "https://pub.dev" - source: hosted - version: "1.3.25" analyzer: dependency: transitive description: @@ -45,10 +37,10 @@ packages: dependency: transitive description: name: archive - sha256: "6bd38d335f0954f5fad9c79e614604fbf03a0e5b975923dd001b6ea965ef5b4b" + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d url: "https://pub.dev" source: hosted - version: "3.6.0" + version: "3.6.1" args: dependency: transitive description: @@ -253,18 +245,18 @@ packages: dependency: transitive description: name: camera_platform_interface - sha256: a250314a48ea337b35909a4c9d5416a208d736dcb01d0b02c6af122be66660b0 + sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 url: "https://pub.dev" source: hosted - version: "2.7.4" + version: "2.8.0" camera_web: dependency: transitive description: name: camera_web - sha256: "9e9aba2fbab77ce2472924196ff8ac4dd8f9126c4f9a3096171cd1d870d6b26c" + sha256: b9235ec0a2ce949daec546f1f3d86f05c3921ed31c7d9ab6b7c03214d152fc2d url: "https://pub.dev" source: hosted - version: "0.3.3" + version: "0.3.4" characters: dependency: transitive description: @@ -305,6 +297,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" + closed_household: + dependency: "direct main" + description: + name: closed_household + sha256: "47d46553b034fceac6acda81e16f10b2d51a93cb509f5d596480a2bb6ff8aea3" + url: "https://pub.dev" + source: hosted + version: "0.0.0-dev.1" code_builder: dependency: transitive description: @@ -428,33 +428,26 @@ packages: dependency: "direct main" description: name: digit_components - sha256: c9fb77852995d45d26e7bec9c945002f33c99d1399cfe30696a925d3ed3ae57d + sha256: "5c4702cfa2d05aa98756c1ecdae2593ad5cc4254a47341588b3269e004a22525" url: "https://pub.dev" source: hosted - version: "1.0.0+5" + version: "1.0.0+7" digit_data_model: dependency: "direct main" description: name: digit_data_model - sha256: "0e1ec8e4d2776fcc4a8118ac85043b8876466ec7399c14880f3d585ad3586ef6" + sha256: "1258b5e96c6f63d32ab042a1d739360c93cab302e2f230b416dc4c54021e5e55" url: "https://pub.dev" source: hosted - version: "1.0.2" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" + version: "1.0.3-dev.1" digit_scanner: dependency: "direct main" description: name: digit_scanner - sha256: a040c9c413436aeb953fdea3bc99ef618641189b06e8f155d84ac83ba8d40fd1 + sha256: bc172291df5ffe720e3d471fbc5c542086b8efecbdb6e25ee737381cc47c8e05 url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.0.3-dev.1" digit_showcase: dependency: "direct main" description: @@ -467,10 +460,18 @@ packages: dependency: transitive description: name: dio - sha256: "11e40df547d418cc0c4900a9318b26304e665da6fa4755399a9ff9efd09034b5" + sha256: e17f6b3097b8c51b72c74c9f071a605c47bcc8893839bd66732457a5ebe73714 url: "https://pub.dev" source: hosted - version: "5.4.3+1" + version: "5.5.0+1" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac" + url: "https://pub.dev" + source: hosted + version: "1.0.1" drift: dependency: "direct main" description: @@ -527,46 +528,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "53316975310c8af75a96e365f9fccb67d1c544ef0acdbf0d88bbe30eedd1c4f9" - url: "https://pub.dev" - source: hosted - version: "2.27.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: "1003a5a03a61fc9a22ef49f37cbcb9e46c86313a7b2e7029b9390cf8c6fc32cb" - url: "https://pub.dev" - source: hosted - version: "5.1.0" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: c8e1d59385eee98de63c92f961d2a7062c5d9a65e7f45bdc7f1b0b205aab2492 - url: "https://pub.dev" - source: hosted - version: "2.11.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: c4f1b723d417bc9c4774810e774ff91df8fb0032d33fb2888b2c887e865581b8 - url: "https://pub.dev" - source: hosted - version: "3.4.18" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: c5a11fca3df76a98e3fa68fde8b10a08aacb9a7639f619fbfd4dad6c67a08643 - url: "https://pub.dev" - source: hosted - version: "3.6.25" fixnum: dependency: transitive description: @@ -584,10 +545,10 @@ packages: dependency: "direct main" description: name: flutter_bloc - sha256: f0ecf6e6eb955193ca60af2d5ca39565a86b8a142452c5b24d96fb477428f4d2 + sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a url: "https://pub.dev" source: hosted - version: "8.1.5" + version: "8.1.6" flutter_focus_watcher: dependency: transitive description: @@ -722,10 +683,10 @@ packages: dependency: "direct main" description: name: freezed_annotation - sha256: c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d + sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.4" frontend_server_client: dependency: transitive description: @@ -778,10 +739,10 @@ packages: dependency: "direct main" description: name: gs1_barcode_parser - sha256: "9aaff47bdab7177deaf9248cc861ef41cf611d3f828498cb40b64bedcbf53391" + sha256: fbbabda525e35dc1e998f22584178174a39cfc86ea691e3ac8dfb29e767cf7c1 url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.6" horizontal_data_table: dependency: transitive description: @@ -962,10 +923,10 @@ packages: dependency: "direct dev" description: name: mocktail - sha256: c4b5007d91ca4f67256e720cb1b6d704e79a510183a12fa551021f652577dce6 + sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" nested: dependency: transitive description: @@ -1074,10 +1035,10 @@ packages: dependency: transitive description: name: path_provider_windows - sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.3.0" petitparser: dependency: transitive description: @@ -1090,10 +1051,10 @@ packages: dependency: transitive description: name: platform - sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" + sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" url: "https://pub.dev" source: hosted - version: "3.1.4" + version: "3.1.5" plugin_platform_interface: dependency: transitive description: @@ -1162,10 +1123,10 @@ packages: dependency: transitive description: name: pubspec_parse - sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 + sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 url: "https://pub.dev" source: hosted - version: "1.2.3" + version: "1.3.0" reactive_flutter_typeahead: dependency: transitive description: @@ -1295,10 +1256,10 @@ packages: dependency: "direct main" description: name: sqlite3_flutter_libs - sha256: fb2a106a2ea6042fe57de2c47074cc31539a941819c91e105b864744605da3f5 + sha256: "62bbb4073edbcdf53f40c80775f33eea01d301b7b81417e5b3fb7395416258c1" url: "https://pub.dev" source: hosted - version: "0.5.21" + version: "0.5.24" sqlparser: dependency: transitive description: diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index 37df4f265..79ea52a50 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -1,6 +1,6 @@ name: registration_delivery description: This package enables health facility workers to register a household and individual members and deliver the resources. -version: 0.0.0-dev.10 +version: 1.0.3-dev.2 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/registration_delivery repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0+5 + digit_components: ^1.0.0+7 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 @@ -29,10 +29,10 @@ dependencies: uuid: ^3.0.6 recase: ^4.1.0 pluto_grid: ^7.0.1 - digit_scanner: ^1.0.2 + digit_scanner: ^1.0.3-dev.1 gs1_barcode_parser: ^1.0.5 auto_route: ^7.8.4 - digit_data_model: ^1.0.2 + digit_data_model: ^1.0.3-dev.1 package_info_plus: ^5.0.1 digit_showcase: ^1.0.0 collection: ^1.16.0 @@ -40,6 +40,7 @@ dependencies: stream_transform: ^2.1.0 async: ^2.11.0 formula_parser: ^2.0.1 + closed_household: ^0.0.0-dev.1 dev_dependencies: diff --git a/tools/registration_delivery_imports.dart b/tools/registration_delivery_imports.dart index 718b3d9e0..5e058d11c 100644 --- a/tools/registration_delivery_imports.dart +++ b/tools/registration_delivery_imports.dart @@ -869,6 +869,10 @@ void _addRegistrationRoutesAndImportToRouterFile(String routerFilePath) { page: HouseholdAcknowledgementRoute.page, path: 'household-acknowledgement', ), + AutoRoute( + page: DeliverySummaryRoute.page, + path: 'delivery-summary', + ), ], ), ]), From 09c75083d1d5c66679fe8a2f23d4dae8cdfb6f4a Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Sun, 28 Jul 2024 22:45:36 +0530 Subject: [PATCH 058/241] Hcmpre 155 - ClosedHousehold flow change (#478) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * added translator for administration area * Fixed Facility search based on tenant ID * Added disable battery optimization permission for background service * Added disable battery optimization ask permission on App start and background service start * HLM-5984:: Get Precise location on Submitting latitude longitude details * Reverted install_bricks.sh * added new status REGISTERED, NOT_REGISTERED updated conditional check for status by project beneficiaries * added static status_filter.dart integration in search_beneficiary.dart * TODO for selected_filters display condition * integrated household search filters with mdms implemented search based on filters with pagination for Registered and NotRegistered * updated status filter component merge with develop * create individual_global_search and implemented search * Auto Create Project Beneficiary on Edit Household, and disable record delivery if no project beneficiary present * Conflicts resolved * implemented household_global_search.dart fixed individual_global_search.dart * updated proximity search for household_global_search.dart * Pop State recapture during registration flow, Disable delivery flow for individual based campaign if project beneficiaries is empty (#456) * updated class state from private for customization override in registration_delivery and inventory added pagination for filter search TODO: combination search for registered and not registered needs fix which return only last selected results * adding missed changes for last commit * displaying selected filter value for applied filters in search_beneficiary.dart * updated changelog for inventory and registration_delivery for new dev versions * updated pubspec lock of registration_delivery * removed multiple filter selection modified filter search * fixed delivery team scanner issues in stock_details.dart * Fixed - missing addition of scanned resources to additional fields filter search bug fixes * HCMPRE-74, HCMPRE-82, HCMPRE-83:: Household Reload Fix, Validations for Household details added (#458) * updated individual global search added beneficiary type check in view_beneficiary_card.dart removed commented code in household_overview.dart * Added null check for beneficiaryTag in closed_household_summary.dart * Exposed Registration delivery pages * updated remote repository and some miner fixes (#461) Co-authored-by: rachana-egov * HCMPRE-82:: Validations and Bug Fixes * small css fixes (#462) Co-authored-by: rachana-egov Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> * merge fix * added closed household search * status model fix * Closed-household-registration (#464) * closed-household-registration * closed-household-registration * updated pub file --------- Co-authored-by: rachana-egov * added closed household init file modified user_action.dart model and db corrected modified closed household status * updated registration for closed household * added closed_household search and updating closed household status * clearing search before navigating to registration flow * getting last tasks in household_overview.dart * HCMPRE-107:: Summary page added for Delivery Flow, HCMPRE-111:: Disable Delete household if beneficiary not present (#463) * Validation and gps fixes * fixed closed household count clearing closedhould results for clear * pagination fix for closed household * sync down for closed household, updated scan voucher button, and remove the tag when we navigate to a different page (#465) Co-authored-by: rachana-egov * DeliverySummary Route added to main app * seperated closedhousehold search Bug fixes - HCMPRE-112, 110, 113 * updated all the points of this ticket HCMPRE-120 (#466) Co-authored-by: rachana-egov * Bug Fixes, dev version release of packages * HCMPRE-119:: IRS Demo fixes (#468) * HCMPRE-119:: IRS Demo fixes * Removed unused code * updated closed button action to push closedhousehold tasks filter with last fix * updated validation for closed household name and fix error message size (#470) Co-authored-by: rachana-egov * Irs demo fix patch (#469) * HCMPRE-119:: IRS Demo fixes * Removed unused code * Edit Household if no project beneficiary fix * reverted hiding of digit search bar when closed filter is applied * status update based on last task status in household_overview.dart mapped administered success in beneficiary_card.dart moved getstatus to utils.dart * fixed offset increasing twice * HCMPRE-121:: Enter manual code fix and Search Beneficiary fixes (#471) * HCMPRE-121:: Enter manual code fix and Search Beneficiary fixes * Added date formats to constants * fixed offset increasing twice closed household distance fix emitting scanner state loading * dev version bump-up for registration and scanner * version updates for packages * View Household button added in delete individual success page, Search project beneficiary fix * added close button to close the filter and disabled the clear button … (#475) * added close button to close the filter and disabled the clear button unless something is selected * added validation for closed household head name same as individual * updated the condition for validation of closehousehold head --------- Co-authored-by: rachana-egov * View Household button added in delete individual success page, Search project beneficiary fix (#474) * Search beneficiary fix * Search beneficiary fix * Bloc dispose fix * Bloc dispose fix * Updated task based search for household * Modified closed household package to use registration flow for creating a household and related data along with task as closed deleted user_action from data_model package Updating closed_household to not_delivered status after closed household registration * version updates of closed_household, digit_components, digit_data_model, registration_delivery * version upgrade for registration_delivery --------- Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: rachana-egov --- .../lib/app.dart | 18 +- .../no_sql/schema/entity_mapper.dart | 5 - .../lib/data/network_manager.dart | 8 - .../lib/data/repositories/sync/sync_down.dart | 49 - .../lib/pages/home.dart | 82 +- .../lib/utils/background_service.dart | 2 +- .../lib/utils/constants.dart | 8 - .../lib/utils/utils.dart | 5 - .../network_manager_provider_wrapper.dart | 19 - .../pubspec.lock | 18 +- .../pubspec.yaml | 5 +- packages/closed_household/CHANGELOG.md | 4 + .../lib/blocs/closed_household.dart | 385 ++++-- .../lib/blocs/closed_household.freezed.dart | 719 +++++------ .../lib/closed_household.dart | 8 +- .../lib/closed_household.init.dart | 16 - .../local/base/user_action_base.dart | 17 - .../data/repositories/local/user_action.dart | 167 --- .../lib/data/repositories/oplog/oplog.dart | 32 - .../data/repositories/remote/user_action.dart | 15 - .../lib/models/entities/action.dart | 9 - .../lib/models/entities/action.mapper.dart | 57 - .../lib/models/entities/status.dart | 12 - .../lib/models/entities/status.mapper.dart | 65 - .../lib/models/entities/user_action.dart | 126 -- .../models/entities/user_action.mapper.dart | 704 ----------- .../lib/pages/closed_household_details.dart | 57 +- .../lib/pages/closed_household_summary.dart | 77 +- .../lib/pages/closed_household_wrapper.dart | 38 +- .../router/closed_household_router.gm.dart | 40 +- .../closed_household/lib/utils/utils.dart | 26 +- packages/closed_household/pubspec.yaml | 7 +- packages/digit_components/CHANGELOG.md | 3 + .../digit_components/example/pubspec.lock | 2 +- .../lib/widgets/digit_dialog.dart | 11 +- packages/digit_components/pubspec.yaml | 2 +- packages/digit_data_model/CHANGELOG.md | 3 + .../local_store/no_sql/schema/oplog.g.dart | 2 - .../data/local_store/sql_store/sql_store.dart | 2 - .../local_store/sql_store/sql_store.g.dart | 1117 ----------------- .../tables/package_tables/user_action.dart | 40 - packages/digit_data_model/lib/data_model.dart | 1 - .../digit_data_model/lib/utils/constants.dart | 2 - packages/digit_data_model/pubspec.yaml | 2 +- packages/registration_delivery/CHANGELOG.md | 8 + .../beneficiary_registration.dart | 29 +- .../beneficiary_registration.freezed.dart | 82 +- .../deliver_intervention.dart | 21 +- .../household_global_seach.dart | 330 +++-- .../individual_global_search.dart | 24 +- .../search_households/search_households.dart | 3 - .../search_households.freezed.dart | 54 +- .../local/closed_household_search.dart | 117 -- .../local/household_global_search.dart | 335 +++-- .../lib/data/repositories/local/task.dart | 2 - .../pages/beneficiary/household_overview.dart | 46 +- .../widgets/view_closed_household.dart | 95 -- .../beneficiary_registration_wrapper.dart | 1 + .../house_details.dart | 2 - .../household_details.dart | 1 - .../household_location.dart | 1 - .../individual_details.dart | 6 +- .../lib/pages/reason_for_deletion.dart | 34 +- .../lib/pages/search_beneficiary.dart | 268 ++-- .../lib/pages/summary_page.dart | 13 - .../beneficiary/view_beneficiary_card.dart | 15 +- .../widgets/status_filter/status_filter.dart | 23 +- packages/registration_delivery/pubspec.lock | 16 +- packages/registration_delivery/pubspec.yaml | 8 +- .../test/beneficiary_registration_test.dart | 5 + 70 files changed, 1577 insertions(+), 3949 deletions(-) delete mode 100644 packages/closed_household/lib/closed_household.init.dart delete mode 100644 packages/closed_household/lib/data/repositories/local/base/user_action_base.dart delete mode 100644 packages/closed_household/lib/data/repositories/local/user_action.dart delete mode 100644 packages/closed_household/lib/data/repositories/oplog/oplog.dart delete mode 100644 packages/closed_household/lib/data/repositories/remote/user_action.dart delete mode 100644 packages/closed_household/lib/models/entities/action.dart delete mode 100644 packages/closed_household/lib/models/entities/action.mapper.dart delete mode 100644 packages/closed_household/lib/models/entities/status.dart delete mode 100644 packages/closed_household/lib/models/entities/status.mapper.dart delete mode 100644 packages/closed_household/lib/models/entities/user_action.dart delete mode 100644 packages/closed_household/lib/models/entities/user_action.mapper.dart delete mode 100644 packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/user_action.dart delete mode 100644 packages/registration_delivery/lib/data/repositories/local/closed_household_search.dart delete mode 100644 packages/registration_delivery/lib/pages/beneficiary/widgets/view_closed_household.dart diff --git a/apps/health_campaign_field_worker_app/lib/app.dart b/apps/health_campaign_field_worker_app/lib/app.dart index 1e6fe336c..7b2f1706c 100644 --- a/apps/health_campaign_field_worker_app/lib/app.dart +++ b/apps/health_campaign_field_worker_app/lib/app.dart @@ -13,6 +13,10 @@ import 'package:location/location.dart'; import 'package:registration_delivery/data/repositories/local/household_global_search.dart'; import 'package:registration_delivery/data/repositories/local/individual_global_search.dart'; import 'package:registration_delivery/data/repositories/oplog/oplog.dart'; +import 'package:registration_delivery/models/entities/household.dart'; +import 'package:registration_delivery/models/entities/household_member.dart'; +import 'package:registration_delivery/models/entities/project_beneficiary.dart'; +import 'package:registration_delivery/models/entities/task.dart'; import 'blocs/app_initialization/app_initialization.dart'; import 'blocs/auth/auth.dart'; @@ -304,8 +308,18 @@ class MainApplicationState extends State create: (_) { return ClosedHouseholdBloc( const ClosedHouseholdState(), - closedHouseholdRepository: context - .repository(), + householdMemberRepository: context.repository< + HouseholdMemberModel, + HouseholdMemberSearchModel>(), + householdRepository: context.repository< + HouseholdModel, HouseholdSearchModel>(), + individualRepository: context.repository< + IndividualModel, IndividualSearchModel>(), + projectBeneficiaryRepository: context.repository< + ProjectBeneficiaryModel, + ProjectBeneficiarySearchModel>(), + taskRepository: context + .repository(), ); }, lazy: false, diff --git a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/entity_mapper.dart b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/entity_mapper.dart index afbb93f11..d44596109 100644 --- a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/entity_mapper.dart +++ b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/entity_mapper.dart @@ -1,5 +1,4 @@ import 'package:attendance_management/models/entities/attendance_log.dart'; -import 'package:closed_household/models/entities/user_action.dart'; import 'package:digit_data_model/data/local_store/no_sql/schema/entity_mapper_listener.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:inventory_management/models/entities/stock.dart'; @@ -81,10 +80,6 @@ class EntityMapper extends EntityMapperListener { final entity = PgrServiceModelMapper.fromJson(entityString); return entity; - case "userAction": - final entity = UserActionModelMapper.fromJson(entityString); - return entity; - default: final entity = EntityModelMapper.fromJson(entityString); return entity; diff --git a/apps/health_campaign_field_worker_app/lib/data/network_manager.dart b/apps/health_campaign_field_worker_app/lib/data/network_manager.dart index 297c3e85b..66652ea67 100644 --- a/apps/health_campaign_field_worker_app/lib/data/network_manager.dart +++ b/apps/health_campaign_field_worker_app/lib/data/network_manager.dart @@ -1,17 +1,14 @@ import 'dart:async'; import 'dart:convert'; -import 'package:closed_household/models/entities/user_action.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter_background_service/flutter_background_service.dart'; import 'package:registration_delivery/registration_delivery.dart'; - import 'repositories/sync/remote_type.dart'; import 'package:provider/provider.dart'; import '../models/bandwidth/bandwidth_model.dart'; -import '../utils/constants.dart'; import 'local_store/secure_store/secure_store.dart'; import 'repositories/sync/sync_down.dart'; import 'repositories/sync/sync_up.dart'; @@ -167,11 +164,6 @@ class NetworkManager { .map((e) => ReferralModelMapper.fromJson(jsonEncode(e))) .toList(); await local.bulkCreate(entity); - case "UserAction": - final entity = entityList - .map((e) => UserActionModelMapper.fromJson(jsonEncode(e))) - .toList(); - await local.bulkCreate(entity); default: final entity = entityList .map((e) => EntityModelMapper.fromJson(jsonEncode(e))) diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/sync/sync_down.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/sync/sync_down.dart index c0b9b01b8..e8f07d0e4 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/sync/sync_down.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/sync/sync_down.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'package:attendance_management/attendance_management.dart'; -import 'package:closed_household/models/entities/user_action.dart'; import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:inventory_management/models/entities/stock.dart'; @@ -463,54 +462,6 @@ class PerformSyncDown { break; - case DataModelType.userAction: - responseEntities = await remote.search(UserActionSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - - for (var element in operationGroupedEntity.value) { - if (element.id == null) return; - final userActionModel = element.entity as UserActionModel; - var responseEntity = - responseEntities.whereType().firstWhereOrNull( - (e) => - e.clientReferenceId == userActionModel.clientReferenceId, - ); - - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - - if (serverGeneratedId != null) { - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: userActionModel.clientReferenceId, - serverGeneratedId: serverGeneratedId, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(userActionModel.clientReferenceId); - - if (markAsNonRecoverable) { - await local.update( - userActionModel.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - break; - case DataModelType.hFReferral: responseEntities = await remote.search( HFReferralSearchModel( diff --git a/apps/health_campaign_field_worker_app/lib/pages/home.dart b/apps/health_campaign_field_worker_app/lib/pages/home.dart index 6fb2cc45f..1a63d9199 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/home.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/home.dart @@ -2,9 +2,8 @@ import 'dart:async'; import 'package:attendance_management/attendance_management.dart'; import 'package:attendance_management/router/attendance_router.gm.dart'; -import 'package:closed_household/models/entities/user_action.dart'; +import 'package:closed_household/closed_household.dart'; import 'package:closed_household/router/closed_household_router.gm.dart'; -import 'package:closed_household/utils/utils.dart'; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/widgets/atoms/digit_toaster.dart'; @@ -15,7 +14,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_background_service/flutter_background_service.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; -import 'package:flutter_svg/svg.dart'; import 'package:inventory_management/inventory_management.dart'; import 'package:inventory_management/router/inventory_router.gm.dart'; import 'package:referral_reconciliation/referral_reconciliation.dart'; @@ -337,7 +335,7 @@ class _HomePageState extends LocalizedState { customIcon: Constants.closedHouseholdSvg, label: i18.home.closedHouseHoldLabel, onPressed: () { - context.router.push(ClosedHouseholdWrapperRoute()); + context.router.push(const ClosedHouseholdWrapperRoute()); }, ), ), @@ -496,7 +494,8 @@ class _HomePageState extends LocalizedState { i18.home.manageAttendanceLabel: homeShowcaseData.manageAttendance.showcaseKey, i18.home.db: homeShowcaseData.db.showcaseKey, - i18.home.closedHouseHoldLabel: homeShowcaseData.closedHouseHold.showcaseKey, + i18.home.closedHouseHoldLabel: + homeShowcaseData.closedHouseHold.showcaseKey, }; final homeItemsLabel = [ @@ -520,11 +519,18 @@ class _HomePageState extends LocalizedState { .map((e) => e.displayName) .toList() .contains(element) || - element == i18.home.db || element == i18.home.closedHouseHoldLabel) // TODO: need to add close household inside mdms + element == i18.home.db || + element == + i18.home + .closedHouseHoldLabel) // TODO: need to add close household inside mdms .toList(); final showcaseKeys = filteredLabels - .where((f) => f != i18.home.db && f != i18.home.closedHouseHoldLabel) // TODO: need to add close household inside mdms + .where((f) => + f != i18.home.db && + f != + i18.home + .closedHouseHoldLabel) // TODO: need to add close household inside mdms .map((label) => homeItemsShowcaseMap[label]!) .toList(); @@ -574,7 +580,6 @@ class _HomePageState extends LocalizedState { context.read< LocalRepository>(), - context.read>(), ], remoteRepositories: [ // INFO : Need to add repo repo of package Here @@ -606,7 +611,6 @@ class _HomePageState extends LocalizedState { context.read< RemoteRepository>(), - context.read>(), ], ), ); @@ -621,50 +625,48 @@ void setPackagesSingleton(BuildContext context) { initialized: (AppConfiguration appConfiguration, _) { // INFO : Need to add singleton of package Here RegistrationDeliverySingleton().setInitialData( - loggedInUserUuid: context.loggedInUserUuid, - maxRadius: appConfiguration.maxRadius!, - projectId: context.projectId, - selectedBeneficiaryType: context.beneficiaryType, - projectType: context.selectedProjectType, - selectedProject: context.selectedProject, - genderOptions: - appConfiguration.genderOptions!.map((e) => e.code).toList(), - idTypeOptions: - appConfiguration.idTypeOptions!.map((e) => e.code).toList(), - householdDeletionReasonOptions: appConfiguration - .householdDeletionReasonOptions! - .map((e) => e.code) - .toList(), - householdMemberDeletionReasonOptions: appConfiguration - .householdMemberDeletionReasonOptions! - .map((e) => e.code) - .toList(), - deliveryCommentOptions: appConfiguration.deliveryCommentOptions! - .map((e) => e.code) - .toList(), - symptomsTypes: - appConfiguration.symptomsTypes?.map((e) => e.code).toList(), - searchHouseHoldFilter: appConfiguration.searchHouseHoldFilters != null + loggedInUserUuid: context.loggedInUserUuid, + maxRadius: appConfiguration.maxRadius!, + projectId: context.projectId, + selectedBeneficiaryType: context.beneficiaryType, + projectType: context.selectedProjectType, + selectedProject: context.selectedProject, + genderOptions: + appConfiguration.genderOptions!.map((e) => e.code).toList(), + idTypeOptions: + appConfiguration.idTypeOptions!.map((e) => e.code).toList(), + householdDeletionReasonOptions: appConfiguration + .householdDeletionReasonOptions! + .map((e) => e.code) + .toList(), + householdMemberDeletionReasonOptions: appConfiguration + .householdMemberDeletionReasonOptions! + .map((e) => e.code) + .toList(), + deliveryCommentOptions: appConfiguration.deliveryCommentOptions! + .map((e) => e.code) + .toList(), + symptomsTypes: + appConfiguration.symptomsTypes?.map((e) => e.code).toList(), + searchHouseHoldFilter: appConfiguration.searchHouseHoldFilters != null ? appConfiguration.searchHouseHoldFilters! .map((e) => e.code) .toList() : [], referralReasons: appConfiguration.referralReasons?.map((e) => e.code).toList(), - houseStructureTypes: appConfiguration.houseStructureTypes - ?.map((e) => e.code) - .toList(), - refusalReasons: appConfiguration.refusalReasons - ?.map((e) => e.code) - .toList(), + houseStructureTypes: + appConfiguration.houseStructureTypes?.map((e) => e.code).toList(), + refusalReasons: + appConfiguration.refusalReasons?.map((e) => e.code).toList(), ); ClosedHouseholdSingleton().setInitialData( loggedInUserUuid: context.loggedInUserUuid, projectId: context.projectId, + beneficiaryType: context.beneficiaryType, ); - AttendanceSingleton().setInitialData( projectId: context.projectId, loggedInIndividualId: context.loggedInIndividualId ?? '', diff --git a/apps/health_campaign_field_worker_app/lib/utils/background_service.dart b/apps/health_campaign_field_worker_app/lib/utils/background_service.dart index 413bbc572..1c4554313 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/background_service.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/background_service.dart @@ -176,7 +176,7 @@ void onStart(ServiceInstance service) async { flutterLocalNotificationsPlugin.show( 888, 'Auto Sync', - 'Speed : ${speedArray.firstOrNull}Mb/ps - BatchSize : $configuredBatchSize', + 'Speed : ${double.tryParse(speedArray.firstOrNull.toString())?.toStringAsFixed(1)}Mb/ps - BatchSize : $configuredBatchSize', const NotificationDetails( android: AndroidNotificationDetails( "my_foreground", diff --git a/apps/health_campaign_field_worker_app/lib/utils/constants.dart b/apps/health_campaign_field_worker_app/lib/utils/constants.dart index c57fcc33f..6f180b149 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/constants.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/constants.dart @@ -1,7 +1,4 @@ import 'package:attendance_management/attendance_management.dart'; -import 'package:closed_household/data/repositories/local/user_action.dart'; -import 'package:closed_household/data/repositories/oplog/oplog.dart'; -import 'package:closed_household/data/repositories/remote/user_action.dart'; import 'package:closed_household/utils/utils.dart'; import 'package:collection/collection.dart'; import 'package:digit_components/utils/app_logger.dart'; @@ -12,7 +9,6 @@ import 'package:inventory_management/inventory_management.dart'; import 'package:isar/isar.dart'; import 'package:path_provider/path_provider.dart'; import 'package:referral_reconciliation/referral_reconciliation.dart'; -import 'package:referral_reconciliation/utils/utils.dart'; import 'package:registration_delivery/registration_delivery.dart'; import 'package:digit_firebase_services/digit_firebase_services.dart' as firebase_services; @@ -125,7 +121,6 @@ class Constants { ), ), TaskLocalRepository(sql, TaskOpLogManager(isar)), - ClosedHouseholdLocalRepository(sql, ClosedHouseholdOpLogManager(isar)), SideEffectLocalRepository(sql, SideEffectOpLogManager(isar)), ReferralLocalRepository(sql, ReferralOpLogManager(isar)), StockLocalRepository(sql, StockOpLogManager(isar)), @@ -145,7 +140,6 @@ class Constants { sql, HFReferralOpLogManager(isar), ), - ClosedHouseholdLocalRepository(sql, ClosedHouseholdOpLogManager(isar)), ]; } @@ -231,8 +225,6 @@ class Constants { AttendanceLogRemoteRepository(dio, actionMap: actions), if (value == DataModelType.hFReferral) HFReferralRemoteRepository(dio, actionMap: actions), - if (value == DataModelType.userAction) - UserActionRemoteRepository(dio, actionMap: actions), ]); } diff --git a/apps/health_campaign_field_worker_app/lib/utils/utils.dart b/apps/health_campaign_field_worker_app/lib/utils/utils.dart index bf4173cf6..ebcf613f8 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/utils.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/utils.dart @@ -5,8 +5,6 @@ import 'dart:io'; import 'package:attendance_management/attendance_management.dart' as attendance_mappers; -import 'package:closed_household/closed_household.dart' - as closed_household_mappers; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:digit_components/theme/digit_theme.dart'; import 'package:digit_components/widgets/atoms/digit_toaster.dart'; @@ -397,7 +395,6 @@ initializeAllMappers() async { Future(() => inventory_mappers.initializeMappers()), Future(() => data_model_mappers.initializeMappers()), Future(() => registration_delivery_mappers.initializeMappers()), - Future(() => closed_household_mappers.initializeMappers()), ]; await Future.wait(initializations); } @@ -417,7 +414,6 @@ int getSyncCount(List oplogs) { case DataModelType.referral: case DataModelType.hFReferral: case DataModelType.attendance: - case DataModelType.userAction: return true; default: return false; @@ -437,7 +433,6 @@ int getSyncCount(List oplogs) { case DataModelType.referral: case DataModelType.hFReferral: case DataModelType.attendance: - case DataModelType.userAction: return true; default: return false; diff --git a/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart b/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart index 5c60c02ca..6bd4bf8df 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart +++ b/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart @@ -1,10 +1,6 @@ import 'dart:io'; import 'package:attendance_management/attendance_management.dart'; -import 'package:closed_household/data/repositories/local/user_action.dart'; -import 'package:closed_household/data/repositories/oplog/oplog.dart'; -import 'package:closed_household/data/repositories/remote/user_action.dart'; -import 'package:closed_household/models/entities/user_action.dart'; import 'package:inventory_management/inventory_management.dart'; import 'package:registration_delivery/registration_delivery.dart'; import 'package:referral_reconciliation/referral_reconciliation.dart'; @@ -268,14 +264,6 @@ class NetworkManagerProviderWrapper extends StatelessWidget { StockReconciliationOpLogManager(isar), ), ), - RepositoryProvider< - LocalRepository>( - create: (_) => ClosedHouseholdLocalRepository( - sql, - ClosedHouseholdOpLogManager(isar), - ), - ), // INFO Need to add packages here ]; } @@ -497,13 +485,6 @@ class NetworkManagerProviderWrapper extends StatelessWidget { create: (_) => StockReconciliationRemoteRepository(dio, actionMap: actions), ), - if (value == DataModelType.userAction) - RepositoryProvider< - RemoteRepository>( - create: (_) => - UserActionRemoteRepository(dio, actionMap: actions), - ), // INFO Need to add packages here ]); } diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 97616fc0f..94eef8c0c 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -338,13 +338,13 @@ packages: source: hosted version: "1.1.1" closed_household: - dependency: transitive + dependency: "direct main" description: name: closed_household - sha256: "47d46553b034fceac6acda81e16f10b2d51a93cb509f5d596480a2bb6ff8aea3" + sha256: b78799c4edb0181594cb1908ebdb2bbb2583865515a36e06979e19ea246e9ee0 url: "https://pub.dev" source: hosted - version: "0.0.0-dev.1" + version: "0.0.0-dev.2" code_builder: dependency: transitive description: @@ -492,18 +492,18 @@ packages: dependency: "direct main" description: name: digit_components - sha256: "5c4702cfa2d05aa98756c1ecdae2593ad5cc4254a47341588b3269e004a22525" + sha256: "86ea75e325beb0ff8dff70e8734c9626597b49cc91c5d6fa960274f271dfb1a7" url: "https://pub.dev" source: hosted - version: "1.0.0+7" + version: "1.0.0+8" digit_data_model: dependency: "direct main" description: name: digit_data_model - sha256: "1258b5e96c6f63d32ab042a1d739360c93cab302e2f230b416dc4c54021e5e55" + sha256: c708c6474b7a67e3cdedcbb82265c201e61390360109344ebedfa2cc1ded0440 url: "https://pub.dev" source: hosted - version: "1.0.3-dev.1" + version: "1.0.3-dev.2" digit_firebase_services: dependency: "direct main" description: @@ -1534,10 +1534,10 @@ packages: dependency: "direct main" description: name: registration_delivery - sha256: f585fefa762ac708358455d76c43476a66df236b5855ffcc87a18840acf9666c + sha256: "49ca0b0c85de74a3ce7acdae92cf23a18138a1285d9d399a3b2c1025d9d3f327" url: "https://pub.dev" source: hosted - version: "1.0.3-dev.2" + version: "1.0.3-dev.3" remove_emoji_input_formatter: dependency: transitive description: diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 04344b0c7..89467070a 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -69,9 +69,10 @@ dependencies: digit_scanner: ^1.0.3-dev.1 inventory_management: ^1.0.2 referral_reconciliation: ^1.0.2 - digit_data_model: ^1.0.2 - registration_delivery: ^1.0.3-dev.2 + digit_data_model: ^1.0.3-dev.2 + registration_delivery: ^1.0.3-dev.4 disable_battery_optimization: ^1.1.1 + closed_household: ^0.0.0-dev.2 dev_dependencies: flutter_test: diff --git a/packages/closed_household/CHANGELOG.md b/packages/closed_household/CHANGELOG.md index a6dbba968..abf20eb51 100644 --- a/packages/closed_household/CHANGELOG.md +++ b/packages/closed_household/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.0-dev.2 + +* Closed Household flow change using registration_delivery models to register a closed household + ## 0.0.0-dev.1 * Initial release of closed household flow diff --git a/packages/closed_household/lib/blocs/closed_household.dart b/packages/closed_household/lib/blocs/closed_household.dart index 7c5e94eae..dc565cc1d 100644 --- a/packages/closed_household/lib/blocs/closed_household.dart +++ b/packages/closed_household/lib/blocs/closed_household.dart @@ -1,120 +1,333 @@ import 'dart:async'; -import 'package:closed_household/models/entities/user_action.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_data_model/models/entities/address_type.dart'; +import 'package:digit_data_model/utils/typedefs.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:registration_delivery/models/entities/status.dart' + as reg_status; +import 'package:registration_delivery/models/entities/household.dart'; +import 'package:registration_delivery/models/entities/household_member.dart'; +import 'package:registration_delivery/models/entities/project_beneficiary.dart'; +import 'package:registration_delivery/models/entities/task.dart'; +import 'package:registration_delivery/utils/typedefs.dart'; -import '../models/entities/status.dart'; +import '../utils/utils.dart'; part 'closed_household.freezed.dart'; typedef ClosedHouseholdEmitter = Emitter; -class ClosedHouseholdBloc extends Bloc { - final DataRepository - closedHouseholdRepository; +class ClosedHouseholdBloc + extends Bloc { + final IndividualDataRepository individualRepository; + + final HouseholdDataRepository householdRepository; + + final HouseholdMemberDataRepository householdMemberRepository; + + final ProjectBeneficiaryDataRepository projectBeneficiaryRepository; + + final TaskDataRepository taskRepository; ClosedHouseholdBloc( - super.initialState, { - required this.closedHouseholdRepository, - }) { + super.initialState, { + required this.individualRepository, + required this.householdRepository, + required this.householdMemberRepository, + required this.projectBeneficiaryRepository, + required this.taskRepository, + }) { on(_handleSubmit); on(_handleSummary); - on(_handleUpdate); } FutureOr _handleSubmit( - ClosedHouseholdSubmitEvent event, - ClosedHouseholdEmitter emit, - ) async { + ClosedHouseholdSubmitEvent event, + ClosedHouseholdEmitter emit, + ) async { emit(state.copyWith(loading: true)); - try { - if (event.isEditing) { - await closedHouseholdRepository.update(event.userAction); - } else { - await closedHouseholdRepository.create(event.userAction); - } - } catch (error) { - rethrow; - } finally { - emit(state.copyWith(loading: false)); - } - } - FutureOr _handleSummary( - ClosedHouseholdSummaryEvent event, - ClosedHouseholdEmitter emit, - ) async { - emit(state.copyWith(summary: event.summary)); - } - - FutureOr _handleUpdate( - ClosedHouseholdUpdateEvent event, - ClosedHouseholdEmitter emit, - ) async { - emit(state.copyWith(loading: true)); + var locality = LocalityModel( + code: ClosedHouseholdSingleton().boundary!.code!, + name: ClosedHouseholdSingleton().boundary!.name!); try { - List userActions = []; + var address = AddressModel( + latitude: event.latitude, + longitude: event.longitude, + locationAccuracy: event.locationAccuracy, + type: AddressType.correspondence, + locality: LocalityModel( + code: ClosedHouseholdSingleton().boundary!.code!, + name: ClosedHouseholdSingleton().boundary!.name, + ), + tenantId: ClosedHouseholdSingleton().tenantId, + rowVersion: 1, + clientAuditDetails: ClientAuditDetails( + createdBy: ClosedHouseholdSingleton().loggedInUserUuid.toString(), + createdTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: + ClosedHouseholdSingleton().loggedInUserUuid.toString(), + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + ), + auditDetails: AuditDetails( + createdBy: ClosedHouseholdSingleton().loggedInUserUuid.toString(), + createdTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: + ClosedHouseholdSingleton().loggedInUserUuid.toString(), + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + ), + ); + var household = HouseholdModel( + clientReferenceId: IdGen.i.identifier, + address: address, + memberCount: 0, + rowVersion: 1, + tenantId: ClosedHouseholdSingleton().tenantId.toString(), + longitude: event.longitude, + latitude: event.latitude, + clientAuditDetails: ClientAuditDetails( + createdBy: ClosedHouseholdSingleton().loggedInUserUuid.toString(), + createdTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: + ClosedHouseholdSingleton().loggedInUserUuid.toString(), + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + ), + auditDetails: AuditDetails( + createdBy: ClosedHouseholdSingleton().loggedInUserUuid.toString(), + createdTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: + ClosedHouseholdSingleton().loggedInUserUuid.toString(), + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + ), + ); + var individual = IndividualModel( + clientReferenceId: IdGen.i.identifier, + tenantId: ClosedHouseholdSingleton().tenantId, + rowVersion: 1, + clientAuditDetails: ClientAuditDetails( + createdBy: ClosedHouseholdSingleton().loggedInUserUuid.toString(), + createdTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: + ClosedHouseholdSingleton().loggedInUserUuid.toString(), + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + ), + auditDetails: AuditDetails( + createdBy: ClosedHouseholdSingleton().loggedInUserUuid.toString(), + createdTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: + ClosedHouseholdSingleton().loggedInUserUuid.toString(), + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + ), + ); + var name = NameModel( + givenName: event.householdHeadName, + individualClientReferenceId: individual.clientReferenceId, + tenantId: ClosedHouseholdSingleton().tenantId, + rowVersion: 1, + clientAuditDetails: ClientAuditDetails( + createdBy: ClosedHouseholdSingleton().loggedInUserUuid.toString(), + createdTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: + ClosedHouseholdSingleton().loggedInUserUuid.toString(), + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + ), + auditDetails: AuditDetails( + createdBy: ClosedHouseholdSingleton().loggedInUserUuid.toString(), + createdTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: + ClosedHouseholdSingleton().loggedInUserUuid.toString(), + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + ), + ); + var identifier = IdentifierModel( + clientReferenceId: individual.clientReferenceId, + tenantId: ClosedHouseholdSingleton().tenantId, + rowVersion: 1, + clientAuditDetails: ClientAuditDetails( + createdBy: ClosedHouseholdSingleton().loggedInUserUuid.toString(), + createdTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: + ClosedHouseholdSingleton().loggedInUserUuid.toString(), + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + ), + auditDetails: AuditDetails( + createdBy: ClosedHouseholdSingleton().loggedInUserUuid.toString(), + createdTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: + ClosedHouseholdSingleton().loggedInUserUuid.toString(), + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + ), + ); - userActions = await closedHouseholdRepository.search( - UserActionSearchModel(clientReferenceId: [event.selectedClientReferenceId]), + var projectBeneficiary = ProjectBeneficiaryModel( + tag: event.tag, + rowVersion: 1, + tenantId: ClosedHouseholdSingleton().tenantId, + clientReferenceId: IdGen.i.identifier, + dateOfRegistration: DateTime.now().millisecondsSinceEpoch, + projectId: ClosedHouseholdSingleton().projectId, + beneficiaryClientReferenceId: + ClosedHouseholdSingleton().beneficiaryType == + BeneficiaryType.individual + ? individual.clientReferenceId + : household.clientReferenceId, + clientAuditDetails: ClientAuditDetails( + createdTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: + ClosedHouseholdSingleton().loggedInUserUuid.toString(), + createdBy: ClosedHouseholdSingleton().loggedInUserUuid.toString(), + ), + auditDetails: AuditDetails( + createdBy: ClosedHouseholdSingleton().loggedInUserUuid.toString(), + createdTime: DateTime.now().millisecondsSinceEpoch, + ), ); - - if (userActions.isNotEmpty) { - final userAction = userActions.first; - final updatedUserAction = userAction.copyWith( - status: Status.resolved.toValue(), - additionalFields: UserActionAdditionalFields( - version: 1, - fields: [ - AdditionalField( - 'HouseholdId', - event.selectedHouseholdId, - ), - ], + + individual = individual.copyWith( + name: name, + address: [ + address.copyWith( + relatedClientReferenceId: individual.clientReferenceId, + auditDetails: individual.auditDetails, + clientAuditDetails: individual.clientAuditDetails, + locality: locality, + ), + ], + identifiers: [ + identifier.copyWith( + identifierId: IdGen.i.identifier, + identifierType: 'DEFAULT', ), - ); - - await closedHouseholdRepository.update(updatedUserAction); - - emit(state.copyWith( - loading: false, - userActions: [updatedUserAction], - )); - } else { - emit(state.copyWith( - loading: false, - userActions: [], - )); - } + ], + auditDetails: AuditDetails( + createdBy: ClosedHouseholdSingleton().loggedInUserUuid.toString(), + createdTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: + ClosedHouseholdSingleton().loggedInUserUuid.toString(), + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + ), + clientAuditDetails: ClientAuditDetails( + createdBy: ClosedHouseholdSingleton().loggedInUserUuid.toString(), + createdTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: + ClosedHouseholdSingleton().loggedInUserUuid.toString(), + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + ), + ); + var householdMember = HouseholdMemberModel( + householdClientReferenceId: household.clientReferenceId, + individualClientReferenceId: individual.clientReferenceId, + isHeadOfHousehold: true, + tenantId: ClosedHouseholdSingleton().tenantId, + rowVersion: 1, + clientReferenceId: IdGen.i.identifier, + clientAuditDetails: ClientAuditDetails( + createdTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: + ClosedHouseholdSingleton().loggedInUserUuid.toString(), + createdBy: ClosedHouseholdSingleton().loggedInUserUuid.toString(), + ), + auditDetails: AuditDetails( + createdBy: ClosedHouseholdSingleton().loggedInUserUuid.toString(), + createdTime: DateTime.now().millisecondsSinceEpoch, + ), + ); + + var task = TaskModel( + projectBeneficiaryClientReferenceId: + projectBeneficiary.clientReferenceId, + clientReferenceId: IdGen.i.identifier, + tenantId: ClosedHouseholdSingleton().tenantId, + projectId: ClosedHouseholdSingleton().projectId, + rowVersion: 1, + address: address, + status: reg_status.Status.closeHousehold.toValue(), + auditDetails: AuditDetails( + createdBy: ClosedHouseholdSingleton().loggedInUserUuid!, + createdTime: DateTime.now().millisecondsSinceEpoch, + ), + clientAuditDetails: ClientAuditDetails( + createdBy: ClosedHouseholdSingleton().loggedInUserUuid!, + createdTime: DateTime.now().millisecondsSinceEpoch, + ), + ); + + await householdRepository.create( + household.copyWith( + address: address.copyWith( + relatedClientReferenceId: household.clientReferenceId, + auditDetails: individual.auditDetails, + clientAuditDetails: individual.clientAuditDetails, + locality: locality, + ), + ), + ); + + final initialModifiedAt = DateTime.now().millisecondsSinceEpoch; + await individualRepository.create( + individual.copyWith( + address: [ + address.copyWith( + relatedClientReferenceId: individual.clientReferenceId, + auditDetails: individual.auditDetails, + clientAuditDetails: individual.clientAuditDetails, + locality: locality, + ), + ], + ), + ); + + await projectBeneficiaryRepository.create( + projectBeneficiary, + ); + + await householdMemberRepository.create(householdMember.copyWith( + clientAuditDetails: householdMember.clientAuditDetails!.copyWith( + lastModifiedTime: initialModifiedAt, + ))); + + await taskRepository.create(task); + + emit(state.copyWith(loading: false)); } catch (error) { - emit(state.copyWith( - loading: false, - userActions: [], - )); + rethrow; } } + FutureOr _handleSummary( + ClosedHouseholdSummaryEvent event, + ClosedHouseholdEmitter emit, + ) async { + emit(state.copyWith( + longitude: event.longitude, + latitude: event.latitude, + locationAccuracy: event.locationAccuracy, + householdHeadName: event.householdHeadName, + )); + } } @freezed class ClosedHouseholdEvent with _$ClosedHouseholdEvent { const factory ClosedHouseholdEvent.handleSubmit( - UserActionModel userAction, - bool isEditing, - ) = ClosedHouseholdSubmitEvent; - - const factory ClosedHouseholdEvent.handleSummary( - UserActionModel summary, - ) = ClosedHouseholdSummaryEvent; - - const factory ClosedHouseholdEvent.handleUpdate( - String selectedClientReferenceId, - String selectedHouseholdId, - ) = ClosedHouseholdUpdateEvent; + {@Default(0) double latitude, + @Default(0) double longitude, + @Default(0) double locationAccuracy, + String? householdHeadName, + String? tag, + BuildContext? context}) = ClosedHouseholdSubmitEvent; + const factory ClosedHouseholdEvent.handleSummary({ + @Default(0) double latitude, + @Default(0) double longitude, + @Default(0) double locationAccuracy, + String? householdHeadName, + }) = ClosedHouseholdSummaryEvent; } @freezed @@ -122,9 +335,9 @@ class ClosedHouseholdState with _$ClosedHouseholdState { const factory ClosedHouseholdState({ @Default(false) bool loading, @Default(false) bool isEditing, - List? userActions, - UserActionModel? summary, - String? selectedClientReferenceId, - String? selectedHouseholdId, + @Default(0) double latitude, + @Default(0) double longitude, + @Default(0) double locationAccuracy, + String? householdHeadName, }) = _ClosedHouseholdState; } diff --git a/packages/closed_household/lib/blocs/closed_household.freezed.dart b/packages/closed_household/lib/blocs/closed_household.freezed.dart index e0dbe9128..4604ceeb8 100644 --- a/packages/closed_household/lib/blocs/closed_household.freezed.dart +++ b/packages/closed_household/lib/blocs/closed_household.freezed.dart @@ -16,32 +16,48 @@ final _privateConstructorUsedError = UnsupportedError( /// @nodoc mixin _$ClosedHouseholdEvent { + double get latitude => throw _privateConstructorUsedError; + double get longitude => throw _privateConstructorUsedError; + double get locationAccuracy => throw _privateConstructorUsedError; + String? get householdHeadName => throw _privateConstructorUsedError; @optionalTypeArgs TResult when({ - required TResult Function(UserActionModel userAction, bool isEditing) - handleSubmit, - required TResult Function(UserActionModel summary) handleSummary, required TResult Function( - String selectedClientReferenceId, String selectedHouseholdId) - handleUpdate, + double latitude, + double longitude, + double locationAccuracy, + String? householdHeadName, + String? tag, + BuildContext? context) + handleSubmit, + required TResult Function(double latitude, double longitude, + double locationAccuracy, String? householdHeadName) + handleSummary, }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? whenOrNull({ - TResult? Function(UserActionModel userAction, bool isEditing)? handleSubmit, - TResult? Function(UserActionModel summary)? handleSummary, TResult? Function( - String selectedClientReferenceId, String selectedHouseholdId)? - handleUpdate, + double latitude, + double longitude, + double locationAccuracy, + String? householdHeadName, + String? tag, + BuildContext? context)? + handleSubmit, + TResult? Function(double latitude, double longitude, + double locationAccuracy, String? householdHeadName)? + handleSummary, }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeWhen({ - TResult Function(UserActionModel userAction, bool isEditing)? handleSubmit, - TResult Function(UserActionModel summary)? handleSummary, - TResult Function( - String selectedClientReferenceId, String selectedHouseholdId)? - handleUpdate, + TResult Function(double latitude, double longitude, double locationAccuracy, + String? householdHeadName, String? tag, BuildContext? context)? + handleSubmit, + TResult Function(double latitude, double longitude, double locationAccuracy, + String? householdHeadName)? + handleSummary, required TResult orElse(), }) => throw _privateConstructorUsedError; @@ -49,24 +65,25 @@ mixin _$ClosedHouseholdEvent { TResult map({ required TResult Function(ClosedHouseholdSubmitEvent value) handleSubmit, required TResult Function(ClosedHouseholdSummaryEvent value) handleSummary, - required TResult Function(ClosedHouseholdUpdateEvent value) handleUpdate, }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? mapOrNull({ TResult? Function(ClosedHouseholdSubmitEvent value)? handleSubmit, TResult? Function(ClosedHouseholdSummaryEvent value)? handleSummary, - TResult? Function(ClosedHouseholdUpdateEvent value)? handleUpdate, }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeMap({ TResult Function(ClosedHouseholdSubmitEvent value)? handleSubmit, TResult Function(ClosedHouseholdSummaryEvent value)? handleSummary, - TResult Function(ClosedHouseholdUpdateEvent value)? handleUpdate, required TResult orElse(), }) => throw _privateConstructorUsedError; + + @JsonKey(ignore: true) + $ClosedHouseholdEventCopyWith get copyWith => + throw _privateConstructorUsedError; } /// @nodoc @@ -74,6 +91,12 @@ abstract class $ClosedHouseholdEventCopyWith<$Res> { factory $ClosedHouseholdEventCopyWith(ClosedHouseholdEvent value, $Res Function(ClosedHouseholdEvent) then) = _$ClosedHouseholdEventCopyWithImpl<$Res, ClosedHouseholdEvent>; + @useResult + $Res call( + {double latitude, + double longitude, + double locationAccuracy, + String? householdHeadName}); } /// @nodoc @@ -86,16 +109,52 @@ class _$ClosedHouseholdEventCopyWithImpl<$Res, final $Val _value; // ignore: unused_field final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? latitude = null, + Object? longitude = null, + Object? locationAccuracy = null, + Object? householdHeadName = freezed, + }) { + return _then(_value.copyWith( + latitude: null == latitude + ? _value.latitude + : latitude // ignore: cast_nullable_to_non_nullable + as double, + longitude: null == longitude + ? _value.longitude + : longitude // ignore: cast_nullable_to_non_nullable + as double, + locationAccuracy: null == locationAccuracy + ? _value.locationAccuracy + : locationAccuracy // ignore: cast_nullable_to_non_nullable + as double, + householdHeadName: freezed == householdHeadName + ? _value.householdHeadName + : householdHeadName // ignore: cast_nullable_to_non_nullable + as String?, + ) as $Val); + } } /// @nodoc -abstract class _$$ClosedHouseholdSubmitEventImplCopyWith<$Res> { +abstract class _$$ClosedHouseholdSubmitEventImplCopyWith<$Res> + implements $ClosedHouseholdEventCopyWith<$Res> { factory _$$ClosedHouseholdSubmitEventImplCopyWith( _$ClosedHouseholdSubmitEventImpl value, $Res Function(_$ClosedHouseholdSubmitEventImpl) then) = __$$ClosedHouseholdSubmitEventImplCopyWithImpl<$Res>; + @override @useResult - $Res call({UserActionModel userAction, bool isEditing}); + $Res call( + {double latitude, + double longitude, + double locationAccuracy, + String? householdHeadName, + String? tag, + BuildContext? context}); } /// @nodoc @@ -111,18 +170,38 @@ class __$$ClosedHouseholdSubmitEventImplCopyWithImpl<$Res> @pragma('vm:prefer-inline') @override $Res call({ - Object? userAction = null, - Object? isEditing = null, + Object? latitude = null, + Object? longitude = null, + Object? locationAccuracy = null, + Object? householdHeadName = freezed, + Object? tag = freezed, + Object? context = freezed, }) { return _then(_$ClosedHouseholdSubmitEventImpl( - null == userAction - ? _value.userAction - : userAction // ignore: cast_nullable_to_non_nullable - as UserActionModel, - null == isEditing - ? _value.isEditing - : isEditing // ignore: cast_nullable_to_non_nullable - as bool, + latitude: null == latitude + ? _value.latitude + : latitude // ignore: cast_nullable_to_non_nullable + as double, + longitude: null == longitude + ? _value.longitude + : longitude // ignore: cast_nullable_to_non_nullable + as double, + locationAccuracy: null == locationAccuracy + ? _value.locationAccuracy + : locationAccuracy // ignore: cast_nullable_to_non_nullable + as double, + householdHeadName: freezed == householdHeadName + ? _value.householdHeadName + : householdHeadName // ignore: cast_nullable_to_non_nullable + as String?, + tag: freezed == tag + ? _value.tag + : tag // ignore: cast_nullable_to_non_nullable + as String?, + context: freezed == context + ? _value.context + : context // ignore: cast_nullable_to_non_nullable + as BuildContext?, )); } } @@ -130,16 +209,33 @@ class __$$ClosedHouseholdSubmitEventImplCopyWithImpl<$Res> /// @nodoc class _$ClosedHouseholdSubmitEventImpl implements ClosedHouseholdSubmitEvent { - const _$ClosedHouseholdSubmitEventImpl(this.userAction, this.isEditing); + const _$ClosedHouseholdSubmitEventImpl( + {this.latitude = 0, + this.longitude = 0, + this.locationAccuracy = 0, + this.householdHeadName, + this.tag, + this.context}); @override - final UserActionModel userAction; + @JsonKey() + final double latitude; @override - final bool isEditing; + @JsonKey() + final double longitude; + @override + @JsonKey() + final double locationAccuracy; + @override + final String? householdHeadName; + @override + final String? tag; + @override + final BuildContext? context; @override String toString() { - return 'ClosedHouseholdEvent.handleSubmit(userAction: $userAction, isEditing: $isEditing)'; + return 'ClosedHouseholdEvent.handleSubmit(latitude: $latitude, longitude: $longitude, locationAccuracy: $locationAccuracy, householdHeadName: $householdHeadName, tag: $tag, context: $context)'; } @override @@ -147,14 +243,21 @@ class _$ClosedHouseholdSubmitEventImpl implements ClosedHouseholdSubmitEvent { return identical(this, other) || (other.runtimeType == runtimeType && other is _$ClosedHouseholdSubmitEventImpl && - (identical(other.userAction, userAction) || - other.userAction == userAction) && - (identical(other.isEditing, isEditing) || - other.isEditing == isEditing)); + (identical(other.latitude, latitude) || + other.latitude == latitude) && + (identical(other.longitude, longitude) || + other.longitude == longitude) && + (identical(other.locationAccuracy, locationAccuracy) || + other.locationAccuracy == locationAccuracy) && + (identical(other.householdHeadName, householdHeadName) || + other.householdHeadName == householdHeadName) && + (identical(other.tag, tag) || other.tag == tag) && + (identical(other.context, context) || other.context == context)); } @override - int get hashCode => Object.hash(runtimeType, userAction, isEditing); + int get hashCode => Object.hash(runtimeType, latitude, longitude, + locationAccuracy, householdHeadName, tag, context); @JsonKey(ignore: true) @override @@ -166,40 +269,55 @@ class _$ClosedHouseholdSubmitEventImpl implements ClosedHouseholdSubmitEvent { @override @optionalTypeArgs TResult when({ - required TResult Function(UserActionModel userAction, bool isEditing) - handleSubmit, - required TResult Function(UserActionModel summary) handleSummary, required TResult Function( - String selectedClientReferenceId, String selectedHouseholdId) - handleUpdate, + double latitude, + double longitude, + double locationAccuracy, + String? householdHeadName, + String? tag, + BuildContext? context) + handleSubmit, + required TResult Function(double latitude, double longitude, + double locationAccuracy, String? householdHeadName) + handleSummary, }) { - return handleSubmit(userAction, isEditing); + return handleSubmit( + latitude, longitude, locationAccuracy, householdHeadName, tag, context); } @override @optionalTypeArgs TResult? whenOrNull({ - TResult? Function(UserActionModel userAction, bool isEditing)? handleSubmit, - TResult? Function(UserActionModel summary)? handleSummary, TResult? Function( - String selectedClientReferenceId, String selectedHouseholdId)? - handleUpdate, + double latitude, + double longitude, + double locationAccuracy, + String? householdHeadName, + String? tag, + BuildContext? context)? + handleSubmit, + TResult? Function(double latitude, double longitude, + double locationAccuracy, String? householdHeadName)? + handleSummary, }) { - return handleSubmit?.call(userAction, isEditing); + return handleSubmit?.call( + latitude, longitude, locationAccuracy, householdHeadName, tag, context); } @override @optionalTypeArgs TResult maybeWhen({ - TResult Function(UserActionModel userAction, bool isEditing)? handleSubmit, - TResult Function(UserActionModel summary)? handleSummary, - TResult Function( - String selectedClientReferenceId, String selectedHouseholdId)? - handleUpdate, + TResult Function(double latitude, double longitude, double locationAccuracy, + String? householdHeadName, String? tag, BuildContext? context)? + handleSubmit, + TResult Function(double latitude, double longitude, double locationAccuracy, + String? householdHeadName)? + handleSummary, required TResult orElse(), }) { if (handleSubmit != null) { - return handleSubmit(userAction, isEditing); + return handleSubmit(latitude, longitude, locationAccuracy, + householdHeadName, tag, context); } return orElse(); } @@ -209,7 +327,6 @@ class _$ClosedHouseholdSubmitEventImpl implements ClosedHouseholdSubmitEvent { TResult map({ required TResult Function(ClosedHouseholdSubmitEvent value) handleSubmit, required TResult Function(ClosedHouseholdSummaryEvent value) handleSummary, - required TResult Function(ClosedHouseholdUpdateEvent value) handleUpdate, }) { return handleSubmit(this); } @@ -219,7 +336,6 @@ class _$ClosedHouseholdSubmitEventImpl implements ClosedHouseholdSubmitEvent { TResult? mapOrNull({ TResult? Function(ClosedHouseholdSubmitEvent value)? handleSubmit, TResult? Function(ClosedHouseholdSummaryEvent value)? handleSummary, - TResult? Function(ClosedHouseholdUpdateEvent value)? handleUpdate, }) { return handleSubmit?.call(this); } @@ -229,7 +345,6 @@ class _$ClosedHouseholdSubmitEventImpl implements ClosedHouseholdSubmitEvent { TResult maybeMap({ TResult Function(ClosedHouseholdSubmitEvent value)? handleSubmit, TResult Function(ClosedHouseholdSummaryEvent value)? handleSummary, - TResult Function(ClosedHouseholdUpdateEvent value)? handleUpdate, required TResult orElse(), }) { if (handleSubmit != null) { @@ -241,24 +356,43 @@ class _$ClosedHouseholdSubmitEventImpl implements ClosedHouseholdSubmitEvent { abstract class ClosedHouseholdSubmitEvent implements ClosedHouseholdEvent { const factory ClosedHouseholdSubmitEvent( - final UserActionModel userAction, final bool isEditing) = - _$ClosedHouseholdSubmitEventImpl; + {final double latitude, + final double longitude, + final double locationAccuracy, + final String? householdHeadName, + final String? tag, + final BuildContext? context}) = _$ClosedHouseholdSubmitEventImpl; - UserActionModel get userAction; - bool get isEditing; + @override + double get latitude; + @override + double get longitude; + @override + double get locationAccuracy; + @override + String? get householdHeadName; + String? get tag; + BuildContext? get context; + @override @JsonKey(ignore: true) _$$ClosedHouseholdSubmitEventImplCopyWith<_$ClosedHouseholdSubmitEventImpl> get copyWith => throw _privateConstructorUsedError; } /// @nodoc -abstract class _$$ClosedHouseholdSummaryEventImplCopyWith<$Res> { +abstract class _$$ClosedHouseholdSummaryEventImplCopyWith<$Res> + implements $ClosedHouseholdEventCopyWith<$Res> { factory _$$ClosedHouseholdSummaryEventImplCopyWith( _$ClosedHouseholdSummaryEventImpl value, $Res Function(_$ClosedHouseholdSummaryEventImpl) then) = __$$ClosedHouseholdSummaryEventImplCopyWithImpl<$Res>; + @override @useResult - $Res call({UserActionModel summary}); + $Res call( + {double latitude, + double longitude, + double locationAccuracy, + String? householdHeadName}); } /// @nodoc @@ -274,13 +408,28 @@ class __$$ClosedHouseholdSummaryEventImplCopyWithImpl<$Res> @pragma('vm:prefer-inline') @override $Res call({ - Object? summary = null, + Object? latitude = null, + Object? longitude = null, + Object? locationAccuracy = null, + Object? householdHeadName = freezed, }) { return _then(_$ClosedHouseholdSummaryEventImpl( - null == summary - ? _value.summary - : summary // ignore: cast_nullable_to_non_nullable - as UserActionModel, + latitude: null == latitude + ? _value.latitude + : latitude // ignore: cast_nullable_to_non_nullable + as double, + longitude: null == longitude + ? _value.longitude + : longitude // ignore: cast_nullable_to_non_nullable + as double, + locationAccuracy: null == locationAccuracy + ? _value.locationAccuracy + : locationAccuracy // ignore: cast_nullable_to_non_nullable + as double, + householdHeadName: freezed == householdHeadName + ? _value.householdHeadName + : householdHeadName // ignore: cast_nullable_to_non_nullable + as String?, )); } } @@ -288,14 +437,27 @@ class __$$ClosedHouseholdSummaryEventImplCopyWithImpl<$Res> /// @nodoc class _$ClosedHouseholdSummaryEventImpl implements ClosedHouseholdSummaryEvent { - const _$ClosedHouseholdSummaryEventImpl(this.summary); + const _$ClosedHouseholdSummaryEventImpl( + {this.latitude = 0, + this.longitude = 0, + this.locationAccuracy = 0, + this.householdHeadName}); @override - final UserActionModel summary; + @JsonKey() + final double latitude; + @override + @JsonKey() + final double longitude; + @override + @JsonKey() + final double locationAccuracy; + @override + final String? householdHeadName; @override String toString() { - return 'ClosedHouseholdEvent.handleSummary(summary: $summary)'; + return 'ClosedHouseholdEvent.handleSummary(latitude: $latitude, longitude: $longitude, locationAccuracy: $locationAccuracy, householdHeadName: $householdHeadName)'; } @override @@ -303,11 +465,19 @@ class _$ClosedHouseholdSummaryEventImpl implements ClosedHouseholdSummaryEvent { return identical(this, other) || (other.runtimeType == runtimeType && other is _$ClosedHouseholdSummaryEventImpl && - (identical(other.summary, summary) || other.summary == summary)); + (identical(other.latitude, latitude) || + other.latitude == latitude) && + (identical(other.longitude, longitude) || + other.longitude == longitude) && + (identical(other.locationAccuracy, locationAccuracy) || + other.locationAccuracy == locationAccuracy) && + (identical(other.householdHeadName, householdHeadName) || + other.householdHeadName == householdHeadName)); } @override - int get hashCode => Object.hash(runtimeType, summary); + int get hashCode => Object.hash( + runtimeType, latitude, longitude, locationAccuracy, householdHeadName); @JsonKey(ignore: true) @override @@ -319,40 +489,55 @@ class _$ClosedHouseholdSummaryEventImpl implements ClosedHouseholdSummaryEvent { @override @optionalTypeArgs TResult when({ - required TResult Function(UserActionModel userAction, bool isEditing) - handleSubmit, - required TResult Function(UserActionModel summary) handleSummary, required TResult Function( - String selectedClientReferenceId, String selectedHouseholdId) - handleUpdate, + double latitude, + double longitude, + double locationAccuracy, + String? householdHeadName, + String? tag, + BuildContext? context) + handleSubmit, + required TResult Function(double latitude, double longitude, + double locationAccuracy, String? householdHeadName) + handleSummary, }) { - return handleSummary(summary); + return handleSummary( + latitude, longitude, locationAccuracy, householdHeadName); } @override @optionalTypeArgs TResult? whenOrNull({ - TResult? Function(UserActionModel userAction, bool isEditing)? handleSubmit, - TResult? Function(UserActionModel summary)? handleSummary, TResult? Function( - String selectedClientReferenceId, String selectedHouseholdId)? - handleUpdate, + double latitude, + double longitude, + double locationAccuracy, + String? householdHeadName, + String? tag, + BuildContext? context)? + handleSubmit, + TResult? Function(double latitude, double longitude, + double locationAccuracy, String? householdHeadName)? + handleSummary, }) { - return handleSummary?.call(summary); + return handleSummary?.call( + latitude, longitude, locationAccuracy, householdHeadName); } @override @optionalTypeArgs TResult maybeWhen({ - TResult Function(UserActionModel userAction, bool isEditing)? handleSubmit, - TResult Function(UserActionModel summary)? handleSummary, - TResult Function( - String selectedClientReferenceId, String selectedHouseholdId)? - handleUpdate, + TResult Function(double latitude, double longitude, double locationAccuracy, + String? householdHeadName, String? tag, BuildContext? context)? + handleSubmit, + TResult Function(double latitude, double longitude, double locationAccuracy, + String? householdHeadName)? + handleSummary, required TResult orElse(), }) { if (handleSummary != null) { - return handleSummary(summary); + return handleSummary( + latitude, longitude, locationAccuracy, householdHeadName); } return orElse(); } @@ -362,7 +547,6 @@ class _$ClosedHouseholdSummaryEventImpl implements ClosedHouseholdSummaryEvent { TResult map({ required TResult Function(ClosedHouseholdSubmitEvent value) handleSubmit, required TResult Function(ClosedHouseholdSummaryEvent value) handleSummary, - required TResult Function(ClosedHouseholdUpdateEvent value) handleUpdate, }) { return handleSummary(this); } @@ -372,7 +556,6 @@ class _$ClosedHouseholdSummaryEventImpl implements ClosedHouseholdSummaryEvent { TResult? mapOrNull({ TResult? Function(ClosedHouseholdSubmitEvent value)? handleSubmit, TResult? Function(ClosedHouseholdSummaryEvent value)? handleSummary, - TResult? Function(ClosedHouseholdUpdateEvent value)? handleUpdate, }) { return handleSummary?.call(this); } @@ -382,7 +565,6 @@ class _$ClosedHouseholdSummaryEventImpl implements ClosedHouseholdSummaryEvent { TResult maybeMap({ TResult Function(ClosedHouseholdSubmitEvent value)? handleSubmit, TResult Function(ClosedHouseholdSummaryEvent value)? handleSummary, - TResult Function(ClosedHouseholdUpdateEvent value)? handleUpdate, required TResult orElse(), }) { if (handleSummary != null) { @@ -393,178 +575,23 @@ class _$ClosedHouseholdSummaryEventImpl implements ClosedHouseholdSummaryEvent { } abstract class ClosedHouseholdSummaryEvent implements ClosedHouseholdEvent { - const factory ClosedHouseholdSummaryEvent(final UserActionModel summary) = - _$ClosedHouseholdSummaryEventImpl; - - UserActionModel get summary; - @JsonKey(ignore: true) - _$$ClosedHouseholdSummaryEventImplCopyWith<_$ClosedHouseholdSummaryEventImpl> - get copyWith => throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class _$$ClosedHouseholdUpdateEventImplCopyWith<$Res> { - factory _$$ClosedHouseholdUpdateEventImplCopyWith( - _$ClosedHouseholdUpdateEventImpl value, - $Res Function(_$ClosedHouseholdUpdateEventImpl) then) = - __$$ClosedHouseholdUpdateEventImplCopyWithImpl<$Res>; - @useResult - $Res call({String selectedClientReferenceId, String selectedHouseholdId}); -} - -/// @nodoc -class __$$ClosedHouseholdUpdateEventImplCopyWithImpl<$Res> - extends _$ClosedHouseholdEventCopyWithImpl<$Res, - _$ClosedHouseholdUpdateEventImpl> - implements _$$ClosedHouseholdUpdateEventImplCopyWith<$Res> { - __$$ClosedHouseholdUpdateEventImplCopyWithImpl( - _$ClosedHouseholdUpdateEventImpl _value, - $Res Function(_$ClosedHouseholdUpdateEventImpl) _then) - : super(_value, _then); - - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? selectedClientReferenceId = null, - Object? selectedHouseholdId = null, - }) { - return _then(_$ClosedHouseholdUpdateEventImpl( - null == selectedClientReferenceId - ? _value.selectedClientReferenceId - : selectedClientReferenceId // ignore: cast_nullable_to_non_nullable - as String, - null == selectedHouseholdId - ? _value.selectedHouseholdId - : selectedHouseholdId // ignore: cast_nullable_to_non_nullable - as String, - )); - } -} - -/// @nodoc - -class _$ClosedHouseholdUpdateEventImpl implements ClosedHouseholdUpdateEvent { - const _$ClosedHouseholdUpdateEventImpl( - this.selectedClientReferenceId, this.selectedHouseholdId); + const factory ClosedHouseholdSummaryEvent( + {final double latitude, + final double longitude, + final double locationAccuracy, + final String? householdHeadName}) = _$ClosedHouseholdSummaryEventImpl; @override - final String selectedClientReferenceId; + double get latitude; @override - final String selectedHouseholdId; - + double get longitude; @override - String toString() { - return 'ClosedHouseholdEvent.handleUpdate(selectedClientReferenceId: $selectedClientReferenceId, selectedHouseholdId: $selectedHouseholdId)'; - } - + double get locationAccuracy; @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$ClosedHouseholdUpdateEventImpl && - (identical(other.selectedClientReferenceId, - selectedClientReferenceId) || - other.selectedClientReferenceId == selectedClientReferenceId) && - (identical(other.selectedHouseholdId, selectedHouseholdId) || - other.selectedHouseholdId == selectedHouseholdId)); - } - + String? get householdHeadName; @override - int get hashCode => - Object.hash(runtimeType, selectedClientReferenceId, selectedHouseholdId); - @JsonKey(ignore: true) - @override - @pragma('vm:prefer-inline') - _$$ClosedHouseholdUpdateEventImplCopyWith<_$ClosedHouseholdUpdateEventImpl> - get copyWith => __$$ClosedHouseholdUpdateEventImplCopyWithImpl< - _$ClosedHouseholdUpdateEventImpl>(this, _$identity); - - @override - @optionalTypeArgs - TResult when({ - required TResult Function(UserActionModel userAction, bool isEditing) - handleSubmit, - required TResult Function(UserActionModel summary) handleSummary, - required TResult Function( - String selectedClientReferenceId, String selectedHouseholdId) - handleUpdate, - }) { - return handleUpdate(selectedClientReferenceId, selectedHouseholdId); - } - - @override - @optionalTypeArgs - TResult? whenOrNull({ - TResult? Function(UserActionModel userAction, bool isEditing)? handleSubmit, - TResult? Function(UserActionModel summary)? handleSummary, - TResult? Function( - String selectedClientReferenceId, String selectedHouseholdId)? - handleUpdate, - }) { - return handleUpdate?.call(selectedClientReferenceId, selectedHouseholdId); - } - - @override - @optionalTypeArgs - TResult maybeWhen({ - TResult Function(UserActionModel userAction, bool isEditing)? handleSubmit, - TResult Function(UserActionModel summary)? handleSummary, - TResult Function( - String selectedClientReferenceId, String selectedHouseholdId)? - handleUpdate, - required TResult orElse(), - }) { - if (handleUpdate != null) { - return handleUpdate(selectedClientReferenceId, selectedHouseholdId); - } - return orElse(); - } - - @override - @optionalTypeArgs - TResult map({ - required TResult Function(ClosedHouseholdSubmitEvent value) handleSubmit, - required TResult Function(ClosedHouseholdSummaryEvent value) handleSummary, - required TResult Function(ClosedHouseholdUpdateEvent value) handleUpdate, - }) { - return handleUpdate(this); - } - - @override - @optionalTypeArgs - TResult? mapOrNull({ - TResult? Function(ClosedHouseholdSubmitEvent value)? handleSubmit, - TResult? Function(ClosedHouseholdSummaryEvent value)? handleSummary, - TResult? Function(ClosedHouseholdUpdateEvent value)? handleUpdate, - }) { - return handleUpdate?.call(this); - } - - @override - @optionalTypeArgs - TResult maybeMap({ - TResult Function(ClosedHouseholdSubmitEvent value)? handleSubmit, - TResult Function(ClosedHouseholdSummaryEvent value)? handleSummary, - TResult Function(ClosedHouseholdUpdateEvent value)? handleUpdate, - required TResult orElse(), - }) { - if (handleUpdate != null) { - return handleUpdate(this); - } - return orElse(); - } -} - -abstract class ClosedHouseholdUpdateEvent implements ClosedHouseholdEvent { - const factory ClosedHouseholdUpdateEvent( - final String selectedClientReferenceId, - final String selectedHouseholdId) = _$ClosedHouseholdUpdateEventImpl; - - String get selectedClientReferenceId; - String get selectedHouseholdId; - @JsonKey(ignore: true) - _$$ClosedHouseholdUpdateEventImplCopyWith<_$ClosedHouseholdUpdateEventImpl> + _$$ClosedHouseholdSummaryEventImplCopyWith<_$ClosedHouseholdSummaryEventImpl> get copyWith => throw _privateConstructorUsedError; } @@ -572,10 +599,10 @@ abstract class ClosedHouseholdUpdateEvent implements ClosedHouseholdEvent { mixin _$ClosedHouseholdState { bool get loading => throw _privateConstructorUsedError; bool get isEditing => throw _privateConstructorUsedError; - List? get userActions => throw _privateConstructorUsedError; - UserActionModel? get summary => throw _privateConstructorUsedError; - String? get selectedClientReferenceId => throw _privateConstructorUsedError; - String? get selectedHouseholdId => throw _privateConstructorUsedError; + double get latitude => throw _privateConstructorUsedError; + double get longitude => throw _privateConstructorUsedError; + double get locationAccuracy => throw _privateConstructorUsedError; + String? get householdHeadName => throw _privateConstructorUsedError; @JsonKey(ignore: true) $ClosedHouseholdStateCopyWith get copyWith => @@ -591,10 +618,10 @@ abstract class $ClosedHouseholdStateCopyWith<$Res> { $Res call( {bool loading, bool isEditing, - List? userActions, - UserActionModel? summary, - String? selectedClientReferenceId, - String? selectedHouseholdId}); + double latitude, + double longitude, + double locationAccuracy, + String? householdHeadName}); } /// @nodoc @@ -613,10 +640,10 @@ class _$ClosedHouseholdStateCopyWithImpl<$Res, $Res call({ Object? loading = null, Object? isEditing = null, - Object? userActions = freezed, - Object? summary = freezed, - Object? selectedClientReferenceId = freezed, - Object? selectedHouseholdId = freezed, + Object? latitude = null, + Object? longitude = null, + Object? locationAccuracy = null, + Object? householdHeadName = freezed, }) { return _then(_value.copyWith( loading: null == loading @@ -627,21 +654,21 @@ class _$ClosedHouseholdStateCopyWithImpl<$Res, ? _value.isEditing : isEditing // ignore: cast_nullable_to_non_nullable as bool, - userActions: freezed == userActions - ? _value.userActions - : userActions // ignore: cast_nullable_to_non_nullable - as List?, - summary: freezed == summary - ? _value.summary - : summary // ignore: cast_nullable_to_non_nullable - as UserActionModel?, - selectedClientReferenceId: freezed == selectedClientReferenceId - ? _value.selectedClientReferenceId - : selectedClientReferenceId // ignore: cast_nullable_to_non_nullable - as String?, - selectedHouseholdId: freezed == selectedHouseholdId - ? _value.selectedHouseholdId - : selectedHouseholdId // ignore: cast_nullable_to_non_nullable + latitude: null == latitude + ? _value.latitude + : latitude // ignore: cast_nullable_to_non_nullable + as double, + longitude: null == longitude + ? _value.longitude + : longitude // ignore: cast_nullable_to_non_nullable + as double, + locationAccuracy: null == locationAccuracy + ? _value.locationAccuracy + : locationAccuracy // ignore: cast_nullable_to_non_nullable + as double, + householdHeadName: freezed == householdHeadName + ? _value.householdHeadName + : householdHeadName // ignore: cast_nullable_to_non_nullable as String?, ) as $Val); } @@ -658,10 +685,10 @@ abstract class _$$ClosedHouseholdStateImplCopyWith<$Res> $Res call( {bool loading, bool isEditing, - List? userActions, - UserActionModel? summary, - String? selectedClientReferenceId, - String? selectedHouseholdId}); + double latitude, + double longitude, + double locationAccuracy, + String? householdHeadName}); } /// @nodoc @@ -677,10 +704,10 @@ class __$$ClosedHouseholdStateImplCopyWithImpl<$Res> $Res call({ Object? loading = null, Object? isEditing = null, - Object? userActions = freezed, - Object? summary = freezed, - Object? selectedClientReferenceId = freezed, - Object? selectedHouseholdId = freezed, + Object? latitude = null, + Object? longitude = null, + Object? locationAccuracy = null, + Object? householdHeadName = freezed, }) { return _then(_$ClosedHouseholdStateImpl( loading: null == loading @@ -691,21 +718,21 @@ class __$$ClosedHouseholdStateImplCopyWithImpl<$Res> ? _value.isEditing : isEditing // ignore: cast_nullable_to_non_nullable as bool, - userActions: freezed == userActions - ? _value._userActions - : userActions // ignore: cast_nullable_to_non_nullable - as List?, - summary: freezed == summary - ? _value.summary - : summary // ignore: cast_nullable_to_non_nullable - as UserActionModel?, - selectedClientReferenceId: freezed == selectedClientReferenceId - ? _value.selectedClientReferenceId - : selectedClientReferenceId // ignore: cast_nullable_to_non_nullable - as String?, - selectedHouseholdId: freezed == selectedHouseholdId - ? _value.selectedHouseholdId - : selectedHouseholdId // ignore: cast_nullable_to_non_nullable + latitude: null == latitude + ? _value.latitude + : latitude // ignore: cast_nullable_to_non_nullable + as double, + longitude: null == longitude + ? _value.longitude + : longitude // ignore: cast_nullable_to_non_nullable + as double, + locationAccuracy: null == locationAccuracy + ? _value.locationAccuracy + : locationAccuracy // ignore: cast_nullable_to_non_nullable + as double, + householdHeadName: freezed == householdHeadName + ? _value.householdHeadName + : householdHeadName // ignore: cast_nullable_to_non_nullable as String?, )); } @@ -717,11 +744,10 @@ class _$ClosedHouseholdStateImpl implements _ClosedHouseholdState { const _$ClosedHouseholdStateImpl( {this.loading = false, this.isEditing = false, - final List? userActions, - this.summary, - this.selectedClientReferenceId, - this.selectedHouseholdId}) - : _userActions = userActions; + this.latitude = 0, + this.longitude = 0, + this.locationAccuracy = 0, + this.householdHeadName}); @override @JsonKey() @@ -729,26 +755,21 @@ class _$ClosedHouseholdStateImpl implements _ClosedHouseholdState { @override @JsonKey() final bool isEditing; - final List? _userActions; - @override - List? get userActions { - final value = _userActions; - if (value == null) return null; - if (_userActions is EqualUnmodifiableListView) return _userActions; - // ignore: implicit_dynamic_type - return EqualUnmodifiableListView(value); - } - @override - final UserActionModel? summary; + @JsonKey() + final double latitude; @override - final String? selectedClientReferenceId; + @JsonKey() + final double longitude; @override - final String? selectedHouseholdId; + @JsonKey() + final double locationAccuracy; + @override + final String? householdHeadName; @override String toString() { - return 'ClosedHouseholdState(loading: $loading, isEditing: $isEditing, userActions: $userActions, summary: $summary, selectedClientReferenceId: $selectedClientReferenceId, selectedHouseholdId: $selectedHouseholdId)'; + return 'ClosedHouseholdState(loading: $loading, isEditing: $isEditing, latitude: $latitude, longitude: $longitude, locationAccuracy: $locationAccuracy, householdHeadName: $householdHeadName)'; } @override @@ -759,25 +780,19 @@ class _$ClosedHouseholdStateImpl implements _ClosedHouseholdState { (identical(other.loading, loading) || other.loading == loading) && (identical(other.isEditing, isEditing) || other.isEditing == isEditing) && - const DeepCollectionEquality() - .equals(other._userActions, _userActions) && - (identical(other.summary, summary) || other.summary == summary) && - (identical(other.selectedClientReferenceId, - selectedClientReferenceId) || - other.selectedClientReferenceId == selectedClientReferenceId) && - (identical(other.selectedHouseholdId, selectedHouseholdId) || - other.selectedHouseholdId == selectedHouseholdId)); + (identical(other.latitude, latitude) || + other.latitude == latitude) && + (identical(other.longitude, longitude) || + other.longitude == longitude) && + (identical(other.locationAccuracy, locationAccuracy) || + other.locationAccuracy == locationAccuracy) && + (identical(other.householdHeadName, householdHeadName) || + other.householdHeadName == householdHeadName)); } @override - int get hashCode => Object.hash( - runtimeType, - loading, - isEditing, - const DeepCollectionEquality().hash(_userActions), - summary, - selectedClientReferenceId, - selectedHouseholdId); + int get hashCode => Object.hash(runtimeType, loading, isEditing, latitude, + longitude, locationAccuracy, householdHeadName); @JsonKey(ignore: true) @override @@ -792,23 +807,23 @@ abstract class _ClosedHouseholdState implements ClosedHouseholdState { const factory _ClosedHouseholdState( {final bool loading, final bool isEditing, - final List? userActions, - final UserActionModel? summary, - final String? selectedClientReferenceId, - final String? selectedHouseholdId}) = _$ClosedHouseholdStateImpl; + final double latitude, + final double longitude, + final double locationAccuracy, + final String? householdHeadName}) = _$ClosedHouseholdStateImpl; @override bool get loading; @override bool get isEditing; @override - List? get userActions; + double get latitude; @override - UserActionModel? get summary; + double get longitude; @override - String? get selectedClientReferenceId; + double get locationAccuracy; @override - String? get selectedHouseholdId; + String? get householdHeadName; @override @JsonKey(ignore: true) _$$ClosedHouseholdStateImplCopyWith<_$ClosedHouseholdStateImpl> diff --git a/packages/closed_household/lib/closed_household.dart b/packages/closed_household/lib/closed_household.dart index 8f624e673..c490c8973 100644 --- a/packages/closed_household/lib/closed_household.dart +++ b/packages/closed_household/lib/closed_household.dart @@ -7,14 +7,8 @@ import 'package:dart_mappable/dart_mappable.dart'; export 'blocs/app_localization.dart'; export 'blocs/closed_household.dart'; -export 'models/entities/user_action.dart'; -export 'models/entities/action.dart'; -export 'models/entities/status.dart'; export 'utils/utils.dart' show ClosedHouseholdSingleton; export 'pages/closed_household_details.dart'; export 'pages/closed_household_summary.dart'; export 'pages/closed_household_acknowledgement.dart'; -export 'pages/closed_household_wrapper.dart'; -export 'closed_household.init.dart'; - - +export 'router/closed_household_router.dart'; \ No newline at end of file diff --git a/packages/closed_household/lib/closed_household.init.dart b/packages/closed_household/lib/closed_household.init.dart deleted file mode 100644 index 177565941..000000000 --- a/packages/closed_household/lib/closed_household.init.dart +++ /dev/null @@ -1,16 +0,0 @@ -// coverage:ignore-file -// GENERATED CODE - DO NOT MODIFY BY HAND -// ignore_for_file: type=lint -// ignore_for_file: unused_element - -import 'models/entities/action.dart' as p0; -import 'models/entities/status.dart' as p1; -import 'models/entities/user_action.dart' as p2; - -void initializeMappers() { - p0.ActionsMapper.ensureInitialized(); - p1.StatusMapper.ensureInitialized(); - p2.UserActionSearchModelMapper.ensureInitialized(); - p2.UserActionModelMapper.ensureInitialized(); - p2.UserActionAdditionalFieldsMapper.ensureInitialized(); -} diff --git a/packages/closed_household/lib/data/repositories/local/base/user_action_base.dart b/packages/closed_household/lib/data/repositories/local/base/user_action_base.dart deleted file mode 100644 index 1954f63bb..000000000 --- a/packages/closed_household/lib/data/repositories/local/base/user_action_base.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'package:closed_household/models/entities/user_action.dart'; -import 'package:digit_data_model/data_model.dart'; -import 'package:drift/drift.dart'; - - -abstract class UserActionLocalBaseRepository - extends LocalRepository { - - const UserActionLocalBaseRepository( - super.sql, super.opLogManager,); - - @override - DataModelType get type => DataModelType.userAction; - - @override - TableInfo get table => sql.userAction; -} diff --git a/packages/closed_household/lib/data/repositories/local/user_action.dart b/packages/closed_household/lib/data/repositories/local/user_action.dart deleted file mode 100644 index d0d3a4dec..000000000 --- a/packages/closed_household/lib/data/repositories/local/user_action.dart +++ /dev/null @@ -1,167 +0,0 @@ -import 'dart:async'; - -import 'package:collection/collection.dart'; -import 'package:digit_data_model/data_model.dart'; -import 'package:drift/drift.dart'; -import '../../../models/entities/user_action.dart'; - -class ClosedHouseholdLocalRepository - extends LocalRepository { - ClosedHouseholdLocalRepository( - super.sql, - super.opLogManager, - ); - - void listenToChanges({ - required UserActionSearchModel query, - required void Function(List data) listener, - }) async { - return retryLocalCallOperation(() async { - final select = sql.select(sql.userAction) - ..where((t) => buildOr([ - if (query.projectId != null) t.projectId.equals(query.projectId!), - ])); - - select.watch().listen((results) { - final data = results - .map((userAction) { - return UserActionModel( - id: userAction.id, - clientReferenceId: userAction.clientReferenceId, - rowVersion: userAction.rowVersion, - tenantId: userAction.tenantId, - isDeleted: userAction.isDeleted, - projectId: userAction.projectId, - status: userAction.status, - action: userAction.action, - ); - }) - .whereNotNull() - .where((element) => element.isDeleted != true) - .toList(); - - listener(data); - }); - }); - } - - @override - FutureOr> search( - UserActionSearchModel query, [ - String? userId, - ]) async { - return retryLocalCallOperation>(() async { - final userAction = sql.select(sql.userAction).join([]); - - if (query.projectId != null) { - userAction.where( - sql.userAction.clientReferenceId - .equals(query.clientReferenceId!.first), - ); - } - - final results = await userAction.get(); - final userActionTable = results.map((e) => e.readTable(sql.userAction)); - return userActionTable - .map((e) => UserActionModel( - clientReferenceId: e.clientReferenceId, - action: e.action, - additionalFields: e.additionalFields != null - ? UserActionAdditionalFieldsMapper.fromJson( - e.additionalFields!.toString()) - : null, - auditDetails: - (e.auditCreatedBy != null && e.auditCreatedTime != null) - ? AuditDetails( - createdBy: e.auditCreatedBy!, - createdTime: e.auditCreatedTime!, - lastModifiedBy: e.auditModifiedBy, - lastModifiedTime: e.auditModifiedTime, - ) - : null, - clientAuditDetails: - (e.clientCreatedBy != null && e.clientCreatedTime != null) - ? ClientAuditDetails( - createdBy: e.clientCreatedBy!, - createdTime: e.clientCreatedTime!, - lastModifiedBy: e.clientModifiedBy, - lastModifiedTime: e.clientModifiedTime, - ) - : null, - beneficiaryTag: e.beneficiaryTag, - boundaryCode: e.boundaryCode, - id: e.id, - projectId: e.projectId, - rowVersion: e.rowVersion, - status: e.status, - tenantId: e.tenantId, - isDeleted: e.isDeleted, - latitude: e.latitude, - locationAccuracy: e.locationAccuracy, - longitude: e.longitude, - nonRecoverableError: e.nonRecoverableError, - resourceTag: e.resourceTag, - )) - .toList(); - }); - } - - @override - FutureOr bulkCreate( - List entities, - ) async { - final userActionCompanions = entities.map((e) => e.companion).toList(); - - await sql.batch((batch) async { - batch.insertAll( - sql.userAction, - userActionCompanions, - mode: InsertMode.insertOrReplace, - ); - }); - } - - @override - FutureOr update( - UserActionModel entity, { - bool createOpLog = true, - }) async { - final userActionCompanion = entity.companion; - - await sql.batch((batch) { - batch.update( - sql.userAction, - userActionCompanion, - where: (table) => table.clientReferenceId.equals( - entity.clientReferenceId, - ), - ); - }); - - await super.update(entity, createOpLog: createOpLog); - } - - @override - FutureOr create( - UserActionModel entity, { - bool createOpLog = true, - DataOperation dataOperation = DataOperation.create, - }) async { - retryLocalCallOperation(() async { - final closedHouseholdCompanion = entity.companion; - - await sql.batch((batch) async { - batch.insert( - sql.userAction, - closedHouseholdCompanion, - mode: InsertMode.insertOrReplace, - ); - }); - - await super.create(entity, createOpLog: createOpLog); - }); - } - - @override - DataModelType get type => DataModelType.userAction; -} diff --git a/packages/closed_household/lib/data/repositories/oplog/oplog.dart b/packages/closed_household/lib/data/repositories/oplog/oplog.dart deleted file mode 100644 index 570bc1ba0..000000000 --- a/packages/closed_household/lib/data/repositories/oplog/oplog.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:digit_data_model/data_model.dart'; - -import '../../../models/entities/user_action.dart'; - -class ClosedHouseholdOpLogManager extends OpLogManager { - ClosedHouseholdOpLogManager(super.isar); - - @override - UserActionModel applyServerGeneratedIdToEntity( - UserActionModel entity, - String serverGeneratedId, - int rowVersion, - ) => - entity.copyWith( - id: serverGeneratedId, - rowVersion: rowVersion, - ); - - @override - String getClientReferenceId(UserActionModel entity) => - entity.clientReferenceId; - - @override - String? getServerGeneratedId(UserActionModel entity) => entity.id; - - @override - int? getRowVersion(UserActionModel entity) => entity.rowVersion; - - @override - bool? getNonRecoverableError(UserActionModel entity) => - entity.nonRecoverableError; -} diff --git a/packages/closed_household/lib/data/repositories/remote/user_action.dart b/packages/closed_household/lib/data/repositories/remote/user_action.dart deleted file mode 100644 index ac8bfece0..000000000 --- a/packages/closed_household/lib/data/repositories/remote/user_action.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'package:closed_household/models/entities/user_action.dart'; -import 'package:digit_data_model/data_model.dart'; - -class UserActionRemoteRepository - extends RemoteRepository { - UserActionRemoteRepository( - super.dio, { - required super.actionMap, - super.entityName = 'UserAction', - super.isSearchResponsePlural = true, - }); - - @override - DataModelType get type => DataModelType.userAction; -} diff --git a/packages/closed_household/lib/models/entities/action.dart b/packages/closed_household/lib/models/entities/action.dart deleted file mode 100644 index c4e114385..000000000 --- a/packages/closed_household/lib/models/entities/action.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:dart_mappable/dart_mappable.dart'; - -part 'action.mapper.dart'; -@MappableEnum(caseStyle: CaseStyle.upperCase) -enum Actions { - @MappableValue("CLOSED_HOUSEHOLD") closeHousehold, - @MappableValue("LOCATION_CAPTURE") locationCapture, - @MappableValue("OTHER") other, -} \ No newline at end of file diff --git a/packages/closed_household/lib/models/entities/action.mapper.dart b/packages/closed_household/lib/models/entities/action.mapper.dart deleted file mode 100644 index 50dd31e10..000000000 --- a/packages/closed_household/lib/models/entities/action.mapper.dart +++ /dev/null @@ -1,57 +0,0 @@ -// coverage:ignore-file -// GENERATED CODE - DO NOT MODIFY BY HAND -// ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast -// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter - -part of 'action.dart'; - -class ActionsMapper extends EnumMapper { - ActionsMapper._(); - - static ActionsMapper? _instance; - static ActionsMapper ensureInitialized() { - if (_instance == null) { - MapperContainer.globals.use(_instance = ActionsMapper._()); - } - return _instance!; - } - - static Actions fromValue(dynamic value) { - ensureInitialized(); - return MapperContainer.globals.fromValue(value); - } - - @override - Actions decode(dynamic value) { - switch (value) { - case "CLOSED_HOUSEHOLD": - return Actions.closeHousehold; - case "LOCATION_CAPTURE": - return Actions.locationCapture; - case "OTHER": - return Actions.other; - default: - throw MapperException.unknownEnumValue(value); - } - } - - @override - dynamic encode(Actions self) { - switch (self) { - case Actions.closeHousehold: - return "CLOSED_HOUSEHOLD"; - case Actions.locationCapture: - return "LOCATION_CAPTURE"; - case Actions.other: - return "OTHER"; - } - } -} - -extension ActionsMapperExtension on Actions { - dynamic toValue() { - ActionsMapper.ensureInitialized(); - return MapperContainer.globals.toValue(this); - } -} diff --git a/packages/closed_household/lib/models/entities/status.dart b/packages/closed_household/lib/models/entities/status.dart deleted file mode 100644 index ca33d1de4..000000000 --- a/packages/closed_household/lib/models/entities/status.dart +++ /dev/null @@ -1,12 +0,0 @@ -// Generated using mason. Do not modify by hand -import 'package:dart_mappable/dart_mappable.dart'; - -part 'status.mapper.dart'; -@MappableEnum(caseStyle: CaseStyle.upperCase) -enum Status { - @MappableValue("CLOSED_HOUSEHOLD") closeHousehold, - @MappableValue("REFUSED") refused, - @MappableValue("SPRAYED") sprayed, - @MappableValue("INELIGIBLE") ineligible, - @MappableValue("RESOLVED") resolved, -} \ No newline at end of file diff --git a/packages/closed_household/lib/models/entities/status.mapper.dart b/packages/closed_household/lib/models/entities/status.mapper.dart deleted file mode 100644 index dd006a045..000000000 --- a/packages/closed_household/lib/models/entities/status.mapper.dart +++ /dev/null @@ -1,65 +0,0 @@ -// coverage:ignore-file -// GENERATED CODE - DO NOT MODIFY BY HAND -// ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast -// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter - -part of 'status.dart'; - -class StatusMapper extends EnumMapper { - StatusMapper._(); - - static StatusMapper? _instance; - static StatusMapper ensureInitialized() { - if (_instance == null) { - MapperContainer.globals.use(_instance = StatusMapper._()); - } - return _instance!; - } - - static Status fromValue(dynamic value) { - ensureInitialized(); - return MapperContainer.globals.fromValue(value); - } - - @override - Status decode(dynamic value) { - switch (value) { - case "CLOSED_HOUSEHOLD": - return Status.closeHousehold; - case "REFUSED": - return Status.refused; - case "SPRAYED": - return Status.sprayed; - case "INELIGIBLE": - return Status.ineligible; - case "RESOLVED": - return Status.resolved; - default: - throw MapperException.unknownEnumValue(value); - } - } - - @override - dynamic encode(Status self) { - switch (self) { - case Status.closeHousehold: - return "CLOSED_HOUSEHOLD"; - case Status.refused: - return "REFUSED"; - case Status.sprayed: - return "SPRAYED"; - case Status.ineligible: - return "INELIGIBLE"; - case Status.resolved: - return "RESOLVED"; - } - } -} - -extension StatusMapperExtension on Status { - dynamic toValue() { - StatusMapper.ensureInitialized(); - return MapperContainer.globals.toValue(this); - } -} diff --git a/packages/closed_household/lib/models/entities/user_action.dart b/packages/closed_household/lib/models/entities/user_action.dart deleted file mode 100644 index 87094e261..000000000 --- a/packages/closed_household/lib/models/entities/user_action.dart +++ /dev/null @@ -1,126 +0,0 @@ -// Generated using mason. Do not modify by hand -import 'package:dart_mappable/dart_mappable.dart'; -import 'package:digit_data_model/data_model.dart'; -import 'package:drift/drift.dart'; - -part 'user_action.mapper.dart'; - -@MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) -class UserActionSearchModel extends EntitySearchModel with UserActionSearchModelMappable { - final List? id; - final List? clientReferenceId; - final String? projectId; - final String? tenantId; - final String? createdBy; - final String? status; - final int? offset; - final int? limit; - - UserActionSearchModel({ - this.id, - this.projectId, - this.createdBy, - this.status, - this.offset, - this.limit, - this.clientReferenceId, - this.tenantId, - super.boundaryCode, - super.isDeleted, - }); - - @MappableConstructor() - UserActionSearchModel.ignoreDeleted({ - this.id, - this.projectId, - this.createdBy, - this.status, - this.offset, - this.limit, - this.clientReferenceId, - this.tenantId, - super.boundaryCode, - }); -} - -@MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) -class UserActionModel extends EntityModel with UserActionModelMappable { - static const schemaName = 'UserAction'; - - final String? id; - final String? projectId; - final String? status; - final bool? nonRecoverableError; - final String clientReferenceId; - final String? tenantId; - final String? boundaryCode; - final int? rowVersion; - final String? resourceTag; - final String? beneficiaryTag; - final String? action; - final double? latitude; - final double? longitude; - final double? locationAccuracy; - final UserActionAdditionalFields? additionalFields; - - UserActionModel({ - this.additionalFields, - this.id, - this.projectId, - this.status, - this.nonRecoverableError = false, - required this.clientReferenceId, - this.tenantId, - this.boundaryCode, - this.rowVersion, - this.beneficiaryTag, - this.resourceTag, - this.action, - this.longitude, - this.latitude, - this.locationAccuracy, - super.auditDetails, - super.clientAuditDetails, - super.isDeleted = false, - }) : super(); - - - UserActionCompanion get companion { - return UserActionCompanion( - auditCreatedBy: Value(auditDetails?.createdBy), - auditCreatedTime: Value(auditDetails?.createdTime), - auditModifiedBy: Value(auditDetails?.lastModifiedBy), - clientCreatedTime: Value(clientAuditDetails?.createdTime), - clientModifiedTime: Value(clientAuditDetails?.lastModifiedTime), - clientCreatedBy: Value(clientAuditDetails?.createdBy), - clientModifiedBy: Value(clientAuditDetails?.lastModifiedBy), - auditModifiedTime: Value(auditDetails?.lastModifiedTime), - additionalFields: Value(additionalFields?.toJson()), - isDeleted: Value(isDeleted), - id: Value(id), - projectId: Value(projectId), - status: Value(status), - nonRecoverableError: Value(nonRecoverableError), - clientReferenceId: Value(clientReferenceId), - tenantId: Value(tenantId), - boundaryCode: Value(boundaryCode), - rowVersion: Value(rowVersion), - action: Value(action), - beneficiaryTag: Value(beneficiaryTag), - resourceTag: Value(resourceTag), - latitude: Value(latitude), - longitude: Value(longitude), - locationAccuracy: Value(locationAccuracy), - ); - } -} - -@MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) -class UserActionAdditionalFields extends AdditionalFields - with UserActionAdditionalFieldsMappable { - UserActionAdditionalFields({ - super.schema = 'UserAction', - required super.version, - super.fields, - }); -} diff --git a/packages/closed_household/lib/models/entities/user_action.mapper.dart b/packages/closed_household/lib/models/entities/user_action.mapper.dart deleted file mode 100644 index 02fcc7ef9..000000000 --- a/packages/closed_household/lib/models/entities/user_action.mapper.dart +++ /dev/null @@ -1,704 +0,0 @@ -// coverage:ignore-file -// GENERATED CODE - DO NOT MODIFY BY HAND -// ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast -// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter - -part of 'user_action.dart'; - -class UserActionSearchModelMapper - extends SubClassMapperBase { - UserActionSearchModelMapper._(); - - static UserActionSearchModelMapper? _instance; - static UserActionSearchModelMapper ensureInitialized() { - if (_instance == null) { - MapperContainer.globals.use(_instance = UserActionSearchModelMapper._()); - } - return _instance!; - } - - @override - final String id = 'UserActionSearchModel'; - - static List? _$id(UserActionSearchModel v) => v.id; - static const Field> _f$id = - Field('id', _$id, opt: true); - static String? _$projectId(UserActionSearchModel v) => v.projectId; - static const Field _f$projectId = - Field('projectId', _$projectId, opt: true); - static String? _$createdBy(UserActionSearchModel v) => v.createdBy; - static const Field _f$createdBy = - Field('createdBy', _$createdBy, opt: true); - static String? _$status(UserActionSearchModel v) => v.status; - static const Field _f$status = - Field('status', _$status, opt: true); - static int? _$offset(UserActionSearchModel v) => v.offset; - static const Field _f$offset = - Field('offset', _$offset, opt: true); - static int? _$limit(UserActionSearchModel v) => v.limit; - static const Field _f$limit = - Field('limit', _$limit, opt: true); - static List? _$clientReferenceId(UserActionSearchModel v) => - v.clientReferenceId; - static const Field> _f$clientReferenceId = - Field('clientReferenceId', _$clientReferenceId, opt: true); - static String? _$tenantId(UserActionSearchModel v) => v.tenantId; - static const Field _f$tenantId = - Field('tenantId', _$tenantId, opt: true); - static String? _$boundaryCode(UserActionSearchModel v) => v.boundaryCode; - static const Field _f$boundaryCode = - Field('boundaryCode', _$boundaryCode, opt: true); - static AuditDetails? _$auditDetails(UserActionSearchModel v) => - v.auditDetails; - static const Field _f$auditDetails = - Field('auditDetails', _$auditDetails, mode: FieldMode.member); - static AdditionalFields? _$additionalFields(UserActionSearchModel v) => - v.additionalFields; - static const Field - _f$additionalFields = - Field('additionalFields', _$additionalFields, mode: FieldMode.member); - - @override - final MappableFields fields = const { - #id: _f$id, - #projectId: _f$projectId, - #createdBy: _f$createdBy, - #status: _f$status, - #offset: _f$offset, - #limit: _f$limit, - #clientReferenceId: _f$clientReferenceId, - #tenantId: _f$tenantId, - #boundaryCode: _f$boundaryCode, - #auditDetails: _f$auditDetails, - #additionalFields: _f$additionalFields, - }; - @override - final bool ignoreNull = true; - - @override - final String discriminatorKey = 'type'; - @override - final dynamic discriminatorValue = MappableClass.useAsDefault; - @override - late final ClassMapperBase superMapper = - EntitySearchModelMapper.ensureInitialized(); - - static UserActionSearchModel _instantiate(DecodingData data) { - return UserActionSearchModel.ignoreDeleted( - id: data.dec(_f$id), - projectId: data.dec(_f$projectId), - createdBy: data.dec(_f$createdBy), - status: data.dec(_f$status), - offset: data.dec(_f$offset), - limit: data.dec(_f$limit), - clientReferenceId: data.dec(_f$clientReferenceId), - tenantId: data.dec(_f$tenantId), - boundaryCode: data.dec(_f$boundaryCode)); - } - - @override - final Function instantiate = _instantiate; - - static UserActionSearchModel fromMap(Map map) { - return ensureInitialized().decodeMap(map); - } - - static UserActionSearchModel fromJson(String json) { - return ensureInitialized().decodeJson(json); - } -} - -mixin UserActionSearchModelMappable { - String toJson() { - return UserActionSearchModelMapper.ensureInitialized() - .encodeJson(this as UserActionSearchModel); - } - - Map toMap() { - return UserActionSearchModelMapper.ensureInitialized() - .encodeMap(this as UserActionSearchModel); - } - - UserActionSearchModelCopyWith - get copyWith => _UserActionSearchModelCopyWithImpl( - this as UserActionSearchModel, $identity, $identity); - @override - String toString() { - return UserActionSearchModelMapper.ensureInitialized() - .stringifyValue(this as UserActionSearchModel); - } - - @override - bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - UserActionSearchModelMapper.ensureInitialized() - .isValueEqual(this as UserActionSearchModel, other)); - } - - @override - int get hashCode { - return UserActionSearchModelMapper.ensureInitialized() - .hashValue(this as UserActionSearchModel); - } -} - -extension UserActionSearchModelValueCopy<$R, $Out> - on ObjectCopyWith<$R, UserActionSearchModel, $Out> { - UserActionSearchModelCopyWith<$R, UserActionSearchModel, $Out> - get $asUserActionSearchModel => - $base.as((v, t, t2) => _UserActionSearchModelCopyWithImpl(v, t, t2)); -} - -abstract class UserActionSearchModelCopyWith< - $R, - $In extends UserActionSearchModel, - $Out> implements EntitySearchModelCopyWith<$R, $In, $Out> { - ListCopyWith<$R, String, ObjectCopyWith<$R, String, String>>? get id; - ListCopyWith<$R, String, ObjectCopyWith<$R, String, String>>? - get clientReferenceId; - @override - $R call( - {List? id, - String? projectId, - String? createdBy, - String? status, - int? offset, - int? limit, - List? clientReferenceId, - String? tenantId, - String? boundaryCode}); - UserActionSearchModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>( - Then<$Out2, $R2> t); -} - -class _UserActionSearchModelCopyWithImpl<$R, $Out> - extends ClassCopyWithBase<$R, UserActionSearchModel, $Out> - implements UserActionSearchModelCopyWith<$R, UserActionSearchModel, $Out> { - _UserActionSearchModelCopyWithImpl(super.value, super.then, super.then2); - - @override - late final ClassMapperBase $mapper = - UserActionSearchModelMapper.ensureInitialized(); - @override - ListCopyWith<$R, String, ObjectCopyWith<$R, String, String>>? get id => - $value.id != null - ? ListCopyWith($value.id!, (v, t) => ObjectCopyWith(v, $identity, t), - (v) => call(id: v)) - : null; - @override - ListCopyWith<$R, String, ObjectCopyWith<$R, String, String>>? - get clientReferenceId => $value.clientReferenceId != null - ? ListCopyWith( - $value.clientReferenceId!, - (v, t) => ObjectCopyWith(v, $identity, t), - (v) => call(clientReferenceId: v)) - : null; - @override - $R call( - {Object? id = $none, - Object? projectId = $none, - Object? createdBy = $none, - Object? status = $none, - Object? offset = $none, - Object? limit = $none, - Object? clientReferenceId = $none, - Object? tenantId = $none, - Object? boundaryCode = $none}) => - $apply(FieldCopyWithData({ - if (id != $none) #id: id, - if (projectId != $none) #projectId: projectId, - if (createdBy != $none) #createdBy: createdBy, - if (status != $none) #status: status, - if (offset != $none) #offset: offset, - if (limit != $none) #limit: limit, - if (clientReferenceId != $none) #clientReferenceId: clientReferenceId, - if (tenantId != $none) #tenantId: tenantId, - if (boundaryCode != $none) #boundaryCode: boundaryCode - })); - @override - UserActionSearchModel $make(CopyWithData data) => - UserActionSearchModel.ignoreDeleted( - id: data.get(#id, or: $value.id), - projectId: data.get(#projectId, or: $value.projectId), - createdBy: data.get(#createdBy, or: $value.createdBy), - status: data.get(#status, or: $value.status), - offset: data.get(#offset, or: $value.offset), - limit: data.get(#limit, or: $value.limit), - clientReferenceId: - data.get(#clientReferenceId, or: $value.clientReferenceId), - tenantId: data.get(#tenantId, or: $value.tenantId), - boundaryCode: data.get(#boundaryCode, or: $value.boundaryCode)); - - @override - UserActionSearchModelCopyWith<$R2, UserActionSearchModel, $Out2> - $chain<$R2, $Out2>(Then<$Out2, $R2> t) => - _UserActionSearchModelCopyWithImpl($value, $cast, t); -} - -class UserActionModelMapper extends SubClassMapperBase { - UserActionModelMapper._(); - - static UserActionModelMapper? _instance; - static UserActionModelMapper ensureInitialized() { - if (_instance == null) { - MapperContainer.globals.use(_instance = UserActionModelMapper._()); - } - return _instance!; - } - - @override - final String id = 'UserActionModel'; - - static UserActionAdditionalFields? _$additionalFields(UserActionModel v) => - v.additionalFields; - static const Field - _f$additionalFields = - Field('additionalFields', _$additionalFields, opt: true); - static String? _$id(UserActionModel v) => v.id; - static const Field _f$id = - Field('id', _$id, opt: true); - static String? _$projectId(UserActionModel v) => v.projectId; - static const Field _f$projectId = - Field('projectId', _$projectId, opt: true); - static String? _$status(UserActionModel v) => v.status; - static const Field _f$status = - Field('status', _$status, opt: true); - static bool? _$nonRecoverableError(UserActionModel v) => - v.nonRecoverableError; - static const Field _f$nonRecoverableError = Field( - 'nonRecoverableError', _$nonRecoverableError, - opt: true, def: false); - static String _$clientReferenceId(UserActionModel v) => v.clientReferenceId; - static const Field _f$clientReferenceId = - Field('clientReferenceId', _$clientReferenceId); - static String? _$tenantId(UserActionModel v) => v.tenantId; - static const Field _f$tenantId = - Field('tenantId', _$tenantId, opt: true); - static String? _$boundaryCode(UserActionModel v) => v.boundaryCode; - static const Field _f$boundaryCode = - Field('boundaryCode', _$boundaryCode, opt: true); - static int? _$rowVersion(UserActionModel v) => v.rowVersion; - static const Field _f$rowVersion = - Field('rowVersion', _$rowVersion, opt: true); - static String? _$beneficiaryTag(UserActionModel v) => v.beneficiaryTag; - static const Field _f$beneficiaryTag = - Field('beneficiaryTag', _$beneficiaryTag, opt: true); - static String? _$resourceTag(UserActionModel v) => v.resourceTag; - static const Field _f$resourceTag = - Field('resourceTag', _$resourceTag, opt: true); - static String? _$action(UserActionModel v) => v.action; - static const Field _f$action = - Field('action', _$action, opt: true); - static double? _$longitude(UserActionModel v) => v.longitude; - static const Field _f$longitude = - Field('longitude', _$longitude, opt: true); - static double? _$latitude(UserActionModel v) => v.latitude; - static const Field _f$latitude = - Field('latitude', _$latitude, opt: true); - static double? _$locationAccuracy(UserActionModel v) => v.locationAccuracy; - static const Field _f$locationAccuracy = - Field('locationAccuracy', _$locationAccuracy, opt: true); - static AuditDetails? _$auditDetails(UserActionModel v) => v.auditDetails; - static const Field _f$auditDetails = - Field('auditDetails', _$auditDetails, opt: true); - static ClientAuditDetails? _$clientAuditDetails(UserActionModel v) => - v.clientAuditDetails; - static const Field - _f$clientAuditDetails = - Field('clientAuditDetails', _$clientAuditDetails, opt: true); - static bool? _$isDeleted(UserActionModel v) => v.isDeleted; - static const Field _f$isDeleted = - Field('isDeleted', _$isDeleted, opt: true, def: false); - - @override - final MappableFields fields = const { - #additionalFields: _f$additionalFields, - #id: _f$id, - #projectId: _f$projectId, - #status: _f$status, - #nonRecoverableError: _f$nonRecoverableError, - #clientReferenceId: _f$clientReferenceId, - #tenantId: _f$tenantId, - #boundaryCode: _f$boundaryCode, - #rowVersion: _f$rowVersion, - #beneficiaryTag: _f$beneficiaryTag, - #resourceTag: _f$resourceTag, - #action: _f$action, - #longitude: _f$longitude, - #latitude: _f$latitude, - #locationAccuracy: _f$locationAccuracy, - #auditDetails: _f$auditDetails, - #clientAuditDetails: _f$clientAuditDetails, - #isDeleted: _f$isDeleted, - }; - @override - final bool ignoreNull = true; - - @override - final String discriminatorKey = 'type'; - @override - final dynamic discriminatorValue = MappableClass.useAsDefault; - @override - late final ClassMapperBase superMapper = - EntityModelMapper.ensureInitialized(); - - static UserActionModel _instantiate(DecodingData data) { - return UserActionModel( - additionalFields: data.dec(_f$additionalFields), - id: data.dec(_f$id), - projectId: data.dec(_f$projectId), - status: data.dec(_f$status), - nonRecoverableError: data.dec(_f$nonRecoverableError), - clientReferenceId: data.dec(_f$clientReferenceId), - tenantId: data.dec(_f$tenantId), - boundaryCode: data.dec(_f$boundaryCode), - rowVersion: data.dec(_f$rowVersion), - beneficiaryTag: data.dec(_f$beneficiaryTag), - resourceTag: data.dec(_f$resourceTag), - action: data.dec(_f$action), - longitude: data.dec(_f$longitude), - latitude: data.dec(_f$latitude), - locationAccuracy: data.dec(_f$locationAccuracy), - auditDetails: data.dec(_f$auditDetails), - clientAuditDetails: data.dec(_f$clientAuditDetails), - isDeleted: data.dec(_f$isDeleted)); - } - - @override - final Function instantiate = _instantiate; - - static UserActionModel fromMap(Map map) { - return ensureInitialized().decodeMap(map); - } - - static UserActionModel fromJson(String json) { - return ensureInitialized().decodeJson(json); - } -} - -mixin UserActionModelMappable { - String toJson() { - return UserActionModelMapper.ensureInitialized() - .encodeJson(this as UserActionModel); - } - - Map toMap() { - return UserActionModelMapper.ensureInitialized() - .encodeMap(this as UserActionModel); - } - - UserActionModelCopyWith - get copyWith => _UserActionModelCopyWithImpl( - this as UserActionModel, $identity, $identity); - @override - String toString() { - return UserActionModelMapper.ensureInitialized() - .stringifyValue(this as UserActionModel); - } - - @override - bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - UserActionModelMapper.ensureInitialized() - .isValueEqual(this as UserActionModel, other)); - } - - @override - int get hashCode { - return UserActionModelMapper.ensureInitialized() - .hashValue(this as UserActionModel); - } -} - -extension UserActionModelValueCopy<$R, $Out> - on ObjectCopyWith<$R, UserActionModel, $Out> { - UserActionModelCopyWith<$R, UserActionModel, $Out> get $asUserActionModel => - $base.as((v, t, t2) => _UserActionModelCopyWithImpl(v, t, t2)); -} - -abstract class UserActionModelCopyWith<$R, $In extends UserActionModel, $Out> - implements EntityModelCopyWith<$R, $In, $Out> { - UserActionAdditionalFieldsCopyWith<$R, UserActionAdditionalFields, - UserActionAdditionalFields>? get additionalFields; - @override - AuditDetailsCopyWith<$R, AuditDetails, AuditDetails>? get auditDetails; - @override - ClientAuditDetailsCopyWith<$R, ClientAuditDetails, ClientAuditDetails>? - get clientAuditDetails; - @override - $R call( - {UserActionAdditionalFields? additionalFields, - String? id, - String? projectId, - String? status, - bool? nonRecoverableError, - String? clientReferenceId, - String? tenantId, - String? boundaryCode, - int? rowVersion, - String? beneficiaryTag, - String? resourceTag, - String? action, - double? longitude, - double? latitude, - double? locationAccuracy, - AuditDetails? auditDetails, - ClientAuditDetails? clientAuditDetails, - bool? isDeleted}); - UserActionModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>( - Then<$Out2, $R2> t); -} - -class _UserActionModelCopyWithImpl<$R, $Out> - extends ClassCopyWithBase<$R, UserActionModel, $Out> - implements UserActionModelCopyWith<$R, UserActionModel, $Out> { - _UserActionModelCopyWithImpl(super.value, super.then, super.then2); - - @override - late final ClassMapperBase $mapper = - UserActionModelMapper.ensureInitialized(); - @override - UserActionAdditionalFieldsCopyWith<$R, UserActionAdditionalFields, - UserActionAdditionalFields>? - get additionalFields => $value.additionalFields?.copyWith - .$chain((v) => call(additionalFields: v)); - @override - AuditDetailsCopyWith<$R, AuditDetails, AuditDetails>? get auditDetails => - $value.auditDetails?.copyWith.$chain((v) => call(auditDetails: v)); - @override - ClientAuditDetailsCopyWith<$R, ClientAuditDetails, ClientAuditDetails>? - get clientAuditDetails => $value.clientAuditDetails?.copyWith - .$chain((v) => call(clientAuditDetails: v)); - @override - $R call( - {Object? additionalFields = $none, - Object? id = $none, - Object? projectId = $none, - Object? status = $none, - Object? nonRecoverableError = $none, - String? clientReferenceId, - Object? tenantId = $none, - Object? boundaryCode = $none, - Object? rowVersion = $none, - Object? beneficiaryTag = $none, - Object? resourceTag = $none, - Object? action = $none, - Object? longitude = $none, - Object? latitude = $none, - Object? locationAccuracy = $none, - Object? auditDetails = $none, - Object? clientAuditDetails = $none, - Object? isDeleted = $none}) => - $apply(FieldCopyWithData({ - if (additionalFields != $none) #additionalFields: additionalFields, - if (id != $none) #id: id, - if (projectId != $none) #projectId: projectId, - if (status != $none) #status: status, - if (nonRecoverableError != $none) - #nonRecoverableError: nonRecoverableError, - if (clientReferenceId != null) #clientReferenceId: clientReferenceId, - if (tenantId != $none) #tenantId: tenantId, - if (boundaryCode != $none) #boundaryCode: boundaryCode, - if (rowVersion != $none) #rowVersion: rowVersion, - if (beneficiaryTag != $none) #beneficiaryTag: beneficiaryTag, - if (resourceTag != $none) #resourceTag: resourceTag, - if (action != $none) #action: action, - if (longitude != $none) #longitude: longitude, - if (latitude != $none) #latitude: latitude, - if (locationAccuracy != $none) #locationAccuracy: locationAccuracy, - if (auditDetails != $none) #auditDetails: auditDetails, - if (clientAuditDetails != $none) - #clientAuditDetails: clientAuditDetails, - if (isDeleted != $none) #isDeleted: isDeleted - })); - @override - UserActionModel $make(CopyWithData data) => UserActionModel( - additionalFields: - data.get(#additionalFields, or: $value.additionalFields), - id: data.get(#id, or: $value.id), - projectId: data.get(#projectId, or: $value.projectId), - status: data.get(#status, or: $value.status), - nonRecoverableError: - data.get(#nonRecoverableError, or: $value.nonRecoverableError), - clientReferenceId: - data.get(#clientReferenceId, or: $value.clientReferenceId), - tenantId: data.get(#tenantId, or: $value.tenantId), - boundaryCode: data.get(#boundaryCode, or: $value.boundaryCode), - rowVersion: data.get(#rowVersion, or: $value.rowVersion), - beneficiaryTag: data.get(#beneficiaryTag, or: $value.beneficiaryTag), - resourceTag: data.get(#resourceTag, or: $value.resourceTag), - action: data.get(#action, or: $value.action), - longitude: data.get(#longitude, or: $value.longitude), - latitude: data.get(#latitude, or: $value.latitude), - locationAccuracy: - data.get(#locationAccuracy, or: $value.locationAccuracy), - auditDetails: data.get(#auditDetails, or: $value.auditDetails), - clientAuditDetails: - data.get(#clientAuditDetails, or: $value.clientAuditDetails), - isDeleted: data.get(#isDeleted, or: $value.isDeleted)); - - @override - UserActionModelCopyWith<$R2, UserActionModel, $Out2> $chain<$R2, $Out2>( - Then<$Out2, $R2> t) => - _UserActionModelCopyWithImpl($value, $cast, t); -} - -class UserActionAdditionalFieldsMapper - extends SubClassMapperBase { - UserActionAdditionalFieldsMapper._(); - - static UserActionAdditionalFieldsMapper? _instance; - static UserActionAdditionalFieldsMapper ensureInitialized() { - if (_instance == null) { - MapperContainer.globals - .use(_instance = UserActionAdditionalFieldsMapper._()); - } - return _instance!; - } - - @override - final String id = 'UserActionAdditionalFields'; - - static String _$schema(UserActionAdditionalFields v) => v.schema; - static const Field _f$schema = - Field('schema', _$schema, opt: true, def: 'UserAction'); - static int _$version(UserActionAdditionalFields v) => v.version; - static const Field _f$version = - Field('version', _$version); - static List _$fields(UserActionAdditionalFields v) => - v.fields; - static const Field> - _f$fields = Field('fields', _$fields, opt: true, def: const []); - - @override - final MappableFields fields = const { - #schema: _f$schema, - #version: _f$version, - #fields: _f$fields, - }; - @override - final bool ignoreNull = true; - - @override - final String discriminatorKey = 'type'; - @override - final dynamic discriminatorValue = MappableClass.useAsDefault; - @override - late final ClassMapperBase superMapper = - AdditionalFieldsMapper.ensureInitialized(); - - static UserActionAdditionalFields _instantiate(DecodingData data) { - return UserActionAdditionalFields( - schema: data.dec(_f$schema), - version: data.dec(_f$version), - fields: data.dec(_f$fields)); - } - - @override - final Function instantiate = _instantiate; - - static UserActionAdditionalFields fromMap(Map map) { - return ensureInitialized().decodeMap(map); - } - - static UserActionAdditionalFields fromJson(String json) { - return ensureInitialized().decodeJson(json); - } -} - -mixin UserActionAdditionalFieldsMappable { - String toJson() { - return UserActionAdditionalFieldsMapper.ensureInitialized() - .encodeJson( - this as UserActionAdditionalFields); - } - - Map toMap() { - return UserActionAdditionalFieldsMapper.ensureInitialized() - .encodeMap( - this as UserActionAdditionalFields); - } - - UserActionAdditionalFieldsCopyWith - get copyWith => _UserActionAdditionalFieldsCopyWithImpl( - this as UserActionAdditionalFields, $identity, $identity); - @override - String toString() { - return UserActionAdditionalFieldsMapper.ensureInitialized() - .stringifyValue(this as UserActionAdditionalFields); - } - - @override - bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - UserActionAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as UserActionAdditionalFields, other)); - } - - @override - int get hashCode { - return UserActionAdditionalFieldsMapper.ensureInitialized() - .hashValue(this as UserActionAdditionalFields); - } -} - -extension UserActionAdditionalFieldsValueCopy<$R, $Out> - on ObjectCopyWith<$R, UserActionAdditionalFields, $Out> { - UserActionAdditionalFieldsCopyWith<$R, UserActionAdditionalFields, $Out> - get $asUserActionAdditionalFields => $base - .as((v, t, t2) => _UserActionAdditionalFieldsCopyWithImpl(v, t, t2)); -} - -abstract class UserActionAdditionalFieldsCopyWith< - $R, - $In extends UserActionAdditionalFields, - $Out> implements AdditionalFieldsCopyWith<$R, $In, $Out> { - @override - ListCopyWith<$R, AdditionalField, - AdditionalFieldCopyWith<$R, AdditionalField, AdditionalField>> get fields; - @override - $R call({String? schema, int? version, List? fields}); - UserActionAdditionalFieldsCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>( - Then<$Out2, $R2> t); -} - -class _UserActionAdditionalFieldsCopyWithImpl<$R, $Out> - extends ClassCopyWithBase<$R, UserActionAdditionalFields, $Out> - implements - UserActionAdditionalFieldsCopyWith<$R, UserActionAdditionalFields, - $Out> { - _UserActionAdditionalFieldsCopyWithImpl(super.value, super.then, super.then2); - - @override - late final ClassMapperBase $mapper = - UserActionAdditionalFieldsMapper.ensureInitialized(); - @override - ListCopyWith<$R, AdditionalField, - AdditionalFieldCopyWith<$R, AdditionalField, AdditionalField>> - get fields => ListCopyWith($value.fields, (v, t) => v.copyWith.$chain(t), - (v) => call(fields: v)); - @override - $R call({String? schema, int? version, List? fields}) => - $apply(FieldCopyWithData({ - if (schema != null) #schema: schema, - if (version != null) #version: version, - if (fields != null) #fields: fields - })); - @override - UserActionAdditionalFields $make(CopyWithData data) => - UserActionAdditionalFields( - schema: data.get(#schema, or: $value.schema), - version: data.get(#version, or: $value.version), - fields: data.get(#fields, or: $value.fields)); - - @override - UserActionAdditionalFieldsCopyWith<$R2, UserActionAdditionalFields, $Out2> - $chain<$R2, $Out2>(Then<$Out2, $R2> t) => - _UserActionAdditionalFieldsCopyWithImpl($value, $cast, t); -} diff --git a/packages/closed_household/lib/pages/closed_household_details.dart b/packages/closed_household/lib/pages/closed_household_details.dart index f86cebdac..5ba4e9b88 100644 --- a/packages/closed_household/lib/pages/closed_household_details.dart +++ b/packages/closed_household/lib/pages/closed_household_details.dart @@ -1,5 +1,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:closed_household/closed_household.dart'; +import 'package:closed_household/utils/extensions/extensions.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_components/widgets/atoms/text_block.dart'; @@ -7,9 +8,12 @@ import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; +import 'package:registration_delivery/models/entities/household.dart'; +import 'package:registration_delivery/models/entities/household_member.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../router/closed_household_router.gm.dart'; +import '../utils/utils.dart'; import '../widgets/back_navigation_help_header.dart'; import '../widgets/localized.dart'; @@ -53,7 +57,6 @@ class ClosedHouseholdDetailsPageState Widget build(BuildContext context) { final theme = Theme.of(context); final bloc = context.read(); - final router = context.router; return Scaffold( body: ReactiveFormBuilder( @@ -89,7 +92,6 @@ class ClosedHouseholdDetailsPageState header: const Column( children: [ BackNavigationHelpHeaderWidget( - //showcaseButton: ShowcaseButton(), //TODO: showHelp: false, ), ], @@ -101,32 +103,22 @@ class ClosedHouseholdDetailsPageState builder: (context, locationState) { return DigitElevatedButton( onPressed: () { - final summary = UserActionModel( - clientReferenceId: IdGen.i.identifier, - latitude: form.control(_latKey).value, - longitude: form.control(_lngKey).value, - locationAccuracy: form.control(_accuracyKey).value, - additionalFields: form - .control(_householdHeadNameKey) - .value != - null - ? UserActionAdditionalFields( - version: 1, - fields: [ - AdditionalField( - 'householdHead', - form - .control(_householdHeadNameKey) - .value ?? - '', - ), - ], - ) - : null, - ); + final String? householdHeadName = form + .control(_householdHeadNameKey) + .value as String?; + context.read().add( - ClosedHouseholdEvent.handleSummary(summary), + ClosedHouseholdEvent.handleSummary( + latitude: locationState.latitude!, + longitude: locationState.longitude!, + locationAccuracy: locationState.accuracy!, + householdHeadName: householdHeadName != null && + householdHeadName.isNotEmpty + ? householdHeadName + : null, + ), ); + context.router.push(ClosedHouseholdSummaryRoute()); }, child: Center( @@ -203,18 +195,15 @@ class ClosedHouseholdDetailsPageState validators: [Validators.required], ), _householdHeadNameKey: FormControl( + value: null, validators: [ + CustomValidator.requiredMin, Validators.maxLength(200), ], ), - _latKey: FormControl( - value: state.userActions?.first.latitude, validators: []), - _lngKey: FormControl( - value: state.userActions?.first.longitude, - ), - _accuracyKey: FormControl( - value: state.userActions?.first.locationAccuracy, - ), + _latKey: FormControl(validators: []), + _lngKey: FormControl(), + _accuracyKey: FormControl(), }); } } diff --git a/packages/closed_household/lib/pages/closed_household_summary.dart b/packages/closed_household/lib/pages/closed_household_summary.dart index 6144e8475..826af79f4 100644 --- a/packages/closed_household/lib/pages/closed_household_summary.dart +++ b/packages/closed_household/lib/pages/closed_household_summary.dart @@ -1,15 +1,9 @@ import 'package:auto_route/auto_route.dart'; import 'package:closed_household/blocs/closed_household.dart'; -import 'package:closed_household/models/entities/action.dart'; -import 'package:closed_household/models/entities/status.dart'; -import 'package:closed_household/models/entities/user_action.dart'; import 'package:closed_household/router/closed_household_router.gm.dart'; -import 'package:closed_household/utils/extensions/extensions.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/utils/date_utils.dart'; import 'package:digit_components/widgets/atoms/details_card.dart'; -import 'package:digit_data_model/data_model.dart'; -import '../../models/entities/action.dart' as action; import 'package:digit_scanner/blocs/scanner.dart'; import 'package:digit_scanner/pages/qr_scanner.dart'; import 'package:flutter/material.dart'; @@ -43,11 +37,7 @@ class ClosedHouseholdSummaryPageState void initState() { context .read() - .add( - const DigitScannerEvent - .handleScanner( - qrCode: [], - barCode: [])); + .add(const DigitScannerEvent.handleScanner(qrCode: [], barCode: [])); super.initState(); } @@ -81,52 +71,35 @@ class ClosedHouseholdSummaryPageState Navigator.of(context).push( // [TODO: Add the route to auto_route] MaterialPageRoute( - builder: (context) => - const DigitScannerPage( + builder: (context) => const DigitScannerPage( quantity: 1, isGS1code: false, singleValue: true, ), - settings: const RouteSettings( - name: '/qr-scanner'), + settings: + const RouteSettings(name: '/qr-scanner'), ), ); }, icon: Icons.qr_code, - label: localizations.translate(i18.closeHousehold - .closeHouseholdVoucherScannerLabel), + label: localizations.translate(i18 + .closeHousehold.closeHouseholdVoucherScannerLabel), ), DigitElevatedButton( onPressed: () { - final userAction = UserActionModel( - action: action.Actions.closeHousehold.toValue(), - projectId: ClosedHouseholdSingleton().projectId, - status: Status.closeHousehold.toValue(), - tenantId: ClosedHouseholdSingleton().tenantId, - clientReferenceId: IdGen.i.identifier, - latitude: householdState.summary?.latitude, - longitude: householdState.summary?.longitude, - boundaryCode: ClosedHouseholdSingleton().boundary?.code, - locationAccuracy: - householdState.summary?.locationAccuracy, - additionalFields: householdState.summary?.additionalFields, - beneficiaryTag: scannerState.qrCodes.isNotEmpty - ? scannerState.qrCodes.first - : null, - clientAuditDetails: ClientAuditDetails( - createdBy: - ClosedHouseholdSingleton().loggedInUserUuid!, - createdTime: context.millisecondsSinceEpoch(), - ), - auditDetails: AuditDetails( - createdBy: - ClosedHouseholdSingleton().loggedInUserUuid!, - createdTime: context.millisecondsSinceEpoch(), - ), - ); context.read().add( ClosedHouseholdEvent.handleSubmit( - userAction, false)); + context: context, + householdHeadName: + householdState.householdHeadName, + locationAccuracy: + householdState.locationAccuracy, + longitude: householdState.longitude, + latitude: householdState.latitude, + tag: scannerState.qrCodes.isNotEmpty + ? scannerState.qrCodes.first + : null)); + ///clear the scanner context.router .push(ClosedHouseholdAcknowledgementRoute()); @@ -156,7 +129,8 @@ class ClosedHouseholdSummaryPageState label: localizations.translate( i18.closeHousehold.closeHouseholdDate), value: (DigitDateUtils.getDateFromTimestamp( - DateTime.now().millisecondsSinceEpoch, dateFormat: 'dd MMM yyyy')) + DateTime.now().millisecondsSinceEpoch, + dateFormat: 'dd MMM yyyy')) .toString(), ), LabelValuePair( @@ -170,21 +144,16 @@ class ClosedHouseholdSummaryPageState LabelValuePair( label: localizations.translate( i18.closeHousehold.closeHouseholdHeadName), - value: householdState - .summary?.additionalFields?.fields - .where((h) => h.key == 'householdHead') - .firstOrNull - ?.value ?? + value: householdState.householdHeadName ?? localizations .translate(i18.common.coreCommonNA), ), LabelValuePair( label: localizations.translate(i18 .closeHousehold.closeHouseholdGpsAccuracyLabel), - value: householdState.summary?.locationAccuracy != null - ? '${householdState.summary?.locationAccuracy?.toStringAsFixed(2) } ${localizations.translate(i18.common.coreCommonMeters)}' - : - localizations + value: householdState.locationAccuracy != null + ? '${householdState.locationAccuracy.toStringAsFixed(2)} ${localizations.translate(i18.common.coreCommonMeters)}' + : localizations .translate(i18.common.coreCommonNA), ), ]), diff --git a/packages/closed_household/lib/pages/closed_household_wrapper.dart b/packages/closed_household/lib/pages/closed_household_wrapper.dart index b354876a7..3bcab0b3b 100644 --- a/packages/closed_household/lib/pages/closed_household_wrapper.dart +++ b/packages/closed_household/lib/pages/closed_household_wrapper.dart @@ -1,35 +1,43 @@ import 'package:auto_route/auto_route.dart'; import 'package:closed_household/blocs/closed_household.dart'; -import 'package:closed_household/models/entities/user_action.dart'; +import 'package:closed_household/closed_household.dart'; import 'package:closed_household/utils/extensions/extensions.dart'; +import 'package:digit_data_model/models/entities/individual.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; - +import 'package:registration_delivery/models/entities/household.dart'; +import 'package:registration_delivery/models/entities/household_member.dart'; +import 'package:registration_delivery/models/entities/project_beneficiary.dart'; +import 'package:registration_delivery/models/entities/task.dart'; @RoutePage() class ClosedHouseholdWrapperPage extends StatelessWidget { - final bool isEditing; - const ClosedHouseholdWrapperPage({ super.key, - this.isEditing = false, }); @override Widget build(BuildContext context) { - - final closedHouseholdRepo = - context.repository(context); - return MultiBlocProvider( providers: [ BlocProvider( - create: (_) => ClosedHouseholdBloc( - ClosedHouseholdState( - isEditing: isEditing, - ), - closedHouseholdRepository: closedHouseholdRepo, - ), + create: (_) { + return ClosedHouseholdBloc( + const ClosedHouseholdState(), + householdMemberRepository: context.repository< + HouseholdMemberModel, HouseholdMemberSearchModel>(context), + householdRepository: context + .repository(context), + individualRepository: context + .repository(context), + projectBeneficiaryRepository: context.repository< + ProjectBeneficiaryModel, + ProjectBeneficiarySearchModel>(context), + taskRepository: + context.repository(context), + ); + }, + lazy: false, ), ], child: BlocBuilder( diff --git a/packages/closed_household/lib/router/closed_household_router.gm.dart b/packages/closed_household/lib/router/closed_household_router.gm.dart index 1c735e32c..5cf8d0251 100644 --- a/packages/closed_household/lib/router/closed_household_router.gm.dart +++ b/packages/closed_household/lib/router/closed_household_router.gm.dart @@ -55,14 +55,9 @@ abstract class $ClosedHouseholdPackageRoute extends _i5.AutoRouterModule { ); }, ClosedHouseholdWrapperRoute.name: (routeData) { - final args = routeData.argsAs( - orElse: () => const ClosedHouseholdWrapperRouteArgs()); return _i5.AutoRoutePage( routeData: routeData, - child: _i4.ClosedHouseholdWrapperPage( - key: args.key, - isEditing: args.isEditing, - ), + child: const _i4.ClosedHouseholdWrapperPage(), ); }, }; @@ -187,39 +182,14 @@ class ClosedHouseholdSummaryRouteArgs { /// generated route for /// [_i4.ClosedHouseholdWrapperPage] -class ClosedHouseholdWrapperRoute - extends _i5.PageRouteInfo { - ClosedHouseholdWrapperRoute({ - _i6.Key? key, - bool isEditing = false, - List<_i5.PageRouteInfo>? children, - }) : super( +class ClosedHouseholdWrapperRoute extends _i5.PageRouteInfo { + const ClosedHouseholdWrapperRoute({List<_i5.PageRouteInfo>? children}) + : super( ClosedHouseholdWrapperRoute.name, - args: ClosedHouseholdWrapperRouteArgs( - key: key, - isEditing: isEditing, - ), initialChildren: children, ); static const String name = 'ClosedHouseholdWrapperRoute'; - static const _i5.PageInfo page = - _i5.PageInfo(name); -} - -class ClosedHouseholdWrapperRouteArgs { - const ClosedHouseholdWrapperRouteArgs({ - this.key, - this.isEditing = false, - }); - - final _i6.Key? key; - - final bool isEditing; - - @override - String toString() { - return 'ClosedHouseholdWrapperRouteArgs{key: $key, isEditing: $isEditing}'; - } + static const _i5.PageInfo page = _i5.PageInfo(name); } diff --git a/packages/closed_household/lib/utils/utils.dart b/packages/closed_household/lib/utils/utils.dart index e59933409..e3533acc3 100644 --- a/packages/closed_household/lib/utils/utils.dart +++ b/packages/closed_household/lib/utils/utils.dart @@ -1,12 +1,27 @@ - // create a singleton class for Closed Household package where set data and get data methods are defined +import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/models/entities/boundary.dart'; import 'package:digit_data_model/utils/utils.dart'; +import 'package:reactive_forms/reactive_forms.dart'; + +/// This class contains custom validators for form controls. +class CustomValidator { + /// Validates that control's value must be `true` + static Map? requiredMin( + AbstractControl control, + ) { + return control.value == null || + control.value.toString().length >= 2 || + control.value.toString().trim().isEmpty + ? null + : {'required': true}; + } +} class ClosedHouseholdSingleton { static final ClosedHouseholdSingleton _singleton = - ClosedHouseholdSingleton._internal(); + ClosedHouseholdSingleton._internal(); factory ClosedHouseholdSingleton() { return _singleton; @@ -18,6 +33,8 @@ class ClosedHouseholdSingleton { String? _loggedInUserUuid; String? _projectId; BoundaryModel? _boundaryModel; + BeneficiaryType? _beneficiaryType; + PersistenceConfiguration? _persistenceConfiguration = PersistenceConfiguration .offlineFirst; // Default to offline first persistence configuration @@ -33,9 +50,11 @@ class ClosedHouseholdSingleton { void setInitialData({ required String loggedInUserUuid, required String projectId, + required BeneficiaryType beneficiaryType, }) { _loggedInUserUuid = loggedInUserUuid; _projectId = projectId; + _beneficiaryType = beneficiaryType; } void setTenantId(String tenantId) { @@ -48,4 +67,5 @@ class ClosedHouseholdSingleton { PersistenceConfiguration? get persistenceConfiguration => _persistenceConfiguration; BoundaryModel? get boundary => _boundaryModel; -} \ No newline at end of file + BeneficiaryType? get beneficiaryType => _beneficiaryType; +} diff --git a/packages/closed_household/pubspec.yaml b/packages/closed_household/pubspec.yaml index 6a1071342..4700ad607 100644 --- a/packages/closed_household/pubspec.yaml +++ b/packages/closed_household/pubspec.yaml @@ -1,6 +1,6 @@ name: closed_household description: This package enables health facility workers to mark household closed and update. -version: 0.0.0-dev.1 +version: 0.0.0-dev.2 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/develop/packages/closed_household repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0+6 + digit_components: ^1.0.0+8 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 @@ -32,7 +32,7 @@ dependencies: digit_scanner: ^1.0.2 gs1_barcode_parser: ^1.0.5 auto_route: ^7.8.4 - digit_data_model: ^1.0.3-dev.1 + digit_data_model: ^1.0.3-dev.2 package_info_plus: ^5.0.1 digit_showcase: ^1.0.0 collection: ^1.16.0 @@ -40,6 +40,7 @@ dependencies: stream_transform: ^2.1.0 async: ^2.11.0 formula_parser: ^2.0.1 + registration_delivery: ^1.0.3-dev.3 dev_dependencies: diff --git a/packages/digit_components/CHANGELOG.md b/packages/digit_components/CHANGELOG.md index 924780bd3..fab5d7a18 100644 --- a/packages/digit_components/CHANGELOG.md +++ b/packages/digit_components/CHANGELOG.md @@ -1,3 +1,6 @@ +## 1.0.0+8 +* Added close icon button for digit_dialog + ## 1.0.0+7 * Added buttonDisabled for DigitIconButton diff --git a/packages/digit_components/example/pubspec.lock b/packages/digit_components/example/pubspec.lock index 4d6b52780..be10b5ed0 100644 --- a/packages/digit_components/example/pubspec.lock +++ b/packages/digit_components/example/pubspec.lock @@ -231,7 +231,7 @@ packages: path: ".." relative: true source: path - version: "1.0.0+7" + version: "1.0.0+8" easy_stepper: dependency: transitive description: diff --git a/packages/digit_components/lib/widgets/digit_dialog.dart b/packages/digit_components/lib/widgets/digit_dialog.dart index 913f15020..4d9fe457a 100644 --- a/packages/digit_components/lib/widgets/digit_dialog.dart +++ b/packages/digit_components/lib/widgets/digit_dialog.dart @@ -34,7 +34,7 @@ class DigitDialog extends StatelessWidget { padding: options.dialogPadding != null ? options.dialogPadding! : const EdgeInsets.all(kPadding), - child: options.title, + child: options.title(context), ), content: SizedBox( width: MediaQuery.of(context).size.width, @@ -117,6 +117,7 @@ class DigitDialogOptions { final String? contentText; final Widget? _titleWidget; final Widget? _contentWidget; + final bool isCloseIcon; final DigitDialogActions? primaryAction; final DigitDialogActions? secondaryAction; final bool barrierDismissible; @@ -134,6 +135,7 @@ class DigitDialogOptions { Widget? content, this.primaryAction, this.secondaryAction, + this.isCloseIcon = false, this.barrierDismissible = false, this.enableRecordPast = false, this.isScrollable = false, @@ -148,7 +150,7 @@ class DigitDialogOptions { }) : _titleWidget = title, _contentWidget = content; - Widget? get title { + Widget? title(BuildContext context) { if (_titleWidget != null) return _titleWidget; if (titleText != null) { return Row( @@ -164,6 +166,11 @@ class DigitDialogOptions { style: DigitTheme.instance.mobileTheme.textTheme.headlineMedium, ), ), + if (isCloseIcon) + InkWell( + onTap: () => Navigator.of(context).pop(), + child: const Icon(Icons.close), + ), ], ); } diff --git a/packages/digit_components/pubspec.yaml b/packages/digit_components/pubspec.yaml index 90e068937..545d1d6e0 100644 --- a/packages/digit_components/pubspec.yaml +++ b/packages/digit_components/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_components description: Digit UI Design specification Flutter widgets. Import this package by adding digit_components in respective pubspec.yaml dependencies. -version: 1.0.0+7 +version: 1.0.0+8 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_components repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/digit_data_model/CHANGELOG.md b/packages/digit_data_model/CHANGELOG.md index 020262c67..4d4d7c5d4 100644 --- a/packages/digit_data_model/CHANGELOG.md +++ b/packages/digit_data_model/CHANGELOG.md @@ -1,3 +1,6 @@ +## 1.0.3-dev.2 +* Reverted user_actions db changes to accommodate closed_household flow changes + ## 1.0.3-dev.1 * Added new user_actions db diff --git a/packages/digit_data_model/lib/data/local_store/no_sql/schema/oplog.g.dart b/packages/digit_data_model/lib/data/local_store/no_sql/schema/oplog.g.dart index 1eb7aa4a2..5521d966a 100644 --- a/packages/digit_data_model/lib/data/local_store/no_sql/schema/oplog.g.dart +++ b/packages/digit_data_model/lib/data/local_store/no_sql/schema/oplog.g.dart @@ -290,7 +290,6 @@ const _OpLogentityTypeEnumValueMap = { r'hFReferral': r'hFReferral', r'attendanceRegister': r'attendanceRegister', r'attendance': r'attendance', - r'userAction': r'userAction', }; const _OpLogentityTypeValueEnumMap = { r'user': DataModelType.user, @@ -325,7 +324,6 @@ const _OpLogentityTypeValueEnumMap = { r'hFReferral': DataModelType.hFReferral, r'attendanceRegister': DataModelType.attendanceRegister, r'attendance': DataModelType.attendance, - r'userAction': DataModelType.userAction, }; const _OpLogoperationEnumValueMap = { r'create': r'create', diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart index 84d961de2..e5a60169f 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart @@ -35,7 +35,6 @@ import 'tables/package_tables/stock.dart'; import 'tables/package_tables/stock_reconciliation.dart'; import 'tables/package_tables/task.dart'; import 'tables/package_tables/task_resource.dart'; -import 'tables/package_tables/user_action.dart'; import 'tables/pgr_service.dart'; import 'tables/product.dart'; import 'tables/product_variant.dart'; @@ -99,7 +98,6 @@ part 'sql_store.g.dart'; TaskResource, SideEffect, Referral, - UserAction, ]) class LocalSqlDataStore extends _$LocalSqlDataStore { /// The constructor for `LocalSqlDataStore`. diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart index 94e2ac4ff..e742720b6 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart @@ -38695,1121 +38695,6 @@ class ReferralCompanion extends UpdateCompanion { } } -class $UserActionTable extends UserAction - with TableInfo<$UserActionTable, UserActionData> { - @override - final GeneratedDatabase attachedDatabase; - final String? _alias; - $UserActionTable(this.attachedDatabase, [this._alias]); - static const VerificationMeta _idMeta = const VerificationMeta('id'); - @override - late final GeneratedColumn id = GeneratedColumn( - 'id', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _tenantIdMeta = - const VerificationMeta('tenantId'); - @override - late final GeneratedColumn tenantId = GeneratedColumn( - 'tenant_id', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _projectIdMeta = - const VerificationMeta('projectId'); - @override - late final GeneratedColumn projectId = GeneratedColumn( - 'project_id', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _clientReferenceIdMeta = - const VerificationMeta('clientReferenceId'); - @override - late final GeneratedColumn clientReferenceId = - GeneratedColumn('client_reference_id', aliasedName, false, - type: DriftSqlType.string, requiredDuringInsert: true); - static const VerificationMeta _latitudeMeta = - const VerificationMeta('latitude'); - @override - late final GeneratedColumn latitude = GeneratedColumn( - 'latitude', aliasedName, true, - type: DriftSqlType.double, requiredDuringInsert: false); - static const VerificationMeta _longitudeMeta = - const VerificationMeta('longitude'); - @override - late final GeneratedColumn longitude = GeneratedColumn( - 'longitude', aliasedName, true, - type: DriftSqlType.double, requiredDuringInsert: false); - static const VerificationMeta _locationAccuracyMeta = - const VerificationMeta('locationAccuracy'); - @override - late final GeneratedColumn locationAccuracy = GeneratedColumn( - 'location_accuracy', aliasedName, true, - type: DriftSqlType.double, requiredDuringInsert: false); - static const VerificationMeta _boundaryCodeMeta = - const VerificationMeta('boundaryCode'); - @override - late final GeneratedColumn boundaryCode = GeneratedColumn( - 'boundary_code', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _statusMeta = const VerificationMeta('status'); - @override - late final GeneratedColumn status = GeneratedColumn( - 'status', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _additionalFieldsMeta = - const VerificationMeta('additionalFields'); - @override - late final GeneratedColumn additionalFields = GeneratedColumn( - 'additional_fields', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _auditCreatedByMeta = - const VerificationMeta('auditCreatedBy'); - @override - late final GeneratedColumn auditCreatedBy = GeneratedColumn( - 'audit_created_by', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _auditCreatedTimeMeta = - const VerificationMeta('auditCreatedTime'); - @override - late final GeneratedColumn auditCreatedTime = GeneratedColumn( - 'audit_created_time', aliasedName, true, - type: DriftSqlType.int, requiredDuringInsert: false); - static const VerificationMeta _auditModifiedByMeta = - const VerificationMeta('auditModifiedBy'); - @override - late final GeneratedColumn auditModifiedBy = GeneratedColumn( - 'audit_modified_by', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _auditModifiedTimeMeta = - const VerificationMeta('auditModifiedTime'); - @override - late final GeneratedColumn auditModifiedTime = GeneratedColumn( - 'audit_modified_time', aliasedName, true, - type: DriftSqlType.int, requiredDuringInsert: false); - static const VerificationMeta _nonRecoverableErrorMeta = - const VerificationMeta('nonRecoverableError'); - @override - late final GeneratedColumn nonRecoverableError = GeneratedColumn( - 'non_recoverable_error', aliasedName, true, - type: DriftSqlType.bool, - requiredDuringInsert: false, - defaultConstraints: GeneratedColumn.constraintIsAlways( - 'CHECK ("non_recoverable_error" IN (0, 1))'), - defaultValue: const Constant(false)); - static const VerificationMeta _clientCreatedTimeMeta = - const VerificationMeta('clientCreatedTime'); - @override - late final GeneratedColumn clientCreatedTime = GeneratedColumn( - 'client_created_time', aliasedName, true, - type: DriftSqlType.int, requiredDuringInsert: false); - static const VerificationMeta _clientCreatedByMeta = - const VerificationMeta('clientCreatedBy'); - @override - late final GeneratedColumn clientCreatedBy = GeneratedColumn( - 'client_created_by', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _clientModifiedByMeta = - const VerificationMeta('clientModifiedBy'); - @override - late final GeneratedColumn clientModifiedBy = GeneratedColumn( - 'client_modified_by', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _clientModifiedTimeMeta = - const VerificationMeta('clientModifiedTime'); - @override - late final GeneratedColumn clientModifiedTime = GeneratedColumn( - 'client_modified_time', aliasedName, true, - type: DriftSqlType.int, requiredDuringInsert: false); - static const VerificationMeta _rowVersionMeta = - const VerificationMeta('rowVersion'); - @override - late final GeneratedColumn rowVersion = GeneratedColumn( - 'row_version', aliasedName, true, - type: DriftSqlType.int, requiredDuringInsert: false); - static const VerificationMeta _isDeletedMeta = - const VerificationMeta('isDeleted'); - @override - late final GeneratedColumn isDeleted = GeneratedColumn( - 'is_deleted', aliasedName, true, - type: DriftSqlType.bool, - requiredDuringInsert: false, - defaultConstraints: - GeneratedColumn.constraintIsAlways('CHECK ("is_deleted" IN (0, 1))'), - defaultValue: const Constant(false)); - static const VerificationMeta _actionMeta = const VerificationMeta('action'); - @override - late final GeneratedColumn action = GeneratedColumn( - 'action', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _beneficiaryTagMeta = - const VerificationMeta('beneficiaryTag'); - @override - late final GeneratedColumn beneficiaryTag = GeneratedColumn( - 'beneficiary_tag', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false); - static const VerificationMeta _resourceTagMeta = - const VerificationMeta('resourceTag'); - @override - late final GeneratedColumn resourceTag = GeneratedColumn( - 'resource_tag', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false); - @override - List get $columns => [ - id, - tenantId, - projectId, - clientReferenceId, - latitude, - longitude, - locationAccuracy, - boundaryCode, - status, - additionalFields, - auditCreatedBy, - auditCreatedTime, - auditModifiedBy, - auditModifiedTime, - nonRecoverableError, - clientCreatedTime, - clientCreatedBy, - clientModifiedBy, - clientModifiedTime, - rowVersion, - isDeleted, - action, - beneficiaryTag, - resourceTag - ]; - @override - String get aliasedName => _alias ?? actualTableName; - @override - String get actualTableName => $name; - static const String $name = 'user_action'; - @override - VerificationContext validateIntegrity(Insertable instance, - {bool isInserting = false}) { - final context = VerificationContext(); - final data = instance.toColumns(true); - if (data.containsKey('id')) { - context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); - } - if (data.containsKey('tenant_id')) { - context.handle(_tenantIdMeta, - tenantId.isAcceptableOrUnknown(data['tenant_id']!, _tenantIdMeta)); - } - if (data.containsKey('project_id')) { - context.handle(_projectIdMeta, - projectId.isAcceptableOrUnknown(data['project_id']!, _projectIdMeta)); - } - if (data.containsKey('client_reference_id')) { - context.handle( - _clientReferenceIdMeta, - clientReferenceId.isAcceptableOrUnknown( - data['client_reference_id']!, _clientReferenceIdMeta)); - } else if (isInserting) { - context.missing(_clientReferenceIdMeta); - } - if (data.containsKey('latitude')) { - context.handle(_latitudeMeta, - latitude.isAcceptableOrUnknown(data['latitude']!, _latitudeMeta)); - } - if (data.containsKey('longitude')) { - context.handle(_longitudeMeta, - longitude.isAcceptableOrUnknown(data['longitude']!, _longitudeMeta)); - } - if (data.containsKey('location_accuracy')) { - context.handle( - _locationAccuracyMeta, - locationAccuracy.isAcceptableOrUnknown( - data['location_accuracy']!, _locationAccuracyMeta)); - } - if (data.containsKey('boundary_code')) { - context.handle( - _boundaryCodeMeta, - boundaryCode.isAcceptableOrUnknown( - data['boundary_code']!, _boundaryCodeMeta)); - } - if (data.containsKey('status')) { - context.handle(_statusMeta, - status.isAcceptableOrUnknown(data['status']!, _statusMeta)); - } - if (data.containsKey('additional_fields')) { - context.handle( - _additionalFieldsMeta, - additionalFields.isAcceptableOrUnknown( - data['additional_fields']!, _additionalFieldsMeta)); - } - if (data.containsKey('audit_created_by')) { - context.handle( - _auditCreatedByMeta, - auditCreatedBy.isAcceptableOrUnknown( - data['audit_created_by']!, _auditCreatedByMeta)); - } - if (data.containsKey('audit_created_time')) { - context.handle( - _auditCreatedTimeMeta, - auditCreatedTime.isAcceptableOrUnknown( - data['audit_created_time']!, _auditCreatedTimeMeta)); - } - if (data.containsKey('audit_modified_by')) { - context.handle( - _auditModifiedByMeta, - auditModifiedBy.isAcceptableOrUnknown( - data['audit_modified_by']!, _auditModifiedByMeta)); - } - if (data.containsKey('audit_modified_time')) { - context.handle( - _auditModifiedTimeMeta, - auditModifiedTime.isAcceptableOrUnknown( - data['audit_modified_time']!, _auditModifiedTimeMeta)); - } - if (data.containsKey('non_recoverable_error')) { - context.handle( - _nonRecoverableErrorMeta, - nonRecoverableError.isAcceptableOrUnknown( - data['non_recoverable_error']!, _nonRecoverableErrorMeta)); - } - if (data.containsKey('client_created_time')) { - context.handle( - _clientCreatedTimeMeta, - clientCreatedTime.isAcceptableOrUnknown( - data['client_created_time']!, _clientCreatedTimeMeta)); - } - if (data.containsKey('client_created_by')) { - context.handle( - _clientCreatedByMeta, - clientCreatedBy.isAcceptableOrUnknown( - data['client_created_by']!, _clientCreatedByMeta)); - } - if (data.containsKey('client_modified_by')) { - context.handle( - _clientModifiedByMeta, - clientModifiedBy.isAcceptableOrUnknown( - data['client_modified_by']!, _clientModifiedByMeta)); - } - if (data.containsKey('client_modified_time')) { - context.handle( - _clientModifiedTimeMeta, - clientModifiedTime.isAcceptableOrUnknown( - data['client_modified_time']!, _clientModifiedTimeMeta)); - } - if (data.containsKey('row_version')) { - context.handle( - _rowVersionMeta, - rowVersion.isAcceptableOrUnknown( - data['row_version']!, _rowVersionMeta)); - } - if (data.containsKey('is_deleted')) { - context.handle(_isDeletedMeta, - isDeleted.isAcceptableOrUnknown(data['is_deleted']!, _isDeletedMeta)); - } - if (data.containsKey('action')) { - context.handle(_actionMeta, - action.isAcceptableOrUnknown(data['action']!, _actionMeta)); - } - if (data.containsKey('beneficiary_tag')) { - context.handle( - _beneficiaryTagMeta, - beneficiaryTag.isAcceptableOrUnknown( - data['beneficiary_tag']!, _beneficiaryTagMeta)); - } - if (data.containsKey('resource_tag')) { - context.handle( - _resourceTagMeta, - resourceTag.isAcceptableOrUnknown( - data['resource_tag']!, _resourceTagMeta)); - } - return context; - } - - @override - Set get $primaryKey => {auditCreatedBy, clientReferenceId}; - @override - UserActionData map(Map data, {String? tablePrefix}) { - final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; - return UserActionData( - id: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}id']), - tenantId: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}tenant_id']), - projectId: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}project_id']), - clientReferenceId: attachedDatabase.typeMapping.read( - DriftSqlType.string, data['${effectivePrefix}client_reference_id'])!, - latitude: attachedDatabase.typeMapping - .read(DriftSqlType.double, data['${effectivePrefix}latitude']), - longitude: attachedDatabase.typeMapping - .read(DriftSqlType.double, data['${effectivePrefix}longitude']), - locationAccuracy: attachedDatabase.typeMapping.read( - DriftSqlType.double, data['${effectivePrefix}location_accuracy']), - boundaryCode: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}boundary_code']), - status: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}status']), - additionalFields: attachedDatabase.typeMapping.read( - DriftSqlType.string, data['${effectivePrefix}additional_fields']), - auditCreatedBy: attachedDatabase.typeMapping.read( - DriftSqlType.string, data['${effectivePrefix}audit_created_by']), - auditCreatedTime: attachedDatabase.typeMapping - .read(DriftSqlType.int, data['${effectivePrefix}audit_created_time']), - auditModifiedBy: attachedDatabase.typeMapping.read( - DriftSqlType.string, data['${effectivePrefix}audit_modified_by']), - auditModifiedTime: attachedDatabase.typeMapping.read( - DriftSqlType.int, data['${effectivePrefix}audit_modified_time']), - nonRecoverableError: attachedDatabase.typeMapping.read( - DriftSqlType.bool, data['${effectivePrefix}non_recoverable_error']), - clientCreatedTime: attachedDatabase.typeMapping.read( - DriftSqlType.int, data['${effectivePrefix}client_created_time']), - clientCreatedBy: attachedDatabase.typeMapping.read( - DriftSqlType.string, data['${effectivePrefix}client_created_by']), - clientModifiedBy: attachedDatabase.typeMapping.read( - DriftSqlType.string, data['${effectivePrefix}client_modified_by']), - clientModifiedTime: attachedDatabase.typeMapping.read( - DriftSqlType.int, data['${effectivePrefix}client_modified_time']), - rowVersion: attachedDatabase.typeMapping - .read(DriftSqlType.int, data['${effectivePrefix}row_version']), - isDeleted: attachedDatabase.typeMapping - .read(DriftSqlType.bool, data['${effectivePrefix}is_deleted']), - action: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}action']), - beneficiaryTag: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}beneficiary_tag']), - resourceTag: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}resource_tag']), - ); - } - - @override - $UserActionTable createAlias(String alias) { - return $UserActionTable(attachedDatabase, alias); - } -} - -class UserActionData extends DataClass implements Insertable { - final String? id; - final String? tenantId; - final String? projectId; - final String clientReferenceId; - final double? latitude; - final double? longitude; - final double? locationAccuracy; - final String? boundaryCode; - final String? status; - final String? additionalFields; - final String? auditCreatedBy; - final int? auditCreatedTime; - final String? auditModifiedBy; - final int? auditModifiedTime; - final bool? nonRecoverableError; - final int? clientCreatedTime; - final String? clientCreatedBy; - final String? clientModifiedBy; - final int? clientModifiedTime; - final int? rowVersion; - final bool? isDeleted; - final String? action; - final String? beneficiaryTag; - final String? resourceTag; - const UserActionData( - {this.id, - this.tenantId, - this.projectId, - required this.clientReferenceId, - this.latitude, - this.longitude, - this.locationAccuracy, - this.boundaryCode, - this.status, - this.additionalFields, - this.auditCreatedBy, - this.auditCreatedTime, - this.auditModifiedBy, - this.auditModifiedTime, - this.nonRecoverableError, - this.clientCreatedTime, - this.clientCreatedBy, - this.clientModifiedBy, - this.clientModifiedTime, - this.rowVersion, - this.isDeleted, - this.action, - this.beneficiaryTag, - this.resourceTag}); - @override - Map toColumns(bool nullToAbsent) { - final map = {}; - if (!nullToAbsent || id != null) { - map['id'] = Variable(id); - } - if (!nullToAbsent || tenantId != null) { - map['tenant_id'] = Variable(tenantId); - } - if (!nullToAbsent || projectId != null) { - map['project_id'] = Variable(projectId); - } - map['client_reference_id'] = Variable(clientReferenceId); - if (!nullToAbsent || latitude != null) { - map['latitude'] = Variable(latitude); - } - if (!nullToAbsent || longitude != null) { - map['longitude'] = Variable(longitude); - } - if (!nullToAbsent || locationAccuracy != null) { - map['location_accuracy'] = Variable(locationAccuracy); - } - if (!nullToAbsent || boundaryCode != null) { - map['boundary_code'] = Variable(boundaryCode); - } - if (!nullToAbsent || status != null) { - map['status'] = Variable(status); - } - if (!nullToAbsent || additionalFields != null) { - map['additional_fields'] = Variable(additionalFields); - } - if (!nullToAbsent || auditCreatedBy != null) { - map['audit_created_by'] = Variable(auditCreatedBy); - } - if (!nullToAbsent || auditCreatedTime != null) { - map['audit_created_time'] = Variable(auditCreatedTime); - } - if (!nullToAbsent || auditModifiedBy != null) { - map['audit_modified_by'] = Variable(auditModifiedBy); - } - if (!nullToAbsent || auditModifiedTime != null) { - map['audit_modified_time'] = Variable(auditModifiedTime); - } - if (!nullToAbsent || nonRecoverableError != null) { - map['non_recoverable_error'] = Variable(nonRecoverableError); - } - if (!nullToAbsent || clientCreatedTime != null) { - map['client_created_time'] = Variable(clientCreatedTime); - } - if (!nullToAbsent || clientCreatedBy != null) { - map['client_created_by'] = Variable(clientCreatedBy); - } - if (!nullToAbsent || clientModifiedBy != null) { - map['client_modified_by'] = Variable(clientModifiedBy); - } - if (!nullToAbsent || clientModifiedTime != null) { - map['client_modified_time'] = Variable(clientModifiedTime); - } - if (!nullToAbsent || rowVersion != null) { - map['row_version'] = Variable(rowVersion); - } - if (!nullToAbsent || isDeleted != null) { - map['is_deleted'] = Variable(isDeleted); - } - if (!nullToAbsent || action != null) { - map['action'] = Variable(action); - } - if (!nullToAbsent || beneficiaryTag != null) { - map['beneficiary_tag'] = Variable(beneficiaryTag); - } - if (!nullToAbsent || resourceTag != null) { - map['resource_tag'] = Variable(resourceTag); - } - return map; - } - - UserActionCompanion toCompanion(bool nullToAbsent) { - return UserActionCompanion( - id: id == null && nullToAbsent ? const Value.absent() : Value(id), - tenantId: tenantId == null && nullToAbsent - ? const Value.absent() - : Value(tenantId), - projectId: projectId == null && nullToAbsent - ? const Value.absent() - : Value(projectId), - clientReferenceId: Value(clientReferenceId), - latitude: latitude == null && nullToAbsent - ? const Value.absent() - : Value(latitude), - longitude: longitude == null && nullToAbsent - ? const Value.absent() - : Value(longitude), - locationAccuracy: locationAccuracy == null && nullToAbsent - ? const Value.absent() - : Value(locationAccuracy), - boundaryCode: boundaryCode == null && nullToAbsent - ? const Value.absent() - : Value(boundaryCode), - status: - status == null && nullToAbsent ? const Value.absent() : Value(status), - additionalFields: additionalFields == null && nullToAbsent - ? const Value.absent() - : Value(additionalFields), - auditCreatedBy: auditCreatedBy == null && nullToAbsent - ? const Value.absent() - : Value(auditCreatedBy), - auditCreatedTime: auditCreatedTime == null && nullToAbsent - ? const Value.absent() - : Value(auditCreatedTime), - auditModifiedBy: auditModifiedBy == null && nullToAbsent - ? const Value.absent() - : Value(auditModifiedBy), - auditModifiedTime: auditModifiedTime == null && nullToAbsent - ? const Value.absent() - : Value(auditModifiedTime), - nonRecoverableError: nonRecoverableError == null && nullToAbsent - ? const Value.absent() - : Value(nonRecoverableError), - clientCreatedTime: clientCreatedTime == null && nullToAbsent - ? const Value.absent() - : Value(clientCreatedTime), - clientCreatedBy: clientCreatedBy == null && nullToAbsent - ? const Value.absent() - : Value(clientCreatedBy), - clientModifiedBy: clientModifiedBy == null && nullToAbsent - ? const Value.absent() - : Value(clientModifiedBy), - clientModifiedTime: clientModifiedTime == null && nullToAbsent - ? const Value.absent() - : Value(clientModifiedTime), - rowVersion: rowVersion == null && nullToAbsent - ? const Value.absent() - : Value(rowVersion), - isDeleted: isDeleted == null && nullToAbsent - ? const Value.absent() - : Value(isDeleted), - action: - action == null && nullToAbsent ? const Value.absent() : Value(action), - beneficiaryTag: beneficiaryTag == null && nullToAbsent - ? const Value.absent() - : Value(beneficiaryTag), - resourceTag: resourceTag == null && nullToAbsent - ? const Value.absent() - : Value(resourceTag), - ); - } - - factory UserActionData.fromJson(Map json, - {ValueSerializer? serializer}) { - serializer ??= driftRuntimeOptions.defaultSerializer; - return UserActionData( - id: serializer.fromJson(json['id']), - tenantId: serializer.fromJson(json['tenantId']), - projectId: serializer.fromJson(json['projectId']), - clientReferenceId: serializer.fromJson(json['clientReferenceId']), - latitude: serializer.fromJson(json['latitude']), - longitude: serializer.fromJson(json['longitude']), - locationAccuracy: serializer.fromJson(json['locationAccuracy']), - boundaryCode: serializer.fromJson(json['boundaryCode']), - status: serializer.fromJson(json['status']), - additionalFields: serializer.fromJson(json['additionalFields']), - auditCreatedBy: serializer.fromJson(json['auditCreatedBy']), - auditCreatedTime: serializer.fromJson(json['auditCreatedTime']), - auditModifiedBy: serializer.fromJson(json['auditModifiedBy']), - auditModifiedTime: serializer.fromJson(json['auditModifiedTime']), - nonRecoverableError: - serializer.fromJson(json['nonRecoverableError']), - clientCreatedTime: serializer.fromJson(json['clientCreatedTime']), - clientCreatedBy: serializer.fromJson(json['clientCreatedBy']), - clientModifiedBy: serializer.fromJson(json['clientModifiedBy']), - clientModifiedTime: serializer.fromJson(json['clientModifiedTime']), - rowVersion: serializer.fromJson(json['rowVersion']), - isDeleted: serializer.fromJson(json['isDeleted']), - action: serializer.fromJson(json['action']), - beneficiaryTag: serializer.fromJson(json['beneficiaryTag']), - resourceTag: serializer.fromJson(json['resourceTag']), - ); - } - @override - Map toJson({ValueSerializer? serializer}) { - serializer ??= driftRuntimeOptions.defaultSerializer; - return { - 'id': serializer.toJson(id), - 'tenantId': serializer.toJson(tenantId), - 'projectId': serializer.toJson(projectId), - 'clientReferenceId': serializer.toJson(clientReferenceId), - 'latitude': serializer.toJson(latitude), - 'longitude': serializer.toJson(longitude), - 'locationAccuracy': serializer.toJson(locationAccuracy), - 'boundaryCode': serializer.toJson(boundaryCode), - 'status': serializer.toJson(status), - 'additionalFields': serializer.toJson(additionalFields), - 'auditCreatedBy': serializer.toJson(auditCreatedBy), - 'auditCreatedTime': serializer.toJson(auditCreatedTime), - 'auditModifiedBy': serializer.toJson(auditModifiedBy), - 'auditModifiedTime': serializer.toJson(auditModifiedTime), - 'nonRecoverableError': serializer.toJson(nonRecoverableError), - 'clientCreatedTime': serializer.toJson(clientCreatedTime), - 'clientCreatedBy': serializer.toJson(clientCreatedBy), - 'clientModifiedBy': serializer.toJson(clientModifiedBy), - 'clientModifiedTime': serializer.toJson(clientModifiedTime), - 'rowVersion': serializer.toJson(rowVersion), - 'isDeleted': serializer.toJson(isDeleted), - 'action': serializer.toJson(action), - 'beneficiaryTag': serializer.toJson(beneficiaryTag), - 'resourceTag': serializer.toJson(resourceTag), - }; - } - - UserActionData copyWith( - {Value id = const Value.absent(), - Value tenantId = const Value.absent(), - Value projectId = const Value.absent(), - String? clientReferenceId, - Value latitude = const Value.absent(), - Value longitude = const Value.absent(), - Value locationAccuracy = const Value.absent(), - Value boundaryCode = const Value.absent(), - Value status = const Value.absent(), - Value additionalFields = const Value.absent(), - Value auditCreatedBy = const Value.absent(), - Value auditCreatedTime = const Value.absent(), - Value auditModifiedBy = const Value.absent(), - Value auditModifiedTime = const Value.absent(), - Value nonRecoverableError = const Value.absent(), - Value clientCreatedTime = const Value.absent(), - Value clientCreatedBy = const Value.absent(), - Value clientModifiedBy = const Value.absent(), - Value clientModifiedTime = const Value.absent(), - Value rowVersion = const Value.absent(), - Value isDeleted = const Value.absent(), - Value action = const Value.absent(), - Value beneficiaryTag = const Value.absent(), - Value resourceTag = const Value.absent()}) => - UserActionData( - id: id.present ? id.value : this.id, - tenantId: tenantId.present ? tenantId.value : this.tenantId, - projectId: projectId.present ? projectId.value : this.projectId, - clientReferenceId: clientReferenceId ?? this.clientReferenceId, - latitude: latitude.present ? latitude.value : this.latitude, - longitude: longitude.present ? longitude.value : this.longitude, - locationAccuracy: locationAccuracy.present - ? locationAccuracy.value - : this.locationAccuracy, - boundaryCode: - boundaryCode.present ? boundaryCode.value : this.boundaryCode, - status: status.present ? status.value : this.status, - additionalFields: additionalFields.present - ? additionalFields.value - : this.additionalFields, - auditCreatedBy: - auditCreatedBy.present ? auditCreatedBy.value : this.auditCreatedBy, - auditCreatedTime: auditCreatedTime.present - ? auditCreatedTime.value - : this.auditCreatedTime, - auditModifiedBy: auditModifiedBy.present - ? auditModifiedBy.value - : this.auditModifiedBy, - auditModifiedTime: auditModifiedTime.present - ? auditModifiedTime.value - : this.auditModifiedTime, - nonRecoverableError: nonRecoverableError.present - ? nonRecoverableError.value - : this.nonRecoverableError, - clientCreatedTime: clientCreatedTime.present - ? clientCreatedTime.value - : this.clientCreatedTime, - clientCreatedBy: clientCreatedBy.present - ? clientCreatedBy.value - : this.clientCreatedBy, - clientModifiedBy: clientModifiedBy.present - ? clientModifiedBy.value - : this.clientModifiedBy, - clientModifiedTime: clientModifiedTime.present - ? clientModifiedTime.value - : this.clientModifiedTime, - rowVersion: rowVersion.present ? rowVersion.value : this.rowVersion, - isDeleted: isDeleted.present ? isDeleted.value : this.isDeleted, - action: action.present ? action.value : this.action, - beneficiaryTag: - beneficiaryTag.present ? beneficiaryTag.value : this.beneficiaryTag, - resourceTag: resourceTag.present ? resourceTag.value : this.resourceTag, - ); - @override - String toString() { - return (StringBuffer('UserActionData(') - ..write('id: $id, ') - ..write('tenantId: $tenantId, ') - ..write('projectId: $projectId, ') - ..write('clientReferenceId: $clientReferenceId, ') - ..write('latitude: $latitude, ') - ..write('longitude: $longitude, ') - ..write('locationAccuracy: $locationAccuracy, ') - ..write('boundaryCode: $boundaryCode, ') - ..write('status: $status, ') - ..write('additionalFields: $additionalFields, ') - ..write('auditCreatedBy: $auditCreatedBy, ') - ..write('auditCreatedTime: $auditCreatedTime, ') - ..write('auditModifiedBy: $auditModifiedBy, ') - ..write('auditModifiedTime: $auditModifiedTime, ') - ..write('nonRecoverableError: $nonRecoverableError, ') - ..write('clientCreatedTime: $clientCreatedTime, ') - ..write('clientCreatedBy: $clientCreatedBy, ') - ..write('clientModifiedBy: $clientModifiedBy, ') - ..write('clientModifiedTime: $clientModifiedTime, ') - ..write('rowVersion: $rowVersion, ') - ..write('isDeleted: $isDeleted, ') - ..write('action: $action, ') - ..write('beneficiaryTag: $beneficiaryTag, ') - ..write('resourceTag: $resourceTag') - ..write(')')) - .toString(); - } - - @override - int get hashCode => Object.hashAll([ - id, - tenantId, - projectId, - clientReferenceId, - latitude, - longitude, - locationAccuracy, - boundaryCode, - status, - additionalFields, - auditCreatedBy, - auditCreatedTime, - auditModifiedBy, - auditModifiedTime, - nonRecoverableError, - clientCreatedTime, - clientCreatedBy, - clientModifiedBy, - clientModifiedTime, - rowVersion, - isDeleted, - action, - beneficiaryTag, - resourceTag - ]); - @override - bool operator ==(Object other) => - identical(this, other) || - (other is UserActionData && - other.id == this.id && - other.tenantId == this.tenantId && - other.projectId == this.projectId && - other.clientReferenceId == this.clientReferenceId && - other.latitude == this.latitude && - other.longitude == this.longitude && - other.locationAccuracy == this.locationAccuracy && - other.boundaryCode == this.boundaryCode && - other.status == this.status && - other.additionalFields == this.additionalFields && - other.auditCreatedBy == this.auditCreatedBy && - other.auditCreatedTime == this.auditCreatedTime && - other.auditModifiedBy == this.auditModifiedBy && - other.auditModifiedTime == this.auditModifiedTime && - other.nonRecoverableError == this.nonRecoverableError && - other.clientCreatedTime == this.clientCreatedTime && - other.clientCreatedBy == this.clientCreatedBy && - other.clientModifiedBy == this.clientModifiedBy && - other.clientModifiedTime == this.clientModifiedTime && - other.rowVersion == this.rowVersion && - other.isDeleted == this.isDeleted && - other.action == this.action && - other.beneficiaryTag == this.beneficiaryTag && - other.resourceTag == this.resourceTag); -} - -class UserActionCompanion extends UpdateCompanion { - final Value id; - final Value tenantId; - final Value projectId; - final Value clientReferenceId; - final Value latitude; - final Value longitude; - final Value locationAccuracy; - final Value boundaryCode; - final Value status; - final Value additionalFields; - final Value auditCreatedBy; - final Value auditCreatedTime; - final Value auditModifiedBy; - final Value auditModifiedTime; - final Value nonRecoverableError; - final Value clientCreatedTime; - final Value clientCreatedBy; - final Value clientModifiedBy; - final Value clientModifiedTime; - final Value rowVersion; - final Value isDeleted; - final Value action; - final Value beneficiaryTag; - final Value resourceTag; - final Value rowid; - const UserActionCompanion({ - this.id = const Value.absent(), - this.tenantId = const Value.absent(), - this.projectId = const Value.absent(), - this.clientReferenceId = const Value.absent(), - this.latitude = const Value.absent(), - this.longitude = const Value.absent(), - this.locationAccuracy = const Value.absent(), - this.boundaryCode = const Value.absent(), - this.status = const Value.absent(), - this.additionalFields = const Value.absent(), - this.auditCreatedBy = const Value.absent(), - this.auditCreatedTime = const Value.absent(), - this.auditModifiedBy = const Value.absent(), - this.auditModifiedTime = const Value.absent(), - this.nonRecoverableError = const Value.absent(), - this.clientCreatedTime = const Value.absent(), - this.clientCreatedBy = const Value.absent(), - this.clientModifiedBy = const Value.absent(), - this.clientModifiedTime = const Value.absent(), - this.rowVersion = const Value.absent(), - this.isDeleted = const Value.absent(), - this.action = const Value.absent(), - this.beneficiaryTag = const Value.absent(), - this.resourceTag = const Value.absent(), - this.rowid = const Value.absent(), - }); - UserActionCompanion.insert({ - this.id = const Value.absent(), - this.tenantId = const Value.absent(), - this.projectId = const Value.absent(), - required String clientReferenceId, - this.latitude = const Value.absent(), - this.longitude = const Value.absent(), - this.locationAccuracy = const Value.absent(), - this.boundaryCode = const Value.absent(), - this.status = const Value.absent(), - this.additionalFields = const Value.absent(), - this.auditCreatedBy = const Value.absent(), - this.auditCreatedTime = const Value.absent(), - this.auditModifiedBy = const Value.absent(), - this.auditModifiedTime = const Value.absent(), - this.nonRecoverableError = const Value.absent(), - this.clientCreatedTime = const Value.absent(), - this.clientCreatedBy = const Value.absent(), - this.clientModifiedBy = const Value.absent(), - this.clientModifiedTime = const Value.absent(), - this.rowVersion = const Value.absent(), - this.isDeleted = const Value.absent(), - this.action = const Value.absent(), - this.beneficiaryTag = const Value.absent(), - this.resourceTag = const Value.absent(), - this.rowid = const Value.absent(), - }) : clientReferenceId = Value(clientReferenceId); - static Insertable custom({ - Expression? id, - Expression? tenantId, - Expression? projectId, - Expression? clientReferenceId, - Expression? latitude, - Expression? longitude, - Expression? locationAccuracy, - Expression? boundaryCode, - Expression? status, - Expression? additionalFields, - Expression? auditCreatedBy, - Expression? auditCreatedTime, - Expression? auditModifiedBy, - Expression? auditModifiedTime, - Expression? nonRecoverableError, - Expression? clientCreatedTime, - Expression? clientCreatedBy, - Expression? clientModifiedBy, - Expression? clientModifiedTime, - Expression? rowVersion, - Expression? isDeleted, - Expression? action, - Expression? beneficiaryTag, - Expression? resourceTag, - Expression? rowid, - }) { - return RawValuesInsertable({ - if (id != null) 'id': id, - if (tenantId != null) 'tenant_id': tenantId, - if (projectId != null) 'project_id': projectId, - if (clientReferenceId != null) 'client_reference_id': clientReferenceId, - if (latitude != null) 'latitude': latitude, - if (longitude != null) 'longitude': longitude, - if (locationAccuracy != null) 'location_accuracy': locationAccuracy, - if (boundaryCode != null) 'boundary_code': boundaryCode, - if (status != null) 'status': status, - if (additionalFields != null) 'additional_fields': additionalFields, - if (auditCreatedBy != null) 'audit_created_by': auditCreatedBy, - if (auditCreatedTime != null) 'audit_created_time': auditCreatedTime, - if (auditModifiedBy != null) 'audit_modified_by': auditModifiedBy, - if (auditModifiedTime != null) 'audit_modified_time': auditModifiedTime, - if (nonRecoverableError != null) - 'non_recoverable_error': nonRecoverableError, - if (clientCreatedTime != null) 'client_created_time': clientCreatedTime, - if (clientCreatedBy != null) 'client_created_by': clientCreatedBy, - if (clientModifiedBy != null) 'client_modified_by': clientModifiedBy, - if (clientModifiedTime != null) - 'client_modified_time': clientModifiedTime, - if (rowVersion != null) 'row_version': rowVersion, - if (isDeleted != null) 'is_deleted': isDeleted, - if (action != null) 'action': action, - if (beneficiaryTag != null) 'beneficiary_tag': beneficiaryTag, - if (resourceTag != null) 'resource_tag': resourceTag, - if (rowid != null) 'rowid': rowid, - }); - } - - UserActionCompanion copyWith( - {Value? id, - Value? tenantId, - Value? projectId, - Value? clientReferenceId, - Value? latitude, - Value? longitude, - Value? locationAccuracy, - Value? boundaryCode, - Value? status, - Value? additionalFields, - Value? auditCreatedBy, - Value? auditCreatedTime, - Value? auditModifiedBy, - Value? auditModifiedTime, - Value? nonRecoverableError, - Value? clientCreatedTime, - Value? clientCreatedBy, - Value? clientModifiedBy, - Value? clientModifiedTime, - Value? rowVersion, - Value? isDeleted, - Value? action, - Value? beneficiaryTag, - Value? resourceTag, - Value? rowid}) { - return UserActionCompanion( - id: id ?? this.id, - tenantId: tenantId ?? this.tenantId, - projectId: projectId ?? this.projectId, - clientReferenceId: clientReferenceId ?? this.clientReferenceId, - latitude: latitude ?? this.latitude, - longitude: longitude ?? this.longitude, - locationAccuracy: locationAccuracy ?? this.locationAccuracy, - boundaryCode: boundaryCode ?? this.boundaryCode, - status: status ?? this.status, - additionalFields: additionalFields ?? this.additionalFields, - auditCreatedBy: auditCreatedBy ?? this.auditCreatedBy, - auditCreatedTime: auditCreatedTime ?? this.auditCreatedTime, - auditModifiedBy: auditModifiedBy ?? this.auditModifiedBy, - auditModifiedTime: auditModifiedTime ?? this.auditModifiedTime, - nonRecoverableError: nonRecoverableError ?? this.nonRecoverableError, - clientCreatedTime: clientCreatedTime ?? this.clientCreatedTime, - clientCreatedBy: clientCreatedBy ?? this.clientCreatedBy, - clientModifiedBy: clientModifiedBy ?? this.clientModifiedBy, - clientModifiedTime: clientModifiedTime ?? this.clientModifiedTime, - rowVersion: rowVersion ?? this.rowVersion, - isDeleted: isDeleted ?? this.isDeleted, - action: action ?? this.action, - beneficiaryTag: beneficiaryTag ?? this.beneficiaryTag, - resourceTag: resourceTag ?? this.resourceTag, - rowid: rowid ?? this.rowid, - ); - } - - @override - Map toColumns(bool nullToAbsent) { - final map = {}; - if (id.present) { - map['id'] = Variable(id.value); - } - if (tenantId.present) { - map['tenant_id'] = Variable(tenantId.value); - } - if (projectId.present) { - map['project_id'] = Variable(projectId.value); - } - if (clientReferenceId.present) { - map['client_reference_id'] = Variable(clientReferenceId.value); - } - if (latitude.present) { - map['latitude'] = Variable(latitude.value); - } - if (longitude.present) { - map['longitude'] = Variable(longitude.value); - } - if (locationAccuracy.present) { - map['location_accuracy'] = Variable(locationAccuracy.value); - } - if (boundaryCode.present) { - map['boundary_code'] = Variable(boundaryCode.value); - } - if (status.present) { - map['status'] = Variable(status.value); - } - if (additionalFields.present) { - map['additional_fields'] = Variable(additionalFields.value); - } - if (auditCreatedBy.present) { - map['audit_created_by'] = Variable(auditCreatedBy.value); - } - if (auditCreatedTime.present) { - map['audit_created_time'] = Variable(auditCreatedTime.value); - } - if (auditModifiedBy.present) { - map['audit_modified_by'] = Variable(auditModifiedBy.value); - } - if (auditModifiedTime.present) { - map['audit_modified_time'] = Variable(auditModifiedTime.value); - } - if (nonRecoverableError.present) { - map['non_recoverable_error'] = Variable(nonRecoverableError.value); - } - if (clientCreatedTime.present) { - map['client_created_time'] = Variable(clientCreatedTime.value); - } - if (clientCreatedBy.present) { - map['client_created_by'] = Variable(clientCreatedBy.value); - } - if (clientModifiedBy.present) { - map['client_modified_by'] = Variable(clientModifiedBy.value); - } - if (clientModifiedTime.present) { - map['client_modified_time'] = Variable(clientModifiedTime.value); - } - if (rowVersion.present) { - map['row_version'] = Variable(rowVersion.value); - } - if (isDeleted.present) { - map['is_deleted'] = Variable(isDeleted.value); - } - if (action.present) { - map['action'] = Variable(action.value); - } - if (beneficiaryTag.present) { - map['beneficiary_tag'] = Variable(beneficiaryTag.value); - } - if (resourceTag.present) { - map['resource_tag'] = Variable(resourceTag.value); - } - if (rowid.present) { - map['rowid'] = Variable(rowid.value); - } - return map; - } - - @override - String toString() { - return (StringBuffer('UserActionCompanion(') - ..write('id: $id, ') - ..write('tenantId: $tenantId, ') - ..write('projectId: $projectId, ') - ..write('clientReferenceId: $clientReferenceId, ') - ..write('latitude: $latitude, ') - ..write('longitude: $longitude, ') - ..write('locationAccuracy: $locationAccuracy, ') - ..write('boundaryCode: $boundaryCode, ') - ..write('status: $status, ') - ..write('additionalFields: $additionalFields, ') - ..write('auditCreatedBy: $auditCreatedBy, ') - ..write('auditCreatedTime: $auditCreatedTime, ') - ..write('auditModifiedBy: $auditModifiedBy, ') - ..write('auditModifiedTime: $auditModifiedTime, ') - ..write('nonRecoverableError: $nonRecoverableError, ') - ..write('clientCreatedTime: $clientCreatedTime, ') - ..write('clientCreatedBy: $clientCreatedBy, ') - ..write('clientModifiedBy: $clientModifiedBy, ') - ..write('clientModifiedTime: $clientModifiedTime, ') - ..write('rowVersion: $rowVersion, ') - ..write('isDeleted: $isDeleted, ') - ..write('action: $action, ') - ..write('beneficiaryTag: $beneficiaryTag, ') - ..write('resourceTag: $resourceTag, ') - ..write('rowid: $rowid') - ..write(')')) - .toString(); - } -} - abstract class _$LocalSqlDataStore extends GeneratedDatabase { _$LocalSqlDataStore(QueryExecutor e) : super(e); late final $AttendanceRegisterTable attendanceRegister = @@ -39862,7 +38747,6 @@ abstract class _$LocalSqlDataStore extends GeneratedDatabase { late final $TaskResourceTable taskResource = $TaskResourceTable(this); late final $SideEffectTable sideEffect = $SideEffectTable(this); late final $ReferralTable referral = $ReferralTable(this); - late final $UserActionTable userAction = $UserActionTable(this); late final Index attendanceClientref = Index('attendance_clientref', 'CREATE INDEX attendance_clientref ON attendance (client_reference_id)'); late final Index attendanceIndividualid = Index('attendance_individualid', @@ -39973,7 +38857,6 @@ abstract class _$LocalSqlDataStore extends GeneratedDatabase { taskResource, sideEffect, referral, - userAction, attendanceClientref, attendanceIndividualid, projectClinetref, diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/user_action.dart b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/user_action.dart deleted file mode 100644 index 53154fc8f..000000000 --- a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/user_action.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:drift/drift.dart'; - -class UserAction extends Table { - TextColumn get id => text().nullable()(); - TextColumn get tenantId => text().nullable()(); - TextColumn get projectId => text().nullable()(); - TextColumn get clientReferenceId => text()(); - RealColumn get latitude => real().nullable()(); - RealColumn get longitude => real().nullable()(); - RealColumn get locationAccuracy => real().nullable()(); - TextColumn get boundaryCode => text().nullable()(); - TextColumn get status => text().nullable()(); - TextColumn get additionalFields => text().nullable()(); - TextColumn get auditCreatedBy => text().nullable()(); - IntColumn get auditCreatedTime => integer().nullable()(); - TextColumn get auditModifiedBy => text().nullable()(); - IntColumn get auditModifiedTime => integer().nullable()(); - BoolColumn get nonRecoverableError => - boolean().nullable().withDefault(const Constant(false))(); - - IntColumn get clientCreatedTime => integer().nullable()(); - TextColumn get clientCreatedBy => text().nullable()(); - TextColumn get clientModifiedBy => text().nullable()(); - IntColumn get clientModifiedTime => integer().nullable()(); - - IntColumn get rowVersion => integer().nullable()(); - BoolColumn get isDeleted => - boolean().nullable().withDefault(const Constant(false))(); - - TextColumn get action => text().nullable()(); - TextColumn get beneficiaryTag => text().nullable()(); - TextColumn get resourceTag => text().nullable()(); - - - @override - Set get primaryKey => { - auditCreatedBy, - clientReferenceId, - }; -} diff --git a/packages/digit_data_model/lib/data_model.dart b/packages/digit_data_model/lib/data_model.dart index cd9c5769c..15e7ae7be 100644 --- a/packages/digit_data_model/lib/data_model.dart +++ b/packages/digit_data_model/lib/data_model.dart @@ -277,5 +277,4 @@ enum DataModelType { hFReferral, attendanceRegister, attendance, - userAction, } diff --git a/packages/digit_data_model/lib/utils/constants.dart b/packages/digit_data_model/lib/utils/constants.dart index 6539fa0f3..4cea7c768 100644 --- a/packages/digit_data_model/lib/utils/constants.dart +++ b/packages/digit_data_model/lib/utils/constants.dart @@ -58,8 +58,6 @@ class DataModels { return DataModelType.referral; case 'HFReferrals': return DataModelType.hFReferral; - case 'UserAction': - return DataModelType.userAction; default: return DataModelType.householdMember; } diff --git a/packages/digit_data_model/pubspec.yaml b/packages/digit_data_model/pubspec.yaml index de7b83138..524170ec6 100644 --- a/packages/digit_data_model/pubspec.yaml +++ b/packages/digit_data_model/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_data_model description: The digit_data_model package is a data modeling library. It defines various classes, enums, and functions. -version: 1.0.3-dev.1 +version: 1.0.3-dev.2 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_data_model repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration_delivery/CHANGELOG.md index 8940f7b75..0b3871d44 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration_delivery/CHANGELOG.md @@ -1,3 +1,11 @@ +## 1.0.3-dev.4 + +* Cache build fix for registration_bloc + +## 1.0.3-dev.3 + +* Closed household flow change + ## 1.0.3-dev.2 * Closed household search fixes diff --git a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart index 9e8279d75..7360b0f7b 100644 --- a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart +++ b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart @@ -6,9 +6,11 @@ import 'package:digit_data_model/utils/typedefs.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:registration_delivery/models/entities/household_member.dart'; +import 'package:registration_delivery/models/entities/task.dart'; import '../../models/entities/household.dart'; import '../../models/entities/project_beneficiary.dart'; +import '../../models/entities/status.dart'; import '../../utils/typedefs.dart'; import '../../utils/utils.dart'; @@ -27,6 +29,8 @@ class BeneficiaryRegistrationBloc final ProjectBeneficiaryDataRepository projectBeneficiaryRepository; + final TaskDataRepository taskDataRepository; + final BeneficiaryType beneficiaryType; BeneficiaryRegistrationBloc( @@ -35,6 +39,7 @@ class BeneficiaryRegistrationBloc required this.householdRepository, required this.householdMemberRepository, required this.projectBeneficiaryRepository, + required this.taskDataRepository, required this.beneficiaryType, }) { on(_handleSaveAddress); @@ -153,7 +158,6 @@ class BeneficiaryRegistrationBloc : LocalityModel(code: code, name: name); emit(BeneficiaryRegistrationSummaryState( navigateToRoot: false, - selectedClosedHouseholdID: value.selectedClosedHouseholdID, householdModel: household?.copyWith( address: address?.copyWith( relatedClientReferenceId: household.clientReferenceId, @@ -201,7 +205,6 @@ class BeneficiaryRegistrationBloc summary: (value) async { if (event.navigateToSummary) { emit(BeneficiaryRegistrationState.create( - selectedClosedHouseholdID: value.selectedClosedHouseholdID, addressModel: value.householdModel?.address, householdModel: value.householdModel, individualModel: value.individualModel, @@ -210,6 +213,7 @@ class BeneficiaryRegistrationBloc final individual = value.individualModel; final household = value.householdModel; final address = value.householdModel?.address; + final dateOfRegistration = value.projectBeneficiaryModel?.dateOfRegistration; if (individual == null) { @@ -436,6 +440,18 @@ class BeneficiaryRegistrationBloc await projectBeneficiaryRepository .update(projectBeneficiary.first.copyWith(tag: event.tag)); } + + var task = await taskDataRepository.search(TaskSearchModel( + projectBeneficiaryClientReferenceId: + projectBeneficiary.map((e) => e.clientReferenceId).toList(), + )); + + if (task.isNotEmpty) { + if (task.last.status == Status.closeHousehold.toValue()) { + await taskDataRepository.update( + task.last.copyWith(status: Status.notDelivered.toValue())); + } + } } else { await projectBeneficiaryRepository.create(ProjectBeneficiaryModel( rowVersion: 1, @@ -484,16 +500,15 @@ class BeneficiaryRegistrationBloc ), ); } - } catch (error) { - rethrow; - } finally { emit(value.copyWith(loading: false)); emit( BeneficiaryRegistrationPersistedState( householdModel: value.householdModel, ), ); - } + } catch (error) { + rethrow; + } finally {} }, ); } @@ -714,7 +729,6 @@ class BeneficiaryRegistrationState with _$BeneficiaryRegistrationState { ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, @Default(false) bool loading, @Default(false) bool isHeadOfHousehold, }) = BeneficiaryRegistrationCreateState; @@ -760,7 +774,6 @@ class BeneficiaryRegistrationState with _$BeneficiaryRegistrationState { ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, @Default(false) bool loading, @Default(false) bool isHeadOfHousehold, }) = BeneficiaryRegistrationSummaryState; diff --git a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart index 326629de2..a6ec3b32e 100644 --- a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart +++ b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart @@ -3268,7 +3268,6 @@ mixin _$BeneficiaryRegistrationState { ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) create, @@ -3307,7 +3306,6 @@ mixin _$BeneficiaryRegistrationState { ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) summary, @@ -3322,7 +3320,6 @@ mixin _$BeneficiaryRegistrationState { ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -3361,7 +3358,6 @@ mixin _$BeneficiaryRegistrationState { ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -3376,7 +3372,6 @@ mixin _$BeneficiaryRegistrationState { ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -3415,7 +3410,6 @@ mixin _$BeneficiaryRegistrationState { ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -3531,7 +3525,6 @@ abstract class _$$BeneficiaryRegistrationCreateStateImplCopyWith<$Res> ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold}); } @@ -3555,7 +3548,6 @@ class __$$BeneficiaryRegistrationCreateStateImplCopyWithImpl<$Res> Object? projectBeneficiaryModel = freezed, Object? registrationDate = freezed, Object? searchQuery = freezed, - Object? selectedClosedHouseholdID = freezed, Object? loading = null, Object? isHeadOfHousehold = null, }) { @@ -3584,10 +3576,6 @@ class __$$BeneficiaryRegistrationCreateStateImplCopyWithImpl<$Res> ? _value.searchQuery : searchQuery // ignore: cast_nullable_to_non_nullable as String?, - selectedClosedHouseholdID: freezed == selectedClosedHouseholdID - ? _value.selectedClosedHouseholdID - : selectedClosedHouseholdID // ignore: cast_nullable_to_non_nullable - as String?, loading: null == loading ? _value.loading : loading // ignore: cast_nullable_to_non_nullable @@ -3611,7 +3599,6 @@ class _$BeneficiaryRegistrationCreateStateImpl this.projectBeneficiaryModel, this.registrationDate, this.searchQuery, - this.selectedClosedHouseholdID, this.loading = false, this.isHeadOfHousehold = false}); @@ -3628,8 +3615,6 @@ class _$BeneficiaryRegistrationCreateStateImpl @override final String? searchQuery; @override - final String? selectedClosedHouseholdID; - @override @JsonKey() final bool loading; @override @@ -3638,7 +3623,7 @@ class _$BeneficiaryRegistrationCreateStateImpl @override String toString() { - return 'BeneficiaryRegistrationState.create(addressModel: $addressModel, householdModel: $householdModel, individualModel: $individualModel, projectBeneficiaryModel: $projectBeneficiaryModel, registrationDate: $registrationDate, searchQuery: $searchQuery, selectedClosedHouseholdID: $selectedClosedHouseholdID, loading: $loading, isHeadOfHousehold: $isHeadOfHousehold)'; + return 'BeneficiaryRegistrationState.create(addressModel: $addressModel, householdModel: $householdModel, individualModel: $individualModel, projectBeneficiaryModel: $projectBeneficiaryModel, registrationDate: $registrationDate, searchQuery: $searchQuery, loading: $loading, isHeadOfHousehold: $isHeadOfHousehold)'; } @override @@ -3659,9 +3644,6 @@ class _$BeneficiaryRegistrationCreateStateImpl other.registrationDate == registrationDate) && (identical(other.searchQuery, searchQuery) || other.searchQuery == searchQuery) && - (identical(other.selectedClosedHouseholdID, - selectedClosedHouseholdID) || - other.selectedClosedHouseholdID == selectedClosedHouseholdID) && (identical(other.loading, loading) || other.loading == loading) && (identical(other.isHeadOfHousehold, isHeadOfHousehold) || other.isHeadOfHousehold == isHeadOfHousehold)); @@ -3676,7 +3658,6 @@ class _$BeneficiaryRegistrationCreateStateImpl projectBeneficiaryModel, registrationDate, searchQuery, - selectedClosedHouseholdID, loading, isHeadOfHousehold); @@ -3698,7 +3679,6 @@ class _$BeneficiaryRegistrationCreateStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) create, @@ -3737,7 +3717,6 @@ class _$BeneficiaryRegistrationCreateStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) summary, @@ -3749,7 +3728,6 @@ class _$BeneficiaryRegistrationCreateStateImpl projectBeneficiaryModel, registrationDate, searchQuery, - selectedClosedHouseholdID, loading, isHeadOfHousehold); } @@ -3764,7 +3742,6 @@ class _$BeneficiaryRegistrationCreateStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -3803,7 +3780,6 @@ class _$BeneficiaryRegistrationCreateStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -3815,7 +3791,6 @@ class _$BeneficiaryRegistrationCreateStateImpl projectBeneficiaryModel, registrationDate, searchQuery, - selectedClosedHouseholdID, loading, isHeadOfHousehold); } @@ -3830,7 +3805,6 @@ class _$BeneficiaryRegistrationCreateStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -3869,7 +3843,6 @@ class _$BeneficiaryRegistrationCreateStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -3883,7 +3856,6 @@ class _$BeneficiaryRegistrationCreateStateImpl projectBeneficiaryModel, registrationDate, searchQuery, - selectedClosedHouseholdID, loading, isHeadOfHousehold); } @@ -3952,7 +3924,6 @@ abstract class BeneficiaryRegistrationCreateState final ProjectBeneficiaryModel? projectBeneficiaryModel, final DateTime? registrationDate, final String? searchQuery, - final String? selectedClosedHouseholdID, final bool loading, final bool isHeadOfHousehold}) = _$BeneficiaryRegistrationCreateStateImpl; @@ -3964,7 +3935,6 @@ abstract class BeneficiaryRegistrationCreateState ProjectBeneficiaryModel? get projectBeneficiaryModel; DateTime? get registrationDate; String? get searchQuery; - String? get selectedClosedHouseholdID; @override bool get loading; bool get isHeadOfHousehold; @@ -4129,7 +4099,6 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) create, @@ -4168,7 +4137,6 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) summary, @@ -4187,7 +4155,6 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -4226,7 +4193,6 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -4245,7 +4211,6 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -4284,7 +4249,6 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -4507,7 +4471,6 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) create, @@ -4546,7 +4509,6 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) summary, @@ -4565,7 +4527,6 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -4604,7 +4565,6 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -4623,7 +4583,6 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -4662,7 +4621,6 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -4855,7 +4813,6 @@ class _$BeneficiaryRegistrationAddMemberStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) create, @@ -4894,7 +4851,6 @@ class _$BeneficiaryRegistrationAddMemberStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) summary, @@ -4912,7 +4868,6 @@ class _$BeneficiaryRegistrationAddMemberStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -4951,7 +4906,6 @@ class _$BeneficiaryRegistrationAddMemberStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -4969,7 +4923,6 @@ class _$BeneficiaryRegistrationAddMemberStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -5008,7 +4961,6 @@ class _$BeneficiaryRegistrationAddMemberStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -5264,7 +5216,6 @@ class _$BeneficiaryRegistrationPersistedStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) create, @@ -5303,7 +5254,6 @@ class _$BeneficiaryRegistrationPersistedStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) summary, @@ -5329,7 +5279,6 @@ class _$BeneficiaryRegistrationPersistedStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -5368,7 +5317,6 @@ class _$BeneficiaryRegistrationPersistedStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -5394,7 +5342,6 @@ class _$BeneficiaryRegistrationPersistedStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -5433,7 +5380,6 @@ class _$BeneficiaryRegistrationPersistedStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -5553,7 +5499,6 @@ abstract class _$$BeneficiaryRegistrationSummaryStateImplCopyWith<$Res> ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold}); } @@ -5577,7 +5522,6 @@ class __$$BeneficiaryRegistrationSummaryStateImplCopyWithImpl<$Res> Object? projectBeneficiaryModel = freezed, Object? registrationDate = freezed, Object? addressModel = freezed, - Object? selectedClosedHouseholdID = freezed, Object? loading = null, Object? isHeadOfHousehold = null, }) { @@ -5606,10 +5550,6 @@ class __$$BeneficiaryRegistrationSummaryStateImplCopyWithImpl<$Res> ? _value.addressModel : addressModel // ignore: cast_nullable_to_non_nullable as AddressModel?, - selectedClosedHouseholdID: freezed == selectedClosedHouseholdID - ? _value.selectedClosedHouseholdID - : selectedClosedHouseholdID // ignore: cast_nullable_to_non_nullable - as String?, loading: null == loading ? _value.loading : loading // ignore: cast_nullable_to_non_nullable @@ -5633,7 +5573,6 @@ class _$BeneficiaryRegistrationSummaryStateImpl this.projectBeneficiaryModel, this.registrationDate, this.addressModel, - this.selectedClosedHouseholdID, this.loading = false, this.isHeadOfHousehold = false}); @@ -5651,8 +5590,6 @@ class _$BeneficiaryRegistrationSummaryStateImpl @override final AddressModel? addressModel; @override - final String? selectedClosedHouseholdID; - @override @JsonKey() final bool loading; @override @@ -5661,7 +5598,7 @@ class _$BeneficiaryRegistrationSummaryStateImpl @override String toString() { - return 'BeneficiaryRegistrationState.summary(navigateToRoot: $navigateToRoot, householdModel: $householdModel, individualModel: $individualModel, projectBeneficiaryModel: $projectBeneficiaryModel, registrationDate: $registrationDate, addressModel: $addressModel, selectedClosedHouseholdID: $selectedClosedHouseholdID, loading: $loading, isHeadOfHousehold: $isHeadOfHousehold)'; + return 'BeneficiaryRegistrationState.summary(navigateToRoot: $navigateToRoot, householdModel: $householdModel, individualModel: $individualModel, projectBeneficiaryModel: $projectBeneficiaryModel, registrationDate: $registrationDate, addressModel: $addressModel, loading: $loading, isHeadOfHousehold: $isHeadOfHousehold)'; } @override @@ -5682,9 +5619,6 @@ class _$BeneficiaryRegistrationSummaryStateImpl other.registrationDate == registrationDate) && (identical(other.addressModel, addressModel) || other.addressModel == addressModel) && - (identical(other.selectedClosedHouseholdID, - selectedClosedHouseholdID) || - other.selectedClosedHouseholdID == selectedClosedHouseholdID) && (identical(other.loading, loading) || other.loading == loading) && (identical(other.isHeadOfHousehold, isHeadOfHousehold) || other.isHeadOfHousehold == isHeadOfHousehold)); @@ -5699,7 +5633,6 @@ class _$BeneficiaryRegistrationSummaryStateImpl projectBeneficiaryModel, registrationDate, addressModel, - selectedClosedHouseholdID, loading, isHeadOfHousehold); @@ -5721,7 +5654,6 @@ class _$BeneficiaryRegistrationSummaryStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) create, @@ -5760,7 +5692,6 @@ class _$BeneficiaryRegistrationSummaryStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold) summary, @@ -5772,7 +5703,6 @@ class _$BeneficiaryRegistrationSummaryStateImpl projectBeneficiaryModel, registrationDate, addressModel, - selectedClosedHouseholdID, loading, isHeadOfHousehold); } @@ -5787,7 +5717,6 @@ class _$BeneficiaryRegistrationSummaryStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -5826,7 +5755,6 @@ class _$BeneficiaryRegistrationSummaryStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -5838,7 +5766,6 @@ class _$BeneficiaryRegistrationSummaryStateImpl projectBeneficiaryModel, registrationDate, addressModel, - selectedClosedHouseholdID, loading, isHeadOfHousehold); } @@ -5853,7 +5780,6 @@ class _$BeneficiaryRegistrationSummaryStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, String? searchQuery, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? create, @@ -5892,7 +5818,6 @@ class _$BeneficiaryRegistrationSummaryStateImpl ProjectBeneficiaryModel? projectBeneficiaryModel, DateTime? registrationDate, AddressModel? addressModel, - String? selectedClosedHouseholdID, bool loading, bool isHeadOfHousehold)? summary, @@ -5906,7 +5831,6 @@ class _$BeneficiaryRegistrationSummaryStateImpl projectBeneficiaryModel, registrationDate, addressModel, - selectedClosedHouseholdID, loading, isHeadOfHousehold); } @@ -5975,7 +5899,6 @@ abstract class BeneficiaryRegistrationSummaryState final ProjectBeneficiaryModel? projectBeneficiaryModel, final DateTime? registrationDate, final AddressModel? addressModel, - final String? selectedClosedHouseholdID, final bool loading, final bool isHeadOfHousehold}) = _$BeneficiaryRegistrationSummaryStateImpl; @@ -5988,7 +5911,6 @@ abstract class BeneficiaryRegistrationSummaryState DateTime? get registrationDate; @override AddressModel? get addressModel; - String? get selectedClosedHouseholdID; @override bool get loading; bool get isHeadOfHousehold; diff --git a/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart b/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart index 210687424..474b6f0be 100644 --- a/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart +++ b/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart @@ -92,16 +92,17 @@ class DeliverInterventionBloc ); final List futureTask = tasks - .where((element) => - element.additionalFields!.fields - .firstWhereOrNull( - (a) => - a.key == - AdditionalFieldsType.deliveryStrategy.toValue(), - ) - ?.value == - DeliverStrategyType.indirect.toValue() && - element.status == Status.delivered.toValue()) + .where((element) => element.additionalFields != null + ? element.additionalFields!.fields + .firstWhereOrNull( + (a) => + a.key == + AdditionalFieldsType.deliveryStrategy.toValue(), + ) + ?.value == + DeliverStrategyType.indirect.toValue() && + element.status == Status.delivered.toValue() + : false) .toList(); if (tasks.isNotEmpty) { diff --git a/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart b/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart index 192b58112..0b1d93d48 100644 --- a/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart +++ b/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart @@ -1,6 +1,4 @@ import 'dart:async'; - -import 'package:closed_household/closed_household.dart' hide Status; import 'package:collection/collection.dart'; import 'package:digit_data_model/models/entities/individual.dart'; import 'package:registration_delivery/blocs/search_households/search_households.dart'; @@ -38,7 +36,6 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { SearchHouseholdsEmitter emit, ) async { final containers = [...state.householdMembers]; - final List closedHouseholds = [...state.closedHouseholds]; List householdList = []; List individualsList = []; @@ -63,24 +60,143 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { ), ); - var list = results.map((e) => e).toList(); + var finalResults = results.map((e) => e).toList(); + + if (event.globalSearchParams.filter!.contains(Status.registered.name) || + event.globalSearchParams.filter!.contains(Status.notRegistered.name)) { + late List houseHoldClientReferenceIds = []; + + finalResults.forEach((e) { + houseHoldClientReferenceIds.add(e.clientReferenceId); + }); + + householdList = await household.search(HouseholdSearchModel( + clientReferenceId: + houseHoldClientReferenceIds.map((e) => e.toString()).toList())); + + // Search for individual results using the extracted IDs and search text. + householdMembersList = await fetchHouseholdMembersBulk( + null, + houseHoldClientReferenceIds, + ); + + final List individualClientReferenceIds = householdMembersList + .map((e) => e.individualClientReferenceId.toString()) + .toList(); + + individualsList = await individual.search( + IndividualSearchModel(clientReferenceId: individualClientReferenceIds), + ); + + projectBeneficiariesList = await projectBeneficiary.search( + ProjectBeneficiarySearchModel( + beneficiaryClientReferenceId: + houseHoldClientReferenceIds.map((e) => e).toList())); + + List tasksRelated = await _processTasksAndRelatedData( + projectBeneficiariesList, taskList, sideEffectsList, referralsList); + + taskList = tasksRelated[0]; + sideEffectsList = tasksRelated[1]; + referralsList = tasksRelated[2]; + + // Process household entries and add to containers + await _processHouseholdEntries( + householdMembersList, + householdList, + individualsList, + projectBeneficiariesList, + taskList, + sideEffectsList, + referralsList, + containers, + ); + + emit(state.copyWith( + householdMembers: containers, + loading: false, + searchQuery: event.globalSearchParams.nameSearch, + offset: + event.globalSearchParams.offset! + event.globalSearchParams.limit!, + limit: event.globalSearchParams.limit!, + )); + } else if (event.globalSearchParams.filter!.isNotEmpty && + event.globalSearchParams.filter != null) { + late List listOfBeneficiaries = []; + for (var e in finalResults) { + !listOfBeneficiaries.contains(e.projectBeneficiaryClientReferenceId) + ? listOfBeneficiaries.add(e.projectBeneficiaryClientReferenceId!) + : null; + } + + projectBeneficiariesList = await projectBeneficiary.search( + ProjectBeneficiarySearchModel( + clientReferenceId: listOfBeneficiaries)); + + late List listOfMembers = []; + + listOfMembers = projectBeneficiariesList + .map((e) => e.beneficiaryClientReferenceId.toString()) + .toList(); + + householdMembersList = await fetchHouseholdMembersBulk( + null, + listOfMembers, + ); + + final List individualClientReferenceIds = householdMembersList + .map((e) => e.individualClientReferenceId.toString()) + .toList(); + + individualsList = await individual.search( + IndividualSearchModel(clientReferenceId: individualClientReferenceIds), + ); + + late List houseHoldClientReferenceIds = []; + + houseHoldClientReferenceIds = householdMembersList + .map((e) => e.householdClientReferenceId.toString()) + .toList(); + + householdList = await household.search(HouseholdSearchModel( + clientReferenceId: houseHoldClientReferenceIds, + )); - if (event.globalSearchParams.filter!.contains(Status.closeHousehold.name)) { - list.forEach((e) { - closedHouseholds.add(e); + finalResults.forEach((element) { + taskList.add(element); }); + List tasksRelated = await _processTasksAndRelatedData( + projectBeneficiariesList, taskList, sideEffectsList, referralsList); + + taskList = tasksRelated[0]; + sideEffectsList = tasksRelated[1]; + referralsList = tasksRelated[2]; + + // Process household entries and add to containers + await _processHouseholdEntries( + householdMembersList, + householdList, + individualsList, + projectBeneficiariesList, + taskList, + sideEffectsList, + referralsList, + containers, + ); + emit(state.copyWith( + householdMembers: containers, loading: false, + searchQuery: event.globalSearchParams.nameSearch, offset: event.globalSearchParams.offset! + event.globalSearchParams.limit!, limit: event.globalSearchParams.limit!, - closedHouseholds: closedHouseholds, )); } else { late List houseHoldClientReferenceIds = []; - list.forEach((e) { + finalResults.forEach((e) { houseHoldClientReferenceIds.add(e.clientReferenceId); }); @@ -107,79 +223,24 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { beneficiaryClientReferenceId: houseHoldClientReferenceIds.map((e) => e).toList())); - if (projectBeneficiariesList.isNotEmpty) { - taskList = - await fetchTaskbyProjectBeneficiary(projectBeneficiariesList); - sideEffectsList = - await sideEffectDataRepository.search(SideEffectSearchModel( - taskClientReferenceId: - taskList.map((e) => e.clientReferenceId).toList(), - )); - referralsList = await referralDataRepository.search(ReferralSearchModel( - projectBeneficiaryClientReferenceId: - projectBeneficiariesList.map((e) => e.clientReferenceId).toList(), - )); - } + List tasksRelated = await _processTasksAndRelatedData( + projectBeneficiariesList, taskList, sideEffectsList, referralsList); - final groupedHouseholdsMembers = householdMembersList - .groupListsBy((element) => element.householdClientReferenceId); - - for (final entry in groupedHouseholdsMembers.entries) { - HouseholdModel filteredHousehold; - List filteredIndividuals; - List filteredTasks = []; - final householdId = entry.key; - if (householdId == null) continue; - - // Filter household based on household ID - filteredHousehold = - householdList.firstWhere((e) => e.clientReferenceId == householdId); - - // Extract individual client reference IDs from household members - final List membersIds = - entry.value.map((e) => e.individualClientReferenceId).toList(); - - // Filter individuals based on individual client reference IDs - filteredIndividuals = individualsList - .where((element) => membersIds.contains(element.clientReferenceId)) - .toList(); - - // Filter tasks based on project beneficiary client reference IDs - for (var beneficiary in projectBeneficiariesList) { - var tasksForBeneficiary = taskList.where((element) => - beneficiary.clientReferenceId == - element.projectBeneficiaryClientReferenceId); - - filteredTasks.addAll(tasksForBeneficiary); - } - - // Find the head of the household - final head = filteredIndividuals.firstWhereOrNull( - (element) => - element.clientReferenceId == - entry.value - .firstWhereOrNull( - (element) => element.isHeadOfHousehold, - ) - ?.individualClientReferenceId, - ); - - // Skip if no head of household or no filtered beneficiaries - if (head == null) continue; - - // Add household member wrapper to containers - containers.add( - HouseholdMemberWrapper( - household: filteredHousehold, - headOfHousehold: head, - members: filteredIndividuals, - projectBeneficiaries: projectBeneficiariesList, - tasks: filteredTasks.isEmpty ? null : filteredTasks, - sideEffects: sideEffectsList.isEmpty ? null : sideEffectsList, - referrals: referralsList.isEmpty ? null : referralsList, - ), - ); - } + taskList = tasksRelated[0]; + sideEffectsList = tasksRelated[1]; + referralsList = tasksRelated[2]; + + // Process household entries and add to containers + await _processHouseholdEntries( + householdMembersList, + householdList, + individualsList, + projectBeneficiariesList, + taskList, + sideEffectsList, + referralsList, + containers, + ); emit(state.copyWith( householdMembers: containers, @@ -191,4 +252,111 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { )); } } + + Future _processHouseholdEntries( + List householdMembersList, + List householdList, + List individualsList, + List projectBeneficiariesList, + List taskList, + List sideEffectsList, + List referralsList, + List containers, + ) async { + final groupedHouseholdsMembers = householdMembersList + .groupListsBy((element) => element.householdClientReferenceId); + + for (final entry in groupedHouseholdsMembers.entries) { + HouseholdModel filteredHousehold; + List filteredIndividuals; + List filteredTasks = []; + List filteredBeneficiaries = []; + final householdId = entry.key; + if (householdId == null) continue; + + // Filter household based on household ID + filteredHousehold = + householdList.firstWhere((e) => e.clientReferenceId == householdId); + + // Extract individual client reference IDs from household members + final List membersIds = + entry.value.map((e) => e.individualClientReferenceId).toList(); + + // Filter individuals based on individual client reference IDs + filteredIndividuals = individualsList + .where((element) => membersIds.contains(element.clientReferenceId)) + .toList(); + + // Filter beneficiaries based on filtered household client reference IDs + filteredBeneficiaries = projectBeneficiariesList + .where((element) => + element.beneficiaryClientReferenceId == + filteredHousehold.clientReferenceId) + .toList(); + + // Filter tasks based on project beneficiary client reference IDs + for (var beneficiary in filteredBeneficiaries) { + var tasksForBeneficiary = taskList.where((element) => + beneficiary.clientReferenceId == + element.projectBeneficiaryClientReferenceId); + + filteredTasks.addAll(tasksForBeneficiary); + } + + // Find the head of the household + final head = filteredIndividuals.firstWhereOrNull( + (element) => + element.clientReferenceId == + entry.value + .firstWhereOrNull( + (element) => element.isHeadOfHousehold, + ) + ?.individualClientReferenceId, + ); + + // Skip if no head of household or no filtered beneficiaries + if (head == null) continue; + + // Add household member wrapper to containers + containers.add( + HouseholdMemberWrapper( + household: filteredHousehold, + headOfHousehold: head, + members: filteredIndividuals, + projectBeneficiaries: filteredBeneficiaries, + tasks: filteredTasks.isEmpty ? null : filteredTasks, + sideEffects: sideEffectsList.isEmpty ? null : sideEffectsList, + referrals: referralsList.isEmpty ? null : referralsList, + ), + ); + } + } + + Future> _processTasksAndRelatedData( + List projectBeneficiariesList, + List taskList, + List sideEffectsList, + List referralsList, + ) async { + if (projectBeneficiariesList.isNotEmpty) { + if (taskList.isEmpty) { + taskList = + await fetchTaskbyProjectBeneficiary(projectBeneficiariesList); + } + sideEffectsList = + await sideEffectDataRepository.search(SideEffectSearchModel( + taskClientReferenceId: + taskList.map((e) => e.clientReferenceId).toList(), + )); + referralsList = await referralDataRepository.search(ReferralSearchModel( + projectBeneficiaryClientReferenceId: + projectBeneficiariesList.map((e) => e.clientReferenceId).toList(), + )); + } + return [ + taskList, + sideEffectsList, + referralsList, + ]; + } } diff --git a/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart b/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart index b9d25cf84..99c10b3d4 100644 --- a/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart +++ b/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart @@ -109,7 +109,8 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { for (final entry in groupedHouseholdsMembers.entries) { HouseholdModel filteredHousehold; List filteredIndividuals; - List filteredTasks; + List filteredTasks = []; + List filteredBeneficiaries = []; final householdId = entry.key; if (householdId == null) continue; @@ -125,15 +126,20 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { filteredIndividuals = individualsList .where((element) => membersIds.contains(element.clientReferenceId)) .toList(); + // Filter beneficiaries based on individual client reference IDs + filteredBeneficiaries = projectBeneficiariesList + .where((element) => + membersIds.contains(element.beneficiaryClientReferenceId)) + .toList(); // Filter tasks based on project beneficiary client reference IDs - filteredTasks = taskList - .where((element) => filteredIndividuals - .where((e) => - e.clientReferenceId == - element.projectBeneficiaryClientReferenceId) - .isNotEmpty) - .toList(); + for (var beneficiary in filteredBeneficiaries) { + var tasksForBeneficiary = taskList.where((element) => + beneficiary.clientReferenceId == + element.projectBeneficiaryClientReferenceId); + + filteredTasks.addAll(tasksForBeneficiary); + } // Find the head of the household final head = filteredIndividuals.firstWhereOrNull( @@ -155,7 +161,7 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { household: filteredHousehold, headOfHousehold: head, members: filteredIndividuals, - projectBeneficiaries: projectBeneficiariesList, + projectBeneficiaries: filteredBeneficiaries, tasks: filteredTasks.isEmpty ? null : filteredTasks, sideEffects: sideEffectsList.isEmpty ? null : sideEffectsList, referrals: referralsList.isEmpty ? null : referralsList, diff --git a/packages/registration_delivery/lib/blocs/search_households/search_households.dart b/packages/registration_delivery/lib/blocs/search_households/search_households.dart index a5ec4fc71..0629ed00a 100644 --- a/packages/registration_delivery/lib/blocs/search_households/search_households.dart +++ b/packages/registration_delivery/lib/blocs/search_households/search_households.dart @@ -1,7 +1,6 @@ // GENERATED using mason_cli import 'dart:async'; -import 'package:closed_household/models/entities/user_action.dart'; import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/utils/typedefs.dart'; @@ -157,7 +156,6 @@ class SearchHouseholdsBloc emit(state.copyWith( searchQuery: null, householdMembers: [], - closedHouseholds: [], tag: null, )); } @@ -287,7 +285,6 @@ class SearchHouseholdsState with _$SearchHouseholdsState { String? searchQuery, String? tag, @Default([]) List householdMembers, - @Default([]) List closedHouseholds, }) = _SearchHouseholdsState; bool get resultsNotFound { diff --git a/packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart b/packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart index ec3cf4b0d..20d36757b 100644 --- a/packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart +++ b/packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart @@ -2409,8 +2409,6 @@ mixin _$SearchHouseholdsState { String? get tag => throw _privateConstructorUsedError; List get householdMembers => throw _privateConstructorUsedError; - List get closedHouseholds => - throw _privateConstructorUsedError; @JsonKey(ignore: true) $SearchHouseholdsStateCopyWith get copyWith => @@ -2429,8 +2427,7 @@ abstract class $SearchHouseholdsStateCopyWith<$Res> { bool loading, String? searchQuery, String? tag, - List householdMembers, - List closedHouseholds}); + List householdMembers}); } /// @nodoc @@ -2453,7 +2450,6 @@ class _$SearchHouseholdsStateCopyWithImpl<$Res, Object? searchQuery = freezed, Object? tag = freezed, Object? householdMembers = null, - Object? closedHouseholds = null, }) { return _then(_value.copyWith( offset: null == offset @@ -2480,10 +2476,6 @@ class _$SearchHouseholdsStateCopyWithImpl<$Res, ? _value.householdMembers : householdMembers // ignore: cast_nullable_to_non_nullable as List, - closedHouseholds: null == closedHouseholds - ? _value.closedHouseholds - : closedHouseholds // ignore: cast_nullable_to_non_nullable - as List, ) as $Val); } } @@ -2503,8 +2495,7 @@ abstract class _$$SearchHouseholdsStateImplCopyWith<$Res> bool loading, String? searchQuery, String? tag, - List householdMembers, - List closedHouseholds}); + List householdMembers}); } /// @nodoc @@ -2525,7 +2516,6 @@ class __$$SearchHouseholdsStateImplCopyWithImpl<$Res> Object? searchQuery = freezed, Object? tag = freezed, Object? householdMembers = null, - Object? closedHouseholds = null, }) { return _then(_$SearchHouseholdsStateImpl( offset: null == offset @@ -2552,10 +2542,6 @@ class __$$SearchHouseholdsStateImplCopyWithImpl<$Res> ? _value._householdMembers : householdMembers // ignore: cast_nullable_to_non_nullable as List, - closedHouseholds: null == closedHouseholds - ? _value._closedHouseholds - : closedHouseholds // ignore: cast_nullable_to_non_nullable - as List, )); } } @@ -2569,10 +2555,8 @@ class _$SearchHouseholdsStateImpl extends _SearchHouseholdsState { this.loading = false, this.searchQuery, this.tag, - final List householdMembers = const [], - final List closedHouseholds = const []}) + final List householdMembers = const []}) : _householdMembers = householdMembers, - _closedHouseholds = closedHouseholds, super._(); @override @@ -2598,19 +2582,9 @@ class _$SearchHouseholdsStateImpl extends _SearchHouseholdsState { return EqualUnmodifiableListView(_householdMembers); } - final List _closedHouseholds; - @override - @JsonKey() - List get closedHouseholds { - if (_closedHouseholds is EqualUnmodifiableListView) - return _closedHouseholds; - // ignore: implicit_dynamic_type - return EqualUnmodifiableListView(_closedHouseholds); - } - @override String toString() { - return 'SearchHouseholdsState(offset: $offset, limit: $limit, loading: $loading, searchQuery: $searchQuery, tag: $tag, householdMembers: $householdMembers, closedHouseholds: $closedHouseholds)'; + return 'SearchHouseholdsState(offset: $offset, limit: $limit, loading: $loading, searchQuery: $searchQuery, tag: $tag, householdMembers: $householdMembers)'; } @override @@ -2625,21 +2599,12 @@ class _$SearchHouseholdsStateImpl extends _SearchHouseholdsState { other.searchQuery == searchQuery) && (identical(other.tag, tag) || other.tag == tag) && const DeepCollectionEquality() - .equals(other._householdMembers, _householdMembers) && - const DeepCollectionEquality() - .equals(other._closedHouseholds, _closedHouseholds)); + .equals(other._householdMembers, _householdMembers)); } @override - int get hashCode => Object.hash( - runtimeType, - offset, - limit, - loading, - searchQuery, - tag, - const DeepCollectionEquality().hash(_householdMembers), - const DeepCollectionEquality().hash(_closedHouseholds)); + int get hashCode => Object.hash(runtimeType, offset, limit, loading, + searchQuery, tag, const DeepCollectionEquality().hash(_householdMembers)); @JsonKey(ignore: true) @override @@ -2656,8 +2621,7 @@ abstract class _SearchHouseholdsState extends SearchHouseholdsState { final bool loading, final String? searchQuery, final String? tag, - final List householdMembers, - final List closedHouseholds}) = + final List householdMembers}) = _$SearchHouseholdsStateImpl; const _SearchHouseholdsState._() : super._(); @@ -2674,8 +2638,6 @@ abstract class _SearchHouseholdsState extends SearchHouseholdsState { @override List get householdMembers; @override - List get closedHouseholds; - @override @JsonKey(ignore: true) _$$SearchHouseholdsStateImplCopyWith<_$SearchHouseholdsStateImpl> get copyWith => throw _privateConstructorUsedError; diff --git a/packages/registration_delivery/lib/data/repositories/local/closed_household_search.dart b/packages/registration_delivery/lib/data/repositories/local/closed_household_search.dart deleted file mode 100644 index 422af90be..000000000 --- a/packages/registration_delivery/lib/data/repositories/local/closed_household_search.dart +++ /dev/null @@ -1,117 +0,0 @@ -import 'dart:async'; -import 'dart:math' as math; -import 'package:closed_household/models/entities/user_action.dart'; -import 'package:digit_data_model/data_model.dart'; -import 'package:drift/drift.dart'; -import 'package:closed_household/closed_household.dart' as closed_status - show Status, StatusMapperExtension; - -import '../../../utils/global_search_parameters.dart'; - -class ClosedHouseholdHoldSearchLocalRepository { - FutureOr> performClosedHouseholdSearch( - GlobalSearchParameters params, LocalSqlDataStore sql) async { - return retryLocalCallOperation>(() async { - var selectQuery = sql.select(sql.userAction).join([]); - - if (params.isProximityEnabled) { - await performProximitySearch(selectQuery, params, sql); - } else { - selectQuery = selectQuery - ..where(sql.userAction.status - .equals(closed_status.Status.closeHousehold.toValue())); - } - - selectQuery.limit(params.limit ?? 50, offset: params.offset ?? 0); - - final results = await selectQuery.get(); - - return results - .map((e) { - final userAction = e.readTableOrNull(sql.userAction); - - return UserActionModel( - id: userAction?.id, - tenantId: userAction?.tenantId, - action: userAction?.action, - clientReferenceId: userAction!.clientReferenceId, - rowVersion: userAction.rowVersion, - auditDetails: (userAction.auditCreatedBy != null && - userAction.auditCreatedTime != null) - ? AuditDetails( - createdBy: userAction.auditCreatedBy!, - createdTime: userAction.auditCreatedTime!, - lastModifiedBy: userAction.auditModifiedBy, - lastModifiedTime: userAction.auditModifiedTime, - ) - : null, - clientAuditDetails: (userAction.clientCreatedBy != null && - userAction.clientCreatedTime != null) - ? ClientAuditDetails( - createdBy: userAction.clientCreatedBy!, - createdTime: userAction.clientCreatedTime!, - lastModifiedBy: userAction.clientModifiedBy, - lastModifiedTime: userAction.clientModifiedTime, - ) - : null, - beneficiaryTag: userAction.beneficiaryTag != null && - userAction.beneficiaryTag!.isNotEmpty - ? userAction.beneficiaryTag - : null, - boundaryCode: userAction.boundaryCode, - isDeleted: userAction.isDeleted, - latitude: userAction.latitude, - longitude: userAction.longitude, - locationAccuracy: userAction.locationAccuracy, - nonRecoverableError: userAction.nonRecoverableError, - projectId: userAction.projectId, - resourceTag: userAction.resourceTag, - status: userAction.status, - additionalFields: userAction.additionalFields != null && - userAction.additionalFields!.isNotEmpty - ? UserActionAdditionalFieldsMapper.fromJson( - userAction.additionalFields.toString()) - : null); - }) - .where((element) => element.isDeleted != true) - .toList(); - }); - } - - performProximitySearch( - selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) async { - return await (selectQuery - ..where(buildAnd([ - if (params.latitude != null && - params.longitude != null && - params.maxRadius != null) - CustomExpression(''' - (6371393 * acos( - cos(${params.latitude! * math.pi / 180.0}) * cos((user_action.latitude * ${math.pi / 180.0})) - * cos((user_action.longitude * ${math.pi / 180.0}) - ${params.longitude! * math.pi / 180.0}) - + sin(${params.latitude! * math.pi / 180.0}) * sin((user_action.latitude * ${math.pi / 180.0})) - )) <= ${params.maxRadius!} - '''), - if (params.latitude != null && - params.longitude != null && - params.maxRadius != null) - sql.userAction.longitude.isNotNull(), - sql.userAction.latitude.isNotNull(), - ]))) - .orderBy([ - if (params.latitude != null && - params.longitude != null && - params.maxRadius != null) - OrderingTerm( - expression: CustomExpression(''' - (6371393 * acos( - cos(${params.latitude! * math.pi / 180.0}) * cos((user_action.latitude * ${math.pi / 180.0})) - * cos((user_action.longitude * ${math.pi / 180.0}) - ${params.longitude! * math.pi / 180.0}) - + sin(${params.latitude! * math.pi / 180.0}) * sin((user_action.latitude * ${math.pi / 180.0})) - )) - '''), - mode: OrderingMode.asc, - ), - ]); - } -} diff --git a/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart b/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart index d2e8c7112..68f9e7da5 100644 --- a/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart +++ b/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart @@ -2,11 +2,12 @@ import 'dart:async'; import 'dart:math' as math; import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; +import 'package:registration_delivery/models/entities/task.dart'; import '../../../models/entities/household.dart'; import '../../../models/entities/status.dart'; +import '../../../models/entities/task_resource.dart'; import '../../../utils/global_search_parameters.dart'; -import 'closed_household_search.dart'; class HouseHoldGlobalSearchRepository extends LocalRepository { HouseHoldGlobalSearchRepository(super.sql, super.opLogManager); @@ -20,10 +21,38 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { DataModelType get type => throw UnimplementedError(); houseHoldGlobalSearch(GlobalSearchParameters params) async { - if (params.filter!.contains(Status.closeHousehold.name)) { - return await ClosedHouseholdHoldSearchLocalRepository() - .performClosedHouseholdSearch(params, super.sql); - } else { + if (params.filter!.contains(Status.registered.name) || + params.filter!.contains(Status.notRegistered.name)) { + dynamic selectQuery; + + var proximitySelectQuery = + await proximitySearch(selectQuery, params, super.sql); + + var nameSelectQuery = + await nameSearch(proximitySelectQuery, params, super.sql); + + var filterSelectQuery = nameSelectQuery; + + if (params.filter != null && params.filter!.isNotEmpty) { + for (var filter in params.filter!) { + filterSelectQuery = + await filterSearch(filterSelectQuery, params, filter, super.sql); + } + } else { + filterSelectQuery = nameSelectQuery; + } + + if (filterSelectQuery == null) { + return []; + } else { + await filterSelectQuery.limit(params.limit ?? 50, + offset: params.offset ?? 0); + + final results = await filterSelectQuery.get(); + + return _returnHouseHoldModel(results); + } + } else if (params.filter!.isNotEmpty && params.filter != null) { dynamic selectQuery; var proximitySelectQuery = @@ -53,87 +82,61 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { return results .map((e) { - final household = e.readTable(sql.household); - final address = e.readTableOrNull(sql.address); - - return HouseholdModel( - id: household.id, - tenantId: household.tenantId, - clientReferenceId: household.clientReferenceId, - memberCount: household.memberCount, - rowVersion: household.rowVersion, - isDeleted: household.isDeleted, - additionalFields: household.additionalFields != null && - household.additionalFields.toString().isNotEmpty - ? HouseholdAdditionalFieldsMapper.fromJson( - household.additionalFields.toString()) - : null, - auditDetails: (household.auditCreatedBy != null && - household.auditCreatedTime != null) - ? AuditDetails( - createdBy: household.auditCreatedBy!, - createdTime: household.auditCreatedTime!, - lastModifiedBy: household.auditModifiedBy, - lastModifiedTime: household.auditModifiedTime, - ) - : null, - clientAuditDetails: (household.clientCreatedBy != null && - household.clientCreatedTime != null) - ? ClientAuditDetails( - createdBy: household.clientCreatedBy!, - createdTime: household.clientCreatedTime!, - lastModifiedBy: household.clientModifiedBy, - lastModifiedTime: household.clientModifiedTime, - ) - : null, - address: address == null + final task = e.readTable(sql.task); + final resources = e.readTableOrNull(sql.taskResource); + + return TaskModel( + id: task.id, + createdBy: task.createdBy, + clientReferenceId: task.clientReferenceId, + rowVersion: task.rowVersion, + tenantId: task.tenantId, + isDeleted: task.isDeleted, + projectId: task.projectId, + projectBeneficiaryId: task.projectBeneficiaryId, + projectBeneficiaryClientReferenceId: + task.projectBeneficiaryClientReferenceId, + createdDate: task.createdDate, + status: task.status, + resources: resources == null ? null - : AddressModel( - id: address.id, - relatedClientReferenceId: household.clientReferenceId, - tenantId: address.tenantId, - doorNo: address.doorNo, - latitude: address.latitude, - longitude: address.longitude, - landmark: address.landmark, - locationAccuracy: address.locationAccuracy, - addressLine1: address.addressLine1, - addressLine2: address.addressLine2, - city: address.city, - pincode: address.pincode, - locality: address.localityBoundaryCode != null - ? LocalityModel( - code: address.localityBoundaryCode!, - name: address.localityBoundaryName, - ) - : null, - type: address.type, - rowVersion: address.rowVersion, - auditDetails: (household.auditCreatedBy != null && - household.auditCreatedBy != null) - ? AuditDetails( - createdBy: household.auditCreatedBy!, - createdTime: household.auditCreatedTime!, - lastModifiedBy: household.auditModifiedBy, - lastModifiedTime: household.auditModifiedTime, - ) - : null, - clientAuditDetails: (household.clientCreatedBy != - null && - household.clientCreatedTime != null) - ? ClientAuditDetails( - createdBy: household.clientCreatedBy!, - createdTime: household.clientCreatedTime!, - lastModifiedBy: household.clientModifiedBy, - lastModifiedTime: household.clientModifiedTime, - ) - : null, - ), + : [ + TaskResourceModel( + taskclientReferenceId: + resources.taskclientReferenceId, + clientReferenceId: resources.clientReferenceId, + id: resources.id, + productVariantId: resources.productVariantId, + taskId: resources.taskId, + deliveryComment: resources.deliveryComment, + quantity: resources.quantity, + rowVersion: resources.rowVersion, + ), + ], ); }) .where((element) => element.isDeleted != true) .toList(); } + } else { + dynamic selectQuery; + + var proximitySelectQuery = + await proximitySearch(selectQuery, params, super.sql); + + var nameSelectQuery = + await nameSearch(proximitySelectQuery, params, super.sql); + + if (nameSelectQuery == null) { + return []; + } else { + await nameSelectQuery.limit(params.limit ?? 50, + offset: params.offset ?? 0); + + final results = await nameSelectQuery.get(); + + return _returnHouseHoldModel(results); + } } } @@ -142,7 +145,7 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { if (!params.isProximityEnabled) { return null; } else if (params.isProximityEnabled) { - selectQuery = super.sql.household.select().join([ + selectQuery = super.sql.address.select().join([ joinHouseHoldAddress(sql), ]); performProximitySearch(selectQuery, params, sql); @@ -241,32 +244,70 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { LocalSqlDataStore sql) async { var sql = super.sql; if (selectQuery == null) { - selectQuery = super.sql.household.select().join([ - leftOuterJoin( - sql.projectBeneficiary, - sql.projectBeneficiary.beneficiaryClientReferenceId - .equalsExp(super.sql.household.clientReferenceId)) - ]) - ..where(filter == Status.registered.name - ? sql.projectBeneficiary.beneficiaryClientReferenceId.isNotNull() - : sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); + if (filter == Status.registered.name || + filter == Status.notRegistered.name) { + selectQuery = super.sql.household.select().join([ + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(super.sql.household.clientReferenceId)) + ]) + ..where(filter == Status.registered.name + ? sql.projectBeneficiary.beneficiaryClientReferenceId.isNotNull() + : sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); + } else { + var filterSearchQuery = await filterTasks(selectQuery, filter, sql); + + selectQuery = filterSearchQuery; + } } else if (selectQuery != null) { - selectQuery = selectQuery.join([ - leftOuterJoin( - sql.projectBeneficiary, - filter == Status.registered.name - ? sql.projectBeneficiary.beneficiaryClientReferenceId - .equalsExp(super.sql.household.clientReferenceId) - : sql.projectBeneficiary.beneficiaryClientReferenceId - .equalsExp(super.sql.household.clientReferenceId)) - ]) - ..where(filter == Status.registered.name - ? sql.projectBeneficiary.beneficiaryClientReferenceId.isNotNull() - : sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); + if (filter == Status.registered.name || + filter == Status.notRegistered.name) { + selectQuery = selectQuery.join([ + leftOuterJoin( + sql.projectBeneficiary, + filter == Status.registered.name + ? sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(super.sql.household.clientReferenceId) + : sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(super.sql.household.clientReferenceId)) + ]) + ..where(filter == Status.registered.name + ? sql.projectBeneficiary.beneficiaryClientReferenceId.isNotNull() + : sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); + } else { + var filterSearchQuery = await filterTasks(selectQuery, filter, sql); + + selectQuery = filterSearchQuery; + } } return selectQuery; } + filterTasks(selectQuery, String filter, LocalSqlDataStore sql) { + final statusMap = { + Status.delivered.name: Status.delivered, + Status.notDelivered.name: Status.notDelivered, + Status.visited.name: Status.visited, + Status.notVisited.name: Status.notVisited, + Status.beneficiaryRefused.name: Status.beneficiaryRefused, + Status.beneficiaryReferred.name: Status.beneficiaryReferred, + Status.administeredSuccess.name: Status.administeredSuccess, + Status.administeredFailed.name: Status.administeredFailed, + Status.inComplete.name: Status.inComplete, + Status.toAdminister.name: Status.toAdminister, + Status.closeHousehold.name: Status.closeHousehold, + }; + var applyFilter = filter; + selectQuery = sql.select(sql.task).join([]); + + selectQuery.where(sql.task.status.equals( + statusMap[applyFilter]!.toValue(), + )); + + return selectQuery; + } + joinName(LocalSqlDataStore sql) { return leftOuterJoin( sql.name, @@ -278,9 +319,9 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { joinHouseHoldAddress(LocalSqlDataStore sql) { return leftOuterJoin( - sql.address, - sql.address.relatedClientReferenceId.equalsExp( - sql.household.clientReferenceId, + sql.household, + sql.household.clientReferenceId.equalsExp( + sql.address.relatedClientReferenceId, ), ); } @@ -307,4 +348,88 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { return leftOuterJoin(sql.projectBeneficiary, sql.projectBeneficiary.clientReferenceId.isNotNull()); } + + _returnHouseHoldModel(results) { + return results + .map((e) { + final household = e.readTable(sql.household); + final address = e.readTableOrNull(sql.address); + + return HouseholdModel( + id: household.id, + tenantId: household.tenantId, + clientReferenceId: household.clientReferenceId, + memberCount: household.memberCount, + rowVersion: household.rowVersion, + isDeleted: household.isDeleted, + additionalFields: household.additionalFields != null && + household.additionalFields.toString().isNotEmpty + ? HouseholdAdditionalFieldsMapper.fromJson( + household.additionalFields.toString()) + : null, + auditDetails: (household.auditCreatedBy != null && + household.auditCreatedTime != null) + ? AuditDetails( + createdBy: household.auditCreatedBy!, + createdTime: household.auditCreatedTime!, + lastModifiedBy: household.auditModifiedBy, + lastModifiedTime: household.auditModifiedTime, + ) + : null, + clientAuditDetails: (household.clientCreatedBy != null && + household.clientCreatedTime != null) + ? ClientAuditDetails( + createdBy: household.clientCreatedBy!, + createdTime: household.clientCreatedTime!, + lastModifiedBy: household.clientModifiedBy, + lastModifiedTime: household.clientModifiedTime, + ) + : null, + address: address == null + ? null + : AddressModel( + id: address.id, + relatedClientReferenceId: household.clientReferenceId, + tenantId: address.tenantId, + doorNo: address.doorNo, + latitude: address.latitude, + longitude: address.longitude, + landmark: address.landmark, + locationAccuracy: address.locationAccuracy, + addressLine1: address.addressLine1, + addressLine2: address.addressLine2, + city: address.city, + pincode: address.pincode, + locality: address.localityBoundaryCode != null + ? LocalityModel( + code: address.localityBoundaryCode!, + name: address.localityBoundaryName, + ) + : null, + type: address.type, + rowVersion: address.rowVersion, + auditDetails: (household.auditCreatedBy != null && + household.auditCreatedBy != null) + ? AuditDetails( + createdBy: household.auditCreatedBy!, + createdTime: household.auditCreatedTime!, + lastModifiedBy: household.auditModifiedBy, + lastModifiedTime: household.auditModifiedTime, + ) + : null, + clientAuditDetails: (household.clientCreatedBy != null && + household.clientCreatedTime != null) + ? ClientAuditDetails( + createdBy: household.clientCreatedBy!, + createdTime: household.clientCreatedTime!, + lastModifiedBy: household.clientModifiedBy, + lastModifiedTime: household.clientModifiedTime, + ) + : null, + ), + ); + }) + .where((element) => element.isDeleted != true) + .toList(); + } } diff --git a/packages/registration_delivery/lib/data/repositories/local/task.dart b/packages/registration_delivery/lib/data/repositories/local/task.dart index f54a89f5c..3aab80db2 100644 --- a/packages/registration_delivery/lib/data/repositories/local/task.dart +++ b/packages/registration_delivery/lib/data/repositories/local/task.dart @@ -2,12 +2,10 @@ import 'dart:async'; import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; -import 'package:digit_data_model/models/oplog/oplog_entry.dart'; import 'package:drift/drift.dart'; import 'package:registration_delivery/models/entities/task_resource.dart'; import '../../../models/entities/task.dart'; -import '../../../utils/utils.dart'; class TaskLocalRepository extends LocalRepository { TaskLocalRepository( diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index ffb4945dc..e4e3d294d 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -63,14 +63,7 @@ class _HouseholdOverviewPageState body: state.loading ? const Center(child: CircularProgressIndicator()) : ScrollableContent( - header: BackNavigationHelpHeaderWidget( - handleBack: () { - context - .read() - .searchHouseholdsBloc - .add(const SearchHouseholdsClearEvent()); - }, - ), + header: const BackNavigationHelpHeaderWidget(), enableFixedButton: true, footer: Offstage( offstage: beneficiaryType == BeneficiaryType.individual, @@ -448,20 +441,24 @@ class _HouseholdOverviewPageState taskData.last.clientReferenceId) .toList() : null; - final ageInYears = - DigitDateUtils.calculateAge( - DigitDateUtils.getFormattedDateToDateTime( - e.dateOfBirth!, - ) ?? - DateTime.now(), - ).years; - final ageInMonths = - DigitDateUtils.calculateAge( - DigitDateUtils.getFormattedDateToDateTime( - e.dateOfBirth!, - ) ?? - DateTime.now(), - ).months; + final ageInYears = e.dateOfBirth != null + ? DigitDateUtils.calculateAge( + DigitDateUtils + .getFormattedDateToDateTime( + e.dateOfBirth!, + ) ?? + DateTime.now(), + ).years + : 0; + final ageInMonths = e.dateOfBirth != null + ? DigitDateUtils.calculateAge( + DigitDateUtils + .getFormattedDateToDateTime( + e.dateOfBirth!, + ) ?? + DateTime.now(), + ).months + : 0; final currentCycle = RegistrationDeliverySingleton() .projectType @@ -608,11 +605,6 @@ class _HouseholdOverviewPageState individualModel: e, ), ); - - context.router - .popUntilRouteWithName( - SearchBeneficiaryRoute.name, - ); context.router.push( ReasonForDeletionRoute( isHousholdDelete: false, diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/view_closed_household.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/view_closed_household.dart deleted file mode 100644 index 1edb474a7..000000000 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/view_closed_household.dart +++ /dev/null @@ -1,95 +0,0 @@ -import 'package:closed_household/models/entities/user_action.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:flutter/material.dart'; - -import '../../../utils/i18_key_constants.dart' as i18; -import '../../../widgets/beneficiary/beneficiary_card.dart'; -import '../../../widgets/localized.dart'; - -class ViewClosedHouseholdCard extends LocalizedStatefulWidget { - final UserActionModel userAction; - final VoidCallback? onOpenPressed; - final double? distance; - - const ViewClosedHouseholdCard({ - super.key, - super.appLocalizations, - required this.userAction, - this.onOpenPressed, - this.distance, - }); - - @override - State createState() => - _ViewClosedHouseholdCardState(); -} - -class _ViewClosedHouseholdCardState - extends LocalizedState { - late UserActionModel userAction; - - @override - void initState() { - userAction = widget.userAction; - super.initState(); - } - - @override - void didUpdateWidget(covariant ViewClosedHouseholdCard oldWidget) { - userAction = widget.userAction; - super.didUpdateWidget(oldWidget); - } - - bool _isCardExpanded = false; - - bool get isCardExpanded => _isCardExpanded; - - set isCardExpanded(bool value) => setState(() => _isCardExpanded = value); - - @override - Widget build(BuildContext context) { - final theme = Theme.of(context); - - return DigitCard( - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - width: MediaQuery.of(context).size.width / 1.8, - child: BeneficiaryCard( - status: widget.userAction.status ?? '', - title: widget.userAction.additionalFields != null - ? widget.userAction.additionalFields?.fields - .where((h) => h.key == 'householdHead') - .firstOrNull - ?.value - : 'Unnamed', - description: widget.distance != null - ? ((widget.distance!) * 1000).round() > 999 - ? '(${((widget.distance!).round())} km)' - : '(${((widget.distance!) * 1000).round()} mts)' - : '', - ), - ), - Flexible( - child: DigitOutLineButton( - buttonStyle: OutlinedButton.styleFrom( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.zero, - ), - ), - label: - localizations.translate(i18.searchBeneficiary.iconLabel), - onPressed: widget.onOpenPressed, - ), - ), - ], - ), - ], - ), - ); - } -} diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart index 60cf16316..dcd3fdb0e 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart @@ -65,6 +65,7 @@ class BeneficiaryRegistrationWrapperPage extends StatelessWidget householdRepository: household, householdMemberRepository: householdMember, projectBeneficiaryRepository: projectBeneficiary, + taskDataRepository: task, beneficiaryType: beneficiaryType!, ), child: this, diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart index 8fd16607c..fcf2d83f9 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart @@ -1,6 +1,5 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/atoms/digit_toaster.dart'; import 'package:digit_components/widgets/atoms/selection_card.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; @@ -94,7 +93,6 @@ class HouseDetailsPageState extends LocalizedState { registrationDate, searchQuery, loading, - selectedClosedHouseholdID, isHeadOfHousehold, ) { var houseModel = HouseholdModel( diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart index c50cafe2c..7b28e1140 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart @@ -101,7 +101,6 @@ class HouseHoldDetailsPageState extends LocalizedState { projectBeneficiaryModel, registrationDate, searchQuery, - selectedClosedHouseholdID, loading, isHeadOfHousehold, ) { diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index 1a196c54b..fc05fbc45 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -143,7 +143,6 @@ class HouseholdLocationPageState extends LocalizedState { projectBeneficiaryModel, registrationDate, searchQuery, - selectedClosedHouseholdID, loading, isHeadOfHousehold, ) { diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index 530686a15..b8e28a752 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -142,7 +142,6 @@ class IndividualDetailsPageState extends LocalizedState { projectBeneficiaryModel, registrationDate, searchQuery, - selectedClosedHouseholdID, loading, isHeadOfHousehold, ) async { @@ -718,9 +717,10 @@ class IndividualDetailsPageState extends LocalizedState { ), ); + String? individualName = form.control(_individualNameKey).value as String?; individual = individual.copyWith( name: name.copyWith( - givenName: form.control(_individualNameKey).value, + givenName: individualName?.trim(), ), gender: form.control(_genderKey).value == null ? null @@ -770,7 +770,7 @@ class IndividualDetailsPageState extends LocalizedState { CustomValidator.requiredMin, Validators.maxLength(200), ], - value: individual?.name?.givenName ?? searchQuery, + value: individual?.name?.givenName ?? searchQuery?.trim(), ), _idTypeKey: FormControl( value: individual?.identifiers?.firstOrNull?.identifierType, diff --git a/packages/registration_delivery/lib/pages/reason_for_deletion.dart b/packages/registration_delivery/lib/pages/reason_for_deletion.dart index 4d4de2ad7..e001b3627 100644 --- a/packages/registration_delivery/lib/pages/reason_for_deletion.dart +++ b/packages/registration_delivery/lib/pages/reason_for_deletion.dart @@ -25,8 +25,7 @@ class ReasonForDeletionPage extends LocalizedStatefulWidget { State createState() => ReasonForDeletionPageState(); } -class ReasonForDeletionPageState - extends LocalizedState { +class ReasonForDeletionPageState extends LocalizedState { static const _reasonForDeletionKey = 'reasonForDeletion'; @override @@ -82,12 +81,39 @@ class ReasonForDeletionPageState ), ); - context.router.maybePop(); + // context.router.maybePop(); + final parent = context.router.parent() as StackRouter; if (widget.isHousholdDelete) { (context.router.parent() as StackRouter).maybePop(); } - context.router.push(BeneficiaryAcknowledgementRoute()); + parent.popUntil((route) => + route.settings.name == + BeneficiaryWrapperRoute.name); + final reloadState = + context.read(); + Future.delayed( + const Duration(milliseconds: 500), + () { + reloadState.add( + HouseholdOverviewReloadEvent( + projectId: + RegistrationDeliverySingleton().projectId!, + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType!, + ), + ); + }, + ).then( + (value) => context.router.push( + HouseholdAcknowledgementRoute( + enableViewHousehold: true, + ), + ), + ); + // context.router.push(HouseholdAcknowledgementRoute( + // enableViewHousehold: true)); } else { DigitToast.show(context, options: DigitToastOptions( diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index 52adfbe65..956e35b06 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -6,7 +6,6 @@ import 'package:digit_scanner/pages/qr_scanner.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart'; -import 'package:registration_delivery/pages/beneficiary/widgets/view_closed_household.dart'; import 'package:registration_delivery/registration_delivery.dart'; import '../../utils/i18_key_constants.dart' as i18; @@ -67,7 +66,6 @@ class _SearchBeneficiaryPageState @override void dispose() { - blocWrapper.clearEvent(); super.dispose(); } @@ -93,9 +91,7 @@ class _SearchBeneficiaryPageState maxRadius: RegistrationDeliverySingleton().maxRadius, nameSearch: searchController.text, filter: selectedFilters, - offset: - blocWrapper.individualGlobalSearchBloc.state.offset + - blocWrapper.individualGlobalSearchBloc.state.limit, + offset: blocWrapper.individualGlobalSearchBloc.state.offset, limit: blocWrapper.individualGlobalSearchBloc.state.limit, ))); } else { @@ -108,8 +104,7 @@ class _SearchBeneficiaryPageState maxRadius: RegistrationDeliverySingleton().maxRadius, nameSearch: searchController.text, filter: selectedFilters, - offset: blocWrapper.houseHoldGlobalSearchBloc.state.offset + - blocWrapper.houseHoldGlobalSearchBloc.state.limit, + offset: blocWrapper.houseHoldGlobalSearchBloc.state.offset, limit: blocWrapper.houseHoldGlobalSearchBloc.state.limit, ))); } @@ -197,21 +192,17 @@ class _SearchBeneficiaryPageState onChanged: (value) { if (value.isEmpty) { blocWrapper.clearEvent(); + triggerGlobalSearchEvent(); } if (value.trim().length < 2 && !isProximityEnabled) { blocWrapper.clearEvent(); - - return; - } else if (isProximityEnabled && - value.trim().length < 2) { - triggerGlobalSearchEvent(); } else { blocWrapper.searchHouseholdsBloc.add( const SearchHouseholdsClearEvent(), ); - triggerGlobalSearchEvent(); } + triggerGlobalSearchEvent(); }, ), Align( @@ -266,7 +257,7 @@ class _SearchBeneficiaryPageState color: const DigitColors() .davyGray)), Text( - '(${selectedFilters.contains(Status.closeHousehold.name) ? searchHouseholdsState.closedHouseholds.length : searchHouseholdsState.householdMembers.length})', + '(${searchHouseholdsState.householdMembers.length})', style: TextStyle( color: const DigitColors() .davyGray)), @@ -337,169 +328,92 @@ class _SearchBeneficiaryPageState ), BlocListener( listener: (context, scannerState) { - context.read().tagSearchBloc.add( - SearchHouseholdsEvent.searchByTag( - tag: scannerState.qrCodes.isNotEmpty - ? scannerState.qrCodes.lastOrNull! - : '', - projectId: RegistrationDeliverySingleton().projectId!, - ), - ); + if (scannerState.qrCodes.isNotEmpty) { + context.read().tagSearchBloc.add( + SearchHouseholdsEvent.searchByTag( + tag: scannerState.qrCodes.isNotEmpty + ? scannerState.qrCodes.lastOrNull! + : '', + projectId: + RegistrationDeliverySingleton().projectId!, + ), + ); + } }, child: BlocBuilder( builder: (context, locationState) { - return searchHouseholdsState.closedHouseholds.isNotEmpty - ? SliverList( - delegate: SliverChildBuilderDelegate( - (ctx, index) { - final i = searchHouseholdsState.closedHouseholds - .elementAt(index); - - final distance = calculateDistance( - Coordinate( - lat, - long, - ), - Coordinate( - i.latitude, - i.longitude, - ), - ); - - return ViewClosedHouseholdCard( - userAction: i, - onOpenPressed: () async { - setState(() { - selectedFilters = []; - }); - blocWrapper.clearEvent(); - await context.router.push( - BeneficiaryRegistrationWrapperRoute( - initialState: - BeneficiaryRegistrationCreateState( - searchQuery: i - .additionalFields?.fields - .where((h) => - h.key == 'householdHead') - .firstOrNull - ?.value, - selectedClosedHouseholdID: - i.clientReferenceId, - ), - ), - ); - }, - distance: - isProximityEnabled ? distance : null, - ); - }, - childCount: - searchHouseholdsState.closedHouseholds.length, + return SliverList( + delegate: SliverChildBuilderDelegate( + (ctx, index) { + final i = searchHouseholdsState.householdMembers + .elementAt(index); + final distance = calculateDistance( + Coordinate( + lat, + long, ), - ) - : SliverList( - delegate: SliverChildBuilderDelegate( - (ctx, index) { - final i = searchHouseholdsState.householdMembers - .elementAt(index); - final projectBeneficiaries = - i.projectBeneficiaries?.where((element) { - if (RegistrationDeliverySingleton() - .beneficiaryType == - BeneficiaryType.individual) { - return element - .beneficiaryClientReferenceId == - i.household?.clientReferenceId; - } else { - return element - .beneficiaryClientReferenceId == - i.household!.clientReferenceId; - } - }).toList(); - final taskData = (projectBeneficiaries ?? []) - .isNotEmpty && - i.tasks != null - ? i.tasks - ?.where((element) => - element - .projectBeneficiaryClientReferenceId == - projectBeneficiaries - ?.first.clientReferenceId) - .toList() - : null; - final referralData = (projectBeneficiaries ?? - []) - .isNotEmpty - ? i.referrals - ?.where((element) => - element - .projectBeneficiaryClientReferenceId == - projectBeneficiaries - ?.first.clientReferenceId) - .toList() - : null; - final sideEffects = - taskData != null && taskData.isNotEmpty - ? i.sideEffects - ?.where((element) => - element.taskClientReferenceId == - taskData.last.clientReferenceId) - .toList() - : null; - final memberWrapper = HouseholdMemberWrapper( - household: i.household, - headOfHousehold: i.headOfHousehold, - members: i.members, - projectBeneficiaries: projectBeneficiaries, - tasks: taskData, - sideEffects: sideEffects, - referrals: referralData, - ); - final distance = calculateDistance( - Coordinate( - lat, - long, - ), - Coordinate( - memberWrapper.household?.address?.latitude, - memberWrapper.household?.address?.longitude, - ), - ); - - return Container( - margin: - const EdgeInsets.only(bottom: kPadding), - child: ViewBeneficiaryCard( - distance: - isProximityEnabled ? distance : null, - householdMember: memberWrapper, - onOpenPressed: () async { - final scannerBloc = - context.read(); + Coordinate( + i.household?.address?.latitude, + i.household?.address?.longitude, + ), + ); - scannerBloc.add( - const DigitScannerEvent.handleScanner(), - ); + return Container( + margin: const EdgeInsets.only(bottom: kPadding), + child: ViewBeneficiaryCard( + distance: isProximityEnabled ? distance : null, + householdMember: i, + onOpenPressed: () async { + final scannerBloc = + context.read(); - await context.router.push( - BeneficiaryWrapperRoute( - wrapper: memberWrapper, - ), - ); - setState(() { - isProximityEnabled = false; - }); - searchController.clear(); - selectedFilters.clear(); - blocWrapper.clearEvent(); - }, - ), + scannerBloc.add( + const DigitScannerEvent.handleScanner(), ); + + if (i.tasks != null && + i.tasks!.last.status == + Status.closeHousehold.name && + i.tasks!.isNotEmpty) { + setState(() { + selectedFilters = []; + }); + blocWrapper.clearEvent(); + await context.router.push( + BeneficiaryRegistrationWrapperRoute( + initialState: BeneficiaryRegistrationState + .editHousehold( + householdModel: i.household!, + individualModel: i.members!, + registrationDate: DateTime.now(), + projectBeneficiaryModel: + i.projectBeneficiaries!.last, + addressModel: + i.headOfHousehold!.address!.last, + ), + ), + ); + } else { + await context.router.push( + BeneficiaryWrapperRoute( + wrapper: i, + ), + ); + } + setState(() { + isProximityEnabled = false; + }); + searchController.clear(); + selectedFilters.clear(); + blocWrapper.clearEvent(); }, - childCount: - searchHouseholdsState.householdMembers.length, ), ); + }, + childCount: + searchHouseholdsState.householdMembers.length, + ), + ); }, ), ), @@ -529,6 +443,7 @@ class _SearchBeneficiaryPageState ), )); searchController.clear(); + selectedFilters = []; blocWrapper.clearEvent(); } : null, @@ -546,6 +461,8 @@ class _SearchBeneficiaryPageState ), onPressed: () { blocWrapper.clearEvent(); + selectedFilters = []; + searchController.clear(); Navigator.of(context).push( MaterialPageRoute( builder: (context) => const DigitScannerPage( @@ -583,6 +500,8 @@ class _SearchBeneficiaryPageState showFilterDialog() async { var filters = await DigitDialog.show(context, options: DigitDialogOptions( + isCloseIcon: true, + barrierDismissible: true, titleIcon: Icon(getFilterIconNLabel()['icon'], color: const DigitColors().burningOrange), titleText: getFilterIconNLabel()['label'], @@ -593,13 +512,9 @@ class _SearchBeneficiaryPageState setState(() { selectedFilters = []; }); - for (var filter in filters) { - if (!selectedFilters.contains(filter)) { - setState(() { - selectedFilters.add(filter); - }); - } - } + setState(() { + selectedFilters.addAll(filters); + }); triggerGlobalSearchEvent(); } else { setState(() { @@ -616,7 +531,8 @@ class _SearchBeneficiaryPageState BeneficiaryType.individual) { if (isProximityEnabled || selectedFilters.isNotEmpty || - searchController.text.isNotEmpty) { + searchController.text.isNotEmpty || + searchController.text.length > 2) { blocWrapper.individualGlobalSearchBloc .add(SearchHouseholdsEvent.individualGlobalSearch( globalSearchParams: GlobalSearchParameters( @@ -641,7 +557,7 @@ class _SearchBeneficiaryPageState latitude: lat, longitude: long, maxRadius: RegistrationDeliverySingleton().maxRadius, - nameSearch: searchController.text, + nameSearch: searchController.text.trim(), filter: selectedFilters, offset: offset, limit: limit, diff --git a/packages/registration_delivery/lib/pages/summary_page.dart b/packages/registration_delivery/lib/pages/summary_page.dart index 63f22f036..1e60af607 100644 --- a/packages/registration_delivery/lib/pages/summary_page.dart +++ b/packages/registration_delivery/lib/pages/summary_page.dart @@ -1,5 +1,4 @@ import 'package:auto_route/auto_route.dart'; -import 'package:closed_household/blocs/closed_household.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/utils/date_utils.dart'; import 'package:digit_components/widgets/atoms/details_card.dart'; @@ -126,7 +125,6 @@ class SummaryPageState extends LocalizedState { projectBeneficiaryModel, registrationDate, addressModel, - selectedClosedHouseholdID, loading, isHeadOfHousehold, ) async { @@ -175,14 +173,6 @@ class SummaryPageState extends LocalizedState { tag: projectBeneficiaryModel?.tag, navigateToSummary: false), ); - if (selectedClosedHouseholdID != null && - householdModel != null) { - context.read().add( - ClosedHouseholdEvent.handleUpdate( - selectedClosedHouseholdID, - householdModel - .clientReferenceId)); - } } } }, @@ -340,7 +330,6 @@ class SummaryPageState extends LocalizedState { projectBeneficiaryModel, registrationDate, addressModel, - selectedClosedHouseholdID, loading, isHeadOfHousehold, ) => @@ -361,7 +350,6 @@ class SummaryPageState extends LocalizedState { projectBeneficiaryModel, registrationDate, addressModel, - selectedClosedHouseholdID, loading, isHeadOfHousehold, ) => @@ -392,7 +380,6 @@ class SummaryPageState extends LocalizedState { projectBeneficiaryModel, registrationDate, addressModel, - selectedClosedHouseholdID, loading, isHeadOfHousehold, ) => diff --git a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart index 549104966..429d32785 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart @@ -298,24 +298,15 @@ class ViewBeneficiaryCardState extends LocalizedState { : '${householdMember.members?.length ?? 1} ${householdMember.members?.length == 1 ? localizations.translate(i18.beneficiaryDetails.householdMemberSingular) : localizations.translate(i18.beneficiaryDetails.householdMemberPlural)}', status: getStatus( tasks ?? [], - householdMember.projectBeneficiaries!.where((element) { - if (RegistrationDeliverySingleton().beneficiaryType == - BeneficiaryType.individual) { - return element.beneficiaryClientReferenceId == - householdMember - .headOfHousehold?.clientReferenceId; - } else { - return element.beneficiaryClientReferenceId == - householdMember.household?.clientReferenceId; - } - }).toList(), + householdMember.projectBeneficiaries ?? [], RegistrationDeliverySingleton().beneficiaryType == BeneficiaryType.individual ? isNotEligible : false, isBeneficiaryRefused), title: [ - householdMember.headOfHousehold?.name?.givenName, + householdMember.headOfHousehold?.name?.givenName ?? + localizations.translate(i18.common.coreCommonNA), householdMember.headOfHousehold?.name?.familyName, ].whereNotNull().join(''), ), diff --git a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart index aa317a36e..c3b08b7fc 100644 --- a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart +++ b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart @@ -38,9 +38,7 @@ class StatusFilterState extends LocalizedState { options: getFilters() ?? [], allowMultipleSelection: false, equalWidthOptions: true, - initialSelection: [ - ...selectedButtons - ], // [TODO : fix selected not displaying] + initialSelection: [...selectedButtons], onSelectionChanged: (selected) { setState(() { selectedButtons = selected; @@ -62,10 +60,9 @@ class StatusFilterState extends LocalizedState { label: localizations.translate( i18.searchBeneficiary.clearFilter, ), - onPressed: () { + onPressed: selectedButtons.isEmpty ? null : () { setState(() { selectedButtons.clear(); - Navigator.pop(context); }); }), ), @@ -80,8 +77,9 @@ class StatusFilterState extends LocalizedState { ), ), onPressed: () { - Navigator.pop( - context, selectedButtons.map((e) => e.name).toList()); + var selected = + selectedButtons.map((e) => e.name).toList(); + Navigator.pop(context, selected); }), ), ], @@ -102,10 +100,15 @@ class StatusFilterState extends LocalizedState { } getFilters() { - return (RegistrationDeliverySingleton().searchHouseHoldFilter ?? []) + var finalStatues = []; + finalStatues.addAll((RegistrationDeliverySingleton() + .searchHouseHoldFilter ?? + []) .map((e) => Status.values.where((element) => element.toValue() == e)) .expand((element) => element) - .toList(); + .toList()); + + return finalStatues; } void assignSelectedButtons() { @@ -114,8 +117,6 @@ class StatusFilterState extends LocalizedState { .map((e) => Status.values.where((element) => element.name == e)) .expand((element) => element) .toList(); - - }); } } diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 204b9fbcc..c1f90c188 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -297,14 +297,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" - closed_household: - dependency: "direct main" - description: - name: closed_household - sha256: "47d46553b034fceac6acda81e16f10b2d51a93cb509f5d596480a2bb6ff8aea3" - url: "https://pub.dev" - source: hosted - version: "0.0.0-dev.1" code_builder: dependency: transitive description: @@ -428,18 +420,18 @@ packages: dependency: "direct main" description: name: digit_components - sha256: "5c4702cfa2d05aa98756c1ecdae2593ad5cc4254a47341588b3269e004a22525" + sha256: "86ea75e325beb0ff8dff70e8734c9626597b49cc91c5d6fa960274f271dfb1a7" url: "https://pub.dev" source: hosted - version: "1.0.0+7" + version: "1.0.0+8" digit_data_model: dependency: "direct main" description: name: digit_data_model - sha256: "1258b5e96c6f63d32ab042a1d739360c93cab302e2f230b416dc4c54021e5e55" + sha256: c708c6474b7a67e3cdedcbb82265c201e61390360109344ebedfa2cc1ded0440 url: "https://pub.dev" source: hosted - version: "1.0.3-dev.1" + version: "1.0.3-dev.2" digit_scanner: dependency: "direct main" description: diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index 79ea52a50..b1be0df50 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -1,6 +1,6 @@ name: registration_delivery description: This package enables health facility workers to register a household and individual members and deliver the resources. -version: 1.0.3-dev.2 +version: 1.0.3-dev.4 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/registration_delivery repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0+7 + digit_components: ^1.0.0+8 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 @@ -32,7 +32,7 @@ dependencies: digit_scanner: ^1.0.3-dev.1 gs1_barcode_parser: ^1.0.5 auto_route: ^7.8.4 - digit_data_model: ^1.0.3-dev.1 + digit_data_model: ^1.0.3-dev.2 package_info_plus: ^5.0.1 digit_showcase: ^1.0.0 collection: ^1.16.0 @@ -40,8 +40,6 @@ dependencies: stream_transform: ^2.1.0 async: ^2.11.0 formula_parser: ^2.0.1 - closed_household: ^0.0.0-dev.1 - dev_dependencies: flutter_test: diff --git a/packages/registration_delivery/test/beneficiary_registration_test.dart b/packages/registration_delivery/test/beneficiary_registration_test.dart index dbb95127a..b022e8481 100644 --- a/packages/registration_delivery/test/beneficiary_registration_test.dart +++ b/packages/registration_delivery/test/beneficiary_registration_test.dart @@ -23,12 +23,15 @@ class MockHouseholdMemberDataRepository extends Mock class MockProjectBeneficiaryDataRepository extends Mock implements ProjectBeneficiaryDataRepository {} +class MockTaskDataRepository extends Mock implements TaskDataRepository {} + void main() { late MockIndividualDataRepository mockIndividualDataRepository; late MockHouseholdDataRepository mockHouseholdDataRepository; late MockHouseholdMemberDataRepository mockHouseholdMemberDataRepository; late MockProjectBeneficiaryDataRepository mockProjectBeneficiaryDataRepository; + late MockTaskDataRepository mockTaskDataRepository; late BeneficiaryRegistrationBloc beneficiaryRegistrationBloc; setUpAll(() { @@ -48,6 +51,7 @@ void main() { mockHouseholdMemberDataRepository = MockHouseholdMemberDataRepository(); mockProjectBeneficiaryDataRepository = MockProjectBeneficiaryDataRepository(); + mockTaskDataRepository = MockTaskDataRepository(); beneficiaryRegistrationBloc = BeneficiaryRegistrationBloc( const BeneficiaryRegistrationState.create(), individualRepository: mockIndividualDataRepository, @@ -55,6 +59,7 @@ void main() { householdMemberRepository: mockHouseholdMemberDataRepository, projectBeneficiaryRepository: mockProjectBeneficiaryDataRepository, beneficiaryType: BeneficiaryType.individual, + taskDataRepository: mockTaskDataRepository, ); }); From b28be048906c02a44ccc2f4204bea12c392d555b Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Mon, 29 Jul 2024 14:44:32 +0530 Subject: [PATCH 059/241] Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov --- .../lib/data/data_repository.dart | 68 +++++------ .../data/repositories/remote/facility.dart | 109 ++++++++++++++++++ .../repositories/remote/project_facility.dart | 109 ++++++++++++++++++ 3 files changed, 252 insertions(+), 34 deletions(-) diff --git a/packages/digit_data_model/lib/data/data_repository.dart b/packages/digit_data_model/lib/data/data_repository.dart index 5ceac41ae..17b98e2dc 100644 --- a/packages/digit_data_model/lib/data/data_repository.dart +++ b/packages/digit_data_model/lib/data/data_repository.dart @@ -35,7 +35,7 @@ abstract class DataRepository extends DataRepository { +R extends EntitySearchModel> extends DataRepository { final Dio dio; final String entityName; final bool isPlural; @@ -61,19 +61,19 @@ abstract class RemoteRepository actionMap[ApiOperation.bulkDelete] ?? ''; RemoteRepository( - this.dio, { - required this.actionMap, - required this.entityName, - this.isPlural = false, - this.isSearchResponsePlural = false, - }); + this.dio, { + required this.actionMap, + required this.entityName, + this.isPlural = false, + this.isSearchResponsePlural = false, + }); @override FutureOr> search( - R query, { - int? offSet, - int? limit, - }) async { + R query, { + int? offSet, + int? limit, + }) async { Response response; try { @@ -90,15 +90,15 @@ abstract class RemoteRepository> downSync( - R query, { - int? offSet, - int? limit, - }) async { + R query, { + int? offSet, + int? limit, + }) async { Response response; try { @@ -183,7 +183,7 @@ abstract class RemoteRepository dumpError( - List entities, - DataOperation operation, - ) async { + List entities, + DataOperation operation, + ) async { return executeFuture( future: () async { String url = ""; @@ -348,9 +348,9 @@ abstract class RemoteRepository { @@ -11,6 +15,111 @@ class FacilityRemoteRepository extends RemoteRepository> search( + FacilitySearchModel query, { + int? offSet, + int? limit, + }) async { + int defaultBatchSize = limit ?? 100; // Default batch size for fetching data + int currentOffset = offSet ?? 0; + + List allResults = []; + bool hasMoreData = true; + List>? lastResponse; + + while (hasMoreData) { + Response response; + + try { + response = await executeFuture( + future: () async { + return await dio.post( + searchPath, + queryParameters: { + 'offset': currentOffset, + 'limit': defaultBatchSize, + 'tenantId': DigitDataModelSingleton().tenantId, + if (query.isDeleted ?? false) 'includeDeleted': query.isDeleted, + }, + data: entityName == 'User' + ? query.toMap() + : { + isPlural + ? entityNamePlural + : entityName == 'ServiceDefinition' + ? 'ServiceDefinitionCriteria' + : entityName == 'Downsync' + ? 'DownsyncCriteria' + : entityName: + isPlural ? [query.toMap()] : query.toMap(), + }, + ); + }, + ); + } catch (error) { + break; // Break out of the loop if an error occurs + } + + final responseMap = response.data; + + if (responseMap is! Map) { + throw InvalidApiResponseException( + data: query.toMap(), + path: searchPath, + response: responseMap, + ); + } + + String key = (isSearchResponsePlural || entityName == 'ServiceDefinition') + ? entityNamePlural + : entityName; + + if (!responseMap.containsKey(key)) { + throw InvalidApiResponseException( + data: query.toMap(), + path: searchPath, + response: responseMap, + ); + } + + final entityResponse = await responseMap[key]; + + if (entityResponse is! List) { + throw InvalidApiResponseException( + data: query.toMap(), + path: searchPath, + response: responseMap, + ); + } + + final entityList = entityResponse.whereType>().toList(); + + if (lastResponse != null && lastResponse.toString() == entityList.toString()) { + // If the last response is equal to the current response, stop fetching more data + break; + } + + List currentBatch; + + try { + currentBatch = entityList.map((e) => MapperContainer.globals.fromMap(e)).toList(); + } catch (e) { + rethrow; + } + + if (currentBatch.isEmpty) { + hasMoreData = false; // if no more data stop fetching + } else { + allResults.addAll(currentBatch); + currentOffset += defaultBatchSize; + lastResponse = entityList; // Update lastResponse to the current response + } + } + + return allResults; + } + @override DataModelType get type => DataModelType.facility; } diff --git a/packages/digit_data_model/lib/data/repositories/remote/project_facility.dart b/packages/digit_data_model/lib/data/repositories/remote/project_facility.dart index 152204a75..775457f0e 100644 --- a/packages/digit_data_model/lib/data/repositories/remote/project_facility.dart +++ b/packages/digit_data_model/lib/data/repositories/remote/project_facility.dart @@ -1,6 +1,10 @@ // Generated using mason. Do not modify by hand +import 'dart:async'; + +import 'package:dart_mappable/dart_mappable.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:dio/dio.dart'; class ProjectFacilityRemoteRepository extends RemoteRepository { @@ -11,6 +15,111 @@ class ProjectFacilityRemoteRepository super.isSearchResponsePlural = true, }); + @override + FutureOr> search( + ProjectFacilitySearchModel query, { + int? offSet, + int? limit, + }) async { + int defaultBatchSize = limit ?? 100; + int currentOffset = offSet ?? 0; + + List allResults = []; + bool hasMoreData = true; + List>? lastResponse; + + while (hasMoreData) { + Response response; + + try { + response = await executeFuture( + future: () async { + return await dio.post( + searchPath, + queryParameters: { + 'offset': currentOffset, + 'limit': defaultBatchSize, + 'tenantId': DigitDataModelSingleton().tenantId, + if (query.isDeleted ?? false) 'includeDeleted': query.isDeleted, + }, + data: entityName == 'User' + ? query.toMap() + : { + isPlural + ? entityNamePlural + : entityName == 'ServiceDefinition' + ? 'ServiceDefinitionCriteria' + : entityName == 'Downsync' + ? 'DownsyncCriteria' + : entityName: + isPlural ? [query.toMap()] : query.toMap(), + }, + ); + }, + ); + } catch (error) { + break; // Break out of the loop if an error occurs + } + + final responseMap = response.data; + + if (responseMap is! Map) { + throw InvalidApiResponseException( + data: query.toMap(), + path: searchPath, + response: responseMap, + ); + } + + String key = (isSearchResponsePlural || entityName == 'ServiceDefinition') + ? entityNamePlural + : entityName; + + if (!responseMap.containsKey(key)) { + throw InvalidApiResponseException( + data: query.toMap(), + path: searchPath, + response: responseMap, + ); + } + + final entityResponse = await responseMap[key]; + + if (entityResponse is! List) { + throw InvalidApiResponseException( + data: query.toMap(), + path: searchPath, + response: responseMap, + ); + } + + final entityList = entityResponse.whereType>().toList(); + + if (lastResponse != null && lastResponse.toString() == entityList.toString()) { + // If the last response is equal to the current response, stop fetching more data + break; + } + + List currentBatch; + + try { + currentBatch = entityList.map((e) => MapperContainer.globals.fromMap(e)).toList(); + } catch (e) { + rethrow; + } + + if (currentBatch.isEmpty) { + hasMoreData = false; // if no more data stop fetching + } else { + allResults.addAll(currentBatch); + currentOffset += defaultBatchSize; + lastResponse = entityList; // Update lastResponse to the current response + } + } + + return allResults; + } + @override DataModelType get type => DataModelType.projectFacility; } From 2c2e7c3f07d2ce815f575a2c75b6efc06050f3df Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Mon, 29 Jul 2024 14:56:03 +0530 Subject: [PATCH 060/241] localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov --- .../atoms/digit_integer_form_picker.dart | 6 +++++- .../beneficiary/delivery_summary_page.dart | 17 +++++++---------- .../pages/beneficiary/household_overview.dart | 13 ++++++------- .../lib/pages/beneficiary/refused_delivery.dart | 2 +- .../beneficiary_registration/house_details.dart | 1 + .../household_details.dart | 7 ++----- .../household_location.dart | 1 - .../beneficiary/view_beneficiary_card.dart | 8 ++++---- .../lib/widgets/member_card/member_card.dart | 14 ++++++++------ 9 files changed, 34 insertions(+), 35 deletions(-) diff --git a/packages/digit_components/lib/widgets/atoms/digit_integer_form_picker.dart b/packages/digit_components/lib/widgets/atoms/digit_integer_form_picker.dart index d8bae2e05..22bb2ce2d 100644 --- a/packages/digit_components/lib/widgets/atoms/digit_integer_form_picker.dart +++ b/packages/digit_components/lib/widgets/atoms/digit_integer_form_picker.dart @@ -83,7 +83,11 @@ class DigitIntegerFormPicker extends StatelessWidget { top: _borderSide, ), icon: Icons.add, onPressed: () { - form.control(formControlName).value += 1; + if(maximum != null && form.control(formControlName).value == maximum) { + form.control(formControlName).value =maximum; + }else{ + form.control(formControlName).value += 1; + } if (onChange != null) { onChange!(); } diff --git a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart index cbb2b8923..61560a1c1 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart @@ -322,16 +322,13 @@ class DeliverySummaryPageState extends LocalizedState { .typeOfInsecticideUsed), value: deliverState.oldTask?.status == Status.administeredFailed.toValue() - ? deliverState.oldTask?.additionalFields?.fields - .where((d) => - d.key == - AdditionalFieldsType - .reasonOfRefusal - .toValue()) - .firstOrNull - ?.value ?? - localizations.translate( - i18.common.coreCommonNA) + ? getLocalizedMessage( + deliverState.oldTask?.additionalFields?.fields + .where( + (d) => d.key == AdditionalFieldsType.reasonOfRefusal.toValue(), + ) + .firstOrNull + ?.value ?? i18.common.coreCommonNA) : variants ?.map((e) => localizations.translate(e.sku ?? diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index e4e3d294d..79894d5e1 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -88,7 +88,7 @@ class _HouseholdOverviewPageState onPressed: (state.householdMemberWrapper .projectBeneficiaries ?? []) - .isEmpty + .isEmpty || deliverInterventionState.tasks?.last.status == Status.closeHousehold.toValue() ? null : () async { final bloc = @@ -284,7 +284,8 @@ class _HouseholdOverviewPageState .householdMemberWrapper .headOfHousehold ?.name - ?.givenName, + ?.givenName ?? localizations.translate( + i18.common.coreCommonNA), localizations.translate( i18.householdLocation .administrationAreaFormLabel, @@ -643,7 +644,7 @@ class _HouseholdOverviewPageState sideEffectData, ) : false, - name: e.name?.givenName ?? ' - ', + name: e.name?.givenName ?? ' - - ', years: (e.dateOfBirth == null ? null : DigitDateUtils.calculateAge( @@ -652,8 +653,7 @@ class _HouseholdOverviewPageState e.dateOfBirth!, ) ?? DateTime.now(), - ).years) ?? - 0, + ).years), months: (e.dateOfBirth == null ? null : DigitDateUtils.calculateAge( @@ -662,8 +662,7 @@ class _HouseholdOverviewPageState e.dateOfBirth!, ) ?? DateTime.now(), - ).months) ?? - 0, + ).months), gender: e.gender?.name, isBeneficiaryRefused: isBeneficiaryRefused && diff --git a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart index 43cfc20d8..a3edf3cee 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart @@ -222,7 +222,7 @@ class RefusedDeliveryPageState extends LocalizedState { ), isRequired: true, child: SelectionBox( - width: 122, + width: 128, allowMultipleSelection: false, options: RegistrationDeliverySingleton() .refusalReasons ?? diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart index fcf2d83f9..103c074ce 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart @@ -287,6 +287,7 @@ class HouseDetailsPageState extends LocalizedState { houseShowcaseData.noOfRooms.buildWith( child: DigitIntegerFormPicker( minimum: 1, + maximum: 20, form: form, formControlName: _noOfRoomsKey, label: localizations.translate( diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart index 7b28e1140..bc47d1fbd 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart @@ -382,7 +382,7 @@ class HouseHoldDetailsPageState extends LocalizedState { .buildWith( child: DigitIntegerFormPicker( minimum: 0, - maximum: 20, + maximum: 10, onChange: () { int pregnantWomen = form .control(_pregnantWomenCountKey) @@ -440,7 +440,7 @@ class HouseHoldDetailsPageState extends LocalizedState { minimum: children + pregnantWomen != 0 ? children + pregnantWomen : 1, - maximum: 20, + maximum: 30, onChange: () { int pregnantWomen = form .control(_pregnantWomenCountKey) @@ -496,7 +496,6 @@ class HouseHoldDetailsPageState extends LocalizedState { FormControl(value: registrationDate, validators: []), _memberCountKey: FormControl( value: household?.memberCount ?? 1, - validators: [Validators.max(20)], ), _pregnantWomenCountKey: FormControl( value: household?.additionalFields?.fields @@ -513,7 +512,6 @@ class HouseHoldDetailsPageState extends LocalizedState { .toString() ?? '0') : 0, - validators: [Validators.max(20)], ), _childrenCountKey: FormControl( value: household?.additionalFields?.fields @@ -530,7 +528,6 @@ class HouseHoldDetailsPageState extends LocalizedState { .toString() ?? '0') : 0, - validators: [Validators.max(20)], ) }); } diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index fc05fbc45..9c8e1ba18 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -286,7 +286,6 @@ class HouseholdLocationPageState extends LocalizedState { .administrationAreaFormLabel, ), readOnly: true, - isRequired: true, validationMessages: { 'required': (_) => localizations.translate( i18.householdLocation diff --git a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart index 429d32785..ff1d1b7e2 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart @@ -166,8 +166,8 @@ class ViewBeneficiaryCardState extends LocalizedState { final rowTableData = [ TableData( [ - e.name?.givenName, - e.name?.familyName, + e.name?.givenName ?? '--', + e.name?.familyName ?? '--', ].whereNotNull().join('-'), cellKey: 'beneficiary', ), @@ -195,7 +195,7 @@ class ViewBeneficiaryCardState extends LocalizedState { ), TableData( e.dateOfBirth == null - ? '' + ? '--' : '${DigitDateUtils.calculateAge( DigitDateUtils.getFormattedDateToDateTime( e.dateOfBirth!, @@ -210,7 +210,7 @@ class ViewBeneficiaryCardState extends LocalizedState { cellKey: 'age', ), TableData( - e.gender?.name ?? '--', + e.gender?.name == null ? '--' : localizations.translate('CORE_COMMON_${ e.gender?.name.toUpperCase()}'), cellKey: 'gender', ), ]; diff --git a/packages/registration_delivery/lib/widgets/member_card/member_card.dart b/packages/registration_delivery/lib/widgets/member_card/member_card.dart index d7a6ed604..8549c7cfe 100644 --- a/packages/registration_delivery/lib/widgets/member_card/member_card.dart +++ b/packages/registration_delivery/lib/widgets/member_card/member_card.dart @@ -20,8 +20,8 @@ import '../action_card/action_card.dart'; class MemberCard extends StatelessWidget { final String name; final String? gender; - final int years; - final int months; + final int? years; + final int? months; final bool isHead; final IndividualModel individual; final List? projectBeneficiaries; @@ -43,9 +43,9 @@ class MemberCard extends StatelessWidget { required this.individual, required this.name, this.gender, - required this.years, + this.years, this.isHead = false, - this.months = 0, + this.months, required this.localizations, required this.isDelivered, required this.setAsHeadAction, @@ -156,13 +156,15 @@ class MemberCard extends StatelessWidget { gender != null ? localizations .translate('CORE_COMMON_${gender?.toUpperCase()}') - : ' - ', + : ' -- ', style: theme.textTheme.bodyMedium, ), ), Expanded( child: Text( - " | $years ${localizations.translate(i18.memberCard.deliverDetailsYearText)} $months ${localizations.translate(i18.memberCard.deliverDetailsMonthsText)}", + years!=null && months != null ? + " | $years ${localizations.translate(i18.memberCard.deliverDetailsYearText)} $months ${localizations.translate(i18.memberCard.deliverDetailsMonthsText)}" + : "| --" , style: theme.textTheme.bodyMedium, ), ), From 0cce089cfc4223c6c03fa808c9d35e932837021e Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Fri, 2 Aug 2024 11:23:52 +0530 Subject: [PATCH 061/241] Hcmpre 164, 165 - Count implementation for filter search (#485) * Update closed_household_details.dart (#482) * Fixed pagination refresh issue (#481) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments --------- Co-authored-by: rachana-egov * implemented count for filter search, added todo for combination search count * Fixed count TODO: search with task status filter * Fixed search with task status filter Removed delay in delivery_summary_page.dart * added code comments * HCMPRE-165 issues (#484) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments * HCMPRE-162:: Reload issue fix for closed household and not registered * HCMPRE-165: issues fixes * updated reasons for refusals --------- Co-authored-by: rachana-egov Co-authored-by: Ramkrishna-egov * Updated publock * Added a check to avoid multiple leftJoin for projectBeneficiary - fix for multiple left join error * Resolved code comments --------- Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: rachana-egov Co-authored-by: Ramkrishna-egov --- .../lib/pages/home.dart | 10 +- .../pubspec.lock | 23 +- .../lib/blocs/closed_household.dart | 2 +- .../lib/pages/closed_household_details.dart | 2 +- .../atoms/digit_reactive_search_dropdown.dart | 2 +- packages/inventory_management/pubspec.lock | 20 +- .../beneficiary_registration.dart | 11 + .../household_global_seach.dart | 37 +-- .../search_households/search_households.dart | 1 + .../search_households.freezed.dart | 57 +++-- .../local/household_global_search.dart | 218 +++++++++++------- .../beneficiary/delivery_summary_page.dart | 87 +++---- .../pages/beneficiary/household_overview.dart | 128 +++------- .../pages/beneficiary/refused_delivery.dart | 14 +- .../widgets/household_acknowledgement.dart | 2 + .../lib/pages/search_beneficiary.dart | 81 ++----- .../lib/utils/constants.dart | 2 +- .../lib/utils/global_search_parameters.dart | 2 + .../beneficiary/view_beneficiary_card.dart | 4 +- packages/registration_delivery/pubspec.lock | 7 +- 20 files changed, 354 insertions(+), 356 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/pages/home.dart b/apps/health_campaign_field_worker_app/lib/pages/home.dart index 1a63d9199..8ff93934c 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/home.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/home.dart @@ -519,18 +519,12 @@ class _HomePageState extends LocalizedState { .map((e) => e.displayName) .toList() .contains(element) || - element == i18.home.db || - element == - i18.home - .closedHouseHoldLabel) // TODO: need to add close household inside mdms + element == i18.home.db ) .toList(); final showcaseKeys = filteredLabels .where((f) => - f != i18.home.db && - f != - i18.home - .closedHouseHoldLabel) // TODO: need to add close household inside mdms + f != i18.home.db ) .map((label) => homeItemsShowcaseMap[label]!) .toList(); diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 94eef8c0c..ed63d35d4 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -340,10 +340,9 @@ packages: closed_household: dependency: "direct main" description: - name: closed_household - sha256: b78799c4edb0181594cb1908ebdb2bbb2583865515a36e06979e19ea246e9ee0 - url: "https://pub.dev" - source: hosted + path: "../../packages/closed_household" + relative: true + source: path version: "0.0.0-dev.2" code_builder: dependency: transitive @@ -491,10 +490,9 @@ packages: digit_components: dependency: "direct main" description: - name: digit_components - sha256: "86ea75e325beb0ff8dff70e8734c9626597b49cc91c5d6fa960274f271dfb1a7" - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_components" + relative: true + source: path version: "1.0.0+8" digit_data_model: dependency: "direct main" @@ -1533,11 +1531,10 @@ packages: registration_delivery: dependency: "direct main" description: - name: registration_delivery - sha256: "49ca0b0c85de74a3ce7acdae92cf23a18138a1285d9d399a3b2c1025d9d3f327" - url: "https://pub.dev" - source: hosted - version: "1.0.3-dev.3" + path: "../../packages/registration_delivery" + relative: true + source: path + version: "1.0.3-dev.4" remove_emoji_input_formatter: dependency: transitive description: diff --git a/packages/closed_household/lib/blocs/closed_household.dart b/packages/closed_household/lib/blocs/closed_household.dart index dc565cc1d..ef5fc8c2c 100644 --- a/packages/closed_household/lib/blocs/closed_household.dart +++ b/packages/closed_household/lib/blocs/closed_household.dart @@ -84,7 +84,7 @@ class ClosedHouseholdBloc var household = HouseholdModel( clientReferenceId: IdGen.i.identifier, address: address, - memberCount: 0, + memberCount: 1, rowVersion: 1, tenantId: ClosedHouseholdSingleton().tenantId.toString(), longitude: event.longitude, diff --git a/packages/closed_household/lib/pages/closed_household_details.dart b/packages/closed_household/lib/pages/closed_household_details.dart index 5ba4e9b88..e13dd7900 100644 --- a/packages/closed_household/lib/pages/closed_household_details.dart +++ b/packages/closed_household/lib/pages/closed_household_details.dart @@ -113,7 +113,7 @@ class ClosedHouseholdDetailsPageState longitude: locationState.longitude!, locationAccuracy: locationState.accuracy!, householdHeadName: householdHeadName != null && - householdHeadName.isNotEmpty + householdHeadName.trim().isNotEmpty ? householdHeadName : null, ), diff --git a/packages/digit_components/lib/widgets/atoms/digit_reactive_search_dropdown.dart b/packages/digit_components/lib/widgets/atoms/digit_reactive_search_dropdown.dart index edf83a84d..e433d0534 100644 --- a/packages/digit_components/lib/widgets/atoms/digit_reactive_search_dropdown.dart +++ b/packages/digit_components/lib/widgets/atoms/digit_reactive_search_dropdown.dart @@ -67,7 +67,7 @@ class _DigitReactiveSearchDropdownState displayItemFn: (dynamic str) => Text( str != null ? widget.valueMapper(str) : '', style: TextStyle( - fontSize: 14, + fontSize: 16, color: !widget.enabled ? const DigitColors().hintGrey : const DigitColors().woodsmokeBlack), diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index 3ff89e852..30fdc864a 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -419,11 +419,10 @@ packages: digit_components: dependency: "direct main" description: - name: digit_components - sha256: c9fb77852995d45d26e7bec9c945002f33c99d1399cfe30696a925d3ed3ae57d - url: "https://pub.dev" - source: hosted - version: "1.0.0+5" + path: "../digit_components" + relative: true + source: path + version: "1.0.0+8" digit_data_model: dependency: "direct main" description: @@ -435,11 +434,10 @@ packages: digit_scanner: dependency: "direct main" description: - name: digit_scanner - sha256: a040c9c413436aeb953fdea3bc99ef618641189b06e8f155d84ac83ba8d40fd1 - url: "https://pub.dev" - source: hosted - version: "1.0.2" + path: "../digit_scanner" + relative: true + source: path + version: "1.0.3-dev.1" dio: dependency: transitive description: @@ -1445,5 +1443,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" + dart: ">=3.2.0 <4.0.0" flutter: ">=3.16.0" diff --git a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart index 7360b0f7b..62480673c 100644 --- a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart +++ b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart @@ -547,6 +547,17 @@ class BeneficiaryRegistrationBloc await projectBeneficiaryRepository .update(projectBeneficiary.first.copyWith(tag: event.tag)); } + var task = await taskDataRepository.search(TaskSearchModel( + projectBeneficiaryClientReferenceId: + projectBeneficiary.map((e) => e.clientReferenceId).toList(), + )); + + if (task.isNotEmpty) { + if (task.last.status == Status.closeHousehold.toValue()) { + await taskDataRepository.update( + task.last.copyWith(status: Status.notDelivered.toValue())); + } + } } } catch (error) { rethrow; diff --git a/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart b/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart index 0b1d93d48..d88e88aba 100644 --- a/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart +++ b/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart @@ -49,18 +49,19 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { final results = await houseHoldGlobalSearchRepository.houseHoldGlobalSearch( GlobalSearchParameters( - isProximityEnabled: event.globalSearchParams.isProximityEnabled, - latitude: event.globalSearchParams.latitude, - longitude: event.globalSearchParams.longitude, - maxRadius: event.globalSearchParams.maxRadius, - nameSearch: event.globalSearchParams.nameSearch, - filter: event.globalSearchParams.filter, - offset: event.globalSearchParams.offset, - limit: event.globalSearchParams.limit, - ), + isProximityEnabled: event.globalSearchParams.isProximityEnabled, + latitude: event.globalSearchParams.latitude, + longitude: event.globalSearchParams.longitude, + maxRadius: event.globalSearchParams.maxRadius, + nameSearch: event.globalSearchParams.nameSearch, + filter: event.globalSearchParams.filter, + offset: event.globalSearchParams.offset, + limit: event.globalSearchParams.limit, + totalCount: state.totalResults), ); - var finalResults = results.map((e) => e).toList(); + var totalCount = results['total_count']; + var finalResults = results['data'].map((e) => e).toList(); if (event.globalSearchParams.filter!.contains(Status.registered.name) || event.globalSearchParams.filter!.contains(Status.notRegistered.name)) { @@ -119,6 +120,7 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { offset: event.globalSearchParams.offset! + event.globalSearchParams.limit!, limit: event.globalSearchParams.limit!, + totalResults: totalCount, )); } else if (event.globalSearchParams.filter!.isNotEmpty && event.globalSearchParams.filter != null) { @@ -192,6 +194,7 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { offset: event.globalSearchParams.offset! + event.globalSearchParams.limit!, limit: event.globalSearchParams.limit!, + totalResults: totalCount, )); } else { late List houseHoldClientReferenceIds = []; @@ -243,13 +246,13 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { ); emit(state.copyWith( - householdMembers: containers, - loading: false, - searchQuery: event.globalSearchParams.nameSearch, - offset: - event.globalSearchParams.offset! + event.globalSearchParams.limit!, - limit: event.globalSearchParams.limit!, - )); + householdMembers: containers, + loading: false, + searchQuery: event.globalSearchParams.nameSearch, + offset: event.globalSearchParams.offset! + + event.globalSearchParams.limit!, + limit: event.globalSearchParams.limit!, + totalResults: totalCount)); } } diff --git a/packages/registration_delivery/lib/blocs/search_households/search_households.dart b/packages/registration_delivery/lib/blocs/search_households/search_households.dart index 0629ed00a..ed259aa84 100644 --- a/packages/registration_delivery/lib/blocs/search_households/search_households.dart +++ b/packages/registration_delivery/lib/blocs/search_households/search_households.dart @@ -285,6 +285,7 @@ class SearchHouseholdsState with _$SearchHouseholdsState { String? searchQuery, String? tag, @Default([]) List householdMembers, + @Default(0) int totalResults, }) = _SearchHouseholdsState; bool get resultsNotFound { diff --git a/packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart b/packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart index 20d36757b..a6503ca8b 100644 --- a/packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart +++ b/packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart @@ -2409,6 +2409,7 @@ mixin _$SearchHouseholdsState { String? get tag => throw _privateConstructorUsedError; List get householdMembers => throw _privateConstructorUsedError; + int get totalResults => throw _privateConstructorUsedError; @JsonKey(ignore: true) $SearchHouseholdsStateCopyWith get copyWith => @@ -2427,7 +2428,8 @@ abstract class $SearchHouseholdsStateCopyWith<$Res> { bool loading, String? searchQuery, String? tag, - List householdMembers}); + List householdMembers, + int totalResults}); } /// @nodoc @@ -2450,6 +2452,7 @@ class _$SearchHouseholdsStateCopyWithImpl<$Res, Object? searchQuery = freezed, Object? tag = freezed, Object? householdMembers = null, + Object? totalResults = null, }) { return _then(_value.copyWith( offset: null == offset @@ -2476,6 +2479,10 @@ class _$SearchHouseholdsStateCopyWithImpl<$Res, ? _value.householdMembers : householdMembers // ignore: cast_nullable_to_non_nullable as List, + totalResults: null == totalResults + ? _value.totalResults + : totalResults // ignore: cast_nullable_to_non_nullable + as int, ) as $Val); } } @@ -2495,7 +2502,8 @@ abstract class _$$SearchHouseholdsStateImplCopyWith<$Res> bool loading, String? searchQuery, String? tag, - List householdMembers}); + List householdMembers, + int totalResults}); } /// @nodoc @@ -2516,6 +2524,7 @@ class __$$SearchHouseholdsStateImplCopyWithImpl<$Res> Object? searchQuery = freezed, Object? tag = freezed, Object? householdMembers = null, + Object? totalResults = null, }) { return _then(_$SearchHouseholdsStateImpl( offset: null == offset @@ -2542,6 +2551,10 @@ class __$$SearchHouseholdsStateImplCopyWithImpl<$Res> ? _value._householdMembers : householdMembers // ignore: cast_nullable_to_non_nullable as List, + totalResults: null == totalResults + ? _value.totalResults + : totalResults // ignore: cast_nullable_to_non_nullable + as int, )); } } @@ -2555,7 +2568,8 @@ class _$SearchHouseholdsStateImpl extends _SearchHouseholdsState { this.loading = false, this.searchQuery, this.tag, - final List householdMembers = const []}) + final List householdMembers = const [], + this.totalResults = 0}) : _householdMembers = householdMembers, super._(); @@ -2582,9 +2596,13 @@ class _$SearchHouseholdsStateImpl extends _SearchHouseholdsState { return EqualUnmodifiableListView(_householdMembers); } + @override + @JsonKey() + final int totalResults; + @override String toString() { - return 'SearchHouseholdsState(offset: $offset, limit: $limit, loading: $loading, searchQuery: $searchQuery, tag: $tag, householdMembers: $householdMembers)'; + return 'SearchHouseholdsState(offset: $offset, limit: $limit, loading: $loading, searchQuery: $searchQuery, tag: $tag, householdMembers: $householdMembers, totalResults: $totalResults)'; } @override @@ -2599,12 +2617,21 @@ class _$SearchHouseholdsStateImpl extends _SearchHouseholdsState { other.searchQuery == searchQuery) && (identical(other.tag, tag) || other.tag == tag) && const DeepCollectionEquality() - .equals(other._householdMembers, _householdMembers)); + .equals(other._householdMembers, _householdMembers) && + (identical(other.totalResults, totalResults) || + other.totalResults == totalResults)); } @override - int get hashCode => Object.hash(runtimeType, offset, limit, loading, - searchQuery, tag, const DeepCollectionEquality().hash(_householdMembers)); + int get hashCode => Object.hash( + runtimeType, + offset, + limit, + loading, + searchQuery, + tag, + const DeepCollectionEquality().hash(_householdMembers), + totalResults); @JsonKey(ignore: true) @override @@ -2616,13 +2643,13 @@ class _$SearchHouseholdsStateImpl extends _SearchHouseholdsState { abstract class _SearchHouseholdsState extends SearchHouseholdsState { const factory _SearchHouseholdsState( - {final int offset, - final int limit, - final bool loading, - final String? searchQuery, - final String? tag, - final List householdMembers}) = - _$SearchHouseholdsStateImpl; + {final int offset, + final int limit, + final bool loading, + final String? searchQuery, + final String? tag, + final List householdMembers, + final int totalResults}) = _$SearchHouseholdsStateImpl; const _SearchHouseholdsState._() : super._(); @override @@ -2638,6 +2665,8 @@ abstract class _SearchHouseholdsState extends SearchHouseholdsState { @override List get householdMembers; @override + int get totalResults; + @override @JsonKey(ignore: true) _$$SearchHouseholdsStateImplCopyWith<_$SearchHouseholdsStateImpl> get copyWith => throw _privateConstructorUsedError; diff --git a/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart b/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart index 68f9e7da5..28569fbef 100644 --- a/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart +++ b/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:math' as math; import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; +import 'package:flutter/material.dart'; import 'package:registration_delivery/models/entities/task.dart'; import '../../../models/entities/household.dart'; @@ -20,11 +21,14 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { @override DataModelType get type => throw UnimplementedError(); + // Function to perform global search for households houseHoldGlobalSearch(GlobalSearchParameters params) async { + dynamic selectQuery; + late int? count = params.totalCount == 0 ? 0 : params.totalCount; + + // Check if the filter contains status for registered or not registered if (params.filter!.contains(Status.registered.name) || params.filter!.contains(Status.notRegistered.name)) { - dynamic selectQuery; - var proximitySelectQuery = await proximitySearch(selectQuery, params, super.sql); @@ -33,6 +37,7 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { var filterSelectQuery = nameSelectQuery; + // Apply filters if present if (params.filter != null && params.filter!.isNotEmpty) { for (var filter in params.filter!) { filterSelectQuery = @@ -42,19 +47,25 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { filterSelectQuery = nameSelectQuery; } + // Return empty list if no results found if (filterSelectQuery == null) { return []; } else { + // Get total count if offset is zero and filters are applied + if (params.offset == 0 && + params.filter != null && + params.filter!.isNotEmpty) { + count = await _getTotalCount(filterSelectQuery, params, super.sql); + } + await filterSelectQuery.limit(params.limit ?? 50, offset: params.offset ?? 0); final results = await filterSelectQuery.get(); - return _returnHouseHoldModel(results); + return _returnHouseHoldModel(results, count); } } else if (params.filter!.isNotEmpty && params.filter != null) { - dynamic selectQuery; - var proximitySelectQuery = await proximitySearch(selectQuery, params, super.sql); @@ -63,6 +74,7 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { var filterSelectQuery = nameSelectQuery; + // Apply filters if present if (params.filter != null && params.filter!.isNotEmpty) { for (var filter in params.filter!) { filterSelectQuery = @@ -72,17 +84,22 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { filterSelectQuery = nameSelectQuery; } + // Return empty list if no results found if (filterSelectQuery == null) { return []; } else { + if (params.offset == 0 && + params.filter != null && + params.filter!.isNotEmpty) { + count = await _getTotalCount(filterSelectQuery, params, super.sql); + } await filterSelectQuery.limit(params.limit ?? 50, offset: params.offset ?? 0); final results = await filterSelectQuery.get(); - - return results + var data = results .map((e) { - final task = e.readTable(sql.task); + final task = e.readTableOrNull(sql.task); final resources = e.readTableOrNull(sql.taskResource); return TaskModel( @@ -117,29 +134,37 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { }) .where((element) => element.isDeleted != true) .toList(); + + return {"data": data, "total_count": count}; } } else { - dynamic selectQuery; - var proximitySelectQuery = await proximitySearch(selectQuery, params, super.sql); var nameSelectQuery = await nameSearch(proximitySelectQuery, params, super.sql); + // Return empty list if no results found if (nameSelectQuery == null) { return []; } else { + // Get total count if offset is zero and filters are applied + if (params.offset == 0 && + params.filter != null && + params.filter!.isNotEmpty) { + count = await _getTotalCount(nameSelectQuery, params, super.sql); + } await nameSelectQuery.limit(params.limit ?? 50, offset: params.offset ?? 0); final results = await nameSelectQuery.get(); - return _returnHouseHoldModel(results); + return _returnHouseHoldModel(results, count); } } } + // Function to perform proximity search based on provided parameters proximitySearch( selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) { if (!params.isProximityEnabled) { @@ -147,12 +172,44 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { } else if (params.isProximityEnabled) { selectQuery = super.sql.address.select().join([ joinHouseHoldAddress(sql), - ]); - performProximitySearch(selectQuery, params, sql); + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(sql.household.clientReferenceId)) + ]) + ..where(buildAnd([ + sql.address.relatedClientReferenceId.isNotNull(), + sql.household.clientReferenceId.isNotNull(), + CustomExpression(''' + (6371393 * acos( + cos(${params.latitude! * math.pi / 180.0}) * cos((address.latitude * ${math.pi / 180.0})) + * cos((address.longitude * ${math.pi / 180.0}) - ${params.longitude! * math.pi / 180.0}) + + sin(${params.latitude! * math.pi / 180.0}) * sin((address.latitude * ${math.pi / 180.0})) + )) <= ${params.maxRadius!} + '''), + sql.address.longitude.isNotNull(), + sql.address.latitude.isNotNull(), + ])) + ..orderBy([ + if (params.latitude != null && + params.longitude != null && + params.maxRadius != null) + OrderingTerm( + expression: CustomExpression(''' + (6371393 * acos( + cos(${params.latitude! * math.pi / 180.0}) * cos((address.latitude * ${math.pi / 180.0})) + * cos((address.longitude * ${math.pi / 180.0}) - ${params.longitude! * math.pi / 180.0}) + + sin(${params.latitude! * math.pi / 180.0}) * sin((address.latitude * ${math.pi / 180.0})) + )) + '''), + mode: OrderingMode.asc, + ), + ]); return selectQuery; } } + // Function to perform name search based on provided parameters nameSearch( selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) async { if (params.nameSearch == null || params.nameSearch!.isEmpty) { @@ -176,7 +233,11 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { leftOuterJoin( sql.household, sql.household.clientReferenceId - .equalsExp(sql.householdMember.householdClientReferenceId)) + .equalsExp(sql.householdMember.householdClientReferenceId)), + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(sql.household.clientReferenceId)) ]); } else if (params.nameSearch != null && params.nameSearch!.isNotEmpty && @@ -189,55 +250,12 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { return selectQuery; } - performProximitySearch( - selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) { - return (selectQuery - ..where(buildAnd([ - sql.address.relatedClientReferenceId.isNotNull(), - sql.household.clientReferenceId.isNotNull(), - if (params.latitude != null && - params.longitude != null && - params.maxRadius != null) - CustomExpression(''' - (6371393 * acos( - cos(${params.latitude! * math.pi / 180.0}) * cos((address.latitude * ${math.pi / 180.0})) - * cos((address.longitude * ${math.pi / 180.0}) - ${params.longitude! * math.pi / 180.0}) - + sin(${params.latitude! * math.pi / 180.0}) * sin((address.latitude * ${math.pi / 180.0})) - )) <= ${params.maxRadius!} - '''), - if (params.latitude != null && - params.longitude != null && - params.maxRadius != null) - sql.address.longitude.isNotNull(), - sql.address.latitude.isNotNull(), - ]))) - .orderBy([ - if (params.latitude != null && - params.longitude != null && - params.maxRadius != null) - OrderingTerm( - expression: CustomExpression(''' - (6371393 * acos( - cos(${params.latitude! * math.pi / 180.0}) * cos((address.latitude * ${math.pi / 180.0})) - * cos((address.longitude * ${math.pi / 180.0}) - ${params.longitude! * math.pi / 180.0}) - + sin(${params.latitude! * math.pi / 180.0}) * sin((address.latitude * ${math.pi / 180.0})) - )) - '''), - mode: OrderingMode.asc, - ), - ]); - } - + // Function to search by name based on provided parameters searchByName( selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) { - return selectQuery.where(buildAnd([ - if (params.nameSearch != null) - buildOr([ - sql.name.givenName.contains( - params.nameSearch!, - ), - ]), - ])); + return selectQuery.where(sql.name.givenName.contains( + params.nameSearch!, + )); } filterSearch(selectQuery, GlobalSearchParameters params, String filter, @@ -246,11 +264,12 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { if (selectQuery == null) { if (filter == Status.registered.name || filter == Status.notRegistered.name) { - selectQuery = super.sql.household.select().join([ - leftOuterJoin( - sql.projectBeneficiary, - sql.projectBeneficiary.beneficiaryClientReferenceId - .equalsExp(super.sql.household.clientReferenceId)) + selectQuery = sql.household.select().join([ + if (params.nameSearch == null || !params.isProximityEnabled) + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(sql.household.clientReferenceId)) ]) ..where(filter == Status.registered.name ? sql.projectBeneficiary.beneficiaryClientReferenceId.isNotNull() @@ -264,20 +283,17 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { if (filter == Status.registered.name || filter == Status.notRegistered.name) { selectQuery = selectQuery.join([ - leftOuterJoin( - sql.projectBeneficiary, - filter == Status.registered.name - ? sql.projectBeneficiary.beneficiaryClientReferenceId - .equalsExp(super.sql.household.clientReferenceId) - : sql.projectBeneficiary.beneficiaryClientReferenceId - .equalsExp(super.sql.household.clientReferenceId)) + if (params.nameSearch == null && !params.isProximityEnabled) + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(sql.household.clientReferenceId)) ]) ..where(filter == Status.registered.name ? sql.projectBeneficiary.beneficiaryClientReferenceId.isNotNull() : sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); } else { var filterSearchQuery = await filterTasks(selectQuery, filter, sql); - selectQuery = filterSearchQuery; } } @@ -299,11 +315,20 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { Status.closeHousehold.name: Status.closeHousehold, }; var applyFilter = filter; - selectQuery = sql.select(sql.task).join([]); - - selectQuery.where(sql.task.status.equals( - statusMap[applyFilter]!.toValue(), - )); + if (selectQuery == null) { + selectQuery = sql.select(sql.task).join([]) + ..where(sql.task.status.equals( + statusMap[applyFilter]!.toValue(), + )); + } else { + selectQuery = selectQuery.join([ + leftOuterJoin( + sql.task, + sql.task.projectBeneficiaryClientReferenceId + .equalsExp(sql.projectBeneficiary.clientReferenceId)) + ]) + ..where(sql.task.status.equals(statusMap[filter]!.toValue())); + } return selectQuery; } @@ -344,13 +369,8 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { ); } - joinProjectBeneficiary(LocalSqlDataStore sql) { - return leftOuterJoin(sql.projectBeneficiary, - sql.projectBeneficiary.clientReferenceId.isNotNull()); - } - - _returnHouseHoldModel(results) { - return results + _returnHouseHoldModel(results, totalCount) { + var data = results .map((e) { final household = e.readTable(sql.household); final address = e.readTableOrNull(sql.address); @@ -431,5 +451,31 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { }) .where((element) => element.isDeleted != true) .toList(); + + return {'total_count': totalCount, 'data': data}; + } + + // Executing custom select query on top of filterSelectQuery to get count + _getTotalCount(filterSelectQuery, GlobalSearchParameters params, + LocalSqlDataStore sql) async { + JoinedSelectStatement selectQuery = filterSelectQuery; + var query = + selectQuery.constructQuery().buffer.toString().replaceAll(';', ''); + var variables = selectQuery.constructQuery().introducedVariables; + var indexesLength = selectQuery.constructQuery().variableIndices; + + var totalCount; + + try { + totalCount = await sql + .customSelect('SELECT COUNT(*) AS total_count FROM ($query)', + variables: indexesLength.isNotEmpty + ? variables.map((e) => Variable(e.value)).toList() + : []) + .get(); + } catch (e) { + debugPrint('error in total $e'); + } + return totalCount == null ? 0 : totalCount.first.data['total_count']; } } diff --git a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart index 61560a1c1..d2c543629 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart @@ -134,30 +134,20 @@ class DeliverySummaryPageState extends LocalizedState { final reloadState = context.read(); - Future.delayed( - const Duration( - milliseconds: 1000, + reloadState.add( + HouseholdOverviewReloadEvent( + projectId: + RegistrationDeliverySingleton() + .projectId!, + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType!, + ), + ); + context.router.popAndPush( + HouseholdAcknowledgementRoute( + enableViewHousehold: true, ), - () { - reloadState.add( - HouseholdOverviewReloadEvent( - projectId: - RegistrationDeliverySingleton() - .projectId!, - projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, - ), - ); - }, - ).then( - (value) { - context.router.popAndPush( - HouseholdAcknowledgementRoute( - enableViewHousehold: true, - ), - ); - }, ); } } @@ -313,31 +303,44 @@ class DeliverySummaryPageState extends LocalizedState { withDivider: true, items: [ LabelValuePair( - label: localizations.translate(deliverState - .oldTask?.status == - Status.administeredFailed.toValue() - ? i18.deliverIntervention - .reasonForRefusalLabel - : i18.deliverIntervention - .typeOfInsecticideUsed), + label: localizations.translate( + deliverState.oldTask?.status == + Status.administeredFailed + .toValue() || + deliverState.oldTask?.status == + Status.beneficiaryRefused + .toValue() + ? i18.deliverIntervention + .reasonForRefusalLabel + : i18.deliverIntervention + .typeOfInsecticideUsed), value: deliverState.oldTask?.status == - Status.administeredFailed.toValue() - ? getLocalizedMessage( - deliverState.oldTask?.additionalFields?.fields - .where( - (d) => d.key == AdditionalFieldsType.reasonOfRefusal.toValue(), - ) - .firstOrNull - ?.value ?? i18.common.coreCommonNA) + Status.administeredFailed + .toValue() || + deliverState.oldTask?.status == + Status.beneficiaryRefused + .toValue() + ? getLocalizedMessage(deliverState + .oldTask?.additionalFields?.fields + .where( + (d) => + d.key == + AdditionalFieldsType + .reasonOfRefusal + .toValue(), + ) + .firstOrNull + ?.value ?? + i18.common.coreCommonNA) : variants - ?.map((e) => - localizations.translate(e.sku ?? + ?.map((e) => localizations + .translate(e.sku ?? e.variation.toString())) .toList() .join(', ') .toString() ?? - localizations - .translate(i18.common.coreCommonNA), + localizations.translate( + i18.common.coreCommonNA), ), ]), ); diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index 79894d5e1..3840c66ff 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -75,15 +75,18 @@ class _HouseholdOverviewPageState kPadding, 0, kPadding, 0), child: deliverInterventionState.tasks?.last.status == Status.administeredSuccess.toValue() - ? DigitOutLineButton( - label: localizations.translate( - i18.memberCard.deliverDetailsUpdateLabel, + ? Padding( + padding: const EdgeInsets.symmetric(vertical: kPadding), + child: DigitOutLineButton( + label: localizations.translate( + i18.memberCard.deliverDetailsUpdateLabel, + ), + onPressed: () async { + await context.router + .push(BeneficiaryChecklistRoute()); + }, ), - onPressed: () async { - await context.router - .push(BeneficiaryChecklistRoute()); - }, - ) + ) : DigitElevatedButton( onPressed: (state.householdMemberWrapper .projectBeneficiaries ?? @@ -281,11 +284,12 @@ class _HouseholdOverviewPageState .householdOverView .householdOverViewHouseholdHeadNameLabel): state - .householdMemberWrapper - .headOfHousehold - ?.name - ?.givenName ?? localizations.translate( - i18.common.coreCommonNA), + .householdMemberWrapper + .headOfHousehold + ?.name + ?.givenName ?? + localizations.translate( + i18.common.coreCommonNA), localizations.translate( i18.householdLocation .administrationAreaFormLabel, @@ -306,72 +310,6 @@ class _HouseholdOverviewPageState ) }, ), - if ((state.householdMemberWrapper - .projectBeneficiaries ?? - []) - .isEmpty) - DigitElevatedButton( - onPressed: () async { - HouseholdMemberWrapper wrapper = - state.householdMemberWrapper; - - final timestamp = wrapper - .headOfHousehold - ?.clientAuditDetails - ?.createdTime; - final date = DateTime - .fromMillisecondsSinceEpoch( - timestamp ?? - DateTime.now() - .millisecondsSinceEpoch, - ); - - final address = - wrapper.household?.address; - - if (address == null) return; - - final projectBeneficiary = state - .householdMemberWrapper - .projectBeneficiaries - ?.firstWhereOrNull( - (element) => - element - .beneficiaryClientReferenceId == - wrapper.household - ?.clientReferenceId, - ); - - await context.router.root.push( - BeneficiaryRegistrationWrapperRoute( - initialState: - BeneficiaryRegistrationEditHouseholdState( - addressModel: address, - individualModel: state - .householdMemberWrapper - .members ?? - [], - householdModel: state - .householdMemberWrapper - .household!, - registrationDate: date, - projectBeneficiaryModel: - projectBeneficiary, - ), - children: [ - HouseholdLocationRoute(), - ], - ), - ); - }, - child: Center( - child: Text( - localizations.translate( - i18.householdOverView - .householdOverViewEditIconText, - ), - ), - )) ], ); }), @@ -646,23 +584,23 @@ class _HouseholdOverviewPageState : false, name: e.name?.givenName ?? ' - - ', years: (e.dateOfBirth == null - ? null - : DigitDateUtils.calculateAge( - DigitDateUtils - .getFormattedDateToDateTime( - e.dateOfBirth!, - ) ?? - DateTime.now(), - ).years), + ? null + : DigitDateUtils.calculateAge( + DigitDateUtils + .getFormattedDateToDateTime( + e.dateOfBirth!, + ) ?? + DateTime.now(), + ).years), months: (e.dateOfBirth == null - ? null - : DigitDateUtils.calculateAge( - DigitDateUtils - .getFormattedDateToDateTime( - e.dateOfBirth!, - ) ?? - DateTime.now(), - ).months), + ? null + : DigitDateUtils.calculateAge( + DigitDateUtils + .getFormattedDateToDateTime( + e.dateOfBirth!, + ) ?? + DateTime.now(), + ).months), gender: e.gender?.name, isBeneficiaryRefused: isBeneficiaryRefused && diff --git a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart index a3edf3cee..731c318c6 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart @@ -104,6 +104,14 @@ class RefusedDeliveryPageState extends LocalizedState { ) .toList(); + // Determine the status based on the reason of refusal + String status; + if (reasonOfRefusal ==Status.beneficiaryRefused.toValue()) { + status = Status.beneficiaryRefused.toValue(); + } else { + status = Status.administeredFailed.toValue(); + } + context.read().add( DeliverInterventionSubmitEvent( navigateToSummary: true, @@ -125,7 +133,7 @@ class RefusedDeliveryPageState extends LocalizedState { ), projectId: RegistrationDeliverySingleton() .projectId, - status: Status.administeredFailed.toValue(), + status: status, clientAuditDetails: ClientAuditDetails( createdBy: RegistrationDeliverySingleton() .loggedInUserUuid!, @@ -222,7 +230,7 @@ class RefusedDeliveryPageState extends LocalizedState { ), isRequired: true, child: SelectionBox( - width: 128, + width: MediaQuery.of(context).size.width*.36, allowMultipleSelection: false, options: RegistrationDeliverySingleton() .refusalReasons ?? @@ -250,7 +258,7 @@ class RefusedDeliveryPageState extends LocalizedState { }, valueMapper: (value) { return localizations - .translate(value.toString()); + .translate('REASON_${value.toString()}'); }, errorMessage: form .control(_reasonOfRefusal) diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart index b7cd6a8aa..8ff5bcfc5 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart @@ -34,6 +34,8 @@ class HouseholdAcknowledgementPageState builder: (context, householdState) { return DigitAcknowledgement.success( action: () { + context + .read().add(const SearchHouseholdsEvent.clear()); final parent = context.router.parent() as StackRouter; // Pop twice to navigate back to the previous screen parent.popUntilRoot(); diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index 956e35b06..ed390ff85 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -79,35 +79,7 @@ class _SearchBeneficiaryPageState onNotification: (scrollNotification) { if (scrollNotification is ScrollUpdateNotification) { final metrics = scrollNotification.metrics; - if (metrics.atEdge && metrics.pixels != 0) { - if (RegistrationDeliverySingleton().beneficiaryType == - BeneficiaryType.individual) { - blocWrapper.individualGlobalSearchBloc - .add(SearchHouseholdsEvent.individualGlobalSearch( - globalSearchParams: GlobalSearchParameters( - isProximityEnabled: isProximityEnabled, - latitude: lat, - longitude: long, - maxRadius: RegistrationDeliverySingleton().maxRadius, - nameSearch: searchController.text, - filter: selectedFilters, - offset: blocWrapper.individualGlobalSearchBloc.state.offset, - limit: blocWrapper.individualGlobalSearchBloc.state.limit, - ))); - } else { - blocWrapper.houseHoldGlobalSearchBloc - .add(SearchHouseholdsEvent.houseHoldGlobalSearch( - globalSearchParams: GlobalSearchParameters( - isProximityEnabled: isProximityEnabled, - latitude: lat, - longitude: long, - maxRadius: RegistrationDeliverySingleton().maxRadius, - nameSearch: searchController.text, - filter: selectedFilters, - offset: blocWrapper.houseHoldGlobalSearchBloc.state.offset, - limit: blocWrapper.houseHoldGlobalSearchBloc.state.limit, - ))); - } + if (metrics.atEdge && metrics.pixels != 0) {triggerGlobalSearchEvent(isPagination: true); } } return true; @@ -190,19 +162,9 @@ class _SearchBeneficiaryPageState ), textCapitalization: TextCapitalization.words, onChanged: (value) { - if (value.isEmpty) { - blocWrapper.clearEvent(); + if(value.isEmpty || value.trim().length > 2){ triggerGlobalSearchEvent(); } - if (value.trim().length < 2 && - !isProximityEnabled) { - blocWrapper.clearEvent(); - } else { - blocWrapper.searchHouseholdsBloc.add( - const SearchHouseholdsClearEvent(), - ); - } - triggerGlobalSearchEvent(); }, ), Align( @@ -257,7 +219,7 @@ class _SearchBeneficiaryPageState color: const DigitColors() .davyGray)), Text( - '(${searchHouseholdsState.householdMembers.length})', + ' (${searchHouseholdsState.householdMembers.length}-${searchHouseholdsState.totalResults})', style: TextStyle( color: const DigitColors() .davyGray)), @@ -371,10 +333,11 @@ class _SearchBeneficiaryPageState const DigitScannerEvent.handleScanner(), ); - if (i.tasks != null && - i.tasks!.last.status == - Status.closeHousehold.name && - i.tasks!.isNotEmpty) { + if ((i.tasks != null && + i.tasks?.last.status == + Status.closeHousehold.toValue() && + (i.tasks ?? []).isNotEmpty) || + (i.projectBeneficiaries ?? []).isEmpty) { setState(() { selectedFilters = []; }); @@ -387,7 +350,10 @@ class _SearchBeneficiaryPageState individualModel: i.members!, registrationDate: DateTime.now(), projectBeneficiaryModel: - i.projectBeneficiaries!.last, + (i.projectBeneficiaries ?? []) + .isNotEmpty + ? i.projectBeneficiaries?.last + : null, addressModel: i.headOfHousehold!.address!.last, ), @@ -525,14 +491,15 @@ class _SearchBeneficiaryPageState } } - void triggerGlobalSearchEvent() { - blocWrapper.clearEvent(); + void triggerGlobalSearchEvent( {bool isPagination = false}) { + if(!isPagination){ + blocWrapper.clearEvent(); + } if (RegistrationDeliverySingleton().beneficiaryType == BeneficiaryType.individual) { if (isProximityEnabled || selectedFilters.isNotEmpty || - searchController.text.isNotEmpty || - searchController.text.length > 2) { + searchController.text.isNotEmpty ) { blocWrapper.individualGlobalSearchBloc .add(SearchHouseholdsEvent.individualGlobalSearch( globalSearchParams: GlobalSearchParameters( @@ -540,16 +507,16 @@ class _SearchBeneficiaryPageState latitude: lat, longitude: long, maxRadius: RegistrationDeliverySingleton().maxRadius, - nameSearch: searchController.text, + nameSearch: searchController.text.trim().length > 2 ? searchController.text.trim() : blocWrapper.searchHouseholdsBloc.state.searchQuery, filter: selectedFilters, - offset: offset, - limit: limit, + offset: isPagination ? blocWrapper.houseHoldGlobalSearchBloc.state.offset: offset, + limit: isPagination ? blocWrapper.houseHoldGlobalSearchBloc.state.limit: limit, ))); } } else { if (isProximityEnabled || selectedFilters.isNotEmpty || - searchController.text.isNotEmpty) { + searchController.text.isNotEmpty ) { blocWrapper.houseHoldGlobalSearchBloc .add(SearchHouseholdsEvent.houseHoldGlobalSearch( globalSearchParams: GlobalSearchParameters( @@ -557,10 +524,10 @@ class _SearchBeneficiaryPageState latitude: lat, longitude: long, maxRadius: RegistrationDeliverySingleton().maxRadius, - nameSearch: searchController.text.trim(), + nameSearch: searchController.text.trim().length > 2 ? searchController.text.trim() : blocWrapper.searchHouseholdsBloc.state.searchQuery, filter: selectedFilters, - offset: offset, - limit: limit, + offset: isPagination ? blocWrapper.houseHoldGlobalSearchBloc.state.offset: offset, + limit: isPagination ? blocWrapper.houseHoldGlobalSearchBloc.state.limit: limit, ))); } } diff --git a/packages/registration_delivery/lib/utils/constants.dart b/packages/registration_delivery/lib/utils/constants.dart index 9859c90e4..f1c3454fa 100644 --- a/packages/registration_delivery/lib/utils/constants.dart +++ b/packages/registration_delivery/lib/utils/constants.dart @@ -9,7 +9,7 @@ class Constants { final String deliveryTeam = 'Delivery Team'; final String notAvailable = 'N/A'; final String dateTimeExtFormat = 'dd-MM-yyyy'; - final String dateMonthYearFormat = 'dd MMMM yyyy'; + final String dateMonthYearFormat = 'dd MMM yyyy'; static const String checklistViewDateFormat = 'dd/MM/yyyy hh:mm a'; } diff --git a/packages/registration_delivery/lib/utils/global_search_parameters.dart b/packages/registration_delivery/lib/utils/global_search_parameters.dart index 0c663679b..e4642cc5a 100644 --- a/packages/registration_delivery/lib/utils/global_search_parameters.dart +++ b/packages/registration_delivery/lib/utils/global_search_parameters.dart @@ -7,6 +7,7 @@ class GlobalSearchParameters { final int? offset; final int? limit; final List? filter; + final int? totalCount; GlobalSearchParameters({ required this.isProximityEnabled, @@ -17,5 +18,6 @@ class GlobalSearchParameters { required this.offset, required this.limit, required this.filter, + this.totalCount, }); } diff --git a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart index ff1d1b7e2..9f49dbbc4 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart @@ -167,8 +167,8 @@ class ViewBeneficiaryCardState extends LocalizedState { TableData( [ e.name?.givenName ?? '--', - e.name?.familyName ?? '--', - ].whereNotNull().join('-'), + (e.name?.familyName?.trim().isNotEmpty ?? false) ? e.name?.familyName : null, + ].whereNotNull().join(' '), cellKey: 'beneficiary', ), TableData( diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index c1f90c188..f1d4609e1 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -419,10 +419,9 @@ packages: digit_components: dependency: "direct main" description: - name: digit_components - sha256: "86ea75e325beb0ff8dff70e8734c9626597b49cc91c5d6fa960274f271dfb1a7" - url: "https://pub.dev" - source: hosted + path: "../digit_components" + relative: true + source: path version: "1.0.0+8" digit_data_model: dependency: "direct main" From 4d26bb7d432026072d1b46e3b9360a4b342015d2 Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Fri, 2 Aug 2024 11:28:05 +0530 Subject: [PATCH 062/241] fixed reports are not getting refreshed after updating facility (#486) Co-authored-by: rachana-egov --- .../inventory_management/lib/pages/reports/report_details.dart | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/inventory_management/lib/pages/reports/report_details.dart b/packages/inventory_management/lib/pages/reports/report_details.dart index f0a881cce..19b1aef9d 100644 --- a/packages/inventory_management/lib/pages/reports/report_details.dart +++ b/packages/inventory_management/lib/pages/reports/report_details.dart @@ -239,9 +239,6 @@ class InventoryReportDetailsPageState selectedFacilityId = facility.id; }); - form - .control(_facilityKey) - .value = facility; stockReconciliationBloc.add( StockReconciliationSelectFacilityEvent( facility, From ee8099f1b21a071ed0e1cbf551a5141f3ea18264 Mon Sep 17 00:00:00 2001 From: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Date: Fri, 2 Aug 2024 12:09:52 +0530 Subject: [PATCH 063/241] Delivery summary page Resources and quantity added (#473) * Delivery summary page Resources and quantity added * fix for offset increment twice * Delivery summary page Resources and quantity added --------- Co-authored-by: Naveen Renati Co-authored-by: Naveen J <83631045+naveen-egov@users.noreply.github.com> --- packages/registration_delivery/CHANGELOG.md | 2 ++ .../beneficiary/delivery_summary_page.dart | 29 ++++++++++++------- .../lib/utils/constants.dart | 10 +++++++ 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration_delivery/CHANGELOG.md index 0b3871d44..621fa4801 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration_delivery/CHANGELOG.md @@ -1,3 +1,4 @@ + ## 1.0.3-dev.4 * Cache build fix for registration_bloc @@ -6,6 +7,7 @@ * Closed household flow change + ## 1.0.3-dev.2 * Closed household search fixes diff --git a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart index d2c543629..f9be22262 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart @@ -1,7 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/widgets/atoms/details_card.dart'; -import 'package:digit_data_model/blocs/product_variant/product_variant.dart'; +import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:recase/recase.dart'; @@ -10,6 +10,7 @@ import 'package:registration_delivery/blocs/household_overview/household_overvie import 'package:registration_delivery/models/entities/additional_fields_type.dart'; import 'package:registration_delivery/models/entities/status.dart'; import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; +import 'package:registration_delivery/utils/constants.dart'; import 'package:registration_delivery/utils/utils.dart'; import 'package:registration_delivery/widgets/back_navigation_help_header.dart'; import 'package:registration_delivery/widgets/component_wrapper/product_variant_bloc_wrapper.dart'; @@ -289,9 +290,19 @@ class DeliverySummaryPageState extends LocalizedState { fetched: (productVariants) { final resourcesDelivered = deliverState .oldTask?.resources - ?.map((e) => productVariants - .where((p) => p.id == e.productVariantId) - .first) + ?.map((e) => TaskResourceInfo( + productVariants + .where((p) => + p.id == e.productVariantId) + .firstOrNull + ?.sku ?? + productVariants + .where((p) => + p.id == e.productVariantId) + .firstOrNull + ?.variation ?? + i18.common.coreCommonNA, + e.quantity ?? '0')) .toList(); return resourcesDelivered; }, @@ -299,7 +310,7 @@ class DeliverySummaryPageState extends LocalizedState { return DigitCard( child: LabelValueList( heading: localizations.translate( - '${RegistrationDeliverySingleton().selectedProject?.name}_${i18.deliverIntervention.deliveryDetailsLabel}_${deliverState.oldTask?.status}'), + '${RegistrationDeliverySingleton().selectedProject?.name.toUpperCase()}_${i18.deliverIntervention.deliveryDetailsLabel}_${deliverState.oldTask?.status}'), withDivider: true, items: [ LabelValuePair( @@ -333,12 +344,10 @@ class DeliverySummaryPageState extends LocalizedState { ?.value ?? i18.common.coreCommonNA) : variants - ?.map((e) => localizations - .translate(e.sku ?? - e.variation.toString())) + ?.map((e) => + '${getLocalizedMessage(e.productName)} : ${e.quantityDelivered}') .toList() - .join(', ') - .toString() ?? + .join('\n') ?? localizations.translate( i18.common.coreCommonNA), ), diff --git a/packages/registration_delivery/lib/utils/constants.dart b/packages/registration_delivery/lib/utils/constants.dart index f1c3454fa..a3f9de2ad 100644 --- a/packages/registration_delivery/lib/utils/constants.dart +++ b/packages/registration_delivery/lib/utils/constants.dart @@ -31,3 +31,13 @@ class StatusKeys { StatusKeys(this.isNotEligible, this.isBeneficiaryRefused, this.isBeneficiaryReferred, this.isStatusReset); } + +class TaskResourceInfo { + String productName; + String quantityDelivered; + + TaskResourceInfo( + this.productName, + this.quantityDelivered, + ); +} From 244f2cb03e0147018d5994d89a6d2f9a355f2349 Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Mon, 5 Aug 2024 18:32:36 +0530 Subject: [PATCH 064/241] updated script for closed household (#489) Co-authored-by: rachana-egov --- tools/closed_household_package_imports.dart | 316 +++++++++++++++++++- 1 file changed, 307 insertions(+), 9 deletions(-) diff --git a/tools/closed_household_package_imports.dart b/tools/closed_household_package_imports.dart index 372e4d65a..0e24b43b3 100644 --- a/tools/closed_household_package_imports.dart +++ b/tools/closed_household_package_imports.dart @@ -7,14 +7,312 @@ void main() { var appRoot = '$appDir/apps/health_campaign_field_worker_app/lib'; var localizationDelegatesFilePath = '$appRoot/utils/localization_delegates.dart'; + var networkManagerProviderWrapperFilePath = + appRoot + '/widgets/network_manager_provider_wrapper.dart'; + var constantsFilePath = appRoot + '/utils/constants.dart'; + var utilsFilePath = appRoot + '/utils/utils.dart'; + var routerFilePath = appRoot + '/router/app_router.dart'; + var entityMapperFilePath = + appRoot + '/data/local_store/no_sql/schema/entity_mapper.dart'; + var syncDownFilePath = appRoot + '/data/repositories/sync/sync_down.dart'; + var homeFilePath = appRoot + '/pages/home.dart'; + + // Add closed household to home file + _updateHome(homeFilePath); + + // Add closed household routes and import to the router file + _addClosedHouseholdRoutesAndImportToRouterFile(routerFilePath); _createLocalizationDelegatesFile(localizationDelegatesFilePath); - // Run dart format on the localization_delegates.dart file - Process.run('dart', ['format', localizationDelegatesFilePath]) - .then((ProcessResult results) { - print(results.stdout); - }); + // Add the inventory constants to the constants file + _addClosedHouseholdConstantsToConstantsFile( + constantsFilePath: constantsFilePath); + + // Run dart format on the file + _formatFiles([ + homeFilePath, + syncDownFilePath, + entityMapperFilePath, + routerFilePath, + constantsFilePath, + utilsFilePath, + networkManagerProviderWrapperFilePath, + localizationDelegatesFilePath + ]); +} + +void _formatFiles(List filePaths) { + for (var filePath in filePaths) { + Process.runSync('dart', ['format', filePath]); + print('Formatted $filePath'); + } +} + +void _updateHome(String homeFilePath) { + var importStatement = ''' + import 'package:closed_household/closed_household.dart'; + import 'package:closed_household/router/closed_household_router.gm.dart'; + '''; + + var homeItemsData = ''' + i18.home.closedHouseHoldLabel: + homeShowcaseData.closedHouseHold.buildWith( + child: HomeItemCard( + icon: Icons.home, + enableCustomIcon: true, + customIconSize: 48, + customIcon: Constants.closedHouseholdSvg, + label: i18.home.closedHouseHoldLabel, + onPressed: () { + context.router.push(const ClosedHouseholdWrapperRoute()); + }, + ), + ), + '''; + + var showCaseData = ''' + i18.home.closedHouseHoldLabel: + homeShowcaseData.closedHouseHold.showcaseKey, + '''; + + var itemsLabel = ''' + i18.home.closedHouseHoldLabel, + '''; + + // Define the data to be added + var singletonData = ''' + ClosedHouseholdSingleton().setInitialData( + loggedInUserUuid: context.loggedInUserUuid, + projectId: context.projectId, + beneficiaryType: context.beneficiaryType, + ); + '''; + + // Check if the home.dart file exists + var homeFile = File(homeFilePath); + if (!homeFile.existsSync()) { + print('Error: Home file does not exist at path: $homeFilePath'); + return; + } + + // Read the home.dart file + var homeFileContent = homeFile.readAsStringSync(); + + // Check if the import statement already exists and add it if not + if (!homeFileContent + .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { + homeFileContent = importStatement + '\n' + homeFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + + // Insert the data to be added + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add singleton of package Here', singletonData); + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add home items of package Here', homeItemsData); + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add showcase keys of package Here', showCaseData); + homeFileContent = insertData(homeFileContent, + '// INFO: Need to add items label of package Here', itemsLabel); + + // Write the updated content back to the home.dart file + homeFile.writeAsStringSync(homeFileContent); +} + +String insertData(String fileContent, String marker, String data) { + var markerIndex = fileContent.indexOf(marker); + if (markerIndex != -1) { + var endOfMarker = markerIndex + marker.length; + if (!fileContent.substring(endOfMarker).contains(data.trim())) { + fileContent = fileContent.substring(0, endOfMarker) + + '\n' + + data + + fileContent.substring(endOfMarker); + print('Data was added after marker: $marker'); + } else { + print('Data already exists after marker: $marker'); + } + } else { + print('Error: Could not find the marker: $marker'); + } + return fileContent; +} + +void _addClosedHouseholdRoutesAndImportToRouterFile(String routerFilePath) { + // Define the closed household route lines + var closedHouseholdRoutes = ''' + AutoRoute( + page: ClosedHouseholdWrapperRoute.page, + path: 'closed-household-wrapper', + children: [ + AutoRoute( + page: ClosedHouseholdDetailsRoute.page, + path: 'closed-household-details', + initial: true, + ), + AutoRoute( + page: ClosedHouseholdSummaryRoute.page, + path: 'closed-household-summary'), + AutoRoute( + page: ClosedHouseholdAcknowledgementRoute.page, + path: 'closed-household-acknowledgement'), + ]), + '''; + + // Define the import statement + var importStatement1 = + "import 'package:closed_household/router/closed_household_router.gm.dart';"; + // Define the import statement + var importStatement2 = + "import 'package:closed_household/router/closed_household_router.dart';"; + + // Check if the router file exists + var routerFile = File(routerFilePath); + + if (!routerFile.existsSync()) { + print('Error: Router file does not exist at path: $routerFilePath'); + return; + } + + // Read the router file + var routerFileContent = routerFile.readAsStringSync(); + + // Normalize the whitespace in the file content + var normalizedFileContent = routerFileContent.replaceAll(RegExp(r'\s'), ''); + + // Check if the import statement already exists + if (!normalizedFileContent + .contains(importStatement1.replaceAll(RegExp(r'\s'), ''))) { + // Add the import statement at the beginning of the file + routerFileContent = importStatement1 + '\n' + routerFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + + // Check if the import statement already exists + if (!normalizedFileContent + .contains(importStatement2.replaceAll(RegExp(r'\s'), ''))) { + // Add the import statement at the beginning of the file + routerFileContent = importStatement2 + '\n' + routerFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + // Check if the ClosedHousehold Route module already exists + if (!routerFileContent.contains('ClosedHouseholdWrapperRoute')) { + // Find the position to insert the module + var moduleInsertionIndex = routerFileContent.indexOf('@AutoRouterConfig('); + if (moduleInsertionIndex != -1) { + var endOfModulesIndex = + routerFileContent.indexOf(']', moduleInsertionIndex); + if (endOfModulesIndex != -1) { + var modulesEndIndex = + routerFileContent.lastIndexOf(']', endOfModulesIndex); + routerFileContent = routerFileContent.substring(0, modulesEndIndex) + + ' ClosedHouseholdWrapperRoute,' + + routerFileContent.substring(modulesEndIndex); + print('The ClosedHousehold Route module was added.'); + } else { + print('Error: Could not find the end of the modules list.'); + return; + } + } else { + print('Error: Could not find @AutoRouterConfig annotation.'); + return; + } + } else { + print('The ClosedHousehold module already exists.'); + } + + // Check if the closedHousehold routes already exist in the file + if (!normalizedFileContent + .contains(closedHouseholdRoutes.replaceAll(RegExp(r'\s'), ''))) { + // Find the position to insert the routes + var insertionIndex = routerFileContent + .indexOf('// INFO : Need to add Router of package Here'); + if (insertionIndex != -1) { + routerFileContent = routerFileContent.substring(0, insertionIndex) + + '// INFO : Need to add Router of package Here\n' + + closedHouseholdRoutes + + routerFileContent.substring(insertionIndex + + '// INFO : Need to add Router of package Here'.length); + print('The closedHousehold routes were added.'); + + // Write the updated content back to the file + routerFile.writeAsStringSync(routerFileContent); + } else { + print('Error: Could not find the insertion point.'); + return; + } + } else { + print('The closedHousehold routes already exist.'); + } +} + +void _addClosedHouseholdConstantsToConstantsFile( + {required String constantsFilePath}) { + // Define the import statements + var importStatements = [ + "import 'package:closed_household/utils/utils.dart';", + ]; + + // Define the attendance configuration + var attendanceConfiguration = ''' +ClosedHouseholdSingleton().setTenantId(envConfig.variables.tenantId); + '''; + + // Check if the constants.dart file exists + var constantsFile = File(constantsFilePath); + if (!constantsFile.existsSync()) { + print('Error: The constants.dart file does not exist.'); + return; + } + + // Read the constants.dart file + var constantsFileContent = constantsFile.readAsStringSync(); + + // Normalize the whitespace in the file content and the closedHousehold configuration + var normalizedFileContent = + constantsFileContent.replaceAll(RegExp(r'\s'), ''); + var normalizedAttendanceConfiguration = + attendanceConfiguration.replaceAll(RegExp(r'\s'), ''); + + // Check if the import statements already exist in the file + for (var importStatement in importStatements) { + if (!normalizedFileContent + .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { + // Add the import statement at the top of the file + constantsFileContent = importStatement + '\n' + constantsFileContent; + print('The import statement was added: $importStatement'); + } + } + + // Check if the closedHousehold configuration already exists in the file + // If not, add it to the file + if (!normalizedFileContent.contains(normalizedAttendanceConfiguration)) { + // Find the setInitialDataOfPackages method and add the closedHousehold configuration inside it + var setInitialDataOfPackagesIndex = + constantsFileContent.indexOf('void setInitialDataOfPackages() {'); + if (setInitialDataOfPackagesIndex != -1) { + var endOfSetInitialDataOfPackages = setInitialDataOfPackagesIndex + + constantsFileContent + .substring(setInitialDataOfPackagesIndex) + .indexOf('}') + + 1; + constantsFileContent = + constantsFileContent.substring(0, endOfSetInitialDataOfPackages - 1) + + '\n $attendanceConfiguration' + + constantsFileContent.substring(endOfSetInitialDataOfPackages - 1); + print('The closedHousehold configuration was added.'); + } + } + + // Write the updated content back to the constants.dart file + constantsFile.writeAsStringSync(constantsFileContent); } void _createLocalizationDelegatesFile(String localizationDelegatesFilePath) { @@ -27,23 +325,23 @@ void _createLocalizationDelegatesFile(String localizationDelegatesFilePath) { // Read the localization delegates file var localizationDelegatesFile = File(localizationDelegatesFilePath); var localizationDelegatesFileContent = - localizationDelegatesFile.readAsStringSync(); + localizationDelegatesFile.readAsStringSync(); var normalizedFileContent = - localizationDelegatesFileContent.replaceAll(RegExp(r'\s'), ''); + localizationDelegatesFileContent.replaceAll(RegExp(r'\s'), ''); // Check if the import statement and delegate already exist in the file // If not, add them to the file if (!normalizedFileContent .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { localizationDelegatesFileContent = - '$importStatement\n$localizationDelegatesFileContent'; + '$importStatement\n$localizationDelegatesFileContent'; print('The import statement was added.'); } if (!normalizedFileContent.contains(delegate.replaceAll(RegExp(r'\s'), ''))) { var lastDelegateIndex = - localizationDelegatesFileContent.lastIndexOf(RegExp(r',')); + localizationDelegatesFileContent.lastIndexOf(RegExp(r',')); if (lastDelegateIndex != -1) { localizationDelegatesFileContent = localizationDelegatesFileContent.substring(0, lastDelegateIndex + 1) + From 1ca409c9b507d5398c41b2881cbc0fc84fac44a2 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Mon, 5 Aug 2024 18:41:52 +0530 Subject: [PATCH 065/241] Hcmpre 166 - Moved Localization from ISAR To SQL (#488) * Update closed_household_details.dart (#482) * Fixed pagination refresh issue (#481) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments --------- Co-authored-by: rachana-egov * implemented count for filter search, added todo for combination search count * Fixed count TODO: search with task status filter * Fixed search with task status filter Removed delay in delivery_summary_page.dart * added code comments * HCMPRE-165 issues (#484) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments * HCMPRE-162:: Reload issue fix for closed household and not registered * HCMPRE-165: issues fixes * updated reasons for refusals --------- Co-authored-by: rachana-egov Co-authored-by: Ramkrishna-egov * Updated publock * Added a check to avoid multiple leftJoin for projectBeneficiary - fix for multiple left join error * created new table for localization TODO: separate packages localization delegates to individual package and move the localization model to data_model package for common usage Delete localization related isar files once tested * init Boundary code wise localization.dart * create localization local repo modified module separation from query to exclude and include specified module * modified module exclude in boundary page * modified localization call for boundary selection bug where first value is localized in dropdown * removed un-required localization bloc calls * updated index value to selected language on home * removed login cred --------- Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: rachana-egov Co-authored-by: Ramkrishna-egov --- .../lib/app.dart | 62 ++-- .../blocs/localization/app_localization.dart | 26 +- .../app_localizations_delegate.dart | 7 +- .../lib/blocs/localization/localization.dart | 9 +- .../data/repositories/local/localization.dart | 76 +++++ .../repositories/remote/localization.dart | 59 ++-- .../lib/pages/authenticated.dart | 5 +- .../lib/pages/boundary_selection.dart | 129 +++++--- .../lib/pages/home.dart | 18 +- .../lib/pages/login.dart | 5 + .../lib/utils/localization_delegates.dart | 44 +-- .../lib/utils/utils.dart | 48 ++- .../lib/widgets/sidebar/side_bar.dart | 2 +- .../pubspec.lock | 7 +- packages/attendance_management/pubspec.lock | 11 +- .../data/local_store/sql_store/sql_store.dart | 2 + .../local_store/sql_store/sql_store.g.dart | 281 +++++++++++++++++- .../sql_store/tables/localization.dart | 11 + 18 files changed, 634 insertions(+), 168 deletions(-) create mode 100644 apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart create mode 100644 packages/digit_data_model/lib/data/local_store/sql_store/tables/localization.dart diff --git a/apps/health_campaign_field_worker_app/lib/app.dart b/apps/health_campaign_field_worker_app/lib/app.dart index 7b2f1706c..0e000afe1 100644 --- a/apps/health_campaign_field_worker_app/lib/app.dart +++ b/apps/health_campaign_field_worker_app/lib/app.dart @@ -58,6 +58,7 @@ class MainApplicationState extends State with WidgetsBindingObserver { @override void initState() { + LocalizationParams().setModule('boundary', true); super.initState(); requestDisableBatteryOptimization(); } @@ -161,6 +162,10 @@ class MainApplicationState extends State final localizationModulesList = appConfig.backendInterface; var firstLanguage; firstLanguage = appConfig.languages?.lastOrNull?.value; + final selectedLocale = + AppSharedPreferences().getSelectedLocale ?? + firstLanguage; + LocalizationParams().setLocale(Locale(selectedLocale)); final languages = appConfig.languages; return MultiBlocProvider( @@ -169,35 +174,29 @@ class MainApplicationState extends State create: (localizationModulesList != null && firstLanguage != null) ? (context) => LocalizationBloc( - const LocalizationState(), - LocalizationRepository( - widget.client, - widget.isar, - ), - widget.isar, - )..add( - LocalizationEvent.onLoadLocalization( - module: localizationModulesList - .interfaces - .where((element) => - element.type == - Modules.localizationModule) - .map((e) => e.name.toString()) - .join(',') - .toString(), - tenantId: appConfig.tenantId.toString(), - locale: firstLanguage, - path: Constants.localizationApiPath, - ), - ) - : (context) => LocalizationBloc( - const LocalizationState(), - LocalizationRepository( - widget.client, - widget.isar, - ), - widget.isar, + const LocalizationState(), + LocalizationRepository( + widget.client, widget.sql), + widget.sql) + ..add( + LocalizationEvent.onLoadLocalization( + module: localizationModulesList.interfaces + .where((element) => + element.type == + Modules.localizationModule) + .map((e) => e.name.toString()) + .join(',') + .toString(), + tenantId: appConfig.tenantId.toString(), + locale: firstLanguage, + path: Constants.localizationApiPath, ), + ) + : (context) => LocalizationBloc( + const LocalizationState(), + LocalizationRepository( + widget.client, widget.sql), + widget.sql), ), BlocProvider( create: (ctx) => ProjectBloc( @@ -365,9 +364,12 @@ class MainApplicationState extends State }) : [firstLanguage], localizationsDelegates: getAppLocalizationDelegates( - isar: widget.isar, + sql: widget.sql, appConfig: appConfig, - selectedLocale: selectedLocale, + selectedLocale: Locale( + selectedLocale!.split("_").first, + selectedLocale.split("_").last, + ), ), locale: languages != null ? Locale( diff --git a/apps/health_campaign_field_worker_app/lib/blocs/localization/app_localization.dart b/apps/health_campaign_field_worker_app/lib/blocs/localization/app_localization.dart index a39066ea1..27e08cc72 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/localization/app_localization.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/localization/app_localization.dart @@ -1,14 +1,17 @@ +import 'package:digit_data_model/data/local_store/sql_store/sql_store.dart'; import 'package:flutter/material.dart'; import 'package:isar/isar.dart'; import '../../data/local_store/no_sql/schema/app_configuration.dart'; import '../../data/local_store/no_sql/schema/localization.dart'; +import '../../data/repositories/local/localization.dart'; +import '../../utils/utils.dart'; import 'app_localizations_delegate.dart'; class AppLocalizations { final Locale locale; - final Isar isar; + final LocalSqlDataStore sql; - AppLocalizations(this.locale, this.isar); + AppLocalizations(this.locale, this.sql); static AppLocalizations of(BuildContext context) { return Localizations.of(context, AppLocalizations)!; @@ -17,22 +20,15 @@ class AppLocalizations { static final List _localizedStrings = []; static LocalizationsDelegate getDelegate( - AppConfiguration config, - Isar isar, - ) => - AppLocalizationsDelegate(config, isar); + AppConfiguration config, LocalSqlDataStore sql) => + AppLocalizationsDelegate(config, sql); Future load() async { _localizedStrings.clear(); - final List localizationList = await isar - .localizationWrappers - .filter() - .localeEqualTo('${locale.languageCode}_${locale.countryCode}') - .findAll(); - - if (localizationList.isNotEmpty) { - _localizedStrings.addAll(localizationList.first.localization!); - } + + final listOfLocalizations = await LocalizationLocalRepository().returnLocalizationFromSQL(sql); + + _localizedStrings.addAll(listOfLocalizations); return true; } diff --git a/apps/health_campaign_field_worker_app/lib/blocs/localization/app_localizations_delegate.dart b/apps/health_campaign_field_worker_app/lib/blocs/localization/app_localizations_delegate.dart index 352adb17c..7eaf5b020 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/localization/app_localizations_delegate.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/localization/app_localizations_delegate.dart @@ -1,4 +1,5 @@ import 'package:collection/collection.dart'; +import 'package:digit_data_model/data/local_store/sql_store/sql_store.dart'; import 'package:flutter/material.dart'; import 'package:isar/isar.dart'; import '../../data/local_store/no_sql/schema/app_configuration.dart'; @@ -6,9 +7,9 @@ import 'app_localization.dart'; class AppLocalizationsDelegate extends LocalizationsDelegate { final AppConfiguration _appConfig; - final Isar isar; + final LocalSqlDataStore sql; - const AppLocalizationsDelegate(this._appConfig, this.isar); + const AppLocalizationsDelegate(this._appConfig, this.sql); @override bool isSupported(Locale locale) { @@ -27,7 +28,7 @@ class AppLocalizationsDelegate extends LocalizationsDelegate { Future load( Locale locale, ) async { - AppLocalizations appLocalizations = AppLocalizations(locale, isar); + AppLocalizations appLocalizations = AppLocalizations(locale, sql); await appLocalizations.load(); return appLocalizations; diff --git a/apps/health_campaign_field_worker_app/lib/blocs/localization/localization.dart b/apps/health_campaign_field_worker_app/lib/blocs/localization/localization.dart index 11e11b124..2bbc45815 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/localization/localization.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/localization/localization.dart @@ -1,10 +1,12 @@ import 'dart:async'; +import 'package:digit_data_model/data/local_store/sql_store/sql_store.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:isar/isar.dart'; import '../../data/local_store/app_shared_preferences.dart'; import '../../data/repositories/remote/localization.dart'; +import '../../utils/utils.dart'; import 'app_localization.dart'; part 'localization.freezed.dart'; @@ -13,12 +15,12 @@ typedef LocalizationEmitter = Emitter; class LocalizationBloc extends Bloc { final LocalizationRepository localizationRepository; - final Isar isar; + final LocalSqlDataStore sql; LocalizationBloc( super.initialState, this.localizationRepository, - this.isar, + this.sql, ) { on(_onLoadLocalization); on(_onUpdateLocalizationIndex); @@ -58,7 +60,8 @@ class LocalizationBloc extends Bloc { } FutureOr _loadLocale(List codes) async { - await AppLocalizations(Locale(codes.first, codes.last), isar).load(); + LocalizationParams().setLocale(Locale(codes.first, codes.last)); + await AppLocalizations(Locale(codes.first, codes.last), sql).load(); } } diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart new file mode 100644 index 000000000..956fcd512 --- /dev/null +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart @@ -0,0 +1,76 @@ +import 'dart:async'; + +import 'package:digit_data_model/data/local_store/sql_store/sql_store.dart'; +import 'package:digit_data_model/utils/utils.dart'; +import 'package:drift/drift.dart'; + +import '../../../utils/utils.dart'; +import '../../local_store/no_sql/schema/localization.dart'; + +class LocalizationLocalRepository { + FutureOr> returnLocalizationFromSQL( + LocalSqlDataStore sql) async { + final selectQuery = sql.select(sql.localization).join([]); + + // List to hold the AND conditions + final andConditions = >[]; + + // Add condition for locale if provided + if (LocalizationParams().locale != null) { + final localeString = '${LocalizationParams().locale!}'; + andConditions.add(sql.localization.locale.equals(localeString)); + } + + // Add conditions for modules and codes + if (LocalizationParams().module != null && + LocalizationParams().module!.isNotEmpty) { + final moduleToExclude = LocalizationParams().module!; + + if (LocalizationParams().exclude == true) { + // Exclude modules but include records where the code matches + final moduleCondition = + sql.localization.module.contains(moduleToExclude).not(); + final codeCondition = LocalizationParams().code != null && + LocalizationParams().code!.isNotEmpty + ? sql.localization.code.isIn(LocalizationParams().code!.toList()) + : const Constant(false); // True if no code filter + + // Combine conditions: exclude module unless code matches + andConditions.add(buildAnd([moduleCondition | codeCondition])); + } else { + // Include specified modules and optionally filter by code + final moduleCondition = + sql.localization.module.contains(moduleToExclude); + final codeCondition = LocalizationParams().code != null && + LocalizationParams().code!.isNotEmpty + ? sql.localization.code.isIn(LocalizationParams().code!.toList()) + : const Constant(false); + + // Combine conditions: module matches and optionally code filter + andConditions.add(buildAnd([moduleCondition | codeCondition])); + } + } else if (LocalizationParams().code != null && + LocalizationParams().code!.isNotEmpty) { + // If no module filter, just apply code filter + andConditions + .add(sql.localization.code.isIn(LocalizationParams().code!.toList())); + } + + // Apply the combined conditions to the query + if (andConditions.isNotEmpty) { + selectQuery.where(buildAnd(andConditions)); + } + + final result = await selectQuery.get(); + + return result.map((row) { + final data = row.readTableOrNull(sql.localization); + + return Localization() + ..code = data!.code + ..locale = data.locale + ..module = data.module + ..message = data.message; + }).toList(); + } +} diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/remote/localization.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/remote/localization.dart index ca811cc7b..b290a17a9 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/remote/localization.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/remote/localization.dart @@ -1,19 +1,19 @@ import 'dart:async'; import 'dart:convert'; - +import 'package:digit_data_model/data_model.dart'; import 'package:dio/dio.dart'; -import 'package:isar/isar.dart'; +import 'package:drift/drift.dart'; import '../../../models/localization/localization_model.dart'; import '../../local_store/no_sql/schema/localization.dart'; class LocalizationRepository { final Dio _client; - final Isar _isar; + final LocalSqlDataStore _sql; const LocalizationRepository( this._client, - this._isar, + this._sql, ); Future search({ @@ -42,11 +42,25 @@ class LocalizationRepository { required String module, required String tenantId, }) async { - final List localizationList = await _isar - .localizationWrappers - .filter() - .localeEqualTo(locale) - .findAll(); + List localizationList = []; + + final query = _sql.select(_sql.localization).join([]) + ..where( + buildAnd([ + _sql.localization.locale.equals(locale), + ]), + ); + + final results = await query.get(); + + localizationList = results.map((e) { + final data = e.readTableOrNull(_sql.localization); + return Localization() + ..code = data!.code + ..locale = data.locale + ..module = data.module + ..message = data.message; + }).toList(); if (localizationList.isEmpty) { final result = await search( @@ -57,22 +71,17 @@ class LocalizationRepository { "tenantId": tenantId, }, ); - - final List newLocalizationList = result.messages - .map((e) => Localization() - ..message = e.message - ..code = e.code - ..locale = e.locale - ..module = e.module) - .toList(); - - final localizationWrapper = LocalizationWrapper() - ..locale = locale - ..localization = newLocalizationList; - - await _isar.writeTxn(() async { - await _isar.localizationWrappers.put(localizationWrapper); - // insert & update + await _sql.batch((batch) { + batch.insertAll( + _sql.localization, + result.messages + .map((e) => LocalizationCompanion( + code: Value(e.code), + locale: Value(e.locale), + message: Value(e.message), + module: Value(e.module), + )) + .toList()); }); } } diff --git a/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart b/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart index 3cb217497..1f7baf504 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart @@ -55,10 +55,11 @@ class AuthenticatedPageWrapper extends StatelessWidget { if (selectedBoundary == null) { return const SizedBox.shrink(); } else { + LocalizationParams() + .setCode([selectedBoundary.code!]); final boundaryName = AppLocalizations.of(context).translate( - selectedBoundary.name ?? - selectedBoundary.code ?? + selectedBoundary.code ?? i18.projectSelection.onProjectMapped, ); diff --git a/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart b/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart index d7fc98e1d..6fbf4cbe4 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart @@ -12,8 +12,11 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; import '../blocs/app_initialization/app_initialization.dart'; +import '../blocs/localization/localization.dart'; import '../blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart'; import '../blocs/sync/sync.dart'; +import '../data/local_store/app_shared_preferences.dart'; +import '../data/local_store/no_sql/schema/app_configuration.dart'; import '../models/entities/roles_type.dart'; import '../router/app_router.dart'; import '../utils/i18_key_constants.dart' as i18; @@ -45,6 +48,7 @@ class _BoundarySelectionPageState @override void initState() { + LocalizationParams().setModule('common', false); context.read().add(SyncRefreshEvent(context.loggedInUserUuid)); context.read().add( const DownSyncResetStateEvent(), @@ -77,29 +81,45 @@ class _BoundarySelectionPageState return PopScope( canPop: shouldPop, - child: BlocBuilder( - builder: (context, state) { - final selectedBoundary = state.selectedBoundaryMap.entries - .lastWhereOrNull((element) => element.value != null); - - return Scaffold( - body: Builder( - builder: (context) { - if (state.loading) { - return const Center( - child: CircularProgressIndicator(), - ); - } - - final labelList = state.selectedBoundaryMap.keys.toList(); - - return BlocBuilder( - builder: (ctx, initState) { - return initState.maybeWhen( - orElse: () => const Offstage(), - initialized: (appConfiguration, _) => ReactiveFormBuilder( - form: () => buildForm(state), + child: BlocBuilder( + builder: (context, initState) { + return BlocBuilder( + builder: (context, state) { + final selectedBoundary = state.selectedBoundaryMap.entries + .lastWhereOrNull((element) => element.value != null); + return Scaffold( + body: Builder( + builder: (context) { + if (state.loading) { + return const Center( + child: CircularProgressIndicator(), + ); + } + + final labelList = state.selectedBoundaryMap.keys.toList(); + + return initState.maybeWhen( + orElse: () => const Offstage(), + initialized: (appConfiguration, _) => + BlocListener( + listener: (context, state) { + if (state.boundaryList.isNotEmpty) { + final finalCodes = + state.boundaryList.map((e) => e.code!).toList(); + LocalizationParams().setCode(finalCodes); + context.read().add( + LocalizationEvent.onUpdateLocalizationIndex( + index: appConfiguration.languages!.indexWhere( + (element) => + element.value == + AppSharedPreferences() + .getSelectedLocale), + code: AppSharedPreferences() + .getSelectedLocale!)); + } + }, + child: ReactiveFormBuilder( + form: () => buildForm(state, appConfiguration), builder: (context, form, child) => Column( children: [ Expanded( @@ -111,7 +131,6 @@ class _BoundarySelectionPageState final filteredItems = state.boundaryList.where((element) { if (element.label != label) return false; - if (labelIndex == 0) return true; final parentIndex = labelIndex - 1; @@ -142,9 +161,7 @@ class _BoundarySelectionPageState formControlName: label, valueMapper: (value) { return localizations.translate( - value.name ?? - value.code ?? - 'No Value'); + value.code ?? 'No Value'); }, onFieldTap: (value) { setState(() { @@ -153,7 +170,6 @@ class _BoundarySelectionPageState }, onSelected: (value) { if (value == null) return; - context.read().add( BoundarySearchEvent( boundaryNum: @@ -187,6 +203,17 @@ class _BoundarySelectionPageState BlocListener( listener: (context, downSyncState) { + LocalizationParams() + .setModule('boundary', true); + context.read().add( + LocalizationEvent.onUpdateLocalizationIndex( + index: appConfiguration.languages! + .indexWhere((element) => + element.value == + AppSharedPreferences() + .getSelectedLocale), + code: AppSharedPreferences() + .getSelectedLocale!)); downSyncState.maybeWhen( orElse: () => false, loading: (isPop) => { @@ -568,6 +595,19 @@ class _BoundarySelectionPageState } clickedStatus.value = true; + LocalizationParams() + .setModule( + 'boundary', true); + context.read().add(LocalizationEvent.onUpdateLocalizationIndex( + index: appConfiguration + .languages! + .indexWhere((element) => + element + .value == + AppSharedPreferences() + .getSelectedLocale), + code: AppSharedPreferences() + .getSelectedLocale!)); } } }, @@ -584,31 +624,42 @@ class _BoundarySelectionPageState ], ), ), - ); - }, - ); - }, - ), - ); - }, - ), + ), + ); + }, + ), + ); + }, + ); + }), ); } void resetChildDropdowns(String parentLabel, BoundaryState state) { final labelList = state.selectedBoundaryMap.keys.toList(); final parentIndex = labelList.indexOf(parentLabel); - + if (state.boundaryList.isNotEmpty) { + LocalizationParams() + .setCode(state.boundaryList.map((e) => e.code!).toList()); + } for (int i = parentIndex + 1; i < labelList.length; i++) { final label = labelList[i]; formControls[label]?.updateValue(null); } } - FormGroup buildForm(BoundaryState state) { + FormGroup buildForm(BoundaryState state, AppConfiguration appConfiguration) { formControls = {}; final labelList = state.selectedBoundaryMap.keys.toList(); - + if (state.boundaryList.isNotEmpty) { + final finalCodes = state.boundaryList.map((e) => e.code!).toList(); + LocalizationParams().setCode(finalCodes); + context.read().add( + LocalizationEvent.onUpdateLocalizationIndex( + index: appConfiguration.languages!.indexWhere((element) => + element.value == AppSharedPreferences().getSelectedLocale), + code: AppSharedPreferences().getSelectedLocale!)); + } for (final label in labelList) { formControls[label] = FormControl( value: state.selectedBoundaryMap[label], diff --git a/apps/health_campaign_field_worker_app/lib/pages/home.dart b/apps/health_campaign_field_worker_app/lib/pages/home.dart index 8ff93934c..90d538682 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/home.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/home.dart @@ -23,7 +23,9 @@ import 'package:registration_delivery/router/registration_delivery_router.gm.dar import '../blocs/app_initialization/app_initialization.dart'; import '../blocs/auth/auth.dart'; +import '../blocs/localization/localization.dart'; import '../blocs/sync/sync.dart'; +import '../data/local_store/app_shared_preferences.dart'; import '../data/local_store/no_sql/schema/app_configuration.dart'; import '../data/local_store/secure_store/secure_store.dart'; import '../models/entities/roles_type.dart'; @@ -94,7 +96,6 @@ class _HomePageState extends LocalizedState { return e.code; }); - //[TODO: Add below roles to enum] if (!(roles.contains(RolesType.distributor.toValue()) || roles.contains(RolesType.registrar.toValue()))) { skipProgressBar = true; @@ -519,12 +520,11 @@ class _HomePageState extends LocalizedState { .map((e) => e.displayName) .toList() .contains(element) || - element == i18.home.db ) + element == i18.home.db) .toList(); final showcaseKeys = filteredLabels - .where((f) => - f != i18.home.db ) + .where((f) => f != i18.home.db) .map((label) => homeItemsShowcaseMap[label]!) .toList(); @@ -617,6 +617,7 @@ void setPackagesSingleton(BuildContext context) { context.read().state.maybeWhen( orElse: () {}, initialized: (AppConfiguration appConfiguration, _) { + loadLocalization(context, appConfiguration); // INFO : Need to add singleton of package Here RegistrationDeliverySingleton().setInitialData( loggedInUserUuid: context.loggedInUserUuid, @@ -714,6 +715,15 @@ void setPackagesSingleton(BuildContext context) { }); } +void loadLocalization( + BuildContext context, AppConfiguration appConfiguration) async { + context.read().add( + LocalizationEvent.onUpdateLocalizationIndex( + index: appConfiguration.languages!.indexWhere((element) => + element.value == AppSharedPreferences().getSelectedLocale), + code: AppSharedPreferences().getSelectedLocale!)); +} + class _HomeItemDataModel { final List homeItems; final List showcaseKeys; diff --git a/apps/health_campaign_field_worker_app/lib/pages/login.dart b/apps/health_campaign_field_worker_app/lib/pages/login.dart index b87e6b6f5..4df393cce 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/login.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/login.dart @@ -26,6 +26,11 @@ class _LoginPageState extends LocalizedState { static const _userId = 'userId'; static const _password = 'password'; + @override + void initState() { + super.initState(); + } + @override Widget build(BuildContext context) { final theme = Theme.of(context); diff --git a/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart b/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart index ad15b746f..23ac1eae9 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart @@ -1,8 +1,8 @@ +import 'dart:ui'; import 'package:closed_household/blocs/app_localization.dart' as closed_household_localization; -import 'package:closed_household/utils/i18_key_constants.dart'; +import 'package:digit_data_model/data/local_store/sql_store/sql_store.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; -import 'package:isar/isar.dart'; import 'package:attendance_management/blocs/app_localization.dart' as attendance_localization; import 'package:digit_scanner/blocs/app_localization.dart' @@ -16,62 +16,42 @@ import 'package:registration_delivery/blocs/app_localization.dart' import '../blocs/localization/app_localization.dart'; import '../data/local_store/no_sql/schema/app_configuration.dart'; +import '../data/repositories/local/localization.dart'; import 'utils.dart'; getAppLocalizationDelegates({ - required Isar isar, + required LocalSqlDataStore sql, required AppConfiguration appConfig, - required String selectedLocale, + required Locale selectedLocale, }) { return [ - AppLocalizations.getDelegate( - appConfig, - isar, - ), + AppLocalizations.getDelegate(appConfig, sql), GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, GlobalMaterialLocalizations.delegate, referral_reconciliation_localization.ReferralReconLocalization.getDelegate( - getLocalizationString( - isar, - selectedLocale, - ), + LocalizationLocalRepository().returnLocalizationFromSQL(sql) as Future, appConfig.languages!, ), inventory_localization.InventoryLocalization.getDelegate( - getLocalizationString( - isar, - selectedLocale, - ), + LocalizationLocalRepository().returnLocalizationFromSQL(sql) as Future, appConfig.languages!, ), attendance_localization.AttendanceLocalization.getDelegate( - getLocalizationString( - isar, - selectedLocale, - ), + LocalizationLocalRepository().returnLocalizationFromSQL(sql) as Future, appConfig.languages!, ), scanner_localization.ScannerLocalization.getDelegate( - getLocalizationString( - isar, - selectedLocale, - ), + LocalizationLocalRepository().returnLocalizationFromSQL(sql) as Future, appConfig.languages!, ), registration_delivery_localization.RegistrationDeliveryLocalization .getDelegate( - getLocalizationString( - isar, - selectedLocale, - ), + LocalizationLocalRepository().returnLocalizationFromSQL(sql) as Future, appConfig.languages!, ), closed_household_localization.ClosedHouseholdLocalization.getDelegate( - getLocalizationString( - isar, - selectedLocale, - ), + LocalizationLocalRepository().returnLocalizationFromSQL(sql) as Future, appConfig.languages!, ), ]; diff --git a/apps/health_campaign_field_worker_app/lib/utils/utils.dart b/apps/health_campaign_field_worker_app/lib/utils/utils.dart index ebcf613f8..9e0ba86d8 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/utils.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/utils.dart @@ -263,7 +263,7 @@ void showDownloadDialog( ); } else { Navigator.of(context, rootNavigator: true).pop(); - context.router.pop(); + context.router.maybePop(); } }, ), @@ -271,7 +271,7 @@ void showDownloadDialog( label: model.secondaryButtonLabel ?? '', action: (ctx) { Navigator.of(context, rootNavigator: true).pop(); - context.router.pop(); + context.router.maybePop(); }, ), ); @@ -340,8 +340,7 @@ void showDownloadDialog( label: '', prefixLabel: '', suffixLabel: - '${(snapshot.data == null ? 0 : snapshot.data! * model.totalCount!.toDouble()).toInt()}/${model.suffixLabel}' ?? - '', + '${(snapshot.data == null ? 0 : snapshot.data! * model.totalCount!.toDouble()).toInt()}/${model.suffixLabel}', value: snapshot.data ?? 0, valueColor: AlwaysStoppedAnimation( DigitTheme.instance.colorScheme.secondary, @@ -442,3 +441,44 @@ int getSyncCount(List oplogs) { return count; } + +class LocalizationParams { + static final LocalizationParams _singleton = LocalizationParams._internal(); + + factory LocalizationParams() { + return _singleton; + } + + LocalizationParams._internal(); + + List? _code; + String? _module; + Locale? _locale; + bool? _exclude = true; + + void setCode(List? code) { + _code = code; + } + + void setModule(String? module, bool? exclude) { + _module = module; + _exclude = exclude; + } + + void setLocale(Locale locale) { + _locale = locale; + } + + void clear() { + _code = null; + _module = null; + } + + List? get code => _code; + + String? get module => _module; + + Locale? get locale => _locale; + + bool? get exclude => _exclude; +} diff --git a/apps/health_campaign_field_worker_app/lib/widgets/sidebar/side_bar.dart b/apps/health_campaign_field_worker_app/lib/widgets/sidebar/side_bar.dart index 09a21c4f6..07530a05d 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/sidebar/side_bar.dart +++ b/apps/health_campaign_field_worker_app/lib/widgets/sidebar/side_bar.dart @@ -111,7 +111,7 @@ class SideBar extends StatelessWidget { ), icon: Icons.language, onPressed: () { - // TODO: Complete implementation + }, content: Offstage( offstage: languages == null, diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index ed63d35d4..e4a283e8c 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -497,10 +497,9 @@ packages: digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: c708c6474b7a67e3cdedcbb82265c201e61390360109344ebedfa2cc1ded0440 - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_data_model" + relative: true + source: path version: "1.0.3-dev.2" digit_firebase_services: dependency: "direct main" diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index ed7ca41b2..f38c4a587 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -315,10 +315,11 @@ packages: digit_components: dependency: "direct main" description: - path: "../digit_components" - relative: true - source: path - version: "1.0.0+3" + name: digit_components + sha256: "86ea75e325beb0ff8dff70e8734c9626597b49cc91c5d6fa960274f271dfb1a7" + url: "https://pub.dev" + source: hosted + version: "1.0.0+8" digit_data_model: dependency: "direct main" description: @@ -1260,5 +1261,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <4.0.0" + dart: ">=3.2.0 <3.9.0" flutter: ">=3.16.0" diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart index e5a60169f..5ac28bd5d 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart @@ -1,6 +1,7 @@ // Importing necessary packages and files. import 'dart:io'; +import 'package:digit_data_model/data/local_store/sql_store/tables/localization.dart'; import 'package:drift/drift.dart'; import 'package:drift/native.dart'; import 'package:path/path.dart' as p; @@ -98,6 +99,7 @@ part 'sql_store.g.dart'; TaskResource, SideEffect, Referral, + Localization ]) class LocalSqlDataStore extends _$LocalSqlDataStore { /// The constructor for `LocalSqlDataStore`. diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart index e742720b6..dd992c9d3 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart @@ -38695,6 +38695,277 @@ class ReferralCompanion extends UpdateCompanion { } } +class $LocalizationTable extends Localization + with TableInfo<$LocalizationTable, LocalizationData> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $LocalizationTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _localeMeta = const VerificationMeta('locale'); + @override + late final GeneratedColumn locale = GeneratedColumn( + 'locale', aliasedName, false, + additionalChecks: + GeneratedColumn.checkTextLength(minTextLength: 1, maxTextLength: 255), + type: DriftSqlType.string, + requiredDuringInsert: true); + static const VerificationMeta _codeMeta = const VerificationMeta('code'); + @override + late final GeneratedColumn code = GeneratedColumn( + 'code', aliasedName, false, + additionalChecks: + GeneratedColumn.checkTextLength(minTextLength: 1, maxTextLength: 255), + type: DriftSqlType.string, + requiredDuringInsert: true); + static const VerificationMeta _messageMeta = + const VerificationMeta('message'); + @override + late final GeneratedColumn message = GeneratedColumn( + 'message', aliasedName, false, + additionalChecks: + GeneratedColumn.checkTextLength(minTextLength: 1, maxTextLength: 500), + type: DriftSqlType.string, + requiredDuringInsert: true); + static const VerificationMeta _moduleMeta = const VerificationMeta('module'); + @override + late final GeneratedColumn module = GeneratedColumn( + 'module', aliasedName, false, + additionalChecks: + GeneratedColumn.checkTextLength(minTextLength: 1, maxTextLength: 255), + type: DriftSqlType.string, + requiredDuringInsert: true); + @override + List get $columns => [locale, code, message, module]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'localization'; + @override + VerificationContext validateIntegrity(Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('locale')) { + context.handle(_localeMeta, + locale.isAcceptableOrUnknown(data['locale']!, _localeMeta)); + } else if (isInserting) { + context.missing(_localeMeta); + } + if (data.containsKey('code')) { + context.handle( + _codeMeta, code.isAcceptableOrUnknown(data['code']!, _codeMeta)); + } else if (isInserting) { + context.missing(_codeMeta); + } + if (data.containsKey('message')) { + context.handle(_messageMeta, + message.isAcceptableOrUnknown(data['message']!, _messageMeta)); + } else if (isInserting) { + context.missing(_messageMeta); + } + if (data.containsKey('module')) { + context.handle(_moduleMeta, + module.isAcceptableOrUnknown(data['module']!, _moduleMeta)); + } else if (isInserting) { + context.missing(_moduleMeta); + } + return context; + } + + @override + Set get $primaryKey => const {}; + @override + LocalizationData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return LocalizationData( + locale: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}locale'])!, + code: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}code'])!, + message: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}message'])!, + module: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}module'])!, + ); + } + + @override + $LocalizationTable createAlias(String alias) { + return $LocalizationTable(attachedDatabase, alias); + } +} + +class LocalizationData extends DataClass + implements Insertable { + final String locale; + final String code; + final String message; + final String module; + const LocalizationData( + {required this.locale, + required this.code, + required this.message, + required this.module}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['locale'] = Variable(locale); + map['code'] = Variable(code); + map['message'] = Variable(message); + map['module'] = Variable(module); + return map; + } + + LocalizationCompanion toCompanion(bool nullToAbsent) { + return LocalizationCompanion( + locale: Value(locale), + code: Value(code), + message: Value(message), + module: Value(module), + ); + } + + factory LocalizationData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return LocalizationData( + locale: serializer.fromJson(json['locale']), + code: serializer.fromJson(json['code']), + message: serializer.fromJson(json['message']), + module: serializer.fromJson(json['module']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'locale': serializer.toJson(locale), + 'code': serializer.toJson(code), + 'message': serializer.toJson(message), + 'module': serializer.toJson(module), + }; + } + + LocalizationData copyWith( + {String? locale, String? code, String? message, String? module}) => + LocalizationData( + locale: locale ?? this.locale, + code: code ?? this.code, + message: message ?? this.message, + module: module ?? this.module, + ); + @override + String toString() { + return (StringBuffer('LocalizationData(') + ..write('locale: $locale, ') + ..write('code: $code, ') + ..write('message: $message, ') + ..write('module: $module') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(locale, code, message, module); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is LocalizationData && + other.locale == this.locale && + other.code == this.code && + other.message == this.message && + other.module == this.module); +} + +class LocalizationCompanion extends UpdateCompanion { + final Value locale; + final Value code; + final Value message; + final Value module; + final Value rowid; + const LocalizationCompanion({ + this.locale = const Value.absent(), + this.code = const Value.absent(), + this.message = const Value.absent(), + this.module = const Value.absent(), + this.rowid = const Value.absent(), + }); + LocalizationCompanion.insert({ + required String locale, + required String code, + required String message, + required String module, + this.rowid = const Value.absent(), + }) : locale = Value(locale), + code = Value(code), + message = Value(message), + module = Value(module); + static Insertable custom({ + Expression? locale, + Expression? code, + Expression? message, + Expression? module, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (locale != null) 'locale': locale, + if (code != null) 'code': code, + if (message != null) 'message': message, + if (module != null) 'module': module, + if (rowid != null) 'rowid': rowid, + }); + } + + LocalizationCompanion copyWith( + {Value? locale, + Value? code, + Value? message, + Value? module, + Value? rowid}) { + return LocalizationCompanion( + locale: locale ?? this.locale, + code: code ?? this.code, + message: message ?? this.message, + module: module ?? this.module, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (locale.present) { + map['locale'] = Variable(locale.value); + } + if (code.present) { + map['code'] = Variable(code.value); + } + if (message.present) { + map['message'] = Variable(message.value); + } + if (module.present) { + map['module'] = Variable(module.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('LocalizationCompanion(') + ..write('locale: $locale, ') + ..write('code: $code, ') + ..write('message: $message, ') + ..write('module: $module, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + abstract class _$LocalSqlDataStore extends GeneratedDatabase { _$LocalSqlDataStore(QueryExecutor e) : super(e); late final $AttendanceRegisterTable attendanceRegister = @@ -38747,6 +39018,7 @@ abstract class _$LocalSqlDataStore extends GeneratedDatabase { late final $TaskResourceTable taskResource = $TaskResourceTable(this); late final $SideEffectTable sideEffect = $SideEffectTable(this); late final $ReferralTable referral = $ReferralTable(this); + late final $LocalizationTable localization = $LocalizationTable(this); late final Index attendanceClientref = Index('attendance_clientref', 'CREATE INDEX attendance_clientref ON attendance (client_reference_id)'); late final Index attendanceIndividualid = Index('attendance_individualid', @@ -38812,6 +39084,10 @@ abstract class _$LocalSqlDataStore extends GeneratedDatabase { late final Index referralProjectbeneficiaryclientref = Index( 'referral_projectbeneficiaryclientref', 'CREATE INDEX referral_projectbeneficiaryclientref ON referral (project_beneficiary_client_reference_id)'); + late final Index localizationLocale = Index('localization_locale', + 'CREATE INDEX localization_locale ON localization (locale)'); + late final Index localizationModule = Index('localization_module', + 'CREATE INDEX localization_module ON localization (module)'); @override Iterable> get allTables => allSchemaEntities.whereType>(); @@ -38857,6 +39133,7 @@ abstract class _$LocalSqlDataStore extends GeneratedDatabase { taskResource, sideEffect, referral, + localization, attendanceClientref, attendanceIndividualid, projectClinetref, @@ -38885,6 +39162,8 @@ abstract class _$LocalSqlDataStore extends GeneratedDatabase { sideeffectTaskclientref, referralClinetref, referralProjectid, - referralProjectbeneficiaryclientref + referralProjectbeneficiaryclientref, + localizationLocale, + localizationModule ]; } diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/tables/localization.dart b/packages/digit_data_model/lib/data/local_store/sql_store/tables/localization.dart new file mode 100644 index 000000000..a0b38bbe3 --- /dev/null +++ b/packages/digit_data_model/lib/data/local_store/sql_store/tables/localization.dart @@ -0,0 +1,11 @@ +import 'package:drift/drift.dart'; + +@TableIndex(name: 'localization_module', columns: { + #module, +}) +class Localization extends Table { + TextColumn get locale => text().withLength(min: 1, max: 255)(); + TextColumn get code => text().withLength(min: 1, max: 255)(); + TextColumn get message => text().withLength(min: 1, max: 500)(); + TextColumn get module => text().withLength(min: 1, max: 255)(); +} \ No newline at end of file From 6e0b52efd181b1782bf9ba6a4843eddb0a0c47f3 Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Mon, 5 Aug 2024 22:05:44 +0530 Subject: [PATCH 066/241] Removed null condition, fixed double is not a subtype of string issue and added null check for table (#490) * HCMPRE-156 : type 'double' is not a subtype of type 'String' * added check if the first table row is null --------- Co-authored-by: rachana-egov Co-authored-by: Naveen J <83631045+naveen-egov@users.noreply.github.com> --- .../lib/utils/background_service.dart | 4 ++-- .../digit_components/lib/widgets/molecules/digit_table.dart | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/utils/background_service.dart b/apps/health_campaign_field_worker_app/lib/utils/background_service.dart index 1c4554313..7b6e29274 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/background_service.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/background_service.dart @@ -170,13 +170,13 @@ void onStart(ServiceInstance service) async { appConfiguration, ); final BandwidthModel bandwidthModel = BandwidthModel.fromJson({ - 'userId': userRequestModel!.uuid, + 'userId': userRequestModel?.uuid, 'batchSize': configuredBatchSize, }); flutterLocalNotificationsPlugin.show( 888, 'Auto Sync', - 'Speed : ${double.tryParse(speedArray.firstOrNull.toString())?.toStringAsFixed(1)}Mb/ps - BatchSize : $configuredBatchSize', + 'Speed : ${speedArray.first != null ? double.tryParse(speedArray.first.toString())?.toStringAsFixed(2) ?? '0' : '0'}Mb/ps - BatchSize : $configuredBatchSize', const NotificationDetails( android: AndroidNotificationDetails( "my_foreground", diff --git a/packages/digit_components/lib/widgets/molecules/digit_table.dart b/packages/digit_components/lib/widgets/molecules/digit_table.dart index 1d51f5033..d966c40cc 100644 --- a/packages/digit_components/lib/widgets/molecules/digit_table.dart +++ b/packages/digit_components/lib/widgets/molecules/digit_table.dart @@ -161,7 +161,7 @@ class DigitTable extends StatelessWidget { } Widget _generateFirstColumnRow(BuildContext context, int index) { - var data = tableData[index].tableRow.first; + var data = tableData[index].tableRow.isNotEmpty ? tableData[index].tableRow.first : TableData(''); final tableCellBorder = DigitTheme.instance.tableCellBorder; final tableCellStrongBorder = DigitTheme.instance.tableCellStrongBorder; return InkWell( From 07b7da949eecee87c39ccfd7c8aada6eddcf5353 Mon Sep 17 00:00:00 2001 From: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Date: Tue, 6 Aug 2024 21:03:43 +0530 Subject: [PATCH 067/241] HCMPRE-177:: Metric and Table Charts Integration in Mobile dashboard and digit_dss package initial release (#480) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * added translator for administration area * Fixed Facility search based on tenant ID * Added disable battery optimization permission for background service * Added disable battery optimization ask permission on App start and background service start * HLM-5984:: Get Precise location on Submitting latitude longitude details * Reverted install_bricks.sh * added new status REGISTERED, NOT_REGISTERED updated conditional check for status by project beneficiaries * added static status_filter.dart integration in search_beneficiary.dart * TODO for selected_filters display condition * integrated household search filters with mdms implemented search based on filters with pagination for Registered and NotRegistered * updated status filter component merge with develop * create individual_global_search and implemented search * Auto Create Project Beneficiary on Edit Household, and disable record delivery if no project beneficiary present * Conflicts resolved * Pop State recapture during registration flow, Disable delivery flow for individual based campaign if project beneficiaries is empty * implemented household_global_search.dart fixed individual_global_search.dart * updated proximity search for household_global_search.dart * Pop State recapture during registration flow, Disable delivery flow for individual based campaign if project beneficiaries is empty (#456) * updated class state from private for customization override in registration_delivery and inventory added pagination for filter search TODO: combination search for registered and not registered needs fix which return only last selected results * adding missed changes for last commit * HCMPRE-55 Dashboard Static Screen added * displaying selected filter value for applied filters in search_beneficiary.dart * updated changelog for inventory and registration_delivery for new dev versions * updated pubspec lock of registration_delivery * removed multiple filter selection modified filter search * fixed delivery team scanner issues in stock_details.dart * Fixed - missing addition of scanned resources to additional fields filter search bug fixes * HCMPRE-74, HCMPRE-82, HCMPRE-83:: Household Reload Fix, Validations for Household details added (#458) * updated individual global search added beneficiary type check in view_beneficiary_card.dart removed commented code in household_overview.dart * Added null check for beneficiaryTag in closed_household_summary.dart * Exposed Registration delivery pages * updated remote repository and some miner fixes (#461) Co-authored-by: rachana-egov * HCMPRE-82:: Validations and Bug Fixes * small css fixes (#462) Co-authored-by: rachana-egov Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> * merge fix * added closed household search * status model fix * Closed-household-registration (#464) * closed-household-registration * closed-household-registration * updated pub file --------- Co-authored-by: rachana-egov * added closed household init file modified user_action.dart model and db corrected modified closed household status * updated registration for closed household * added closed_household search and updating closed household status * clearing search before navigating to registration flow * getting last tasks in household_overview.dart * HCMPRE-107:: Summary page added for Delivery Flow, HCMPRE-111:: Disable Delete household if beneficiary not present (#463) * Validation and gps fixes * fixed closed household count clearing closedhould results for clear * pagination fix for closed household * sync down for closed household, updated scan voucher button, and remove the tag when we navigate to a different page (#465) Co-authored-by: rachana-egov * DeliverySummary Route added to main app * seperated closedhousehold search Bug fixes - HCMPRE-112, 110, 113 * updated all the points of this ticket HCMPRE-120 (#466) Co-authored-by: rachana-egov * Bug Fixes, dev version release of packages * HCMPRE-119:: IRS Demo fixes (#468) * HCMPRE-119:: IRS Demo fixes * Removed unused code * updated closed button action to push closedhousehold tasks filter with last fix * updated validation for closed household name and fix error message size (#470) Co-authored-by: rachana-egov * Irs demo fix patch (#469) * HCMPRE-119:: IRS Demo fixes * Removed unused code * Edit Household if no project beneficiary fix * reverted hiding of digit search bar when closed filter is applied * status update based on last task status in household_overview.dart mapped administered success in beneficiary_card.dart moved getstatus to utils.dart * fixed offset increasing twice * HCMPRE-121:: Enter manual code fix and Search Beneficiary fixes (#471) * HCMPRE-121:: Enter manual code fix and Search Beneficiary fixes * Added date formats to constants * fixed offset increasing twice closed household distance fix emitting scanner state loading * dev version bump-up for registration and scanner * version updates for packages * View Household button added in delete individual success page, Search project beneficiary fix * added close button to close the filter and disabled the clear button … (#475) * added close button to close the filter and disabled the clear button unless something is selected * added validation for closed household head name same as individual * updated the condition for validation of closehousehold head --------- Co-authored-by: rachana-egov * View Household button added in delete individual success page, Search project beneficiary fix (#474) * Search beneficiary fix * Search beneficiary fix * Bloc dispose fix * Bloc dispose fix * Updated task based search for household * HCMPRE-177:: Metric Chart Integration and digit_dss package setup * HCMPRE-177:: Added Refresh Indicator for refreshing the dashboard * HCMPRE-177:: Table chart integration and Refresh logic update * Added code comments for digit_dss package * Added enums and constants * Resolved code comments and updated versions for packages * HCMPRE177:: Moved dashboard UI Config to MDMS * HCMPRE177:: Added dss_import script for digit_dss package * Resolved code comments * Updated dashboard Config * Added dashboard config search to try catch block * Resolved conflicts * published data_model and registration_delivery * Added Read me file and updated pubspec.yaml --------- Co-authored-by: Naveen Renati Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: rachana-egov Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> --- .../lib/app.dart | 12 +- .../app_initialization.dart | 63 +- .../app_initialization.freezed.dart | 131 +- .../lib/blocs/project/project.dart | 45 + .../no_sql/schema/app_configuration.dart | 3 +- .../lib/data/repositories/remote/mdms.dart | 119 +- .../models/app_config/app_config_model.dart | 7 +- .../models/entities/mdms_master_enums.dart | 2 + .../entities/mdms_master_enums.mapper.dart | 4 + .../lib/pages/boundary_selection.dart | 2 +- .../registration/complaint_type.dart | 7 +- .../lib/pages/home.dart | 75 +- .../lib/pages/language_selection.dart | 2 +- .../lib/pages/profile.dart | 12 +- .../beneficiary/beneficaries_report.dart | 165 +- .../lib/router/app_router.dart | 10 +- .../lib/router/app_router.gr.dart | 1 + .../lib/utils/constants.dart | 15 +- .../lib/utils/i18_key_constants.dart | 10 +- .../lib/utils/localization_delegates.dart | 18 +- .../lib/utils/utils.dart | 2 + .../showcase/config/home_showcase.dart | 3 + .../pubspec.lock | 30 +- .../pubspec.yaml | 5 +- packages/digit_data_model/CHANGELOG.md | 16 +- .../local_store/sql_store/sql_store.g.dart | 3 - .../lib/models/entities/project.dart | 2 +- packages/digit_data_model/pubspec.yaml | 2 +- packages/digit_dss/.gitignore | 29 + packages/digit_dss/.metadata | 10 + packages/digit_dss/CHANGELOG.md | 2 + packages/digit_dss/LICENSE | 21 + packages/digit_dss/README.md | 20 + packages/digit_dss/analysis_options.yaml | 4 + .../digit_dss/lib/blocs/app_localization.dart | 51 + packages/digit_dss/lib/blocs/dashboard.dart | 265 ++ .../lib/blocs/dashboard.freezed.dart | 1070 +++++ .../dashboard_localization_delegate.dart | 34 + .../schema/dashboard_config_schema.dart | 29 + .../schema/dashboard_config_schema.g.dart | 1121 +++++ .../no_sql/schema/dashboard_response.dart | 76 + .../no_sql/schema/dashboard_response.g.dart | 4018 +++++++++++++++++ .../digit_dss/lib/data/remote/dashboard.dart | 152 + packages/digit_dss/lib/digit_dss.dart | 24 + packages/digit_dss/lib/digit_dss.init.dart | 24 + .../lib/models/entities/chart_data.dart | 30 + .../models/entities/chart_data.mapper.dart | 213 + .../lib/models/entities/dashboard_config.dart | 46 + .../entities/dashboard_config.freezed.dart | 585 +++ .../models/entities/dashboard_config.g.dart | 57 + .../models/entities/dashboard_request.dart | 56 + .../entities/dashboard_request.mapper.dart | 575 +++ .../entities/dashboard_response_model.dart | 44 + .../dashboard_response_model.mapper.dart | 370 ++ .../lib/models/entities/dss_enums.dart | 30 + .../lib/models/entities/dss_enums.mapper.dart | 89 + .../lib/models/entities/insight.dart | 26 + .../lib/models/entities/insight.mapper.dart | 175 + .../digit_dss/lib/models/entities/plots.dart | 28 + .../lib/models/entities/plots.mapper.dart | 189 + .../lib/pages/dashboard/dashboard.dart | 160 + .../lib/router/dashboard_router.dart | 17 + .../lib/router/dashboard_router.gm.dart | 38 + .../lib/utils/i18_key_constants.dart | 66 + packages/digit_dss/lib/utils/utils.dart | 191 + .../widgets/back_navigation_help_header.dart | 80 + .../dashboard/dashboard_metric_card.dart | 189 + packages/digit_dss/lib/widgets/localized.dart | 35 + packages/digit_dss/pubspec.yaml | 84 + packages/digit_dss/test/digit_dss_test.dart | 1 + packages/registration_delivery/CHANGELOG.md | 4 + .../beneficiary_registration_wrapper.dart | 56 +- .../household_details.dart | 12 - packages/registration_delivery/pubspec.lock | 13 +- packages/registration_delivery/pubspec.yaml | 6 +- tools/digit_dss_imports.dart | 474 ++ 76 files changed, 11363 insertions(+), 292 deletions(-) create mode 100644 packages/digit_dss/.gitignore create mode 100644 packages/digit_dss/.metadata create mode 100644 packages/digit_dss/CHANGELOG.md create mode 100644 packages/digit_dss/LICENSE create mode 100644 packages/digit_dss/README.md create mode 100644 packages/digit_dss/analysis_options.yaml create mode 100644 packages/digit_dss/lib/blocs/app_localization.dart create mode 100644 packages/digit_dss/lib/blocs/dashboard.dart create mode 100644 packages/digit_dss/lib/blocs/dashboard.freezed.dart create mode 100644 packages/digit_dss/lib/blocs/dashboard_localization_delegate.dart create mode 100644 packages/digit_dss/lib/data/local_store/no_sql/schema/dashboard_config_schema.dart create mode 100644 packages/digit_dss/lib/data/local_store/no_sql/schema/dashboard_config_schema.g.dart create mode 100644 packages/digit_dss/lib/data/local_store/no_sql/schema/dashboard_response.dart create mode 100644 packages/digit_dss/lib/data/local_store/no_sql/schema/dashboard_response.g.dart create mode 100644 packages/digit_dss/lib/data/remote/dashboard.dart create mode 100644 packages/digit_dss/lib/digit_dss.dart create mode 100644 packages/digit_dss/lib/digit_dss.init.dart create mode 100644 packages/digit_dss/lib/models/entities/chart_data.dart create mode 100644 packages/digit_dss/lib/models/entities/chart_data.mapper.dart create mode 100644 packages/digit_dss/lib/models/entities/dashboard_config.dart create mode 100644 packages/digit_dss/lib/models/entities/dashboard_config.freezed.dart create mode 100644 packages/digit_dss/lib/models/entities/dashboard_config.g.dart create mode 100644 packages/digit_dss/lib/models/entities/dashboard_request.dart create mode 100644 packages/digit_dss/lib/models/entities/dashboard_request.mapper.dart create mode 100644 packages/digit_dss/lib/models/entities/dashboard_response_model.dart create mode 100644 packages/digit_dss/lib/models/entities/dashboard_response_model.mapper.dart create mode 100644 packages/digit_dss/lib/models/entities/dss_enums.dart create mode 100644 packages/digit_dss/lib/models/entities/dss_enums.mapper.dart create mode 100644 packages/digit_dss/lib/models/entities/insight.dart create mode 100644 packages/digit_dss/lib/models/entities/insight.mapper.dart create mode 100644 packages/digit_dss/lib/models/entities/plots.dart create mode 100644 packages/digit_dss/lib/models/entities/plots.mapper.dart create mode 100644 packages/digit_dss/lib/pages/dashboard/dashboard.dart create mode 100644 packages/digit_dss/lib/router/dashboard_router.dart create mode 100644 packages/digit_dss/lib/router/dashboard_router.gm.dart create mode 100644 packages/digit_dss/lib/utils/i18_key_constants.dart create mode 100644 packages/digit_dss/lib/utils/utils.dart create mode 100644 packages/digit_dss/lib/widgets/back_navigation_help_header.dart create mode 100644 packages/digit_dss/lib/widgets/dashboard/dashboard_metric_card.dart create mode 100644 packages/digit_dss/lib/widgets/localized.dart create mode 100644 packages/digit_dss/pubspec.yaml create mode 100644 packages/digit_dss/test/digit_dss_test.dart create mode 100644 tools/digit_dss_imports.dart diff --git a/apps/health_campaign_field_worker_app/lib/app.dart b/apps/health_campaign_field_worker_app/lib/app.dart index 0e000afe1..d45a3335f 100644 --- a/apps/health_campaign_field_worker_app/lib/app.dart +++ b/apps/health_campaign_field_worker_app/lib/app.dart @@ -3,6 +3,7 @@ import 'package:closed_household/blocs/closed_household.dart'; import 'package:closed_household/closed_household.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_dss/digit_dss.dart'; import 'package:digit_scanner/blocs/scanner.dart'; import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; @@ -30,7 +31,6 @@ import 'router/app_navigator_observer.dart'; import 'router/app_router.dart'; import 'utils/environment_config.dart'; import 'utils/localization_delegates.dart'; -import 'utils/typedefs.dart'; import 'utils/utils.dart'; import 'widgets/network_manager_provider_wrapper.dart'; @@ -86,6 +86,7 @@ class MainApplicationState extends State create: (context) => AppInitializationBloc( isar: widget.isar, mdmsRepository: MdmsRepository(widget.client), + dashboardRemoteRepository: DashboardRemoteRepository(widget.client), )..add(const AppInitializationSetupEvent()), child: NetworkManagerProviderWrapper( isar: widget.isar, @@ -201,6 +202,8 @@ class MainApplicationState extends State BlocProvider( create: (ctx) => ProjectBloc( mdmsRepository: MdmsRepository(widget.client), + dashboardRemoteRepository: + DashboardRemoteRepository(widget.client), facilityLocalRepository: ctx.read< LocalRepository>(), @@ -277,6 +280,13 @@ class MainApplicationState extends State context: context, ), ), + BlocProvider( + create: (ctx) => DashboardBloc( + const DashboardState.initialState(), + isar: widget.isar, + dashboardRemoteRepo: + DashboardRemoteRepository(widget.client), + )), BlocProvider( create: (context) => FacilityBloc( facilityDataRepository: context.repository< diff --git a/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.dart b/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.dart index 83953038b..98a9ac125 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.dart @@ -1,7 +1,9 @@ import 'dart:async'; +import 'dart:convert'; import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_dss/digit_dss.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; @@ -25,10 +27,12 @@ typedef AppInitializationEmitter = Emitter; class AppInitializationBloc extends Bloc { final MdmsRepository mdmsRepository; + final DashboardRemoteRepository dashboardRemoteRepository; final Isar isar; AppInitializationBloc({ required this.mdmsRepository, + required this.dashboardRemoteRepository, required this.isar, }) : super(const AppUninitialized()) { on(_onAppInitializeSetup); @@ -50,6 +54,7 @@ class AppInitializationBloc emit(AppInitialized( appConfiguration: config.appConfigs.firstOrNull!, serviceRegistryList: config.serviceRegistryList, + dashboardConfigSchema: config.dashboardConfigSchema, )); } on AppInitializationException catch (_) { emit(const AppUninitialized()); @@ -143,6 +148,43 @@ class AppInitializationBloc pgrServiceDefinitions, isar, ); + try { + final dashboardConfigWrapper = + await dashboardRemoteRepository.searchDashboardConfig( + envConfig.variables.mdmsApiPath, + MdmsRequestModel( + mdmsCriteria: MdmsCriteriaModel( + tenantId: envConfig.variables.tenantId, + moduleDetails: [ + MdmsModuleDetailModel( + moduleName: ModuleEnums.hcm.toValue(), + masterDetails: [ + MdmsMasterDetailModel( + MasterEnums.dashboardConfig.toValue(), + ), + ], + ), + ], + ), + ).toJson(), + ); + final dashboardConfigs = DashboardConfigPrimaryWrapper.fromJson( + jsonDecode(dashboardConfigWrapper)['MdmsRes'] + [ModuleEnums.hcm.toValue()]) + .dashboardConfigWrapper; + + if (dashboardConfigs.isNotEmpty) { + await dashboardRemoteRepository.writeToDashboardConfigDB( + DashboardConfigPrimaryWrapper.fromJson( + jsonDecode(dashboardConfigWrapper)['MdmsRes'] + [ModuleEnums.hcm.toValue()]) + .dashboardConfigWrapper + .first, + isar); + } + } catch (e) { + debugPrint(e.toString()); + } add( AppInitializationSetupEvent( @@ -163,6 +205,12 @@ class AppInitializationBloc ) async { final serviceRegistryList = await isar.serviceRegistrys.where().findAll(); final configs = await isar.appConfigurations.where().findAll(); + final dashboardConfigs = await isar.dashboardConfigSchemas + .where() + .filter() + .chartsIsNotNull() + .chartsIsNotEmpty() + .findAll(); if (serviceRegistryList.isEmpty) { throw Exception('`serviceRegistryList` cannot be empty'); @@ -174,6 +222,7 @@ class AppInitializationBloc return MdmsConfig( appConfigs: configs, serviceRegistryList: serviceRegistryList, + dashboardConfigSchema: dashboardConfigs.firstOrNull, ); } } @@ -197,6 +246,7 @@ class AppInitializationState with _$AppInitializationState { const factory AppInitializationState.initialized({ required AppConfiguration appConfiguration, @Default([]) List serviceRegistryList, + DashboardConfigSchema? dashboardConfigSchema, }) = AppInitialized; Map> get entityActionMapping { @@ -204,7 +254,7 @@ class AppInitializationState with _$AppInitializationState { uninitialized: () => {}, loading: () => {}, failed: () => {}, - initialized: (appConfiguration, serviceRegistryList) => + initialized: (appConfiguration, serviceRegistryList, _) => serviceRegistryList .map((e) => e.actions.map((e) { ApiOperation? operation; @@ -250,7 +300,7 @@ class AppInitializationState with _$AppInitializationState { uninitialized: () => 'Uninitialized', loading: () => 'Loading', failed: () => 'Failed', - initialized: (appConfiguration, serviceRegistryList) => + initialized: (appConfiguration, serviceRegistryList, _) => 'tenantId: ${appConfiguration.tenantId}\n' 'serviceCount: ${serviceRegistryList.length}', ); @@ -260,11 +310,12 @@ class AppInitializationState with _$AppInitializationState { class MdmsConfig { final List appConfigs; final List serviceRegistryList; + final DashboardConfigSchema? dashboardConfigSchema; - const MdmsConfig({ - required this.appConfigs, - required this.serviceRegistryList, - }); + const MdmsConfig( + {required this.appConfigs, + required this.serviceRegistryList, + this.dashboardConfigSchema}); } class AppInitializationException implements Exception { diff --git a/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.freezed.dart b/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.freezed.dart index 68e67727e..6fbad1976 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.freezed.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.freezed.dart @@ -234,8 +234,10 @@ mixin _$AppInitializationState { required TResult Function() uninitialized, required TResult Function() loading, required TResult Function() failed, - required TResult Function(AppConfiguration appConfiguration, - List serviceRegistryList) + required TResult Function( + AppConfiguration appConfiguration, + List serviceRegistryList, + DashboardConfigSchema? dashboardConfigSchema) initialized, }) => throw _privateConstructorUsedError; @@ -244,8 +246,10 @@ mixin _$AppInitializationState { TResult? Function()? uninitialized, TResult? Function()? loading, TResult? Function()? failed, - TResult? Function(AppConfiguration appConfiguration, - List serviceRegistryList)? + TResult? Function( + AppConfiguration appConfiguration, + List serviceRegistryList, + DashboardConfigSchema? dashboardConfigSchema)? initialized, }) => throw _privateConstructorUsedError; @@ -254,8 +258,10 @@ mixin _$AppInitializationState { TResult Function()? uninitialized, TResult Function()? loading, TResult Function()? failed, - TResult Function(AppConfiguration appConfiguration, - List serviceRegistryList)? + TResult Function( + AppConfiguration appConfiguration, + List serviceRegistryList, + DashboardConfigSchema? dashboardConfigSchema)? initialized, required TResult orElse(), }) => @@ -342,8 +348,10 @@ class _$AppUninitializedImpl extends AppUninitialized { required TResult Function() uninitialized, required TResult Function() loading, required TResult Function() failed, - required TResult Function(AppConfiguration appConfiguration, - List serviceRegistryList) + required TResult Function( + AppConfiguration appConfiguration, + List serviceRegistryList, + DashboardConfigSchema? dashboardConfigSchema) initialized, }) { return uninitialized(); @@ -355,8 +363,10 @@ class _$AppUninitializedImpl extends AppUninitialized { TResult? Function()? uninitialized, TResult? Function()? loading, TResult? Function()? failed, - TResult? Function(AppConfiguration appConfiguration, - List serviceRegistryList)? + TResult? Function( + AppConfiguration appConfiguration, + List serviceRegistryList, + DashboardConfigSchema? dashboardConfigSchema)? initialized, }) { return uninitialized?.call(); @@ -368,8 +378,10 @@ class _$AppUninitializedImpl extends AppUninitialized { TResult Function()? uninitialized, TResult Function()? loading, TResult Function()? failed, - TResult Function(AppConfiguration appConfiguration, - List serviceRegistryList)? + TResult Function( + AppConfiguration appConfiguration, + List serviceRegistryList, + DashboardConfigSchema? dashboardConfigSchema)? initialized, required TResult orElse(), }) { @@ -458,8 +470,10 @@ class _$AppInitializingImpl extends AppInitializing { required TResult Function() uninitialized, required TResult Function() loading, required TResult Function() failed, - required TResult Function(AppConfiguration appConfiguration, - List serviceRegistryList) + required TResult Function( + AppConfiguration appConfiguration, + List serviceRegistryList, + DashboardConfigSchema? dashboardConfigSchema) initialized, }) { return loading(); @@ -471,8 +485,10 @@ class _$AppInitializingImpl extends AppInitializing { TResult? Function()? uninitialized, TResult? Function()? loading, TResult? Function()? failed, - TResult? Function(AppConfiguration appConfiguration, - List serviceRegistryList)? + TResult? Function( + AppConfiguration appConfiguration, + List serviceRegistryList, + DashboardConfigSchema? dashboardConfigSchema)? initialized, }) { return loading?.call(); @@ -484,8 +500,10 @@ class _$AppInitializingImpl extends AppInitializing { TResult Function()? uninitialized, TResult Function()? loading, TResult Function()? failed, - TResult Function(AppConfiguration appConfiguration, - List serviceRegistryList)? + TResult Function( + AppConfiguration appConfiguration, + List serviceRegistryList, + DashboardConfigSchema? dashboardConfigSchema)? initialized, required TResult orElse(), }) { @@ -578,8 +596,10 @@ class _$AppInitializationFailedImpl extends AppInitializationFailed { required TResult Function() uninitialized, required TResult Function() loading, required TResult Function() failed, - required TResult Function(AppConfiguration appConfiguration, - List serviceRegistryList) + required TResult Function( + AppConfiguration appConfiguration, + List serviceRegistryList, + DashboardConfigSchema? dashboardConfigSchema) initialized, }) { return failed(); @@ -591,8 +611,10 @@ class _$AppInitializationFailedImpl extends AppInitializationFailed { TResult? Function()? uninitialized, TResult? Function()? loading, TResult? Function()? failed, - TResult? Function(AppConfiguration appConfiguration, - List serviceRegistryList)? + TResult? Function( + AppConfiguration appConfiguration, + List serviceRegistryList, + DashboardConfigSchema? dashboardConfigSchema)? initialized, }) { return failed?.call(); @@ -604,8 +626,10 @@ class _$AppInitializationFailedImpl extends AppInitializationFailed { TResult Function()? uninitialized, TResult Function()? loading, TResult Function()? failed, - TResult Function(AppConfiguration appConfiguration, - List serviceRegistryList)? + TResult Function( + AppConfiguration appConfiguration, + List serviceRegistryList, + DashboardConfigSchema? dashboardConfigSchema)? initialized, required TResult orElse(), }) { @@ -666,7 +690,8 @@ abstract class _$$AppInitializedImplCopyWith<$Res> { @useResult $Res call( {AppConfiguration appConfiguration, - List serviceRegistryList}); + List serviceRegistryList, + DashboardConfigSchema? dashboardConfigSchema}); } /// @nodoc @@ -682,6 +707,7 @@ class __$$AppInitializedImplCopyWithImpl<$Res> $Res call({ Object? appConfiguration = null, Object? serviceRegistryList = null, + Object? dashboardConfigSchema = freezed, }) { return _then(_$AppInitializedImpl( appConfiguration: null == appConfiguration @@ -692,6 +718,10 @@ class __$$AppInitializedImplCopyWithImpl<$Res> ? _value._serviceRegistryList : serviceRegistryList // ignore: cast_nullable_to_non_nullable as List, + dashboardConfigSchema: freezed == dashboardConfigSchema + ? _value.dashboardConfigSchema + : dashboardConfigSchema // ignore: cast_nullable_to_non_nullable + as DashboardConfigSchema?, )); } } @@ -701,7 +731,8 @@ class __$$AppInitializedImplCopyWithImpl<$Res> class _$AppInitializedImpl extends AppInitialized { const _$AppInitializedImpl( {required this.appConfiguration, - final List serviceRegistryList = const []}) + final List serviceRegistryList = const [], + this.dashboardConfigSchema}) : _serviceRegistryList = serviceRegistryList, super._(); @@ -717,6 +748,9 @@ class _$AppInitializedImpl extends AppInitialized { return EqualUnmodifiableListView(_serviceRegistryList); } + @override + final DashboardConfigSchema? dashboardConfigSchema; + @override bool operator ==(Object other) { return identical(this, other) || @@ -725,12 +759,17 @@ class _$AppInitializedImpl extends AppInitialized { (identical(other.appConfiguration, appConfiguration) || other.appConfiguration == appConfiguration) && const DeepCollectionEquality() - .equals(other._serviceRegistryList, _serviceRegistryList)); + .equals(other._serviceRegistryList, _serviceRegistryList) && + (identical(other.dashboardConfigSchema, dashboardConfigSchema) || + other.dashboardConfigSchema == dashboardConfigSchema)); } @override - int get hashCode => Object.hash(runtimeType, appConfiguration, - const DeepCollectionEquality().hash(_serviceRegistryList)); + int get hashCode => Object.hash( + runtimeType, + appConfiguration, + const DeepCollectionEquality().hash(_serviceRegistryList), + dashboardConfigSchema); @JsonKey(ignore: true) @override @@ -745,11 +784,14 @@ class _$AppInitializedImpl extends AppInitialized { required TResult Function() uninitialized, required TResult Function() loading, required TResult Function() failed, - required TResult Function(AppConfiguration appConfiguration, - List serviceRegistryList) + required TResult Function( + AppConfiguration appConfiguration, + List serviceRegistryList, + DashboardConfigSchema? dashboardConfigSchema) initialized, }) { - return initialized(appConfiguration, serviceRegistryList); + return initialized( + appConfiguration, serviceRegistryList, dashboardConfigSchema); } @override @@ -758,11 +800,14 @@ class _$AppInitializedImpl extends AppInitialized { TResult? Function()? uninitialized, TResult? Function()? loading, TResult? Function()? failed, - TResult? Function(AppConfiguration appConfiguration, - List serviceRegistryList)? + TResult? Function( + AppConfiguration appConfiguration, + List serviceRegistryList, + DashboardConfigSchema? dashboardConfigSchema)? initialized, }) { - return initialized?.call(appConfiguration, serviceRegistryList); + return initialized?.call( + appConfiguration, serviceRegistryList, dashboardConfigSchema); } @override @@ -771,13 +816,16 @@ class _$AppInitializedImpl extends AppInitialized { TResult Function()? uninitialized, TResult Function()? loading, TResult Function()? failed, - TResult Function(AppConfiguration appConfiguration, - List serviceRegistryList)? + TResult Function( + AppConfiguration appConfiguration, + List serviceRegistryList, + DashboardConfigSchema? dashboardConfigSchema)? initialized, required TResult orElse(), }) { if (initialized != null) { - return initialized(appConfiguration, serviceRegistryList); + return initialized( + appConfiguration, serviceRegistryList, dashboardConfigSchema); } return orElse(); } @@ -822,12 +870,15 @@ class _$AppInitializedImpl extends AppInitialized { abstract class AppInitialized extends AppInitializationState { const factory AppInitialized( - {required final AppConfiguration appConfiguration, - final List serviceRegistryList}) = _$AppInitializedImpl; + {required final AppConfiguration appConfiguration, + final List serviceRegistryList, + final DashboardConfigSchema? dashboardConfigSchema}) = + _$AppInitializedImpl; const AppInitialized._() : super._(); AppConfiguration get appConfiguration; List get serviceRegistryList; + DashboardConfigSchema? get dashboardConfigSchema; @JsonKey(ignore: true) _$$AppInitializedImplCopyWith<_$AppInitializedImpl> get copyWith => throw _privateConstructorUsedError; diff --git a/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart b/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart index 04a43af5c..cf85a5848 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart @@ -6,6 +6,7 @@ import 'package:attendance_management/attendance_management.dart'; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_dss/digit_dss.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; @@ -16,6 +17,7 @@ import 'package:recase/recase.dart'; import '../../../models/app_config/app_config_model.dart' as app_configuration; import '../../data/local_store/no_sql/schema/app_configuration.dart'; import '../../data/local_store/no_sql/schema/row_versions.dart'; +import '../../data/local_store/no_sql/schema/service_registry.dart'; import '../../data/local_store/secure_store/secure_store.dart'; import '../../data/repositories/remote/mdms.dart'; import '../../models/app_config/app_config_model.dart'; @@ -96,6 +98,7 @@ class ProjectBloc extends Bloc { productVariantRemoteRepository; final LocalRepository productVariantLocalRepository; + final DashboardRemoteRepository dashboardRemoteRepository; BuildContext context; ProjectBloc({ @@ -126,6 +129,7 @@ class ProjectBloc extends Bloc { required this.individualRemoteRepository, required this.attendanceLogLocalRepository, required this.attendanceLogRemoteRepository, + required this.dashboardRemoteRepository, required this.context, }) : localSecureStore = localSecureStore ?? LocalSecureStore.instance, super(const ProjectState()) { @@ -434,6 +438,47 @@ class ProjectBloc extends Bloc { List boundaries; try { + try { + final startDate = DateTime( + DateTime.now().year, DateTime.now().month, DateTime.now().day) + .toLocal() + .millisecondsSinceEpoch; + final endDate = DateTime(DateTime.now().year, DateTime.now().month, + DateTime.now().day, 11, 59) + .toLocal() + .millisecondsSinceEpoch; + final serviceRegistry = await isar.serviceRegistrys.where().findAll(); + final dashboardConfig = await isar.dashboardConfigSchemas + .where() + .filter() + .chartsIsNotNull() + .chartsIsNotEmpty() + .findAll(); + final dashboardActionPath = Constants.getEndPoint( + serviceRegistry: serviceRegistry, + service: DashboardResponseModel.schemaName.toUpperCase(), + action: ApiOperation.search.toValue(), + entityName: DashboardResponseModel.schemaName); + if (dashboardConfig.isNotEmpty && + dashboardConfig.first.enableDashboard == true && + dashboardConfig.first.charts != null) { + await processDashboardConfig( + dashboardConfig.first.charts ?? [], + startDate, + endDate, + isar, + DateTime.now(), + dashboardRemoteRepository, + dashboardActionPath.trim().isNotEmpty + ? dashboardActionPath + : '/dashboard-analytics/dashboard/getChartV2', //[TODO: To be added to MDMS Service registry + envConfig.variables.tenantId, + event.model.id, + ); + } + } catch (e) { + print(e); + } final configResult = await mdmsRepository.searchAppConfig( envConfig.variables.mdmsApiPath, MdmsRequestModel( diff --git a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.dart b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.dart index 90722a346..44c01b1f5 100644 --- a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.dart +++ b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.dart @@ -1,3 +1,4 @@ +import 'package:digit_dss/digit_dss.dart'; import 'package:isar/isar.dart'; part 'app_configuration.g.dart'; @@ -222,4 +223,4 @@ class RefusalReasons { late String code; late String name; late bool active; -} \ No newline at end of file +} diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart index 018887d28..ef7974017 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart @@ -19,9 +19,9 @@ class MdmsRepository { const MdmsRepository(this._client); Future searchServiceRegistry( - String apiEndPoint, - Map body, - ) async { + String apiEndPoint, + Map body, + ) async { try { final response = await _client.post(apiEndPoint, data: body); @@ -34,9 +34,9 @@ class MdmsRepository { } FutureOr writeToRegistryDB( - ServiceRegistryPrimaryWrapperModel result, - Isar isar, - ) async { + ServiceRegistryPrimaryWrapperModel result, + Isar isar, + ) async { final List newServiceRegistryList = []; final data = result.serviceRegistry?.serviceRegistryList; if (data != null && data.isNotEmpty) { @@ -68,9 +68,9 @@ class MdmsRepository { } Future searchAppConfig( - String apiEndPoint, - Map body, - ) async { + String apiEndPoint, + Map body, + ) async { try { final response = await _client.post(apiEndPoint, data: body); @@ -90,9 +90,9 @@ class MdmsRepository { } Future searchPGRServiceDefinitions( - String apiEndPoint, - Map body, - ) async { + String apiEndPoint, + Map body, + ) async { try { final response = await _client.post(apiEndPoint, data: body); @@ -110,10 +110,10 @@ class MdmsRepository { } FutureOr writeToAppConfigDB( - app_configuration.AppConfigPrimaryWrapperModel result, - PGRServiceDefinitions pgrServiceDefinitions, - Isar isar, - ) async { + app_configuration.AppConfigPrimaryWrapperModel result, + PGRServiceDefinitions pgrServiceDefinitions, + Isar isar, + ) async { final appConfiguration = AppConfiguration(); final data = result.rowVersions?.rowVersionslist; @@ -152,7 +152,7 @@ class MdmsRepository { ..firebaseConfig = firebaseConfig; final List? languageList = - commonMasters?.stateInfo.first.languages.map((element) { + commonMasters?.stateInfo.first.languages.map((element) { final languages = Languages() ..label = element.label ..value = element.value; @@ -161,7 +161,7 @@ class MdmsRepository { }).toList(); final List? bandwidthBatchSize = - element?.bandWidthBatchSize.map((e) { + element?.bandWidthBatchSize.map((e) { final bandwidthBatchSizeElement = BandwidthBatchSize() ..batchSize = e.batchSize ..maxRange = e.maxRange @@ -171,7 +171,7 @@ class MdmsRepository { }).toList(); final List? downSyncBandWidthBatchSize = - element?.downSyncBandWidthBatchSize.map((e) { + element?.downSyncBandWidthBatchSize.map((e) { final bandwidthBatchSizeElement = BandwidthBatchSize() ..batchSize = e.batchSize ..maxRange = e.maxRange @@ -180,7 +180,7 @@ class MdmsRepository { return bandwidthBatchSizeElement; }).toList(); final List? callSupportList = - element?.callSupportOptions!.map((element) { + element?.callSupportOptions!.map((element) { final callNumber = CallSupportList() ..name = element.name ..code = element.code; @@ -189,7 +189,7 @@ class MdmsRepository { }).toList(); final List? householdDeletionReasonOptions = - element?.householdDeletionReasonOptions.map((element) { + element?.householdDeletionReasonOptions.map((element) { final deletionReasonOption = HouseholdDeletionReasonOptions() ..name = element.value ..code = element.code; @@ -198,8 +198,8 @@ class MdmsRepository { }).toList(); final List? - householdMemberDeletionReasonOptions = - element?.householdMemberDeletionReasonOptions.map((element) { + householdMemberDeletionReasonOptions = + element?.householdMemberDeletionReasonOptions.map((element) { final deletionReasonOption = HouseholdMemberDeletionReasonOptions() ..name = element.value ..code = element.code; @@ -208,7 +208,7 @@ class MdmsRepository { }).toList(); final List? genderOptions = - commonMasters?.genderType.map((element) { + commonMasters?.genderType.map((element) { final genderOption = GenderOptions() ..name = element.name ?? '' ..code = element.code; @@ -217,7 +217,7 @@ class MdmsRepository { }).toList(); final List? idTypeOptions = - element?.idTypeOptions.map((element) { + element?.idTypeOptions.map((element) { final idOption = IdTypeOptions() ..name = element.name ..code = element.code; @@ -226,7 +226,7 @@ class MdmsRepository { }).toList(); final List? checklistTypes = - element?.checklistTypes.map((e) { + element?.checklistTypes.map((e) { final checklist = ChecklistTypes() ..name = e.name ..code = e.code; @@ -235,7 +235,7 @@ class MdmsRepository { }).toList(); final List? transportTypes = - element?.transportTypes.map((e) { + element?.transportTypes.map((e) { final transportTypes = TransportTypes() ..name = e.name ..code = e.code; @@ -244,7 +244,7 @@ class MdmsRepository { }).toList(); final List? deliveryCommentOptions = - element?.deliveryCommentOptions.map((element) { + element?.deliveryCommentOptions.map((element) { final deliveryCommentOption = DeliveryCommentOptions() ..name = element.name ..code = element.code; @@ -253,7 +253,7 @@ class MdmsRepository { }).toList(); final List? interfaceList = - element?.backendInterface.first.interface.map((e) { + element?.backendInterface.first.interface.map((e) { final config = Config()..localStoreTTL = e.config.localStoreTTL; final interfaces = Interfaces() @@ -265,7 +265,7 @@ class MdmsRepository { }).toList(); final List? complaintTypesList = - pgrServiceDefinitions.serviceDefinitionWrapper?.definition.map((e) { + pgrServiceDefinitions.serviceDefinitionWrapper?.definition.map((e) { final types = ComplaintTypes() ..name = e.name ..code = e.serviceCode; @@ -290,7 +290,8 @@ class MdmsRepository { appConfiguration.complaintTypes = complaintTypesList; appConfiguration.bandwidthBatchSize = bandwidthBatchSize; appConfiguration.downSyncBandwidthBatchSize = downSyncBandWidthBatchSize; - appConfiguration.searchHouseHoldFilters = result.hcmWrapperModel?.searchHouseHoldFilters?.map((e) { + appConfiguration.searchHouseHoldFilters = + result.hcmWrapperModel?.searchHouseHoldFilters?.map((e) { final searchFilters = SearchHouseHoldFilters() ..name = e.name ..code = e.code @@ -300,42 +301,42 @@ class MdmsRepository { appConfiguration.symptomsTypes = result.hcmWrapperModel?.symptomsTypeList?.map((e) { - final symptomTypes = SymptomsTypes() - ..name = e.name - ..code = e.code - ..active = e.active; + final symptomTypes = SymptomsTypes() + ..name = e.name + ..code = e.code + ..active = e.active; - return symptomTypes; - }).toList(); + return symptomTypes; + }).toList(); appConfiguration.referralReasons = result.hcmWrapperModel?.referralReasonList?.map((e) { - final reasonTypes = ReferralReasons() - ..name = e.name - ..code = e.code - ..active = e.active; + final reasonTypes = ReferralReasons() + ..name = e.name + ..code = e.code + ..active = e.active; - return reasonTypes; - }).toList(); + return reasonTypes; + }).toList(); appConfiguration.houseStructureTypes = result.hcmWrapperModel?.houseStructureTypes?.map((e) { - final structureTypes = HouseStructureTypes() - ..name = e.name.toString() - ..code = e.code - ..active = e.active; + final structureTypes = HouseStructureTypes() + ..name = e.name.toString() + ..code = e.code + ..active = e.active; - return structureTypes; - }).toList(); + return structureTypes; + }).toList(); appConfiguration.refusalReasons = result.hcmWrapperModel?.refusalReasons?.map((e) { - final reasonTypes = RefusalReasons() - ..name = e.name.toString() - ..code = e.code - ..active = e.active; + final reasonTypes = RefusalReasons() + ..name = e.name.toString() + ..code = e.code + ..active = e.active; - return reasonTypes; - }).toList(); + return reasonTypes; + }).toList(); await isar.writeTxn(() async { await isar.appConfigurations.put(appConfiguration); @@ -344,9 +345,9 @@ class MdmsRepository { } Future searchRoleActions( - String apiEndPoint, - Map body, - ) async { + String apiEndPoint, + Map body, + ) async { try { final Response response = await _client.post(apiEndPoint, data: body); @@ -355,4 +356,4 @@ class MdmsRepository { rethrow; } } -} \ No newline at end of file +} diff --git a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart index 9fa5cbbdc..0be5c3e0f 100644 --- a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart +++ b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart @@ -1,3 +1,4 @@ +import 'package:digit_dss/digit_dss.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import '../referral_reasons/referral_reasons_model.dart'; @@ -87,13 +88,13 @@ class HCMWrapperModel with _$HCMWrapperModel { @JsonKey(name: 'TRANSPORT_TYPES') required List transportTypes, @JsonKey(name: 'SYMPTOM_TYPES') List? symptomsTypeList, - @JsonKey(name: 'SEARCH_HOUSEHOLD_FILTERS') List? searchHouseHoldFilters, + @JsonKey(name: 'SEARCH_HOUSEHOLD_FILTERS') + List? searchHouseHoldFilters, @JsonKey(name: 'REFERRAL_REASONS') List? referralReasonList, @JsonKey(name: 'HOUSE_STRUCTURE_TYPES') List? houseStructureTypes, - @JsonKey(name: 'REFUSAL_REASONS') - List? refusalReasons, + @JsonKey(name: 'REFUSAL_REASONS') List? refusalReasons, @JsonKey(name: 'FIREBASE_CONFIG') required List? firebaseConfig, }) = _HCMWrapperModel; diff --git a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart index a9b89154a..681d15053 100644 --- a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart +++ b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart @@ -49,4 +49,6 @@ enum MasterEnums { firebaseConfig, @MappableValue("SEARCH_HOUSEHOLD_FILTERS") searchHouseHoldFilters, + @MappableValue("dashboardConfig") + dashboardConfig, } diff --git a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart index e24f820ef..a8dabd797 100644 --- a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart +++ b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart @@ -69,6 +69,8 @@ class MasterEnumsMapper extends EnumMapper { return MasterEnums.firebaseConfig; case "SEARCH_HOUSEHOLD_FILTERS": return MasterEnums.searchHouseHoldFilters; + case "dashboardConfig": + return MasterEnums.dashboardConfig; default: throw MapperException.unknownEnumValue(value); } @@ -121,6 +123,8 @@ class MasterEnumsMapper extends EnumMapper { return "FIREBASE_CONFIG"; case MasterEnums.searchHouseHoldFilters: return "SEARCH_HOUSEHOLD_FILTERS"; + case MasterEnums.dashboardConfig: + return "dashboardConfig"; } } } diff --git a/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart b/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart index 6fbf4cbe4..23977bc60 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart @@ -100,7 +100,7 @@ class _BoundarySelectionPageState return initState.maybeWhen( orElse: () => const Offstage(), - initialized: (appConfiguration, _) => + initialized: (appConfiguration, _, __) => BlocListener( listener: (context, state) { if (state.boundaryList.isNotEmpty) { diff --git a/apps/health_campaign_field_worker_app/lib/pages/complaints/registration/complaint_type.dart b/apps/health_campaign_field_worker_app/lib/pages/complaints/registration/complaint_type.dart index 92156cf7f..d1f30f77c 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/complaints/registration/complaint_type.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/complaints/registration/complaint_type.dart @@ -128,8 +128,11 @@ class _ComplaintTypePageState extends LocalizedState { builder: (context, state) { return state.maybeWhen( orElse: () => const Offstage(), - initialized: - (appConfiguration, serviceRegistryList) { + initialized: ( + appConfiguration, + serviceRegistryList, + _, + ) { var complaintTypes = appConfiguration .complaintTypes ?.map((e) => e.code) diff --git a/apps/health_campaign_field_worker_app/lib/pages/home.dart b/apps/health_campaign_field_worker_app/lib/pages/home.dart index 90d538682..8f7d81b75 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/home.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/home.dart @@ -9,11 +9,16 @@ import 'package:digit_components/digit_components.dart'; import 'package:digit_components/widgets/atoms/digit_toaster.dart'; import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_dss/data/local_store/no_sql/schema/dashboard_config_schema.dart'; +import 'package:digit_dss/models/entities/dashboard_response_model.dart'; +import 'package:digit_dss/router/dashboard_router.gm.dart'; +import 'package:digit_dss/utils/utils.dart'; import 'package:drift_db_viewer/drift_db_viewer.dart'; import 'package:flutter/material.dart'; import 'package:flutter_background_service/flutter_background_service.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:health_campaign_field_worker_app/data/local_store/no_sql/schema/service_registry.dart'; import 'package:inventory_management/inventory_management.dart'; import 'package:inventory_management/router/inventory_router.gm.dart'; import 'package:referral_reconciliation/referral_reconciliation.dart'; @@ -318,6 +323,16 @@ class _HomePageState extends LocalizedState { final Map homeItemsMap = { // INFO : Need to add home items of package Here + i18.home.dashboard: homeShowcaseData.dashBoard.buildWith( + child: HomeItemCard( + icon: Icons.bar_chart_sharp, + label: i18.home.dashboard, + onPressed: () { + context.router.push(const UserDashboardRoute()); + }, + ), + ), + i18.home.beneficiaryLabel: homeShowcaseData.distributorBeneficiaries.buildWith( child: HomeItemCard( @@ -348,7 +363,11 @@ class _HomePageState extends LocalizedState { onPressed: () { context.read().state.maybeWhen( orElse: () {}, - initialized: (AppConfiguration appConfiguration, _) { + initialized: ( + AppConfiguration appConfiguration, + _, + __, + ) { context.router.push(ManageStocksRoute()); }, ); @@ -419,7 +438,11 @@ class _HomePageState extends LocalizedState { onPressed: () async { context.read().state.maybeWhen( orElse: () {}, - initialized: (AppConfiguration appConfiguration, _) { + initialized: ( + AppConfiguration appConfiguration, + _, + __, + ) { context.router.push(SearchReferralReconciliationsRoute()); }, ); @@ -460,18 +483,12 @@ class _HomePageState extends LocalizedState { }, ), ), - i18.home.db: homeShowcaseData.db.buildWith( + i18.home.dashboard: homeShowcaseData.dashBoard.buildWith( child: HomeItemCard( - icon: Icons.table_chart, - label: i18.home.db, + icon: Icons.bar_chart_sharp, + label: i18.home.dashboard, onPressed: () { - Navigator.of(context).push( - MaterialPageRoute( - builder: (context) => DriftDbViewer( - context.read(), - ), - ), - ); + context.router.push(const UserDashboardRoute()); }, ), ), @@ -479,6 +496,20 @@ class _HomePageState extends LocalizedState { final Map homeItemsShowcaseMap = { // INFO : Need to add showcase keys of package Here + i18.home.dashboard: homeShowcaseData.dashBoard.showcaseKey, + + i18.home.dashboard: homeShowcaseData.dashBoard.showcaseKey, + + i18.home.dashboard: homeShowcaseData.dashBoard.showcaseKey, + + i18.home.dashboard: homeShowcaseData.dashBoard.showcaseKey, + + i18.home.dashboard: homeShowcaseData.dashBoard.showcaseKey, + + i18.home.dashboard: homeShowcaseData.dashBoard.showcaseKey, + + i18.home.dashboard: homeShowcaseData.dashBoard.showcaseKey, + i18.home.beneficiaryLabel: homeShowcaseData.distributorBeneficiaries.showcaseKey, i18.home.manageStockLabel: @@ -497,6 +528,7 @@ class _HomePageState extends LocalizedState { i18.home.db: homeShowcaseData.db.showcaseKey, i18.home.closedHouseHoldLabel: homeShowcaseData.closedHouseHold.showcaseKey, + i18.home.dashboard: homeShowcaseData.dashBoard.showcaseKey, }; final homeItemsLabel = [ @@ -512,6 +544,7 @@ class _HomePageState extends LocalizedState { i18.home.beneficiaryReferralLabel, i18.home.manageAttendanceLabel, i18.home.db, + i18.home.dashboard, ]; final List filteredLabels = homeItemsLabel @@ -520,7 +553,8 @@ class _HomePageState extends LocalizedState { .map((e) => e.displayName) .toList() .contains(element) || - element == i18.home.db) + element == i18.home.db || + element == i18.home.dashboard) .toList(); final showcaseKeys = filteredLabels @@ -616,7 +650,8 @@ class _HomePageState extends LocalizedState { void setPackagesSingleton(BuildContext context) { context.read().state.maybeWhen( orElse: () {}, - initialized: (AppConfiguration appConfiguration, _) { + initialized: (AppConfiguration appConfiguration, List serviceRegistry, + DashboardConfigSchema? dashboardConfigSchema,) { loadLocalization(context, appConfiguration); // INFO : Need to add singleton of package Here RegistrationDeliverySingleton().setInitialData( @@ -712,6 +747,18 @@ void setPackagesSingleton(BuildContext context) { ..code = e.code) .toList(), ); + DashboardSingleton().setInitialData( + projectId: context.projectId, + tenantId: envConfig.variables.tenantId, + dashboardConfig: dashboardConfigSchema, + appVersion: Constants().version, + selectedProject: context.selectedProject, + actionPath: Constants.getEndPoint( + serviceRegistry: serviceRegistry, + service: DashboardResponseModel.schemaName.toUpperCase(), + action: ApiOperation.search.toValue(), + entityName: DashboardResponseModel.schemaName, + )); }); } diff --git a/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart b/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart index 8214b2477..601e5350c 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart @@ -8,8 +8,8 @@ import '../blocs/app_initialization/app_initialization.dart'; import '../blocs/localization/app_localization.dart'; import '../blocs/localization/localization.dart'; import '../router/app_router.dart'; -import '../utils/utils.dart'; import '../utils/i18_key_constants.dart' as i18; +import '../utils/utils.dart'; @RoutePage() class LanguageSelectionPage extends StatelessWidget { diff --git a/apps/health_campaign_field_worker_app/lib/pages/profile.dart b/apps/health_campaign_field_worker_app/lib/pages/profile.dart index 2604031b7..b42a78708 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/profile.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/profile.dart @@ -69,7 +69,11 @@ class _ProfilePageState extends LocalizedState { _genderKey: FormControl( value: context.read().state.maybeWhen( orElse: () => null, - initialized: (appConfiguration, serviceRegistryList) { + initialized: ( + appConfiguration, + serviceRegistryList, + _, + ) { return appConfiguration.genderOptions ?.map((e) => e.code) .firstWhereOrNull((element) => element == user?.gender); @@ -254,7 +258,11 @@ class _ProfilePageState extends LocalizedState { AppInitializationState>( builder: (context, state) => state.maybeWhen( orElse: () => const Offstage(), - initialized: (appConfiguration, _) { + initialized: ( + appConfiguration, + _, + __, + ) { return Column( children: [ Row( diff --git a/apps/health_campaign_field_worker_app/lib/pages/reports/beneficiary/beneficaries_report.dart b/apps/health_campaign_field_worker_app/lib/pages/reports/beneficiary/beneficaries_report.dart index 4440e7d0e..4ea93bd81 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/reports/beneficiary/beneficaries_report.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/reports/beneficiary/beneficaries_report.dart @@ -50,8 +50,8 @@ class BeneficiariesReportState extends LocalizedState { @override void deactivate() { context.read().add( - const DownSyncResetStateEvent(), - ); + const DownSyncResetStateEvent(), + ); super.deactivate(); } @@ -64,7 +64,12 @@ class BeneficiariesReportState extends LocalizedState { builder: (ctx, initState) { return initState.maybeWhen( orElse: () => const Offstage(), - initialized: (appConfiguration, _) => ScrollableContent( + initialized: ( + appConfiguration, + _, + __, + ) => + ScrollableContent( footer: SizedBox( child: DigitCard( margin: const EdgeInsets.only(top: kPadding), @@ -109,21 +114,21 @@ class BeneficiariesReportState extends LocalizedState { ), }, getBatchSize: ( - batchSize, - projectId, - boundaryCode, - pendingSync, - boundaryName, - ) => + batchSize, + projectId, + boundaryCode, + pendingSync, + boundaryName, + ) => context.read().add( - DownSyncCheckTotalCountEvent( - projectId: context.projectId, - boundaryCode: boundaryCode, - pendingSyncCount: pendingSyncCount, - boundaryName: boundaryName, - batchSize: batchSize, - ), - ), + DownSyncCheckTotalCountEvent( + projectId: context.projectId, + boundaryCode: boundaryCode, + pendingSyncCount: pendingSyncCount, + boundaryName: boundaryName, + batchSize: batchSize, + ), + ), report: (downSyncCriteriaList) { setState(() { downSyncList = downSyncCriteriaList; @@ -153,39 +158,39 @@ class BeneficiariesReportState extends LocalizedState { ), dataFound: (initialServerCount, batchSize) => showDownloadDialog( - context, - model: DownloadBeneficiary( - title: localizations.translate( - initialServerCount > 0 - ? i18.beneficiaryDetails.dataFound - : i18.beneficiaryDetails.noDataFound, - ), - projectId: context.projectId, - appConfiguartion: appConfiguration, - boundary: selectedBoundary!.code.toString(), - batchSize: 5, - totalCount: initialServerCount, - content: localizations.translate( - initialServerCount > 0 - ? i18.beneficiaryDetails.dataFoundContent - : i18.beneficiaryDetails.noDataFoundContent, - ), - primaryButtonLabel: localizations.translate( - initialServerCount > 0 - ? i18.common.coreCommonDownload - : i18.common.coreCommonGoback, - ), - secondaryButtonLabel: localizations.translate( - initialServerCount > 0 - ? i18.beneficiaryDetails + context, + model: DownloadBeneficiary( + title: localizations.translate( + initialServerCount > 0 + ? i18.beneficiaryDetails.dataFound + : i18.beneficiaryDetails.noDataFound, + ), + projectId: context.projectId, + appConfiguartion: appConfiguration, + boundary: selectedBoundary!.code.toString(), + batchSize: 5, + totalCount: initialServerCount, + content: localizations.translate( + initialServerCount > 0 + ? i18.beneficiaryDetails.dataFoundContent + : i18.beneficiaryDetails.noDataFoundContent, + ), + primaryButtonLabel: localizations.translate( + initialServerCount > 0 + ? i18.common.coreCommonDownload + : i18.common.coreCommonGoback, + ), + secondaryButtonLabel: localizations.translate( + initialServerCount > 0 + ? i18.beneficiaryDetails .proceedWithoutDownloading - : i18.acknowledgementSuccess.goToHome, - ), - boundaryName: selectedBoundary!.name.toString(), - ), - dialogType: DigitProgressDialogType.dataFound, - isPop: true, + : i18.acknowledgementSuccess.goToHome, ), + boundaryName: selectedBoundary!.name.toString(), + ), + dialogType: DigitProgressDialogType.dataFound, + isPop: true, + ), inProgress: (syncCount, totalCount) { downloadProgress.add( min( @@ -320,7 +325,7 @@ class BeneficiariesReportState extends LocalizedState { boundaryName: selectedBoundary!.name.toString(), ), dialogType: - DigitProgressDialogType.insufficientStorage, + DigitProgressDialogType.insufficientStorage, isPop: true, ), ); @@ -339,9 +344,8 @@ class BeneficiariesReportState extends LocalizedState { ), ), ), - ...downSyncList - .map( - (e) => DigitCard( + ...downSyncList.map( + (e) => DigitCard( child: Column( children: [ DigitTableCard( @@ -353,21 +357,20 @@ class BeneficiariesReportState extends LocalizedState { i18.beneficiaryDetails.status, ): e.offset == 0 && e.limit == 0 ? localizations.translate( - i18.beneficiaryDetails - .downloadcompleted, - ) + i18.beneficiaryDetails + .downloadcompleted, + ) : localizations.translate( - i18.beneficiaryDetails - .partialdownloaded, - ), + i18.beneficiaryDetails + .partialdownloaded, + ), localizations.translate( i18.beneficiaryDetails.downloadtime, ): e.lastSyncedTime != null ? '${DigitDateUtils.getTimeFromTimestamp(e.lastSyncedTime!)} on ${DigitDateUtils.getDateFromTimestamp(e.lastSyncedTime!)}' : '--', localizations.translate( - i18.beneficiaryDetails - .totalrecorddownload, + i18.beneficiaryDetails.totalrecorddownload, ): e.offset == 0 && e.limit == 0 ? '${e.totalCount}/${e.totalCount}' : '${e.offset}/${e.totalCount}', @@ -395,35 +398,31 @@ class BeneficiariesReportState extends LocalizedState { name: e.boundaryName, ); }); - context - .read() - .add( - DownSyncGetBatchSizeEvent( - appConfiguration: [ - appConfiguration, - ], - projectId: context.projectId, - boundaryCode: e.locality!, - pendingSyncCount: - pendingSyncCount, - boundaryName: - e.boundaryName.toString(), - ), - ); + context.read().add( + DownSyncGetBatchSizeEvent( + appConfiguration: [ + appConfiguration, + ], + projectId: context.projectId, + boundaryCode: e.locality!, + pendingSyncCount: pendingSyncCount, + boundaryName: + e.boundaryName.toString(), + ), + ); }, ), ], ), ), - ) - , + ), downSyncList.isEmpty ? NoResultCard( - align: Alignment.center, - label: localizations.translate( - i18.common.noResultsFound, - ), - ) + align: Alignment.center, + label: localizations.translate( + i18.common.noResultsFound, + ), + ) : const SizedBox.shrink(), ]), ), @@ -435,4 +434,4 @@ class BeneficiariesReportState extends LocalizedState { ), ); } -} \ No newline at end of file +} diff --git a/apps/health_campaign_field_worker_app/lib/router/app_router.dart b/apps/health_campaign_field_worker_app/lib/router/app_router.dart index 0c4a80566..6f0420ad8 100644 --- a/apps/health_campaign_field_worker_app/lib/router/app_router.dart +++ b/apps/health_campaign_field_worker_app/lib/router/app_router.dart @@ -4,6 +4,8 @@ import 'package:auto_route/auto_route.dart'; import 'package:closed_household/router/closed_household_router.dart'; import 'package:closed_household/router/closed_household_router.gm.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_dss/router/dashboard_router.dart'; +import 'package:digit_dss/router/dashboard_router.gm.dart'; import 'package:digit_scanner/router/digit_scanner_router.dart'; import 'package:digit_scanner/router/digit_scanner_router.gm.dart'; import 'package:flutter/material.dart'; @@ -56,6 +58,7 @@ part 'app_router.gr.dart'; DigitScannerPackageRoute, RegistrationDeliveryRoute, ClosedHouseholdPackageRoute, + DashboardRoute, ], ) class AppRouter extends _$AppRouter { @@ -88,7 +91,11 @@ class AppRouter extends _$AppRouter { page: BeneficiariesReportRoute.page, path: 'beneficiary-downsync-report', ), - + // DSS Dashboard Routes + AutoRoute( + page: UserDashboardRoute.page, + path: 'dashboard', + ), AutoRoute( page: RegistrationDeliveryWrapperRoute.page, path: 'registration-delivery-wrapper', @@ -236,7 +243,6 @@ class AppRouter extends _$AppRouter { page: ProjectFacilitySelectionRoute.page, path: 'select-project-facilities', ), - AutoRoute( page: FacilitySelectionRoute.page, path: 'select-facilities', diff --git a/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart b/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart index ff60f5644..68d85a6af 100644 --- a/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart +++ b/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart @@ -311,6 +311,7 @@ abstract class _$AppRouter extends RootStackRouter { ...DigitScannerPackageRoute().pagesMap, ...RegistrationDeliveryRoute().pagesMap, ...ClosedHouseholdPackageRoute().pagesMap, + ...DashboardRoute().pagesMap, }; } diff --git a/apps/health_campaign_field_worker_app/lib/utils/constants.dart b/apps/health_campaign_field_worker_app/lib/utils/constants.dart index 6f180b149..8c6429be1 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/constants.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/constants.dart @@ -3,6 +3,9 @@ import 'package:closed_household/utils/utils.dart'; import 'package:collection/collection.dart'; import 'package:digit_components/utils/app_logger.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_dss/digit_dss.dart'; +import 'package:digit_firebase_services/digit_firebase_services.dart' + as firebase_services; import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:inventory_management/inventory_management.dart'; @@ -10,10 +13,7 @@ import 'package:isar/isar.dart'; import 'package:path_provider/path_provider.dart'; import 'package:referral_reconciliation/referral_reconciliation.dart'; import 'package:registration_delivery/registration_delivery.dart'; -import 'package:digit_firebase_services/digit_firebase_services.dart' - as firebase_services; -import '../blocs/app_initialization/app_initialization.dart'; import '../data/local_store/no_sql/schema/app_configuration.dart'; import '../data/local_store/no_sql/schema/entity_mapper.dart'; import '../data/local_store/no_sql/schema/localization.dart'; @@ -61,6 +61,8 @@ class Constants { OpLogSchema, ProjectTypeListCycleSchema, RowVersionListSchema, + DashboardConfigSchemaSchema, + DashboardResponseSchema, ], name: 'HCM', inspector: true, @@ -164,7 +166,8 @@ class Constants { _version = version; } - static const String closedHouseholdSvg = 'assets/icons/svg/closed_household.svg'; + static const String closedHouseholdSvg = + 'assets/icons/svg/closed_household.svg'; static List getRemoteRepositories( Dio dio, @@ -232,12 +235,12 @@ class Constants { } static String getEndPoint({ - required AppInitialized state, + required List serviceRegistry, required String service, required String action, required String entityName, }) { - final actionResult = state.serviceRegistryList + final actionResult = serviceRegistry .firstWhereOrNull((element) => element.service == service) ?.actions .firstWhereOrNull((element) => element.entityName == entityName) diff --git a/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart b/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart index dfa46329f..fd4f79ff3 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart @@ -11,6 +11,7 @@ const checklist = Checklist(); const complaints = Complaints(); const syncDialog = SyncDialog(); const homeShowcase = HomeShowcase(); +const dashBoard = Dashboard(); const householdLocationShowcase = HouseholdLocationShowcase(); const householdLocation = HouseholdLocation(); @@ -592,6 +593,7 @@ class Home { String get deleteAllLabel => 'HOME_DELETE_ALL_LABEL'; String get db => 'HOME_DB_LABEL'; + String get dashboard => 'HOME_DASHBOARD_LABEL'; String get beneficiaryReferralLabel => 'HOME_BENEFICIARY_REFERRAL_LABEL'; String get manageAttendanceLabel => 'HOME_MANAGE_ATTENDANCE_LABEL'; @@ -1033,4 +1035,10 @@ class BeneficiaryDetails { String get insufficientStorageContent => 'INSUFFICIENT_STORAGE_WARNING_CONTENT'; String get recordCycle => 'BENEFICIARY_DETAILS_RECORD_CYCLE'; -} \ No newline at end of file +} + +class Dashboard { + const Dashboard(); + + String get dashboardHeaderLabel => 'DASHBOARD_HEADER'; +} diff --git a/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart b/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart index 23ac1eae9..6e62855fe 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart @@ -1,23 +1,25 @@ import 'dart:ui'; + +import 'package:attendance_management/blocs/app_localization.dart' + as attendance_localization; import 'package:closed_household/blocs/app_localization.dart' as closed_household_localization; import 'package:digit_data_model/data/local_store/sql_store/sql_store.dart'; -import 'package:flutter_localizations/flutter_localizations.dart'; -import 'package:attendance_management/blocs/app_localization.dart' - as attendance_localization; +import 'package:digit_dss/blocs/app_localization.dart' + as digit_dss_localization; import 'package:digit_scanner/blocs/app_localization.dart' as scanner_localization; -import 'package:referral_reconciliation/blocs/app_localization.dart' - as referral_reconciliation_localization; +import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:inventory_management/blocs/app_localization.dart' as inventory_localization; +import 'package:referral_reconciliation/blocs/app_localization.dart' + as referral_reconciliation_localization; import 'package:registration_delivery/blocs/app_localization.dart' as registration_delivery_localization; import '../blocs/localization/app_localization.dart'; import '../data/local_store/no_sql/schema/app_configuration.dart'; import '../data/repositories/local/localization.dart'; -import 'utils.dart'; getAppLocalizationDelegates({ required LocalSqlDataStore sql, @@ -54,5 +56,9 @@ getAppLocalizationDelegates({ LocalizationLocalRepository().returnLocalizationFromSQL(sql) as Future, appConfig.languages!, ), + digit_dss_localization.DashboardLocalization.getDelegate( + LocalizationLocalRepository().returnLocalizationFromSQL(sql) as Future, + appConfig.languages!, + ) ]; } diff --git a/apps/health_campaign_field_worker_app/lib/utils/utils.dart b/apps/health_campaign_field_worker_app/lib/utils/utils.dart index 9e0ba86d8..b4c11226c 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/utils.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/utils.dart @@ -12,6 +12,7 @@ import 'package:digit_components/widgets/digit_dialog.dart'; import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/data_model.init.dart' as data_model_mappers; +import 'package:digit_dss/digit_dss.dart' as dss_mappers; import 'package:disable_battery_optimization/disable_battery_optimization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_background_service/flutter_background_service.dart'; @@ -394,6 +395,7 @@ initializeAllMappers() async { Future(() => inventory_mappers.initializeMappers()), Future(() => data_model_mappers.initializeMappers()), Future(() => registration_delivery_mappers.initializeMappers()), + Future(() => dss_mappers.initializeMappers()), ]; await Future.wait(initializations); } diff --git a/apps/health_campaign_field_worker_app/lib/widgets/showcase/config/home_showcase.dart b/apps/health_campaign_field_worker_app/lib/widgets/showcase/config/home_showcase.dart index 850ee01c2..0d712dc39 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/showcase/config/home_showcase.dart +++ b/apps/health_campaign_field_worker_app/lib/widgets/showcase/config/home_showcase.dart @@ -99,6 +99,9 @@ class _HomePageShowcaseData { messageLocalizationKey: i18.home.db, ); + final dashBoard = ShowcaseItemBuilder( + messageLocalizationKey: i18.home.dashboard, + ); final closedHouseHold = ShowcaseItemBuilder( messageLocalizationKey: i18.home.closedHouseHoldLabel, ); diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index e4a283e8c..c0fdd6e2e 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -490,17 +490,26 @@ packages: digit_components: dependency: "direct main" description: - path: "../../packages/digit_components" - relative: true - source: path - version: "1.0.0+8" + name: digit_components + sha256: "90e12017934343a197a0c25bec00e5fc28e19cfbf11e522798cc39719609612c" + url: "https://pub.dev" + source: hosted + version: "1.0.0+9" digit_data_model: dependency: "direct main" description: - path: "../../packages/digit_data_model" + name: digit_data_model + sha256: "5559c3e652a24f3d24f324d275399f6e864ca5671285386516b94fdf9fe8724c" + url: "https://pub.dev" + source: hosted + version: "1.0.3-dev.3" + digit_dss: + dependency: "direct main" + description: + path: "../../packages/digit_dss" relative: true source: path - version: "1.0.3-dev.2" + version: "0.0.1-dev.1" digit_firebase_services: dependency: "direct main" description: @@ -1530,10 +1539,11 @@ packages: registration_delivery: dependency: "direct main" description: - path: "../../packages/registration_delivery" - relative: true - source: path - version: "1.0.3-dev.4" + name: registration_delivery + sha256: c4bc83d994d8006a3f1a3c5a90cd6d4f07873b01c14a16fdc06e83d99946face + url: "https://pub.dev" + source: hosted + version: "1.0.3-dev.5" remove_emoji_input_formatter: dependency: transitive description: diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 89467070a..fbfd4cac8 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -69,9 +69,10 @@ dependencies: digit_scanner: ^1.0.3-dev.1 inventory_management: ^1.0.2 referral_reconciliation: ^1.0.2 - digit_data_model: ^1.0.3-dev.2 - registration_delivery: ^1.0.3-dev.4 + digit_data_model: ^1.0.3-dev.3 + registration_delivery: ^1.0.3-dev.5 disable_battery_optimization: ^1.1.1 + digit_dss: ^0.0.1-dev.1 closed_household: ^0.0.0-dev.2 dev_dependencies: diff --git a/packages/digit_data_model/CHANGELOG.md b/packages/digit_data_model/CHANGELOG.md index 4d4d7c5d4..bf3fff36a 100644 --- a/packages/digit_data_model/CHANGELOG.md +++ b/packages/digit_data_model/CHANGELOG.md @@ -1,30 +1,44 @@ +## 1.0.3-dev.3 + +* Created localization table + - Creation of the localization table. + ## 1.0.3-dev.2 + * Reverted user_actions db changes to accommodate closed_household flow changes + - Reverted user_actions database changes to support closed_household flow changes. ## 1.0.3-dev.1 * Added new user_actions db + - Added a new user_actions database. ## 1.0.2 * Added try catch for local repository to handle db lock + - Implemented try-catch for local repository to handle database locks. ## 1.0.1 * Added Service and Service Definition Bloc + - Introduction of Service and Service Definition Bloc. ## 1.0.0 * Initial stable release + - First stable release of the Digit Data Model. ## 0.0.0-dev.3 * Supports boundary v2 and updated single entities to list for all search models + - Added support for boundary v2 and updated single entities to lists for all search models. ## 0.0.0-dev.2 * Boundary v2 Integrated, to use Boundary v1 0.0.0-dev.1 version can be used + - Integration of Boundary v2 with the option to use Boundary v1 version 0.0.0-dev.1. ## 0.0.0-dev.1 -* Digit Data Model Initial Release \ No newline at end of file +* Digit Data Model Initial Release + - This marks the initial release of the Digit Data Model. \ No newline at end of file diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart index dd992c9d3..3c37e452b 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart @@ -39084,8 +39084,6 @@ abstract class _$LocalSqlDataStore extends GeneratedDatabase { late final Index referralProjectbeneficiaryclientref = Index( 'referral_projectbeneficiaryclientref', 'CREATE INDEX referral_projectbeneficiaryclientref ON referral (project_beneficiary_client_reference_id)'); - late final Index localizationLocale = Index('localization_locale', - 'CREATE INDEX localization_locale ON localization (locale)'); late final Index localizationModule = Index('localization_module', 'CREATE INDEX localization_module ON localization (module)'); @override @@ -39163,7 +39161,6 @@ abstract class _$LocalSqlDataStore extends GeneratedDatabase { referralClinetref, referralProjectid, referralProjectbeneficiaryclientref, - localizationLocale, localizationModule ]; } diff --git a/packages/digit_data_model/lib/models/entities/project.dart b/packages/digit_data_model/lib/models/entities/project.dart index 9a552bd9c..eabf97622 100644 --- a/packages/digit_data_model/lib/models/entities/project.dart +++ b/packages/digit_data_model/lib/models/entities/project.dart @@ -1,7 +1,6 @@ // Generated using mason. Do not modify by hand import 'package:dart_mappable/dart_mappable.dart'; import 'package:digit_data_model/data_model.dart'; -import 'package:digit_data_model/models/entities/project_type.dart'; import 'package:drift/drift.dart'; part 'project.mapper.dart'; @@ -180,6 +179,7 @@ class ProjectAdditionalFields extends AdditionalFields class ProjectAdditionalDetails with ProjectAdditionalDetailsMappable { final ProjectTypeModel? projectType; + ProjectAdditionalDetails({ this.projectType, }) : super(); diff --git a/packages/digit_data_model/pubspec.yaml b/packages/digit_data_model/pubspec.yaml index 524170ec6..a3914286a 100644 --- a/packages/digit_data_model/pubspec.yaml +++ b/packages/digit_data_model/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_data_model description: The digit_data_model package is a data modeling library. It defines various classes, enums, and functions. -version: 1.0.3-dev.2 +version: 1.0.3-dev.3 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_data_model repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/digit_dss/.gitignore b/packages/digit_dss/.gitignore new file mode 100644 index 000000000..ac5aa9893 --- /dev/null +++ b/packages/digit_dss/.gitignore @@ -0,0 +1,29 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. +/pubspec.lock +**/doc/api/ +.dart_tool/ +build/ diff --git a/packages/digit_dss/.metadata b/packages/digit_dss/.metadata new file mode 100644 index 000000000..fe59252be --- /dev/null +++ b/packages/digit_dss/.metadata @@ -0,0 +1,10 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9" + channel: "stable" + +project_type: package diff --git a/packages/digit_dss/CHANGELOG.md b/packages/digit_dss/CHANGELOG.md new file mode 100644 index 000000000..b998fdb06 --- /dev/null +++ b/packages/digit_dss/CHANGELOG.md @@ -0,0 +1,2 @@ +## 0.0.1-dev.1 +* Initial DSS Dashboard Release diff --git a/packages/digit_dss/LICENSE b/packages/digit_dss/LICENSE new file mode 100644 index 000000000..f7d7ac958 --- /dev/null +++ b/packages/digit_dss/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 eGovernments Foundation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/packages/digit_dss/README.md b/packages/digit_dss/README.md new file mode 100644 index 000000000..863cd78e5 --- /dev/null +++ b/packages/digit_dss/README.md @@ -0,0 +1,20 @@ +# Digit DSS + +DSS Dashboard for campaign management + +## Features + +Work in progress + +## Getting Started + +To use this package, add the following dependency to your `pubspec.yaml` file: + +```yaml +dependencies: + digit_dss: ^any +``` + +## Usage + +Work in progress \ No newline at end of file diff --git a/packages/digit_dss/analysis_options.yaml b/packages/digit_dss/analysis_options.yaml new file mode 100644 index 000000000..a5744c1cf --- /dev/null +++ b/packages/digit_dss/analysis_options.yaml @@ -0,0 +1,4 @@ +include: package:flutter_lints/flutter.yaml + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/packages/digit_dss/lib/blocs/app_localization.dart b/packages/digit_dss/lib/blocs/app_localization.dart new file mode 100644 index 000000000..a9180ab45 --- /dev/null +++ b/packages/digit_dss/lib/blocs/app_localization.dart @@ -0,0 +1,51 @@ +import 'package:flutter/material.dart'; + +import 'dashboard_localization_delegate.dart'; + +// Class responsible for handling attendance localization +class DashboardLocalization { + final Locale locale; + final Future localizedStrings; + final List languages; + + DashboardLocalization(this.locale, this.localizedStrings, this.languages); + + // Method to get the current localization instance from context + static DashboardLocalization of(BuildContext context) { + return Localizations.of( + context, DashboardLocalization)!; + } + + static final List _localizedStrings = []; + + // Method to get the delegate for localization + static LocalizationsDelegate getDelegate( + Future localizedStrings, List languages) => + DashboardLocalizationDelegate(localizedStrings, languages); + + // Method to load localized strings + Future load() async { + _localizedStrings.clear(); + // Iterate over localized strings and filter based on locale + for (var element in await localizedStrings) { + if (element.locale == '${locale.languageCode}_${locale.countryCode}') { + _localizedStrings.add(element); + } + } + + return true; + } + + // Method to translate a given localized value + String translate(String localizedValues) { + if (_localizedStrings.isEmpty) { + return localizedValues; + } else { + final index = _localizedStrings.indexWhere( + (medium) => medium.code == localizedValues, + ); + + return index != -1 ? _localizedStrings[index].message : localizedValues; + } + } +} diff --git a/packages/digit_dss/lib/blocs/dashboard.dart b/packages/digit_dss/lib/blocs/dashboard.dart new file mode 100644 index 000000000..56836e85b --- /dev/null +++ b/packages/digit_dss/lib/blocs/dashboard.dart @@ -0,0 +1,265 @@ +import 'dart:async'; // Import the dart:async library for asynchronous operations + +import 'package:collection/collection.dart'; // Import the collection package for collection utilities +import 'package:digit_components/models/digit_table_model.dart'; // Import the digit_table_model.dart file from the digit_components package +import 'package:digit_components/theme/colors.dart'; // Import the colors.dart file from the digit_components package +import 'package:digit_components/theme/digit_theme.dart'; // Import the digit_theme.dart file from the digit_components package +import 'package:digit_dss/digit_dss.dart'; // Import the digit_dss.dart file from the digit_dss package +import 'package:flutter/cupertino.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; // Import the flutter_bloc package for state management +import 'package:freezed_annotation/freezed_annotation.dart'; // Import the freezed_annotation package for code generation +import 'package:isar/isar.dart'; // Import the isar package for database management + +part 'dashboard.freezed.dart'; // Generate the part file for freezed annotations + +typedef DashboardEmitter = Emitter< + DashboardState>; // Define a typedef for the Emitter of DashboardState + +class DashboardBloc extends Bloc { + final Isar isar; // Isar database instance + final DashboardRemoteRepository + dashboardRemoteRepo; // Remote repository for dashboard data + + DashboardBloc( + super.initialState, { + required this.isar, + required this.dashboardRemoteRepo, + }) { + on(_handleSearch); // Register the _handleSearch event handler + on(_handleRefresh); // Register the _handleRefresh event handler + } + + // Event handler for refreshing the dashboard + FutureOr _handleRefresh( + DashboardRefreshEvent event, + DashboardEmitter emit, + ) async { + emit(const DashboardState.loading()); // Emit loading state + try { + bool enableDashboard = + DashboardSingleton().dashboardConfig?.enableDashboard ?? + false; // Check if dashboard is enabled + final dashboardConfig = DashboardSingleton() + .dashboardConfig + ?.charts; // Get dashboard configuration + if (!enableDashboard || + (dashboardConfig?.where((chart) => + (chart.name ?? '').isNotEmpty && + (chart.chartType ?? '').isNotEmpty) ?? + []) + .toList() + .isEmpty) { + emit( + const DashboardErrorState()); // Emit error state if dashboard is not enabled or config is empty + } else { + final isConnected = + await getIsConnected(); // Check network connectivity + if (isConnected && event.syncFromServer) { + final startDate = DateTime(event.selectedDate.year, + event.selectedDate.month, event.selectedDate.day) + .toLocal() + .millisecondsSinceEpoch; // Get start date in milliseconds + final endDate = DateTime(event.selectedDate.year, + event.selectedDate.month, event.selectedDate.day, 11, 59) + .toLocal() + .millisecondsSinceEpoch; // Get end date in milliseconds + + try { + await processDashboardConfig( + dashboardConfig + ?.where((chart) => + (chart.name ?? '').isNotEmpty && + (chart.chartType ?? '').isNotEmpty) + .toList() ?? + [], + startDate, + endDate, + isar, + event.selectedDate, + dashboardRemoteRepo, + DashboardSingleton().actionPath, + DashboardSingleton().tenantId, + DashboardSingleton().projectId, + ); // Process dashboard configuration + + add(DashboardEvent.handleSearch( + selectedDate: event.selectedDate)); // Trigger search event + } catch (e) { + debugPrint(e.toString()); // Print error + add(const DashboardEvent.handleSearch()); + } + } else if (!isConnected && event.syncFromServer) { + emit( + const DashboardErrorState()); // Emit error state if not connected and sync is required + } else { + add(const DashboardEvent.handleSearch()); // Trigger search event + } + } + } catch (e) { + debugPrint(e.toString()); + } + } + + // Event handler for searching the dashboard + FutureOr _handleSearch( + DashboardSearchEvent event, + DashboardEmitter emit, + ) async { + try { + final metricCharts = await isar.dashboardResponses + .where() + .filter() + .chartTypeEqualTo(DSSEnums.metric.toValue()) + .findAll(); // Query metric charts from Isar database + Map metrics = {}; // Initialize metrics map + List tableWrapperList = []; // Initialize table wrapper list + DashboardConfigSchema? dashboardConfig = + DashboardSingleton().dashboardConfig; + for (DashboardResponse chart in metricCharts) { + if ((chart.data ?? []).isNotEmpty) { + for (DashboardChartData data in (chart.data ?? [])) { + metrics.addAll({ + data.headerName.toString(): MetricWrapper( + header: data.headerName ?? '', + value: data.headerValue ?? '0', + insight: data.insight, + isHorizontal: dashboardConfig?.charts + ?.where((metric) => + metric.name == chart.visualizationCode && + metric.chartType == + DSSEnums.metric.name.toUpperCase()) + .first + .vizType == + DSSEnums.row.toValue(), + ), + }); // Populate metrics map + } + } + } + final tableCharts = await isar.dashboardResponses + .where() + .filter() + .chartTypeEqualTo(DSSEnums.table.toValue()) + .findAll(); // Query table charts from Isar database + for (DashboardResponse chart in tableCharts) { + if ((chart.data ?? []).isNotEmpty) { + // Create table headers + final List tableHeaderList = chart.data?.first.plots + ?.where((p) => + p.name != DSSEnums.serialNumber.toValue() && + p.name != DSSEnums.startDate.toValue() && + p.name != DSSEnums.endDate.toValue() && + p.name != null) + .map((e) { + final headerData = transformToLocaleCode(e.name ?? ''); + return TableHeader( + headerData ?? '', + cellKey: e.name, + ); + }).toList() ?? + []; + + // Create table details + final tableDetails = chart.data?.map((e) { + final rowTableData = e.plots + ?.where((p) => + p.name != DSSEnums.serialNumber.toValue() && + p.name != DSSEnums.startDate.toValue() && + p.name != DSSEnums.endDate.toValue()) + .mapIndexed( + (i, plot) => TableData( + plot.symbol == DSSEnums.number.toValue() || + plot.symbol == DSSEnums.percentage.toValue() + ? double.parse(plot.value.toString()) == + double.parse(plot.value.toString()).toInt() + ? double.parse(plot.value.toString()) + .toInt() + .toString() + : double.parse(plot.value.toString()) + .toStringAsFixed(2) + : plot.label.toString(), + cellKey: plot.name, + style: DigitTheme.instance.mobileTheme.textTheme.bodyMedium + ?.apply( + color: i == 0 + ? const DigitColors().burningOrange + : const DigitColors().woodsmokeBlack, + ), + ), + ) + .toList(); + return TableDataRow(rowTableData ?? []); + }).toList(); + tableWrapperList.add(TableWrapper( + headerList: tableHeaderList, + tableData: tableDetails ?? [], + )); + } + } + + emit(DashboardFetchedState( + metricData: metrics, + tableData: tableWrapperList, + selectedDate: metricCharts.firstOrNull?.lastSelectedDate ?? + event.selectedDate ?? + DateTime.now(), + )); // Emit fetched state with metric and table data + } catch (error) { + rethrow; // Rethrow any caught errors + } + } +} + +// Define DashboardEvent with freezed annotations +@freezed +class DashboardEvent with _$DashboardEvent { + const factory DashboardEvent.handleSearch({ + DateTime? selectedDate, + }) = DashboardSearchEvent; // Define handleSearch event + const factory DashboardEvent.handleRefresh({ + required DateTime selectedDate, + required String projectId, + @Default(false) bool syncFromServer, + }) = DashboardRefreshEvent; // Define handleRefresh event +} + +// Define DashboardState with freezed annotations +@freezed +class DashboardState with _$DashboardState { + const factory DashboardState.loading() = + DashboardLoadingState; // Define loading state + const factory DashboardState.initialState() = + DashboardInitialState; // Define initial state + const factory DashboardState.fetched({ + Map? metricData, + List? tableData, + DateTime? selectedDate, + }) = DashboardFetchedState; // Define fetched state + const factory DashboardState.error() = + DashboardErrorState; // Define error state +} + +// Class for wrapping metric data +class MetricWrapper { + final String header; // Header of the metric + final String value; // Value of the metric + final Insight? insight; // Insight related to the metric + final bool? isHorizontal; + MetricWrapper({ + required this.header, + required this.value, + this.insight, + this.isHorizontal = true, + }); +} + +// Class for wrapping table data +class TableWrapper { + final List headerList; // List of table headers + final List tableData; // List of table data rows + + TableWrapper({ + required this.headerList, + required this.tableData, + }); +} diff --git a/packages/digit_dss/lib/blocs/dashboard.freezed.dart b/packages/digit_dss/lib/blocs/dashboard.freezed.dart new file mode 100644 index 000000000..72a58d932 --- /dev/null +++ b/packages/digit_dss/lib/blocs/dashboard.freezed.dart @@ -0,0 +1,1070 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'dashboard.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + +/// @nodoc +mixin _$DashboardEvent { + DateTime? get selectedDate => throw _privateConstructorUsedError; + @optionalTypeArgs + TResult when({ + required TResult Function(DateTime? selectedDate) handleSearch, + required TResult Function( + DateTime selectedDate, String projectId, bool syncFromServer) + handleRefresh, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function(DateTime? selectedDate)? handleSearch, + TResult? Function( + DateTime selectedDate, String projectId, bool syncFromServer)? + handleRefresh, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult maybeWhen({ + TResult Function(DateTime? selectedDate)? handleSearch, + TResult Function( + DateTime selectedDate, String projectId, bool syncFromServer)? + handleRefresh, + required TResult orElse(), + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult map({ + required TResult Function(DashboardSearchEvent value) handleSearch, + required TResult Function(DashboardRefreshEvent value) handleRefresh, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(DashboardSearchEvent value)? handleSearch, + TResult? Function(DashboardRefreshEvent value)? handleRefresh, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult maybeMap({ + TResult Function(DashboardSearchEvent value)? handleSearch, + TResult Function(DashboardRefreshEvent value)? handleRefresh, + required TResult orElse(), + }) => + throw _privateConstructorUsedError; + + @JsonKey(ignore: true) + $DashboardEventCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $DashboardEventCopyWith<$Res> { + factory $DashboardEventCopyWith( + DashboardEvent value, $Res Function(DashboardEvent) then) = + _$DashboardEventCopyWithImpl<$Res, DashboardEvent>; + @useResult + $Res call({DateTime selectedDate}); +} + +/// @nodoc +class _$DashboardEventCopyWithImpl<$Res, $Val extends DashboardEvent> + implements $DashboardEventCopyWith<$Res> { + _$DashboardEventCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? selectedDate = null, + }) { + return _then(_value.copyWith( + selectedDate: null == selectedDate + ? _value.selectedDate! + : selectedDate // ignore: cast_nullable_to_non_nullable + as DateTime, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$DashboardSearchEventImplCopyWith<$Res> + implements $DashboardEventCopyWith<$Res> { + factory _$$DashboardSearchEventImplCopyWith(_$DashboardSearchEventImpl value, + $Res Function(_$DashboardSearchEventImpl) then) = + __$$DashboardSearchEventImplCopyWithImpl<$Res>; + @override + @useResult + $Res call({DateTime? selectedDate}); +} + +/// @nodoc +class __$$DashboardSearchEventImplCopyWithImpl<$Res> + extends _$DashboardEventCopyWithImpl<$Res, _$DashboardSearchEventImpl> + implements _$$DashboardSearchEventImplCopyWith<$Res> { + __$$DashboardSearchEventImplCopyWithImpl(_$DashboardSearchEventImpl _value, + $Res Function(_$DashboardSearchEventImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? selectedDate = freezed, + }) { + return _then(_$DashboardSearchEventImpl( + selectedDate: freezed == selectedDate + ? _value.selectedDate + : selectedDate // ignore: cast_nullable_to_non_nullable + as DateTime?, + )); + } +} + +/// @nodoc + +class _$DashboardSearchEventImpl implements DashboardSearchEvent { + const _$DashboardSearchEventImpl({this.selectedDate}); + + @override + final DateTime? selectedDate; + + @override + String toString() { + return 'DashboardEvent.handleSearch(selectedDate: $selectedDate)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$DashboardSearchEventImpl && + (identical(other.selectedDate, selectedDate) || + other.selectedDate == selectedDate)); + } + + @override + int get hashCode => Object.hash(runtimeType, selectedDate); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$DashboardSearchEventImplCopyWith<_$DashboardSearchEventImpl> + get copyWith => + __$$DashboardSearchEventImplCopyWithImpl<_$DashboardSearchEventImpl>( + this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function(DateTime? selectedDate) handleSearch, + required TResult Function( + DateTime selectedDate, String projectId, bool syncFromServer) + handleRefresh, + }) { + return handleSearch(selectedDate); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function(DateTime? selectedDate)? handleSearch, + TResult? Function( + DateTime selectedDate, String projectId, bool syncFromServer)? + handleRefresh, + }) { + return handleSearch?.call(selectedDate); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function(DateTime? selectedDate)? handleSearch, + TResult Function( + DateTime selectedDate, String projectId, bool syncFromServer)? + handleRefresh, + required TResult orElse(), + }) { + if (handleSearch != null) { + return handleSearch(selectedDate); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(DashboardSearchEvent value) handleSearch, + required TResult Function(DashboardRefreshEvent value) handleRefresh, + }) { + return handleSearch(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(DashboardSearchEvent value)? handleSearch, + TResult? Function(DashboardRefreshEvent value)? handleRefresh, + }) { + return handleSearch?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(DashboardSearchEvent value)? handleSearch, + TResult Function(DashboardRefreshEvent value)? handleRefresh, + required TResult orElse(), + }) { + if (handleSearch != null) { + return handleSearch(this); + } + return orElse(); + } +} + +abstract class DashboardSearchEvent implements DashboardEvent { + const factory DashboardSearchEvent({final DateTime? selectedDate}) = + _$DashboardSearchEventImpl; + + @override + DateTime? get selectedDate; + @override + @JsonKey(ignore: true) + _$$DashboardSearchEventImplCopyWith<_$DashboardSearchEventImpl> + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class _$$DashboardRefreshEventImplCopyWith<$Res> + implements $DashboardEventCopyWith<$Res> { + factory _$$DashboardRefreshEventImplCopyWith( + _$DashboardRefreshEventImpl value, + $Res Function(_$DashboardRefreshEventImpl) then) = + __$$DashboardRefreshEventImplCopyWithImpl<$Res>; + @override + @useResult + $Res call({DateTime selectedDate, String projectId, bool syncFromServer}); +} + +/// @nodoc +class __$$DashboardRefreshEventImplCopyWithImpl<$Res> + extends _$DashboardEventCopyWithImpl<$Res, _$DashboardRefreshEventImpl> + implements _$$DashboardRefreshEventImplCopyWith<$Res> { + __$$DashboardRefreshEventImplCopyWithImpl(_$DashboardRefreshEventImpl _value, + $Res Function(_$DashboardRefreshEventImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? selectedDate = null, + Object? projectId = null, + Object? syncFromServer = null, + }) { + return _then(_$DashboardRefreshEventImpl( + selectedDate: null == selectedDate + ? _value.selectedDate + : selectedDate // ignore: cast_nullable_to_non_nullable + as DateTime, + projectId: null == projectId + ? _value.projectId + : projectId // ignore: cast_nullable_to_non_nullable + as String, + syncFromServer: null == syncFromServer + ? _value.syncFromServer + : syncFromServer // ignore: cast_nullable_to_non_nullable + as bool, + )); + } +} + +/// @nodoc + +class _$DashboardRefreshEventImpl implements DashboardRefreshEvent { + const _$DashboardRefreshEventImpl( + {required this.selectedDate, + required this.projectId, + this.syncFromServer = false}); + + @override + final DateTime selectedDate; + @override + final String projectId; + @override + @JsonKey() + final bool syncFromServer; + + @override + String toString() { + return 'DashboardEvent.handleRefresh(selectedDate: $selectedDate, projectId: $projectId, syncFromServer: $syncFromServer)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$DashboardRefreshEventImpl && + (identical(other.selectedDate, selectedDate) || + other.selectedDate == selectedDate) && + (identical(other.projectId, projectId) || + other.projectId == projectId) && + (identical(other.syncFromServer, syncFromServer) || + other.syncFromServer == syncFromServer)); + } + + @override + int get hashCode => + Object.hash(runtimeType, selectedDate, projectId, syncFromServer); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$DashboardRefreshEventImplCopyWith<_$DashboardRefreshEventImpl> + get copyWith => __$$DashboardRefreshEventImplCopyWithImpl< + _$DashboardRefreshEventImpl>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function(DateTime? selectedDate) handleSearch, + required TResult Function( + DateTime selectedDate, String projectId, bool syncFromServer) + handleRefresh, + }) { + return handleRefresh(selectedDate, projectId, syncFromServer); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function(DateTime? selectedDate)? handleSearch, + TResult? Function( + DateTime selectedDate, String projectId, bool syncFromServer)? + handleRefresh, + }) { + return handleRefresh?.call(selectedDate, projectId, syncFromServer); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function(DateTime? selectedDate)? handleSearch, + TResult Function( + DateTime selectedDate, String projectId, bool syncFromServer)? + handleRefresh, + required TResult orElse(), + }) { + if (handleRefresh != null) { + return handleRefresh(selectedDate, projectId, syncFromServer); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(DashboardSearchEvent value) handleSearch, + required TResult Function(DashboardRefreshEvent value) handleRefresh, + }) { + return handleRefresh(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(DashboardSearchEvent value)? handleSearch, + TResult? Function(DashboardRefreshEvent value)? handleRefresh, + }) { + return handleRefresh?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(DashboardSearchEvent value)? handleSearch, + TResult Function(DashboardRefreshEvent value)? handleRefresh, + required TResult orElse(), + }) { + if (handleRefresh != null) { + return handleRefresh(this); + } + return orElse(); + } +} + +abstract class DashboardRefreshEvent implements DashboardEvent { + const factory DashboardRefreshEvent( + {required final DateTime selectedDate, + required final String projectId, + final bool syncFromServer}) = _$DashboardRefreshEventImpl; + + @override + DateTime get selectedDate; + String get projectId; + bool get syncFromServer; + @override + @JsonKey(ignore: true) + _$$DashboardRefreshEventImplCopyWith<_$DashboardRefreshEventImpl> + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +mixin _$DashboardState { + @optionalTypeArgs + TResult when({ + required TResult Function() loading, + required TResult Function() initialState, + required TResult Function(Map? metricData, + List? tableData, DateTime? selectedDate) + fetched, + required TResult Function() error, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? loading, + TResult? Function()? initialState, + TResult? Function(Map? metricData, + List? tableData, DateTime? selectedDate)? + fetched, + TResult? Function()? error, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? loading, + TResult Function()? initialState, + TResult Function(Map? metricData, + List? tableData, DateTime? selectedDate)? + fetched, + TResult Function()? error, + required TResult orElse(), + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult map({ + required TResult Function(DashboardLoadingState value) loading, + required TResult Function(DashboardInitialState value) initialState, + required TResult Function(DashboardFetchedState value) fetched, + required TResult Function(DashboardErrorState value) error, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(DashboardLoadingState value)? loading, + TResult? Function(DashboardInitialState value)? initialState, + TResult? Function(DashboardFetchedState value)? fetched, + TResult? Function(DashboardErrorState value)? error, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult maybeMap({ + TResult Function(DashboardLoadingState value)? loading, + TResult Function(DashboardInitialState value)? initialState, + TResult Function(DashboardFetchedState value)? fetched, + TResult Function(DashboardErrorState value)? error, + required TResult orElse(), + }) => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $DashboardStateCopyWith<$Res> { + factory $DashboardStateCopyWith( + DashboardState value, $Res Function(DashboardState) then) = + _$DashboardStateCopyWithImpl<$Res, DashboardState>; +} + +/// @nodoc +class _$DashboardStateCopyWithImpl<$Res, $Val extends DashboardState> + implements $DashboardStateCopyWith<$Res> { + _$DashboardStateCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; +} + +/// @nodoc +abstract class _$$DashboardLoadingStateImplCopyWith<$Res> { + factory _$$DashboardLoadingStateImplCopyWith( + _$DashboardLoadingStateImpl value, + $Res Function(_$DashboardLoadingStateImpl) then) = + __$$DashboardLoadingStateImplCopyWithImpl<$Res>; +} + +/// @nodoc +class __$$DashboardLoadingStateImplCopyWithImpl<$Res> + extends _$DashboardStateCopyWithImpl<$Res, _$DashboardLoadingStateImpl> + implements _$$DashboardLoadingStateImplCopyWith<$Res> { + __$$DashboardLoadingStateImplCopyWithImpl(_$DashboardLoadingStateImpl _value, + $Res Function(_$DashboardLoadingStateImpl) _then) + : super(_value, _then); +} + +/// @nodoc + +class _$DashboardLoadingStateImpl implements DashboardLoadingState { + const _$DashboardLoadingStateImpl(); + + @override + String toString() { + return 'DashboardState.loading()'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$DashboardLoadingStateImpl); + } + + @override + int get hashCode => runtimeType.hashCode; + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() loading, + required TResult Function() initialState, + required TResult Function(Map? metricData, + List? tableData, DateTime? selectedDate) + fetched, + required TResult Function() error, + }) { + return loading(); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? loading, + TResult? Function()? initialState, + TResult? Function(Map? metricData, + List? tableData, DateTime? selectedDate)? + fetched, + TResult? Function()? error, + }) { + return loading?.call(); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? loading, + TResult Function()? initialState, + TResult Function(Map? metricData, + List? tableData, DateTime? selectedDate)? + fetched, + TResult Function()? error, + required TResult orElse(), + }) { + if (loading != null) { + return loading(); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(DashboardLoadingState value) loading, + required TResult Function(DashboardInitialState value) initialState, + required TResult Function(DashboardFetchedState value) fetched, + required TResult Function(DashboardErrorState value) error, + }) { + return loading(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(DashboardLoadingState value)? loading, + TResult? Function(DashboardInitialState value)? initialState, + TResult? Function(DashboardFetchedState value)? fetched, + TResult? Function(DashboardErrorState value)? error, + }) { + return loading?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(DashboardLoadingState value)? loading, + TResult Function(DashboardInitialState value)? initialState, + TResult Function(DashboardFetchedState value)? fetched, + TResult Function(DashboardErrorState value)? error, + required TResult orElse(), + }) { + if (loading != null) { + return loading(this); + } + return orElse(); + } +} + +abstract class DashboardLoadingState implements DashboardState { + const factory DashboardLoadingState() = _$DashboardLoadingStateImpl; +} + +/// @nodoc +abstract class _$$DashboardInitialStateImplCopyWith<$Res> { + factory _$$DashboardInitialStateImplCopyWith( + _$DashboardInitialStateImpl value, + $Res Function(_$DashboardInitialStateImpl) then) = + __$$DashboardInitialStateImplCopyWithImpl<$Res>; +} + +/// @nodoc +class __$$DashboardInitialStateImplCopyWithImpl<$Res> + extends _$DashboardStateCopyWithImpl<$Res, _$DashboardInitialStateImpl> + implements _$$DashboardInitialStateImplCopyWith<$Res> { + __$$DashboardInitialStateImplCopyWithImpl(_$DashboardInitialStateImpl _value, + $Res Function(_$DashboardInitialStateImpl) _then) + : super(_value, _then); +} + +/// @nodoc + +class _$DashboardInitialStateImpl implements DashboardInitialState { + const _$DashboardInitialStateImpl(); + + @override + String toString() { + return 'DashboardState.initialState()'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$DashboardInitialStateImpl); + } + + @override + int get hashCode => runtimeType.hashCode; + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() loading, + required TResult Function() initialState, + required TResult Function(Map? metricData, + List? tableData, DateTime? selectedDate) + fetched, + required TResult Function() error, + }) { + return initialState(); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? loading, + TResult? Function()? initialState, + TResult? Function(Map? metricData, + List? tableData, DateTime? selectedDate)? + fetched, + TResult? Function()? error, + }) { + return initialState?.call(); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? loading, + TResult Function()? initialState, + TResult Function(Map? metricData, + List? tableData, DateTime? selectedDate)? + fetched, + TResult Function()? error, + required TResult orElse(), + }) { + if (initialState != null) { + return initialState(); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(DashboardLoadingState value) loading, + required TResult Function(DashboardInitialState value) initialState, + required TResult Function(DashboardFetchedState value) fetched, + required TResult Function(DashboardErrorState value) error, + }) { + return initialState(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(DashboardLoadingState value)? loading, + TResult? Function(DashboardInitialState value)? initialState, + TResult? Function(DashboardFetchedState value)? fetched, + TResult? Function(DashboardErrorState value)? error, + }) { + return initialState?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(DashboardLoadingState value)? loading, + TResult Function(DashboardInitialState value)? initialState, + TResult Function(DashboardFetchedState value)? fetched, + TResult Function(DashboardErrorState value)? error, + required TResult orElse(), + }) { + if (initialState != null) { + return initialState(this); + } + return orElse(); + } +} + +abstract class DashboardInitialState implements DashboardState { + const factory DashboardInitialState() = _$DashboardInitialStateImpl; +} + +/// @nodoc +abstract class _$$DashboardFetchedStateImplCopyWith<$Res> { + factory _$$DashboardFetchedStateImplCopyWith( + _$DashboardFetchedStateImpl value, + $Res Function(_$DashboardFetchedStateImpl) then) = + __$$DashboardFetchedStateImplCopyWithImpl<$Res>; + @useResult + $Res call( + {Map? metricData, + List? tableData, + DateTime? selectedDate}); +} + +/// @nodoc +class __$$DashboardFetchedStateImplCopyWithImpl<$Res> + extends _$DashboardStateCopyWithImpl<$Res, _$DashboardFetchedStateImpl> + implements _$$DashboardFetchedStateImplCopyWith<$Res> { + __$$DashboardFetchedStateImplCopyWithImpl(_$DashboardFetchedStateImpl _value, + $Res Function(_$DashboardFetchedStateImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? metricData = freezed, + Object? tableData = freezed, + Object? selectedDate = freezed, + }) { + return _then(_$DashboardFetchedStateImpl( + metricData: freezed == metricData + ? _value._metricData + : metricData // ignore: cast_nullable_to_non_nullable + as Map?, + tableData: freezed == tableData + ? _value._tableData + : tableData // ignore: cast_nullable_to_non_nullable + as List?, + selectedDate: freezed == selectedDate + ? _value.selectedDate + : selectedDate // ignore: cast_nullable_to_non_nullable + as DateTime?, + )); + } +} + +/// @nodoc + +class _$DashboardFetchedStateImpl implements DashboardFetchedState { + const _$DashboardFetchedStateImpl( + {final Map? metricData, + final List? tableData, + this.selectedDate}) + : _metricData = metricData, + _tableData = tableData; + + final Map? _metricData; + @override + Map? get metricData { + final value = _metricData; + if (value == null) return null; + if (_metricData is EqualUnmodifiableMapView) return _metricData; + // ignore: implicit_dynamic_type + return EqualUnmodifiableMapView(value); + } + + final List? _tableData; + @override + List? get tableData { + final value = _tableData; + if (value == null) return null; + if (_tableData is EqualUnmodifiableListView) return _tableData; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); + } + + @override + final DateTime? selectedDate; + + @override + String toString() { + return 'DashboardState.fetched(metricData: $metricData, tableData: $tableData, selectedDate: $selectedDate)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$DashboardFetchedStateImpl && + const DeepCollectionEquality() + .equals(other._metricData, _metricData) && + const DeepCollectionEquality() + .equals(other._tableData, _tableData) && + (identical(other.selectedDate, selectedDate) || + other.selectedDate == selectedDate)); + } + + @override + int get hashCode => Object.hash( + runtimeType, + const DeepCollectionEquality().hash(_metricData), + const DeepCollectionEquality().hash(_tableData), + selectedDate); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$DashboardFetchedStateImplCopyWith<_$DashboardFetchedStateImpl> + get copyWith => __$$DashboardFetchedStateImplCopyWithImpl< + _$DashboardFetchedStateImpl>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() loading, + required TResult Function() initialState, + required TResult Function(Map? metricData, + List? tableData, DateTime? selectedDate) + fetched, + required TResult Function() error, + }) { + return fetched(metricData, tableData, selectedDate); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? loading, + TResult? Function()? initialState, + TResult? Function(Map? metricData, + List? tableData, DateTime? selectedDate)? + fetched, + TResult? Function()? error, + }) { + return fetched?.call(metricData, tableData, selectedDate); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? loading, + TResult Function()? initialState, + TResult Function(Map? metricData, + List? tableData, DateTime? selectedDate)? + fetched, + TResult Function()? error, + required TResult orElse(), + }) { + if (fetched != null) { + return fetched(metricData, tableData, selectedDate); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(DashboardLoadingState value) loading, + required TResult Function(DashboardInitialState value) initialState, + required TResult Function(DashboardFetchedState value) fetched, + required TResult Function(DashboardErrorState value) error, + }) { + return fetched(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(DashboardLoadingState value)? loading, + TResult? Function(DashboardInitialState value)? initialState, + TResult? Function(DashboardFetchedState value)? fetched, + TResult? Function(DashboardErrorState value)? error, + }) { + return fetched?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(DashboardLoadingState value)? loading, + TResult Function(DashboardInitialState value)? initialState, + TResult Function(DashboardFetchedState value)? fetched, + TResult Function(DashboardErrorState value)? error, + required TResult orElse(), + }) { + if (fetched != null) { + return fetched(this); + } + return orElse(); + } +} + +abstract class DashboardFetchedState implements DashboardState { + const factory DashboardFetchedState( + {final Map? metricData, + final List? tableData, + final DateTime? selectedDate}) = _$DashboardFetchedStateImpl; + + Map? get metricData; + List? get tableData; + DateTime? get selectedDate; + @JsonKey(ignore: true) + _$$DashboardFetchedStateImplCopyWith<_$DashboardFetchedStateImpl> + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class _$$DashboardErrorStateImplCopyWith<$Res> { + factory _$$DashboardErrorStateImplCopyWith(_$DashboardErrorStateImpl value, + $Res Function(_$DashboardErrorStateImpl) then) = + __$$DashboardErrorStateImplCopyWithImpl<$Res>; +} + +/// @nodoc +class __$$DashboardErrorStateImplCopyWithImpl<$Res> + extends _$DashboardStateCopyWithImpl<$Res, _$DashboardErrorStateImpl> + implements _$$DashboardErrorStateImplCopyWith<$Res> { + __$$DashboardErrorStateImplCopyWithImpl(_$DashboardErrorStateImpl _value, + $Res Function(_$DashboardErrorStateImpl) _then) + : super(_value, _then); +} + +/// @nodoc + +class _$DashboardErrorStateImpl implements DashboardErrorState { + const _$DashboardErrorStateImpl(); + + @override + String toString() { + return 'DashboardState.error()'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$DashboardErrorStateImpl); + } + + @override + int get hashCode => runtimeType.hashCode; + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() loading, + required TResult Function() initialState, + required TResult Function(Map? metricData, + List? tableData, DateTime? selectedDate) + fetched, + required TResult Function() error, + }) { + return error(); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? loading, + TResult? Function()? initialState, + TResult? Function(Map? metricData, + List? tableData, DateTime? selectedDate)? + fetched, + TResult? Function()? error, + }) { + return error?.call(); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? loading, + TResult Function()? initialState, + TResult Function(Map? metricData, + List? tableData, DateTime? selectedDate)? + fetched, + TResult Function()? error, + required TResult orElse(), + }) { + if (error != null) { + return error(); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(DashboardLoadingState value) loading, + required TResult Function(DashboardInitialState value) initialState, + required TResult Function(DashboardFetchedState value) fetched, + required TResult Function(DashboardErrorState value) error, + }) { + return error(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(DashboardLoadingState value)? loading, + TResult? Function(DashboardInitialState value)? initialState, + TResult? Function(DashboardFetchedState value)? fetched, + TResult? Function(DashboardErrorState value)? error, + }) { + return error?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(DashboardLoadingState value)? loading, + TResult Function(DashboardInitialState value)? initialState, + TResult Function(DashboardFetchedState value)? fetched, + TResult Function(DashboardErrorState value)? error, + required TResult orElse(), + }) { + if (error != null) { + return error(this); + } + return orElse(); + } +} + +abstract class DashboardErrorState implements DashboardState { + const factory DashboardErrorState() = _$DashboardErrorStateImpl; +} diff --git a/packages/digit_dss/lib/blocs/dashboard_localization_delegate.dart b/packages/digit_dss/lib/blocs/dashboard_localization_delegate.dart new file mode 100644 index 000000000..cb21306dd --- /dev/null +++ b/packages/digit_dss/lib/blocs/dashboard_localization_delegate.dart @@ -0,0 +1,34 @@ +import 'package:flutter/material.dart'; + +import 'app_localization.dart'; + +class DashboardLocalizationDelegate + extends LocalizationsDelegate { + final Future localizedStrings; + final List languages; + + const DashboardLocalizationDelegate(this.localizedStrings, this.languages); + + @override + bool isSupported(Locale locale) { + return languages.map((e) { + final results = e.value.split('_'); + if (results.isNotEmpty) return results.first; + }).contains(locale.languageCode); + } + + @override + Future load(Locale locale) async { + DashboardLocalization localization = + DashboardLocalization(locale, localizedStrings, languages); + await localization.load(); + + return localization; + } + + @override + bool shouldReload( + covariant LocalizationsDelegate old) { + return true; + } +} diff --git a/packages/digit_dss/lib/data/local_store/no_sql/schema/dashboard_config_schema.dart b/packages/digit_dss/lib/data/local_store/no_sql/schema/dashboard_config_schema.dart new file mode 100644 index 000000000..854e32156 --- /dev/null +++ b/packages/digit_dss/lib/data/local_store/no_sql/schema/dashboard_config_schema.dart @@ -0,0 +1,29 @@ +import 'package:isar/isar.dart'; + +part 'dashboard_config_schema.g.dart'; + +@Collection() +class DashboardConfigSchema { + Id id = Isar.autoIncrement; + + @Name("enableDashboard") + late bool? enableDashboard; + + @Name("charts") + late List? charts; +} + +@embedded +class DashboardChartConfigSchema { + @Name("name") + late String? name; + + @Name("vizType") + late String? vizType; + + @Name("active") + late bool? active; + + @Name("chartType") + late String? chartType; +} diff --git a/packages/digit_dss/lib/data/local_store/no_sql/schema/dashboard_config_schema.g.dart b/packages/digit_dss/lib/data/local_store/no_sql/schema/dashboard_config_schema.g.dart new file mode 100644 index 000000000..723c4c6b0 --- /dev/null +++ b/packages/digit_dss/lib/data/local_store/no_sql/schema/dashboard_config_schema.g.dart @@ -0,0 +1,1121 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'dashboard_config_schema.dart'; + +// ************************************************************************** +// IsarCollectionGenerator +// ************************************************************************** + +// coverage:ignore-file +// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types + +extension GetDashboardConfigSchemaCollection on Isar { + IsarCollection get dashboardConfigSchemas => + this.collection(); +} + +const DashboardConfigSchemaSchema = CollectionSchema( + name: r'DashboardConfigSchema', + id: 5327278717036238119, + properties: { + r'charts': PropertySchema( + id: 0, + name: r'charts', + type: IsarType.objectList, + target: r'DashboardChartConfigSchema', + ), + r'enableDashboard': PropertySchema( + id: 1, + name: r'enableDashboard', + type: IsarType.bool, + ) + }, + estimateSize: _dashboardConfigSchemaEstimateSize, + serialize: _dashboardConfigSchemaSerialize, + deserialize: _dashboardConfigSchemaDeserialize, + deserializeProp: _dashboardConfigSchemaDeserializeProp, + idName: r'id', + indexes: {}, + links: {}, + embeddedSchemas: { + r'DashboardChartConfigSchema': DashboardChartConfigSchemaSchema + }, + getId: _dashboardConfigSchemaGetId, + getLinks: _dashboardConfigSchemaGetLinks, + attach: _dashboardConfigSchemaAttach, + version: '3.1.0+1', +); + +int _dashboardConfigSchemaEstimateSize( + DashboardConfigSchema object, + List offsets, + Map> allOffsets, +) { + var bytesCount = offsets.last; + { + final list = object.charts; + if (list != null) { + bytesCount += 3 + list.length * 3; + { + final offsets = allOffsets[DashboardChartConfigSchema]!; + for (var i = 0; i < list.length; i++) { + final value = list[i]; + bytesCount += DashboardChartConfigSchemaSchema.estimateSize( + value, offsets, allOffsets); + } + } + } + } + return bytesCount; +} + +void _dashboardConfigSchemaSerialize( + DashboardConfigSchema object, + IsarWriter writer, + List offsets, + Map> allOffsets, +) { + writer.writeObjectList( + offsets[0], + allOffsets, + DashboardChartConfigSchemaSchema.serialize, + object.charts, + ); + writer.writeBool(offsets[1], object.enableDashboard); +} + +DashboardConfigSchema _dashboardConfigSchemaDeserialize( + Id id, + IsarReader reader, + List offsets, + Map> allOffsets, +) { + final object = DashboardConfigSchema(); + object.charts = reader.readObjectList( + offsets[0], + DashboardChartConfigSchemaSchema.deserialize, + allOffsets, + DashboardChartConfigSchema(), + ); + object.enableDashboard = reader.readBoolOrNull(offsets[1]); + object.id = id; + return object; +} + +P _dashboardConfigSchemaDeserializeProp

( + IsarReader reader, + int propertyId, + int offset, + Map> allOffsets, +) { + switch (propertyId) { + case 0: + return (reader.readObjectList( + offset, + DashboardChartConfigSchemaSchema.deserialize, + allOffsets, + DashboardChartConfigSchema(), + )) as P; + case 1: + return (reader.readBoolOrNull(offset)) as P; + default: + throw IsarError('Unknown property with id $propertyId'); + } +} + +Id _dashboardConfigSchemaGetId(DashboardConfigSchema object) { + return object.id; +} + +List> _dashboardConfigSchemaGetLinks( + DashboardConfigSchema object) { + return []; +} + +void _dashboardConfigSchemaAttach( + IsarCollection col, Id id, DashboardConfigSchema object) { + object.id = id; +} + +extension DashboardConfigSchemaQueryWhereSort + on QueryBuilder { + QueryBuilder + anyId() { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause(const IdWhereClause.any()); + }); + } +} + +extension DashboardConfigSchemaQueryWhere on QueryBuilder { + QueryBuilder + idEqualTo(Id id) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause(IdWhereClause.between( + lower: id, + upper: id, + )); + }); + } + + QueryBuilder + idNotEqualTo(Id id) { + return QueryBuilder.apply(this, (query) { + if (query.whereSort == Sort.asc) { + return query + .addWhereClause( + IdWhereClause.lessThan(upper: id, includeUpper: false), + ) + .addWhereClause( + IdWhereClause.greaterThan(lower: id, includeLower: false), + ); + } else { + return query + .addWhereClause( + IdWhereClause.greaterThan(lower: id, includeLower: false), + ) + .addWhereClause( + IdWhereClause.lessThan(upper: id, includeUpper: false), + ); + } + }); + } + + QueryBuilder + idGreaterThan(Id id, {bool include = false}) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause( + IdWhereClause.greaterThan(lower: id, includeLower: include), + ); + }); + } + + QueryBuilder + idLessThan(Id id, {bool include = false}) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause( + IdWhereClause.lessThan(upper: id, includeUpper: include), + ); + }); + } + + QueryBuilder + idBetween( + Id lowerId, + Id upperId, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause(IdWhereClause.between( + lower: lowerId, + includeLower: includeLower, + upper: upperId, + includeUpper: includeUpper, + )); + }); + } +} + +extension DashboardConfigSchemaQueryFilter on QueryBuilder< + DashboardConfigSchema, DashboardConfigSchema, QFilterCondition> { + QueryBuilder chartsIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'charts', + )); + }); + } + + QueryBuilder chartsIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'charts', + )); + }); + } + + QueryBuilder chartsLengthEqualTo(int length) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'charts', + length, + true, + length, + true, + ); + }); + } + + QueryBuilder chartsIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'charts', + 0, + true, + 0, + true, + ); + }); + } + + QueryBuilder chartsIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'charts', + 0, + false, + 999999, + true, + ); + }); + } + + QueryBuilder chartsLengthLessThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'charts', + 0, + true, + length, + include, + ); + }); + } + + QueryBuilder chartsLengthGreaterThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'charts', + length, + include, + 999999, + true, + ); + }); + } + + QueryBuilder chartsLengthBetween( + int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'charts', + lower, + includeLower, + upper, + includeUpper, + ); + }); + } + + QueryBuilder enableDashboardIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'enableDashboard', + )); + }); + } + + QueryBuilder enableDashboardIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'enableDashboard', + )); + }); + } + + QueryBuilder enableDashboardEqualTo(bool? value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'enableDashboard', + value: value, + )); + }); + } + + QueryBuilder idEqualTo(Id value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'id', + value: value, + )); + }); + } + + QueryBuilder idGreaterThan( + Id value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'id', + value: value, + )); + }); + } + + QueryBuilder idLessThan( + Id value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'id', + value: value, + )); + }); + } + + QueryBuilder idBetween( + Id lower, + Id upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'id', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); + }); + } +} + +extension DashboardConfigSchemaQueryObject on QueryBuilder< + DashboardConfigSchema, DashboardConfigSchema, QFilterCondition> { + QueryBuilder + chartsElement(FilterQuery q) { + return QueryBuilder.apply(this, (query) { + return query.object(q, r'charts'); + }); + } +} + +extension DashboardConfigSchemaQueryLinks on QueryBuilder {} + +extension DashboardConfigSchemaQuerySortBy + on QueryBuilder { + QueryBuilder + sortByEnableDashboard() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'enableDashboard', Sort.asc); + }); + } + + QueryBuilder + sortByEnableDashboardDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'enableDashboard', Sort.desc); + }); + } +} + +extension DashboardConfigSchemaQuerySortThenBy + on QueryBuilder { + QueryBuilder + thenByEnableDashboard() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'enableDashboard', Sort.asc); + }); + } + + QueryBuilder + thenByEnableDashboardDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'enableDashboard', Sort.desc); + }); + } + + QueryBuilder + thenById() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'id', Sort.asc); + }); + } + + QueryBuilder + thenByIdDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'id', Sort.desc); + }); + } +} + +extension DashboardConfigSchemaQueryWhereDistinct + on QueryBuilder { + QueryBuilder + distinctByEnableDashboard() { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'enableDashboard'); + }); + } +} + +extension DashboardConfigSchemaQueryProperty on QueryBuilder< + DashboardConfigSchema, DashboardConfigSchema, QQueryProperty> { + QueryBuilder idProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'id'); + }); + } + + QueryBuilder?, + QQueryOperations> chartsProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'charts'); + }); + } + + QueryBuilder + enableDashboardProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'enableDashboard'); + }); + } +} + +// ************************************************************************** +// IsarEmbeddedGenerator +// ************************************************************************** + +// coverage:ignore-file +// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types + +const DashboardChartConfigSchemaSchema = Schema( + name: r'DashboardChartConfigSchema', + id: 6365317819446843132, + properties: { + r'active': PropertySchema( + id: 0, + name: r'active', + type: IsarType.bool, + ), + r'chartType': PropertySchema( + id: 1, + name: r'chartType', + type: IsarType.string, + ), + r'name': PropertySchema( + id: 2, + name: r'name', + type: IsarType.string, + ), + r'vizType': PropertySchema( + id: 3, + name: r'vizType', + type: IsarType.string, + ) + }, + estimateSize: _dashboardChartConfigSchemaEstimateSize, + serialize: _dashboardChartConfigSchemaSerialize, + deserialize: _dashboardChartConfigSchemaDeserialize, + deserializeProp: _dashboardChartConfigSchemaDeserializeProp, +); + +int _dashboardChartConfigSchemaEstimateSize( + DashboardChartConfigSchema object, + List offsets, + Map> allOffsets, +) { + var bytesCount = offsets.last; + { + final value = object.chartType; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + { + final value = object.name; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + { + final value = object.vizType; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + return bytesCount; +} + +void _dashboardChartConfigSchemaSerialize( + DashboardChartConfigSchema object, + IsarWriter writer, + List offsets, + Map> allOffsets, +) { + writer.writeBool(offsets[0], object.active); + writer.writeString(offsets[1], object.chartType); + writer.writeString(offsets[2], object.name); + writer.writeString(offsets[3], object.vizType); +} + +DashboardChartConfigSchema _dashboardChartConfigSchemaDeserialize( + Id id, + IsarReader reader, + List offsets, + Map> allOffsets, +) { + final object = DashboardChartConfigSchema(); + object.active = reader.readBoolOrNull(offsets[0]); + object.chartType = reader.readStringOrNull(offsets[1]); + object.name = reader.readStringOrNull(offsets[2]); + object.vizType = reader.readStringOrNull(offsets[3]); + return object; +} + +P _dashboardChartConfigSchemaDeserializeProp

( + IsarReader reader, + int propertyId, + int offset, + Map> allOffsets, +) { + switch (propertyId) { + case 0: + return (reader.readBoolOrNull(offset)) as P; + case 1: + return (reader.readStringOrNull(offset)) as P; + case 2: + return (reader.readStringOrNull(offset)) as P; + case 3: + return (reader.readStringOrNull(offset)) as P; + default: + throw IsarError('Unknown property with id $propertyId'); + } +} + +extension DashboardChartConfigSchemaQueryFilter on QueryBuilder< + DashboardChartConfigSchema, DashboardChartConfigSchema, QFilterCondition> { + QueryBuilder activeIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'active', + )); + }); + } + + QueryBuilder activeIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'active', + )); + }); + } + + QueryBuilder activeEqualTo(bool? value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'active', + value: value, + )); + }); + } + + QueryBuilder chartTypeIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'chartType', + )); + }); + } + + QueryBuilder chartTypeIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'chartType', + )); + }); + } + + QueryBuilder chartTypeEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'chartType', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder chartTypeGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'chartType', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder chartTypeLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'chartType', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder chartTypeBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'chartType', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder chartTypeStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'chartType', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder chartTypeEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'chartType', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + chartTypeContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'chartType', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + chartTypeMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'chartType', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder chartTypeIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'chartType', + value: '', + )); + }); + } + + QueryBuilder chartTypeIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'chartType', + value: '', + )); + }); + } + + QueryBuilder nameIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'name', + )); + }); + } + + QueryBuilder nameIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'name', + )); + }); + } + + QueryBuilder nameEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'name', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'name', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'name', + value: '', + )); + }); + } + + QueryBuilder nameIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'name', + value: '', + )); + }); + } + + QueryBuilder vizTypeIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'vizType', + )); + }); + } + + QueryBuilder vizTypeIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'vizType', + )); + }); + } + + QueryBuilder vizTypeEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'vizType', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder vizTypeGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'vizType', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder vizTypeLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'vizType', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder vizTypeBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'vizType', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder vizTypeStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'vizType', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder vizTypeEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'vizType', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + vizTypeContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'vizType', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + vizTypeMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'vizType', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder vizTypeIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'vizType', + value: '', + )); + }); + } + + QueryBuilder vizTypeIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'vizType', + value: '', + )); + }); + } +} + +extension DashboardChartConfigSchemaQueryObject on QueryBuilder< + DashboardChartConfigSchema, DashboardChartConfigSchema, QFilterCondition> {} diff --git a/packages/digit_dss/lib/data/local_store/no_sql/schema/dashboard_response.dart b/packages/digit_dss/lib/data/local_store/no_sql/schema/dashboard_response.dart new file mode 100644 index 000000000..3f9214c2e --- /dev/null +++ b/packages/digit_dss/lib/data/local_store/no_sql/schema/dashboard_response.dart @@ -0,0 +1,76 @@ +import 'package:isar/isar.dart'; + +part 'dashboard_response.g.dart'; + +@Collection() +class DashboardResponse { + Id id = Isar.autoIncrement; + + @Name("drillDownChartId") + late String? drillDownChartId; + + @Name("visualizationCode") + late String? visualizationCode; + + @Name("chartType") + late String? chartType; + + @Name("projectId") + late String? projectId; + + @Name("showLabel") + late bool? showLabel; + + @Name("hideInsights") + late bool? hideInsights; + + @Name("hideHeaderDenomination") + late bool? hideHeaderDenomination; + + @Name("data") + late List? data; + + late DateTime? lastSelectedDate; +} + +@embedded +class DashboardChartData { + @Name("headerName") + late String? headerName; + + @Name("headerSymbol") + late String? headerSymbol; + + @Name("headerValue") + late String? headerValue; + @Name("plots") + late List? plots; + @Name("insight") + late Insight? insight; +} + +@embedded +class DashboardPlot { + @Name("label") + late String? label; + @Name("strValue") + late String? strValue; + @Name("name") + late String? name; + @Name("value") + late String? value; + @Name("symbol") + late String? symbol; +} + +@embedded +class Insight { + @Name("colorCode") + late String? colorCode; + @Name("indicator") + late String? indicator; + @Name("name") + late String? name; + @Name("value") + late String? value; +} diff --git a/packages/digit_dss/lib/data/local_store/no_sql/schema/dashboard_response.g.dart b/packages/digit_dss/lib/data/local_store/no_sql/schema/dashboard_response.g.dart new file mode 100644 index 000000000..0a74ce32f --- /dev/null +++ b/packages/digit_dss/lib/data/local_store/no_sql/schema/dashboard_response.g.dart @@ -0,0 +1,4018 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'dashboard_response.dart'; + +// ************************************************************************** +// IsarCollectionGenerator +// ************************************************************************** + +// coverage:ignore-file +// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types + +extension GetDashboardResponseCollection on Isar { + IsarCollection get dashboardResponses => this.collection(); +} + +const DashboardResponseSchema = CollectionSchema( + name: r'DashboardResponse', + id: -8573620870670679659, + properties: { + r'chartType': PropertySchema( + id: 0, + name: r'chartType', + type: IsarType.string, + ), + r'data': PropertySchema( + id: 1, + name: r'data', + type: IsarType.objectList, + target: r'DashboardChartData', + ), + r'drillDownChartId': PropertySchema( + id: 2, + name: r'drillDownChartId', + type: IsarType.string, + ), + r'hideHeaderDenomination': PropertySchema( + id: 3, + name: r'hideHeaderDenomination', + type: IsarType.bool, + ), + r'hideInsights': PropertySchema( + id: 4, + name: r'hideInsights', + type: IsarType.bool, + ), + r'lastSelectedDate': PropertySchema( + id: 5, + name: r'lastSelectedDate', + type: IsarType.dateTime, + ), + r'projectId': PropertySchema( + id: 6, + name: r'projectId', + type: IsarType.string, + ), + r'showLabel': PropertySchema( + id: 7, + name: r'showLabel', + type: IsarType.bool, + ), + r'visualizationCode': PropertySchema( + id: 8, + name: r'visualizationCode', + type: IsarType.string, + ) + }, + estimateSize: _dashboardResponseEstimateSize, + serialize: _dashboardResponseSerialize, + deserialize: _dashboardResponseDeserialize, + deserializeProp: _dashboardResponseDeserializeProp, + idName: r'id', + indexes: {}, + links: {}, + embeddedSchemas: { + r'DashboardChartData': DashboardChartDataSchema, + r'DashboardPlot': DashboardPlotSchema, + r'Insight': InsightSchema + }, + getId: _dashboardResponseGetId, + getLinks: _dashboardResponseGetLinks, + attach: _dashboardResponseAttach, + version: '3.1.0+1', +); + +int _dashboardResponseEstimateSize( + DashboardResponse object, + List offsets, + Map> allOffsets, +) { + var bytesCount = offsets.last; + { + final value = object.chartType; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + { + final list = object.data; + if (list != null) { + bytesCount += 3 + list.length * 3; + { + final offsets = allOffsets[DashboardChartData]!; + for (var i = 0; i < list.length; i++) { + final value = list[i]; + bytesCount += + DashboardChartDataSchema.estimateSize(value, offsets, allOffsets); + } + } + } + } + { + final value = object.drillDownChartId; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + { + final value = object.projectId; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + { + final value = object.visualizationCode; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + return bytesCount; +} + +void _dashboardResponseSerialize( + DashboardResponse object, + IsarWriter writer, + List offsets, + Map> allOffsets, +) { + writer.writeString(offsets[0], object.chartType); + writer.writeObjectList( + offsets[1], + allOffsets, + DashboardChartDataSchema.serialize, + object.data, + ); + writer.writeString(offsets[2], object.drillDownChartId); + writer.writeBool(offsets[3], object.hideHeaderDenomination); + writer.writeBool(offsets[4], object.hideInsights); + writer.writeDateTime(offsets[5], object.lastSelectedDate); + writer.writeString(offsets[6], object.projectId); + writer.writeBool(offsets[7], object.showLabel); + writer.writeString(offsets[8], object.visualizationCode); +} + +DashboardResponse _dashboardResponseDeserialize( + Id id, + IsarReader reader, + List offsets, + Map> allOffsets, +) { + final object = DashboardResponse(); + object.chartType = reader.readStringOrNull(offsets[0]); + object.data = reader.readObjectList( + offsets[1], + DashboardChartDataSchema.deserialize, + allOffsets, + DashboardChartData(), + ); + object.drillDownChartId = reader.readStringOrNull(offsets[2]); + object.hideHeaderDenomination = reader.readBoolOrNull(offsets[3]); + object.hideInsights = reader.readBoolOrNull(offsets[4]); + object.id = id; + object.lastSelectedDate = reader.readDateTimeOrNull(offsets[5]); + object.projectId = reader.readStringOrNull(offsets[6]); + object.showLabel = reader.readBoolOrNull(offsets[7]); + object.visualizationCode = reader.readStringOrNull(offsets[8]); + return object; +} + +P _dashboardResponseDeserializeProp

( + IsarReader reader, + int propertyId, + int offset, + Map> allOffsets, +) { + switch (propertyId) { + case 0: + return (reader.readStringOrNull(offset)) as P; + case 1: + return (reader.readObjectList( + offset, + DashboardChartDataSchema.deserialize, + allOffsets, + DashboardChartData(), + )) as P; + case 2: + return (reader.readStringOrNull(offset)) as P; + case 3: + return (reader.readBoolOrNull(offset)) as P; + case 4: + return (reader.readBoolOrNull(offset)) as P; + case 5: + return (reader.readDateTimeOrNull(offset)) as P; + case 6: + return (reader.readStringOrNull(offset)) as P; + case 7: + return (reader.readBoolOrNull(offset)) as P; + case 8: + return (reader.readStringOrNull(offset)) as P; + default: + throw IsarError('Unknown property with id $propertyId'); + } +} + +Id _dashboardResponseGetId(DashboardResponse object) { + return object.id; +} + +List> _dashboardResponseGetLinks( + DashboardResponse object) { + return []; +} + +void _dashboardResponseAttach( + IsarCollection col, Id id, DashboardResponse object) { + object.id = id; +} + +extension DashboardResponseQueryWhereSort + on QueryBuilder { + QueryBuilder anyId() { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause(const IdWhereClause.any()); + }); + } +} + +extension DashboardResponseQueryWhere + on QueryBuilder { + QueryBuilder + idEqualTo(Id id) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause(IdWhereClause.between( + lower: id, + upper: id, + )); + }); + } + + QueryBuilder + idNotEqualTo(Id id) { + return QueryBuilder.apply(this, (query) { + if (query.whereSort == Sort.asc) { + return query + .addWhereClause( + IdWhereClause.lessThan(upper: id, includeUpper: false), + ) + .addWhereClause( + IdWhereClause.greaterThan(lower: id, includeLower: false), + ); + } else { + return query + .addWhereClause( + IdWhereClause.greaterThan(lower: id, includeLower: false), + ) + .addWhereClause( + IdWhereClause.lessThan(upper: id, includeUpper: false), + ); + } + }); + } + + QueryBuilder + idGreaterThan(Id id, {bool include = false}) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause( + IdWhereClause.greaterThan(lower: id, includeLower: include), + ); + }); + } + + QueryBuilder + idLessThan(Id id, {bool include = false}) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause( + IdWhereClause.lessThan(upper: id, includeUpper: include), + ); + }); + } + + QueryBuilder + idBetween( + Id lowerId, + Id upperId, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause(IdWhereClause.between( + lower: lowerId, + includeLower: includeLower, + upper: upperId, + includeUpper: includeUpper, + )); + }); + } +} + +extension DashboardResponseQueryFilter + on QueryBuilder { + QueryBuilder + chartTypeIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'chartType', + )); + }); + } + + QueryBuilder + chartTypeIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'chartType', + )); + }); + } + + QueryBuilder + chartTypeEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'chartType', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + chartTypeGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'chartType', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + chartTypeLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'chartType', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + chartTypeBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'chartType', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + chartTypeStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'chartType', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + chartTypeEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'chartType', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + chartTypeContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'chartType', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + chartTypeMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'chartType', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + chartTypeIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'chartType', + value: '', + )); + }); + } + + QueryBuilder + chartTypeIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'chartType', + value: '', + )); + }); + } + + QueryBuilder + dataIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'data', + )); + }); + } + + QueryBuilder + dataIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'data', + )); + }); + } + + QueryBuilder + dataLengthEqualTo(int length) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'data', + length, + true, + length, + true, + ); + }); + } + + QueryBuilder + dataIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'data', + 0, + true, + 0, + true, + ); + }); + } + + QueryBuilder + dataIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'data', + 0, + false, + 999999, + true, + ); + }); + } + + QueryBuilder + dataLengthLessThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'data', + 0, + true, + length, + include, + ); + }); + } + + QueryBuilder + dataLengthGreaterThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'data', + length, + include, + 999999, + true, + ); + }); + } + + QueryBuilder + dataLengthBetween( + int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'data', + lower, + includeLower, + upper, + includeUpper, + ); + }); + } + + QueryBuilder + drillDownChartIdIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'drillDownChartId', + )); + }); + } + + QueryBuilder + drillDownChartIdIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'drillDownChartId', + )); + }); + } + + QueryBuilder + drillDownChartIdEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'drillDownChartId', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + drillDownChartIdGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'drillDownChartId', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + drillDownChartIdLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'drillDownChartId', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + drillDownChartIdBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'drillDownChartId', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + drillDownChartIdStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'drillDownChartId', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + drillDownChartIdEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'drillDownChartId', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + drillDownChartIdContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'drillDownChartId', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + drillDownChartIdMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'drillDownChartId', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + drillDownChartIdIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'drillDownChartId', + value: '', + )); + }); + } + + QueryBuilder + drillDownChartIdIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'drillDownChartId', + value: '', + )); + }); + } + + QueryBuilder + hideHeaderDenominationIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'hideHeaderDenomination', + )); + }); + } + + QueryBuilder + hideHeaderDenominationIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'hideHeaderDenomination', + )); + }); + } + + QueryBuilder + hideHeaderDenominationEqualTo(bool? value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'hideHeaderDenomination', + value: value, + )); + }); + } + + QueryBuilder + hideInsightsIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'hideInsights', + )); + }); + } + + QueryBuilder + hideInsightsIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'hideInsights', + )); + }); + } + + QueryBuilder + hideInsightsEqualTo(bool? value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'hideInsights', + value: value, + )); + }); + } + + QueryBuilder + idEqualTo(Id value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'id', + value: value, + )); + }); + } + + QueryBuilder + idGreaterThan( + Id value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'id', + value: value, + )); + }); + } + + QueryBuilder + idLessThan( + Id value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'id', + value: value, + )); + }); + } + + QueryBuilder + idBetween( + Id lower, + Id upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'id', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); + }); + } + + QueryBuilder + lastSelectedDateIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'lastSelectedDate', + )); + }); + } + + QueryBuilder + lastSelectedDateIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'lastSelectedDate', + )); + }); + } + + QueryBuilder + lastSelectedDateEqualTo(DateTime? value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'lastSelectedDate', + value: value, + )); + }); + } + + QueryBuilder + lastSelectedDateGreaterThan( + DateTime? value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'lastSelectedDate', + value: value, + )); + }); + } + + QueryBuilder + lastSelectedDateLessThan( + DateTime? value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'lastSelectedDate', + value: value, + )); + }); + } + + QueryBuilder + lastSelectedDateBetween( + DateTime? lower, + DateTime? upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'lastSelectedDate', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); + }); + } + + QueryBuilder + projectIdIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'projectId', + )); + }); + } + + QueryBuilder + projectIdIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'projectId', + )); + }); + } + + QueryBuilder + projectIdEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'projectId', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + projectIdGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'projectId', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + projectIdLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'projectId', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + projectIdBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'projectId', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + projectIdStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'projectId', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + projectIdEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'projectId', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + projectIdContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'projectId', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + projectIdMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'projectId', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + projectIdIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'projectId', + value: '', + )); + }); + } + + QueryBuilder + projectIdIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'projectId', + value: '', + )); + }); + } + + QueryBuilder + showLabelIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'showLabel', + )); + }); + } + + QueryBuilder + showLabelIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'showLabel', + )); + }); + } + + QueryBuilder + showLabelEqualTo(bool? value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'showLabel', + value: value, + )); + }); + } + + QueryBuilder + visualizationCodeIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'visualizationCode', + )); + }); + } + + QueryBuilder + visualizationCodeIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'visualizationCode', + )); + }); + } + + QueryBuilder + visualizationCodeEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'visualizationCode', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + visualizationCodeGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'visualizationCode', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + visualizationCodeLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'visualizationCode', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + visualizationCodeBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'visualizationCode', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + visualizationCodeStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'visualizationCode', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + visualizationCodeEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'visualizationCode', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + visualizationCodeContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'visualizationCode', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + visualizationCodeMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'visualizationCode', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + visualizationCodeIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'visualizationCode', + value: '', + )); + }); + } + + QueryBuilder + visualizationCodeIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'visualizationCode', + value: '', + )); + }); + } +} + +extension DashboardResponseQueryObject + on QueryBuilder { + QueryBuilder + dataElement(FilterQuery q) { + return QueryBuilder.apply(this, (query) { + return query.object(q, r'data'); + }); + } +} + +extension DashboardResponseQueryLinks + on QueryBuilder {} + +extension DashboardResponseQuerySortBy + on QueryBuilder { + QueryBuilder + sortByChartType() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'chartType', Sort.asc); + }); + } + + QueryBuilder + sortByChartTypeDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'chartType', Sort.desc); + }); + } + + QueryBuilder + sortByDrillDownChartId() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'drillDownChartId', Sort.asc); + }); + } + + QueryBuilder + sortByDrillDownChartIdDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'drillDownChartId', Sort.desc); + }); + } + + QueryBuilder + sortByHideHeaderDenomination() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'hideHeaderDenomination', Sort.asc); + }); + } + + QueryBuilder + sortByHideHeaderDenominationDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'hideHeaderDenomination', Sort.desc); + }); + } + + QueryBuilder + sortByHideInsights() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'hideInsights', Sort.asc); + }); + } + + QueryBuilder + sortByHideInsightsDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'hideInsights', Sort.desc); + }); + } + + QueryBuilder + sortByLastSelectedDate() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'lastSelectedDate', Sort.asc); + }); + } + + QueryBuilder + sortByLastSelectedDateDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'lastSelectedDate', Sort.desc); + }); + } + + QueryBuilder + sortByProjectId() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'projectId', Sort.asc); + }); + } + + QueryBuilder + sortByProjectIdDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'projectId', Sort.desc); + }); + } + + QueryBuilder + sortByShowLabel() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'showLabel', Sort.asc); + }); + } + + QueryBuilder + sortByShowLabelDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'showLabel', Sort.desc); + }); + } + + QueryBuilder + sortByVisualizationCode() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'visualizationCode', Sort.asc); + }); + } + + QueryBuilder + sortByVisualizationCodeDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'visualizationCode', Sort.desc); + }); + } +} + +extension DashboardResponseQuerySortThenBy + on QueryBuilder { + QueryBuilder + thenByChartType() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'chartType', Sort.asc); + }); + } + + QueryBuilder + thenByChartTypeDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'chartType', Sort.desc); + }); + } + + QueryBuilder + thenByDrillDownChartId() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'drillDownChartId', Sort.asc); + }); + } + + QueryBuilder + thenByDrillDownChartIdDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'drillDownChartId', Sort.desc); + }); + } + + QueryBuilder + thenByHideHeaderDenomination() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'hideHeaderDenomination', Sort.asc); + }); + } + + QueryBuilder + thenByHideHeaderDenominationDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'hideHeaderDenomination', Sort.desc); + }); + } + + QueryBuilder + thenByHideInsights() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'hideInsights', Sort.asc); + }); + } + + QueryBuilder + thenByHideInsightsDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'hideInsights', Sort.desc); + }); + } + + QueryBuilder thenById() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'id', Sort.asc); + }); + } + + QueryBuilder + thenByIdDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'id', Sort.desc); + }); + } + + QueryBuilder + thenByLastSelectedDate() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'lastSelectedDate', Sort.asc); + }); + } + + QueryBuilder + thenByLastSelectedDateDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'lastSelectedDate', Sort.desc); + }); + } + + QueryBuilder + thenByProjectId() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'projectId', Sort.asc); + }); + } + + QueryBuilder + thenByProjectIdDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'projectId', Sort.desc); + }); + } + + QueryBuilder + thenByShowLabel() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'showLabel', Sort.asc); + }); + } + + QueryBuilder + thenByShowLabelDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'showLabel', Sort.desc); + }); + } + + QueryBuilder + thenByVisualizationCode() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'visualizationCode', Sort.asc); + }); + } + + QueryBuilder + thenByVisualizationCodeDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'visualizationCode', Sort.desc); + }); + } +} + +extension DashboardResponseQueryWhereDistinct + on QueryBuilder { + QueryBuilder + distinctByChartType({bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'chartType', caseSensitive: caseSensitive); + }); + } + + QueryBuilder + distinctByDrillDownChartId({bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'drillDownChartId', + caseSensitive: caseSensitive); + }); + } + + QueryBuilder + distinctByHideHeaderDenomination() { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'hideHeaderDenomination'); + }); + } + + QueryBuilder + distinctByHideInsights() { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'hideInsights'); + }); + } + + QueryBuilder + distinctByLastSelectedDate() { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'lastSelectedDate'); + }); + } + + QueryBuilder + distinctByProjectId({bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'projectId', caseSensitive: caseSensitive); + }); + } + + QueryBuilder + distinctByShowLabel() { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'showLabel'); + }); + } + + QueryBuilder + distinctByVisualizationCode({bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'visualizationCode', + caseSensitive: caseSensitive); + }); + } +} + +extension DashboardResponseQueryProperty + on QueryBuilder { + QueryBuilder idProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'id'); + }); + } + + QueryBuilder + chartTypeProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'chartType'); + }); + } + + QueryBuilder?, QQueryOperations> + dataProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'data'); + }); + } + + QueryBuilder + drillDownChartIdProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'drillDownChartId'); + }); + } + + QueryBuilder + hideHeaderDenominationProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'hideHeaderDenomination'); + }); + } + + QueryBuilder + hideInsightsProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'hideInsights'); + }); + } + + QueryBuilder + lastSelectedDateProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'lastSelectedDate'); + }); + } + + QueryBuilder + projectIdProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'projectId'); + }); + } + + QueryBuilder showLabelProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'showLabel'); + }); + } + + QueryBuilder + visualizationCodeProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'visualizationCode'); + }); + } +} + +// ************************************************************************** +// IsarEmbeddedGenerator +// ************************************************************************** + +// coverage:ignore-file +// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types + +const DashboardChartDataSchema = Schema( + name: r'DashboardChartData', + id: -4200617381045034431, + properties: { + r'headerName': PropertySchema( + id: 0, + name: r'headerName', + type: IsarType.string, + ), + r'headerSymbol': PropertySchema( + id: 1, + name: r'headerSymbol', + type: IsarType.string, + ), + r'headerValue': PropertySchema( + id: 2, + name: r'headerValue', + type: IsarType.string, + ), + r'insight': PropertySchema( + id: 3, + name: r'insight', + type: IsarType.object, + target: r'Insight', + ), + r'plots': PropertySchema( + id: 4, + name: r'plots', + type: IsarType.objectList, + target: r'DashboardPlot', + ) + }, + estimateSize: _dashboardChartDataEstimateSize, + serialize: _dashboardChartDataSerialize, + deserialize: _dashboardChartDataDeserialize, + deserializeProp: _dashboardChartDataDeserializeProp, +); + +int _dashboardChartDataEstimateSize( + DashboardChartData object, + List offsets, + Map> allOffsets, +) { + var bytesCount = offsets.last; + { + final value = object.headerName; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + { + final value = object.headerSymbol; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + { + final value = object.headerValue; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + { + final value = object.insight; + if (value != null) { + bytesCount += 3 + + InsightSchema.estimateSize(value, allOffsets[Insight]!, allOffsets); + } + } + { + final list = object.plots; + if (list != null) { + bytesCount += 3 + list.length * 3; + { + final offsets = allOffsets[DashboardPlot]!; + for (var i = 0; i < list.length; i++) { + final value = list[i]; + bytesCount += + DashboardPlotSchema.estimateSize(value, offsets, allOffsets); + } + } + } + } + return bytesCount; +} + +void _dashboardChartDataSerialize( + DashboardChartData object, + IsarWriter writer, + List offsets, + Map> allOffsets, +) { + writer.writeString(offsets[0], object.headerName); + writer.writeString(offsets[1], object.headerSymbol); + writer.writeString(offsets[2], object.headerValue); + writer.writeObject( + offsets[3], + allOffsets, + InsightSchema.serialize, + object.insight, + ); + writer.writeObjectList( + offsets[4], + allOffsets, + DashboardPlotSchema.serialize, + object.plots, + ); +} + +DashboardChartData _dashboardChartDataDeserialize( + Id id, + IsarReader reader, + List offsets, + Map> allOffsets, +) { + final object = DashboardChartData(); + object.headerName = reader.readStringOrNull(offsets[0]); + object.headerSymbol = reader.readStringOrNull(offsets[1]); + object.headerValue = reader.readStringOrNull(offsets[2]); + object.insight = reader.readObjectOrNull( + offsets[3], + InsightSchema.deserialize, + allOffsets, + ); + object.plots = reader.readObjectList( + offsets[4], + DashboardPlotSchema.deserialize, + allOffsets, + DashboardPlot(), + ); + return object; +} + +P _dashboardChartDataDeserializeProp

( + IsarReader reader, + int propertyId, + int offset, + Map> allOffsets, +) { + switch (propertyId) { + case 0: + return (reader.readStringOrNull(offset)) as P; + case 1: + return (reader.readStringOrNull(offset)) as P; + case 2: + return (reader.readStringOrNull(offset)) as P; + case 3: + return (reader.readObjectOrNull( + offset, + InsightSchema.deserialize, + allOffsets, + )) as P; + case 4: + return (reader.readObjectList( + offset, + DashboardPlotSchema.deserialize, + allOffsets, + DashboardPlot(), + )) as P; + default: + throw IsarError('Unknown property with id $propertyId'); + } +} + +extension DashboardChartDataQueryFilter + on QueryBuilder { + QueryBuilder + headerNameIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'headerName', + )); + }); + } + + QueryBuilder + headerNameIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'headerName', + )); + }); + } + + QueryBuilder + headerNameEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'headerName', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerNameGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'headerName', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerNameLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'headerName', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerNameBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'headerName', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerNameStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'headerName', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerNameEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'headerName', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerNameContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'headerName', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerNameMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'headerName', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerNameIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'headerName', + value: '', + )); + }); + } + + QueryBuilder + headerNameIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'headerName', + value: '', + )); + }); + } + + QueryBuilder + headerSymbolIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'headerSymbol', + )); + }); + } + + QueryBuilder + headerSymbolIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'headerSymbol', + )); + }); + } + + QueryBuilder + headerSymbolEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'headerSymbol', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerSymbolGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'headerSymbol', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerSymbolLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'headerSymbol', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerSymbolBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'headerSymbol', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerSymbolStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'headerSymbol', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerSymbolEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'headerSymbol', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerSymbolContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'headerSymbol', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerSymbolMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'headerSymbol', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerSymbolIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'headerSymbol', + value: '', + )); + }); + } + + QueryBuilder + headerSymbolIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'headerSymbol', + value: '', + )); + }); + } + + QueryBuilder + headerValueIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'headerValue', + )); + }); + } + + QueryBuilder + headerValueIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'headerValue', + )); + }); + } + + QueryBuilder + headerValueEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'headerValue', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerValueGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'headerValue', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerValueLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'headerValue', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerValueBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'headerValue', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerValueStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'headerValue', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerValueEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'headerValue', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerValueContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'headerValue', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerValueMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'headerValue', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerValueIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'headerValue', + value: '', + )); + }); + } + + QueryBuilder + headerValueIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'headerValue', + value: '', + )); + }); + } + + QueryBuilder + insightIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'insight', + )); + }); + } + + QueryBuilder + insightIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'insight', + )); + }); + } + + QueryBuilder + plotsIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'plots', + )); + }); + } + + QueryBuilder + plotsIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'plots', + )); + }); + } + + QueryBuilder + plotsLengthEqualTo(int length) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'plots', + length, + true, + length, + true, + ); + }); + } + + QueryBuilder + plotsIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'plots', + 0, + true, + 0, + true, + ); + }); + } + + QueryBuilder + plotsIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'plots', + 0, + false, + 999999, + true, + ); + }); + } + + QueryBuilder + plotsLengthLessThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'plots', + 0, + true, + length, + include, + ); + }); + } + + QueryBuilder + plotsLengthGreaterThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'plots', + length, + include, + 999999, + true, + ); + }); + } + + QueryBuilder + plotsLengthBetween( + int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'plots', + lower, + includeLower, + upper, + includeUpper, + ); + }); + } +} + +extension DashboardChartDataQueryObject + on QueryBuilder { + QueryBuilder + insight(FilterQuery q) { + return QueryBuilder.apply(this, (query) { + return query.object(q, r'insight'); + }); + } + + QueryBuilder + plotsElement(FilterQuery q) { + return QueryBuilder.apply(this, (query) { + return query.object(q, r'plots'); + }); + } +} + +// coverage:ignore-file +// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types + +const DashboardPlotSchema = Schema( + name: r'DashboardPlot', + id: -4159917448319374876, + properties: { + r'label': PropertySchema( + id: 0, + name: r'label', + type: IsarType.string, + ), + r'name': PropertySchema( + id: 1, + name: r'name', + type: IsarType.string, + ), + r'strValue': PropertySchema( + id: 2, + name: r'strValue', + type: IsarType.string, + ), + r'symbol': PropertySchema( + id: 3, + name: r'symbol', + type: IsarType.string, + ), + r'value': PropertySchema( + id: 4, + name: r'value', + type: IsarType.string, + ) + }, + estimateSize: _dashboardPlotEstimateSize, + serialize: _dashboardPlotSerialize, + deserialize: _dashboardPlotDeserialize, + deserializeProp: _dashboardPlotDeserializeProp, +); + +int _dashboardPlotEstimateSize( + DashboardPlot object, + List offsets, + Map> allOffsets, +) { + var bytesCount = offsets.last; + { + final value = object.label; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + { + final value = object.name; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + { + final value = object.strValue; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + { + final value = object.symbol; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + { + final value = object.value; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + return bytesCount; +} + +void _dashboardPlotSerialize( + DashboardPlot object, + IsarWriter writer, + List offsets, + Map> allOffsets, +) { + writer.writeString(offsets[0], object.label); + writer.writeString(offsets[1], object.name); + writer.writeString(offsets[2], object.strValue); + writer.writeString(offsets[3], object.symbol); + writer.writeString(offsets[4], object.value); +} + +DashboardPlot _dashboardPlotDeserialize( + Id id, + IsarReader reader, + List offsets, + Map> allOffsets, +) { + final object = DashboardPlot(); + object.label = reader.readStringOrNull(offsets[0]); + object.name = reader.readStringOrNull(offsets[1]); + object.strValue = reader.readStringOrNull(offsets[2]); + object.symbol = reader.readStringOrNull(offsets[3]); + object.value = reader.readStringOrNull(offsets[4]); + return object; +} + +P _dashboardPlotDeserializeProp

( + IsarReader reader, + int propertyId, + int offset, + Map> allOffsets, +) { + switch (propertyId) { + case 0: + return (reader.readStringOrNull(offset)) as P; + case 1: + return (reader.readStringOrNull(offset)) as P; + case 2: + return (reader.readStringOrNull(offset)) as P; + case 3: + return (reader.readStringOrNull(offset)) as P; + case 4: + return (reader.readStringOrNull(offset)) as P; + default: + throw IsarError('Unknown property with id $propertyId'); + } +} + +extension DashboardPlotQueryFilter + on QueryBuilder { + QueryBuilder + labelIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'label', + )); + }); + } + + QueryBuilder + labelIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'label', + )); + }); + } + + QueryBuilder + labelEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'label', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + labelGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'label', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + labelLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'label', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + labelBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'label', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + labelStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'label', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + labelEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'label', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + labelContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'label', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + labelMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'label', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + labelIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'label', + value: '', + )); + }); + } + + QueryBuilder + labelIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'label', + value: '', + )); + }); + } + + QueryBuilder + nameIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'name', + )); + }); + } + + QueryBuilder + nameIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'name', + )); + }); + } + + QueryBuilder nameEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'name', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameMatches( + String pattern, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'name', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + nameIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'name', + value: '', + )); + }); + } + + QueryBuilder + nameIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'name', + value: '', + )); + }); + } + + QueryBuilder + strValueIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'strValue', + )); + }); + } + + QueryBuilder + strValueIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'strValue', + )); + }); + } + + QueryBuilder + strValueEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'strValue', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + strValueGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'strValue', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + strValueLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'strValue', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + strValueBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'strValue', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + strValueStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'strValue', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + strValueEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'strValue', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + strValueContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'strValue', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + strValueMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'strValue', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + strValueIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'strValue', + value: '', + )); + }); + } + + QueryBuilder + strValueIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'strValue', + value: '', + )); + }); + } + + QueryBuilder + symbolIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'symbol', + )); + }); + } + + QueryBuilder + symbolIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'symbol', + )); + }); + } + + QueryBuilder + symbolEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'symbol', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + symbolGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'symbol', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + symbolLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'symbol', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + symbolBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'symbol', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + symbolStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'symbol', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + symbolEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'symbol', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + symbolContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'symbol', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + symbolMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'symbol', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + symbolIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'symbol', + value: '', + )); + }); + } + + QueryBuilder + symbolIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'symbol', + value: '', + )); + }); + } + + QueryBuilder + valueIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'value', + )); + }); + } + + QueryBuilder + valueIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'value', + )); + }); + } + + QueryBuilder + valueEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'value', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + valueGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'value', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + valueLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'value', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + valueBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'value', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + valueStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'value', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + valueEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'value', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + valueContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'value', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + valueMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'value', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + valueIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'value', + value: '', + )); + }); + } + + QueryBuilder + valueIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'value', + value: '', + )); + }); + } +} + +extension DashboardPlotQueryObject + on QueryBuilder {} + +// coverage:ignore-file +// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types + +const InsightSchema = Schema( + name: r'Insight', + id: -5337822884227880275, + properties: { + r'colorCode': PropertySchema( + id: 0, + name: r'colorCode', + type: IsarType.string, + ), + r'indicator': PropertySchema( + id: 1, + name: r'indicator', + type: IsarType.string, + ), + r'name': PropertySchema( + id: 2, + name: r'name', + type: IsarType.string, + ), + r'value': PropertySchema( + id: 3, + name: r'value', + type: IsarType.string, + ) + }, + estimateSize: _insightEstimateSize, + serialize: _insightSerialize, + deserialize: _insightDeserialize, + deserializeProp: _insightDeserializeProp, +); + +int _insightEstimateSize( + Insight object, + List offsets, + Map> allOffsets, +) { + var bytesCount = offsets.last; + { + final value = object.colorCode; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + { + final value = object.indicator; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + { + final value = object.name; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + { + final value = object.value; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + return bytesCount; +} + +void _insightSerialize( + Insight object, + IsarWriter writer, + List offsets, + Map> allOffsets, +) { + writer.writeString(offsets[0], object.colorCode); + writer.writeString(offsets[1], object.indicator); + writer.writeString(offsets[2], object.name); + writer.writeString(offsets[3], object.value); +} + +Insight _insightDeserialize( + Id id, + IsarReader reader, + List offsets, + Map> allOffsets, +) { + final object = Insight(); + object.colorCode = reader.readStringOrNull(offsets[0]); + object.indicator = reader.readStringOrNull(offsets[1]); + object.name = reader.readStringOrNull(offsets[2]); + object.value = reader.readStringOrNull(offsets[3]); + return object; +} + +P _insightDeserializeProp

( + IsarReader reader, + int propertyId, + int offset, + Map> allOffsets, +) { + switch (propertyId) { + case 0: + return (reader.readStringOrNull(offset)) as P; + case 1: + return (reader.readStringOrNull(offset)) as P; + case 2: + return (reader.readStringOrNull(offset)) as P; + case 3: + return (reader.readStringOrNull(offset)) as P; + default: + throw IsarError('Unknown property with id $propertyId'); + } +} + +extension InsightQueryFilter + on QueryBuilder { + QueryBuilder colorCodeIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'colorCode', + )); + }); + } + + QueryBuilder colorCodeIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'colorCode', + )); + }); + } + + QueryBuilder colorCodeEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'colorCode', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder colorCodeGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'colorCode', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder colorCodeLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'colorCode', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder colorCodeBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'colorCode', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder colorCodeStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'colorCode', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder colorCodeEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'colorCode', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder colorCodeContains( + String value, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'colorCode', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder colorCodeMatches( + String pattern, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'colorCode', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder colorCodeIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'colorCode', + value: '', + )); + }); + } + + QueryBuilder colorCodeIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'colorCode', + value: '', + )); + }); + } + + QueryBuilder indicatorIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'indicator', + )); + }); + } + + QueryBuilder indicatorIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'indicator', + )); + }); + } + + QueryBuilder indicatorEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'indicator', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder indicatorGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'indicator', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder indicatorLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'indicator', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder indicatorBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'indicator', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder indicatorStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'indicator', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder indicatorEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'indicator', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder indicatorContains( + String value, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'indicator', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder indicatorMatches( + String pattern, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'indicator', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder indicatorIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'indicator', + value: '', + )); + }); + } + + QueryBuilder indicatorIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'indicator', + value: '', + )); + }); + } + + QueryBuilder nameIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'name', + )); + }); + } + + QueryBuilder nameIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'name', + )); + }); + } + + QueryBuilder nameEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'name', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameContains( + String value, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameMatches( + String pattern, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'name', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'name', + value: '', + )); + }); + } + + QueryBuilder nameIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'name', + value: '', + )); + }); + } + + QueryBuilder valueIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'value', + )); + }); + } + + QueryBuilder valueIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'value', + )); + }); + } + + QueryBuilder valueEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'value', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder valueGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'value', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder valueLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'value', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder valueBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'value', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder valueStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'value', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder valueEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'value', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder valueContains( + String value, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'value', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder valueMatches( + String pattern, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'value', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder valueIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'value', + value: '', + )); + }); + } + + QueryBuilder valueIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'value', + value: '', + )); + }); + } +} + +extension InsightQueryObject + on QueryBuilder {} diff --git a/packages/digit_dss/lib/data/remote/dashboard.dart b/packages/digit_dss/lib/data/remote/dashboard.dart new file mode 100644 index 000000000..57679b336 --- /dev/null +++ b/packages/digit_dss/lib/data/remote/dashboard.dart @@ -0,0 +1,152 @@ +import 'dart:async'; // Import the dart:async library for asynchronous operations +import 'dart:convert'; // Import the dart:convert library for JSON encoding and decoding + +import 'package:digit_components/utils/app_logger.dart'; // Import the app_logger.dart file from the digit_components package +import 'package:digit_dss/data/local_store/no_sql/schema/dashboard_response.dart'; // Import the dashboard_response.dart file from the digit_dss package +import 'package:dio/dio.dart'; // Import the dio package for HTTP client functionality +import 'package:flutter/material.dart'; +import 'package:isar/isar.dart'; // Import the isar package for database management + +import '../../models/entities/dashboard_config.dart'; +import '../../models/entities/dashboard_response_model.dart'; +import '../../models/entities/dss_enums.dart'; +import '../local_store/no_sql/schema/dashboard_config_schema.dart'; // Import the dashboard_response_model.dart file from the models/entities directory + +// DashboardRemoteRepository class handles remote API requests and database transactions +class DashboardRemoteRepository { + final Dio _client; // Dio HTTP client instance + DashboardRemoteRepository( + this._client); // Constructor to initialize the Dio client + + // Method to search data from the API and write it to the Isar database + FutureOr searchAndWriteToDB({ + required String apiEndPoint, // API endpoint URL + Object? query, // Query parameters for the API request + required String projectId, // Project ID for filtering data + DateTime? lastSelectedDate, // Last selected date for filtering data + required Isar isar, // Isar database instance + }) async { + try { + final response = await _client.post( + apiEndPoint, + data: query, + ); // Make a POST request to the API endpoint with the query parameters + + // Map the response data to the DashboardResponseModel + final dashboardResponse = DashboardResponseModelMapper.fromMap( + json.decode(response.data)[DSSEnums.responseData.toValue()], + ); + + if (dashboardResponse != null) { + // Write transaction to delete existing data and insert new data + await isar.writeTxn(() async { + await isar.dashboardResponses + .where() + .filter() + .projectIdEqualTo(projectId) + .visualizationCodeEqualTo(dashboardResponse.visualizationCode) + .chartTypeEqualTo(dashboardResponse.chartType) + .deleteAll(); // Delete existing data matching the project ID, visualization code, and chart type + }); + + final data = + dashboardResponse; // Assign the dashboard response data to a local variable + final chart = + DashboardResponse(); // Create a new DashboardResponse instance + chart.chartType = data.chartType; // Set chart type + chart.hideHeaderDenomination = + data.hideHeaderDenomination; // Set hide header denomination flag + chart.lastSelectedDate = + lastSelectedDate ?? DateTime.now(); // Set last selected date + chart.visualizationCode = + data.visualizationCode; // Set visualization code + chart.projectId = projectId; // Set project ID + chart.drillDownChartId = + data.drillDownChartId; // Set drill down chart ID + chart.hideInsights = data.hideInsights; // Set hide insights flag + chart.showLabel = data.showLabel; // Set show label flag + + // Map the data plots to the DashboardChartData and DashboardPlot instances + final dataPlots = data.data?.map((c) { + final chartData = DashboardChartData(); + chartData.headerValue = c.headerValue; + chartData.headerName = c.headerName; + chartData.headerSymbol = c.headerSymbol; + chartData.plots = c.plots?.map((p) { + final plot = DashboardPlot(); + plot.label = p.label; + plot.strValue = p.strValue; + plot.name = p.name; + plot.value = p.value; + plot.symbol = p.symbol; + return plot; + }).toList(); + + // Map the insight data to the Insight instance + final insight = Insight(); + insight.value = c.insight?.value; + insight.name = c.insight?.name; + insight.colorCode = c.insight?.colorCode; + insight.indicator = c.insight?.indicator; + chartData.insight = insight; + return chartData; + }).toList(); + chart.data = dataPlots; // Set the data plots + + // Write transaction to insert the new chart data + return await isar.writeTxn(() async { + await isar.dashboardResponses.put(chart); + }); + } + } on DioException catch (e) { + // Handle Dio exceptions and log the error + debugPrint(e.toString()); + AppLogger.instance.error( + title: 'Dashboard Repository', + message: '$e', + stackTrace: e.stackTrace, + ); + rethrow; // Rethrow the exception + } + } + + Future searchDashboardConfig( + String apiEndPoint, + Map body, + ) async { + try { + final response = await _client.post(apiEndPoint, data: body); + + final appCon = jsonEncode(response.data); + + return appCon; + } on DioException catch (e) { + AppLogger.instance.error( + title: 'MDMS Repository', + message: '$e', + stackTrace: e.stackTrace, + ); + rethrow; + } + } + + FutureOr writeToDashboardConfigDB( + DashboardConfigWrapper dashboardConfigWrapper, + Isar isar, + ) async { + final dashboardConfig = DashboardConfigSchema() + ..enableDashboard = dashboardConfigWrapper.enableDashboard + ..charts = dashboardConfigWrapper.charts?.map((chart) { + final dssChart = DashboardChartConfigSchema() + ..name = chart.name + ..active = chart.active + ..chartType = chart.chartType + ..vizType = chart.vizType; + return dssChart; + }).toList(); + + await isar.writeTxn(() async { + await isar.dashboardConfigSchemas.put(dashboardConfig); + }); + } +} diff --git a/packages/digit_dss/lib/digit_dss.dart b/packages/digit_dss/lib/digit_dss.dart new file mode 100644 index 000000000..49d02c3f6 --- /dev/null +++ b/packages/digit_dss/lib/digit_dss.dart @@ -0,0 +1,24 @@ +@MappableLib( + generateInitializerForScope: InitializerScope.package, +) +library digit_dss; + +import 'package:dart_mappable/dart_mappable.dart'; + +export 'package:digit_dss/utils/utils.dart'; + +export 'blocs/app_localization.dart'; +export 'blocs/dashboard.dart'; +export 'blocs/dashboard_localization_delegate.dart'; +export 'data/local_store/no_sql/schema/dashboard_response.dart'; +export 'data/local_store/no_sql/schema/dashboard_config_schema.dart'; +export 'data/remote/dashboard.dart'; +export 'digit_dss.init.dart'; +export 'models/entities/chart_data.dart'; +export 'models/entities/dashboard_request.dart'; +export 'models/entities/dashboard_response_model.dart'; +export 'models/entities/dss_enums.dart'; +export 'models/entities/insight.dart'; +export 'models/entities/plots.dart'; +export 'models/entities/dashboard_config.dart'; +export 'pages/dashboard/dashboard.dart'; diff --git a/packages/digit_dss/lib/digit_dss.init.dart b/packages/digit_dss/lib/digit_dss.init.dart new file mode 100644 index 000000000..473c2fcb0 --- /dev/null +++ b/packages/digit_dss/lib/digit_dss.init.dart @@ -0,0 +1,24 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element + +import 'models/entities/chart_data.dart' as p0; +import 'models/entities/dashboard_request.dart' as p1; +import 'models/entities/dashboard_response_model.dart' as p2; +import 'models/entities/dss_enums.dart' as p3; +import 'models/entities/insight.dart' as p4; +import 'models/entities/plots.dart' as p5; + +void initializeMappers() { + p0.DashboardChartDataModelMapper.ensureInitialized(); + p1.DashboardRequestModelMapper.ensureInitialized(); + p1.AggregationRequestDtoMapper.ensureInitialized(); + p1.DSSHeadersMapper.ensureInitialized(); + p1.RequestDateMapper.ensureInitialized(); + p2.DashboardResponseSearchModelMapper.ensureInitialized(); + p2.DashboardResponseModelMapper.ensureInitialized(); + p3.DSSEnumsMapper.ensureInitialized(); + p4.InsightModelMapper.ensureInitialized(); + p5.DashboardPlotModelMapper.ensureInitialized(); +} diff --git a/packages/digit_dss/lib/models/entities/chart_data.dart b/packages/digit_dss/lib/models/entities/chart_data.dart new file mode 100644 index 000000000..5e66310db --- /dev/null +++ b/packages/digit_dss/lib/models/entities/chart_data.dart @@ -0,0 +1,30 @@ +// Generated using mason. Do not modify by hand +import 'package:dart_mappable/dart_mappable.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:digit_dss/models/entities/insight.dart'; +import 'package:digit_dss/models/entities/plots.dart'; + +part 'chart_data.mapper.dart'; + +@MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) +class DashboardChartDataModel with DashboardChartDataModelMappable { + final String? headerName; + final String? headerSymbol; + final String? headerValue; + final InsightModel? insight; + final List? plots; + final String? visualizationCode; + final String? chartType; + final String? projectId; + + DashboardChartDataModel({ + this.headerName, + this.headerSymbol, + this.headerValue, + this.projectId, + this.chartType, + this.visualizationCode, + this.insight, + this.plots, + }) : super(); +} diff --git a/packages/digit_dss/lib/models/entities/chart_data.mapper.dart b/packages/digit_dss/lib/models/entities/chart_data.mapper.dart new file mode 100644 index 000000000..9a69bda16 --- /dev/null +++ b/packages/digit_dss/lib/models/entities/chart_data.mapper.dart @@ -0,0 +1,213 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter + +part of 'chart_data.dart'; + +class DashboardChartDataModelMapper + extends ClassMapperBase { + DashboardChartDataModelMapper._(); + + static DashboardChartDataModelMapper? _instance; + static DashboardChartDataModelMapper ensureInitialized() { + if (_instance == null) { + MapperContainer.globals + .use(_instance = DashboardChartDataModelMapper._()); + } + return _instance!; + } + + @override + final String id = 'DashboardChartDataModel'; + + static String? _$headerName(DashboardChartDataModel v) => v.headerName; + static const Field _f$headerName = + Field('headerName', _$headerName, opt: true); + static String? _$headerSymbol(DashboardChartDataModel v) => v.headerSymbol; + static const Field _f$headerSymbol = + Field('headerSymbol', _$headerSymbol, opt: true); + static String? _$headerValue(DashboardChartDataModel v) => v.headerValue; + static const Field _f$headerValue = + Field('headerValue', _$headerValue, opt: true); + static String? _$projectId(DashboardChartDataModel v) => v.projectId; + static const Field _f$projectId = + Field('projectId', _$projectId, opt: true); + static String? _$chartType(DashboardChartDataModel v) => v.chartType; + static const Field _f$chartType = + Field('chartType', _$chartType, opt: true); + static String? _$visualizationCode(DashboardChartDataModel v) => + v.visualizationCode; + static const Field _f$visualizationCode = + Field('visualizationCode', _$visualizationCode, opt: true); + static InsightModel? _$insight(DashboardChartDataModel v) => v.insight; + static const Field _f$insight = + Field('insight', _$insight, opt: true); + static List? _$plots(DashboardChartDataModel v) => + v.plots; + static const Field> + _f$plots = Field('plots', _$plots, opt: true); + + @override + final MappableFields fields = const { + #headerName: _f$headerName, + #headerSymbol: _f$headerSymbol, + #headerValue: _f$headerValue, + #projectId: _f$projectId, + #chartType: _f$chartType, + #visualizationCode: _f$visualizationCode, + #insight: _f$insight, + #plots: _f$plots, + }; + @override + final bool ignoreNull = true; + + static DashboardChartDataModel _instantiate(DecodingData data) { + return DashboardChartDataModel( + headerName: data.dec(_f$headerName), + headerSymbol: data.dec(_f$headerSymbol), + headerValue: data.dec(_f$headerValue), + projectId: data.dec(_f$projectId), + chartType: data.dec(_f$chartType), + visualizationCode: data.dec(_f$visualizationCode), + insight: data.dec(_f$insight), + plots: data.dec(_f$plots)); + } + + @override + final Function instantiate = _instantiate; + + static DashboardChartDataModel fromMap(Map map) { + return ensureInitialized().decodeMap(map); + } + + static DashboardChartDataModel fromJson(String json) { + return ensureInitialized().decodeJson(json); + } +} + +mixin DashboardChartDataModelMappable { + String toJson() { + return DashboardChartDataModelMapper.ensureInitialized() + .encodeJson(this as DashboardChartDataModel); + } + + Map toMap() { + return DashboardChartDataModelMapper.ensureInitialized() + .encodeMap(this as DashboardChartDataModel); + } + + DashboardChartDataModelCopyWith + get copyWith => _DashboardChartDataModelCopyWithImpl( + this as DashboardChartDataModel, $identity, $identity); + @override + String toString() { + return DashboardChartDataModelMapper.ensureInitialized() + .stringifyValue(this as DashboardChartDataModel); + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (runtimeType == other.runtimeType && + DashboardChartDataModelMapper.ensureInitialized() + .isValueEqual(this as DashboardChartDataModel, other)); + } + + @override + int get hashCode { + return DashboardChartDataModelMapper.ensureInitialized() + .hashValue(this as DashboardChartDataModel); + } +} + +extension DashboardChartDataModelValueCopy<$R, $Out> + on ObjectCopyWith<$R, DashboardChartDataModel, $Out> { + DashboardChartDataModelCopyWith<$R, DashboardChartDataModel, $Out> + get $asDashboardChartDataModel => $base + .as((v, t, t2) => _DashboardChartDataModelCopyWithImpl(v, t, t2)); +} + +abstract class DashboardChartDataModelCopyWith< + $R, + $In extends DashboardChartDataModel, + $Out> implements ClassCopyWith<$R, $In, $Out> { + InsightModelCopyWith<$R, InsightModel, InsightModel>? get insight; + ListCopyWith< + $R, + DashboardPlotModel, + DashboardPlotModelCopyWith<$R, DashboardPlotModel, + DashboardPlotModel>>? get plots; + $R call( + {String? headerName, + String? headerSymbol, + String? headerValue, + String? projectId, + String? chartType, + String? visualizationCode, + InsightModel? insight, + List? plots}); + DashboardChartDataModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>( + Then<$Out2, $R2> t); +} + +class _DashboardChartDataModelCopyWithImpl<$R, $Out> + extends ClassCopyWithBase<$R, DashboardChartDataModel, $Out> + implements + DashboardChartDataModelCopyWith<$R, DashboardChartDataModel, $Out> { + _DashboardChartDataModelCopyWithImpl(super.value, super.then, super.then2); + + @override + late final ClassMapperBase $mapper = + DashboardChartDataModelMapper.ensureInitialized(); + @override + InsightModelCopyWith<$R, InsightModel, InsightModel>? get insight => + $value.insight?.copyWith.$chain((v) => call(insight: v)); + @override + ListCopyWith< + $R, + DashboardPlotModel, + DashboardPlotModelCopyWith<$R, DashboardPlotModel, + DashboardPlotModel>>? get plots => $value.plots != null + ? ListCopyWith( + $value.plots!, (v, t) => v.copyWith.$chain(t), (v) => call(plots: v)) + : null; + @override + $R call( + {Object? headerName = $none, + Object? headerSymbol = $none, + Object? headerValue = $none, + Object? projectId = $none, + Object? chartType = $none, + Object? visualizationCode = $none, + Object? insight = $none, + Object? plots = $none}) => + $apply(FieldCopyWithData({ + if (headerName != $none) #headerName: headerName, + if (headerSymbol != $none) #headerSymbol: headerSymbol, + if (headerValue != $none) #headerValue: headerValue, + if (projectId != $none) #projectId: projectId, + if (chartType != $none) #chartType: chartType, + if (visualizationCode != $none) #visualizationCode: visualizationCode, + if (insight != $none) #insight: insight, + if (plots != $none) #plots: plots + })); + @override + DashboardChartDataModel $make(CopyWithData data) => DashboardChartDataModel( + headerName: data.get(#headerName, or: $value.headerName), + headerSymbol: data.get(#headerSymbol, or: $value.headerSymbol), + headerValue: data.get(#headerValue, or: $value.headerValue), + projectId: data.get(#projectId, or: $value.projectId), + chartType: data.get(#chartType, or: $value.chartType), + visualizationCode: + data.get(#visualizationCode, or: $value.visualizationCode), + insight: data.get(#insight, or: $value.insight), + plots: data.get(#plots, or: $value.plots)); + + @override + DashboardChartDataModelCopyWith<$R2, DashboardChartDataModel, $Out2> + $chain<$R2, $Out2>(Then<$Out2, $R2> t) => + _DashboardChartDataModelCopyWithImpl($value, $cast, t); +} diff --git a/packages/digit_dss/lib/models/entities/dashboard_config.dart b/packages/digit_dss/lib/models/entities/dashboard_config.dart new file mode 100644 index 000000000..e510ad5aa --- /dev/null +++ b/packages/digit_dss/lib/models/entities/dashboard_config.dart @@ -0,0 +1,46 @@ +import 'package:freezed_annotation/freezed_annotation.dart'; + +part 'dashboard_config.freezed.dart'; +part 'dashboard_config.g.dart'; + +@freezed +class DashboardConfigPrimaryWrapper with _$DashboardConfigPrimaryWrapper { + const factory DashboardConfigPrimaryWrapper({ + @JsonKey(name: 'dashboardConfig') + @Default([]) + List dashboardConfigWrapper, + }) = _DashboardConfigPrimaryWrapper; + + factory DashboardConfigPrimaryWrapper.fromJson( + Map json, + ) => + _$DashboardConfigPrimaryWrapperFromJson(json); +} + +@freezed +class DashboardConfigWrapper with _$DashboardConfigWrapper { + const factory DashboardConfigWrapper({ + @JsonKey(name: 'enableDashboard') required bool enableDashboard, + @JsonKey(name: 'charts') List? charts, + }) = _DashboardConfigWrapper; + + factory DashboardConfigWrapper.fromJson( + Map json, + ) => + _$DashboardConfigWrapperFromJson(json); +} + +@freezed +class ChartConfigModel with _$ChartConfigModel { + const factory ChartConfigModel({ + @JsonKey(name: 'active') required bool active, + @JsonKey(name: 'name') required String name, + @JsonKey(name: 'vizType') String? vizType, + @JsonKey(name: 'chartType') required String chartType, + }) = _ChartConfigModel; + + factory ChartConfigModel.fromJson( + Map json, + ) => + _$ChartConfigModelFromJson(json); +} diff --git a/packages/digit_dss/lib/models/entities/dashboard_config.freezed.dart b/packages/digit_dss/lib/models/entities/dashboard_config.freezed.dart new file mode 100644 index 000000000..ff8cb1285 --- /dev/null +++ b/packages/digit_dss/lib/models/entities/dashboard_config.freezed.dart @@ -0,0 +1,585 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'dashboard_config.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + +DashboardConfigPrimaryWrapper _$DashboardConfigPrimaryWrapperFromJson( + Map json) { + return _DashboardConfigPrimaryWrapper.fromJson(json); +} + +/// @nodoc +mixin _$DashboardConfigPrimaryWrapper { + @JsonKey(name: 'dashboardConfig') + List get dashboardConfigWrapper => + throw _privateConstructorUsedError; + + Map toJson() => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + $DashboardConfigPrimaryWrapperCopyWith + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $DashboardConfigPrimaryWrapperCopyWith<$Res> { + factory $DashboardConfigPrimaryWrapperCopyWith( + DashboardConfigPrimaryWrapper value, + $Res Function(DashboardConfigPrimaryWrapper) then) = + _$DashboardConfigPrimaryWrapperCopyWithImpl<$Res, + DashboardConfigPrimaryWrapper>; + @useResult + $Res call( + {@JsonKey(name: 'dashboardConfig') + List dashboardConfigWrapper}); +} + +/// @nodoc +class _$DashboardConfigPrimaryWrapperCopyWithImpl<$Res, + $Val extends DashboardConfigPrimaryWrapper> + implements $DashboardConfigPrimaryWrapperCopyWith<$Res> { + _$DashboardConfigPrimaryWrapperCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? dashboardConfigWrapper = null, + }) { + return _then(_value.copyWith( + dashboardConfigWrapper: null == dashboardConfigWrapper + ? _value.dashboardConfigWrapper + : dashboardConfigWrapper // ignore: cast_nullable_to_non_nullable + as List, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$DashboardConfigPrimaryWrapperImplCopyWith<$Res> + implements $DashboardConfigPrimaryWrapperCopyWith<$Res> { + factory _$$DashboardConfigPrimaryWrapperImplCopyWith( + _$DashboardConfigPrimaryWrapperImpl value, + $Res Function(_$DashboardConfigPrimaryWrapperImpl) then) = + __$$DashboardConfigPrimaryWrapperImplCopyWithImpl<$Res>; + @override + @useResult + $Res call( + {@JsonKey(name: 'dashboardConfig') + List dashboardConfigWrapper}); +} + +/// @nodoc +class __$$DashboardConfigPrimaryWrapperImplCopyWithImpl<$Res> + extends _$DashboardConfigPrimaryWrapperCopyWithImpl<$Res, + _$DashboardConfigPrimaryWrapperImpl> + implements _$$DashboardConfigPrimaryWrapperImplCopyWith<$Res> { + __$$DashboardConfigPrimaryWrapperImplCopyWithImpl( + _$DashboardConfigPrimaryWrapperImpl _value, + $Res Function(_$DashboardConfigPrimaryWrapperImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? dashboardConfigWrapper = null, + }) { + return _then(_$DashboardConfigPrimaryWrapperImpl( + dashboardConfigWrapper: null == dashboardConfigWrapper + ? _value._dashboardConfigWrapper + : dashboardConfigWrapper // ignore: cast_nullable_to_non_nullable + as List, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$DashboardConfigPrimaryWrapperImpl + implements _DashboardConfigPrimaryWrapper { + const _$DashboardConfigPrimaryWrapperImpl( + {@JsonKey(name: 'dashboardConfig') + final List dashboardConfigWrapper = const []}) + : _dashboardConfigWrapper = dashboardConfigWrapper; + + factory _$DashboardConfigPrimaryWrapperImpl.fromJson( + Map json) => + _$$DashboardConfigPrimaryWrapperImplFromJson(json); + + final List _dashboardConfigWrapper; + @override + @JsonKey(name: 'dashboardConfig') + List get dashboardConfigWrapper { + if (_dashboardConfigWrapper is EqualUnmodifiableListView) + return _dashboardConfigWrapper; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_dashboardConfigWrapper); + } + + @override + String toString() { + return 'DashboardConfigPrimaryWrapper(dashboardConfigWrapper: $dashboardConfigWrapper)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$DashboardConfigPrimaryWrapperImpl && + const DeepCollectionEquality().equals( + other._dashboardConfigWrapper, _dashboardConfigWrapper)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => Object.hash(runtimeType, + const DeepCollectionEquality().hash(_dashboardConfigWrapper)); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$DashboardConfigPrimaryWrapperImplCopyWith< + _$DashboardConfigPrimaryWrapperImpl> + get copyWith => __$$DashboardConfigPrimaryWrapperImplCopyWithImpl< + _$DashboardConfigPrimaryWrapperImpl>(this, _$identity); + + @override + Map toJson() { + return _$$DashboardConfigPrimaryWrapperImplToJson( + this, + ); + } +} + +abstract class _DashboardConfigPrimaryWrapper + implements DashboardConfigPrimaryWrapper { + const factory _DashboardConfigPrimaryWrapper( + {@JsonKey(name: 'dashboardConfig') + final List dashboardConfigWrapper}) = + _$DashboardConfigPrimaryWrapperImpl; + + factory _DashboardConfigPrimaryWrapper.fromJson(Map json) = + _$DashboardConfigPrimaryWrapperImpl.fromJson; + + @override + @JsonKey(name: 'dashboardConfig') + List get dashboardConfigWrapper; + @override + @JsonKey(ignore: true) + _$$DashboardConfigPrimaryWrapperImplCopyWith< + _$DashboardConfigPrimaryWrapperImpl> + get copyWith => throw _privateConstructorUsedError; +} + +DashboardConfigWrapper _$DashboardConfigWrapperFromJson( + Map json) { + return _DashboardConfigWrapper.fromJson(json); +} + +/// @nodoc +mixin _$DashboardConfigWrapper { + @JsonKey(name: 'enableDashboard') + bool get enableDashboard => throw _privateConstructorUsedError; + @JsonKey(name: 'charts') + List? get charts => throw _privateConstructorUsedError; + + Map toJson() => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + $DashboardConfigWrapperCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $DashboardConfigWrapperCopyWith<$Res> { + factory $DashboardConfigWrapperCopyWith(DashboardConfigWrapper value, + $Res Function(DashboardConfigWrapper) then) = + _$DashboardConfigWrapperCopyWithImpl<$Res, DashboardConfigWrapper>; + @useResult + $Res call( + {@JsonKey(name: 'enableDashboard') bool enableDashboard, + @JsonKey(name: 'charts') List? charts}); +} + +/// @nodoc +class _$DashboardConfigWrapperCopyWithImpl<$Res, + $Val extends DashboardConfigWrapper> + implements $DashboardConfigWrapperCopyWith<$Res> { + _$DashboardConfigWrapperCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? enableDashboard = null, + Object? charts = freezed, + }) { + return _then(_value.copyWith( + enableDashboard: null == enableDashboard + ? _value.enableDashboard + : enableDashboard // ignore: cast_nullable_to_non_nullable + as bool, + charts: freezed == charts + ? _value.charts + : charts // ignore: cast_nullable_to_non_nullable + as List?, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$DashboardConfigWrapperImplCopyWith<$Res> + implements $DashboardConfigWrapperCopyWith<$Res> { + factory _$$DashboardConfigWrapperImplCopyWith( + _$DashboardConfigWrapperImpl value, + $Res Function(_$DashboardConfigWrapperImpl) then) = + __$$DashboardConfigWrapperImplCopyWithImpl<$Res>; + @override + @useResult + $Res call( + {@JsonKey(name: 'enableDashboard') bool enableDashboard, + @JsonKey(name: 'charts') List? charts}); +} + +/// @nodoc +class __$$DashboardConfigWrapperImplCopyWithImpl<$Res> + extends _$DashboardConfigWrapperCopyWithImpl<$Res, + _$DashboardConfigWrapperImpl> + implements _$$DashboardConfigWrapperImplCopyWith<$Res> { + __$$DashboardConfigWrapperImplCopyWithImpl( + _$DashboardConfigWrapperImpl _value, + $Res Function(_$DashboardConfigWrapperImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? enableDashboard = null, + Object? charts = freezed, + }) { + return _then(_$DashboardConfigWrapperImpl( + enableDashboard: null == enableDashboard + ? _value.enableDashboard + : enableDashboard // ignore: cast_nullable_to_non_nullable + as bool, + charts: freezed == charts + ? _value._charts + : charts // ignore: cast_nullable_to_non_nullable + as List?, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$DashboardConfigWrapperImpl implements _DashboardConfigWrapper { + const _$DashboardConfigWrapperImpl( + {@JsonKey(name: 'enableDashboard') required this.enableDashboard, + @JsonKey(name: 'charts') final List? charts}) + : _charts = charts; + + factory _$DashboardConfigWrapperImpl.fromJson(Map json) => + _$$DashboardConfigWrapperImplFromJson(json); + + @override + @JsonKey(name: 'enableDashboard') + final bool enableDashboard; + final List? _charts; + @override + @JsonKey(name: 'charts') + List? get charts { + final value = _charts; + if (value == null) return null; + if (_charts is EqualUnmodifiableListView) return _charts; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); + } + + @override + String toString() { + return 'DashboardConfigWrapper(enableDashboard: $enableDashboard, charts: $charts)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$DashboardConfigWrapperImpl && + (identical(other.enableDashboard, enableDashboard) || + other.enableDashboard == enableDashboard) && + const DeepCollectionEquality().equals(other._charts, _charts)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => Object.hash(runtimeType, enableDashboard, + const DeepCollectionEquality().hash(_charts)); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$DashboardConfigWrapperImplCopyWith<_$DashboardConfigWrapperImpl> + get copyWith => __$$DashboardConfigWrapperImplCopyWithImpl< + _$DashboardConfigWrapperImpl>(this, _$identity); + + @override + Map toJson() { + return _$$DashboardConfigWrapperImplToJson( + this, + ); + } +} + +abstract class _DashboardConfigWrapper implements DashboardConfigWrapper { + const factory _DashboardConfigWrapper( + {@JsonKey(name: 'enableDashboard') required final bool enableDashboard, + @JsonKey(name: 'charts') + final List? charts}) = _$DashboardConfigWrapperImpl; + + factory _DashboardConfigWrapper.fromJson(Map json) = + _$DashboardConfigWrapperImpl.fromJson; + + @override + @JsonKey(name: 'enableDashboard') + bool get enableDashboard; + @override + @JsonKey(name: 'charts') + List? get charts; + @override + @JsonKey(ignore: true) + _$$DashboardConfigWrapperImplCopyWith<_$DashboardConfigWrapperImpl> + get copyWith => throw _privateConstructorUsedError; +} + +ChartConfigModel _$ChartConfigModelFromJson(Map json) { + return _ChartConfigModel.fromJson(json); +} + +/// @nodoc +mixin _$ChartConfigModel { + @JsonKey(name: 'active') + bool get active => throw _privateConstructorUsedError; + @JsonKey(name: 'name') + String get name => throw _privateConstructorUsedError; + @JsonKey(name: 'vizType') + String? get vizType => throw _privateConstructorUsedError; + @JsonKey(name: 'chartType') + String get chartType => throw _privateConstructorUsedError; + + Map toJson() => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + $ChartConfigModelCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $ChartConfigModelCopyWith<$Res> { + factory $ChartConfigModelCopyWith( + ChartConfigModel value, $Res Function(ChartConfigModel) then) = + _$ChartConfigModelCopyWithImpl<$Res, ChartConfigModel>; + @useResult + $Res call( + {@JsonKey(name: 'active') bool active, + @JsonKey(name: 'name') String name, + @JsonKey(name: 'vizType') String? vizType, + @JsonKey(name: 'chartType') String chartType}); +} + +/// @nodoc +class _$ChartConfigModelCopyWithImpl<$Res, $Val extends ChartConfigModel> + implements $ChartConfigModelCopyWith<$Res> { + _$ChartConfigModelCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? active = null, + Object? name = null, + Object? vizType = freezed, + Object? chartType = null, + }) { + return _then(_value.copyWith( + active: null == active + ? _value.active + : active // ignore: cast_nullable_to_non_nullable + as bool, + name: null == name + ? _value.name + : name // ignore: cast_nullable_to_non_nullable + as String, + vizType: freezed == vizType + ? _value.vizType + : vizType // ignore: cast_nullable_to_non_nullable + as String?, + chartType: null == chartType + ? _value.chartType + : chartType // ignore: cast_nullable_to_non_nullable + as String, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$ChartConfigModelImplCopyWith<$Res> + implements $ChartConfigModelCopyWith<$Res> { + factory _$$ChartConfigModelImplCopyWith(_$ChartConfigModelImpl value, + $Res Function(_$ChartConfigModelImpl) then) = + __$$ChartConfigModelImplCopyWithImpl<$Res>; + @override + @useResult + $Res call( + {@JsonKey(name: 'active') bool active, + @JsonKey(name: 'name') String name, + @JsonKey(name: 'vizType') String? vizType, + @JsonKey(name: 'chartType') String chartType}); +} + +/// @nodoc +class __$$ChartConfigModelImplCopyWithImpl<$Res> + extends _$ChartConfigModelCopyWithImpl<$Res, _$ChartConfigModelImpl> + implements _$$ChartConfigModelImplCopyWith<$Res> { + __$$ChartConfigModelImplCopyWithImpl(_$ChartConfigModelImpl _value, + $Res Function(_$ChartConfigModelImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? active = null, + Object? name = null, + Object? vizType = freezed, + Object? chartType = null, + }) { + return _then(_$ChartConfigModelImpl( + active: null == active + ? _value.active + : active // ignore: cast_nullable_to_non_nullable + as bool, + name: null == name + ? _value.name + : name // ignore: cast_nullable_to_non_nullable + as String, + vizType: freezed == vizType + ? _value.vizType + : vizType // ignore: cast_nullable_to_non_nullable + as String?, + chartType: null == chartType + ? _value.chartType + : chartType // ignore: cast_nullable_to_non_nullable + as String, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$ChartConfigModelImpl implements _ChartConfigModel { + const _$ChartConfigModelImpl( + {@JsonKey(name: 'active') required this.active, + @JsonKey(name: 'name') required this.name, + @JsonKey(name: 'vizType') this.vizType, + @JsonKey(name: 'chartType') required this.chartType}); + + factory _$ChartConfigModelImpl.fromJson(Map json) => + _$$ChartConfigModelImplFromJson(json); + + @override + @JsonKey(name: 'active') + final bool active; + @override + @JsonKey(name: 'name') + final String name; + @override + @JsonKey(name: 'vizType') + final String? vizType; + @override + @JsonKey(name: 'chartType') + final String chartType; + + @override + String toString() { + return 'ChartConfigModel(active: $active, name: $name, vizType: $vizType, chartType: $chartType)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$ChartConfigModelImpl && + (identical(other.active, active) || other.active == active) && + (identical(other.name, name) || other.name == name) && + (identical(other.vizType, vizType) || other.vizType == vizType) && + (identical(other.chartType, chartType) || + other.chartType == chartType)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => + Object.hash(runtimeType, active, name, vizType, chartType); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$ChartConfigModelImplCopyWith<_$ChartConfigModelImpl> get copyWith => + __$$ChartConfigModelImplCopyWithImpl<_$ChartConfigModelImpl>( + this, _$identity); + + @override + Map toJson() { + return _$$ChartConfigModelImplToJson( + this, + ); + } +} + +abstract class _ChartConfigModel implements ChartConfigModel { + const factory _ChartConfigModel( + {@JsonKey(name: 'active') required final bool active, + @JsonKey(name: 'name') required final String name, + @JsonKey(name: 'vizType') final String? vizType, + @JsonKey(name: 'chartType') required final String chartType}) = + _$ChartConfigModelImpl; + + factory _ChartConfigModel.fromJson(Map json) = + _$ChartConfigModelImpl.fromJson; + + @override + @JsonKey(name: 'active') + bool get active; + @override + @JsonKey(name: 'name') + String get name; + @override + @JsonKey(name: 'vizType') + String? get vizType; + @override + @JsonKey(name: 'chartType') + String get chartType; + @override + @JsonKey(ignore: true) + _$$ChartConfigModelImplCopyWith<_$ChartConfigModelImpl> get copyWith => + throw _privateConstructorUsedError; +} diff --git a/packages/digit_dss/lib/models/entities/dashboard_config.g.dart b/packages/digit_dss/lib/models/entities/dashboard_config.g.dart new file mode 100644 index 000000000..6996d05b5 --- /dev/null +++ b/packages/digit_dss/lib/models/entities/dashboard_config.g.dart @@ -0,0 +1,57 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'dashboard_config.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +_$DashboardConfigPrimaryWrapperImpl + _$$DashboardConfigPrimaryWrapperImplFromJson(Map json) => + _$DashboardConfigPrimaryWrapperImpl( + dashboardConfigWrapper: (json['dashboardConfig'] as List?) + ?.map((e) => DashboardConfigWrapper.fromJson( + e as Map)) + .toList() ?? + const [], + ); + +Map _$$DashboardConfigPrimaryWrapperImplToJson( + _$DashboardConfigPrimaryWrapperImpl instance) => + { + 'dashboardConfig': instance.dashboardConfigWrapper, + }; + +_$DashboardConfigWrapperImpl _$$DashboardConfigWrapperImplFromJson( + Map json) => + _$DashboardConfigWrapperImpl( + enableDashboard: json['enableDashboard'] as bool, + charts: (json['charts'] as List?) + ?.map((e) => ChartConfigModel.fromJson(e as Map)) + .toList(), + ); + +Map _$$DashboardConfigWrapperImplToJson( + _$DashboardConfigWrapperImpl instance) => + { + 'enableDashboard': instance.enableDashboard, + 'charts': instance.charts, + }; + +_$ChartConfigModelImpl _$$ChartConfigModelImplFromJson( + Map json) => + _$ChartConfigModelImpl( + active: json['active'] as bool, + name: json['name'] as String, + vizType: json['vizType'] as String?, + chartType: json['chartType'] as String, + ); + +Map _$$ChartConfigModelImplToJson( + _$ChartConfigModelImpl instance) => + { + 'active': instance.active, + 'name': instance.name, + 'vizType': instance.vizType, + 'chartType': instance.chartType, + }; diff --git a/packages/digit_dss/lib/models/entities/dashboard_request.dart b/packages/digit_dss/lib/models/entities/dashboard_request.dart new file mode 100644 index 000000000..3c6a5589e --- /dev/null +++ b/packages/digit_dss/lib/models/entities/dashboard_request.dart @@ -0,0 +1,56 @@ +// Generated using mason. Do not modify by hand +import 'package:dart_mappable/dart_mappable.dart'; + +part 'dashboard_request.mapper.dart'; + +@MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) +class DashboardRequestModel with DashboardRequestModelMappable { + final AggregationRequestDto aggregationRequestDto; + final DSSHeaders headers; + + DashboardRequestModel({ + required this.aggregationRequestDto, + required this.headers, + }) : super(); +} + +@MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) +class AggregationRequestDto with AggregationRequestDtoMappable { + final String visualizationCode; + final String visualizationType; + final Map? filters; + final RequestDate? requestDate; + final String? moduleLevel; + final String? queryType; + + AggregationRequestDto({ + required this.visualizationCode, + required this.visualizationType, + this.filters, + this.requestDate, + this.moduleLevel, + this.queryType, + }) : super(); +} + +@MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) +class DSSHeaders with DSSHeadersMappable { + final String? tenantId; + DSSHeaders({ + this.tenantId, + }) : super(); +} + +@MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) +class RequestDate with RequestDateMappable { + final int? startDate; + final int? endDate; + final String? title; + final String? interval; + RequestDate({ + this.startDate, + this.endDate, + this.title, + this.interval, + }) : super(); +} diff --git a/packages/digit_dss/lib/models/entities/dashboard_request.mapper.dart b/packages/digit_dss/lib/models/entities/dashboard_request.mapper.dart new file mode 100644 index 000000000..078f5d311 --- /dev/null +++ b/packages/digit_dss/lib/models/entities/dashboard_request.mapper.dart @@ -0,0 +1,575 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter + +part of 'dashboard_request.dart'; + +class DashboardRequestModelMapper + extends ClassMapperBase { + DashboardRequestModelMapper._(); + + static DashboardRequestModelMapper? _instance; + static DashboardRequestModelMapper ensureInitialized() { + if (_instance == null) { + MapperContainer.globals.use(_instance = DashboardRequestModelMapper._()); + } + return _instance!; + } + + @override + final String id = 'DashboardRequestModel'; + + static AggregationRequestDto _$aggregationRequestDto( + DashboardRequestModel v) => + v.aggregationRequestDto; + static const Field + _f$aggregationRequestDto = + Field('aggregationRequestDto', _$aggregationRequestDto); + static DSSHeaders _$headers(DashboardRequestModel v) => v.headers; + static const Field _f$headers = + Field('headers', _$headers); + + @override + final MappableFields fields = const { + #aggregationRequestDto: _f$aggregationRequestDto, + #headers: _f$headers, + }; + @override + final bool ignoreNull = true; + + static DashboardRequestModel _instantiate(DecodingData data) { + return DashboardRequestModel( + aggregationRequestDto: data.dec(_f$aggregationRequestDto), + headers: data.dec(_f$headers)); + } + + @override + final Function instantiate = _instantiate; + + static DashboardRequestModel fromMap(Map map) { + return ensureInitialized().decodeMap(map); + } + + static DashboardRequestModel fromJson(String json) { + return ensureInitialized().decodeJson(json); + } +} + +mixin DashboardRequestModelMappable { + String toJson() { + return DashboardRequestModelMapper.ensureInitialized() + .encodeJson(this as DashboardRequestModel); + } + + Map toMap() { + return DashboardRequestModelMapper.ensureInitialized() + .encodeMap(this as DashboardRequestModel); + } + + DashboardRequestModelCopyWith + get copyWith => _DashboardRequestModelCopyWithImpl( + this as DashboardRequestModel, $identity, $identity); + @override + String toString() { + return DashboardRequestModelMapper.ensureInitialized() + .stringifyValue(this as DashboardRequestModel); + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (runtimeType == other.runtimeType && + DashboardRequestModelMapper.ensureInitialized() + .isValueEqual(this as DashboardRequestModel, other)); + } + + @override + int get hashCode { + return DashboardRequestModelMapper.ensureInitialized() + .hashValue(this as DashboardRequestModel); + } +} + +extension DashboardRequestModelValueCopy<$R, $Out> + on ObjectCopyWith<$R, DashboardRequestModel, $Out> { + DashboardRequestModelCopyWith<$R, DashboardRequestModel, $Out> + get $asDashboardRequestModel => + $base.as((v, t, t2) => _DashboardRequestModelCopyWithImpl(v, t, t2)); +} + +abstract class DashboardRequestModelCopyWith< + $R, + $In extends DashboardRequestModel, + $Out> implements ClassCopyWith<$R, $In, $Out> { + AggregationRequestDtoCopyWith<$R, AggregationRequestDto, + AggregationRequestDto> get aggregationRequestDto; + DSSHeadersCopyWith<$R, DSSHeaders, DSSHeaders> get headers; + $R call({AggregationRequestDto? aggregationRequestDto, DSSHeaders? headers}); + DashboardRequestModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>( + Then<$Out2, $R2> t); +} + +class _DashboardRequestModelCopyWithImpl<$R, $Out> + extends ClassCopyWithBase<$R, DashboardRequestModel, $Out> + implements DashboardRequestModelCopyWith<$R, DashboardRequestModel, $Out> { + _DashboardRequestModelCopyWithImpl(super.value, super.then, super.then2); + + @override + late final ClassMapperBase $mapper = + DashboardRequestModelMapper.ensureInitialized(); + @override + AggregationRequestDtoCopyWith<$R, AggregationRequestDto, + AggregationRequestDto> + get aggregationRequestDto => $value.aggregationRequestDto.copyWith + .$chain((v) => call(aggregationRequestDto: v)); + @override + DSSHeadersCopyWith<$R, DSSHeaders, DSSHeaders> get headers => + $value.headers.copyWith.$chain((v) => call(headers: v)); + @override + $R call( + {AggregationRequestDto? aggregationRequestDto, + DSSHeaders? headers}) => + $apply(FieldCopyWithData({ + if (aggregationRequestDto != null) + #aggregationRequestDto: aggregationRequestDto, + if (headers != null) #headers: headers + })); + @override + DashboardRequestModel $make(CopyWithData data) => DashboardRequestModel( + aggregationRequestDto: + data.get(#aggregationRequestDto, or: $value.aggregationRequestDto), + headers: data.get(#headers, or: $value.headers)); + + @override + DashboardRequestModelCopyWith<$R2, DashboardRequestModel, $Out2> + $chain<$R2, $Out2>(Then<$Out2, $R2> t) => + _DashboardRequestModelCopyWithImpl($value, $cast, t); +} + +class AggregationRequestDtoMapper + extends ClassMapperBase { + AggregationRequestDtoMapper._(); + + static AggregationRequestDtoMapper? _instance; + static AggregationRequestDtoMapper ensureInitialized() { + if (_instance == null) { + MapperContainer.globals.use(_instance = AggregationRequestDtoMapper._()); + } + return _instance!; + } + + @override + final String id = 'AggregationRequestDto'; + + static String _$visualizationCode(AggregationRequestDto v) => + v.visualizationCode; + static const Field _f$visualizationCode = + Field('visualizationCode', _$visualizationCode); + static String _$visualizationType(AggregationRequestDto v) => + v.visualizationType; + static const Field _f$visualizationType = + Field('visualizationType', _$visualizationType); + static Map? _$filters(AggregationRequestDto v) => v.filters; + static const Field> _f$filters = + Field('filters', _$filters, opt: true); + static RequestDate? _$requestDate(AggregationRequestDto v) => v.requestDate; + static const Field _f$requestDate = + Field('requestDate', _$requestDate, opt: true); + static String? _$moduleLevel(AggregationRequestDto v) => v.moduleLevel; + static const Field _f$moduleLevel = + Field('moduleLevel', _$moduleLevel, opt: true); + static String? _$queryType(AggregationRequestDto v) => v.queryType; + static const Field _f$queryType = + Field('queryType', _$queryType, opt: true); + + @override + final MappableFields fields = const { + #visualizationCode: _f$visualizationCode, + #visualizationType: _f$visualizationType, + #filters: _f$filters, + #requestDate: _f$requestDate, + #moduleLevel: _f$moduleLevel, + #queryType: _f$queryType, + }; + @override + final bool ignoreNull = true; + + static AggregationRequestDto _instantiate(DecodingData data) { + return AggregationRequestDto( + visualizationCode: data.dec(_f$visualizationCode), + visualizationType: data.dec(_f$visualizationType), + filters: data.dec(_f$filters), + requestDate: data.dec(_f$requestDate), + moduleLevel: data.dec(_f$moduleLevel), + queryType: data.dec(_f$queryType)); + } + + @override + final Function instantiate = _instantiate; + + static AggregationRequestDto fromMap(Map map) { + return ensureInitialized().decodeMap(map); + } + + static AggregationRequestDto fromJson(String json) { + return ensureInitialized().decodeJson(json); + } +} + +mixin AggregationRequestDtoMappable { + String toJson() { + return AggregationRequestDtoMapper.ensureInitialized() + .encodeJson(this as AggregationRequestDto); + } + + Map toMap() { + return AggregationRequestDtoMapper.ensureInitialized() + .encodeMap(this as AggregationRequestDto); + } + + AggregationRequestDtoCopyWith + get copyWith => _AggregationRequestDtoCopyWithImpl( + this as AggregationRequestDto, $identity, $identity); + @override + String toString() { + return AggregationRequestDtoMapper.ensureInitialized() + .stringifyValue(this as AggregationRequestDto); + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (runtimeType == other.runtimeType && + AggregationRequestDtoMapper.ensureInitialized() + .isValueEqual(this as AggregationRequestDto, other)); + } + + @override + int get hashCode { + return AggregationRequestDtoMapper.ensureInitialized() + .hashValue(this as AggregationRequestDto); + } +} + +extension AggregationRequestDtoValueCopy<$R, $Out> + on ObjectCopyWith<$R, AggregationRequestDto, $Out> { + AggregationRequestDtoCopyWith<$R, AggregationRequestDto, $Out> + get $asAggregationRequestDto => + $base.as((v, t, t2) => _AggregationRequestDtoCopyWithImpl(v, t, t2)); +} + +abstract class AggregationRequestDtoCopyWith< + $R, + $In extends AggregationRequestDto, + $Out> implements ClassCopyWith<$R, $In, $Out> { + MapCopyWith<$R, dynamic, dynamic, ObjectCopyWith<$R, dynamic, dynamic>>? + get filters; + RequestDateCopyWith<$R, RequestDate, RequestDate>? get requestDate; + $R call( + {String? visualizationCode, + String? visualizationType, + Map? filters, + RequestDate? requestDate, + String? moduleLevel, + String? queryType}); + AggregationRequestDtoCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>( + Then<$Out2, $R2> t); +} + +class _AggregationRequestDtoCopyWithImpl<$R, $Out> + extends ClassCopyWithBase<$R, AggregationRequestDto, $Out> + implements AggregationRequestDtoCopyWith<$R, AggregationRequestDto, $Out> { + _AggregationRequestDtoCopyWithImpl(super.value, super.then, super.then2); + + @override + late final ClassMapperBase $mapper = + AggregationRequestDtoMapper.ensureInitialized(); + @override + MapCopyWith<$R, dynamic, dynamic, ObjectCopyWith<$R, dynamic, dynamic>>? + get filters => $value.filters != null + ? MapCopyWith( + $value.filters!, + (v, t) => ObjectCopyWith(v, $identity, t), + (v) => call(filters: v)) + : null; + @override + RequestDateCopyWith<$R, RequestDate, RequestDate>? get requestDate => + $value.requestDate?.copyWith.$chain((v) => call(requestDate: v)); + @override + $R call( + {String? visualizationCode, + String? visualizationType, + Object? filters = $none, + Object? requestDate = $none, + Object? moduleLevel = $none, + Object? queryType = $none}) => + $apply(FieldCopyWithData({ + if (visualizationCode != null) #visualizationCode: visualizationCode, + if (visualizationType != null) #visualizationType: visualizationType, + if (filters != $none) #filters: filters, + if (requestDate != $none) #requestDate: requestDate, + if (moduleLevel != $none) #moduleLevel: moduleLevel, + if (queryType != $none) #queryType: queryType + })); + @override + AggregationRequestDto $make(CopyWithData data) => AggregationRequestDto( + visualizationCode: + data.get(#visualizationCode, or: $value.visualizationCode), + visualizationType: + data.get(#visualizationType, or: $value.visualizationType), + filters: data.get(#filters, or: $value.filters), + requestDate: data.get(#requestDate, or: $value.requestDate), + moduleLevel: data.get(#moduleLevel, or: $value.moduleLevel), + queryType: data.get(#queryType, or: $value.queryType)); + + @override + AggregationRequestDtoCopyWith<$R2, AggregationRequestDto, $Out2> + $chain<$R2, $Out2>(Then<$Out2, $R2> t) => + _AggregationRequestDtoCopyWithImpl($value, $cast, t); +} + +class RequestDateMapper extends ClassMapperBase { + RequestDateMapper._(); + + static RequestDateMapper? _instance; + static RequestDateMapper ensureInitialized() { + if (_instance == null) { + MapperContainer.globals.use(_instance = RequestDateMapper._()); + } + return _instance!; + } + + @override + final String id = 'RequestDate'; + + static int? _$startDate(RequestDate v) => v.startDate; + static const Field _f$startDate = + Field('startDate', _$startDate, opt: true); + static int? _$endDate(RequestDate v) => v.endDate; + static const Field _f$endDate = + Field('endDate', _$endDate, opt: true); + static String? _$title(RequestDate v) => v.title; + static const Field _f$title = + Field('title', _$title, opt: true); + static String? _$interval(RequestDate v) => v.interval; + static const Field _f$interval = + Field('interval', _$interval, opt: true); + + @override + final MappableFields fields = const { + #startDate: _f$startDate, + #endDate: _f$endDate, + #title: _f$title, + #interval: _f$interval, + }; + @override + final bool ignoreNull = true; + + static RequestDate _instantiate(DecodingData data) { + return RequestDate( + startDate: data.dec(_f$startDate), + endDate: data.dec(_f$endDate), + title: data.dec(_f$title), + interval: data.dec(_f$interval)); + } + + @override + final Function instantiate = _instantiate; + + static RequestDate fromMap(Map map) { + return ensureInitialized().decodeMap(map); + } + + static RequestDate fromJson(String json) { + return ensureInitialized().decodeJson(json); + } +} + +mixin RequestDateMappable { + String toJson() { + return RequestDateMapper.ensureInitialized() + .encodeJson(this as RequestDate); + } + + Map toMap() { + return RequestDateMapper.ensureInitialized() + .encodeMap(this as RequestDate); + } + + RequestDateCopyWith get copyWith => + _RequestDateCopyWithImpl(this as RequestDate, $identity, $identity); + @override + String toString() { + return RequestDateMapper.ensureInitialized() + .stringifyValue(this as RequestDate); + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (runtimeType == other.runtimeType && + RequestDateMapper.ensureInitialized() + .isValueEqual(this as RequestDate, other)); + } + + @override + int get hashCode { + return RequestDateMapper.ensureInitialized().hashValue(this as RequestDate); + } +} + +extension RequestDateValueCopy<$R, $Out> + on ObjectCopyWith<$R, RequestDate, $Out> { + RequestDateCopyWith<$R, RequestDate, $Out> get $asRequestDate => + $base.as((v, t, t2) => _RequestDateCopyWithImpl(v, t, t2)); +} + +abstract class RequestDateCopyWith<$R, $In extends RequestDate, $Out> + implements ClassCopyWith<$R, $In, $Out> { + $R call({int? startDate, int? endDate, String? title, String? interval}); + RequestDateCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(Then<$Out2, $R2> t); +} + +class _RequestDateCopyWithImpl<$R, $Out> + extends ClassCopyWithBase<$R, RequestDate, $Out> + implements RequestDateCopyWith<$R, RequestDate, $Out> { + _RequestDateCopyWithImpl(super.value, super.then, super.then2); + + @override + late final ClassMapperBase $mapper = + RequestDateMapper.ensureInitialized(); + @override + $R call( + {Object? startDate = $none, + Object? endDate = $none, + Object? title = $none, + Object? interval = $none}) => + $apply(FieldCopyWithData({ + if (startDate != $none) #startDate: startDate, + if (endDate != $none) #endDate: endDate, + if (title != $none) #title: title, + if (interval != $none) #interval: interval + })); + @override + RequestDate $make(CopyWithData data) => RequestDate( + startDate: data.get(#startDate, or: $value.startDate), + endDate: data.get(#endDate, or: $value.endDate), + title: data.get(#title, or: $value.title), + interval: data.get(#interval, or: $value.interval)); + + @override + RequestDateCopyWith<$R2, RequestDate, $Out2> $chain<$R2, $Out2>( + Then<$Out2, $R2> t) => + _RequestDateCopyWithImpl($value, $cast, t); +} + +class DSSHeadersMapper extends ClassMapperBase { + DSSHeadersMapper._(); + + static DSSHeadersMapper? _instance; + static DSSHeadersMapper ensureInitialized() { + if (_instance == null) { + MapperContainer.globals.use(_instance = DSSHeadersMapper._()); + } + return _instance!; + } + + @override + final String id = 'DSSHeaders'; + + static String? _$tenantId(DSSHeaders v) => v.tenantId; + static const Field _f$tenantId = + Field('tenantId', _$tenantId, opt: true); + + @override + final MappableFields fields = const { + #tenantId: _f$tenantId, + }; + @override + final bool ignoreNull = true; + + static DSSHeaders _instantiate(DecodingData data) { + return DSSHeaders(tenantId: data.dec(_f$tenantId)); + } + + @override + final Function instantiate = _instantiate; + + static DSSHeaders fromMap(Map map) { + return ensureInitialized().decodeMap(map); + } + + static DSSHeaders fromJson(String json) { + return ensureInitialized().decodeJson(json); + } +} + +mixin DSSHeadersMappable { + String toJson() { + return DSSHeadersMapper.ensureInitialized() + .encodeJson(this as DSSHeaders); + } + + Map toMap() { + return DSSHeadersMapper.ensureInitialized() + .encodeMap(this as DSSHeaders); + } + + DSSHeadersCopyWith get copyWith => + _DSSHeadersCopyWithImpl(this as DSSHeaders, $identity, $identity); + @override + String toString() { + return DSSHeadersMapper.ensureInitialized() + .stringifyValue(this as DSSHeaders); + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (runtimeType == other.runtimeType && + DSSHeadersMapper.ensureInitialized() + .isValueEqual(this as DSSHeaders, other)); + } + + @override + int get hashCode { + return DSSHeadersMapper.ensureInitialized().hashValue(this as DSSHeaders); + } +} + +extension DSSHeadersValueCopy<$R, $Out> + on ObjectCopyWith<$R, DSSHeaders, $Out> { + DSSHeadersCopyWith<$R, DSSHeaders, $Out> get $asDSSHeaders => + $base.as((v, t, t2) => _DSSHeadersCopyWithImpl(v, t, t2)); +} + +abstract class DSSHeadersCopyWith<$R, $In extends DSSHeaders, $Out> + implements ClassCopyWith<$R, $In, $Out> { + $R call({String? tenantId}); + DSSHeadersCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(Then<$Out2, $R2> t); +} + +class _DSSHeadersCopyWithImpl<$R, $Out> + extends ClassCopyWithBase<$R, DSSHeaders, $Out> + implements DSSHeadersCopyWith<$R, DSSHeaders, $Out> { + _DSSHeadersCopyWithImpl(super.value, super.then, super.then2); + + @override + late final ClassMapperBase $mapper = + DSSHeadersMapper.ensureInitialized(); + @override + $R call({Object? tenantId = $none}) => + $apply(FieldCopyWithData({if (tenantId != $none) #tenantId: tenantId})); + @override + DSSHeaders $make(CopyWithData data) => + DSSHeaders(tenantId: data.get(#tenantId, or: $value.tenantId)); + + @override + DSSHeadersCopyWith<$R2, DSSHeaders, $Out2> $chain<$R2, $Out2>( + Then<$Out2, $R2> t) => + _DSSHeadersCopyWithImpl($value, $cast, t); +} diff --git a/packages/digit_dss/lib/models/entities/dashboard_response_model.dart b/packages/digit_dss/lib/models/entities/dashboard_response_model.dart new file mode 100644 index 000000000..046d0439f --- /dev/null +++ b/packages/digit_dss/lib/models/entities/dashboard_response_model.dart @@ -0,0 +1,44 @@ +// Generated using mason. Do not modify by hand +import 'package:dart_mappable/dart_mappable.dart'; +import 'package:digit_dss/models/entities/chart_data.dart'; + +part 'dashboard_response_model.mapper.dart'; + +@MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) +class DashboardResponseSearchModel with DashboardResponseSearchModelMappable { + final String? projectId; + final String? visualizationCode; + final String? chartType; + final String? date; + DashboardResponseSearchModel({ + this.projectId, + this.visualizationCode, + this.chartType, + this.date, + }) : super(); +} + +@MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) +class DashboardResponseModel with DashboardResponseModelMappable { + static const schemaName = 'Dashboard'; + + final String? drillDownChartId; + final bool? showLabel; + final bool? hideInsights; + final List? data; + final bool? hideHeaderDenomination; + final String? visualizationCode; + final String? chartType; + final String? projectId; + + DashboardResponseModel({ + this.drillDownChartId, + this.showLabel, + this.hideInsights, + this.hideHeaderDenomination, + this.projectId, + this.chartType, + this.visualizationCode, + this.data, + }) : super(); +} diff --git a/packages/digit_dss/lib/models/entities/dashboard_response_model.mapper.dart b/packages/digit_dss/lib/models/entities/dashboard_response_model.mapper.dart new file mode 100644 index 000000000..3d5f63a52 --- /dev/null +++ b/packages/digit_dss/lib/models/entities/dashboard_response_model.mapper.dart @@ -0,0 +1,370 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter + +part of 'dashboard_response_model.dart'; + +class DashboardResponseSearchModelMapper + extends ClassMapperBase { + DashboardResponseSearchModelMapper._(); + + static DashboardResponseSearchModelMapper? _instance; + static DashboardResponseSearchModelMapper ensureInitialized() { + if (_instance == null) { + MapperContainer.globals + .use(_instance = DashboardResponseSearchModelMapper._()); + } + return _instance!; + } + + @override + final String id = 'DashboardResponseSearchModel'; + + static String? _$projectId(DashboardResponseSearchModel v) => v.projectId; + static const Field _f$projectId = + Field('projectId', _$projectId, opt: true); + static String? _$visualizationCode(DashboardResponseSearchModel v) => + v.visualizationCode; + static const Field + _f$visualizationCode = + Field('visualizationCode', _$visualizationCode, opt: true); + static String? _$chartType(DashboardResponseSearchModel v) => v.chartType; + static const Field _f$chartType = + Field('chartType', _$chartType, opt: true); + static String? _$date(DashboardResponseSearchModel v) => v.date; + static const Field _f$date = + Field('date', _$date, opt: true); + + @override + final MappableFields fields = const { + #projectId: _f$projectId, + #visualizationCode: _f$visualizationCode, + #chartType: _f$chartType, + #date: _f$date, + }; + @override + final bool ignoreNull = true; + + static DashboardResponseSearchModel _instantiate(DecodingData data) { + return DashboardResponseSearchModel( + projectId: data.dec(_f$projectId), + visualizationCode: data.dec(_f$visualizationCode), + chartType: data.dec(_f$chartType), + date: data.dec(_f$date)); + } + + @override + final Function instantiate = _instantiate; + + static DashboardResponseSearchModel fromMap(Map map) { + return ensureInitialized().decodeMap(map); + } + + static DashboardResponseSearchModel fromJson(String json) { + return ensureInitialized().decodeJson(json); + } +} + +mixin DashboardResponseSearchModelMappable { + String toJson() { + return DashboardResponseSearchModelMapper.ensureInitialized() + .encodeJson( + this as DashboardResponseSearchModel); + } + + Map toMap() { + return DashboardResponseSearchModelMapper.ensureInitialized() + .encodeMap( + this as DashboardResponseSearchModel); + } + + DashboardResponseSearchModelCopyWith + get copyWith => _DashboardResponseSearchModelCopyWithImpl( + this as DashboardResponseSearchModel, $identity, $identity); + @override + String toString() { + return DashboardResponseSearchModelMapper.ensureInitialized() + .stringifyValue(this as DashboardResponseSearchModel); + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (runtimeType == other.runtimeType && + DashboardResponseSearchModelMapper.ensureInitialized() + .isValueEqual(this as DashboardResponseSearchModel, other)); + } + + @override + int get hashCode { + return DashboardResponseSearchModelMapper.ensureInitialized() + .hashValue(this as DashboardResponseSearchModel); + } +} + +extension DashboardResponseSearchModelValueCopy<$R, $Out> + on ObjectCopyWith<$R, DashboardResponseSearchModel, $Out> { + DashboardResponseSearchModelCopyWith<$R, DashboardResponseSearchModel, $Out> + get $asDashboardResponseSearchModel => $base.as( + (v, t, t2) => _DashboardResponseSearchModelCopyWithImpl(v, t, t2)); +} + +abstract class DashboardResponseSearchModelCopyWith< + $R, + $In extends DashboardResponseSearchModel, + $Out> implements ClassCopyWith<$R, $In, $Out> { + $R call( + {String? projectId, + String? visualizationCode, + String? chartType, + String? date}); + DashboardResponseSearchModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>( + Then<$Out2, $R2> t); +} + +class _DashboardResponseSearchModelCopyWithImpl<$R, $Out> + extends ClassCopyWithBase<$R, DashboardResponseSearchModel, $Out> + implements + DashboardResponseSearchModelCopyWith<$R, DashboardResponseSearchModel, + $Out> { + _DashboardResponseSearchModelCopyWithImpl( + super.value, super.then, super.then2); + + @override + late final ClassMapperBase $mapper = + DashboardResponseSearchModelMapper.ensureInitialized(); + @override + $R call( + {Object? projectId = $none, + Object? visualizationCode = $none, + Object? chartType = $none, + Object? date = $none}) => + $apply(FieldCopyWithData({ + if (projectId != $none) #projectId: projectId, + if (visualizationCode != $none) #visualizationCode: visualizationCode, + if (chartType != $none) #chartType: chartType, + if (date != $none) #date: date + })); + @override + DashboardResponseSearchModel $make(CopyWithData data) => + DashboardResponseSearchModel( + projectId: data.get(#projectId, or: $value.projectId), + visualizationCode: + data.get(#visualizationCode, or: $value.visualizationCode), + chartType: data.get(#chartType, or: $value.chartType), + date: data.get(#date, or: $value.date)); + + @override + DashboardResponseSearchModelCopyWith<$R2, DashboardResponseSearchModel, $Out2> + $chain<$R2, $Out2>(Then<$Out2, $R2> t) => + _DashboardResponseSearchModelCopyWithImpl($value, $cast, t); +} + +class DashboardResponseModelMapper + extends ClassMapperBase { + DashboardResponseModelMapper._(); + + static DashboardResponseModelMapper? _instance; + static DashboardResponseModelMapper ensureInitialized() { + if (_instance == null) { + MapperContainer.globals.use(_instance = DashboardResponseModelMapper._()); + } + return _instance!; + } + + @override + final String id = 'DashboardResponseModel'; + + static String? _$drillDownChartId(DashboardResponseModel v) => + v.drillDownChartId; + static const Field _f$drillDownChartId = + Field('drillDownChartId', _$drillDownChartId, opt: true); + static bool? _$showLabel(DashboardResponseModel v) => v.showLabel; + static const Field _f$showLabel = + Field('showLabel', _$showLabel, opt: true); + static bool? _$hideInsights(DashboardResponseModel v) => v.hideInsights; + static const Field _f$hideInsights = + Field('hideInsights', _$hideInsights, opt: true); + static bool? _$hideHeaderDenomination(DashboardResponseModel v) => + v.hideHeaderDenomination; + static const Field _f$hideHeaderDenomination = + Field('hideHeaderDenomination', _$hideHeaderDenomination, opt: true); + static String? _$projectId(DashboardResponseModel v) => v.projectId; + static const Field _f$projectId = + Field('projectId', _$projectId, opt: true); + static String? _$chartType(DashboardResponseModel v) => v.chartType; + static const Field _f$chartType = + Field('chartType', _$chartType, opt: true); + static String? _$visualizationCode(DashboardResponseModel v) => + v.visualizationCode; + static const Field _f$visualizationCode = + Field('visualizationCode', _$visualizationCode, opt: true); + static List? _$data(DashboardResponseModel v) => + v.data; + static const Field> + _f$data = Field('data', _$data, opt: true); + + @override + final MappableFields fields = const { + #drillDownChartId: _f$drillDownChartId, + #showLabel: _f$showLabel, + #hideInsights: _f$hideInsights, + #hideHeaderDenomination: _f$hideHeaderDenomination, + #projectId: _f$projectId, + #chartType: _f$chartType, + #visualizationCode: _f$visualizationCode, + #data: _f$data, + }; + @override + final bool ignoreNull = true; + + static DashboardResponseModel _instantiate(DecodingData data) { + return DashboardResponseModel( + drillDownChartId: data.dec(_f$drillDownChartId), + showLabel: data.dec(_f$showLabel), + hideInsights: data.dec(_f$hideInsights), + hideHeaderDenomination: data.dec(_f$hideHeaderDenomination), + projectId: data.dec(_f$projectId), + chartType: data.dec(_f$chartType), + visualizationCode: data.dec(_f$visualizationCode), + data: data.dec(_f$data)); + } + + @override + final Function instantiate = _instantiate; + + static DashboardResponseModel fromMap(Map map) { + return ensureInitialized().decodeMap(map); + } + + static DashboardResponseModel fromJson(String json) { + return ensureInitialized().decodeJson(json); + } +} + +mixin DashboardResponseModelMappable { + String toJson() { + return DashboardResponseModelMapper.ensureInitialized() + .encodeJson(this as DashboardResponseModel); + } + + Map toMap() { + return DashboardResponseModelMapper.ensureInitialized() + .encodeMap(this as DashboardResponseModel); + } + + DashboardResponseModelCopyWith + get copyWith => _DashboardResponseModelCopyWithImpl( + this as DashboardResponseModel, $identity, $identity); + @override + String toString() { + return DashboardResponseModelMapper.ensureInitialized() + .stringifyValue(this as DashboardResponseModel); + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (runtimeType == other.runtimeType && + DashboardResponseModelMapper.ensureInitialized() + .isValueEqual(this as DashboardResponseModel, other)); + } + + @override + int get hashCode { + return DashboardResponseModelMapper.ensureInitialized() + .hashValue(this as DashboardResponseModel); + } +} + +extension DashboardResponseModelValueCopy<$R, $Out> + on ObjectCopyWith<$R, DashboardResponseModel, $Out> { + DashboardResponseModelCopyWith<$R, DashboardResponseModel, $Out> + get $asDashboardResponseModel => + $base.as((v, t, t2) => _DashboardResponseModelCopyWithImpl(v, t, t2)); +} + +abstract class DashboardResponseModelCopyWith< + $R, + $In extends DashboardResponseModel, + $Out> implements ClassCopyWith<$R, $In, $Out> { + ListCopyWith< + $R, + DashboardChartDataModel, + DashboardChartDataModelCopyWith<$R, DashboardChartDataModel, + DashboardChartDataModel>>? get data; + $R call( + {String? drillDownChartId, + bool? showLabel, + bool? hideInsights, + bool? hideHeaderDenomination, + String? projectId, + String? chartType, + String? visualizationCode, + List? data}); + DashboardResponseModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>( + Then<$Out2, $R2> t); +} + +class _DashboardResponseModelCopyWithImpl<$R, $Out> + extends ClassCopyWithBase<$R, DashboardResponseModel, $Out> + implements + DashboardResponseModelCopyWith<$R, DashboardResponseModel, $Out> { + _DashboardResponseModelCopyWithImpl(super.value, super.then, super.then2); + + @override + late final ClassMapperBase $mapper = + DashboardResponseModelMapper.ensureInitialized(); + @override + ListCopyWith< + $R, + DashboardChartDataModel, + DashboardChartDataModelCopyWith<$R, DashboardChartDataModel, + DashboardChartDataModel>>? get data => $value.data != null + ? ListCopyWith( + $value.data!, (v, t) => v.copyWith.$chain(t), (v) => call(data: v)) + : null; + @override + $R call( + {Object? drillDownChartId = $none, + Object? showLabel = $none, + Object? hideInsights = $none, + Object? hideHeaderDenomination = $none, + Object? projectId = $none, + Object? chartType = $none, + Object? visualizationCode = $none, + Object? data = $none}) => + $apply(FieldCopyWithData({ + if (drillDownChartId != $none) #drillDownChartId: drillDownChartId, + if (showLabel != $none) #showLabel: showLabel, + if (hideInsights != $none) #hideInsights: hideInsights, + if (hideHeaderDenomination != $none) + #hideHeaderDenomination: hideHeaderDenomination, + if (projectId != $none) #projectId: projectId, + if (chartType != $none) #chartType: chartType, + if (visualizationCode != $none) #visualizationCode: visualizationCode, + if (data != $none) #data: data + })); + @override + DashboardResponseModel $make(CopyWithData data) => DashboardResponseModel( + drillDownChartId: + data.get(#drillDownChartId, or: $value.drillDownChartId), + showLabel: data.get(#showLabel, or: $value.showLabel), + hideInsights: data.get(#hideInsights, or: $value.hideInsights), + hideHeaderDenomination: + data.get(#hideHeaderDenomination, or: $value.hideHeaderDenomination), + projectId: data.get(#projectId, or: $value.projectId), + chartType: data.get(#chartType, or: $value.chartType), + visualizationCode: + data.get(#visualizationCode, or: $value.visualizationCode), + data: data.get(#data, or: $value.data)); + + @override + DashboardResponseModelCopyWith<$R2, DashboardResponseModel, $Out2> + $chain<$R2, $Out2>(Then<$Out2, $R2> t) => + _DashboardResponseModelCopyWithImpl($value, $cast, t); +} diff --git a/packages/digit_dss/lib/models/entities/dss_enums.dart b/packages/digit_dss/lib/models/entities/dss_enums.dart new file mode 100644 index 000000000..555700a75 --- /dev/null +++ b/packages/digit_dss/lib/models/entities/dss_enums.dart @@ -0,0 +1,30 @@ +// Generated using mason. Do not modify by hand +import 'package:dart_mappable/dart_mappable.dart'; + +part 'dss_enums.mapper.dart'; + +@MappableEnum(caseStyle: CaseStyle.upperCase) +enum DSSEnums { + @MappableValue("metric") + metric, + @MappableValue("xtable") + table, + @MappableValue("S.N.") + serialNumber, + @MappableValue("startDate") + startDate, + @MappableValue("endDate") + endDate, + @MappableValue("number") + number, + @MappableValue("percentage") + percentage, + @MappableValue("responseData") + responseData, + @MappableValue("day") + day, + @MappableValue("home") + home, + @MappableValue("row") + row, +} diff --git a/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart b/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart new file mode 100644 index 000000000..0aa51f071 --- /dev/null +++ b/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart @@ -0,0 +1,89 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter + +part of 'dss_enums.dart'; + +class DSSEnumsMapper extends EnumMapper { + DSSEnumsMapper._(); + + static DSSEnumsMapper? _instance; + static DSSEnumsMapper ensureInitialized() { + if (_instance == null) { + MapperContainer.globals.use(_instance = DSSEnumsMapper._()); + } + return _instance!; + } + + static DSSEnums fromValue(dynamic value) { + ensureInitialized(); + return MapperContainer.globals.fromValue(value); + } + + @override + DSSEnums decode(dynamic value) { + switch (value) { + case "metric": + return DSSEnums.metric; + case "xtable": + return DSSEnums.table; + case "S.N.": + return DSSEnums.serialNumber; + case "startDate": + return DSSEnums.startDate; + case "endDate": + return DSSEnums.endDate; + case "number": + return DSSEnums.number; + case "percentage": + return DSSEnums.percentage; + case "responseData": + return DSSEnums.responseData; + case "day": + return DSSEnums.day; + case "home": + return DSSEnums.home; + case "row": + return DSSEnums.row; + default: + throw MapperException.unknownEnumValue(value); + } + } + + @override + dynamic encode(DSSEnums self) { + switch (self) { + case DSSEnums.metric: + return "metric"; + case DSSEnums.table: + return "xtable"; + case DSSEnums.serialNumber: + return "S.N."; + case DSSEnums.startDate: + return "startDate"; + case DSSEnums.endDate: + return "endDate"; + case DSSEnums.number: + return "number"; + case DSSEnums.percentage: + return "percentage"; + case DSSEnums.responseData: + return "responseData"; + case DSSEnums.day: + return "day"; + case DSSEnums.home: + return "home"; + case DSSEnums.row: + return "row"; + } + } +} + +extension DSSEnumsMapperExtension on DSSEnums { + dynamic toValue() { + DSSEnumsMapper.ensureInitialized(); + return MapperContainer.globals.toValue(this); + } +} diff --git a/packages/digit_dss/lib/models/entities/insight.dart b/packages/digit_dss/lib/models/entities/insight.dart new file mode 100644 index 000000000..763711b0d --- /dev/null +++ b/packages/digit_dss/lib/models/entities/insight.dart @@ -0,0 +1,26 @@ +// Generated using mason. Do not modify by hand +import 'package:dart_mappable/dart_mappable.dart'; +import 'package:digit_data_model/data_model.dart'; + +part 'insight.mapper.dart'; + +@MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) +class InsightModel with InsightModelMappable { + final String? colorCode; + final String? indicator; + final String? name; + final String? value; + final String? visualizationCode; + final String? chartType; + final String? projectId; + + InsightModel({ + this.colorCode, + this.indicator, + this.name, + this.value, + this.chartType, + this.visualizationCode, + this.projectId, + }) : super(); +} diff --git a/packages/digit_dss/lib/models/entities/insight.mapper.dart b/packages/digit_dss/lib/models/entities/insight.mapper.dart new file mode 100644 index 000000000..a260a0986 --- /dev/null +++ b/packages/digit_dss/lib/models/entities/insight.mapper.dart @@ -0,0 +1,175 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter + +part of 'insight.dart'; + +class InsightModelMapper extends ClassMapperBase { + InsightModelMapper._(); + + static InsightModelMapper? _instance; + static InsightModelMapper ensureInitialized() { + if (_instance == null) { + MapperContainer.globals.use(_instance = InsightModelMapper._()); + } + return _instance!; + } + + @override + final String id = 'InsightModel'; + + static String? _$colorCode(InsightModel v) => v.colorCode; + static const Field _f$colorCode = + Field('colorCode', _$colorCode, opt: true); + static String? _$indicator(InsightModel v) => v.indicator; + static const Field _f$indicator = + Field('indicator', _$indicator, opt: true); + static String? _$name(InsightModel v) => v.name; + static const Field _f$name = + Field('name', _$name, opt: true); + static String? _$value(InsightModel v) => v.value; + static const Field _f$value = + Field('value', _$value, opt: true); + static String? _$chartType(InsightModel v) => v.chartType; + static const Field _f$chartType = + Field('chartType', _$chartType, opt: true); + static String? _$visualizationCode(InsightModel v) => v.visualizationCode; + static const Field _f$visualizationCode = + Field('visualizationCode', _$visualizationCode, opt: true); + static String? _$projectId(InsightModel v) => v.projectId; + static const Field _f$projectId = + Field('projectId', _$projectId, opt: true); + + @override + final MappableFields fields = const { + #colorCode: _f$colorCode, + #indicator: _f$indicator, + #name: _f$name, + #value: _f$value, + #chartType: _f$chartType, + #visualizationCode: _f$visualizationCode, + #projectId: _f$projectId, + }; + @override + final bool ignoreNull = true; + + static InsightModel _instantiate(DecodingData data) { + return InsightModel( + colorCode: data.dec(_f$colorCode), + indicator: data.dec(_f$indicator), + name: data.dec(_f$name), + value: data.dec(_f$value), + chartType: data.dec(_f$chartType), + visualizationCode: data.dec(_f$visualizationCode), + projectId: data.dec(_f$projectId)); + } + + @override + final Function instantiate = _instantiate; + + static InsightModel fromMap(Map map) { + return ensureInitialized().decodeMap(map); + } + + static InsightModel fromJson(String json) { + return ensureInitialized().decodeJson(json); + } +} + +mixin InsightModelMappable { + String toJson() { + return InsightModelMapper.ensureInitialized() + .encodeJson(this as InsightModel); + } + + Map toMap() { + return InsightModelMapper.ensureInitialized() + .encodeMap(this as InsightModel); + } + + InsightModelCopyWith get copyWith => + _InsightModelCopyWithImpl(this as InsightModel, $identity, $identity); + @override + String toString() { + return InsightModelMapper.ensureInitialized() + .stringifyValue(this as InsightModel); + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (runtimeType == other.runtimeType && + InsightModelMapper.ensureInitialized() + .isValueEqual(this as InsightModel, other)); + } + + @override + int get hashCode { + return InsightModelMapper.ensureInitialized() + .hashValue(this as InsightModel); + } +} + +extension InsightModelValueCopy<$R, $Out> + on ObjectCopyWith<$R, InsightModel, $Out> { + InsightModelCopyWith<$R, InsightModel, $Out> get $asInsightModel => + $base.as((v, t, t2) => _InsightModelCopyWithImpl(v, t, t2)); +} + +abstract class InsightModelCopyWith<$R, $In extends InsightModel, $Out> + implements ClassCopyWith<$R, $In, $Out> { + $R call( + {String? colorCode, + String? indicator, + String? name, + String? value, + String? chartType, + String? visualizationCode, + String? projectId}); + InsightModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(Then<$Out2, $R2> t); +} + +class _InsightModelCopyWithImpl<$R, $Out> + extends ClassCopyWithBase<$R, InsightModel, $Out> + implements InsightModelCopyWith<$R, InsightModel, $Out> { + _InsightModelCopyWithImpl(super.value, super.then, super.then2); + + @override + late final ClassMapperBase $mapper = + InsightModelMapper.ensureInitialized(); + @override + $R call( + {Object? colorCode = $none, + Object? indicator = $none, + Object? name = $none, + Object? value = $none, + Object? chartType = $none, + Object? visualizationCode = $none, + Object? projectId = $none}) => + $apply(FieldCopyWithData({ + if (colorCode != $none) #colorCode: colorCode, + if (indicator != $none) #indicator: indicator, + if (name != $none) #name: name, + if (value != $none) #value: value, + if (chartType != $none) #chartType: chartType, + if (visualizationCode != $none) #visualizationCode: visualizationCode, + if (projectId != $none) #projectId: projectId + })); + @override + InsightModel $make(CopyWithData data) => InsightModel( + colorCode: data.get(#colorCode, or: $value.colorCode), + indicator: data.get(#indicator, or: $value.indicator), + name: data.get(#name, or: $value.name), + value: data.get(#value, or: $value.value), + chartType: data.get(#chartType, or: $value.chartType), + visualizationCode: + data.get(#visualizationCode, or: $value.visualizationCode), + projectId: data.get(#projectId, or: $value.projectId)); + + @override + InsightModelCopyWith<$R2, InsightModel, $Out2> $chain<$R2, $Out2>( + Then<$Out2, $R2> t) => + _InsightModelCopyWithImpl($value, $cast, t); +} diff --git a/packages/digit_dss/lib/models/entities/plots.dart b/packages/digit_dss/lib/models/entities/plots.dart new file mode 100644 index 000000000..526377ef1 --- /dev/null +++ b/packages/digit_dss/lib/models/entities/plots.dart @@ -0,0 +1,28 @@ +// Generated using mason. Do not modify by hand +import 'package:dart_mappable/dart_mappable.dart'; +import 'package:digit_data_model/data_model.dart'; + +part 'plots.mapper.dart'; + +@MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) +class DashboardPlotModel with DashboardPlotModelMappable { + final String? label; + final String? strValue; + final String? name; + final String? value; + final String? symbol; + final String? visualizationCode; + final String? chartType; + final String? projectId; + + DashboardPlotModel({ + this.strValue, + this.label, + this.name, + this.value, + this.symbol, + this.projectId, + this.chartType, + this.visualizationCode, + }) : super(); +} diff --git a/packages/digit_dss/lib/models/entities/plots.mapper.dart b/packages/digit_dss/lib/models/entities/plots.mapper.dart new file mode 100644 index 000000000..7369df595 --- /dev/null +++ b/packages/digit_dss/lib/models/entities/plots.mapper.dart @@ -0,0 +1,189 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter + +part of 'plots.dart'; + +class DashboardPlotModelMapper extends ClassMapperBase { + DashboardPlotModelMapper._(); + + static DashboardPlotModelMapper? _instance; + static DashboardPlotModelMapper ensureInitialized() { + if (_instance == null) { + MapperContainer.globals.use(_instance = DashboardPlotModelMapper._()); + } + return _instance!; + } + + @override + final String id = 'DashboardPlotModel'; + + static String? _$strValue(DashboardPlotModel v) => v.strValue; + static const Field _f$strValue = + Field('strValue', _$strValue, opt: true); + static String? _$label(DashboardPlotModel v) => v.label; + static const Field _f$label = + Field('label', _$label, opt: true); + static String? _$name(DashboardPlotModel v) => v.name; + static const Field _f$name = + Field('name', _$name, opt: true); + static String? _$value(DashboardPlotModel v) => v.value; + static const Field _f$value = + Field('value', _$value, opt: true); + static String? _$symbol(DashboardPlotModel v) => v.symbol; + static const Field _f$symbol = + Field('symbol', _$symbol, opt: true); + static String? _$projectId(DashboardPlotModel v) => v.projectId; + static const Field _f$projectId = + Field('projectId', _$projectId, opt: true); + static String? _$chartType(DashboardPlotModel v) => v.chartType; + static const Field _f$chartType = + Field('chartType', _$chartType, opt: true); + static String? _$visualizationCode(DashboardPlotModel v) => + v.visualizationCode; + static const Field _f$visualizationCode = + Field('visualizationCode', _$visualizationCode, opt: true); + + @override + final MappableFields fields = const { + #strValue: _f$strValue, + #label: _f$label, + #name: _f$name, + #value: _f$value, + #symbol: _f$symbol, + #projectId: _f$projectId, + #chartType: _f$chartType, + #visualizationCode: _f$visualizationCode, + }; + @override + final bool ignoreNull = true; + + static DashboardPlotModel _instantiate(DecodingData data) { + return DashboardPlotModel( + strValue: data.dec(_f$strValue), + label: data.dec(_f$label), + name: data.dec(_f$name), + value: data.dec(_f$value), + symbol: data.dec(_f$symbol), + projectId: data.dec(_f$projectId), + chartType: data.dec(_f$chartType), + visualizationCode: data.dec(_f$visualizationCode)); + } + + @override + final Function instantiate = _instantiate; + + static DashboardPlotModel fromMap(Map map) { + return ensureInitialized().decodeMap(map); + } + + static DashboardPlotModel fromJson(String json) { + return ensureInitialized().decodeJson(json); + } +} + +mixin DashboardPlotModelMappable { + String toJson() { + return DashboardPlotModelMapper.ensureInitialized() + .encodeJson(this as DashboardPlotModel); + } + + Map toMap() { + return DashboardPlotModelMapper.ensureInitialized() + .encodeMap(this as DashboardPlotModel); + } + + DashboardPlotModelCopyWith + get copyWith => _DashboardPlotModelCopyWithImpl( + this as DashboardPlotModel, $identity, $identity); + @override + String toString() { + return DashboardPlotModelMapper.ensureInitialized() + .stringifyValue(this as DashboardPlotModel); + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (runtimeType == other.runtimeType && + DashboardPlotModelMapper.ensureInitialized() + .isValueEqual(this as DashboardPlotModel, other)); + } + + @override + int get hashCode { + return DashboardPlotModelMapper.ensureInitialized() + .hashValue(this as DashboardPlotModel); + } +} + +extension DashboardPlotModelValueCopy<$R, $Out> + on ObjectCopyWith<$R, DashboardPlotModel, $Out> { + DashboardPlotModelCopyWith<$R, DashboardPlotModel, $Out> + get $asDashboardPlotModel => + $base.as((v, t, t2) => _DashboardPlotModelCopyWithImpl(v, t, t2)); +} + +abstract class DashboardPlotModelCopyWith<$R, $In extends DashboardPlotModel, + $Out> implements ClassCopyWith<$R, $In, $Out> { + $R call( + {String? strValue, + String? label, + String? name, + String? value, + String? symbol, + String? projectId, + String? chartType, + String? visualizationCode}); + DashboardPlotModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>( + Then<$Out2, $R2> t); +} + +class _DashboardPlotModelCopyWithImpl<$R, $Out> + extends ClassCopyWithBase<$R, DashboardPlotModel, $Out> + implements DashboardPlotModelCopyWith<$R, DashboardPlotModel, $Out> { + _DashboardPlotModelCopyWithImpl(super.value, super.then, super.then2); + + @override + late final ClassMapperBase $mapper = + DashboardPlotModelMapper.ensureInitialized(); + @override + $R call( + {Object? strValue = $none, + Object? label = $none, + Object? name = $none, + Object? value = $none, + Object? symbol = $none, + Object? projectId = $none, + Object? chartType = $none, + Object? visualizationCode = $none}) => + $apply(FieldCopyWithData({ + if (strValue != $none) #strValue: strValue, + if (label != $none) #label: label, + if (name != $none) #name: name, + if (value != $none) #value: value, + if (symbol != $none) #symbol: symbol, + if (projectId != $none) #projectId: projectId, + if (chartType != $none) #chartType: chartType, + if (visualizationCode != $none) #visualizationCode: visualizationCode + })); + @override + DashboardPlotModel $make(CopyWithData data) => DashboardPlotModel( + strValue: data.get(#strValue, or: $value.strValue), + label: data.get(#label, or: $value.label), + name: data.get(#name, or: $value.name), + value: data.get(#value, or: $value.value), + symbol: data.get(#symbol, or: $value.symbol), + projectId: data.get(#projectId, or: $value.projectId), + chartType: data.get(#chartType, or: $value.chartType), + visualizationCode: + data.get(#visualizationCode, or: $value.visualizationCode)); + + @override + DashboardPlotModelCopyWith<$R2, DashboardPlotModel, $Out2> $chain<$R2, $Out2>( + Then<$Out2, $R2> t) => + _DashboardPlotModelCopyWithImpl($value, $cast, t); +} diff --git a/packages/digit_dss/lib/pages/dashboard/dashboard.dart b/packages/digit_dss/lib/pages/dashboard/dashboard.dart new file mode 100644 index 000000000..6e5eca356 --- /dev/null +++ b/packages/digit_dss/lib/pages/dashboard/dashboard.dart @@ -0,0 +1,160 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:digit_components/digit_components.dart'; +import 'package:digit_components/models/digit_table_model.dart'; +import 'package:digit_components/widgets/atoms/digit_toaster.dart'; +import 'package:digit_dss/blocs/dashboard.dart'; +import 'package:digit_dss/widgets/back_navigation_help_header.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +import '../../utils/i18_key_constants.dart' as i18; +import '../../utils/utils.dart'; +import '../../widgets/dashboard/dashboard_metric_card.dart'; +import '../../widgets/localized.dart'; + +@RoutePage() +class UserDashboardPage extends LocalizedStatefulWidget { + const UserDashboardPage({ + super.key, + }); + + @override + State createState() { + return UserDashboardPageState(); + } +} + +class UserDashboardPageState extends LocalizedState { + @override + void initState() { + context.read().add(DashboardRefreshEvent( + projectId: DashboardSingleton().projectId, + syncFromServer: false, + selectedDate: DateTime.now(), + )); + + super.initState(); + } + + bool isLoading = false; + + @override + Widget build(BuildContext context) { + return BlocConsumer( + listener: (context, dashboardState) { + dashboardState.maybeWhen( + orElse: () => false, + loading: () { + if (!isLoading) { + setState(() { + isLoading = true; + }); + Loaders.showLoadingDialog(context); + } + }, + fetched: (metricData, tableData, selectedDate) { + Navigator.of(context, rootNavigator: true).pop(); + setState(() { + isLoading = false; + }); + }, + error: () { + Navigator.of(context, rootNavigator: true).pop(); + setState(() { + isLoading = false; + }); + DigitToast.show(context, + options: DigitToastOptions( + localizations.translate(i18.dashboard.someErrorOccured), + true, + DigitTheme.instance.mobileTheme)); + }); + }, builder: (context, dashboardState) { + return RefreshIndicator( + onRefresh: () { + dashboardState.maybeWhen( + orElse: () => false, + fetched: (metricData, tableData, selectedDate) async { + bool isConnected = await getIsConnected(); + if (isConnected) { + context.read().add(DashboardRefreshEvent( + projectId: DashboardSingleton().projectId, + syncFromServer: true, + selectedDate: selectedDate ?? DateTime.now(), + )); + } else { + DigitToast.show(context, + options: DigitToastOptions( + localizations + .translate(i18.dashboard.networkFailureError), + true, + DigitTheme.instance.mobileTheme, + )); + } + }); + + return Future.delayed(const Duration(seconds: 1)); + }, + child: Scaffold( + body: ScrollableContent( + footer: PoweredByDigit( + version: DashboardSingleton().appVersion, + ), + header: const Column(children: [ + BackNavigationHelpHeaderWidget( + showHelp: false, + ), + ]), + children: [ + dashboardState.maybeWhen( + orElse: () => const SizedBox.shrink(), + fetched: (metricData, tableData, selectedDate) { + return Column( + children: [ + DashboardMetricCard( + selectedDate: selectedDate ?? DateTime.now(), + ), + ...(tableData ?? []) + .map((table) => Padding( + padding: const EdgeInsets.all(kPadding), + child: DigitTable( + headerList: table.headerList.map((header) { + return TableHeader( + localizations.translate(header.label), + cellKey: header.cellKey, + ); + }).toList(), + tableData: table.tableData, + height: + ((table.tableData.length ?? 0) + 1) * + 65, + columnWidth: 140, + columnRowFixedHeight: 65, + scrollPhysics: (table.tableData.length ?? + 0) > + 5 + ? const ClampingScrollPhysics() + : const NeverScrollableScrollPhysics(), + ), + )) + .toList(), + if ((tableData ?? []).isNotEmpty) + Align( + alignment: Alignment.center, + child: DigitInfoCard( + title: localizations + .translate(i18.dashboard.noteHeader), + description: localizations + .translate(i18.dashboard.noteDescription), + ), + ) + ], + ); + }), + ], + ), + ), + ); + }); + } +} diff --git a/packages/digit_dss/lib/router/dashboard_router.dart b/packages/digit_dss/lib/router/dashboard_router.dart new file mode 100644 index 000000000..f20ca702e --- /dev/null +++ b/packages/digit_dss/lib/router/dashboard_router.dart @@ -0,0 +1,17 @@ +import 'package:auto_route/auto_route.dart'; + +import 'dashboard_router.gm.dart'; + +@AutoRouterConfig.module() +class DashboardRoute extends $DashboardRoute { + @override + RouteType get defaultRouteType => const RouteType.material(); + + @override + List routes = [ + AutoRoute( + page: UserDashboardRoute.page, + path: 'dashboard', + ), + ]; +} diff --git a/packages/digit_dss/lib/router/dashboard_router.gm.dart b/packages/digit_dss/lib/router/dashboard_router.gm.dart new file mode 100644 index 000000000..652ef7091 --- /dev/null +++ b/packages/digit_dss/lib/router/dashboard_router.gm.dart @@ -0,0 +1,38 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +// ************************************************************************** +// AutoRouterGenerator +// ************************************************************************** + +// ignore_for_file: type=lint +// coverage:ignore-file + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:auto_route/auto_route.dart' as _i2; +import 'package:digit_dss/pages/dashboard/dashboard.dart' as _i1; + +abstract class $DashboardRoute extends _i2.AutoRouterModule { + @override + final Map pagesMap = { + UserDashboardRoute.name: (routeData) { + return _i2.AutoRoutePage( + routeData: routeData, + child: const _i1.UserDashboardPage(), + ); + } + }; +} + +/// generated route for +/// [_i1.UserDashboardPage] +class UserDashboardRoute extends _i2.PageRouteInfo { + const UserDashboardRoute({List<_i2.PageRouteInfo>? children}) + : super( + UserDashboardRoute.name, + initialChildren: children, + ); + + static const String name = 'UserDashboardRoute'; + + static const _i2.PageInfo page = _i2.PageInfo(name); +} diff --git a/packages/digit_dss/lib/utils/i18_key_constants.dart b/packages/digit_dss/lib/utils/i18_key_constants.dart new file mode 100644 index 000000000..749ea1482 --- /dev/null +++ b/packages/digit_dss/lib/utils/i18_key_constants.dart @@ -0,0 +1,66 @@ +const common = Common(); +const dashboard = Dashboard(); + +class Common { + const Common(); + + String get coreCommonContinue => 'CORE_COMMON_CONTINUE'; + + String get coreCommonAge => 'CORE_COMMON_AGE'; + + String get coreCommonName => 'CORE_COMMON_NAME'; + + String get coreCommonEmailId => 'CORE_COMMON_EMAIL_ID'; + + String get coreCommonGender => 'CORE_COMMON_GENDER'; + + String get coreCommonMobileNumber => 'CORE_COMMON_MOBILE_NUMBER'; + + String get coreCommonSubmit => 'CORE_COMMON_SUBMIT'; + + String get coreCommonSave => 'CORE_COMMON_SAVE'; + + String get coreCommonCancel => 'CORE_COMMON_CANCEL'; + + String get coreCommonRequired => 'CORE_COMMON_REQUIRED'; + + String get searchByName => 'CORE_COMMON_SEARCH_BY_NAME'; + + String get coreCommonReasonRequired => 'CORE_COMMON_REASON_REQUIRED'; + + String get coreCommonClose => 'CORE_COMMON_CLOSE'; + + String get coreCommonOk => 'CORE_COMMON_OK'; + + String get coreCommonNA => 'CORE_COMMON_NA'; + + String get coreCommonBack => 'CORE_COMMON_BACK'; + + String get coreCommonHelp => 'CORE_COMMON_HELP'; + + String get coreCommonHome => 'CORE_COMMON_HOME'; + String get coreCommonlanguage => 'CORE_COMMON_LANGUAGE'; + + String get coreCommonSkip => 'CORE_COMMON_SKIP'; + + String get coreCommonNext => 'CORE_COMMON_NEXT'; + + String get coreCommonYes => 'CORE_COMMON_YES'; + + String get coreCommonNo => 'CORE_COMMON_NO'; + String get coreCommonGoback => 'CORE_COMMON_GO_BACK'; + + String get coreCommonDownload => 'CORE_COMMON_DOWNLOAD'; + + String get coreCommonDownloadFailed => 'CORE_COMMON_DOWNLOAD_FAILED'; +} + +class Dashboard { + const Dashboard(); + + String get dashboardLabel => 'HOME_DASHBOARD_LABEL'; + String get noteHeader => 'DSS_NOTE_TITLE'; + String get noteDescription => 'DSS_NOTE_DESCRIPTION'; + String get networkFailureError => 'DSS_NETWORK_FAILURE_ERROR'; + String get someErrorOccured => 'DSS_SOME_ERROR_OCCURED'; +} diff --git a/packages/digit_dss/lib/utils/utils.dart b/packages/digit_dss/lib/utils/utils.dart new file mode 100644 index 000000000..f27d32f4a --- /dev/null +++ b/packages/digit_dss/lib/utils/utils.dart @@ -0,0 +1,191 @@ +import 'dart:io'; + +import 'package:digit_components/digit_components.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:digit_dss/blocs/app_localization.dart'; +import 'package:digit_dss/data/local_store/no_sql/schema/dashboard_config_schema.dart'; +import 'package:digit_dss/data/remote/dashboard.dart'; +import 'package:digit_dss/models/entities/dashboard_request.dart'; +import 'package:flutter/material.dart'; +import 'package:isar/isar.dart'; + +import '../models/entities/dss_enums.dart'; + +const dashboardAPIPath = '/dashboard-analytics/dashboard/getChartV2'; +Future getIsConnected() async { + try { + final result = await InternetAddress.lookup('example.com'); + if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) { + return true; + } + + return false; + } on SocketException catch (_) { + return false; + } +} + +Widget buildMetric( + BuildContext context, + String label, + String value, + int index, + DashboardLocalization localizations, +) { + return Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.spaceAround, + mainAxisSize: MainAxisSize.max, + children: [ + if (index > 2) + SizedBox( + width: MediaQuery.of(context).size.width / 3.6, + child: Divider( + indent: 0, + height: kPadding, + endIndent: 0, + thickness: 2, + color: DigitTheme.instance.mobileTheme.colorScheme.outline, + ), + ), + ConstrainedBox( + constraints: + BoxConstraints(maxWidth: MediaQuery.of(context).size.width / 5), + child: Text( + value, + style: DigitTheme.instance.mobileTheme.textTheme.bodyLarge, + maxLines: 2, + textAlign: TextAlign.center, + ), + ), + ConstrainedBox( + constraints: + BoxConstraints(maxWidth: MediaQuery.of(context).size.width / 3.6), + child: Align( + alignment: Alignment.center, + child: Text( + localizations.translate( + label, + ), + textAlign: TextAlign.center, + style: DigitTheme.instance.mobileTheme.textTheme.bodyMedium, + ), + ), + ), + ], + ); +} + +DashboardRequestModel getRequestModel({ + required String visualizationCode, + required String visualizationType, + required int startDate, + required int endDate, +}) { + return DashboardRequestModel( + aggregationRequestDto: AggregationRequestDto( + visualizationCode: visualizationCode, + visualizationType: visualizationType, + requestDate: RequestDate( + startDate: startDate, + endDate: endDate, + interval: DSSEnums.day.toValue(), + title: DSSEnums.home.toValue(), + )), + headers: DSSHeaders( + tenantId: DashboardSingleton().tenantId, + ), + ); +} + +Future processDashboardConfig( + List dashboardConfig, + int startDate, + int endDate, + Isar isar, + DateTime lastSelectedDate, + DashboardRemoteRepository dashboardRemoteRepo, + String actionPath, + String tenantId, + String projectId, +) async { + if(dashboardConfig.isNotEmpty) { + for (var entry in dashboardConfig) { + String visualizationType = entry.chartType ?? ''; + String visualizationCode = entry.name ?? ''; + await dashboardRemoteRepo.searchAndWriteToDB( + apiEndPoint: actionPath, + lastSelectedDate: lastSelectedDate, + query: DashboardRequestModel( + aggregationRequestDto: AggregationRequestDto( + visualizationType: visualizationType, + visualizationCode: visualizationCode, + filters: {}, + moduleLevel: "", + queryType: "", + requestDate: RequestDate( + startDate: startDate, + endDate: endDate, + interval: DSSEnums.day.toValue(), + title: DSSEnums.home.toValue(), + )), + headers: DSSHeaders( + tenantId: tenantId, + )).toMap(), + projectId: projectId, + isar: isar, + ); + } + } +} + +String transformToLocaleCode(String input) { + // Replace spaces with underscores and convert to uppercase + return input.replaceAll(' ', '_').toUpperCase(); +} + +// create a singleton class for Dashboard package where set data and get data methods are defined + +class DashboardSingleton { + static final DashboardSingleton _singleton = DashboardSingleton._internal(); + + factory DashboardSingleton() { + return _singleton; + } + + DashboardSingleton._internal(); + + String? _tenantId; + String? _projectId; + String? _actionPath; + String? _appVersion; + ProjectModel? _selectedProject; + DashboardConfigSchema? _dashboardConfig; + + void setInitialData({ + required String projectId, + required String tenantId, + required String actionPath, + required String appVersion, + required ProjectModel selectedProject, + DashboardConfigSchema? dashboardConfig, + }) { + _projectId = projectId; + _tenantId = tenantId; + _actionPath = actionPath.trim().isNotEmpty + ? actionPath + : dashboardAPIPath; //[TODO: To be added to MDMS Service registry + _appVersion = appVersion; + _selectedProject = selectedProject; + _dashboardConfig = dashboardConfig; + } + + String get tenantId => _tenantId ?? ''; + String get projectId => _projectId ?? ''; + String get appVersion => _appVersion ?? ''; + String get actionPath => + _actionPath ?? + dashboardAPIPath; //[TODO: To be added to MDMS Service registry + ProjectModel? get selectedProject => _selectedProject; + DashboardConfigSchema? get dashboardConfig => _dashboardConfig; +} diff --git a/packages/digit_dss/lib/widgets/back_navigation_help_header.dart b/packages/digit_dss/lib/widgets/back_navigation_help_header.dart new file mode 100644 index 000000000..c374ca8bb --- /dev/null +++ b/packages/digit_dss/lib/widgets/back_navigation_help_header.dart @@ -0,0 +1,80 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:digit_components/digit_components.dart'; +import 'package:digit_dss/blocs/app_localization.dart'; +import 'package:flutter/material.dart'; + +import '../../utils/i18_key_constants.dart' as i18; + +class BackNavigationHelpHeaderWidget extends StatelessWidget { + final bool showHelp; + final bool showBackNavigation; + final bool showLogoutCTA; + final VoidCallback? helpClicked; + final VoidCallback? handleBack; + + const BackNavigationHelpHeaderWidget({ + super.key, + this.showHelp = false, //hiding help + this.showBackNavigation = true, + this.showLogoutCTA = false, + this.helpClicked, + this.handleBack, + }); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + + return Padding( + padding: const EdgeInsets.all(kPadding / 2), + child: Row( + children: [ + Expanded( + child: Row( + children: [ + if (showBackNavigation) + Flexible( + child: TextButton.icon( + style: TextButton.styleFrom( + foregroundColor: theme.colorScheme.onBackground, + padding: EdgeInsets.zero, + ), + onPressed: () { + context.router.maybePop(); + handleBack != null ? handleBack!() : null; + }, + icon: const Icon(Icons.arrow_left_sharp), + label: Text( + DashboardLocalization.of(context).translate( + i18.common.coreCommonBack, + ), + overflow: TextOverflow.ellipsis, + ), + ), + ), + ], + ), + ), + SizedBox(width: showHelp ? kPadding * 2 : 0), + if (showHelp) + TextButton( + style: TextButton.styleFrom(padding: EdgeInsets.zero), + onPressed: helpClicked, + child: Row( + children: [ + Text( + DashboardLocalization.of(context) + .translate(i18.common.coreCommonHelp), + overflow: TextOverflow.ellipsis, + ), + const Icon( + Icons.help_outline_outlined, + ), // Add the icon to the right + ], + ), + ), + ], + ), + ); + } +} diff --git a/packages/digit_dss/lib/widgets/dashboard/dashboard_metric_card.dart b/packages/digit_dss/lib/widgets/dashboard/dashboard_metric_card.dart new file mode 100644 index 000000000..f20df48dd --- /dev/null +++ b/packages/digit_dss/lib/widgets/dashboard/dashboard_metric_card.dart @@ -0,0 +1,189 @@ +import 'package:collection/collection.dart'; +import 'package:digit_components/digit_components.dart'; +import 'package:digit_components/utils/date_utils.dart'; +import 'package:digit_components/widgets/atoms/digit_toaster.dart'; +import 'package:digit_dss/widgets/localized.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +import '../../blocs/dashboard.dart'; +import '../../utils/i18_key_constants.dart' as i18; +import '../../utils/utils.dart'; + +class DashboardMetricCard extends LocalizedStatefulWidget { + final DateTime? selectedDate; + const DashboardMetricCard({ + super.key, + super.appLocalizations, + this.selectedDate, + }); + + @override + State createState() => _DashboardMetricCardState(); +} + +class _DashboardMetricCardState extends LocalizedState { + @override + void initState() { + super.initState(); + } + + @override + Widget build(BuildContext context) { + final theme = DigitTheme.instance.mobileTheme; + + return BlocBuilder( + builder: (context, dashboardState) { + return DigitCard( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Padding( + padding: const EdgeInsets.symmetric( + horizontal: kPadding * 2, + vertical: kPadding * 2, + ), + child: Text( + localizations.translate( + i18.dashboard.dashboardLabel, + ), + style: theme.textTheme.displayMedium, + ), + ), + Expanded( + child: InkWell( + onTap: () async { + bool isConnected = await getIsConnected(); + if (isConnected) { + DateTime? pickedDate = await showDatePicker( + context: context, + initialDate: DateTime.now(), + firstDate: DateTime(1900), + lastDate: DateTime.now(), + ); + + if (pickedDate != null && pickedDate != DateTime.now()) { + final dashboardBloc = context.read(); + dashboardBloc.add(DashboardRefreshEvent( + selectedDate: pickedDate.toLocal(), + projectId: DashboardSingleton().projectId, + syncFromServer: true, + )); + } + } else { + DigitToast.show(context, + options: DigitToastOptions( + localizations + .translate(i18.dashboard.networkFailureError), + true, + DigitTheme.instance.mobileTheme)); + } + }, + child: Container( + alignment: Alignment.centerRight, + padding: const EdgeInsets.only(bottom: 12), + child: Wrap( + crossAxisAlignment: WrapCrossAlignment.center, + children: [ + Text( + dashboardState.maybeWhen( + orElse: () => '', + fetched: (metricData, tableData, + selectedDate) => + '${DigitDateUtils.getMonth(selectedDate?.toLocal() ?? DateTime.now())} - ${(selectedDate?.toLocal() ?? DateTime.now()).day}, ${(selectedDate?.toLocal() ?? DateTime.now()).year}'), + style: theme.textTheme.bodyMedium + ?.apply(color: theme.colorScheme.secondary), + ), + const Padding( + padding: EdgeInsets.only(right: 3.0), + child: Visibility( + child: Icon(Icons.arrow_drop_down), + ), + ) + ]), + ), + ), + ) + ], + ), + Padding( + padding: const EdgeInsets.only(top: kPadding, bottom: kPadding), + child: Wrap( + spacing: 2.0, // Space between items + runSpacing: 2.0, // Space between lines + alignment: WrapAlignment.start, + children: [ + ...dashboardState.maybeWhen( + orElse: () => [], + fetched: (metricData, tableData, selectedDate) { + return metricData != null + ? metricData.entries + .where((m) => m.value.isHorizontal == true) + .mapIndexed(( + i, + entry, + ) { + return SizedBox( + height: MediaQuery.of(context).size.width / 3.8, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.min, + children: [ + buildMetric( + context, + entry.key, + entry.value.value, + i, + localizations, + ), + if (entry.key != + metricData.entries.last.key) + VerticalDivider( + width: kPadding, + color: DigitTheme.instance.mobileTheme + .colorScheme.outline, + thickness: 2, + ), + ], + ), + ); + }).toList() + : []; + }), + ...dashboardState.maybeWhen( + orElse: () => [], + fetched: (metricData, tableData, selectedDate) { + return metricData != null + ? metricData.entries + .where((m) => m.value.isHorizontal == false) + .mapIndexed(( + i, + entry, + ) { + return Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: const EdgeInsets.symmetric( + vertical: kPadding), + child: Text( + '${entry.value.value} ${localizations.translate(entry.value.header)}', + textAlign: TextAlign.start, + style: DigitTheme.instance.mobileTheme + .textTheme.bodyMedium, + ), + ), + ); + }).toList() + : []; + }), + ], + ), + ), + ], + )); + }); + } +} diff --git a/packages/digit_dss/lib/widgets/localized.dart b/packages/digit_dss/lib/widgets/localized.dart new file mode 100644 index 000000000..a35c9b95e --- /dev/null +++ b/packages/digit_dss/lib/widgets/localized.dart @@ -0,0 +1,35 @@ +import 'package:flutter/material.dart'; + +import '../blocs/app_localization.dart'; + +abstract class LocalizedStatefulWidget extends StatefulWidget { + final DashboardLocalization? appLocalizations; + + const LocalizedStatefulWidget({ + super.key, + this.appLocalizations, + }); +} + +abstract class LocalizedState + extends State { + late DashboardLocalization _localizations; + + DashboardLocalization get localizations => _localizations; + + set localizations(DashboardLocalization localizations) { + if (mounted) { + setState(() { + _localizations = localizations; + }); + } + } + + @override + @mustCallSuper + void didChangeDependencies() { + _localizations = + widget.appLocalizations ?? DashboardLocalization.of(context); + super.didChangeDependencies(); + } +} diff --git a/packages/digit_dss/pubspec.yaml b/packages/digit_dss/pubspec.yaml new file mode 100644 index 000000000..c2844f21e --- /dev/null +++ b/packages/digit_dss/pubspec.yaml @@ -0,0 +1,84 @@ +name: digit_dss +description: "DSS Dashboard for campaign management" +version: 0.0.1-dev.1 +homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/develop/packages/digit_dss +repository: https://github.com/egovernments/health-campaign-field-worker-app + +environment: + sdk: '>=3.2.3 <4.0.0' + flutter: ">=1.17.0" + +dependencies: + flutter: + sdk: flutter + digit_components: ^1.0.0+9 + flutter_bloc: ^8.1.1 + reactive_forms: ^14.1.0 + intl: ^0.18.0 + freezed_annotation: ^2.1.0 + flutter_svg: ^2.0.8 + dart_mappable: ^4.2.0 + auto_route: ^7.8.4 + digit_data_model: ^1.0.3-dev.3 + package_info_plus: ^5.0.1 + collection: ^1.16.0 + async: ^2.11.0 + dio: ^5.4.2+1 + isar: ^3.0.5 + isar_flutter_libs: ^3.0.5 + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^2.0.0 + dart_code_metrics: ^5.7.6 + freezed: ^2.1.0+1 + json_serializable: ^6.4.0 + drift_dev: ^2.14.1 + build_runner: ^2.4.7 + bloc_test: ^9.1.0 + mocktail: ^1.0.2 + dart_mappable_builder: + git: + url: https://github.com/egovernments/health-campaign-field-worker-app/ + ref: master + path: ./packages/dart_mappable_builder + auto_route_generator: ^7.3.2 + isar_generator: ^3.0.5 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + +# To add assets to your package, add an assets section, like this: +# assets: +# - images/a_dot_burr.jpeg +# - images/a_dot_ham.jpeg +# +# For details regarding assets in packages, see +# https://flutter.dev/assets-and-images/#from-packages +# +# An image asset can refer to one or more resolution-specific "variants", see +# https://flutter.dev/assets-and-images/#resolution-aware + +# To add custom fonts to your package, add a fonts section here, +# in this "flutter" section. Each entry in this list should have a +# "family" key with the font family name, and a "fonts" key with a +# list giving the asset and other descriptors for the font. For +# example: +# fonts: +# - family: Schyler +# fonts: +# - asset: fonts/Schyler-Regular.ttf +# - asset: fonts/Schyler-Italic.ttf +# style: italic +# - family: Trajan Pro +# fonts: +# - asset: fonts/TrajanPro.ttf +# - asset: fonts/TrajanPro_Bold.ttf +# weight: 700 +# +# For details regarding fonts in packages, see +# https://flutter.dev/custom-fonts/#from-packages diff --git a/packages/digit_dss/test/digit_dss_test.dart b/packages/digit_dss/test/digit_dss_test.dart new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/packages/digit_dss/test/digit_dss_test.dart @@ -0,0 +1 @@ + diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration_delivery/CHANGELOG.md index 621fa4801..3df180294 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration_delivery/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.3-dev.5 + +* Added count for filter search +* Bug fixes ## 1.0.3-dev.4 diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart index dcd3fdb0e..df522e610 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart @@ -42,32 +42,38 @@ class BeneficiaryRegistrationWrapperPage extends StatelessWidget context.repository(context); return BlocProvider( - create: (_) => HouseholdOverviewBloc( - HouseholdOverviewState( - householdMemberWrapper: HouseholdMemberWrapper( - household: initialState.householdModel, - headOfHousehold: null, - members: [], - projectBeneficiaries: []), - ), - individualRepository: individual, - householdRepository: household, - householdMemberRepository: householdMember, - projectBeneficiaryRepository: projectBeneficiary, - beneficiaryType: RegistrationDeliverySingleton().beneficiaryType!, - taskDataRepository: task, - sideEffectDataRepository: sideEffect, - referralDataRepository: referral), + create: (context) => BeneficiaryRegistrationBloc( + initialState, + individualRepository: individual, + householdRepository: household, + householdMemberRepository: householdMember, + projectBeneficiaryRepository: projectBeneficiary, + taskDataRepository: task, + beneficiaryType: beneficiaryType!, + ), child: BlocProvider( - create: (context) => BeneficiaryRegistrationBloc( - initialState, - individualRepository: individual, - householdRepository: household, - householdMemberRepository: householdMember, - projectBeneficiaryRepository: projectBeneficiary, - taskDataRepository: task, - beneficiaryType: beneficiaryType!, - ), + create: (_) => HouseholdOverviewBloc( + HouseholdOverviewState( + householdMemberWrapper: HouseholdMemberWrapper( + household: initialState.householdModel, + headOfHousehold: null, + members: [], + projectBeneficiaries: []), + ), + individualRepository: individual, + householdRepository: household, + householdMemberRepository: householdMember, + projectBeneficiaryRepository: projectBeneficiary, + beneficiaryType: RegistrationDeliverySingleton().beneficiaryType!, + taskDataRepository: task, + sideEffectDataRepository: sideEffect, + referralDataRepository: referral) + ..add( + HouseholdOverviewReloadEvent( + projectId: RegistrationDeliverySingleton().selectedProject!.id, + projectBeneficiaryType: + RegistrationDeliverySingleton().beneficiaryType!), + ), child: this, ), ); diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart index bc47d1fbd..07608c5ef 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart @@ -306,18 +306,6 @@ class HouseHoldDetailsPageState extends LocalizedState { ); final overviewBloc = context.read(); - - overviewBloc.add( - HouseholdOverviewReloadEvent( - projectId: RegistrationDeliverySingleton() - .projectId - .toString(), - projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType ?? - BeneficiaryType.household, - ), - ); HouseholdMemberWrapper memberWrapper = overviewBloc.state.householdMemberWrapper; final route = router.parent() as StackRouter; diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index f1d4609e1..9a3aefe2e 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -419,18 +419,19 @@ packages: digit_components: dependency: "direct main" description: - path: "../digit_components" - relative: true - source: path - version: "1.0.0+8" + name: digit_components + sha256: "90e12017934343a197a0c25bec00e5fc28e19cfbf11e522798cc39719609612c" + url: "https://pub.dev" + source: hosted + version: "1.0.0+9" digit_data_model: dependency: "direct main" description: name: digit_data_model - sha256: c708c6474b7a67e3cdedcbb82265c201e61390360109344ebedfa2cc1ded0440 + sha256: "5559c3e652a24f3d24f324d275399f6e864ca5671285386516b94fdf9fe8724c" url: "https://pub.dev" source: hosted - version: "1.0.3-dev.2" + version: "1.0.3-dev.3" digit_scanner: dependency: "direct main" description: diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index b1be0df50..6105ad697 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -1,6 +1,6 @@ name: registration_delivery description: This package enables health facility workers to register a household and individual members and deliver the resources. -version: 1.0.3-dev.4 +version: 1.0.3-dev.5 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/registration_delivery repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0+8 + digit_components: ^1.0.0+9 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 @@ -32,7 +32,7 @@ dependencies: digit_scanner: ^1.0.3-dev.1 gs1_barcode_parser: ^1.0.5 auto_route: ^7.8.4 - digit_data_model: ^1.0.3-dev.2 + digit_data_model: ^1.0.3-dev.3 package_info_plus: ^5.0.1 digit_showcase: ^1.0.0 collection: ^1.16.0 diff --git a/tools/digit_dss_imports.dart b/tools/digit_dss_imports.dart new file mode 100644 index 000000000..2e8842a46 --- /dev/null +++ b/tools/digit_dss_imports.dart @@ -0,0 +1,474 @@ +// Import the required Dart I/O package +import 'dart:io'; + +// Define the main function +void main() { + // Get the current directory path + var appDir = Directory.current.path; + + // Define the paths for the application root and the files to be modified + var appRoot = appDir + '/apps/health_campaign_field_worker_app/lib'; + var appFile = appRoot + '/app.dart'; + var localizationDelegatesFilePath = + appRoot + '/utils/localization_delegates.dart'; + var constantsFilePath = appRoot + '/utils/constants.dart'; + var utilsFilePath = appRoot + '/utils/utils.dart'; + var routerFilePath = appRoot + '/router/app_router.dart'; + var entityMapperFilePath = + appRoot + '/data/local_store/no_sql/schema/entity_mapper.dart'; + var syncDownFilePath = appRoot + '/data/repositories/sync/sync_down.dart'; + var homeFilePath = appRoot + '/pages/home.dart'; + var extensionsFilePath = appRoot + '/utils/extensions/extensions.dart'; + + // Add the scanner bloc to the app file + _addDSSDashboardBlocToAppFile(appFile); + + // Create the localization delegates file + _createLocalizationDelegatesFile(localizationDelegatesFilePath); + + // Add dss to home file + _updateHome(homeFilePath); + + // Add dss routes and import to the router file + _addDigitDSSRoutesAndImportToRouterFile(routerFilePath); + + // Add the dss related constants to the constants file + _addRegNDeliveryConstantsToConstantsFile( + constantsFilePath: constantsFilePath); + + // Add the dss related mappers to the utils file + _addDSSMapperToUtilsFile(utilsFilePath: utilsFilePath); + + _formatFiles([ + appFile, + localizationDelegatesFilePath, + constantsFilePath, + utilsFilePath, + routerFilePath, + entityMapperFilePath, + syncDownFilePath, + homeFilePath, + extensionsFilePath, + ]); +} + +void _formatFiles(List filePaths) { + for (var filePath in filePaths) { + Process.runSync('dart', ['format', filePath]); + print('Formatted $filePath'); + } +} + +void _addDSSDashboardBlocToAppFile(String appFilePath) { + var importStatement = "import 'package:digit_dss/digit_dss.dart';"; + + var dssBlocData = ''' + BlocProvider( + create: (ctx) => DashboardBloc( + const DashboardState.initialState(), + isar: widget.isar, + dashboardRemoteRepo: DashboardRemoteRepository(widget.client), + )), + '''; + + // Check if the app.dart file exists + var appFile = File(appFilePath); + if (!appFile.existsSync()) { + print('Error: App file does not exist at path: $appFile'); + return; + } + + // Read the app.dart file + var appFileContent = appFile.readAsStringSync(); + + // Check if the import statement already exists and add it if not + if (!appFileContent.contains(importStatement)) { + appFileContent = importStatement + '\n' + appFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + + if (!appFileContent.contains('DashboardBloc(')) { + // Insert the data to be added + appFileContent = insertData(appFileContent, + '// INFO : Need to add bloc of package Here', dssBlocData); + } + + // Write the updated content back to the app.dart file + appFile.writeAsStringSync(appFileContent); +} + +void _updateHome(String homeFilePath) { + var importStatement = ''' + import 'package:digit_dss/router/dashboard_router.gm.dart'; + '''; + + var homeItemsData = ''' + i18.home.dashboard: homeShowcaseData.dashBoard.buildWith( + child: HomeItemCard( + icon: Icons.bar_chart_sharp, + label: i18.home.dashboard, + onPressed: () { + context.router.push(const UserDashboardRoute()); + }, + ), + ), + '''; + + var showCaseData = ''' + i18.home.dashboard: + homeShowcaseData.dashBoard.showcaseKey, + '''; + + var itemsLabel = ''' + i18.home.dashboard, + '''; + + // Define the data to be added + var singletonData = ''' + DashboardSingleton().setInitialData( + projectId: context.projectId, + tenantId: envConfig.variables.tenantId, + dashboardConfig: appConfiguration.dashboardConfig, + appVersion: Constants().version, + selectedProject: context.selectedProject, + actionPath: Constants.getEndPoint( + serviceRegistry: serviceRegistry, + service: DashboardResponseModel.schemaName.toUpperCase(), + action: ApiOperation.search.toValue(), + entityName: DashboardResponseModel.schemaName, + )); + '''; + + // Check if the home.dart file exists + var homeFile = File(homeFilePath); + if (!homeFile.existsSync()) { + print('Error: Home file does not exist at path: $homeFilePath'); + return; + } + + // Read the home.dart file + var homeFileContent = homeFile.readAsStringSync(); + + // Check if the import statement already exists and add it if not + if (!homeFileContent + .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { + homeFileContent = importStatement + '\n' + homeFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + + // Insert the data to be added + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add singleton of package Here', singletonData); + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add home items of package Here', homeItemsData); + homeFileContent = insertData(homeFileContent, + '// INFO : Need to add showcase keys of package Here', showCaseData); + homeFileContent = insertData(homeFileContent, + '// INFO: Need to add items label of package Here', itemsLabel); + + // Write the updated content back to the home.dart file + homeFile.writeAsStringSync(homeFileContent); +} + +String insertData(String fileContent, String marker, String data) { + var markerIndex = fileContent.indexOf(marker); + if (markerIndex != -1) { + var endOfMarker = markerIndex + marker.length; + if (!fileContent.substring(endOfMarker).contains(data.trim())) { + fileContent = fileContent.substring(0, endOfMarker) + + '\n' + + data + + fileContent.substring(endOfMarker); + print('Data was added after marker: $marker'); + } else { + print('Data already exists after marker: $marker'); + } + } else { + print('Error: Could not find the marker: $marker'); + } + return fileContent; +} + +void _createLocalizationDelegatesFile(String localizationDelegatesFilePath) { + // Define the import statement and delegate for localization + var importStatement = + "import 'package:digit_dss/blocs/app_localization.dart' as digit_dss_localization;"; + var delegate = ''' + digit_dss_localization.DashboardLocalization.getDelegate( + getLocalizationString( + isar, + selectedLocale, + ), + appConfig.languages!, + ), + '''; + + // Read the localization delegates file + var localizationDelegatesFile = File(localizationDelegatesFilePath); + var localizationDelegatesFileContent = + localizationDelegatesFile.readAsStringSync(); + + var normalizedFileContent = + localizationDelegatesFileContent.replaceAll(RegExp(r'\s'), ''); + + // Check if the import statement and delegate already exist in the file + // If not, add them to the file + if (!normalizedFileContent + .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { + localizationDelegatesFileContent = + '$importStatement\n$localizationDelegatesFileContent'; + print('The import statement was added.'); + } + + if (!normalizedFileContent.contains(delegate.replaceAll(RegExp(r'\s'), ''))) { + var lastDelegateIndex = + localizationDelegatesFileContent.lastIndexOf(RegExp(r',')); + if (lastDelegateIndex != -1) { + localizationDelegatesFileContent = + localizationDelegatesFileContent.substring(0, lastDelegateIndex + 1) + + '\n $delegate' + + localizationDelegatesFileContent.substring(lastDelegateIndex + 1); + print('The delegate was added.'); + } + } + + // Write the updated content back to the file + localizationDelegatesFile.writeAsStringSync(localizationDelegatesFileContent); +} + +void _addDigitDSSRoutesAndImportToRouterFile(String routerFilePath) { + // Define the dss route lines + var dssRoutes = ''' + // DSS Dashboard Routes + AutoRoute( + page: UserDashboardRoute.page, + path: 'dashboard', + ), + '''; + + // Define the import statement + var importStatement1 = + "import 'package:digit_dss/router/dashboard_router.dart';"; + // Define the import statement + var importStatement2 = + "import 'package:digit_dss/router/dashboard_router.gm.dart';"; + + // Check if the router file exists + var routerFile = File(routerFilePath); + + if (!routerFile.existsSync()) { + print('Error: Router file does not exist at path: $routerFilePath'); + return; + } + + // Read the router file + var routerFileContent = routerFile.readAsStringSync(); + + // Normalize the whitespace in the file content + var normalizedFileContent = routerFileContent.replaceAll(RegExp(r'\s'), ''); + + // Check if the import statement already exists + if (!normalizedFileContent + .contains(importStatement1.replaceAll(RegExp(r'\s'), ''))) { + // Add the import statement at the beginning of the file + routerFileContent = importStatement1 + '\n' + routerFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + + // Check if the import statement already exists + if (!normalizedFileContent + .contains(importStatement2.replaceAll(RegExp(r'\s'), ''))) { + // Add the import statement at the beginning of the file + routerFileContent = importStatement2 + '\n' + routerFileContent; + print('The import statement was added.'); + } else { + print('The import statement already exists.'); + } + // Check if the DSSRoute module already exists + if (!routerFileContent.contains('DashboardRoute')) { + // Find the position to insert the module + var moduleInsertionIndex = routerFileContent.indexOf('@AutoRouterConfig('); + if (moduleInsertionIndex != -1) { + var endOfModulesIndex = + routerFileContent.indexOf(']', moduleInsertionIndex); + if (endOfModulesIndex != -1) { + var modulesEndIndex = + routerFileContent.lastIndexOf(']', endOfModulesIndex); + routerFileContent = routerFileContent.substring(0, modulesEndIndex) + + ' DashboardRoute,' + + routerFileContent.substring(modulesEndIndex); + print('The DashboardRoute module was added.'); + } else { + print('Error: Could not find the end of the modules list.'); + return; + } + } else { + print('Error: Could not find @AutoRouterConfig annotation.'); + return; + } + } else { + print('The DashboardRoute module already exists.'); + } + + // Check if the dss routes already exist in the file + if (!normalizedFileContent + .contains(dssRoutes.replaceAll(RegExp(r'\s'), ''))) { + // Find the position to insert the routes + var insertionIndex = routerFileContent + .indexOf('// INFO : Need to add Router of package Here'); + if (insertionIndex != -1) { + routerFileContent = routerFileContent.substring(0, insertionIndex) + + '// INFO : Need to add Router of package Here\n' + + dssRoutes + + routerFileContent.substring(insertionIndex + + '// INFO : Need to add Router of package Here'.length); + print('The dss routes were added.'); + + // Write the updated content back to the file + routerFile.writeAsStringSync(routerFileContent); + } else { + print('Error: Could not find the insertion point.'); + return; + } + } else { + print('The dss routes already exist.'); + } +} + +void _addDSSMapperToUtilsFile({required String utilsFilePath}) { + // Define the dss related lines + var dataModelImportStatement = [ + "import 'package:digit_dss/digit_dss.dart' as dss_mappers;" + ]; + var dataModelInitializationStatement = + "Future(() => dss_mappers.initializeMappers()),"; + + // Check if the utils.dart file exists + var utilsFile = File(utilsFilePath); + + // Read the utils.dart file + var utilsFileContent = utilsFile.readAsStringSync(); + + // Normalize the whitespace in the file content + var normalizedFileContent = utilsFileContent.replaceAll(RegExp(r'\s'), ''); + + // Check if the import statement and delegate already exist in the file + // If not, add them to the file + if (!normalizedFileContent + .contains(dataModelImportStatement[0].replaceAll(RegExp(r'\s'), ''))) { + var libraryIndex = utilsFileContent.indexOf('library app_utils;'); + if (libraryIndex != -1) { + var endOfLibrary = libraryIndex + + utilsFileContent.substring(libraryIndex).indexOf(';') + + 1; + utilsFileContent = utilsFileContent.substring(0, endOfLibrary + 1) + + '\n' + + dataModelImportStatement[0] + + utilsFileContent.substring(endOfLibrary + 1); + print('The import statement was added.'); + } + } else { + print('The import statement already exists.'); + } + + if (!utilsFileContent.contains(dataModelInitializationStatement)) { + // Add the dss related initialization statement to the file + var initializeAllMappersIndex = + utilsFileContent.indexOf('initializeAllMappers() async {'); + if (initializeAllMappersIndex == -1) { + print( + 'Error: Could not find a place to insert the DigitDSS initialization statement.'); + return; + } + var endOfInitializeAllMappers = initializeAllMappersIndex + + utilsFileContent.substring(initializeAllMappersIndex).indexOf(']') + + 1; + utilsFileContent = + utilsFileContent.substring(0, endOfInitializeAllMappers - 1) + + '\n ' + + dataModelInitializationStatement + + utilsFileContent.substring(endOfInitializeAllMappers - 1); + print('DigitDSS initialization statement added to utils.dart'); + } + + // Write the updated content back to the utils.dart file + utilsFile.writeAsStringSync(utilsFileContent); +} + +void _addRegNDeliveryConstantsToConstantsFile( + {required String constantsFilePath}) { + // Define the import statements + var importStatements = [ + "import 'package:digit_dss/digit_dss.dart';", + ]; + + // Define the additional line to be added + var dashboardResponseSchema = ''' + DashboardResponseSchema + '''; + // Check if the constants.dart file exists + var constantsFile = File(constantsFilePath); + if (!constantsFile.existsSync()) { + print('Error: The constants.dart file does not exist.'); + return; + } + + // Read the constants.dart file + var constantsFileContent = constantsFile.readAsStringSync(); + + // Normalize the whitespace in the file content and the dss configuration + var normalizedFileContent = + constantsFileContent.replaceAll(RegExp(r'\s'), ''); + var normalizedDashboardSchemaConfiguration = + dashboardResponseSchema.replaceAll(RegExp(r'\s'), ''); + + // Check if the import statements already exist in the file + for (var importStatement in importStatements) { + if (!normalizedFileContent + .contains(importStatement.replaceAll(RegExp(r'\s'), ''))) { + // Add the import statement at the top of the file + constantsFileContent = importStatement + '\n' + constantsFileContent; + print('The import statement was added: $importStatement'); + } + } + + // Check if the dss configuration already exists in the file + // If not, add it to the file + if (!normalizedFileContent.contains(normalizedDashboardSchemaConfiguration)) { + // Find the setInitialDataOfPackages method and add the dss configuration inside it + var openIsarFunctionIndex = + constantsFileContent.indexOf('await Isar.open('); + + if (openIsarFunctionIndex != -1) { + int schemaListStartIndex = + constantsFileContent.indexOf('[', openIsarFunctionIndex); + int schemaListEndIndex = + constantsFileContent.indexOf(']', schemaListStartIndex); + + if (schemaListStartIndex != -1 && schemaListEndIndex != -1) { + String schemaList = constantsFileContent + .substring(schemaListStartIndex + 1, schemaListEndIndex) + .trim(); + + // Ensure no extra comma is added + if (schemaList.isNotEmpty && !schemaList.endsWith(',')) { + schemaList += ','; + } + schemaList += ' $dashboardResponseSchema,'; + + constantsFileContent = constantsFileContent.replaceRange( + schemaListStartIndex + 1, schemaListEndIndex, schemaList); + print('The DashboardSchema was added.'); + } + } + } + + // Write the updated content back to the constants.dart file + constantsFile.writeAsStringSync(constantsFileContent); +} From 5860ae28b8c43f743dfd1cd3ec6f9da9399da4da Mon Sep 17 00:00:00 2001 From: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Date: Tue, 6 Aug 2024 21:33:27 +0530 Subject: [PATCH 068/241] HCMPRE-177:: Fetch and send attendees uuids of registers to dss filters (#491) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * added translator for administration area * Fixed Facility search based on tenant ID * Added disable battery optimization permission for background service * Added disable battery optimization ask permission on App start and background service start * HLM-5984:: Get Precise location on Submitting latitude longitude details * Reverted install_bricks.sh * added new status REGISTERED, NOT_REGISTERED updated conditional check for status by project beneficiaries * added static status_filter.dart integration in search_beneficiary.dart * TODO for selected_filters display condition * integrated household search filters with mdms implemented search based on filters with pagination for Registered and NotRegistered * updated status filter component merge with develop * create individual_global_search and implemented search * Auto Create Project Beneficiary on Edit Household, and disable record delivery if no project beneficiary present * Conflicts resolved * Pop State recapture during registration flow, Disable delivery flow for individual based campaign if project beneficiaries is empty * implemented household_global_search.dart fixed individual_global_search.dart * updated proximity search for household_global_search.dart * Pop State recapture during registration flow, Disable delivery flow for individual based campaign if project beneficiaries is empty (#456) * updated class state from private for customization override in registration_delivery and inventory added pagination for filter search TODO: combination search for registered and not registered needs fix which return only last selected results * adding missed changes for last commit * HCMPRE-55 Dashboard Static Screen added * displaying selected filter value for applied filters in search_beneficiary.dart * updated changelog for inventory and registration_delivery for new dev versions * updated pubspec lock of registration_delivery * removed multiple filter selection modified filter search * fixed delivery team scanner issues in stock_details.dart * Fixed - missing addition of scanned resources to additional fields filter search bug fixes * HCMPRE-74, HCMPRE-82, HCMPRE-83:: Household Reload Fix, Validations for Household details added (#458) * updated individual global search added beneficiary type check in view_beneficiary_card.dart removed commented code in household_overview.dart * Added null check for beneficiaryTag in closed_household_summary.dart * Exposed Registration delivery pages * updated remote repository and some miner fixes (#461) Co-authored-by: rachana-egov * HCMPRE-82:: Validations and Bug Fixes * small css fixes (#462) Co-authored-by: rachana-egov Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> * merge fix * added closed household search * status model fix * Closed-household-registration (#464) * closed-household-registration * closed-household-registration * updated pub file --------- Co-authored-by: rachana-egov * added closed household init file modified user_action.dart model and db corrected modified closed household status * updated registration for closed household * added closed_household search and updating closed household status * clearing search before navigating to registration flow * getting last tasks in household_overview.dart * HCMPRE-107:: Summary page added for Delivery Flow, HCMPRE-111:: Disable Delete household if beneficiary not present (#463) * Validation and gps fixes * fixed closed household count clearing closedhould results for clear * pagination fix for closed household * sync down for closed household, updated scan voucher button, and remove the tag when we navigate to a different page (#465) Co-authored-by: rachana-egov * DeliverySummary Route added to main app * seperated closedhousehold search Bug fixes - HCMPRE-112, 110, 113 * updated all the points of this ticket HCMPRE-120 (#466) Co-authored-by: rachana-egov * Bug Fixes, dev version release of packages * HCMPRE-119:: IRS Demo fixes (#468) * HCMPRE-119:: IRS Demo fixes * Removed unused code * updated closed button action to push closedhousehold tasks filter with last fix * updated validation for closed household name and fix error message size (#470) Co-authored-by: rachana-egov * Irs demo fix patch (#469) * HCMPRE-119:: IRS Demo fixes * Removed unused code * Edit Household if no project beneficiary fix * reverted hiding of digit search bar when closed filter is applied * status update based on last task status in household_overview.dart mapped administered success in beneficiary_card.dart moved getstatus to utils.dart * fixed offset increasing twice * HCMPRE-121:: Enter manual code fix and Search Beneficiary fixes (#471) * HCMPRE-121:: Enter manual code fix and Search Beneficiary fixes * Added date formats to constants * fixed offset increasing twice closed household distance fix emitting scanner state loading * dev version bump-up for registration and scanner * version updates for packages * View Household button added in delete individual success page, Search project beneficiary fix * added close button to close the filter and disabled the clear button … (#475) * added close button to close the filter and disabled the clear button unless something is selected * added validation for closed household head name same as individual * updated the condition for validation of closehousehold head --------- Co-authored-by: rachana-egov * View Household button added in delete individual success page, Search project beneficiary fix (#474) * Search beneficiary fix * Search beneficiary fix * Bloc dispose fix * Bloc dispose fix * Updated task based search for household * HCMPRE-177:: Metric Chart Integration and digit_dss package setup * HCMPRE-177:: Added Refresh Indicator for refreshing the dashboard * HCMPRE-177:: Table chart integration and Refresh logic update * Added code comments for digit_dss package * Added enums and constants * Resolved code comments and updated versions for packages * HCMPRE177:: Moved dashboard UI Config to MDMS * HCMPRE177:: Added dss_import script for digit_dss package * Resolved code comments * Updated dashboard Config * Added dashboard config search to try catch block * Resolved conflicts * published data_model and registration_delivery * Added Read me file and updated pubspec.yaml * Fetch and send attendees uuids of registers to dss filters * Added dss filters --------- Co-authored-by: Naveen Renati Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: rachana-egov Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> --- .../lib/app.dart | 5 ++ .../lib/blocs/project/project.dart | 23 +++++- packages/digit_dss/lib/blocs/dashboard.dart | 27 +++++++ .../lib/models/entities/dss_enums.dart | 4 + .../lib/models/entities/dss_enums.mapper.dart | 8 ++ packages/digit_dss/lib/utils/utils.dart | 13 +++- packages/digit_dss/pubspec.yaml | 1 + .../lib/data/repositories/local/task.dart | 74 ++++++++++--------- 8 files changed, 116 insertions(+), 39 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/app.dart b/apps/health_campaign_field_worker_app/lib/app.dart index d45a3335f..7d90ae5da 100644 --- a/apps/health_campaign_field_worker_app/lib/app.dart +++ b/apps/health_campaign_field_worker_app/lib/app.dart @@ -286,6 +286,11 @@ class MainApplicationState extends State isar: widget.isar, dashboardRemoteRepo: DashboardRemoteRepository(widget.client), + attendanceDataRepository: context.repository< + AttendanceRegisterModel, + AttendanceRegisterSearchModel>(), + individualDataRepository: context.repository< + IndividualModel, IndividualSearchModel>(), )), BlocProvider( create: (context) => FacilityBloc( diff --git a/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart b/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart index cf85a5848..dac3861a7 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart @@ -462,6 +462,26 @@ class ProjectBloc extends Bloc { if (dashboardConfig.isNotEmpty && dashboardConfig.first.enableDashboard == true && dashboardConfig.first.charts != null) { + final loggedInIndividualId = await localSecureStore.userIndividualId; + final registers = await attendanceLocalRepository.search( + AttendanceRegisterSearchModel( + staffId: loggedInIndividualId, + referenceId: event.model.id, + ), + ); + List attendeesIndividualIds = []; + registers.map((r) => + r.attendees?.where((a) => a.individualId != null).map((att) { + attendeesIndividualIds.add(att.individualId.toString()); + })); + final individuals = + await individualLocalRepository.search(IndividualSearchModel( + id: attendeesIndividualIds, + )); + final userUUIDList = individuals + .where((ind) => ind.userUuid != null) + .map((i) => i.userUuid.toString()) + .toList(); await processDashboardConfig( dashboardConfig.first.charts ?? [], startDate, @@ -474,10 +494,11 @@ class ProjectBloc extends Bloc { : '/dashboard-analytics/dashboard/getChartV2', //[TODO: To be added to MDMS Service registry envConfig.variables.tenantId, event.model.id, + userUUIDList, ); } } catch (e) { - print(e); + debugPrint(e.toString()); } final configResult = await mdmsRepository.searchAppConfig( envConfig.variables.mdmsApiPath, diff --git a/packages/digit_dss/lib/blocs/dashboard.dart b/packages/digit_dss/lib/blocs/dashboard.dart index 56836e85b..c75d43b80 100644 --- a/packages/digit_dss/lib/blocs/dashboard.dart +++ b/packages/digit_dss/lib/blocs/dashboard.dart @@ -1,9 +1,12 @@ import 'dart:async'; // Import the dart:async library for asynchronous operations +import 'package:attendance_management/attendance_management.dart'; +import 'package:attendance_management/utils/typedefs.dart'; import 'package:collection/collection.dart'; // Import the collection package for collection utilities import 'package:digit_components/models/digit_table_model.dart'; // Import the digit_table_model.dart file from the digit_components package import 'package:digit_components/theme/colors.dart'; // Import the colors.dart file from the digit_components package import 'package:digit_components/theme/digit_theme.dart'; // Import the digit_theme.dart file from the digit_components package +import 'package:digit_data_model/data_model.dart'; import 'package:digit_dss/digit_dss.dart'; // Import the digit_dss.dart file from the digit_dss package import 'package:flutter/cupertino.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; // Import the flutter_bloc package for state management @@ -19,11 +22,15 @@ class DashboardBloc extends Bloc { final Isar isar; // Isar database instance final DashboardRemoteRepository dashboardRemoteRepo; // Remote repository for dashboard data + final AttendanceDataRepository attendanceDataRepository; + final IndividualDataRepository individualDataRepository; DashboardBloc( super.initialState, { required this.isar, required this.dashboardRemoteRepo, + required this.attendanceDataRepository, + required this.individualDataRepository, }) { on(_handleSearch); // Register the _handleSearch event handler on(_handleRefresh); // Register the _handleRefresh event handler @@ -65,6 +72,25 @@ class DashboardBloc extends Bloc { .millisecondsSinceEpoch; // Get end date in milliseconds try { + final registers = await attendanceDataRepository.search( + AttendanceRegisterSearchModel( + staffId: AttendanceSingleton().loggedInIndividualId, + referenceId: AttendanceSingleton().projectId, + ), + ); + List attendeesIndividualIds = []; + registers.map((r) => + r.attendees?.where((a) => a.individualId != null).map((att) { + attendeesIndividualIds.add(att.individualId.toString()); + })); + final individuals = + await individualDataRepository.search(IndividualSearchModel( + id: attendeesIndividualIds, + )); + final userUUIDList = individuals + .where((ind) => ind.userUuid != null) + .map((i) => i.userUuid.toString()) + .toList(); await processDashboardConfig( dashboardConfig ?.where((chart) => @@ -80,6 +106,7 @@ class DashboardBloc extends Bloc { DashboardSingleton().actionPath, DashboardSingleton().tenantId, DashboardSingleton().projectId, + userUUIDList, ); // Process dashboard configuration add(DashboardEvent.handleSearch( diff --git a/packages/digit_dss/lib/models/entities/dss_enums.dart b/packages/digit_dss/lib/models/entities/dss_enums.dart index 555700a75..4c772c55a 100644 --- a/packages/digit_dss/lib/models/entities/dss_enums.dart +++ b/packages/digit_dss/lib/models/entities/dss_enums.dart @@ -27,4 +27,8 @@ enum DSSEnums { home, @MappableValue("row") row, + @MappableValue("uuid") + uuid, + @MappableValue("projectId") + projectId, } diff --git a/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart b/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart index 0aa51f071..6e591fd40 100644 --- a/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart +++ b/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart @@ -47,6 +47,10 @@ class DSSEnumsMapper extends EnumMapper { return DSSEnums.home; case "row": return DSSEnums.row; + case "uuid": + return DSSEnums.uuid; + case "projectId": + return DSSEnums.projectId; default: throw MapperException.unknownEnumValue(value); } @@ -77,6 +81,10 @@ class DSSEnumsMapper extends EnumMapper { return "home"; case DSSEnums.row: return "row"; + case DSSEnums.uuid: + return "uuid"; + case DSSEnums.projectId: + return "projectId"; } } } diff --git a/packages/digit_dss/lib/utils/utils.dart b/packages/digit_dss/lib/utils/utils.dart index f27d32f4a..08334cf1d 100644 --- a/packages/digit_dss/lib/utils/utils.dart +++ b/packages/digit_dss/lib/utils/utils.dart @@ -12,6 +12,7 @@ import 'package:isar/isar.dart'; import '../models/entities/dss_enums.dart'; const dashboardAPIPath = '/dashboard-analytics/dashboard/getChartV2'; + Future getIsConnected() async { try { final result = await InternetAddress.lookup('example.com'); @@ -108,8 +109,9 @@ Future processDashboardConfig( String actionPath, String tenantId, String projectId, + List userList, ) async { - if(dashboardConfig.isNotEmpty) { + if (dashboardConfig.isNotEmpty) { for (var entry in dashboardConfig) { String visualizationType = entry.chartType ?? ''; String visualizationCode = entry.name ?? ''; @@ -120,7 +122,10 @@ Future processDashboardConfig( aggregationRequestDto: AggregationRequestDto( visualizationType: visualizationType, visualizationCode: visualizationCode, - filters: {}, + filters: { + DSSEnums.uuid.toValue(): userList, + DSSEnums.projectId.toValue(): projectId + }, moduleLevel: "", queryType: "", requestDate: RequestDate( @@ -181,11 +186,15 @@ class DashboardSingleton { } String get tenantId => _tenantId ?? ''; + String get projectId => _projectId ?? ''; + String get appVersion => _appVersion ?? ''; + String get actionPath => _actionPath ?? dashboardAPIPath; //[TODO: To be added to MDMS Service registry ProjectModel? get selectedProject => _selectedProject; + DashboardConfigSchema? get dashboardConfig => _dashboardConfig; } diff --git a/packages/digit_dss/pubspec.yaml b/packages/digit_dss/pubspec.yaml index c2844f21e..019badb6a 100644 --- a/packages/digit_dss/pubspec.yaml +++ b/packages/digit_dss/pubspec.yaml @@ -26,6 +26,7 @@ dependencies: dio: ^5.4.2+1 isar: ^3.0.5 isar_flutter_libs: ^3.0.5 + attendance_management: ^1.0.1 dev_dependencies: flutter_test: diff --git a/packages/registration_delivery/lib/data/repositories/local/task.dart b/packages/registration_delivery/lib/data/repositories/local/task.dart index 3aab80db2..a9a23fa42 100644 --- a/packages/registration_delivery/lib/data/repositories/local/task.dart +++ b/packages/registration_delivery/lib/data/repositories/local/task.dart @@ -362,49 +362,51 @@ class TaskLocalRepository extends LocalRepository { TaskModel entity, { bool createOpLog = true, }) async { - final taskCompanion = entity.companion; - - final addressCompanion = entity.address - ?.copyWith( - relatedClientReferenceId: entity.clientReferenceId, - auditDetails: entity.auditDetails, - clientAuditDetails: entity.clientAuditDetails, - ) - .companion; - - final resourcesCompanions = entity.resources?.map((e) { - return e - .copyWith( - clientReferenceId: e.clientReferenceId, - taskclientReferenceId: entity.clientReferenceId, - ) - .companion; - }).toList() ?? - []; + return retryLocalCallOperation(() async { + final taskCompanion = entity.companion; - await sql.batch((batch) { - batch.update( - sql.task, - taskCompanion, - where: (table) => table.clientReferenceId.equals( - entity.clientReferenceId, - ), - ); + final addressCompanion = entity.address + ?.copyWith( + relatedClientReferenceId: entity.clientReferenceId, + auditDetails: entity.auditDetails, + clientAuditDetails: entity.clientAuditDetails, + ) + .companion; - if (addressCompanion != null) { + final resourcesCompanions = entity.resources?.map((e) { + return e + .copyWith( + clientReferenceId: e.clientReferenceId, + taskclientReferenceId: entity.clientReferenceId, + ) + .companion; + }).toList() ?? + []; + + await sql.batch((batch) { batch.update( - sql.address, - addressCompanion, - where: (table) => table.relatedClientReferenceId.equals( - addressCompanion.relatedClientReferenceId.value!, + sql.task, + taskCompanion, + where: (table) => table.clientReferenceId.equals( + entity.clientReferenceId, ), ); - } - batch.insertAllOnConflictUpdate(sql.taskResource, resourcesCompanions); - }); + if (addressCompanion != null) { + batch.update( + sql.address, + addressCompanion, + where: (table) => table.relatedClientReferenceId.equals( + addressCompanion.relatedClientReferenceId.value!, + ), + ); + } + + batch.insertAllOnConflictUpdate(sql.taskResource, resourcesCompanions); + }); - await super.update(entity, createOpLog: createOpLog); + await super.update(entity, createOpLog: createOpLog); + }); } @override From caa1c5f0c0c0d644c1f26593f381dec153fe0ba7 Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Tue, 6 Aug 2024 22:14:03 +0530 Subject: [PATCH 069/241] Task update rather than creating new, updated filter popup loading (#493) * Update closed_household_details.dart (#482) * Fixed pagination refresh issue (#481) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments --------- Co-authored-by: rachana-egov * implemented count for filter search, added todo for combination search count * Fixed count TODO: search with task status filter * Fixed search with task status filter Removed delay in delivery_summary_page.dart * added code comments * HCMPRE-165 issues (#484) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments * HCMPRE-162:: Reload issue fix for closed household and not registered * HCMPRE-165: issues fixes * updated reasons for refusals --------- Co-authored-by: rachana-egov Co-authored-by: Ramkrishna-egov * Updated publock * Added a check to avoid multiple leftJoin for projectBeneficiary - fix for multiple left join error * Resolved code comments * HCMPRE220:: Household overview state update on pushing to Registration Wrapper * update task state if task is already present * updated selection box to update on initial selection change and updated delivery comment code * remove changes from beneficiary * task update * HCMPRE-220:: SMC Not registered flow reload fix,and closed household Not delivered status fix * added loader for filter search * Added name of user to additional details in stock and delivery record * updated delivery intervention * check summary page condition for edit flow * fixed task update for delivery intervention * fixed household detail page --------- Co-authored-by: rachana-egov Co-authored-by: Naveen Renati Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> --- .../lib/pages/home.dart | 2 + .../lib/utils/extensions/context_utility.dart | 15 + .../lib/widgets/atoms/selection_card.dart | 20 ++ .../lib/inventory_management.dart | 3 +- .../lib/inventory_management.init.dart | 26 +- .../lib/models/entities/inventory_enums.dart | 24 ++ .../entities/inventory_enums.mapper.dart | 79 +++++ .../lib/pages/record_stock/stock_details.dart | 14 +- .../inventory_management/lib/utils/utils.dart | 17 +- .../beneficiary_registration.dart | 11 +- .../beneficiary_registration.freezed.dart | 146 +++++++--- .../deliver_intervention.dart | 34 ++- .../entities/registration_delivery_enums.dart | 12 + .../registration_delivery_enums.mapper.dart | 56 ++++ .../beneficiary/deliver_intervention.dart | 18 +- .../beneficiary/delivery_summary_page.dart | 6 +- .../pages/beneficiary/household_overview.dart | 14 +- .../pages/beneficiary/refused_delivery.dart | 104 ++++--- .../beneficiary_registration_wrapper.dart | 90 ++++-- .../house_details.dart | 269 +++++++++--------- .../household_details.dart | 38 ++- .../household_location.dart | 1 + .../lib/pages/search_beneficiary.dart | 62 ++-- .../lib/registration_delivery.dart | 1 + .../lib/registration_delivery.init.dart | 30 +- .../lib/utils/i18_key_constants.dart | 3 + .../lib/utils/utils.dart | 5 +- .../widgets/status_filter/status_filter.dart | 126 ++++---- 28 files changed, 830 insertions(+), 396 deletions(-) create mode 100644 packages/inventory_management/lib/models/entities/inventory_enums.dart create mode 100644 packages/inventory_management/lib/models/entities/inventory_enums.mapper.dart create mode 100644 packages/registration_delivery/lib/models/entities/registration_delivery_enums.dart create mode 100644 packages/registration_delivery/lib/models/entities/registration_delivery_enums.mapper.dart diff --git a/apps/health_campaign_field_worker_app/lib/pages/home.dart b/apps/health_campaign_field_worker_app/lib/pages/home.dart index 8f7d81b75..1dffb595d 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/home.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/home.dart @@ -655,6 +655,7 @@ void setPackagesSingleton(BuildContext context) { loadLocalization(context, appConfiguration); // INFO : Need to add singleton of package Here RegistrationDeliverySingleton().setInitialData( + loggedInUser: context.loggedInUserModel, loggedInUserUuid: context.loggedInUserUuid, maxRadius: appConfiguration.maxRadius!, projectId: context.projectId, @@ -739,6 +740,7 @@ void setPackagesSingleton(BuildContext context) { ) .toList() .isNotEmpty, + loggedInUser: context.loggedInUserModel, projectId: context.projectId, loggedInUserUuid: context.loggedInUserUuid, transportTypes: appConfiguration.transportTypes diff --git a/apps/health_campaign_field_worker_app/lib/utils/extensions/context_utility.dart b/apps/health_campaign_field_worker_app/lib/utils/extensions/context_utility.dart index 916f2cc61..74935a44d 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/extensions/context_utility.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/extensions/context_utility.dart @@ -147,6 +147,21 @@ extension ContextUtilityExtensions on BuildContext { return individualUUID; } + UserModel? get loggedInUserModel { + final userRequestModel = loggedInUser; + final userModel = UserModel( + userName: userRequestModel.userName, + name: userRequestModel.name, + uuid: userRequestModel.uuid, + mobileNumber: userRequestModel.mobileNumber, + gender: userRequestModel.gender, + active: userRequestModel.active, + tenantId: userRequestModel.tenantId, + ); + + return userModel; + } + String get loggedInUserUuid => loggedInUser.uuid; UserRequestModel get loggedInUser { diff --git a/packages/digit_components/lib/widgets/atoms/selection_card.dart b/packages/digit_components/lib/widgets/atoms/selection_card.dart index 045336e84..af4d81244 100644 --- a/packages/digit_components/lib/widgets/atoms/selection_card.dart +++ b/packages/digit_components/lib/widgets/atoms/selection_card.dart @@ -49,6 +49,26 @@ class _SelectionBoxState extends State> { } } + @override + void didChangeDependencies() { + super.didChangeDependencies(); + if (widget.equalWidthOptions) { + WidgetsBinding.instance.addPostFrameCallback((_) { + _calculateMaxOptionWidth(); + }); + } + } + @override + void didUpdateWidget(covariant SelectionBox oldWidget) { + super.didUpdateWidget(oldWidget); + if (widget.initialSelection != oldWidget.initialSelection) { + setState(() { + _selectedOptions.clear(); + _selectedOptions.addAll(widget.initialSelection ?? []); + }); + } + } + void _calculateMaxOptionWidth() { double maxWidth = 0; final textTheme = Theme.of(context).textTheme; diff --git a/packages/inventory_management/lib/inventory_management.dart b/packages/inventory_management/lib/inventory_management.dart index d7b229509..00fef8f19 100644 --- a/packages/inventory_management/lib/inventory_management.dart +++ b/packages/inventory_management/lib/inventory_management.dart @@ -12,6 +12,8 @@ export 'data/repositories/local/stock_reconciliation.dart'; export 'data/repositories/oplog/oplog.dart'; export 'data/repositories/remote/stock.dart'; export 'data/repositories/remote/stock_reconciliation.dart'; +export 'inventory_management.init.dart'; +export 'models/entities/inventory_enums.dart'; export 'models/entities/inventory_transport_type.dart'; export 'models/entities/stock.dart'; export 'models/entities/stock_reconciliation.dart'; @@ -28,4 +30,3 @@ export 'pages/reports/report_selection.dart'; export 'pages/stock_reconciliation/stock_reconciliation.dart'; export 'router/inventory_router.dart'; export 'utils/utils.dart'; -export 'inventory_management.init.dart'; diff --git a/packages/inventory_management/lib/inventory_management.init.dart b/packages/inventory_management/lib/inventory_management.init.dart index dac254b1d..de275eed8 100644 --- a/packages/inventory_management/lib/inventory_management.init.dart +++ b/packages/inventory_management/lib/inventory_management.init.dart @@ -3,18 +3,20 @@ // ignore_for_file: type=lint // ignore_for_file: unused_element -import 'models/entities/stock.dart' as p0; -import 'models/entities/stock_reconciliation.dart' as p1; -import 'models/entities/transaction_reason.dart' as p2; -import 'models/entities/transaction_type.dart' as p3; +import 'models/entities/inventory_enums.dart' as p0; +import 'models/entities/stock.dart' as p1; +import 'models/entities/stock_reconciliation.dart' as p2; +import 'models/entities/transaction_reason.dart' as p3; +import 'models/entities/transaction_type.dart' as p4; void initializeMappers() { - p0.StockSearchModelMapper.ensureInitialized(); - p0.StockModelMapper.ensureInitialized(); - p0.StockAdditionalFieldsMapper.ensureInitialized(); - p1.StockReconciliationSearchModelMapper.ensureInitialized(); - p1.StockReconciliationModelMapper.ensureInitialized(); - p1.StockReconciliationAdditionalFieldsMapper.ensureInitialized(); - p2.TransactionReasonMapper.ensureInitialized(); - p3.TransactionTypeMapper.ensureInitialized(); + p0.InventoryManagementEnumsMapper.ensureInitialized(); + p1.StockSearchModelMapper.ensureInitialized(); + p1.StockModelMapper.ensureInitialized(); + p1.StockAdditionalFieldsMapper.ensureInitialized(); + p2.StockReconciliationSearchModelMapper.ensureInitialized(); + p2.StockReconciliationModelMapper.ensureInitialized(); + p2.StockReconciliationAdditionalFieldsMapper.ensureInitialized(); + p3.TransactionReasonMapper.ensureInitialized(); + p4.TransactionTypeMapper.ensureInitialized(); } diff --git a/packages/inventory_management/lib/models/entities/inventory_enums.dart b/packages/inventory_management/lib/models/entities/inventory_enums.dart new file mode 100644 index 000000000..088580334 --- /dev/null +++ b/packages/inventory_management/lib/models/entities/inventory_enums.dart @@ -0,0 +1,24 @@ +// Generated using mason. Do not modify by hand +import 'package:dart_mappable/dart_mappable.dart'; + +part 'inventory_enums.mapper.dart'; + +@MappableEnum(caseStyle: CaseStyle.upperCase) +enum InventoryManagementEnums { + @MappableValue("waybill_quantity") + waybill_quantity, + @MappableValue("vehicle_number") + vehicle_number, + @MappableValue("comments") + comments, + @MappableValue("deliveryTeam") + deliveryTeam, + @MappableValue("lat") + lat, + @MappableValue("lng") + lng, + @MappableValue("name") + name, + @MappableValue("userName") + userName, +} diff --git a/packages/inventory_management/lib/models/entities/inventory_enums.mapper.dart b/packages/inventory_management/lib/models/entities/inventory_enums.mapper.dart new file mode 100644 index 000000000..30e88ba7d --- /dev/null +++ b/packages/inventory_management/lib/models/entities/inventory_enums.mapper.dart @@ -0,0 +1,79 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter + +part of 'inventory_enums.dart'; + +class InventoryManagementEnumsMapper + extends EnumMapper { + InventoryManagementEnumsMapper._(); + + static InventoryManagementEnumsMapper? _instance; + static InventoryManagementEnumsMapper ensureInitialized() { + if (_instance == null) { + MapperContainer.globals + .use(_instance = InventoryManagementEnumsMapper._()); + } + return _instance!; + } + + static InventoryManagementEnums fromValue(dynamic value) { + ensureInitialized(); + return MapperContainer.globals.fromValue(value); + } + + @override + InventoryManagementEnums decode(dynamic value) { + switch (value) { + case "waybill_quantity": + return InventoryManagementEnums.waybill_quantity; + case "vehicle_number": + return InventoryManagementEnums.vehicle_number; + case "comments": + return InventoryManagementEnums.comments; + case "deliveryTeam": + return InventoryManagementEnums.deliveryTeam; + case "lat": + return InventoryManagementEnums.lat; + case "lng": + return InventoryManagementEnums.lng; + case "name": + return InventoryManagementEnums.name; + case "userName": + return InventoryManagementEnums.userName; + default: + throw MapperException.unknownEnumValue(value); + } + } + + @override + dynamic encode(InventoryManagementEnums self) { + switch (self) { + case InventoryManagementEnums.waybill_quantity: + return "waybill_quantity"; + case InventoryManagementEnums.vehicle_number: + return "vehicle_number"; + case InventoryManagementEnums.comments: + return "comments"; + case InventoryManagementEnums.deliveryTeam: + return "deliveryTeam"; + case InventoryManagementEnums.lat: + return "lat"; + case InventoryManagementEnums.lng: + return "lng"; + case InventoryManagementEnums.name: + return "name"; + case InventoryManagementEnums.userName: + return "userName"; + } + } +} + +extension InventoryManagementEnumsMapperExtension on InventoryManagementEnums { + dynamic toValue() { + InventoryManagementEnumsMapper.ensureInitialized(); + return MapperContainer.globals.toValue(this); + } +} diff --git a/packages/inventory_management/lib/pages/record_stock/stock_details.dart b/packages/inventory_management/lib/pages/record_stock/stock_details.dart index 67037e2b6..66c1bcae9 100644 --- a/packages/inventory_management/lib/pages/record_stock/stock_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/stock_details.dart @@ -8,19 +8,15 @@ import 'package:digit_scanner/pages/qr_scanner.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:gs1_barcode_parser/gs1_barcode_parser.dart'; +import 'package:inventory_management/inventory_management.dart'; import 'package:inventory_management/router/inventory_router.gm.dart'; import 'package:inventory_management/utils/extensions/extensions.dart'; import 'package:reactive_forms/reactive_forms.dart'; import '../../../utils/i18_key_constants.dart' as i18; -import '../../../utils/utils.dart'; import '../../../widgets/localized.dart'; import '../../blocs/product_variant.dart'; import '../../blocs/record_stock.dart'; -import '../../models/entities/inventory_transport_type.dart'; -import '../../models/entities/stock.dart'; -import '../../models/entities/transaction_reason.dart'; -import '../../models/entities/transaction_type.dart'; import '../../widgets/back_navigation_help_header.dart'; @RoutePage() @@ -457,6 +453,14 @@ class StockDetailsPageState extends LocalizedState { ? StockAdditionalFields( version: 1, fields: [ + AdditionalField( + InventoryManagementEnums + .name + .toValue(), + InventorySingleton() + .loggedInUser + ?.name, + ), if (waybillQuantity != null && waybillQuantity diff --git a/packages/inventory_management/lib/utils/utils.dart b/packages/inventory_management/lib/utils/utils.dart index a6f676f55..ffc04f933 100644 --- a/packages/inventory_management/lib/utils/utils.dart +++ b/packages/inventory_management/lib/utils/utils.dart @@ -42,6 +42,7 @@ class InventorySingleton { // Various properties related to the inventory. String _projectId = ''; + UserModel? _loggedInUser; String? _loggedInUserUuid = ''; String? _boundaryName = ''; String? _tenantId = ''; @@ -52,18 +53,21 @@ class InventorySingleton { .offlineFirst; // Default to offline first persistence configuration // Sets the initial data for the inventory. - void setInitialData( - {String? loggedInUserUuid, - required String projectId, - required bool isDistributor, - required bool isWareHouseMgr, - List? transportTypes}) { + void setInitialData({ + String? loggedInUserUuid, + required String projectId, + required bool isDistributor, + required bool isWareHouseMgr, + List? transportTypes, + UserModel? loggedInUser, + }) { _projectId = projectId; _loggedInUserUuid = loggedInUserUuid; _transportType = transportTypes; _isDistributor = isDistributor; _isWareHouseMgr = isWareHouseMgr; _transportType = transportTypes; + _loggedInUser = loggedInUser; } void setPersistenceConfiguration(PersistenceConfiguration configuration) { @@ -87,4 +91,5 @@ class InventorySingleton { get transportType => _transportType; get tenantId => _tenantId; get persistenceConfiguration => _persistenceConfiguration; + UserModel? get loggedInUser => _loggedInUser; } diff --git a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart index 62480673c..1e6aedee5 100644 --- a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart +++ b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart @@ -431,7 +431,10 @@ class BeneficiaryRegistrationBloc ); final projectBeneficiary = await projectBeneficiaryRepository.search( ProjectBeneficiarySearchModel( - beneficiaryClientReferenceId: [event.household.clientReferenceId], + beneficiaryClientReferenceId: + beneficiaryType == BeneficiaryType.individual + ? [value.individualModel.first.clientReferenceId] + : [event.household.clientReferenceId], ), ); @@ -504,6 +507,8 @@ class BeneficiaryRegistrationBloc emit( BeneficiaryRegistrationPersistedState( householdModel: value.householdModel, + isEdit : true, + ), ); } catch (error) { @@ -549,7 +554,7 @@ class BeneficiaryRegistrationBloc } var task = await taskDataRepository.search(TaskSearchModel( projectBeneficiaryClientReferenceId: - projectBeneficiary.map((e) => e.clientReferenceId).toList(), + projectBeneficiary.map((e) => e.clientReferenceId).toList(), )); if (task.isNotEmpty) { @@ -751,6 +756,7 @@ class BeneficiaryRegistrationState with _$BeneficiaryRegistrationState { required DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, @Default(false) bool loading, + IndividualModel? headOfHousehold, }) = BeneficiaryRegistrationEditHouseholdState; const factory BeneficiaryRegistrationState.editIndividual({ @@ -775,6 +781,7 @@ class BeneficiaryRegistrationState with _$BeneficiaryRegistrationState { DateTime? registrationDate, AddressModel? addressModel, @Default(false) bool loading, + @Default(false) bool isEdit, @Default(false) bool isHeadOfHousehold, }) = BeneficiaryRegistrationPersistedState; diff --git a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart index a6ec3b32e..20219bfe7 100644 --- a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart +++ b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart @@ -3277,7 +3277,8 @@ mixin _$BeneficiaryRegistrationState { List individualModel, DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading) + bool loading, + IndividualModel? headOfHousehold) editHousehold, required TResult Function( HouseholdModel householdModel, @@ -3297,6 +3298,7 @@ mixin _$BeneficiaryRegistrationState { DateTime? registrationDate, AddressModel? addressModel, bool loading, + bool isEdit, bool isHeadOfHousehold) persisted, required TResult Function( @@ -3329,7 +3331,8 @@ mixin _$BeneficiaryRegistrationState { List individualModel, DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading)? + bool loading, + IndividualModel? headOfHousehold)? editHousehold, TResult? Function( HouseholdModel householdModel, @@ -3349,6 +3352,7 @@ mixin _$BeneficiaryRegistrationState { DateTime? registrationDate, AddressModel? addressModel, bool loading, + bool isEdit, bool isHeadOfHousehold)? persisted, TResult? Function( @@ -3381,7 +3385,8 @@ mixin _$BeneficiaryRegistrationState { List individualModel, DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading)? + bool loading, + IndividualModel? headOfHousehold)? editHousehold, TResult Function( HouseholdModel householdModel, @@ -3401,6 +3406,7 @@ mixin _$BeneficiaryRegistrationState { DateTime? registrationDate, AddressModel? addressModel, bool loading, + bool isEdit, bool isHeadOfHousehold)? persisted, TResult Function( @@ -3688,7 +3694,8 @@ class _$BeneficiaryRegistrationCreateStateImpl List individualModel, DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading) + bool loading, + IndividualModel? headOfHousehold) editHousehold, required TResult Function( HouseholdModel householdModel, @@ -3708,6 +3715,7 @@ class _$BeneficiaryRegistrationCreateStateImpl DateTime? registrationDate, AddressModel? addressModel, bool loading, + bool isEdit, bool isHeadOfHousehold) persisted, required TResult Function( @@ -3751,7 +3759,8 @@ class _$BeneficiaryRegistrationCreateStateImpl List individualModel, DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading)? + bool loading, + IndividualModel? headOfHousehold)? editHousehold, TResult? Function( HouseholdModel householdModel, @@ -3771,6 +3780,7 @@ class _$BeneficiaryRegistrationCreateStateImpl DateTime? registrationDate, AddressModel? addressModel, bool loading, + bool isEdit, bool isHeadOfHousehold)? persisted, TResult? Function( @@ -3814,7 +3824,8 @@ class _$BeneficiaryRegistrationCreateStateImpl List individualModel, DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading)? + bool loading, + IndividualModel? headOfHousehold)? editHousehold, TResult Function( HouseholdModel householdModel, @@ -3834,6 +3845,7 @@ class _$BeneficiaryRegistrationCreateStateImpl DateTime? registrationDate, AddressModel? addressModel, bool loading, + bool isEdit, bool isHeadOfHousehold)? persisted, TResult Function( @@ -3960,7 +3972,8 @@ abstract class _$$BeneficiaryRegistrationEditHouseholdStateImplCopyWith<$Res> List individualModel, DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading}); + bool loading, + IndividualModel? headOfHousehold}); } /// @nodoc @@ -3982,6 +3995,7 @@ class __$$BeneficiaryRegistrationEditHouseholdStateImplCopyWithImpl<$Res> Object? registrationDate = null, Object? projectBeneficiaryModel = freezed, Object? loading = null, + Object? headOfHousehold = freezed, }) { return _then(_$BeneficiaryRegistrationEditHouseholdStateImpl( addressModel: null == addressModel @@ -4008,6 +4022,10 @@ class __$$BeneficiaryRegistrationEditHouseholdStateImplCopyWithImpl<$Res> ? _value.loading : loading // ignore: cast_nullable_to_non_nullable as bool, + headOfHousehold: freezed == headOfHousehold + ? _value.headOfHousehold + : headOfHousehold // ignore: cast_nullable_to_non_nullable + as IndividualModel?, )); } } @@ -4022,7 +4040,8 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl required final List individualModel, required this.registrationDate, this.projectBeneficiaryModel, - this.loading = false}) + this.loading = false, + this.headOfHousehold}) : _individualModel = individualModel; @override @@ -4044,10 +4063,12 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl @override @JsonKey() final bool loading; + @override + final IndividualModel? headOfHousehold; @override String toString() { - return 'BeneficiaryRegistrationState.editHousehold(addressModel: $addressModel, householdModel: $householdModel, individualModel: $individualModel, registrationDate: $registrationDate, projectBeneficiaryModel: $projectBeneficiaryModel, loading: $loading)'; + return 'BeneficiaryRegistrationState.editHousehold(addressModel: $addressModel, householdModel: $householdModel, individualModel: $individualModel, registrationDate: $registrationDate, projectBeneficiaryModel: $projectBeneficiaryModel, loading: $loading, headOfHousehold: $headOfHousehold)'; } @override @@ -4066,7 +4087,9 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl (identical( other.projectBeneficiaryModel, projectBeneficiaryModel) || other.projectBeneficiaryModel == projectBeneficiaryModel) && - (identical(other.loading, loading) || other.loading == loading)); + (identical(other.loading, loading) || other.loading == loading) && + (identical(other.headOfHousehold, headOfHousehold) || + other.headOfHousehold == headOfHousehold)); } @override @@ -4077,7 +4100,8 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl const DeepCollectionEquality().hash(_individualModel), registrationDate, projectBeneficiaryModel, - loading); + loading, + headOfHousehold); @JsonKey(ignore: true) @override @@ -4108,7 +4132,8 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl List individualModel, DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading) + bool loading, + IndividualModel? headOfHousehold) editHousehold, required TResult Function( HouseholdModel householdModel, @@ -4128,6 +4153,7 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl DateTime? registrationDate, AddressModel? addressModel, bool loading, + bool isEdit, bool isHeadOfHousehold) persisted, required TResult Function( @@ -4142,7 +4168,7 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl summary, }) { return editHousehold(addressModel, householdModel, individualModel, - registrationDate, projectBeneficiaryModel, loading); + registrationDate, projectBeneficiaryModel, loading, headOfHousehold); } @override @@ -4164,7 +4190,8 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl List individualModel, DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading)? + bool loading, + IndividualModel? headOfHousehold)? editHousehold, TResult? Function( HouseholdModel householdModel, @@ -4184,6 +4211,7 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl DateTime? registrationDate, AddressModel? addressModel, bool loading, + bool isEdit, bool isHeadOfHousehold)? persisted, TResult? Function( @@ -4198,7 +4226,7 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl summary, }) { return editHousehold?.call(addressModel, householdModel, individualModel, - registrationDate, projectBeneficiaryModel, loading); + registrationDate, projectBeneficiaryModel, loading, headOfHousehold); } @override @@ -4220,7 +4248,8 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl List individualModel, DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading)? + bool loading, + IndividualModel? headOfHousehold)? editHousehold, TResult Function( HouseholdModel householdModel, @@ -4240,6 +4269,7 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl DateTime? registrationDate, AddressModel? addressModel, bool loading, + bool isEdit, bool isHeadOfHousehold)? persisted, TResult Function( @@ -4256,7 +4286,7 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl }) { if (editHousehold != null) { return editHousehold(addressModel, householdModel, individualModel, - registrationDate, projectBeneficiaryModel, loading); + registrationDate, projectBeneficiaryModel, loading, headOfHousehold); } return orElse(); } @@ -4317,12 +4347,14 @@ class _$BeneficiaryRegistrationEditHouseholdStateImpl abstract class BeneficiaryRegistrationEditHouseholdState implements BeneficiaryRegistrationState { const factory BeneficiaryRegistrationEditHouseholdState( - {required final AddressModel addressModel, - required final HouseholdModel householdModel, - required final List individualModel, - required final DateTime registrationDate, - final ProjectBeneficiaryModel? projectBeneficiaryModel, - final bool loading}) = _$BeneficiaryRegistrationEditHouseholdStateImpl; + {required final AddressModel addressModel, + required final HouseholdModel householdModel, + required final List individualModel, + required final DateTime registrationDate, + final ProjectBeneficiaryModel? projectBeneficiaryModel, + final bool loading, + final IndividualModel? headOfHousehold}) = + _$BeneficiaryRegistrationEditHouseholdStateImpl; @override AddressModel get addressModel; @@ -4333,6 +4365,7 @@ abstract class BeneficiaryRegistrationEditHouseholdState ProjectBeneficiaryModel? get projectBeneficiaryModel; @override bool get loading; + IndividualModel? get headOfHousehold; @override @JsonKey(ignore: true) _$$BeneficiaryRegistrationEditHouseholdStateImplCopyWith< @@ -4480,7 +4513,8 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl List individualModel, DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading) + bool loading, + IndividualModel? headOfHousehold) editHousehold, required TResult Function( HouseholdModel householdModel, @@ -4500,6 +4534,7 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl DateTime? registrationDate, AddressModel? addressModel, bool loading, + bool isEdit, bool isHeadOfHousehold) persisted, required TResult Function( @@ -4536,7 +4571,8 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl List individualModel, DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading)? + bool loading, + IndividualModel? headOfHousehold)? editHousehold, TResult? Function( HouseholdModel householdModel, @@ -4556,6 +4592,7 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl DateTime? registrationDate, AddressModel? addressModel, bool loading, + bool isEdit, bool isHeadOfHousehold)? persisted, TResult? Function( @@ -4592,7 +4629,8 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl List individualModel, DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading)? + bool loading, + IndividualModel? headOfHousehold)? editHousehold, TResult Function( HouseholdModel householdModel, @@ -4612,6 +4650,7 @@ class _$BeneficiaryRegistrationEditIndividualStateImpl DateTime? registrationDate, AddressModel? addressModel, bool loading, + bool isEdit, bool isHeadOfHousehold)? persisted, TResult Function( @@ -4822,7 +4861,8 @@ class _$BeneficiaryRegistrationAddMemberStateImpl List individualModel, DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading) + bool loading, + IndividualModel? headOfHousehold) editHousehold, required TResult Function( HouseholdModel householdModel, @@ -4842,6 +4882,7 @@ class _$BeneficiaryRegistrationAddMemberStateImpl DateTime? registrationDate, AddressModel? addressModel, bool loading, + bool isEdit, bool isHeadOfHousehold) persisted, required TResult Function( @@ -4877,7 +4918,8 @@ class _$BeneficiaryRegistrationAddMemberStateImpl List individualModel, DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading)? + bool loading, + IndividualModel? headOfHousehold)? editHousehold, TResult? Function( HouseholdModel householdModel, @@ -4897,6 +4939,7 @@ class _$BeneficiaryRegistrationAddMemberStateImpl DateTime? registrationDate, AddressModel? addressModel, bool loading, + bool isEdit, bool isHeadOfHousehold)? persisted, TResult? Function( @@ -4932,7 +4975,8 @@ class _$BeneficiaryRegistrationAddMemberStateImpl List individualModel, DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading)? + bool loading, + IndividualModel? headOfHousehold)? editHousehold, TResult Function( HouseholdModel householdModel, @@ -4952,6 +4996,7 @@ class _$BeneficiaryRegistrationAddMemberStateImpl DateTime? registrationDate, AddressModel? addressModel, bool loading, + bool isEdit, bool isHeadOfHousehold)? persisted, TResult Function( @@ -5062,6 +5107,7 @@ abstract class _$$BeneficiaryRegistrationPersistedStateImplCopyWith<$Res> DateTime? registrationDate, AddressModel? addressModel, bool loading, + bool isEdit, bool isHeadOfHousehold}); } @@ -5085,6 +5131,7 @@ class __$$BeneficiaryRegistrationPersistedStateImplCopyWithImpl<$Res> Object? registrationDate = freezed, Object? addressModel = freezed, Object? loading = null, + Object? isEdit = null, Object? isHeadOfHousehold = null, }) { return _then(_$BeneficiaryRegistrationPersistedStateImpl( @@ -5116,6 +5163,10 @@ class __$$BeneficiaryRegistrationPersistedStateImplCopyWithImpl<$Res> ? _value.loading : loading // ignore: cast_nullable_to_non_nullable as bool, + isEdit: null == isEdit + ? _value.isEdit + : isEdit // ignore: cast_nullable_to_non_nullable + as bool, isHeadOfHousehold: null == isHeadOfHousehold ? _value.isHeadOfHousehold : isHeadOfHousehold // ignore: cast_nullable_to_non_nullable @@ -5136,6 +5187,7 @@ class _$BeneficiaryRegistrationPersistedStateImpl this.registrationDate, this.addressModel, this.loading = false, + this.isEdit = false, this.isHeadOfHousehold = false}); @override @@ -5156,11 +5208,14 @@ class _$BeneficiaryRegistrationPersistedStateImpl final bool loading; @override @JsonKey() + final bool isEdit; + @override + @JsonKey() final bool isHeadOfHousehold; @override String toString() { - return 'BeneficiaryRegistrationState.persisted(navigateToRoot: $navigateToRoot, householdModel: $householdModel, individualModel: $individualModel, projectBeneficiaryModel: $projectBeneficiaryModel, registrationDate: $registrationDate, addressModel: $addressModel, loading: $loading, isHeadOfHousehold: $isHeadOfHousehold)'; + return 'BeneficiaryRegistrationState.persisted(navigateToRoot: $navigateToRoot, householdModel: $householdModel, individualModel: $individualModel, projectBeneficiaryModel: $projectBeneficiaryModel, registrationDate: $registrationDate, addressModel: $addressModel, loading: $loading, isEdit: $isEdit, isHeadOfHousehold: $isHeadOfHousehold)'; } @override @@ -5182,6 +5237,7 @@ class _$BeneficiaryRegistrationPersistedStateImpl (identical(other.addressModel, addressModel) || other.addressModel == addressModel) && (identical(other.loading, loading) || other.loading == loading) && + (identical(other.isEdit, isEdit) || other.isEdit == isEdit) && (identical(other.isHeadOfHousehold, isHeadOfHousehold) || other.isHeadOfHousehold == isHeadOfHousehold)); } @@ -5196,6 +5252,7 @@ class _$BeneficiaryRegistrationPersistedStateImpl registrationDate, addressModel, loading, + isEdit, isHeadOfHousehold); @JsonKey(ignore: true) @@ -5225,7 +5282,8 @@ class _$BeneficiaryRegistrationPersistedStateImpl List individualModel, DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading) + bool loading, + IndividualModel? headOfHousehold) editHousehold, required TResult Function( HouseholdModel householdModel, @@ -5245,6 +5303,7 @@ class _$BeneficiaryRegistrationPersistedStateImpl DateTime? registrationDate, AddressModel? addressModel, bool loading, + bool isEdit, bool isHeadOfHousehold) persisted, required TResult Function( @@ -5266,6 +5325,7 @@ class _$BeneficiaryRegistrationPersistedStateImpl registrationDate, addressModel, loading, + isEdit, isHeadOfHousehold); } @@ -5288,7 +5348,8 @@ class _$BeneficiaryRegistrationPersistedStateImpl List individualModel, DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading)? + bool loading, + IndividualModel? headOfHousehold)? editHousehold, TResult? Function( HouseholdModel householdModel, @@ -5308,6 +5369,7 @@ class _$BeneficiaryRegistrationPersistedStateImpl DateTime? registrationDate, AddressModel? addressModel, bool loading, + bool isEdit, bool isHeadOfHousehold)? persisted, TResult? Function( @@ -5329,6 +5391,7 @@ class _$BeneficiaryRegistrationPersistedStateImpl registrationDate, addressModel, loading, + isEdit, isHeadOfHousehold); } @@ -5351,7 +5414,8 @@ class _$BeneficiaryRegistrationPersistedStateImpl List individualModel, DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading)? + bool loading, + IndividualModel? headOfHousehold)? editHousehold, TResult Function( HouseholdModel householdModel, @@ -5371,6 +5435,7 @@ class _$BeneficiaryRegistrationPersistedStateImpl DateTime? registrationDate, AddressModel? addressModel, bool loading, + bool isEdit, bool isHeadOfHousehold)? persisted, TResult Function( @@ -5394,6 +5459,7 @@ class _$BeneficiaryRegistrationPersistedStateImpl registrationDate, addressModel, loading, + isEdit, isHeadOfHousehold); } return orElse(); @@ -5462,6 +5528,7 @@ abstract class BeneficiaryRegistrationPersistedState final DateTime? registrationDate, final AddressModel? addressModel, final bool loading, + final bool isEdit, final bool isHeadOfHousehold}) = _$BeneficiaryRegistrationPersistedStateImpl; @@ -5475,6 +5542,7 @@ abstract class BeneficiaryRegistrationPersistedState AddressModel? get addressModel; @override bool get loading; + bool get isEdit; bool get isHeadOfHousehold; @override @JsonKey(ignore: true) @@ -5663,7 +5731,8 @@ class _$BeneficiaryRegistrationSummaryStateImpl List individualModel, DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading) + bool loading, + IndividualModel? headOfHousehold) editHousehold, required TResult Function( HouseholdModel householdModel, @@ -5683,6 +5752,7 @@ class _$BeneficiaryRegistrationSummaryStateImpl DateTime? registrationDate, AddressModel? addressModel, bool loading, + bool isEdit, bool isHeadOfHousehold) persisted, required TResult Function( @@ -5726,7 +5796,8 @@ class _$BeneficiaryRegistrationSummaryStateImpl List individualModel, DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading)? + bool loading, + IndividualModel? headOfHousehold)? editHousehold, TResult? Function( HouseholdModel householdModel, @@ -5746,6 +5817,7 @@ class _$BeneficiaryRegistrationSummaryStateImpl DateTime? registrationDate, AddressModel? addressModel, bool loading, + bool isEdit, bool isHeadOfHousehold)? persisted, TResult? Function( @@ -5789,7 +5861,8 @@ class _$BeneficiaryRegistrationSummaryStateImpl List individualModel, DateTime registrationDate, ProjectBeneficiaryModel? projectBeneficiaryModel, - bool loading)? + bool loading, + IndividualModel? headOfHousehold)? editHousehold, TResult Function( HouseholdModel householdModel, @@ -5809,6 +5882,7 @@ class _$BeneficiaryRegistrationSummaryStateImpl DateTime? registrationDate, AddressModel? addressModel, bool loading, + bool isEdit, bool isHeadOfHousehold)? persisted, TResult Function( diff --git a/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart b/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart index 474b6f0be..689744163 100644 --- a/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart +++ b/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart @@ -38,20 +38,28 @@ class DeliverInterventionBloc emit(state.copyWith(loading: true)); try { if (event.isEditing) { + + if (!event.navigateToSummary) { + await taskRepository.update(event.task.copyWith( + clientAuditDetails: + (event.task.clientAuditDetails?.createdBy != null && + event.task.clientAuditDetails?.createdTime != null) + ? ClientAuditDetails( + createdBy: event.task.clientAuditDetails!.createdBy, + createdTime: event.task.clientAuditDetails!.createdTime, + lastModifiedBy: event.task.auditDetails?.lastModifiedBy ?? + event.task.clientAuditDetails!.createdBy, + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + ) + : null, + )); + } + + emit(state.copyWith( + oldTask: event.task, + householdMemberWrapper: event.householdMemberWrapper)); // Update an existing task - await taskRepository.update(event.task.copyWith( - clientAuditDetails: - (event.task.clientAuditDetails?.createdBy != null && - event.task.clientAuditDetails?.createdTime != null) - ? ClientAuditDetails( - createdBy: event.task.clientAuditDetails!.createdBy, - createdTime: event.task.clientAuditDetails!.createdTime, - lastModifiedBy: event.task.auditDetails?.lastModifiedBy ?? - event.task.clientAuditDetails!.createdBy, - lastModifiedTime: DateTime.now().millisecondsSinceEpoch, - ) - : null, - )); + } else { // Create a new task final code = event.boundaryModel.code; diff --git a/packages/registration_delivery/lib/models/entities/registration_delivery_enums.dart b/packages/registration_delivery/lib/models/entities/registration_delivery_enums.dart new file mode 100644 index 000000000..cd5f518cc --- /dev/null +++ b/packages/registration_delivery/lib/models/entities/registration_delivery_enums.dart @@ -0,0 +1,12 @@ +// Generated using mason. Do not modify by hand +import 'package:dart_mappable/dart_mappable.dart'; + +part 'registration_delivery_enums.mapper.dart'; + +@MappableEnum(caseStyle: CaseStyle.upperCase) +enum RegistrationDeliveryEnums { + @MappableValue("name") + name, + @MappableValue("userName") + userName, +} diff --git a/packages/registration_delivery/lib/models/entities/registration_delivery_enums.mapper.dart b/packages/registration_delivery/lib/models/entities/registration_delivery_enums.mapper.dart new file mode 100644 index 000000000..299259e15 --- /dev/null +++ b/packages/registration_delivery/lib/models/entities/registration_delivery_enums.mapper.dart @@ -0,0 +1,56 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter + +part of 'registration_delivery_enums.dart'; + +class RegistrationDeliveryEnumsMapper + extends EnumMapper { + RegistrationDeliveryEnumsMapper._(); + + static RegistrationDeliveryEnumsMapper? _instance; + static RegistrationDeliveryEnumsMapper ensureInitialized() { + if (_instance == null) { + MapperContainer.globals + .use(_instance = RegistrationDeliveryEnumsMapper._()); + } + return _instance!; + } + + static RegistrationDeliveryEnums fromValue(dynamic value) { + ensureInitialized(); + return MapperContainer.globals.fromValue(value); + } + + @override + RegistrationDeliveryEnums decode(dynamic value) { + switch (value) { + case "name": + return RegistrationDeliveryEnums.name; + case "userName": + return RegistrationDeliveryEnums.userName; + default: + throw MapperException.unknownEnumValue(value); + } + } + + @override + dynamic encode(RegistrationDeliveryEnums self) { + switch (self) { + case RegistrationDeliveryEnums.name: + return "name"; + case RegistrationDeliveryEnums.userName: + return "userName"; + } + } +} + +extension RegistrationDeliveryEnumsMapperExtension + on RegistrationDeliveryEnums { + dynamic toValue() { + RegistrationDeliveryEnumsMapper.ensureInitialized(); + return MapperContainer.globals.toValue(this); + } +} diff --git a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart index f9a2e1f7e..1f3911d98 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart @@ -77,7 +77,10 @@ class DeliverInterventionPageState task: _getTaskModel( context, form: form, - oldTask: null, + oldTask: RegistrationDeliverySingleton().beneficiaryType == + BeneficiaryType.household + ? deliverInterventionState.tasks?.last + : null, projectBeneficiaryClientReferenceId: projectBeneficiary.clientReferenceId, dose: deliverInterventionState.dose, @@ -87,7 +90,12 @@ class DeliverInterventionPageState latitude: lat, longitude: long, ), - isEditing: false, + isEditing: + ( deliverInterventionState.tasks ?? []) + .isNotEmpty && RegistrationDeliverySingleton().beneficiaryType == + BeneficiaryType.household + ? true + : false, boundaryModel: RegistrationDeliverySingleton().boundary!, navigateToSummary: true, householdMemberWrapper: householdMember), @@ -516,7 +524,7 @@ class DeliverInterventionPageState Text( localizations.translate( i18.deliverIntervention - .deliveryCommentLabel, + .deliveryCommentHeading, ), style: theme .textTheme.headlineLarge, @@ -662,6 +670,10 @@ class DeliverInterventionPageState additionalFields: TaskAdditionalFields( version: task.additionalFields?.version ?? 1, fields: [ + AdditionalField( + RegistrationDeliveryEnums.name.toValue(), + RegistrationDeliverySingleton().loggedInUser?.name, + ), AdditionalField( AdditionalFieldsType.dateOfDelivery.toValue(), DateTime.now().millisecondsSinceEpoch.toString(), diff --git a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart index f9be22262..ef799324f 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart @@ -108,7 +108,11 @@ class DeliverySummaryPageState extends LocalizedState { context.read().add( DeliverInterventionSubmitEvent( task: deliverState.oldTask!, - isEditing: false, + isEditing: ( deliverState.tasks ?? []) + .isNotEmpty && RegistrationDeliverySingleton().beneficiaryType == + BeneficiaryType.household + ? true + : false, boundaryModel: RegistrationDeliverySingleton() .boundary!, diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index 3840c66ff..06b22aa93 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -91,7 +91,7 @@ class _HouseholdOverviewPageState onPressed: (state.householdMemberWrapper .projectBeneficiaries ?? []) - .isEmpty || deliverInterventionState.tasks?.last.status == Status.closeHousehold.toValue() + .isEmpty || state.householdMemberWrapper.tasks?.last.status == Status.closeHousehold.toValue() ? null : () async { final bloc = @@ -701,19 +701,19 @@ class _HouseholdOverviewPageState var icon = Icons.info_rounded; if ((state.householdMemberWrapper.projectBeneficiaries ?? []).isNotEmpty) { - textLabel = deliverInterventionState.tasks?.isNotEmpty ?? false - ? getTaskStatus(deliverInterventionState.tasks ?? []).toValue() + textLabel = state.householdMemberWrapper.tasks?.isNotEmpty ?? false + ? getTaskStatus(state.householdMemberWrapper.tasks ?? []).toValue() : Status.registered.toValue(); - color = deliverInterventionState.tasks?.isNotEmpty ?? false - ? (deliverInterventionState.tasks?.last.status == + color = state.householdMemberWrapper.tasks?.isNotEmpty ?? false + ? (state.householdMemberWrapper.tasks?.last.status == Status.administeredSuccess.toValue() ? DigitTheme.instance.colorScheme.onSurfaceVariant : DigitTheme.instance.colorScheme.error) : DigitTheme.instance.colorScheme.onSurfaceVariant; - icon = deliverInterventionState.tasks?.isNotEmpty ?? false - ? (deliverInterventionState.tasks?.last.status == + icon = state.householdMemberWrapper.tasks?.isNotEmpty ?? false + ? (state.householdMemberWrapper.tasks?.last.status == Status.administeredSuccess.toValue() ? Icons.check_circle : Icons.info_rounded) diff --git a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart index 731c318c6..c5d6b2b73 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart @@ -111,57 +111,15 @@ class RefusedDeliveryPageState extends LocalizedState { } else { status = Status.administeredFailed.toValue(); } + final oldTask = RegistrationDeliverySingleton().beneficiaryType != + BeneficiaryType.individual ? registrationState.householdMemberWrapper.tasks?.last : null; context.read().add( DeliverInterventionSubmitEvent( navigateToSummary: true, householdMemberWrapper: registrationState.householdMemberWrapper, - task: TaskModel( - projectBeneficiaryClientReferenceId: - projectBeneficiary?.first - ?.clientReferenceId, //TODO: need to check for individual based campaign - clientReferenceId: IdGen.i.identifier, - tenantId: RegistrationDeliverySingleton() - .tenantId, - rowVersion: 1, - auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: - context.millisecondsSinceEpoch(), - ), - projectId: RegistrationDeliverySingleton() - .projectId, - status: status, - clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: - context.millisecondsSinceEpoch(), - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: - context.millisecondsSinceEpoch(), - ), - additionalFields: TaskAdditionalFields( - version: 1, - fields: [ - AdditionalField( - AdditionalFieldsType.reasonOfRefusal - .toValue(), - reasonOfRefusal, - ), - if (refusalComment != null) - AdditionalField( - AdditionalFieldsType.deliveryComment - .toValue(), - refusalComment, - ), - ], - ), - ), + task: _getTaskModel(oldTask, projectBeneficiary?.first?.clientReferenceId, status, reasonOfRefusal, refusalComment), isEditing: false, boundaryModel: RegistrationDeliverySingleton().boundary!, @@ -290,8 +248,64 @@ class RefusedDeliveryPageState extends LocalizedState { }, )), ); + + } + _getTaskModel(TaskModel? oldTask, String? projectBeneficiaryClientReferenceId, String status, String? reasonOfRefusal, String? refusalComment) { + var task = oldTask; + var clientReferenceId = task?.clientReferenceId ?? IdGen.i.identifier; + task ??=TaskModel( + projectBeneficiaryClientReferenceId:projectBeneficiaryClientReferenceId, + clientReferenceId: clientReferenceId, + tenantId: RegistrationDeliverySingleton() + .tenantId, + rowVersion: 1, + auditDetails: AuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: + context.millisecondsSinceEpoch(), + ), + projectId: RegistrationDeliverySingleton() + .projectId, + clientAuditDetails: ClientAuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: + context.millisecondsSinceEpoch(), + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: + context.millisecondsSinceEpoch(), + ), + ); + + task = task.copyWith( + status: status, + additionalFields: TaskAdditionalFields( + version: 1, + fields: [ + AdditionalField( + AdditionalFieldsType.reasonOfRefusal + .toValue(), + reasonOfRefusal, + ), + if (refusalComment != null) + AdditionalField( + AdditionalFieldsType.deliveryComment + .toValue(), + refusalComment, + ), + ], + ), + ); + + + return task; + + } FormGroup buildForm() { return fb.group({ _dataOfRefusalKey: diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart index df522e610..09f6adf47 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart @@ -42,38 +42,68 @@ class BeneficiaryRegistrationWrapperPage extends StatelessWidget context.repository(context); return BlocProvider( - create: (context) => BeneficiaryRegistrationBloc( - initialState, - individualRepository: individual, - householdRepository: household, - householdMemberRepository: householdMember, - projectBeneficiaryRepository: projectBeneficiary, - taskDataRepository: task, - beneficiaryType: beneficiaryType!, - ), - child: BlocProvider( - create: (_) => HouseholdOverviewBloc( - HouseholdOverviewState( - householdMemberWrapper: HouseholdMemberWrapper( - household: initialState.householdModel, - headOfHousehold: null, - members: [], - projectBeneficiaries: []), + create: (_) => HouseholdOverviewBloc( + HouseholdOverviewState( + householdMemberWrapper: HouseholdMemberWrapper( + household: initialState.householdModel, + headOfHousehold: initialState.maybeWhen( + orElse: () => null, + editHousehold: (addressModel, + householdModel, + individualModel, + registrationDate, + projectBeneficiaryModel, + loading, + headOfHousehold) => + headOfHousehold), + members: initialState.maybeWhen( + orElse: () => null, + editHousehold: (addressModel, + householdModel, + individualModel, + registrationDate, + projectBeneficiaryModel, + loading, + headOfHousehold) => + individualModel, + ), + projectBeneficiaries: initialState.maybeWhen( + orElse: () => null, + editHousehold: (addressModel, + householdModel, + individualModel, + registrationDate, + projectBeneficiaryModel, + loading, + headOfHousehold) => + projectBeneficiaryModel != null + ? [projectBeneficiaryModel] + : [], + ), ), - individualRepository: individual, - householdRepository: household, - householdMemberRepository: householdMember, - projectBeneficiaryRepository: projectBeneficiary, - beneficiaryType: RegistrationDeliverySingleton().beneficiaryType!, - taskDataRepository: task, - sideEffectDataRepository: sideEffect, - referralDataRepository: referral) - ..add( - HouseholdOverviewReloadEvent( - projectId: RegistrationDeliverySingleton().selectedProject!.id, - projectBeneficiaryType: - RegistrationDeliverySingleton().beneficiaryType!), ), + individualRepository: individual, + householdRepository: household, + householdMemberRepository: householdMember, + projectBeneficiaryRepository: projectBeneficiary, + beneficiaryType: RegistrationDeliverySingleton().beneficiaryType!, + taskDataRepository: task, + sideEffectDataRepository: sideEffect, + referralDataRepository: referral) + ..add(HouseholdOverviewReloadEvent( + projectId: RegistrationDeliverySingleton().selectedProject!.id, + projectBeneficiaryType: + RegistrationDeliverySingleton().beneficiaryType!)), + child: BlocProvider( + create: (context) => BeneficiaryRegistrationBloc( + initialState, + individualRepository: individual, + householdRepository: household, + householdMemberRepository: householdMember, + projectBeneficiaryRepository: projectBeneficiary, + taskDataRepository: task, + beneficiaryType: beneficiaryType!, + ), child: this, ), ); diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart index 103c074ce..08e42399c 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart @@ -68,7 +68,8 @@ class HouseDetailsPageState extends LocalizedState { child: DigitElevatedButton( onPressed: () { form.markAllAsTouched(); - if (form.control(_householdStructureKey).value == null) { + if (form.control(_householdStructureKey).value == + null) { setState(() { form .control(_householdStructureKey) @@ -77,128 +78,128 @@ class HouseDetailsPageState extends LocalizedState { } if (!form.valid) return; - selectedHouseStructureTypes = form.control(_householdStructureKey).value; + selectedHouseStructureTypes = + form.control(_householdStructureKey).value; - final noOfRooms = - form.control(_noOfRoomsKey).value as int; - registrationState.maybeWhen( - orElse: () { - return; - }, - create: ( - address, - householdModel, - individualModel, - projectBeneficiaryModel, - registrationDate, - searchQuery, - loading, - isHeadOfHousehold, - ) { - var houseModel = HouseholdModel( - clientReferenceId: IdGen.i.identifier, - tenantId: RegistrationDeliverySingleton() - .tenantId, - rowVersion: 1, - auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: - context.millisecondsSinceEpoch(), - ), - memberCount: householdModel?.memberCount, - clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: - context.millisecondsSinceEpoch(), - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: - context.millisecondsSinceEpoch(), - ), - additionalFields: HouseholdAdditionalFields( - version: 1, - fields: [ - ...?householdModel - ?.additionalFields?.fields - .where((e) => - e.key != - AdditionalFieldsType - .houseStructureTypes - .toValue() && - e.key != - AdditionalFieldsType - .noOfRooms - .toValue()), - AdditionalField( - AdditionalFieldsType - .houseStructureTypes - .toValue(), - selectedHouseStructureTypes - ?.join("|") - .toString(), - ), - AdditionalField( - AdditionalFieldsType.noOfRooms - .toValue(), - noOfRooms, - ) - ])); - - bloc.add( - BeneficiaryRegistrationSaveHouseDetailsEvent( - model: houseModel, + final noOfRooms = + form.control(_noOfRoomsKey).value as int; + registrationState.maybeWhen( + orElse: () { + return; + }, + create: ( + address, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + searchQuery, + loading, + isHeadOfHousehold, + ) { + var houseModel = HouseholdModel( + clientReferenceId: IdGen.i.identifier, + tenantId: + RegistrationDeliverySingleton().tenantId, + rowVersion: 1, + auditDetails: AuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: + context.millisecondsSinceEpoch(), ), - ); - router.push(HouseHoldDetailsRoute()); - }, - editHousehold: ( - address, - householdModel, - individuals, - registrationDate, - projectBeneficiaryModel, - loading, - ) { - var houseModel = householdModel.copyWith( - additionalFields: HouseholdAdditionalFields( - version: 1, - fields: [ - ...?householdModel - .additionalFields?.fields - .where((e) => - e.key != - AdditionalFieldsType - .houseStructureTypes - .toValue() && - e.key != - AdditionalFieldsType.noOfRooms - .toValue()), - AdditionalField( - AdditionalFieldsType.houseStructureTypes - .toValue(), - selectedHouseStructureTypes - ?.join("|") - .toString(), - ), - AdditionalField( - AdditionalFieldsType.noOfRooms - .toValue(), - noOfRooms, - ) - ])); - // TODO [Linking of Voucher for Household based project need to be handled] - - bloc.add( - BeneficiaryRegistrationSaveHouseDetailsEvent( - model: houseModel, + memberCount: householdModel?.memberCount, + clientAuditDetails: ClientAuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: + context.millisecondsSinceEpoch(), + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: + context.millisecondsSinceEpoch(), ), - ); - router.push(HouseHoldDetailsRoute()); - }, - ); + additionalFields: HouseholdAdditionalFields( + version: 1, + fields: [ + ...?householdModel + ?.additionalFields?.fields + .where((e) => + e.key != + AdditionalFieldsType + .houseStructureTypes + .toValue() && + e.key != + AdditionalFieldsType + .noOfRooms + .toValue()), + AdditionalField( + AdditionalFieldsType + .houseStructureTypes + .toValue(), + selectedHouseStructureTypes + ?.join("|") + .toString(), + ), + AdditionalField( + AdditionalFieldsType.noOfRooms + .toValue(), + noOfRooms, + ) + ])); + + bloc.add( + BeneficiaryRegistrationSaveHouseDetailsEvent( + model: houseModel, + ), + ); + router.push(HouseHoldDetailsRoute()); + }, + editHousehold: ( + address, + householdModel, + individuals, + registrationDate, + projectBeneficiaryModel, + loading, + headOfHousehold, + ) { + var houseModel = householdModel.copyWith( + additionalFields: HouseholdAdditionalFields( + version: 1, + fields: [ + ...?householdModel.additionalFields?.fields + .where((e) => + e.key != + AdditionalFieldsType + .houseStructureTypes + .toValue() && + e.key != + AdditionalFieldsType.noOfRooms + .toValue()), + AdditionalField( + AdditionalFieldsType.houseStructureTypes + .toValue(), + selectedHouseStructureTypes + ?.join("|") + .toString(), + ), + AdditionalField( + AdditionalFieldsType.noOfRooms.toValue(), + noOfRooms, + ) + ])); + // TODO [Linking of Voucher for Household based project need to be handled] + + bloc.add( + BeneficiaryRegistrationSaveHouseDetailsEvent( + model: houseModel, + ), + ); + router.push(HouseHoldDetailsRoute()); + }, + ); }, child: Center( child: Text( @@ -254,7 +255,7 @@ class HouseDetailsPageState extends LocalizedState { form .control(_householdStructureKey) .markAsTouched(); - if(values.isEmpty){ + if (values.isEmpty) { form .control(_householdStructureKey) .value = null; @@ -263,9 +264,11 @@ class HouseDetailsPageState extends LocalizedState { .control(_householdStructureKey) .setErrors({'': true}); }); - }else{ + } else { setState(() { - form.control(_householdStructureKey).value = values; + form + .control(_householdStructureKey) + .value = values; }); } }, @@ -274,13 +277,14 @@ class HouseDetailsPageState extends LocalizedState { .translate(value.toString()); }, errorMessage: form - .control(_householdStructureKey) - .hasErrors && - form - .control(_householdStructureKey) - .touched - ? localizations.translate(i18.householdDetails - .selectStructureTypeError) + .control(_householdStructureKey) + .hasErrors && + form + .control(_householdStructureKey) + .touched + ? localizations.translate(i18 + .householdDetails + .selectStructureTypeError) : null, ), ), @@ -326,10 +330,9 @@ class HouseDetailsPageState extends LocalizedState { '1') : 1), _householdStructureKey: FormControl>( - value: state - .householdModel?.additionalFields?.fields + value: state.householdModel?.additionalFields?.fields .where((e) => - e.key == AdditionalFieldsType.houseStructureTypes.toValue()) + e.key == AdditionalFieldsType.houseStructureTypes.toValue()) .first .value .toString() diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart index 07608c5ef..8d0f29b23 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart @@ -51,8 +51,33 @@ class HouseHoldDetailsPageState extends LocalizedState { int pregnantWomen = form.control(_pregnantWomenCountKey).value; int children = form.control(_childrenCountKey).value; int memberCount = form.control(_memberCountKey).value; - return BlocBuilder( + listener: (context, state) { + if (state is BeneficiaryRegistrationPersistedState && state.isEdit) { + final overviewBloc = + context.read(); + + overviewBloc.add( + HouseholdOverviewReloadEvent( + projectId: RegistrationDeliverySingleton() + .projectId + .toString(), + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType ?? + BeneficiaryType.household, + ), + ); + HouseholdMemberWrapper memberWrapper = + overviewBloc.state.householdMemberWrapper; + final route = router.parent() as StackRouter; + route.popUntilRouteWithName( + SearchBeneficiaryRoute.name); + route.push(BeneficiaryWrapperRoute( + wrapper: memberWrapper)); + } + }, builder: (context, registrationState) { return ScrollableContent( header: const Column(children: [ @@ -207,6 +232,7 @@ class HouseHoldDetailsPageState extends LocalizedState { registrationDate, projectBeneficiaryModel, loading, + isHeadOfHousehold, ) { var household = householdModel.copyWith( memberCount: memberCount, @@ -304,15 +330,7 @@ class HouseHoldDetailsPageState extends LocalizedState { ), ), ); - final overviewBloc = - context.read(); - HouseholdMemberWrapper memberWrapper = - overviewBloc.state.householdMemberWrapper; - final route = router.parent() as StackRouter; - route.popUntilRouteWithName( - SearchBeneficiaryRoute.name); - route.push(BeneficiaryWrapperRoute( - wrapper: memberWrapper)); + }, ); } diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index 9c8e1ba18..ef237cd63 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -212,6 +212,7 @@ class HouseholdLocationPageState extends LocalizedState { registrationDate, projectBeneficiaryModel, loading, + headOfHousehold, ) { var addressModel = address.copyWith( addressLine1: addressLine1 != null && diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index ed390ff85..3a4659b32 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -79,7 +79,8 @@ class _SearchBeneficiaryPageState onNotification: (scrollNotification) { if (scrollNotification is ScrollUpdateNotification) { final metrics = scrollNotification.metrics; - if (metrics.atEdge && metrics.pixels != 0) {triggerGlobalSearchEvent(isPagination: true); + if (metrics.atEdge && metrics.pixels != 0) { + triggerGlobalSearchEvent(isPagination: true); } } return true; @@ -162,7 +163,8 @@ class _SearchBeneficiaryPageState ), textCapitalization: TextCapitalization.words, onChanged: (value) { - if(value.isEmpty || value.trim().length > 2){ + if (value.isEmpty || + value.trim().length > 2) { triggerGlobalSearchEvent(); } }, @@ -346,17 +348,19 @@ class _SearchBeneficiaryPageState BeneficiaryRegistrationWrapperRoute( initialState: BeneficiaryRegistrationState .editHousehold( - householdModel: i.household!, - individualModel: i.members!, - registrationDate: DateTime.now(), - projectBeneficiaryModel: - (i.projectBeneficiaries ?? []) - .isNotEmpty - ? i.projectBeneficiaries?.last - : null, - addressModel: - i.headOfHousehold!.address!.last, - ), + householdModel: i.household!, + individualModel: i.members!, + registrationDate: DateTime.now(), + projectBeneficiaryModel: + (i.projectBeneficiaries ?? []) + .isNotEmpty + ? i.projectBeneficiaries + ?.last + : null, + addressModel: i.headOfHousehold! + .address!.last, + headOfHousehold: + i.headOfHousehold), ), ); } else { @@ -491,15 +495,15 @@ class _SearchBeneficiaryPageState } } - void triggerGlobalSearchEvent( {bool isPagination = false}) { - if(!isPagination){ + void triggerGlobalSearchEvent({bool isPagination = false}) { + if (!isPagination) { blocWrapper.clearEvent(); } if (RegistrationDeliverySingleton().beneficiaryType == BeneficiaryType.individual) { if (isProximityEnabled || selectedFilters.isNotEmpty || - searchController.text.isNotEmpty ) { + searchController.text.isNotEmpty) { blocWrapper.individualGlobalSearchBloc .add(SearchHouseholdsEvent.individualGlobalSearch( globalSearchParams: GlobalSearchParameters( @@ -507,16 +511,22 @@ class _SearchBeneficiaryPageState latitude: lat, longitude: long, maxRadius: RegistrationDeliverySingleton().maxRadius, - nameSearch: searchController.text.trim().length > 2 ? searchController.text.trim() : blocWrapper.searchHouseholdsBloc.state.searchQuery, + nameSearch: searchController.text.trim().length > 2 + ? searchController.text.trim() + : blocWrapper.searchHouseholdsBloc.state.searchQuery, filter: selectedFilters, - offset: isPagination ? blocWrapper.houseHoldGlobalSearchBloc.state.offset: offset, - limit: isPagination ? blocWrapper.houseHoldGlobalSearchBloc.state.limit: limit, + offset: isPagination + ? blocWrapper.houseHoldGlobalSearchBloc.state.offset + : offset, + limit: isPagination + ? blocWrapper.houseHoldGlobalSearchBloc.state.limit + : limit, ))); } } else { if (isProximityEnabled || selectedFilters.isNotEmpty || - searchController.text.isNotEmpty ) { + searchController.text.isNotEmpty) { blocWrapper.houseHoldGlobalSearchBloc .add(SearchHouseholdsEvent.houseHoldGlobalSearch( globalSearchParams: GlobalSearchParameters( @@ -524,10 +534,16 @@ class _SearchBeneficiaryPageState latitude: lat, longitude: long, maxRadius: RegistrationDeliverySingleton().maxRadius, - nameSearch: searchController.text.trim().length > 2 ? searchController.text.trim() : blocWrapper.searchHouseholdsBloc.state.searchQuery, + nameSearch: searchController.text.trim().length > 2 + ? searchController.text.trim() + : blocWrapper.searchHouseholdsBloc.state.searchQuery, filter: selectedFilters, - offset: isPagination ? blocWrapper.houseHoldGlobalSearchBloc.state.offset: offset, - limit: isPagination ? blocWrapper.houseHoldGlobalSearchBloc.state.limit: limit, + offset: isPagination + ? blocWrapper.houseHoldGlobalSearchBloc.state.offset + : offset, + limit: isPagination + ? blocWrapper.houseHoldGlobalSearchBloc.state.limit + : limit, ))); } } diff --git a/packages/registration_delivery/lib/registration_delivery.dart b/packages/registration_delivery/lib/registration_delivery.dart index b68284906..ff2e0209d 100644 --- a/packages/registration_delivery/lib/registration_delivery.dart +++ b/packages/registration_delivery/lib/registration_delivery.dart @@ -38,6 +38,7 @@ export 'models/entities/household.dart'; export 'models/entities/household_member.dart'; export 'models/entities/project_beneficiary.dart'; export 'models/entities/referral.dart'; +export 'models/entities/registration_delivery_enums.dart'; export 'models/entities/side_effect.dart'; export 'models/entities/task.dart'; export 'models/entities/task_resource.dart'; diff --git a/packages/registration_delivery/lib/registration_delivery.init.dart b/packages/registration_delivery/lib/registration_delivery.init.dart index f7b7ae3bc..db23c3ec9 100644 --- a/packages/registration_delivery/lib/registration_delivery.init.dart +++ b/packages/registration_delivery/lib/registration_delivery.init.dart @@ -10,10 +10,11 @@ import 'models/entities/household_member.dart' as p3; import 'models/entities/project_beneficiary.dart' as p4; import 'models/entities/referral.dart' as p5; import 'models/entities/reg_form_validations_type.dart' as p6; -import 'models/entities/side_effect.dart' as p7; -import 'models/entities/status.dart' as p8; -import 'models/entities/task.dart' as p9; -import 'models/entities/task_resource.dart' as p10; +import 'models/entities/registration_delivery_enums.dart' as p7; +import 'models/entities/side_effect.dart' as p8; +import 'models/entities/status.dart' as p9; +import 'models/entities/task.dart' as p10; +import 'models/entities/task_resource.dart' as p11; void initializeMappers() { p0.AdditionalFieldsTypeMapper.ensureInitialized(); @@ -31,14 +32,15 @@ void initializeMappers() { p5.ReferralModelMapper.ensureInitialized(); p5.ReferralAdditionalFieldsMapper.ensureInitialized(); p6.RegFormValidationsMapper.ensureInitialized(); - p7.SideEffectSearchModelMapper.ensureInitialized(); - p7.SideEffectModelMapper.ensureInitialized(); - p7.SideEffectAdditionalFieldsMapper.ensureInitialized(); - p8.StatusMapper.ensureInitialized(); - p9.TaskSearchModelMapper.ensureInitialized(); - p9.TaskModelMapper.ensureInitialized(); - p9.TaskAdditionalFieldsMapper.ensureInitialized(); - p10.TaskResourceSearchModelMapper.ensureInitialized(); - p10.TaskResourceModelMapper.ensureInitialized(); - p10.TaskResourceAdditionalFieldsMapper.ensureInitialized(); + p7.RegistrationDeliveryEnumsMapper.ensureInitialized(); + p8.SideEffectSearchModelMapper.ensureInitialized(); + p8.SideEffectModelMapper.ensureInitialized(); + p8.SideEffectAdditionalFieldsMapper.ensureInitialized(); + p9.StatusMapper.ensureInitialized(); + p10.TaskSearchModelMapper.ensureInitialized(); + p10.TaskModelMapper.ensureInitialized(); + p10.TaskAdditionalFieldsMapper.ensureInitialized(); + p11.TaskResourceSearchModelMapper.ensureInitialized(); + p11.TaskResourceModelMapper.ensureInitialized(); + p11.TaskResourceAdditionalFieldsMapper.ensureInitialized(); } diff --git a/packages/registration_delivery/lib/utils/i18_key_constants.dart b/packages/registration_delivery/lib/utils/i18_key_constants.dart index 2f5d76a3b..e93e3254e 100644 --- a/packages/registration_delivery/lib/utils/i18_key_constants.dart +++ b/packages/registration_delivery/lib/utils/i18_key_constants.dart @@ -119,6 +119,7 @@ class Common { String get coreCommonSummaryDetails => 'CORE_COMMON_SUMMARY_DETAILS'; String get metersNear => 'METERS_NEAR'; + String get coreCommonLoadingText => 'CORE_COMMON_LOADING_TEXT'; } class SearchBeneficiary { @@ -522,6 +523,8 @@ class DeliverIntervention { String get deliveryCommentLabel => 'DELIVER_INTERVENTION_DELIVERY_COMMENT_LABEL'; + String get deliveryCommentHeading => + 'DELIVER_INTERVENTION_DELIVERY_COMMENT_HEADING'; String get deliveryDetailsLabel => 'DELIVER_INTERVENTION_DELIVERY_DETAILS_LABEL'; diff --git a/packages/registration_delivery/lib/utils/utils.dart b/packages/registration_delivery/lib/utils/utils.dart index 25bac280a..a88c7f437 100644 --- a/packages/registration_delivery/lib/utils/utils.dart +++ b/packages/registration_delivery/lib/utils/utils.dart @@ -289,7 +289,7 @@ class RegistrationDeliverySingleton { String? _tenantId; String? _loggedInUserUuid; - + UserModel? _loggedInUser; double? _maxRadius; String? _projectId; BeneficiaryType? _beneficiaryType; @@ -335,6 +335,7 @@ class RegistrationDeliverySingleton { required List? referralReasons, required List? houseStructureTypes, required List? refusalReasons, + required UserModel? loggedInUser, }) { _loggedInUserUuid = loggedInUserUuid; _maxRadius = maxRadius; @@ -353,6 +354,7 @@ class RegistrationDeliverySingleton { _referralReasons = referralReasons; _houseStructureTypes = houseStructureTypes; _refusalReasons = refusalReasons; + _loggedInUser = loggedInUser; } void setTenantId(String tenantId) { @@ -381,6 +383,7 @@ class RegistrationDeliverySingleton { List? get referralReasons => _referralReasons; List? get houseStructureTypes => _houseStructureTypes; List? get refusalReasons => _refusalReasons; + UserModel? get loggedInUser => _loggedInUser; } bool allDosesDelivered( diff --git a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart index c3b08b7fc..57033a26f 100644 --- a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart +++ b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart @@ -3,6 +3,7 @@ import 'package:digit_components/widgets/atoms/selection_card.dart'; import 'package:digit_scanner/widgets/localized.dart'; import 'package:flutter/material.dart'; import 'package:registration_delivery/registration_delivery.dart'; +import '../../utils/i18_key_constants.dart' as i18; import '../../models/entities/status.dart'; import '../../utils/i18_key_constants.dart' as i18; @@ -21,6 +22,7 @@ class StatusFilter extends LocalizedStatefulWidget { class StatusFilterState extends LocalizedState { List selectedButtons = []; + bool isLoading = false; @override void initState() { @@ -30,63 +32,79 @@ class StatusFilterState extends LocalizedState { @override Widget build(BuildContext context) { + final theme = Theme.of(context); return SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - SelectionBox( - options: getFilters() ?? [], - allowMultipleSelection: false, - equalWidthOptions: true, - initialSelection: [...selectedButtons], - onSelectionChanged: (selected) { - setState(() { - selectedButtons = selected; - }); - }, - valueMapper: (value) { - return localizations.translate(value.toValue().toString()); - }, - ), - const SizedBox( - height: kPadding, - ), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceEvenly, // Adjust button spacing - children: [ - Expanded( - child: DigitOutLineButton( - label: localizations.translate( - i18.searchBeneficiary.clearFilter, + child: Column( + mainAxisSize: MainAxisSize.min, + children: isLoading + ? [ Center( + child: SizedBox(height: 50, child: Text(localizations.translate(i18.common.coreCommonLoadingText), style: theme.textTheme.bodyLarge,)), + )] : [ + SelectionBox( + options: getFilters() ?? [], + allowMultipleSelection: false, + equalWidthOptions: true, + initialSelection: [...selectedButtons], + onSelectionChanged: (selected) { + setState(() { + selectedButtons = selected; + }); + }, + valueMapper: (value) { + return localizations.translate(value.toValue().toString()); + }, + ), + const SizedBox( + height: kPadding, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, // Adjust button spacing + children: [ + Expanded( + child: DigitOutLineButton( + label: localizations.translate( + i18.searchBeneficiary.clearFilter, + ), + onPressed: selectedButtons.isEmpty + ? null + : () { + setState(() { + selectedButtons.clear(); + }); + }), + ), + const SizedBox( + width: kPadding / 2, ), - onPressed: selectedButtons.isEmpty ? null : () { - setState(() { - selectedButtons.clear(); - }); - }), - ), - const SizedBox( - width: kPadding / 2, - ), - Expanded( - child: DigitElevatedButton( - child: Text( - localizations.translate( - i18.searchBeneficiary.applyFilter, - ), + Expanded( + child: DigitElevatedButton( + onPressed: selectedButtons.isEmpty + ? null + : () { + setState(() { + isLoading = true; + }); + var selected = selectedButtons + .map((e) => e.name) + .toList(); + + Future.delayed(const Duration(seconds: 1), () { + Navigator.pop(context, selected); + }); + + }, + child: Text( + localizations.translate( + i18.searchBeneficiary.applyFilter, + ), + )), ), - onPressed: () { - var selected = - selectedButtons.map((e) => e.name).toList(); - Navigator.pop(context, selected); - }), - ), - ], - ) - ], - ), - ); + ], + ) + ], + ), + ); } void selectButton(Status button) { From dcd1a67b69b280936125afb8e74db82b5e61341f Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Wed, 7 Aug 2024 14:36:35 +0530 Subject: [PATCH 070/241] updated status and registration_delivery_enums.dart (#494) * updated status and registration_delivery_enums.dart updated check for check-list check in household_overview.dart * Todo for individual check in beneficiary_registration.dart --- .../beneficiary_registration.dart | 2 +- .../entities/registration_delivery_enums.dart | 2 + .../registration_delivery_enums.mapper.dart | 4 + .../lib/models/entities/status.dart | 4 +- .../lib/models/entities/status.mapper.dart | 8 +- .../pages/beneficiary/household_overview.dart | 150 ++++++++++++------ .../lib/utils/utils.dart | 2 +- 7 files changed, 115 insertions(+), 57 deletions(-) diff --git a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart index 1e6aedee5..37091bc9b 100644 --- a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart +++ b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart @@ -432,7 +432,7 @@ class BeneficiaryRegistrationBloc final projectBeneficiary = await projectBeneficiaryRepository.search( ProjectBeneficiarySearchModel( beneficiaryClientReferenceId: - beneficiaryType == BeneficiaryType.individual + beneficiaryType == BeneficiaryType.individual //[TODO: need to check with individual downsync data. Current implementation works only for household. Parking this for IRS] ? [value.individualModel.first.clientReferenceId] : [event.household.clientReferenceId], ), diff --git a/packages/registration_delivery/lib/models/entities/registration_delivery_enums.dart b/packages/registration_delivery/lib/models/entities/registration_delivery_enums.dart index cd5f518cc..d83124cc3 100644 --- a/packages/registration_delivery/lib/models/entities/registration_delivery_enums.dart +++ b/packages/registration_delivery/lib/models/entities/registration_delivery_enums.dart @@ -9,4 +9,6 @@ enum RegistrationDeliveryEnums { name, @MappableValue("userName") userName, + @MappableValue("IEC") + iec, } diff --git a/packages/registration_delivery/lib/models/entities/registration_delivery_enums.mapper.dart b/packages/registration_delivery/lib/models/entities/registration_delivery_enums.mapper.dart index 299259e15..96206f505 100644 --- a/packages/registration_delivery/lib/models/entities/registration_delivery_enums.mapper.dart +++ b/packages/registration_delivery/lib/models/entities/registration_delivery_enums.mapper.dart @@ -31,6 +31,8 @@ class RegistrationDeliveryEnumsMapper return RegistrationDeliveryEnums.name; case "userName": return RegistrationDeliveryEnums.userName; + case "IEC": + return RegistrationDeliveryEnums.iec; default: throw MapperException.unknownEnumValue(value); } @@ -43,6 +45,8 @@ class RegistrationDeliveryEnumsMapper return "name"; case RegistrationDeliveryEnums.userName: return "userName"; + case RegistrationDeliveryEnums.iec: + return "IEC"; } } } diff --git a/packages/registration_delivery/lib/models/entities/status.dart b/packages/registration_delivery/lib/models/entities/status.dart index ce87a526e..0268d8eb0 100644 --- a/packages/registration_delivery/lib/models/entities/status.dart +++ b/packages/registration_delivery/lib/models/entities/status.dart @@ -17,9 +17,9 @@ enum Status { beneficiaryRefused, @MappableValue("BENEFICIARY_REFERRED") beneficiaryReferred, - @MappableValue("ADMINISTERED_SUCCESS") + @MappableValue("ADMINISTRATION_SUCCESS") administeredSuccess, - @MappableValue("ADMINISTERED_FAILED") + @MappableValue("ADMINISTRATION_FAILED") administeredFailed, @MappableValue("IN_COMPLETE") inComplete, diff --git a/packages/registration_delivery/lib/models/entities/status.mapper.dart b/packages/registration_delivery/lib/models/entities/status.mapper.dart index 55ae4bcf1..de0b39e4b 100644 --- a/packages/registration_delivery/lib/models/entities/status.mapper.dart +++ b/packages/registration_delivery/lib/models/entities/status.mapper.dart @@ -37,9 +37,9 @@ class StatusMapper extends EnumMapper { return Status.beneficiaryRefused; case "BENEFICIARY_REFERRED": return Status.beneficiaryReferred; - case "ADMINISTERED_SUCCESS": + case "ADMINISTRATION_SUCCESS": return Status.administeredSuccess; - case "ADMINISTERED_FAILED": + case "ADMINISTRATION_FAILED": return Status.administeredFailed; case "IN_COMPLETE": return Status.inComplete; @@ -72,9 +72,9 @@ class StatusMapper extends EnumMapper { case Status.beneficiaryReferred: return "BENEFICIARY_REFERRED"; case Status.administeredSuccess: - return "ADMINISTERED_SUCCESS"; + return "ADMINISTRATION_SUCCESS"; case Status.administeredFailed: - return "ADMINISTERED_FAILED"; + return "ADMINISTRATION_FAILED"; case Status.inComplete: return "IN_COMPLETE"; case Status.toAdminister: diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index 06b22aa93..44ee00ed8 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -12,6 +12,7 @@ import '../../blocs/household_overview/household_overview.dart'; import '../../blocs/search_households/search_bloc_common_wrapper.dart'; import '../../blocs/search_households/search_households.dart'; import '../../models/entities/household.dart'; +import '../../models/entities/registration_delivery_enums.dart'; import '../../models/entities/status.dart'; import '../../router/registration_delivery_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; @@ -67,60 +68,107 @@ class _HouseholdOverviewPageState enableFixedButton: true, footer: Offstage( offstage: beneficiaryType == BeneficiaryType.individual, - child: BlocBuilder( - builder: (ctx, deliverInterventionState) => DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB( - kPadding, 0, kPadding, 0), - child: deliverInterventionState.tasks?.last.status == - Status.administeredSuccess.toValue() - ? Padding( - padding: const EdgeInsets.symmetric(vertical: kPadding), - child: DigitOutLineButton( - label: localizations.translate( - i18.memberCard.deliverDetailsUpdateLabel, + child: BlocBuilder( + builder: (context, serviceDefinitionState) => + BlocBuilder( + builder: (ctx, deliverInterventionState) => DigitCard( + margin: + const EdgeInsets.fromLTRB(0, kPadding, 0, 0), + padding: const EdgeInsets.fromLTRB( + kPadding, 0, kPadding, 0), + child: deliverInterventionState + .tasks?.last.status == + Status.administeredSuccess.toValue() + ? Padding( + padding: const EdgeInsets.symmetric( + vertical: kPadding), + child: DigitOutLineButton( + label: localizations.translate( + i18.memberCard + .deliverDetailsUpdateLabel, + ), + onPressed: () { + serviceDefinitionState.when( + empty: () {}, + isloading: () {}, + serviceDefinitionFetch: + (value, model) { + if (value + .where((element) => element + .code + .toString() + .contains( + '${RegistrationDeliverySingleton().selectedProject?.name}.${RegistrationDeliveryEnums.iec.toValue()}')) + .toList() + .isEmpty) { + context.router.push( + DeliverInterventionRoute(), + ); + } else { + navigateToChecklist(ctx); + } + }); + }, ), - onPressed: () async { - await context.router - .push(BeneficiaryChecklistRoute()); - }, - ), - ) - : DigitElevatedButton( - onPressed: (state.householdMemberWrapper - .projectBeneficiaries ?? - []) - .isEmpty || state.householdMemberWrapper.tasks?.last.status == Status.closeHousehold.toValue() - ? null - : () async { - final bloc = - ctx.read(); - - final projectId = - RegistrationDeliverySingleton() - .projectId!; - - bloc.add( - HouseholdOverviewReloadEvent( - projectId: projectId, - projectBeneficiaryType: - beneficiaryType, - ), - ); + ) + : DigitElevatedButton( + onPressed: (state.householdMemberWrapper + .projectBeneficiaries ?? + []) + .isEmpty || + state.householdMemberWrapper.tasks + ?.last.status == + Status.closeHousehold.toValue() + ? null + : () async { + final bloc = ctx + .read(); + + final projectId = + RegistrationDeliverySingleton() + .projectId!; + + bloc.add( + HouseholdOverviewReloadEvent( + projectId: projectId, + projectBeneficiaryType: + beneficiaryType, + ), + ); - await context.router.push( - BeneficiaryChecklistRoute()); - }, - child: Center( - child: Text( - localizations.translate( - i18.householdOverView - .householdOverViewActionText, + serviceDefinitionState.when( + empty: () {}, + isloading: () {}, + serviceDefinitionFetch: + (value, model) { + if (value + .where((element) => element + .code + .toString() + .contains( + '${RegistrationDeliverySingleton().selectedProject?.name}.${RegistrationDeliveryEnums.iec.toValue()}')) + .toList() + .isEmpty) { + context.router.push( + DeliverInterventionRoute(), + ); + } else { + navigateToChecklist(ctx); + } + }); + }, + child: Center( + child: Text( + localizations.translate( + i18.householdOverView + .householdOverViewActionText, + ), ), ), ), - ), + ), ), ), ), @@ -726,4 +774,8 @@ class _HouseholdOverviewPageState return {'textLabel': textLabel, 'color': color, 'icon': icon}; } + + void navigateToChecklist(BuildContext ctx) async { + await context.router.push(BeneficiaryChecklistRoute()); + } } diff --git a/packages/registration_delivery/lib/utils/utils.dart b/packages/registration_delivery/lib/utils/utils.dart index a88c7f437..08640ba8d 100644 --- a/packages/registration_delivery/lib/utils/utils.dart +++ b/packages/registration_delivery/lib/utils/utils.dart @@ -450,7 +450,7 @@ Status getTaskStatus(Iterable tasks) { if (tasks.isEmpty) { return Status.registered.toValue(); } else { - final mappedStatus = statusMap[tasks.last.status]; + final mappedStatus = statusMap[tasks.last.status ?? Status.registered]; if (mappedStatus != null) { return mappedStatus; } From 478a4b62a0c6c8c61413ab257577b3e747a2c328 Mon Sep 17 00:00:00 2001 From: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Date: Wed, 7 Aug 2024 16:10:51 +0530 Subject: [PATCH 071/241] Uploaded pre release for inventory-management and digit-dss (#495) --- packages/digit_dss/CHANGELOG.md | 3 +++ .../digit_dss/lib/data/remote/dashboard.dart | 2 +- packages/digit_dss/pubspec.yaml | 2 +- packages/inventory_management/CHANGELOG.md | 4 ++++ packages/inventory_management/pubspec.lock | 22 ++++++++++--------- packages/inventory_management/pubspec.yaml | 8 +++---- 6 files changed, 25 insertions(+), 16 deletions(-) diff --git a/packages/digit_dss/CHANGELOG.md b/packages/digit_dss/CHANGELOG.md index b998fdb06..8f437cc23 100644 --- a/packages/digit_dss/CHANGELOG.md +++ b/packages/digit_dss/CHANGELOG.md @@ -1,2 +1,5 @@ +## 0.0.1-dev.2 +* Added userIds and project Id filters for all dss charts + ## 0.0.1-dev.1 * Initial DSS Dashboard Release diff --git a/packages/digit_dss/lib/data/remote/dashboard.dart b/packages/digit_dss/lib/data/remote/dashboard.dart index 57679b336..1bde2078e 100644 --- a/packages/digit_dss/lib/data/remote/dashboard.dart +++ b/packages/digit_dss/lib/data/remote/dashboard.dart @@ -37,7 +37,7 @@ class DashboardRemoteRepository { json.decode(response.data)[DSSEnums.responseData.toValue()], ); - if (dashboardResponse != null) { + if (dashboardResponse.data != null) { // Write transaction to delete existing data and insert new data await isar.writeTxn(() async { await isar.dashboardResponses diff --git a/packages/digit_dss/pubspec.yaml b/packages/digit_dss/pubspec.yaml index 019badb6a..46b2a0978 100644 --- a/packages/digit_dss/pubspec.yaml +++ b/packages/digit_dss/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_dss description: "DSS Dashboard for campaign management" -version: 0.0.1-dev.1 +version: 0.0.1-dev.2 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/develop/packages/digit_dss repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/inventory_management/CHANGELOG.md b/packages/inventory_management/CHANGELOG.md index b25f0c06c..c8eb4e89b 100644 --- a/packages/inventory_management/CHANGELOG.md +++ b/packages/inventory_management/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.3-dev.2 + +* Added name of logged user to additional fields during entry + ## 1.0.3-dev.1 * Added missing DeliveryTeam Facility in record stock screen diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index 30fdc864a..5076e6b52 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -419,24 +419,26 @@ packages: digit_components: dependency: "direct main" description: - path: "../digit_components" - relative: true - source: path - version: "1.0.0+8" + name: digit_components + sha256: "90e12017934343a197a0c25bec00e5fc28e19cfbf11e522798cc39719609612c" + url: "https://pub.dev" + source: hosted + version: "1.0.0+9" digit_data_model: dependency: "direct main" description: name: digit_data_model - sha256: "0e1ec8e4d2776fcc4a8118ac85043b8876466ec7399c14880f3d585ad3586ef6" + sha256: "5559c3e652a24f3d24f324d275399f6e864ca5671285386516b94fdf9fe8724c" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.0.3-dev.3" digit_scanner: dependency: "direct main" description: - path: "../digit_scanner" - relative: true - source: path + name: digit_scanner + sha256: bc172291df5ffe720e3d471fbc5c542086b8efecbdb6e25ee737381cc47c8e05 + url: "https://pub.dev" + source: hosted version: "1.0.3-dev.1" dio: dependency: transitive @@ -1443,5 +1445,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <4.0.0" + dart: ">=3.2.0 <3.9.0" flutter: ">=3.16.0" diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index f63e21671..9e9bbd581 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -1,6 +1,6 @@ name: inventory_management description: This package offers inventory management features, allowing users to view stock reports and perform inventory resource reconciliation. -version: 1.0.3-dev.1 +version: 1.0.3-dev.2 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/inventory_management repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0+5 + digit_components: ^1.0.0+9 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 @@ -29,10 +29,10 @@ dependencies: uuid: ^3.0.6 recase: ^4.1.0 pluto_grid: ^7.0.1 - digit_scanner: ^1.0.2 + digit_scanner: ^1.0.3-dev.1 gs1_barcode_parser: ^1.0.5 auto_route: ^7.8.4 - digit_data_model: ^1.0.2 + digit_data_model: ^1.0.3-dev.3 collection: ^1.16.0 dev_dependencies: From 37afaf1e03e12820c778e399d871af567e280b0f Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Thu, 8 Aug 2024 10:35:33 +0530 Subject: [PATCH 072/241] removed the page count from filter, updated status filter pop up (#496) Co-authored-by: rachana-egov --- .../household_global_seach.dart | 35 +++++------------ .../pages/beneficiary/household_overview.dart | 8 +++- .../lib/pages/search_beneficiary.dart | 4 +- .../widgets/status_filter/status_filter.dart | 38 +++++++++++++------ 4 files changed, 43 insertions(+), 42 deletions(-) diff --git a/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart b/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart index d88e88aba..b81797778 100644 --- a/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart +++ b/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart @@ -113,15 +113,6 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { containers, ); - emit(state.copyWith( - householdMembers: containers, - loading: false, - searchQuery: event.globalSearchParams.nameSearch, - offset: - event.globalSearchParams.offset! + event.globalSearchParams.limit!, - limit: event.globalSearchParams.limit!, - totalResults: totalCount, - )); } else if (event.globalSearchParams.filter!.isNotEmpty && event.globalSearchParams.filter != null) { late List listOfBeneficiaries = []; @@ -187,15 +178,6 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { containers, ); - emit(state.copyWith( - householdMembers: containers, - loading: false, - searchQuery: event.globalSearchParams.nameSearch, - offset: - event.globalSearchParams.offset! + event.globalSearchParams.limit!, - limit: event.globalSearchParams.limit!, - totalResults: totalCount, - )); } else { late List houseHoldClientReferenceIds = []; @@ -245,15 +227,16 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { containers, ); - emit(state.copyWith( - householdMembers: containers, - loading: false, - searchQuery: event.globalSearchParams.nameSearch, - offset: event.globalSearchParams.offset! + - event.globalSearchParams.limit!, - limit: event.globalSearchParams.limit!, - totalResults: totalCount)); } + emit(state.copyWith( + householdMembers: containers, + loading: false, + searchQuery: event.globalSearchParams.nameSearch, + offset: + event.globalSearchParams.offset! + event.globalSearchParams.limit!, + limit: event.globalSearchParams.limit!, + totalResults: containers.isEmpty ? 0 : totalCount, + )); } Future _processHouseholdEntries( diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index 44ee00ed8..b0997de47 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -64,7 +64,11 @@ class _HouseholdOverviewPageState body: state.loading ? const Center(child: CircularProgressIndicator()) : ScrollableContent( - header: const BackNavigationHelpHeaderWidget(), + header: BackNavigationHelpHeaderWidget( + handleBack: (){ + context.read().add(const SearchHouseholdsEvent.clear()); + }, + ), enableFixedButton: true, footer: Offstage( offstage: beneficiaryType == BeneficiaryType.individual, @@ -89,7 +93,7 @@ class _HouseholdOverviewPageState i18.memberCard .deliverDetailsUpdateLabel, ), - onPressed: () { + onPressed: state.householdMemberWrapper.tasks?.last.status == Status.administeredSuccess.toValue() ? null :() { serviceDefinitionState.when( empty: () {}, isloading: () {}, diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index 3a4659b32..9c9678262 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -188,7 +188,7 @@ class _SearchBeneficiaryPageState child: SizedBox( height: MediaQuery.of(context).size.height * - 0.05, + 0.06, child: ListView.builder( shrinkWrap: true, scrollDirection: Axis.horizontal, @@ -221,7 +221,7 @@ class _SearchBeneficiaryPageState color: const DigitColors() .davyGray)), Text( - ' (${searchHouseholdsState.householdMembers.length}-${searchHouseholdsState.totalResults})', + ' (${searchHouseholdsState.totalResults})', style: TextStyle( color: const DigitColors() .davyGray)), diff --git a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart index 57033a26f..36bf44a50 100644 --- a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart +++ b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart @@ -10,6 +10,7 @@ import '../../utils/i18_key_constants.dart' as i18; class StatusFilter extends LocalizedStatefulWidget { final List? selectedFilters; + const StatusFilter({ super.key, super.appLocalizations, @@ -34,12 +35,25 @@ class StatusFilterState extends LocalizedState { Widget build(BuildContext context) { final theme = Theme.of(context); return SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: isLoading - ? [ Center( - child: SizedBox(height: 50, child: Text(localizations.translate(i18.common.coreCommonLoadingText), style: theme.textTheme.bodyLarge,)), - )] : [ + child: Column( + mainAxisSize: MainAxisSize.min, + children: isLoading + ? [ + Icon( + Icons.autorenew, + color: const DigitColors().burningOrange, + size: kPadding * 4, + ), + const SizedBox(height: kPadding * 2), + Center( + child: Text( + localizations.translate(i18.common.coreCommonLoadingText), + style: theme.textTheme.headlineSmall + ?.copyWith(color: const DigitColors().burningOrange), + ), + ) + ] + : [ SelectionBox( options: getFilters() ?? [], allowMultipleSelection: false, @@ -89,10 +103,10 @@ class StatusFilterState extends LocalizedState { .map((e) => e.name) .toList(); - Future.delayed(const Duration(seconds: 1), () { - Navigator.pop(context, selected); - }); - + Future.delayed(const Duration(seconds: 1), + () { + Navigator.pop(context, selected); + }); }, child: Text( localizations.translate( @@ -103,8 +117,8 @@ class StatusFilterState extends LocalizedState { ], ) ], - ), - ); + ), + ); } void selectButton(Status button) { From 5cce00b738f2650cd63dc25593974950e3a88f9a Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Thu, 8 Aug 2024 15:24:13 +0530 Subject: [PATCH 073/241] updated demo changes (#498) Co-authored-by: rachana-egov --- .../lib/pages/search_beneficiary.dart | 9 +- .../widgets/status_filter/status_filter.dart | 186 +++++++++++------- 2 files changed, 118 insertions(+), 77 deletions(-) diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index 9c9678262..13118d83d 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -470,12 +470,13 @@ class _SearchBeneficiaryPageState showFilterDialog() async { var filters = await DigitDialog.show(context, options: DigitDialogOptions( - isCloseIcon: true, + titlePadding: EdgeInsets.zero, + dialogPadding: EdgeInsets.zero, + contentPadding: EdgeInsets.zero, barrierDismissible: true, - titleIcon: Icon(getFilterIconNLabel()['icon'], + content: StatusFilter(selectedFilters: selectedFilters, titleIcon: Icon(getFilterIconNLabel()['icon'], color: const DigitColors().burningOrange), - titleText: getFilterIconNLabel()['label'], - content: StatusFilter(selectedFilters: selectedFilters), + titleText: getFilterIconNLabel()['label'], isCloseIcon: true,), )); if (filters != null && filters.isNotEmpty) { diff --git a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart index 36bf44a50..0cab882cc 100644 --- a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart +++ b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart @@ -10,10 +10,16 @@ import '../../utils/i18_key_constants.dart' as i18; class StatusFilter extends LocalizedStatefulWidget { final List? selectedFilters; + final bool isCloseIcon; + final Icon? titleIcon; + final String? titleText; const StatusFilter({ super.key, super.appLocalizations, + this.isCloseIcon = false, + this.titleIcon, + this.titleText, this.selectedFilters, }); @@ -39,84 +45,118 @@ class StatusFilterState extends LocalizedState { mainAxisSize: MainAxisSize.min, children: isLoading ? [ - Icon( - Icons.autorenew, - color: const DigitColors().burningOrange, - size: kPadding * 4, + Padding( + padding: const EdgeInsets.only(top: kPadding*2), + child: Icon( + Icons.autorenew, + color: const DigitColors().burningOrange, + size: kPadding * 4, + ), + ), + const SizedBox(height: kPadding * 2), + Center( + child: Text( + localizations.translate(i18.common.coreCommonLoadingText), + style: theme.textTheme.headlineSmall + ?.copyWith(color: const DigitColors().burningOrange), + ), + ) + ] + : [ + Row( + children: [ + if (widget.titleIcon != null) ...[ + Padding( + padding: const EdgeInsets.all(kPadding), + child: widget.titleIcon!, ), - const SizedBox(height: kPadding * 2), - Center( + ], + Expanded( + child: Padding( + padding: const EdgeInsets.symmetric(vertical: kPadding), child: Text( - localizations.translate(i18.common.coreCommonLoadingText), - style: theme.textTheme.headlineSmall - ?.copyWith(color: const DigitColors().burningOrange), + widget.titleText!, + textAlign: TextAlign.left, + style: DigitTheme.instance.mobileTheme.textTheme.headlineMedium, ), - ) - ] - : [ - SelectionBox( - options: getFilters() ?? [], - allowMultipleSelection: false, - equalWidthOptions: true, - initialSelection: [...selectedButtons], - onSelectionChanged: (selected) { - setState(() { - selectedButtons = selected; - }); - }, - valueMapper: (value) { - return localizations.translate(value.toValue().toString()); - }, + ), + ), + if (widget.isCloseIcon) + InkWell( + onTap: () => Navigator.of(context).pop(), + child: const Icon(Icons.close), + ), + ], + ), + Padding( + padding: const EdgeInsets.all(kPadding), + child: SelectionBox( + options: getFilters() ?? [], + allowMultipleSelection: false, + equalWidthOptions: true, + initialSelection: [...selectedButtons], + onSelectionChanged: (selected) { + setState(() { + selectedButtons = selected; + }); + }, + valueMapper: (value) { + return localizations.translate(value.toValue().toString()); + }, + ), + ), + const SizedBox( + height: kPadding, + ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: kPadding), + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, // Adjust button spacing + children: [ + Expanded( + child: DigitOutLineButton( + label: localizations.translate( + i18.searchBeneficiary.clearFilter, + ), + onPressed: selectedButtons.isEmpty + ? null + : () { + setState(() { + selectedButtons.clear(); + }); + }), ), const SizedBox( - height: kPadding, + width: kPadding, ), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceEvenly, // Adjust button spacing - children: [ - Expanded( - child: DigitOutLineButton( - label: localizations.translate( - i18.searchBeneficiary.clearFilter, - ), - onPressed: selectedButtons.isEmpty - ? null - : () { - setState(() { - selectedButtons.clear(); - }); - }), - ), - const SizedBox( - width: kPadding / 2, - ), - Expanded( - child: DigitElevatedButton( - onPressed: selectedButtons.isEmpty - ? null - : () { - setState(() { - isLoading = true; - }); - var selected = selectedButtons - .map((e) => e.name) - .toList(); + Expanded( + child: DigitElevatedButton( + onPressed: selectedButtons.isEmpty + ? null + : () { + setState(() { + isLoading = true; + }); + var selected = selectedButtons + .map((e) => e.name) + .toList(); - Future.delayed(const Duration(seconds: 1), - () { - Navigator.pop(context, selected); - }); - }, - child: Text( - localizations.translate( - i18.searchBeneficiary.applyFilter, - ), - )), - ), - ], - ) + Future.delayed(const Duration(seconds: 1), + () { + Navigator.pop(context, selected); + }); + }, + child: Text( + localizations.translate( + i18.searchBeneficiary.applyFilter, + ), + )), + ), ], + ), + ) + ], ), ); } @@ -134,8 +174,8 @@ class StatusFilterState extends LocalizedState { getFilters() { var finalStatues = []; finalStatues.addAll((RegistrationDeliverySingleton() - .searchHouseHoldFilter ?? - []) + .searchHouseHoldFilter ?? + []) .map((e) => Status.values.where((element) => element.toValue() == e)) .expand((element) => element) .toList()); @@ -151,4 +191,4 @@ class StatusFilterState extends LocalizedState { .toList(); }); } -} +} \ No newline at end of file From c4c3de06ac2892dcc4476440b0ce9301567eadc2 Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Wed, 14 Aug 2024 16:39:50 +0530 Subject: [PATCH 074/241] added lat and long inside additional field when user submit the checklist (#526) Co-authored-by: rachana-egov --- .../lib/pages/checklist/checklist_view.dart | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_view.dart b/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_view.dart index 8409fb29e..8556c1163 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_view.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/checklist/checklist_view.dart @@ -137,6 +137,16 @@ class _ChecklistViewPageState extends LocalizedState { } } + // Request location from LocationBloc + context.read().add(const LocationEvent.load()); + + // Wait for the location to be obtained + final locationState = + context.read().state; + double? latitude = locationState.latitude; + double? longitude = locationState.longitude; + + final shouldSubmit = await DigitDialog.show( context, options: DigitDialogOptions( @@ -203,7 +213,19 @@ class _ChecklistViewPageState extends LocalizedState { .text .toString() : null, - )); + additionalFields: ServiceAttributesAdditionalFields( + version: 1, + fields: [ + AdditionalField( + 'latitude', latitude, + ), + AdditionalField( + 'longitude', longitude, + ), + ], + ), + ) + ); } context.read().add( From 1b0a993763c12bac36531ec4f7b8fd1727d9b378 Mon Sep 17 00:00:00 2001 From: Naveen J <83631045+naveen-egov@users.noreply.github.com> Date: Mon, 19 Aug 2024 10:28:14 +0530 Subject: [PATCH 075/241] HCMPRE-221 data segration (#501) * Update closed_household_details.dart (#482) * Fixed pagination refresh issue (#481) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments --------- Co-authored-by: rachana-egov * implemented count for filter search, added todo for combination search count * Fixed count TODO: search with task status filter * Fixed search with task status filter Removed delay in delivery_summary_page.dart * added code comments * HCMPRE-165 issues (#484) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments * HCMPRE-162:: Reload issue fix for closed household and not registered * HCMPRE-165: issues fixes * updated reasons for refusals --------- Co-authored-by: rachana-egov Co-authored-by: Ramkrishna-egov * Updated publock * Added a check to avoid multiple leftJoin for projectBeneficiary - fix for multiple left join error * created new table for localization TODO: separate packages localization delegates to individual package and move the localization model to data_model package for common usage Delete localization related isar files once tested * init Boundary code wise localization.dart * create localization local repo modified module separation from query to exclude and include specified module * modified module exclude in boundary page * modified localization call for boundary selection bug where first value is localized in dropdown * removed un-required localization bloc calls * updated index value to selected language on home * Uploaded pre release for inventory-management and digit-dss * Updated delivery enums for Not delivered status * Updated status model in task to taskStatus * Updated registration delivery package * Reverted Task Model status key change * Update pubspec with latest version of packages * Summary page Type of resource locale key updated * Resolved comments * Resolved comments and unused variables * Resolved comments and unused variables * Updated version * Updated individual_global_search.dart for search * added data segration * check to enable edit delivery * added project filter * Registration delivery- Attendance management fixes (#497) * Removed captured location dialog on attendance submit * Removed stpper if deliveries length is greater than 1 * Updated digit_components and digit_data_model packages in attendance management * Updated digit_components and digit_data_model packages in attendance management * Localization loader and dialog localization fix (#505) * added dialog till localization is not loaded * fixed localization not coming issue * added a util funtion to show language loading --------- Co-authored-by: rachana-egov * updated search added project id in beneficiary search removed commented code * User uuids filter fixes for attendees local search in an attendance register (#512) * User uuids filters fixes for attendees search in a register * Removed default dashboard card from home * Sync fix --------- Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> * Added Task address mapping on refused delivery (#514) * replace and push homepage from boundary page sync dialog * updated register search query to exclude attendee and staff in limit query updated attendance and registration_delivery package * registration_delivery package update * * Added error toast for network failure (#525) * No result card added if no charts available * Updated end date for dss charts to 23:59 instead of 11:59 (#527) * task create fix - removed condition check of resources during create updated changelog of registration, closed, digit_data_model, inventory, registration_delivery --dry-run fixes * Updated stable packages for scanner, attendance and dss (#528) * updated packages to latest version digit_components version update --------- Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: rachana-egov Co-authored-by: Naveen Renati Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> --- .../lib/blocs/project/project.dart | 79 +-- .../lib/pages/boundary_selection.dart | 489 ++++++++-------- .../lib/pages/home.dart | 24 +- .../lib/pages/language_selection.dart | 122 ++-- .../lib/utils/background_service.dart | 2 +- .../lib/utils/utils.dart | 8 +- .../pubspec.lock | 44 +- .../pubspec.yaml | 16 +- packages/attendance_management/CHANGELOG.md | 10 + .../sql_store/tables/attendance.dart | 0 .../local/attendance_register.dart | 66 ++- .../lib/pages/mark_attendance.dart | 155 +++-- packages/attendance_management/pubspec.lock | 8 +- packages/attendance_management/pubspec.yaml | 6 +- packages/closed_household/CHANGELOG.md | 16 + .../lib/blocs/closed_household.dart | 4 +- .../lib/pages/closed_household_details.dart | 4 - .../closed_household/lib/utils/utils.dart | 2 - packages/closed_household/pubspec.yaml | 8 +- .../test/closed_household_test.dart | 3 - packages/digit_components/CHANGELOG.md | 6 + packages/digit_components/example/ios/Podfile | 44 ++ .../digit_components/lib/utils/utils.dart | 19 + .../lib/widgets/digit_sync_dialog.dart | 14 +- packages/digit_components/pubspec.yaml | 2 +- packages/digit_data_model/CHANGELOG.md | 13 +- .../data/repositories/local/individual.dart | 2 + packages/digit_data_model/pubspec.yaml | 2 +- packages/digit_dss/CHANGELOG.md | 10 + packages/digit_dss/README.md | 28 +- packages/digit_dss/lib/blocs/dashboard.dart | 20 +- .../lib/blocs/dashboard.freezed.dart | 198 +++++-- .../lib/pages/dashboard/dashboard.dart | 38 +- .../lib/utils/i18_key_constants.dart | 2 + .../dashboard/dashboard_metric_card.dart | 10 +- .../digit_dss/lib/widgets/no_result_card.dart | 34 ++ packages/digit_dss/pubspec.yaml | 6 +- packages/digit_scanner/CHANGELOG.md | 3 + packages/digit_scanner/example/ios/Podfile | 44 ++ packages/digit_scanner/pubspec.yaml | 4 +- packages/inventory_management/CHANGELOG.md | 10 + packages/inventory_management/pubspec.lock | 8 +- packages/inventory_management/pubspec.yaml | 6 +- packages/registration_delivery/CHANGELOG.md | 35 ++ .../beneficiary_registration.dart | 28 +- .../deliver_intervention.dart | 20 +- .../household_global_seach.dart | 10 +- .../individual_global_search.dart | 249 ++++++-- .../local/household_global_search.dart | 55 +- .../local/individual_global_search.dart | 530 +++++++++++++----- .../lib/data/repositories/local/task.dart | 16 +- .../lib/models/entities/status.dart | 5 +- .../lib/models/entities/status.mapper.dart | 8 +- .../beneficiary/beneficiary_details.dart | 1 + .../beneficiary/beneficiary_wrapper.dart | 4 +- .../beneficiary/deliver_intervention.dart | 162 +++--- .../beneficiary/delivery_summary_page.dart | 29 +- .../pages/beneficiary/dose_administered.dart | 36 +- .../pages/beneficiary/household_overview.dart | 15 +- .../pages/beneficiary/refused_delivery.dart | 129 +++-- .../beneficiary/widgets/past_delivery.dart | 16 +- .../lib/pages/search_beneficiary.dart | 52 +- .../lib/utils/global_search_parameters.dart | 2 + .../lib/utils/i18_key_constants.dart | 3 +- .../lib/utils/utils.dart | 49 +- .../lib/widgets/member_card/member_card.dart | 6 +- .../widgets/status_filter/status_filter.dart | 212 +++---- packages/registration_delivery/pubspec.lock | 8 +- packages/registration_delivery/pubspec.yaml | 6 +- tools/digit_dss_imports.dart | 3 +- 70 files changed, 2098 insertions(+), 1180 deletions(-) delete mode 100644 packages/attendance_management/lib/data/local_store/sql_store/tables/attendance.dart create mode 100644 packages/digit_components/example/ios/Podfile create mode 100644 packages/digit_dss/lib/widgets/no_result_card.dart create mode 100644 packages/digit_scanner/example/ios/Podfile diff --git a/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart b/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart index dac3861a7..e90a8453a 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart @@ -221,39 +221,41 @@ class ProjectBloc extends Bloc { userUuid: [projectStaff.userId.toString()], ), ); - final attendanceRegisters = await attendanceRemoteRepository.search( - AttendanceRegisterSearchModel( - staffId: individual.first.id, - referenceId: projectStaff.projectId, - ), - ); - await attendanceLocalRepository.bulkCreate(attendanceRegisters); - - for (final register in attendanceRegisters) { - if (register.attendees != null && - (register.attendees ?? []).isNotEmpty) { - try { - final individuals = await individualRemoteRepository.search( - IndividualSearchModel( - id: register.attendees! - .map((e) => e.individualId!) - .toList(), - ), - ); - await individualLocalRepository.bulkCreate(individuals); - final logs = await attendanceLogRemoteRepository.search( - AttendanceLogSearchModel( - registerId: register.id, - ), - ); - await attendanceLogLocalRepository.bulkCreate(logs); - } catch (_) { - emit(state.copyWith( - loading: false, - syncError: ProjectSyncErrorType.project, - )); - - return; + if (individual.isNotEmpty) { + final attendanceRegisters = await attendanceRemoteRepository.search( + AttendanceRegisterSearchModel( + staffId: individual.first.id, + referenceId: projectStaff.projectId, + ), + ); + await attendanceLocalRepository.bulkCreate(attendanceRegisters); + + for (final register in attendanceRegisters) { + if (register.attendees != null && + (register.attendees ?? []).isNotEmpty) { + try { + final individuals = await individualRemoteRepository.search( + IndividualSearchModel( + id: register.attendees! + .map((e) => e.individualId!) + .toList(), + ), + ); + await individualLocalRepository.bulkCreate(individuals); + final logs = await attendanceLogRemoteRepository.search( + AttendanceLogSearchModel( + registerId: register.id, + ), + ); + await attendanceLogLocalRepository.bulkCreate(logs); + } catch (_) { + emit(state.copyWith( + loading: false, + syncError: ProjectSyncErrorType.project, + )); + + return; + } } } } @@ -444,7 +446,7 @@ class ProjectBloc extends Bloc { .toLocal() .millisecondsSinceEpoch; final endDate = DateTime(DateTime.now().year, DateTime.now().month, - DateTime.now().day, 11, 59) + DateTime.now().day, 23, 59) .toLocal() .millisecondsSinceEpoch; final serviceRegistry = await isar.serviceRegistrys.where().findAll(); @@ -470,10 +472,11 @@ class ProjectBloc extends Bloc { ), ); List attendeesIndividualIds = []; - registers.map((r) => - r.attendees?.where((a) => a.individualId != null).map((att) { - attendeesIndividualIds.add(att.individualId.toString()); - })); + registers.forEach((r) { + r.attendees?.where((a) => a.individualId != null).forEach((att) { + attendeesIndividualIds.add(att.individualId.toString()); + }); + }); final individuals = await individualLocalRepository.search(IndividualSearchModel( id: attendeesIndividualIds, diff --git a/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart b/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart index 23977bc60..c613b479f 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart @@ -214,298 +214,301 @@ class _BoundarySelectionPageState .getSelectedLocale), code: AppSharedPreferences() .getSelectedLocale!)); - downSyncState.maybeWhen( - orElse: () => false, - loading: (isPop) => { - if (isPop) - { - Navigator.of( - context, - rootNavigator: true, - ).popUntil( - (route) => route is! PopupRoute, + Future.delayed(const Duration(milliseconds: 10), () { + downSyncState.maybeWhen( + orElse: () => false, + loading: (isPop) => { + if (isPop) + { + Navigator.of( + context, + rootNavigator: true, + ).popUntil( + (route) => route is! PopupRoute, + ), + }, + DigitSyncDialog.show( + context, + type: DigitSyncDialogType.inProgress, + label: localizations.translate( + i18.beneficiaryDetails + .dataDownloadInProgress, ), - }, - DigitSyncDialog.show( - context, - type: DigitSyncDialogType.inProgress, - label: localizations.translate( - i18.beneficiaryDetails - .dataDownloadInProgress, + barrierDismissible: false, ), - barrierDismissible: false, - ), - }, - getBatchSize: ( - batchSize, - projectId, - boundaryCode, - pendingSyncCount, - boundaryName, - ) => - context - .read() - .add( - DownSyncCheckTotalCountEvent( - projectId: context.projectId, - boundaryCode: selectedBoundary! - .value!.code - .toString(), - pendingSyncCount: - pendingSyncCount, - boundaryName: selectedBoundary - .value!.name - .toString(), - batchSize: batchSize, - ), + }, + getBatchSize: ( + batchSize, + projectId, + boundaryCode, + pendingSyncCount, + boundaryName, + ) => + context + .read() + .add( + DownSyncCheckTotalCountEvent( + projectId: context.projectId, + boundaryCode: selectedBoundary! + .value!.code + .toString(), + pendingSyncCount: + pendingSyncCount, + boundaryName: selectedBoundary + .value!.name + .toString(), + batchSize: batchSize, ), - pendingSync: () => showDownloadDialog( - context, - model: DownloadBeneficiary( - title: localizations.translate( - i18.syncDialog.pendingSyncLabel, - ), - projectId: context.projectId, - appConfiguartion: appConfiguration, - boundary: selectedBoundary!.value!.code - .toString(), - content: localizations.translate( - i18.syncDialog.pendingSyncContent, - ), - primaryButtonLabel: - localizations.translate( - i18.acknowledgementSuccess.goToHome, - ), - boundaryName: selectedBoundary.value!.name - .toString(), - ), - dialogType: - DigitProgressDialogType.pendingSync, - isPop: true, - ), - dataFound: (initialServerCount, batchSize) { - clickedStatus.value = false; - showDownloadDialog( + ), + pendingSync: () => showDownloadDialog( context, model: DownloadBeneficiary( title: localizations.translate( - initialServerCount > 0 - ? i18.beneficiaryDetails.dataFound - : i18.beneficiaryDetails - .noDataFound, + i18.syncDialog.pendingSyncLabel, ), - appConfiguartion: appConfiguration, projectId: context.projectId, + appConfiguartion: appConfiguration, boundary: selectedBoundary!.value!.code .toString(), - batchSize: batchSize, - totalCount: initialServerCount, content: localizations.translate( - initialServerCount > 0 - ? i18.beneficiaryDetails - .dataFoundContent - : i18.beneficiaryDetails - .noDataFoundContent, + i18.syncDialog.pendingSyncContent, ), primaryButtonLabel: - localizations.translate( - initialServerCount > 0 - ? i18.common.coreCommonDownload - : i18.common.coreCommonGoback, - ), - secondaryButtonLabel: - localizations.translate( - initialServerCount > 0 - ? i18.beneficiaryDetails - .proceedWithoutDownloading - : i18.acknowledgementSuccess - .goToHome, + localizations.translate( + i18.acknowledgementSuccess.goToHome, ), - boundaryName: selectedBoundary - .value!.name + boundaryName: selectedBoundary.value!.name .toString(), ), dialogType: - DigitProgressDialogType.dataFound, + DigitProgressDialogType.pendingSync, isPop: true, - ); - }, - inProgress: (syncCount, totalCount) { - downloadProgress.add( - min( - (syncCount) / (totalCount), - 1, - ), - ); - if (syncCount < 1) { + ), + dataFound: (initialServerCount, batchSize) { + clickedStatus.value = false; showDownloadDialog( context, model: DownloadBeneficiary( title: localizations.translate( - i18.beneficiaryDetails - .dataDownloadInProgress, + initialServerCount > 0 + ? i18.beneficiaryDetails.dataFound + : i18.beneficiaryDetails + .noDataFound, ), + appConfiguartion: appConfiguration, projectId: context.projectId, - boundary: selectedBoundary! - .value!.code + boundary: selectedBoundary!.value!.code .toString(), - appConfiguartion: appConfiguration, - syncCount: syncCount, - totalCount: totalCount, - prefixLabel: syncCount.toString(), - suffixLabel: totalCount.toString(), + batchSize: batchSize, + totalCount: initialServerCount, + content: localizations.translate( + initialServerCount > 0 + ? i18.beneficiaryDetails + .dataFoundContent + : i18.beneficiaryDetails + .noDataFoundContent, + ), + primaryButtonLabel: + localizations.translate( + initialServerCount > 0 + ? i18.common.coreCommonDownload + : i18.common.coreCommonGoback, + ), + secondaryButtonLabel: + localizations.translate( + initialServerCount > 0 + ? i18.beneficiaryDetails + .proceedWithoutDownloading + : i18.acknowledgementSuccess + .goToHome, + ), boundaryName: selectedBoundary .value!.name .toString(), ), dialogType: - DigitProgressDialogType.inProgress, + DigitProgressDialogType.dataFound, isPop: true, - downloadProgressController: - downloadProgress, ); - } - }, - success: (result) { - int? epochTime = result.lastSyncedTime; - - String date = - '${DigitDateUtils.getTimeFromTimestamp(epochTime!)} on ${DigitDateUtils.getDateFromTimestamp(epochTime)}'; - String dataDescription = - "${localizations.translate( - i18.beneficiaryDetails.downloadreport, - )}\n\n\n${localizations.translate( - i18.beneficiaryDetails.boundary, - )} ${result.boundaryName}\n${localizations.translate( - i18.beneficiaryDetails.status, - )} ${localizations.translate( - i18.beneficiaryDetails.downloadcompleted, - )}\n${localizations.translate( - i18.beneficiaryDetails.downloadedon, - )} $date\n${localizations.translate( - i18.beneficiaryDetails.recordsdownload, - )} ${result.totalCount}/${result.totalCount}"; - Navigator.of( - context, - rootNavigator: true, - ).popUntil( - (route) => route is! PopupRoute, - ); - context.router - .popAndPush((AcknowledgementRoute( - isDataRecordSuccess: true, - description: dataDescription, - label: localizations.translate(i18 - .acknowledgementSuccess - .dataDownloadedSuccessLabel), - descriptionTableData: { - localizations.translate( - i18.beneficiaryDetails.boundary, - ): result.boundaryName!, - localizations.translate( - i18.beneficiaryDetails.status, - ): localizations.translate( - i18.beneficiaryDetails - .downloadcompleted, + }, + inProgress: (syncCount, totalCount) { + downloadProgress.add( + min( + (syncCount) / (totalCount), + 1, ), - localizations.translate( - i18.beneficiaryDetails.downloadtime, - ): date, - localizations.translate( - i18.beneficiaryDetails - .totalrecorddownload, - ): '${result.totalCount}/${result.totalCount}', - }, - ))); - }, - failed: () => showDownloadDialog( - context, - model: DownloadBeneficiary( - title: localizations.translate( - i18.common.coreCommonDownloadFailed, - ), - appConfiguartion: appConfiguration, - projectId: context.projectId, - pendingSyncCount: pendingSyncCount, - boundary: selectedBoundary!.value!.code - .toString(), - content: localizations.translate( - i18.beneficiaryDetails.dataFoundContent, - ), - primaryButtonLabel: + ); + if (syncCount < 1) { + showDownloadDialog( + context, + model: DownloadBeneficiary( + title: localizations.translate( + i18.beneficiaryDetails + .dataDownloadInProgress, + ), + projectId: context.projectId, + boundary: selectedBoundary! + .value!.code + .toString(), + appConfiguartion: appConfiguration, + syncCount: syncCount, + totalCount: totalCount, + prefixLabel: syncCount.toString(), + suffixLabel: totalCount.toString(), + boundaryName: selectedBoundary + .value!.name + .toString(), + ), + dialogType: + DigitProgressDialogType.inProgress, + isPop: true, + downloadProgressController: + downloadProgress, + ); + } + }, + success: (result) { + int? epochTime = result.lastSyncedTime; + + String date = + '${DigitDateUtils.getTimeFromTimestamp(epochTime!)} on ${DigitDateUtils.getDateFromTimestamp(epochTime)}'; + String dataDescription = + "${localizations.translate( + i18.beneficiaryDetails.downloadreport, + )}\n\n\n${localizations.translate( + i18.beneficiaryDetails.boundary, + )} ${result.boundaryName}\n${localizations.translate( + i18.beneficiaryDetails.status, + )} ${localizations.translate( + i18.beneficiaryDetails.downloadcompleted, + )}\n${localizations.translate( + i18.beneficiaryDetails.downloadedon, + )} $date\n${localizations.translate( + i18.beneficiaryDetails.recordsdownload, + )} ${result.totalCount}/${result.totalCount}"; + Navigator.of( + context, + rootNavigator: true, + ).popUntil( + (route) => route is! PopupRoute, + ); + context.router + .popAndPush((AcknowledgementRoute( + isDataRecordSuccess: true, + description: dataDescription, + label: localizations.translate(i18 + .acknowledgementSuccess + .dataDownloadedSuccessLabel), + descriptionTableData: { localizations.translate( - i18.syncDialog.retryButtonLabel, - ), - secondaryButtonLabel: + i18.beneficiaryDetails.boundary, + ): result.boundaryName!, localizations.translate( - i18.beneficiaryDetails - .proceedWithoutDownloading, - ), - boundaryName: selectedBoundary.value!.name - .toString(), - ), - dialogType: DigitProgressDialogType.failed, - isPop: true, - ), - totalCountCheckFailed: () => - showDownloadDialog( - context, - model: DownloadBeneficiary( - title: localizations.translate( - i18.beneficiaryDetails - .unableToCheckDataInServer, - ), - appConfiguartion: appConfiguration, - projectId: context.projectId, - pendingSyncCount: pendingSyncCount, - boundary: selectedBoundary!.value!.code - .toString(), - primaryButtonLabel: + i18.beneficiaryDetails.status, + ): localizations.translate( + i18.beneficiaryDetails + .downloadcompleted, + ), localizations.translate( - i18.syncDialog.retryButtonLabel, - ), - secondaryButtonLabel: + i18.beneficiaryDetails.downloadtime, + ): date, localizations.translate( - i18.beneficiaryDetails - .proceedWithoutDownloading, - ), - boundaryName: selectedBoundary.value!.name - .toString(), - ), - dialogType: - DigitProgressDialogType.checkFailed, - isPop: true, - ), - insufficientStorage: () { - clickedStatus.value = false; - showDownloadDialog( + i18.beneficiaryDetails + .totalrecorddownload, + ): '${result.totalCount}/${result.totalCount}', + }, + ))); + }, + failed: () => showDownloadDialog( context, model: DownloadBeneficiary( title: localizations.translate( - i18.beneficiaryDetails - .insufficientStorage, + i18.common.coreCommonDownloadFailed, ), - content: localizations.translate(i18 - .beneficiaryDetails - .insufficientStorageContent), - projectId: context.projectId, appConfiguartion: appConfiguration, + projectId: context.projectId, + pendingSyncCount: pendingSyncCount, boundary: selectedBoundary!.value!.code .toString(), + content: localizations.translate( + i18.beneficiaryDetails.dataFoundContent, + ), primaryButtonLabel: - localizations.translate( - i18.common.coreCommonOk, + localizations.translate( + i18.syncDialog.retryButtonLabel, ), - boundaryName: selectedBoundary - .value!.name + secondaryButtonLabel: + localizations.translate( + i18.beneficiaryDetails + .proceedWithoutDownloading, + ), + boundaryName: selectedBoundary.value!.name .toString(), ), - dialogType: DigitProgressDialogType - .insufficientStorage, + dialogType: DigitProgressDialogType.failed, isPop: true, - ); - }, - ); + ), + totalCountCheckFailed: () => + showDownloadDialog( + context, + model: DownloadBeneficiary( + title: localizations.translate( + i18.beneficiaryDetails + .unableToCheckDataInServer, + ), + appConfiguartion: appConfiguration, + projectId: context.projectId, + pendingSyncCount: pendingSyncCount, + boundary: selectedBoundary!.value!.code + .toString(), + primaryButtonLabel: + localizations.translate( + i18.syncDialog.retryButtonLabel, + ), + secondaryButtonLabel: + localizations.translate( + i18.beneficiaryDetails + .proceedWithoutDownloading, + ), + boundaryName: selectedBoundary.value!.name + .toString(), + ), + dialogType: + DigitProgressDialogType.checkFailed, + isPop: true, + ), + insufficientStorage: () { + clickedStatus.value = false; + showDownloadDialog( + context, + model: DownloadBeneficiary( + title: localizations.translate( + i18.beneficiaryDetails + .insufficientStorage, + ), + content: localizations.translate(i18 + .beneficiaryDetails + .insufficientStorageContent), + projectId: context.projectId, + appConfiguartion: appConfiguration, + boundary: selectedBoundary!.value!.code + .toString(), + primaryButtonLabel: + localizations.translate( + i18.common.coreCommonOk, + ), + boundaryName: selectedBoundary + .value!.name + .toString(), + ), + dialogType: DigitProgressDialogType + .insufficientStorage, + isPop: true, + ); + }, + ); + }); + }, child: DigitCard( margin: const EdgeInsets.fromLTRB( diff --git a/apps/health_campaign_field_worker_app/lib/pages/home.dart b/apps/health_campaign_field_worker_app/lib/pages/home.dart index 1dffb595d..ce8e91436 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/home.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/home.dart @@ -496,20 +496,6 @@ class _HomePageState extends LocalizedState { final Map homeItemsShowcaseMap = { // INFO : Need to add showcase keys of package Here - i18.home.dashboard: homeShowcaseData.dashBoard.showcaseKey, - - i18.home.dashboard: homeShowcaseData.dashBoard.showcaseKey, - - i18.home.dashboard: homeShowcaseData.dashBoard.showcaseKey, - - i18.home.dashboard: homeShowcaseData.dashBoard.showcaseKey, - - i18.home.dashboard: homeShowcaseData.dashBoard.showcaseKey, - - i18.home.dashboard: homeShowcaseData.dashBoard.showcaseKey, - - i18.home.dashboard: homeShowcaseData.dashBoard.showcaseKey, - i18.home.beneficiaryLabel: homeShowcaseData.distributorBeneficiaries.showcaseKey, i18.home.manageStockLabel: @@ -553,8 +539,7 @@ class _HomePageState extends LocalizedState { .map((e) => e.displayName) .toList() .contains(element) || - element == i18.home.db || - element == i18.home.dashboard) + element == i18.home.db) .toList(); final showcaseKeys = filteredLabels @@ -650,8 +635,11 @@ class _HomePageState extends LocalizedState { void setPackagesSingleton(BuildContext context) { context.read().state.maybeWhen( orElse: () {}, - initialized: (AppConfiguration appConfiguration, List serviceRegistry, - DashboardConfigSchema? dashboardConfigSchema,) { + initialized: ( + AppConfiguration appConfiguration, + List serviceRegistry, + DashboardConfigSchema? dashboardConfigSchema, + ) { loadLocalization(context, appConfiguration); // INFO : Need to add singleton of package Here RegistrationDeliverySingleton().setInitialData( diff --git a/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart b/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart index 601e5350c..a3ffbb095 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart @@ -1,5 +1,6 @@ import 'package:digit_components/digit_components.dart'; import 'package:digit_components/models/digit_row_card/digit_row_card_model.dart'; +import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:package_info_plus/package_info_plus.dart'; @@ -8,13 +9,21 @@ import '../blocs/app_initialization/app_initialization.dart'; import '../blocs/localization/app_localization.dart'; import '../blocs/localization/localization.dart'; import '../router/app_router.dart'; +import '../utils/constants.dart'; import '../utils/i18_key_constants.dart' as i18; import '../utils/utils.dart'; @RoutePage() -class LanguageSelectionPage extends StatelessWidget { +class LanguageSelectionPage extends StatefulWidget { const LanguageSelectionPage({super.key}); + @override + _LanguageSelectionPageState createState() => _LanguageSelectionPageState(); +} + +class _LanguageSelectionPageState extends State { + bool isDialogVisible = false; + @override Widget build(BuildContext context) { final theme = Theme.of(context); @@ -36,56 +45,79 @@ class LanguageSelectionPage extends StatelessWidget { return const Offstage(); } - return BlocBuilder( + return BlocConsumer( + listener: (context, state) { + if (state.loading && !isDialogVisible) { + isDialogVisible = true; + DigitComponentsUtils().showLocalizationLoadingDialog( + context, + DigitSyncDialogType.inProgress, + ); + } else if (!state.loading && isDialogVisible) { + isDialogVisible = false; + DigitComponentsUtils().hideLocalizationLoadingDialog(context); + } + }, builder: (context, localizationState) { + if (localizationState.loading && !isDialogVisible) { + WidgetsBinding.instance.addPostFrameCallback((_) { + isDialogVisible = true; + DigitComponentsUtils().showLocationCapturingDialog( + context, + '', + DigitSyncDialogType.inProgress, + ); + }); + } + return localizationModulesList != null ? DigitLanguageCard( - digitRowCardItems: languages.map((e) { - var index = languages.indexOf(e); + digitRowCardItems: languages.map((e) { + var index = languages.indexOf(e); - return DigitRowCardModel( - label: e.label, - value: e.value, - isSelected: getSelectedLanguage( - state, - index, - ), - ); - }).toList(), - onLanguageChange: (value) async { - final info = await PackageInfo.fromPlatform(); - Constants().initialize(info.version); - int index = languages.indexWhere( - (ele) => - ele.value.toString() == - value.value.toString(), - ); + return DigitRowCardModel( + label: e.label, + value: e.value, + isSelected: getSelectedLanguage( + state, + index, + ), + ); + }).toList(), + onLanguageChange: (value) async { + final info = await PackageInfo.fromPlatform(); + Constants().initialize(info.version); + int index = languages.indexWhere( + (ele) => + ele.value.toString() == + value.value.toString(), + ); - context.read().add( - LocalizationEvent.onLoadLocalization( - module: localizationModulesList - .map((e) => e.name.toString()) - .join(',') - .toString(), - tenantId: appConfig.tenantId ?? "default", - locale: value.value.toString(), - path: Constants.localizationApiPath, - ), - ); + context.read().add( + LocalizationEvent.onLoadLocalization( + module: localizationModulesList + .map((e) => e.name.toString()) + .join(',') + .toString(), + tenantId: appConfig.tenantId ?? "default", + locale: value.value.toString(), + path: Constants.localizationApiPath, + ), + ); - context.read().add( - OnUpdateLocalizationIndexEvent( - index: index, - code: value.value.toString(), - ), - ); - }, - onLanguageSubmit: () => context.router.push( - LoginRoute(), - ), - languageSubmitLabel: AppLocalizations.of(context) - .translate(i18.common.coreCommonContinue), - ) + context.read().add( + OnUpdateLocalizationIndexEvent( + index: index, + code: value.value.toString(), + ), + ); + }, + onLanguageSubmit: () => context.router.push( + LoginRoute(), + ), + languageSubmitLabel: AppLocalizations.of(context) + .translate(i18.common.coreCommonContinue), + ) : const Offstage(); }, ); diff --git a/apps/health_campaign_field_worker_app/lib/utils/background_service.dart b/apps/health_campaign_field_worker_app/lib/utils/background_service.dart index 7b6e29274..9d718f82e 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/background_service.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/background_service.dart @@ -176,7 +176,7 @@ void onStart(ServiceInstance service) async { flutterLocalNotificationsPlugin.show( 888, 'Auto Sync', - 'Speed : ${speedArray.first != null ? double.tryParse(speedArray.first.toString())?.toStringAsFixed(2) ?? '0' : '0'}Mb/ps - BatchSize : $configuredBatchSize', + 'Speed : ${speedArray.isNotEmpty && speedArray.firstOrNull != null ? double.tryParse(speedArray.first.toString())?.toStringAsFixed(2) ?? '0' : '0'}Mb/ps - BatchSize : $configuredBatchSize', const NotificationDetails( android: AndroidNotificationDetails( "my_foreground", diff --git a/apps/health_campaign_field_worker_app/lib/utils/utils.dart b/apps/health_campaign_field_worker_app/lib/utils/utils.dart index b4c11226c..526e26ab1 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/utils.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/utils.dart @@ -264,7 +264,7 @@ void showDownloadDialog( ); } else { Navigator.of(context, rootNavigator: true).pop(); - context.router.maybePop(); + context.router.replaceAll([HomeRoute()]); } }, ), @@ -272,7 +272,7 @@ void showDownloadDialog( label: model.secondaryButtonLabel ?? '', action: (ctx) { Navigator.of(context, rootNavigator: true).pop(); - context.router.maybePop(); + context.router.replaceAll([HomeRoute()]); }, ), ); @@ -297,7 +297,7 @@ void showDownloadDialog( action: (ctx) { if (dialogType == DigitProgressDialogType.pendingSync) { Navigator.of(context, rootNavigator: true).pop(); - context.router.popUntilRouteWithName(HomeRoute.name); + context.router.replaceAll([HomeRoute()]); } else { if ((model.totalCount ?? 0) > 0) { context.read().add( @@ -324,7 +324,7 @@ void showDownloadDialog( label: model.secondaryButtonLabel ?? '', action: (ctx) { Navigator.of(context, rootNavigator: true).pop(); - context.router.popUntilRouteWithName(HomeRoute.name); + context.router.replaceAll([HomeRoute()]); }, ) : null, diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index c0fdd6e2e..175822cd2 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -69,10 +69,10 @@ packages: dependency: "direct main" description: name: attendance_management - sha256: "7a3719dcca80be6f9475bea2b1e5226e67fcc60f3c3c55d849aa4f7216512a43" + sha256: b14b538f2d2900c5e4f6a12fefef615d08905398338deb5ea6d67f45f52c8ef0 url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.0.2" audioplayers: dependency: "direct main" description: @@ -340,10 +340,11 @@ packages: closed_household: dependency: "direct main" description: - path: "../../packages/closed_household" - relative: true - source: path - version: "0.0.0-dev.2" + name: closed_household + sha256: "7d3ae93e5702df79b1fb88720bba30fe4b8a603dd2b128a53bbf77d0a8a1dba4" + url: "https://pub.dev" + source: hosted + version: "1.0.1" code_builder: dependency: transitive description: @@ -491,25 +492,26 @@ packages: dependency: "direct main" description: name: digit_components - sha256: "90e12017934343a197a0c25bec00e5fc28e19cfbf11e522798cc39719609612c" + sha256: "01320d4c72829045e789d1a56e23ff2bd85dad6a1831d27bd507a1acaceae17e" url: "https://pub.dev" source: hosted - version: "1.0.0+9" + version: "1.0.1" digit_data_model: dependency: "direct main" description: name: digit_data_model - sha256: "5559c3e652a24f3d24f324d275399f6e864ca5671285386516b94fdf9fe8724c" + sha256: e1ea907e9cb7d521341325ac1b1b98fad8bd5e5ca1bab7f7c18ed02ccd2f2c2b url: "https://pub.dev" source: hosted - version: "1.0.3-dev.3" + version: "1.0.3" digit_dss: dependency: "direct main" description: - path: "../../packages/digit_dss" - relative: true - source: path - version: "0.0.1-dev.1" + name: digit_dss + sha256: c21036372bb4dcb2b888024b488f8817997b9514e442c6f5c1ccf89d97537636 + url: "https://pub.dev" + source: hosted + version: "1.0.0" digit_firebase_services: dependency: "direct main" description: @@ -521,10 +523,10 @@ packages: dependency: "direct main" description: name: digit_scanner - sha256: bc172291df5ffe720e3d471fbc5c542086b8efecbdb6e25ee737381cc47c8e05 + sha256: "1f1fe3ca8f038a3c93cd52491cf72c0b0e45c88b14580243d47eac59672e67ea" url: "https://pub.dev" source: hosted - version: "1.0.3-dev.1" + version: "1.0.3" digit_showcase: dependency: "direct main" description: @@ -1116,10 +1118,10 @@ packages: dependency: "direct main" description: name: inventory_management - sha256: "2be2d09552432266bef3c11f2cd6d12ce83f39339c925d350aeda764c2acfef9" + sha256: "5bad99832b9d828839f69e0288ad8fe06188e6504301c298f5dc3258cf677c75" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.0.3+1" io: dependency: transitive description: @@ -1540,10 +1542,10 @@ packages: dependency: "direct main" description: name: registration_delivery - sha256: c4bc83d994d8006a3f1a3c5a90cd6d4f07873b01c14a16fdc06e83d99946face + sha256: d63c9ea4fe5a5eedb9bfe635c5d84f8c88a43c2b85acc4701e6faf60f2b29323 url: "https://pub.dev" source: hosted - version: "1.0.3-dev.5" + version: "1.0.3" remove_emoji_input_formatter: dependency: transitive description: @@ -2078,5 +2080,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" + dart: ">=3.2.3 <3.9.0" flutter: ">=3.16.0" diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index fbfd4cac8..50aba039c 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -18,7 +18,7 @@ dependencies: sqlite3_flutter_libs: ^0.5.10 path_provider: ^2.0.11 path: ^1.8.2 - digit_components: ^1.0.0+7 + digit_components: ^1.0.1 auto_route: ^7.8.4 flutter_bloc: ^8.1.1 collection: ^1.16.0 @@ -65,15 +65,15 @@ dependencies: disk_space: ^0.2.1 google_mlkit_barcode_scanning: ^0.10.0 camera: ^0.10.5+7 - attendance_management: ^1.0.1 - digit_scanner: ^1.0.3-dev.1 - inventory_management: ^1.0.2 + attendance_management: ^1.0.2 + digit_scanner: ^1.0.3 + inventory_management: ^1.0.3+1 referral_reconciliation: ^1.0.2 - digit_data_model: ^1.0.3-dev.3 - registration_delivery: ^1.0.3-dev.5 + digit_data_model: ^1.0.3 + registration_delivery: ^1.0.3 disable_battery_optimization: ^1.1.1 - digit_dss: ^0.0.1-dev.1 - closed_household: ^0.0.0-dev.2 + digit_dss: ^1.0.0 + closed_household: ^1.0.1 dev_dependencies: flutter_test: diff --git a/packages/attendance_management/CHANGELOG.md b/packages/attendance_management/CHANGELOG.md index 2beff873a..db47a0cc4 100644 --- a/packages/attendance_management/CHANGELOG.md +++ b/packages/attendance_management/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.2 +* Capturing location on attendance submit +* Pagination issue fix to fetch all attendees + ## 0.0.0-dev.1 * Initial release of the package @@ -41,3 +45,9 @@ ## 1.0.1+1 * Get Precise location on Submitting latitude longitude details + +## 1.0.2-dev.1 +* Removed captured Location Dialog on attendance submit + +## 1.0.2-dev.2 +* Updated registers search to fetch all attendees to avoid limit on overall query \ No newline at end of file diff --git a/packages/attendance_management/lib/data/local_store/sql_store/tables/attendance.dart b/packages/attendance_management/lib/data/local_store/sql_store/tables/attendance.dart deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/attendance_management/lib/data/repositories/local/attendance_register.dart b/packages/attendance_management/lib/data/repositories/local/attendance_register.dart index 9de7a4b0e..1d8015533 100644 --- a/packages/attendance_management/lib/data/repositories/local/attendance_register.dart +++ b/packages/attendance_management/lib/data/repositories/local/attendance_register.dart @@ -16,41 +16,55 @@ class AttendanceLocalRepository extends LocalRepository>(() async { - final selectQuery = sql.select(sql.attendanceRegister).join([ + var attendanceRegisterQuery = sql.select(sql.attendanceRegister).join([]); + + if (query.limit != null && query.offSet != null) { + attendanceRegisterQuery.limit(query.limit!, offset: query.offSet); + } + + attendanceRegisterQuery = attendanceRegisterQuery + ..where(buildAnd([ + if (query.id != null) sql.attendanceRegister.id.equals(query.id!), + if (query.referenceId != null) + sql.attendanceRegister.referenceId.equals(query.referenceId!), + ])); + + final attendanceRegisterResults = await attendanceRegisterQuery.get(); + final registerIds = attendanceRegisterResults.map((e) { + return e.readTable(sql.attendanceRegister).id!; + }).toList(); + + var selectQuery = sql.select(sql.attendanceRegister).join([ leftOuterJoin( sql.staff, - sql.staff.registerId.equalsExp( - sql.attendanceRegister.id, - ), + sql.staff.registerId.equalsExp(sql.attendanceRegister.id), ), leftOuterJoin( sql.attendee, - sql.attendee.registerId.equalsExp( - sql.attendanceRegister.id, - ), + sql.attendee.registerId.equalsExp(sql.attendanceRegister.id), ), ]); - if (query.limit != null && query.offSet != null) { - selectQuery.limit(query.limit!, offset: query.offSet); - } + selectQuery = selectQuery + ..where(sql.attendanceRegister.id.isIn(registerIds)); - final results = await (selectQuery - ..where(buildAnd([ - if (query.id != null) - sql.attendanceRegister.id.equals( - query.id!, - ), - if (query.staffId != null) - sql.staff.userId.equals( - query.staffId!, - ), - if (query.referenceId != null) - sql.attendanceRegister.referenceId.equals( - query.referenceId!, - ), - ]))) - .get(); + selectQuery = selectQuery + ..where(buildAnd([ + if (query.id != null) + sql.attendanceRegister.id.equals( + query.id!, + ), + if (query.staffId != null) + sql.staff.userId.equals( + query.staffId!, + ), + if (query.referenceId != null) + sql.attendanceRegister.referenceId.equals( + query.referenceId!, + ), + ])); + + final results = await selectQuery.get(); final registerMap = {}; diff --git a/packages/attendance_management/lib/pages/mark_attendance.dart b/packages/attendance_management/lib/pages/mark_attendance.dart index 582ac3846..3e63719f5 100644 --- a/packages/attendance_management/lib/pages/mark_attendance.dart +++ b/packages/attendance_management/lib/pages/mark_attendance.dart @@ -449,40 +449,64 @@ class _MarkAttendancePageState extends State { DigitSyncDialogType.inProgress); Future.delayed(const Duration(seconds: 2), () async { DigitComponentsUtils().hideLocationDialog(context); - await DigitSyncDialog.show(context, - type: DigitSyncDialogType.complete, - label: localizations.translate(i18.common.locationCaptured), - primaryAction: DigitDialogActions( - label: localizations.translate(i18.common.ctaProceed), - action: (ctx) async { - state.maybeWhen( - orElse: () {}, - loaded: ( - attendanceSearchModelList, - attendanceCollectionModel, - offsetData, - currentOffset, - countData, - limitData, - flag, - ) async { - if (((attendanceCollectionModel ?? []).any( - (a) => a.status == -1 || a.status == null) && - type != EnumValues.draft.toValue()) || - ((attendanceCollectionModel ?? []).every( - (a) => a.status == -1 || a.status == null) && - type == EnumValues.draft.toValue())) { - DigitToast.show( - context, - options: DigitToastOptions( - localizations.translate( - i18.attendance.pleaseMarkAttForIndividuals), - true, - theme, - ), - ); - } else { - if (type == EnumValues.draft.toValue()) { + state.maybeWhen( + orElse: () {}, + loaded: ( + attendanceSearchModelList, + attendanceCollectionModel, + offsetData, + currentOffset, + countData, + limitData, + flag, + ) async { + if (((attendanceCollectionModel ?? []) + .any((a) => a.status == -1 || a.status == null) && + type != EnumValues.draft.toValue()) || + ((attendanceCollectionModel ?? []) + .every((a) => a.status == -1 || a.status == null) && + type == EnumValues.draft.toValue())) { + DigitToast.show( + context, + options: DigitToastOptions( + localizations + .translate(i18.attendance.pleaseMarkAttForIndividuals), + true, + theme, + ), + ); + } else { + if (type == EnumValues.draft.toValue()) { + individualLogBloc?.add(SaveAsDraftEvent( + entryTime: widget.entryTime, + exitTime: widget.exitTime, + selectedDate: widget.dateTime, + isSingleSession: widget.session == null, + createOplog: type != EnumValues.draft.toValue(), + latitude: latitude, + longitude: longitude, + )); + DigitToast.show( + context, + options: DigitToastOptions( + localizations.translate(i18.attendance.draftSavedMessage), + false, + theme, + ), + ); + } else { + DigitDialog.show(context, + options: DigitDialogOptions( + titleText: localizations.translate( + i18.attendance.confirmationLabel, + ), + contentText: + '${localizations.translate(i18.attendance.confirmationDesc)} \n\n${localizations.translate(i18.attendance.confirmationDescNote)}', + primaryAction: DigitDialogActions( + label: localizations.translate( + i18.attendance.proceed, + ), + action: (context) { individualLogBloc?.add(SaveAsDraftEvent( entryTime: widget.entryTime, exitTime: widget.exitTime, @@ -492,54 +516,21 @@ class _MarkAttendancePageState extends State { latitude: latitude, longitude: longitude, )); - DigitToast.show( - context, - options: DigitToastOptions( - localizations - .translate(i18.attendance.draftSavedMessage), - false, - theme, - ), - ); - } else { - DigitDialog.show(context, - options: DigitDialogOptions( - titleText: localizations.translate( - i18.attendance.confirmationLabel, - ), - contentText: - '${localizations.translate(i18.attendance.confirmationDesc)} \n\n${localizations.translate(i18.attendance.confirmationDescNote)}', - primaryAction: DigitDialogActions( - label: localizations.translate( - i18.attendance.proceed, - ), - action: (context) { - individualLogBloc?.add(SaveAsDraftEvent( - entryTime: widget.entryTime, - exitTime: widget.exitTime, - selectedDate: widget.dateTime, - isSingleSession: widget.session == null, - createOplog: - type != EnumValues.draft.toValue(), - latitude: latitude, - longitude: longitude, - )); - Navigator.of(context).pop(); - navigateToAcknowledgement(localizations); - }, - ), - secondaryAction: DigitDialogActions( - label: localizations - .translate(i18.common.coreCommonGoback), - action: (context) { - Navigator.of(context).pop(); - }, - ), - )); - } - } - }); - })); + Navigator.of(context).pop(); + navigateToAcknowledgement(localizations); + }, + ), + secondaryAction: DigitDialogActions( + label: localizations + .translate(i18.common.coreCommonGoback), + action: (context) { + Navigator.of(context).pop(); + }, + ), + )); + } + } + }); }); } diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index f38c4a587..77b186a33 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -316,18 +316,18 @@ packages: dependency: "direct main" description: name: digit_components - sha256: "86ea75e325beb0ff8dff70e8734c9626597b49cc91c5d6fa960274f271dfb1a7" + sha256: "90e12017934343a197a0c25bec00e5fc28e19cfbf11e522798cc39719609612c" url: "https://pub.dev" source: hosted - version: "1.0.0+8" + version: "1.0.0+9" digit_data_model: dependency: "direct main" description: name: digit_data_model - sha256: "0e1ec8e4d2776fcc4a8118ac85043b8876466ec7399c14880f3d585ad3586ef6" + sha256: "5559c3e652a24f3d24f324d275399f6e864ca5671285386516b94fdf9fe8724c" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.0.3-dev.3" dio: dependency: "direct main" description: diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index 824586ad1..1838be863 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -1,6 +1,6 @@ name: attendance_management description: Digit UI attendance management specification - This tool is designed for tracking user attendance with customizable session counts per day. -version: 1.0.1+1 +version: 1.0.2 homepage: "https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/attendance_management" repository: "https://github.com/egovernments/health-campaign-field-worker-app" @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0+2 + digit_components: ^1.0.0+9 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 @@ -27,7 +27,7 @@ dependencies: path: ^1.8.2 drift_db_viewer: ^2.0.0 auto_route: ^7.8.4 - digit_data_model: ^1.0.2 + digit_data_model: ^1.0.3 connectivity_plus: ^5.0.2 collection: ^1.16.0 location: ^5.0.0 diff --git a/packages/closed_household/CHANGELOG.md b/packages/closed_household/CHANGELOG.md index abf20eb51..53f7cc70c 100644 --- a/packages/closed_household/CHANGELOG.md +++ b/packages/closed_household/CHANGELOG.md @@ -1,3 +1,19 @@ +## 1.0.1 + +* Updated digit_data_model and registration_delivery + +## 1.0.0 + +* Introducing new closed household for IRS campaign + +## 0.0.0-dev.4 + +* Updated registration_delivery package and digit_data_model package + +## 0.0.0-dev.3 + +* Updated registration_delivery package + ## 0.0.0-dev.2 * Closed Household flow change using registration_delivery models to register a closed household diff --git a/packages/closed_household/lib/blocs/closed_household.dart b/packages/closed_household/lib/blocs/closed_household.dart index ef5fc8c2c..9d85ae83b 100644 --- a/packages/closed_household/lib/blocs/closed_household.dart +++ b/packages/closed_household/lib/blocs/closed_household.dart @@ -6,11 +6,11 @@ import 'package:digit_data_model/utils/typedefs.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:registration_delivery/models/entities/status.dart' - as reg_status; import 'package:registration_delivery/models/entities/household.dart'; import 'package:registration_delivery/models/entities/household_member.dart'; import 'package:registration_delivery/models/entities/project_beneficiary.dart'; +import 'package:registration_delivery/models/entities/status.dart' + as reg_status; import 'package:registration_delivery/models/entities/task.dart'; import 'package:registration_delivery/utils/typedefs.dart'; diff --git a/packages/closed_household/lib/pages/closed_household_details.dart b/packages/closed_household/lib/pages/closed_household_details.dart index e13dd7900..5058973c6 100644 --- a/packages/closed_household/lib/pages/closed_household_details.dart +++ b/packages/closed_household/lib/pages/closed_household_details.dart @@ -1,15 +1,11 @@ import 'package:auto_route/auto_route.dart'; import 'package:closed_household/closed_household.dart'; -import 'package:closed_household/utils/extensions/extensions.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_components/widgets/atoms/text_block.dart'; -import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; -import 'package:registration_delivery/models/entities/household.dart'; -import 'package:registration_delivery/models/entities/household_member.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../router/closed_household_router.gm.dart'; diff --git a/packages/closed_household/lib/utils/utils.dart b/packages/closed_household/lib/utils/utils.dart index e3533acc3..4c0de8bf5 100644 --- a/packages/closed_household/lib/utils/utils.dart +++ b/packages/closed_household/lib/utils/utils.dart @@ -1,8 +1,6 @@ // create a singleton class for Closed Household package where set data and get data methods are defined import 'package:digit_data_model/data_model.dart'; -import 'package:digit_data_model/models/entities/boundary.dart'; -import 'package:digit_data_model/utils/utils.dart'; import 'package:reactive_forms/reactive_forms.dart'; /// This class contains custom validators for form controls. diff --git a/packages/closed_household/pubspec.yaml b/packages/closed_household/pubspec.yaml index 4700ad607..26dd71e26 100644 --- a/packages/closed_household/pubspec.yaml +++ b/packages/closed_household/pubspec.yaml @@ -1,6 +1,6 @@ name: closed_household description: This package enables health facility workers to mark household closed and update. -version: 0.0.0-dev.2 +version: 1.0.1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/develop/packages/closed_household repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0+8 + digit_components: ^1.0.0+9 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 @@ -32,7 +32,7 @@ dependencies: digit_scanner: ^1.0.2 gs1_barcode_parser: ^1.0.5 auto_route: ^7.8.4 - digit_data_model: ^1.0.3-dev.2 + digit_data_model: ^1.0.3 package_info_plus: ^5.0.1 digit_showcase: ^1.0.0 collection: ^1.16.0 @@ -40,7 +40,7 @@ dependencies: stream_transform: ^2.1.0 async: ^2.11.0 formula_parser: ^2.0.1 - registration_delivery: ^1.0.3-dev.3 + registration_delivery: ^1.0.3 dev_dependencies: diff --git a/packages/closed_household/test/closed_household_test.dart b/packages/closed_household/test/closed_household_test.dart index 556802868..bc833007d 100644 --- a/packages/closed_household/test/closed_household_test.dart +++ b/packages/closed_household/test/closed_household_test.dart @@ -1,6 +1,3 @@ -import 'package:flutter_test/flutter_test.dart'; - -import 'package:closed_household/closed_household.dart'; void main() { //TODO: add tests diff --git a/packages/digit_components/CHANGELOG.md b/packages/digit_components/CHANGELOG.md index fab5d7a18..8ad9209a7 100644 --- a/packages/digit_components/CHANGELOG.md +++ b/packages/digit_components/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.0.1 +* Added new loader dialog + +## 1.0.0+9 +* Added maximum validation for digit_integer_form_picker + ## 1.0.0+8 * Added close icon button for digit_dialog diff --git a/packages/digit_components/example/ios/Podfile b/packages/digit_components/example/ios/Podfile new file mode 100644 index 000000000..fdcc671eb --- /dev/null +++ b/packages/digit_components/example/ios/Podfile @@ -0,0 +1,44 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '11.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/packages/digit_components/lib/utils/utils.dart b/packages/digit_components/lib/utils/utils.dart index 7c54568be..03e3d4ef5 100644 --- a/packages/digit_components/lib/utils/utils.dart +++ b/packages/digit_components/lib/utils/utils.dart @@ -19,4 +19,23 @@ class DigitComponentsUtils { label: label, ); } + + void hideLocalizationLoadingDialog(BuildContext context) { + Navigator.of( + context, + rootNavigator: true, + ).popUntil( + (route) => route is! PopupRoute, + ); + } + + void showLocalizationLoadingDialog( + BuildContext context, DigitSyncDialogType dialogType) { + DigitSyncDialog.show( + context, + type: dialogType, + ); + } + + static const String noResultSvg = 'assets/images/no_result.svg'; } diff --git a/packages/digit_components/lib/widgets/digit_sync_dialog.dart b/packages/digit_components/lib/widgets/digit_sync_dialog.dart index e4d2556e2..fd03a7d5d 100644 --- a/packages/digit_components/lib/widgets/digit_sync_dialog.dart +++ b/packages/digit_components/lib/widgets/digit_sync_dialog.dart @@ -6,8 +6,7 @@ class DigitSyncDialog { BuildContext context, { Key? key, bool barrierDismissible = false, - required DigitSyncDialogType type, - required String label, + required DigitSyncDialogType type, String? label, DigitDialogActions? primaryAction, DigitDialogActions? secondaryAction, }) async { @@ -28,7 +27,7 @@ class DigitSyncDialog { Key? key, bool barrierDismissible = false, required DigitSyncDialogType type, - required String label, + String? label, DigitDialogActions? primaryAction, DigitDialogActions? secondaryAction, }) { @@ -72,7 +71,7 @@ class DigitSyncDialog { } class DigitSyncDialogContent extends StatelessWidget { - final String label; + final String? label; final DigitSyncDialogType type; final DigitDialogActions? primaryAction; @@ -80,7 +79,7 @@ class DigitSyncDialogContent extends StatelessWidget { const DigitSyncDialogContent({ super.key, - required this.label, + this.label, required this.type, this.primaryAction, this.secondaryAction, @@ -115,8 +114,9 @@ class DigitSyncDialogContent extends StatelessWidget { mainAxisSize: MainAxisSize.min, children: [ Icon(icon, size: 32, color: color), - const SizedBox(height: kPadding * 2), - Text(label, style: labelStyle?.copyWith(color: color)), + if(label != null) + ...[ const SizedBox(height: kPadding * 2), + Text(label!, style: labelStyle?.copyWith(color: color)),] ], ); } diff --git a/packages/digit_components/pubspec.yaml b/packages/digit_components/pubspec.yaml index 545d1d6e0..65366bafa 100644 --- a/packages/digit_components/pubspec.yaml +++ b/packages/digit_components/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_components description: Digit UI Design specification Flutter widgets. Import this package by adding digit_components in respective pubspec.yaml dependencies. -version: 1.0.0+8 +version: 1.0.1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_components repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/digit_data_model/CHANGELOG.md b/packages/digit_data_model/CHANGELOG.md index bf3fff36a..a27de86e0 100644 --- a/packages/digit_data_model/CHANGELOG.md +++ b/packages/digit_data_model/CHANGELOG.md @@ -1,7 +1,16 @@ +## 1.0.3 + +* Added localization table +* Updated individual local search results with user uuid mapping + +## 1.0.3-dev.4 + +* Updated individual local search results with user uuid mapping + ## 1.0.3-dev.3 -* Created localization table - - Creation of the localization table. +* Created localization table + - Creation of the localization table. ## 1.0.3-dev.2 diff --git a/packages/digit_data_model/lib/data/repositories/local/individual.dart b/packages/digit_data_model/lib/data/repositories/local/individual.dart index 08a4b2420..801e538fd 100644 --- a/packages/digit_data_model/lib/data/repositories/local/individual.dart +++ b/packages/digit_data_model/lib/data/repositories/local/individual.dart @@ -107,6 +107,8 @@ class IndividualLocalRepository clientReferenceId: individual.clientReferenceId, dateOfBirth: individual.dateOfBirth, mobileNumber: individual.mobileNumber, + userUuid: individual.userUuid, + userId: individual.userUuid, isDeleted: individual.isDeleted, rowVersion: individual.rowVersion, clientAuditDetails: (individual.clientCreatedBy != null && diff --git a/packages/digit_data_model/pubspec.yaml b/packages/digit_data_model/pubspec.yaml index a3914286a..2b3817937 100644 --- a/packages/digit_data_model/pubspec.yaml +++ b/packages/digit_data_model/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_data_model description: The digit_data_model package is a data modeling library. It defines various classes, enums, and functions. -version: 1.0.3-dev.3 +version: 1.0.3 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_data_model repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/digit_dss/CHANGELOG.md b/packages/digit_dss/CHANGELOG.md index 8f437cc23..a9616d31f 100644 --- a/packages/digit_dss/CHANGELOG.md +++ b/packages/digit_dss/CHANGELOG.md @@ -1,3 +1,13 @@ +## 1.0.0 +* Initial DSS Dashboard Release supporting metric and table charts + +## 0.0.1-dev.4 +* Added error toast for network failure +* No result card added if no charts available + +## 0.0.1-dev.3 +* Fixed user uuid search for dss charts + ## 0.0.1-dev.2 * Added userIds and project Id filters for all dss charts diff --git a/packages/digit_dss/README.md b/packages/digit_dss/README.md index 863cd78e5..351648dfc 100644 --- a/packages/digit_dss/README.md +++ b/packages/digit_dss/README.md @@ -3,8 +3,8 @@ DSS Dashboard for campaign management ## Features +* Dashboard Metric and Table Charts support -Work in progress ## Getting Started @@ -16,5 +16,29 @@ dependencies: ``` ## Usage +To Navigate to any screens of the package: -Work in progress \ No newline at end of file +First add digit_dss_router to your main app router + +Navigate to the required screen using the below code and pass the required data: + +```dart +context.router.push(UserDashboardRoute(),); +``` + +Digit DSS package requires below data to be passed from main app: + +```dart + +String? _tenantId; +String? _projectId; +String? _actionPath; +String? _appVersion; +ProjectModel? _selectedProject; +DashboardConfigSchema? _dashboardConfig; +``` + +To set the required data use: + +```dart +DashboardSingleton().setInitialData(); diff --git a/packages/digit_dss/lib/blocs/dashboard.dart b/packages/digit_dss/lib/blocs/dashboard.dart index c75d43b80..3ed2e8780 100644 --- a/packages/digit_dss/lib/blocs/dashboard.dart +++ b/packages/digit_dss/lib/blocs/dashboard.dart @@ -67,7 +67,7 @@ class DashboardBloc extends Bloc { .toLocal() .millisecondsSinceEpoch; // Get start date in milliseconds final endDate = DateTime(event.selectedDate.year, - event.selectedDate.month, event.selectedDate.day, 11, 59) + event.selectedDate.month, event.selectedDate.day, 23, 59) .toLocal() .millisecondsSinceEpoch; // Get end date in milliseconds @@ -79,10 +79,11 @@ class DashboardBloc extends Bloc { ), ); List attendeesIndividualIds = []; - registers.map((r) => - r.attendees?.where((a) => a.individualId != null).map((att) { - attendeesIndividualIds.add(att.individualId.toString()); - })); + registers.forEach((r) { + r.attendees?.where((a) => a.individualId != null).forEach((att) { + attendeesIndividualIds.add(att.individualId.toString()); + }); + }); final individuals = await individualDataRepository.search(IndividualSearchModel( id: attendeesIndividualIds, @@ -113,7 +114,9 @@ class DashboardBloc extends Bloc { selectedDate: event.selectedDate)); // Trigger search event } catch (e) { debugPrint(e.toString()); // Print error - add(const DashboardEvent.handleSearch()); + add(const DashboardEvent.handleSearch( + isNetworkError: true, + )); } } else if (!isConnected && event.syncFromServer) { emit( @@ -137,6 +140,7 @@ class DashboardBloc extends Bloc { .where() .filter() .chartTypeEqualTo(DSSEnums.metric.toValue()) + .projectIdEqualTo(DashboardSingleton().projectId) .findAll(); // Query metric charts from Isar database Map metrics = {}; // Initialize metrics map List tableWrapperList = []; // Initialize table wrapper list @@ -167,6 +171,7 @@ class DashboardBloc extends Bloc { .where() .filter() .chartTypeEqualTo(DSSEnums.table.toValue()) + .projectIdEqualTo(DashboardSingleton().projectId) .findAll(); // Query table charts from Isar database for (DashboardResponse chart in tableCharts) { if ((chart.data ?? []).isNotEmpty) { @@ -230,6 +235,7 @@ class DashboardBloc extends Bloc { selectedDate: metricCharts.firstOrNull?.lastSelectedDate ?? event.selectedDate ?? DateTime.now(), + isNetworkError: event.isNetworkError, )); // Emit fetched state with metric and table data } catch (error) { rethrow; // Rethrow any caught errors @@ -242,6 +248,7 @@ class DashboardBloc extends Bloc { class DashboardEvent with _$DashboardEvent { const factory DashboardEvent.handleSearch({ DateTime? selectedDate, + @Default(false) bool? isNetworkError, }) = DashboardSearchEvent; // Define handleSearch event const factory DashboardEvent.handleRefresh({ required DateTime selectedDate, @@ -261,6 +268,7 @@ class DashboardState with _$DashboardState { Map? metricData, List? tableData, DateTime? selectedDate, + @Default(false) bool? isNetworkError, }) = DashboardFetchedState; // Define fetched state const factory DashboardState.error() = DashboardErrorState; // Define error state diff --git a/packages/digit_dss/lib/blocs/dashboard.freezed.dart b/packages/digit_dss/lib/blocs/dashboard.freezed.dart index 72a58d932..70ffcb4ca 100644 --- a/packages/digit_dss/lib/blocs/dashboard.freezed.dart +++ b/packages/digit_dss/lib/blocs/dashboard.freezed.dart @@ -19,7 +19,8 @@ mixin _$DashboardEvent { DateTime? get selectedDate => throw _privateConstructorUsedError; @optionalTypeArgs TResult when({ - required TResult Function(DateTime? selectedDate) handleSearch, + required TResult Function(DateTime? selectedDate, bool? isNetworkError) + handleSearch, required TResult Function( DateTime selectedDate, String projectId, bool syncFromServer) handleRefresh, @@ -27,7 +28,8 @@ mixin _$DashboardEvent { throw _privateConstructorUsedError; @optionalTypeArgs TResult? whenOrNull({ - TResult? Function(DateTime? selectedDate)? handleSearch, + TResult? Function(DateTime? selectedDate, bool? isNetworkError)? + handleSearch, TResult? Function( DateTime selectedDate, String projectId, bool syncFromServer)? handleRefresh, @@ -35,7 +37,8 @@ mixin _$DashboardEvent { throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeWhen({ - TResult Function(DateTime? selectedDate)? handleSearch, + TResult Function(DateTime? selectedDate, bool? isNetworkError)? + handleSearch, TResult Function( DateTime selectedDate, String projectId, bool syncFromServer)? handleRefresh, @@ -108,7 +111,7 @@ abstract class _$$DashboardSearchEventImplCopyWith<$Res> __$$DashboardSearchEventImplCopyWithImpl<$Res>; @override @useResult - $Res call({DateTime? selectedDate}); + $Res call({DateTime? selectedDate, bool? isNetworkError}); } /// @nodoc @@ -123,12 +126,17 @@ class __$$DashboardSearchEventImplCopyWithImpl<$Res> @override $Res call({ Object? selectedDate = freezed, + Object? isNetworkError = freezed, }) { return _then(_$DashboardSearchEventImpl( selectedDate: freezed == selectedDate ? _value.selectedDate : selectedDate // ignore: cast_nullable_to_non_nullable as DateTime?, + isNetworkError: freezed == isNetworkError + ? _value.isNetworkError + : isNetworkError // ignore: cast_nullable_to_non_nullable + as bool?, )); } } @@ -136,14 +144,18 @@ class __$$DashboardSearchEventImplCopyWithImpl<$Res> /// @nodoc class _$DashboardSearchEventImpl implements DashboardSearchEvent { - const _$DashboardSearchEventImpl({this.selectedDate}); + const _$DashboardSearchEventImpl( + {this.selectedDate, this.isNetworkError = false}); @override final DateTime? selectedDate; + @override + @JsonKey() + final bool? isNetworkError; @override String toString() { - return 'DashboardEvent.handleSearch(selectedDate: $selectedDate)'; + return 'DashboardEvent.handleSearch(selectedDate: $selectedDate, isNetworkError: $isNetworkError)'; } @override @@ -152,11 +164,13 @@ class _$DashboardSearchEventImpl implements DashboardSearchEvent { (other.runtimeType == runtimeType && other is _$DashboardSearchEventImpl && (identical(other.selectedDate, selectedDate) || - other.selectedDate == selectedDate)); + other.selectedDate == selectedDate) && + (identical(other.isNetworkError, isNetworkError) || + other.isNetworkError == isNetworkError)); } @override - int get hashCode => Object.hash(runtimeType, selectedDate); + int get hashCode => Object.hash(runtimeType, selectedDate, isNetworkError); @JsonKey(ignore: true) @override @@ -169,36 +183,39 @@ class _$DashboardSearchEventImpl implements DashboardSearchEvent { @override @optionalTypeArgs TResult when({ - required TResult Function(DateTime? selectedDate) handleSearch, + required TResult Function(DateTime? selectedDate, bool? isNetworkError) + handleSearch, required TResult Function( DateTime selectedDate, String projectId, bool syncFromServer) handleRefresh, }) { - return handleSearch(selectedDate); + return handleSearch(selectedDate, isNetworkError); } @override @optionalTypeArgs TResult? whenOrNull({ - TResult? Function(DateTime? selectedDate)? handleSearch, + TResult? Function(DateTime? selectedDate, bool? isNetworkError)? + handleSearch, TResult? Function( DateTime selectedDate, String projectId, bool syncFromServer)? handleRefresh, }) { - return handleSearch?.call(selectedDate); + return handleSearch?.call(selectedDate, isNetworkError); } @override @optionalTypeArgs TResult maybeWhen({ - TResult Function(DateTime? selectedDate)? handleSearch, + TResult Function(DateTime? selectedDate, bool? isNetworkError)? + handleSearch, TResult Function( DateTime selectedDate, String projectId, bool syncFromServer)? handleRefresh, required TResult orElse(), }) { if (handleSearch != null) { - return handleSearch(selectedDate); + return handleSearch(selectedDate, isNetworkError); } return orElse(); } @@ -236,11 +253,13 @@ class _$DashboardSearchEventImpl implements DashboardSearchEvent { } abstract class DashboardSearchEvent implements DashboardEvent { - const factory DashboardSearchEvent({final DateTime? selectedDate}) = - _$DashboardSearchEventImpl; + const factory DashboardSearchEvent( + {final DateTime? selectedDate, + final bool? isNetworkError}) = _$DashboardSearchEventImpl; @override DateTime? get selectedDate; + bool? get isNetworkError; @override @JsonKey(ignore: true) _$$DashboardSearchEventImplCopyWith<_$DashboardSearchEventImpl> @@ -339,7 +358,8 @@ class _$DashboardRefreshEventImpl implements DashboardRefreshEvent { @override @optionalTypeArgs TResult when({ - required TResult Function(DateTime? selectedDate) handleSearch, + required TResult Function(DateTime? selectedDate, bool? isNetworkError) + handleSearch, required TResult Function( DateTime selectedDate, String projectId, bool syncFromServer) handleRefresh, @@ -350,7 +370,8 @@ class _$DashboardRefreshEventImpl implements DashboardRefreshEvent { @override @optionalTypeArgs TResult? whenOrNull({ - TResult? Function(DateTime? selectedDate)? handleSearch, + TResult? Function(DateTime? selectedDate, bool? isNetworkError)? + handleSearch, TResult? Function( DateTime selectedDate, String projectId, bool syncFromServer)? handleRefresh, @@ -361,7 +382,8 @@ class _$DashboardRefreshEventImpl implements DashboardRefreshEvent { @override @optionalTypeArgs TResult maybeWhen({ - TResult Function(DateTime? selectedDate)? handleSearch, + TResult Function(DateTime? selectedDate, bool? isNetworkError)? + handleSearch, TResult Function( DateTime selectedDate, String projectId, bool syncFromServer)? handleRefresh, @@ -427,8 +449,11 @@ mixin _$DashboardState { TResult when({ required TResult Function() loading, required TResult Function() initialState, - required TResult Function(Map? metricData, - List? tableData, DateTime? selectedDate) + required TResult Function( + Map? metricData, + List? tableData, + DateTime? selectedDate, + bool? isNetworkError) fetched, required TResult Function() error, }) => @@ -437,8 +462,11 @@ mixin _$DashboardState { TResult? whenOrNull({ TResult? Function()? loading, TResult? Function()? initialState, - TResult? Function(Map? metricData, - List? tableData, DateTime? selectedDate)? + TResult? Function( + Map? metricData, + List? tableData, + DateTime? selectedDate, + bool? isNetworkError)? fetched, TResult? Function()? error, }) => @@ -447,8 +475,11 @@ mixin _$DashboardState { TResult maybeWhen({ TResult Function()? loading, TResult Function()? initialState, - TResult Function(Map? metricData, - List? tableData, DateTime? selectedDate)? + TResult Function( + Map? metricData, + List? tableData, + DateTime? selectedDate, + bool? isNetworkError)? fetched, TResult Function()? error, required TResult orElse(), @@ -541,8 +572,11 @@ class _$DashboardLoadingStateImpl implements DashboardLoadingState { TResult when({ required TResult Function() loading, required TResult Function() initialState, - required TResult Function(Map? metricData, - List? tableData, DateTime? selectedDate) + required TResult Function( + Map? metricData, + List? tableData, + DateTime? selectedDate, + bool? isNetworkError) fetched, required TResult Function() error, }) { @@ -554,8 +588,11 @@ class _$DashboardLoadingStateImpl implements DashboardLoadingState { TResult? whenOrNull({ TResult? Function()? loading, TResult? Function()? initialState, - TResult? Function(Map? metricData, - List? tableData, DateTime? selectedDate)? + TResult? Function( + Map? metricData, + List? tableData, + DateTime? selectedDate, + bool? isNetworkError)? fetched, TResult? Function()? error, }) { @@ -567,8 +604,11 @@ class _$DashboardLoadingStateImpl implements DashboardLoadingState { TResult maybeWhen({ TResult Function()? loading, TResult Function()? initialState, - TResult Function(Map? metricData, - List? tableData, DateTime? selectedDate)? + TResult Function( + Map? metricData, + List? tableData, + DateTime? selectedDate, + bool? isNetworkError)? fetched, TResult Function()? error, required TResult orElse(), @@ -663,8 +703,11 @@ class _$DashboardInitialStateImpl implements DashboardInitialState { TResult when({ required TResult Function() loading, required TResult Function() initialState, - required TResult Function(Map? metricData, - List? tableData, DateTime? selectedDate) + required TResult Function( + Map? metricData, + List? tableData, + DateTime? selectedDate, + bool? isNetworkError) fetched, required TResult Function() error, }) { @@ -676,8 +719,11 @@ class _$DashboardInitialStateImpl implements DashboardInitialState { TResult? whenOrNull({ TResult? Function()? loading, TResult? Function()? initialState, - TResult? Function(Map? metricData, - List? tableData, DateTime? selectedDate)? + TResult? Function( + Map? metricData, + List? tableData, + DateTime? selectedDate, + bool? isNetworkError)? fetched, TResult? Function()? error, }) { @@ -689,8 +735,11 @@ class _$DashboardInitialStateImpl implements DashboardInitialState { TResult maybeWhen({ TResult Function()? loading, TResult Function()? initialState, - TResult Function(Map? metricData, - List? tableData, DateTime? selectedDate)? + TResult Function( + Map? metricData, + List? tableData, + DateTime? selectedDate, + bool? isNetworkError)? fetched, TResult Function()? error, required TResult orElse(), @@ -753,7 +802,8 @@ abstract class _$$DashboardFetchedStateImplCopyWith<$Res> { $Res call( {Map? metricData, List? tableData, - DateTime? selectedDate}); + DateTime? selectedDate, + bool? isNetworkError}); } /// @nodoc @@ -770,6 +820,7 @@ class __$$DashboardFetchedStateImplCopyWithImpl<$Res> Object? metricData = freezed, Object? tableData = freezed, Object? selectedDate = freezed, + Object? isNetworkError = freezed, }) { return _then(_$DashboardFetchedStateImpl( metricData: freezed == metricData @@ -784,6 +835,10 @@ class __$$DashboardFetchedStateImplCopyWithImpl<$Res> ? _value.selectedDate : selectedDate // ignore: cast_nullable_to_non_nullable as DateTime?, + isNetworkError: freezed == isNetworkError + ? _value.isNetworkError + : isNetworkError // ignore: cast_nullable_to_non_nullable + as bool?, )); } } @@ -794,7 +849,8 @@ class _$DashboardFetchedStateImpl implements DashboardFetchedState { const _$DashboardFetchedStateImpl( {final Map? metricData, final List? tableData, - this.selectedDate}) + this.selectedDate, + this.isNetworkError = false}) : _metricData = metricData, _tableData = tableData; @@ -820,10 +876,13 @@ class _$DashboardFetchedStateImpl implements DashboardFetchedState { @override final DateTime? selectedDate; + @override + @JsonKey() + final bool? isNetworkError; @override String toString() { - return 'DashboardState.fetched(metricData: $metricData, tableData: $tableData, selectedDate: $selectedDate)'; + return 'DashboardState.fetched(metricData: $metricData, tableData: $tableData, selectedDate: $selectedDate, isNetworkError: $isNetworkError)'; } @override @@ -836,7 +895,9 @@ class _$DashboardFetchedStateImpl implements DashboardFetchedState { const DeepCollectionEquality() .equals(other._tableData, _tableData) && (identical(other.selectedDate, selectedDate) || - other.selectedDate == selectedDate)); + other.selectedDate == selectedDate) && + (identical(other.isNetworkError, isNetworkError) || + other.isNetworkError == isNetworkError)); } @override @@ -844,7 +905,8 @@ class _$DashboardFetchedStateImpl implements DashboardFetchedState { runtimeType, const DeepCollectionEquality().hash(_metricData), const DeepCollectionEquality().hash(_tableData), - selectedDate); + selectedDate, + isNetworkError); @JsonKey(ignore: true) @override @@ -858,12 +920,15 @@ class _$DashboardFetchedStateImpl implements DashboardFetchedState { TResult when({ required TResult Function() loading, required TResult Function() initialState, - required TResult Function(Map? metricData, - List? tableData, DateTime? selectedDate) + required TResult Function( + Map? metricData, + List? tableData, + DateTime? selectedDate, + bool? isNetworkError) fetched, required TResult Function() error, }) { - return fetched(metricData, tableData, selectedDate); + return fetched(metricData, tableData, selectedDate, isNetworkError); } @override @@ -871,12 +936,15 @@ class _$DashboardFetchedStateImpl implements DashboardFetchedState { TResult? whenOrNull({ TResult? Function()? loading, TResult? Function()? initialState, - TResult? Function(Map? metricData, - List? tableData, DateTime? selectedDate)? + TResult? Function( + Map? metricData, + List? tableData, + DateTime? selectedDate, + bool? isNetworkError)? fetched, TResult? Function()? error, }) { - return fetched?.call(metricData, tableData, selectedDate); + return fetched?.call(metricData, tableData, selectedDate, isNetworkError); } @override @@ -884,14 +952,17 @@ class _$DashboardFetchedStateImpl implements DashboardFetchedState { TResult maybeWhen({ TResult Function()? loading, TResult Function()? initialState, - TResult Function(Map? metricData, - List? tableData, DateTime? selectedDate)? + TResult Function( + Map? metricData, + List? tableData, + DateTime? selectedDate, + bool? isNetworkError)? fetched, TResult Function()? error, required TResult orElse(), }) { if (fetched != null) { - return fetched(metricData, tableData, selectedDate); + return fetched(metricData, tableData, selectedDate, isNetworkError); } return orElse(); } @@ -938,11 +1009,13 @@ abstract class DashboardFetchedState implements DashboardState { const factory DashboardFetchedState( {final Map? metricData, final List? tableData, - final DateTime? selectedDate}) = _$DashboardFetchedStateImpl; + final DateTime? selectedDate, + final bool? isNetworkError}) = _$DashboardFetchedStateImpl; Map? get metricData; List? get tableData; DateTime? get selectedDate; + bool? get isNetworkError; @JsonKey(ignore: true) _$$DashboardFetchedStateImplCopyWith<_$DashboardFetchedStateImpl> get copyWith => throw _privateConstructorUsedError; @@ -989,8 +1062,11 @@ class _$DashboardErrorStateImpl implements DashboardErrorState { TResult when({ required TResult Function() loading, required TResult Function() initialState, - required TResult Function(Map? metricData, - List? tableData, DateTime? selectedDate) + required TResult Function( + Map? metricData, + List? tableData, + DateTime? selectedDate, + bool? isNetworkError) fetched, required TResult Function() error, }) { @@ -1002,8 +1078,11 @@ class _$DashboardErrorStateImpl implements DashboardErrorState { TResult? whenOrNull({ TResult? Function()? loading, TResult? Function()? initialState, - TResult? Function(Map? metricData, - List? tableData, DateTime? selectedDate)? + TResult? Function( + Map? metricData, + List? tableData, + DateTime? selectedDate, + bool? isNetworkError)? fetched, TResult? Function()? error, }) { @@ -1015,8 +1094,11 @@ class _$DashboardErrorStateImpl implements DashboardErrorState { TResult maybeWhen({ TResult Function()? loading, TResult Function()? initialState, - TResult Function(Map? metricData, - List? tableData, DateTime? selectedDate)? + TResult Function( + Map? metricData, + List? tableData, + DateTime? selectedDate, + bool? isNetworkError)? fetched, TResult Function()? error, required TResult orElse(), diff --git a/packages/digit_dss/lib/pages/dashboard/dashboard.dart b/packages/digit_dss/lib/pages/dashboard/dashboard.dart index 6e5eca356..f81d390c2 100644 --- a/packages/digit_dss/lib/pages/dashboard/dashboard.dart +++ b/packages/digit_dss/lib/pages/dashboard/dashboard.dart @@ -11,6 +11,7 @@ import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/dashboard/dashboard_metric_card.dart'; import '../../widgets/localized.dart'; +import '../../widgets/no_result_card.dart'; @RoutePage() class UserDashboardPage extends LocalizedStatefulWidget { @@ -52,8 +53,22 @@ class UserDashboardPageState extends LocalizedState { Loaders.showLoadingDialog(context); } }, - fetched: (metricData, tableData, selectedDate) { + fetched: ( + metricData, + tableData, + selectedDate, + isNetworkError, + ) { Navigator.of(context, rootNavigator: true).pop(); + if (isNetworkError == true) { + DigitToast.show(context, + options: DigitToastOptions( + localizations.translate(i18.dashboard.someErrorOccured), + true, + DigitTheme.instance.mobileTheme, + )); + } + setState(() { isLoading = false; }); @@ -74,7 +89,8 @@ class UserDashboardPageState extends LocalizedState { onRefresh: () { dashboardState.maybeWhen( orElse: () => false, - fetched: (metricData, tableData, selectedDate) async { + fetched: + (metricData, tableData, selectedDate, isNetworkError) async { bool isConnected = await getIsConnected(); if (isConnected) { context.read().add(DashboardRefreshEvent( @@ -108,12 +124,21 @@ class UserDashboardPageState extends LocalizedState { children: [ dashboardState.maybeWhen( orElse: () => const SizedBox.shrink(), - fetched: (metricData, tableData, selectedDate) { + fetched: + (metricData, tableData, selectedDate, isNetworkError) { return Column( children: [ DashboardMetricCard( selectedDate: selectedDate ?? DateTime.now(), ), + if ((metricData ?? {}).isEmpty && + (tableData ?? []).isEmpty) + NoResultCard( + align: Alignment.center, + label: localizations.translate( + i18.common.noResultsFound, + ), + ), ...(tableData ?? []) .map((table) => Padding( padding: const EdgeInsets.all(kPadding), @@ -125,10 +150,9 @@ class UserDashboardPageState extends LocalizedState { ); }).toList(), tableData: table.tableData, - height: - ((table.tableData.length ?? 0) + 1) * - 65, - columnWidth: 140, + height: ((table.tableData.length) + 1) * 65, + columnWidth: + MediaQuery.of(context).size.width / 2, columnRowFixedHeight: 65, scrollPhysics: (table.tableData.length ?? 0) > diff --git a/packages/digit_dss/lib/utils/i18_key_constants.dart b/packages/digit_dss/lib/utils/i18_key_constants.dart index 749ea1482..47bfc3a66 100644 --- a/packages/digit_dss/lib/utils/i18_key_constants.dart +++ b/packages/digit_dss/lib/utils/i18_key_constants.dart @@ -53,6 +53,8 @@ class Common { String get coreCommonDownload => 'CORE_COMMON_DOWNLOAD'; String get coreCommonDownloadFailed => 'CORE_COMMON_DOWNLOAD_FAILED'; + + String get noResultsFound => 'NO_RESULTS_FOUND'; } class Dashboard { diff --git a/packages/digit_dss/lib/widgets/dashboard/dashboard_metric_card.dart b/packages/digit_dss/lib/widgets/dashboard/dashboard_metric_card.dart index f20df48dd..ab9ae35be 100644 --- a/packages/digit_dss/lib/widgets/dashboard/dashboard_metric_card.dart +++ b/packages/digit_dss/lib/widgets/dashboard/dashboard_metric_card.dart @@ -91,8 +91,8 @@ class _DashboardMetricCardState extends LocalizedState { Text( dashboardState.maybeWhen( orElse: () => '', - fetched: (metricData, tableData, - selectedDate) => + fetched: (metricData, tableData, selectedDate, + isNetworkError) => '${DigitDateUtils.getMonth(selectedDate?.toLocal() ?? DateTime.now())} - ${(selectedDate?.toLocal() ?? DateTime.now()).day}, ${(selectedDate?.toLocal() ?? DateTime.now()).year}'), style: theme.textTheme.bodyMedium ?.apply(color: theme.colorScheme.secondary), @@ -118,7 +118,8 @@ class _DashboardMetricCardState extends LocalizedState { children: [ ...dashboardState.maybeWhen( orElse: () => [], - fetched: (metricData, tableData, selectedDate) { + fetched: + (metricData, tableData, selectedDate, isNetworkError) { return metricData != null ? metricData.entries .where((m) => m.value.isHorizontal == true) @@ -155,7 +156,8 @@ class _DashboardMetricCardState extends LocalizedState { }), ...dashboardState.maybeWhen( orElse: () => [], - fetched: (metricData, tableData, selectedDate) { + fetched: + (metricData, tableData, selectedDate, isNetworkError) { return metricData != null ? metricData.entries .where((m) => m.value.isHorizontal == false) diff --git a/packages/digit_dss/lib/widgets/no_result_card.dart b/packages/digit_dss/lib/widgets/no_result_card.dart new file mode 100644 index 000000000..f63d1eb56 --- /dev/null +++ b/packages/digit_dss/lib/widgets/no_result_card.dart @@ -0,0 +1,34 @@ +import 'package:attendance_management/utils/constants.dart'; +import 'package:digit_components/digit_components.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; + +class NoResultCard extends StatelessWidget { + final AlignmentGeometry align; + final String? label; + + const NoResultCard({ + super.key, + this.align = Alignment.centerLeft, + this.label, + }); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + + return Align( + alignment: align, + child: Padding( + padding: const EdgeInsets.all(kPadding), + child: Column( + children: [ + SvgPicture.asset(noResultSvg), + Text( + label ?? '', + style: theme.textTheme.bodyMedium, + ) + ], + ))); + } +} diff --git a/packages/digit_dss/pubspec.yaml b/packages/digit_dss/pubspec.yaml index 46b2a0978..b394149b6 100644 --- a/packages/digit_dss/pubspec.yaml +++ b/packages/digit_dss/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_dss description: "DSS Dashboard for campaign management" -version: 0.0.1-dev.2 +version: 1.0.0 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/develop/packages/digit_dss repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -19,14 +19,14 @@ dependencies: flutter_svg: ^2.0.8 dart_mappable: ^4.2.0 auto_route: ^7.8.4 - digit_data_model: ^1.0.3-dev.3 + digit_data_model: ^1.0.3 package_info_plus: ^5.0.1 collection: ^1.16.0 async: ^2.11.0 dio: ^5.4.2+1 isar: ^3.0.5 isar_flutter_libs: ^3.0.5 - attendance_management: ^1.0.1 + attendance_management: ^1.0.2 dev_dependencies: flutter_test: diff --git a/packages/digit_scanner/CHANGELOG.md b/packages/digit_scanner/CHANGELOG.md index d8c0bdbbc..398996315 100644 --- a/packages/digit_scanner/CHANGELOG.md +++ b/packages/digit_scanner/CHANGELOG.md @@ -1,3 +1,6 @@ +## 1.0.3 +* Manual code entry fixes with stable version + ## 1.0.3-dev.1 * Fix for manual entry result not reflecting diff --git a/packages/digit_scanner/example/ios/Podfile b/packages/digit_scanner/example/ios/Podfile new file mode 100644 index 000000000..fdcc671eb --- /dev/null +++ b/packages/digit_scanner/example/ios/Podfile @@ -0,0 +1,44 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '11.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/packages/digit_scanner/pubspec.yaml b/packages/digit_scanner/pubspec.yaml index 5eb1b1c9d..bd1f19549 100644 --- a/packages/digit_scanner/pubspec.yaml +++ b/packages/digit_scanner/pubspec.yaml @@ -17,7 +17,7 @@ repository: https://github.com/egovernments/health-campaign-field-worker-app # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.0.3-dev.1 +version: 1.0.3 environment: sdk: '>=2.19.4 <3.9.0' @@ -38,7 +38,7 @@ dependencies: google_mlkit_barcode_scanning: ^0.10.0 camera: ^0.10.5+7 gs1_barcode_parser: ^1.0.5 - digit_components: ^1.0.0+2 + digit_components: ^1.0.0+9 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 overlay_builder: ^1.1.0 diff --git a/packages/inventory_management/CHANGELOG.md b/packages/inventory_management/CHANGELOG.md index c8eb4e89b..e4659fe04 100644 --- a/packages/inventory_management/CHANGELOG.md +++ b/packages/inventory_management/CHANGELOG.md @@ -1,3 +1,13 @@ +## 1.0.3+1 + +* Updated scanner package + +## 1.0.3 + +* Added missing DeliveryTeam Facility in record stock screen +* Added missing scanned resources to additional fields during entry +* Added name of logged user to additional fields during entry + ## 1.0.3-dev.2 * Added name of logged user to additional fields during entry diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index 5076e6b52..2773eed0f 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -428,18 +428,18 @@ packages: dependency: "direct main" description: name: digit_data_model - sha256: "5559c3e652a24f3d24f324d275399f6e864ca5671285386516b94fdf9fe8724c" + sha256: e1ea907e9cb7d521341325ac1b1b98fad8bd5e5ca1bab7f7c18ed02ccd2f2c2b url: "https://pub.dev" source: hosted - version: "1.0.3-dev.3" + version: "1.0.3" digit_scanner: dependency: "direct main" description: name: digit_scanner - sha256: bc172291df5ffe720e3d471fbc5c542086b8efecbdb6e25ee737381cc47c8e05 + sha256: "1f1fe3ca8f038a3c93cd52491cf72c0b0e45c88b14580243d47eac59672e67ea" url: "https://pub.dev" source: hosted - version: "1.0.3-dev.1" + version: "1.0.3" dio: dependency: transitive description: diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index 9e9bbd581..ce46fe227 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -1,6 +1,6 @@ name: inventory_management description: This package offers inventory management features, allowing users to view stock reports and perform inventory resource reconciliation. -version: 1.0.3-dev.2 +version: 1.0.3+1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/inventory_management repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -29,10 +29,10 @@ dependencies: uuid: ^3.0.6 recase: ^4.1.0 pluto_grid: ^7.0.1 - digit_scanner: ^1.0.3-dev.1 + digit_scanner: ^1.0.3 gs1_barcode_parser: ^1.0.5 auto_route: ^7.8.4 - digit_data_model: ^1.0.3-dev.3 + digit_data_model: ^1.0.3 collection: ^1.16.0 dev_dependencies: diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration_delivery/CHANGELOG.md index 3df180294..1fb632260 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration_delivery/CHANGELOG.md @@ -1,3 +1,38 @@ +## 1.0.3 + +* IRS Campaign changes +* New HouseDetails screen to capture structure of the house +* New Summary page for registration and delivery +* Introduced Filter search which can be configured through MDMS +* Constructed a global query executor based on project type - Household and Individual +* Getting precise location on registry and delivery +* Updated digit_scanner, data_model package + +## 1.0.3-dev.11 + +* Updated search to include project id for individual and household + +## 1.0.3-dev.10 + +* Removed stepper if number of deliveries is greater than 1 + +## 1.0.3-dev.9 + +* Updated localization key +* Resolved taskStatus key from task table entity + +## 1.0.3-dev.8 + +* Reverted 1.0.3-dev.7 + +## 1.0.3-dev.7 + +* Updated status to taskStatus in Task model + +## 1.0.3-dev.6 + +* Updated delivery status enums + ## 1.0.3-dev.5 * Added count for filter search diff --git a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart index 37091bc9b..fce9aa60a 100644 --- a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart +++ b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart @@ -214,8 +214,6 @@ class BeneficiaryRegistrationBloc final household = value.householdModel; final address = value.householdModel?.address; - final dateOfRegistration = - value.projectBeneficiaryModel?.dateOfRegistration; if (individual == null) { throw const InvalidRegistrationStateException( 'Individual cannot be null', @@ -431,10 +429,12 @@ class BeneficiaryRegistrationBloc ); final projectBeneficiary = await projectBeneficiaryRepository.search( ProjectBeneficiarySearchModel( - beneficiaryClientReferenceId: - beneficiaryType == BeneficiaryType.individual //[TODO: need to check with individual downsync data. Current implementation works only for household. Parking this for IRS] - ? [value.individualModel.first.clientReferenceId] - : [event.household.clientReferenceId], + projectId: [RegistrationDeliverySingleton().projectId.toString()], + beneficiaryClientReferenceId: beneficiaryType == + BeneficiaryType + .individual ? getIndividualBeneficiaryClientReferenceId( + value.individualModel) + : [event.household.clientReferenceId], ), ); @@ -451,8 +451,8 @@ class BeneficiaryRegistrationBloc if (task.isNotEmpty) { if (task.last.status == Status.closeHousehold.toValue()) { - await taskDataRepository.update( - task.last.copyWith(status: Status.notDelivered.toValue())); + await taskDataRepository.update(task.last + .copyWith(status: Status.notAdministered.toValue())); } } } else { @@ -507,8 +507,7 @@ class BeneficiaryRegistrationBloc emit( BeneficiaryRegistrationPersistedState( householdModel: value.householdModel, - isEdit : true, - + isEdit: true, ), ); } catch (error) { @@ -559,8 +558,8 @@ class BeneficiaryRegistrationBloc if (task.isNotEmpty) { if (task.last.status == Status.closeHousehold.toValue()) { - await taskDataRepository.update( - task.last.copyWith(status: Status.notDelivered.toValue())); + await taskDataRepository.update(task.last + .copyWith(status: Status.notAdministered.toValue())); } } } @@ -670,6 +669,11 @@ class BeneficiaryRegistrationBloc }, ); } + + getIndividualBeneficiaryClientReferenceId( + List individualModel) { + return individualModel.map((e) => e.clientReferenceId).toList(); + } } @freezed diff --git a/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart b/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart index 689744163..8ccbd43a2 100644 --- a/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart +++ b/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart @@ -38,19 +38,18 @@ class DeliverInterventionBloc emit(state.copyWith(loading: true)); try { if (event.isEditing) { - if (!event.navigateToSummary) { await taskRepository.update(event.task.copyWith( - clientAuditDetails: - (event.task.clientAuditDetails?.createdBy != null && - event.task.clientAuditDetails?.createdTime != null) + clientAuditDetails: (event.task.clientAuditDetails?.createdBy != + null && + event.task.clientAuditDetails?.createdTime != null) ? ClientAuditDetails( - createdBy: event.task.clientAuditDetails!.createdBy, - createdTime: event.task.clientAuditDetails!.createdTime, - lastModifiedBy: event.task.auditDetails?.lastModifiedBy ?? - event.task.clientAuditDetails!.createdBy, - lastModifiedTime: DateTime.now().millisecondsSinceEpoch, - ) + createdBy: event.task.clientAuditDetails!.createdBy, + createdTime: event.task.clientAuditDetails!.createdTime, + lastModifiedBy: event.task.auditDetails?.lastModifiedBy ?? + event.task.clientAuditDetails!.createdBy, + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + ) : null, )); } @@ -59,7 +58,6 @@ class DeliverInterventionBloc oldTask: event.task, householdMemberWrapper: event.householdMemberWrapper)); // Update an existing task - } else { // Create a new task final code = event.boundaryModel.code; diff --git a/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart b/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart index b81797778..332d43054 100644 --- a/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart +++ b/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:collection/collection.dart'; import 'package:digit_data_model/models/entities/individual.dart'; import 'package:registration_delivery/blocs/search_households/search_households.dart'; +import 'package:registration_delivery/utils/utils.dart'; import '../../models/entities/household.dart'; import '../../models/entities/household_member.dart'; @@ -49,6 +50,7 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { final results = await houseHoldGlobalSearchRepository.houseHoldGlobalSearch( GlobalSearchParameters( + projectId: event.globalSearchParams.projectId, isProximityEnabled: event.globalSearchParams.isProximityEnabled, latitude: event.globalSearchParams.latitude, longitude: event.globalSearchParams.longitude, @@ -91,6 +93,7 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { projectBeneficiariesList = await projectBeneficiary.search( ProjectBeneficiarySearchModel( + projectId: [RegistrationDeliverySingleton().projectId.toString()], beneficiaryClientReferenceId: houseHoldClientReferenceIds.map((e) => e).toList())); @@ -112,7 +115,6 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { referralsList, containers, ); - } else if (event.globalSearchParams.filter!.isNotEmpty && event.globalSearchParams.filter != null) { late List listOfBeneficiaries = []; @@ -124,6 +126,7 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { projectBeneficiariesList = await projectBeneficiary.search( ProjectBeneficiarySearchModel( + projectId: [RegistrationDeliverySingleton().projectId.toString()], clientReferenceId: listOfBeneficiaries)); late List listOfMembers = []; @@ -177,7 +180,6 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { referralsList, containers, ); - } else { late List houseHoldClientReferenceIds = []; @@ -205,6 +207,7 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { projectBeneficiariesList = await projectBeneficiary.search( ProjectBeneficiarySearchModel( + projectId: [RegistrationDeliverySingleton().projectId.toString()], beneficiaryClientReferenceId: houseHoldClientReferenceIds.map((e) => e).toList())); @@ -226,14 +229,13 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { referralsList, containers, ); - } emit(state.copyWith( householdMembers: containers, loading: false, searchQuery: event.globalSearchParams.nameSearch, offset: - event.globalSearchParams.offset! + event.globalSearchParams.limit!, + event.globalSearchParams.offset! + event.globalSearchParams.limit!, limit: event.globalSearchParams.limit!, totalResults: containers.isEmpty ? 0 : totalCount, )); diff --git a/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart b/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart index 99c10b3d4..696df872e 100644 --- a/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart +++ b/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart @@ -9,8 +9,10 @@ import '../../models/entities/household_member.dart'; import '../../models/entities/project_beneficiary.dart'; import '../../models/entities/referral.dart'; import '../../models/entities/side_effect.dart'; +import '../../models/entities/status.dart'; import '../../models/entities/task.dart'; import '../../utils/global_search_parameters.dart'; +import '../../utils/utils.dart'; class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { IndividualGlobalSearchBloc( @@ -38,6 +40,7 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { List householdList = []; List individualsList = []; + List householdMembersList = []; List projectBeneficiariesList = []; List taskList = []; List sideEffectsList = []; @@ -48,6 +51,7 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { final results = await individualGlobalSearchRepository.individualGlobalSearch( GlobalSearchParameters( + projectId: event.globalSearchParams.projectId, isProximityEnabled: event.globalSearchParams.isProximityEnabled, latitude: event.globalSearchParams.latitude, longitude: event.globalSearchParams.longitude, @@ -56,56 +60,199 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { filter: event.globalSearchParams.filter, offset: event.globalSearchParams.offset, limit: event.globalSearchParams.limit, + totalCount: state.totalResults, ), ); - var list = results.map((e) => e).toList(); + var totalCount = results['total_count']; + var finalResults = results['data'].map((e) => e).toList(); - late List individualClientReferenceIds = []; + if (event.globalSearchParams.filter!.contains(Status.registered.name) || + event.globalSearchParams.filter!.contains(Status.notRegistered.name)) { + late List individualClientReferenceIds = []; - list.forEach((e) { - individualClientReferenceIds.add(e.clientReferenceId); - }); + finalResults.forEach((e) { + individualClientReferenceIds.add(e.clientReferenceId); + }); - individualsList = await individual.search(IndividualSearchModel( - clientReferenceId: - individualClientReferenceIds.map((e) => e.toString()).toList())); + individualsList = await individual.search(IndividualSearchModel( + clientReferenceId: + individualClientReferenceIds.map((e) => e.toString()).toList())); - // Search for individual results using the extracted IDs and search text. - final List householdMembers = - await fetchHouseholdMembersBulk( - individualClientReferenceIds, - null, - ); + final List householdMembers = + await fetchHouseholdMembersBulk( + individualClientReferenceIds, + null, + ); - // Group household members by household client reference ID - final groupedHouseholdsMembers = householdMembers - .groupListsBy((element) => element.householdClientReferenceId); + final houseHoldIds = + householdMembers.map((e) => e.householdClientReferenceId!).toList(); - householdList = await household.search(HouseholdSearchModel( - clientReferenceId: householdMembers - .map((e) => e.householdClientReferenceId.toString()) - .toList(), - )); + householdList = await household.search( + HouseholdSearchModel( + clientReferenceId: houseHoldIds, + ), + ); - projectBeneficiariesList = await projectBeneficiary.search( - ProjectBeneficiarySearchModel( - beneficiaryClientReferenceId: - individualClientReferenceIds.map((e) => e).toList())); + projectBeneficiariesList = await projectBeneficiary.search( + ProjectBeneficiarySearchModel( + projectId: [RegistrationDeliverySingleton().projectId.toString()], + beneficiaryClientReferenceId: + individualClientReferenceIds.map((e) => e).toList())); - if (projectBeneficiariesList.isNotEmpty) { - taskList = await fetchTaskbyProjectBeneficiary(projectBeneficiariesList); - sideEffectsList = - await sideEffectDataRepository.search(SideEffectSearchModel( - taskClientReferenceId: - taskList.map((e) => e.clientReferenceId).toList(), + List tasksRelated = await _processTasksAndRelatedData( + projectBeneficiariesList, taskList, sideEffectsList, referralsList); + + taskList = tasksRelated[0]; + sideEffectsList = tasksRelated[1]; + referralsList = tasksRelated[2]; + + await _processHouseholdEntries( + householdMembers, + householdList, + individualsList, + projectBeneficiariesList, + taskList, + sideEffectsList, + referralsList, + containers); + } else if (event.globalSearchParams.filter!.isNotEmpty && + event.globalSearchParams.filter != null) { + late List listOfBeneficiaries = []; + for (var e in finalResults) { + !listOfBeneficiaries.contains(e.projectBeneficiaryClientReferenceId) + ? listOfBeneficiaries.add(e.projectBeneficiaryClientReferenceId!) + : null; + } + + projectBeneficiariesList = await projectBeneficiary.search( + ProjectBeneficiarySearchModel( + projectId: [RegistrationDeliverySingleton().projectId.toString()], + clientReferenceId: listOfBeneficiaries)); + + late List listOfMembers = []; + + listOfMembers = projectBeneficiariesList + .map((e) => e.beneficiaryClientReferenceId.toString()) + .toList(); + + householdMembersList = await fetchHouseholdMembersBulk( + listOfMembers, + null, + ); + + final List individualClientReferenceIds = householdMembersList + .map((e) => e.individualClientReferenceId.toString()) + .toList(); + + individualsList = await individual.search( + IndividualSearchModel(clientReferenceId: individualClientReferenceIds), + ); + + late List houseHoldClientReferenceIds = []; + + houseHoldClientReferenceIds = householdMembersList + .map((e) => e.householdClientReferenceId.toString()) + .toList(); + + householdList = await household.search(HouseholdSearchModel( + clientReferenceId: houseHoldClientReferenceIds, )); - referralsList = await referralDataRepository.search(ReferralSearchModel( - projectBeneficiaryClientReferenceId: - projectBeneficiariesList.map((e) => e.clientReferenceId).toList(), + + finalResults.forEach((element) { + taskList.add(element); + }); + + List tasksRelated = await _processTasksAndRelatedData( + projectBeneficiariesList, taskList, sideEffectsList, referralsList); + + taskList = tasksRelated[0]; + sideEffectsList = tasksRelated[1]; + referralsList = tasksRelated[2]; + + // Process household entries and add to containers + await _processHouseholdEntries( + householdMembersList, + householdList, + individualsList, + projectBeneficiariesList, + taskList, + sideEffectsList, + referralsList, + containers, + ); + } else { + late List individualClientReferenceIds = []; + + finalResults.forEach((e) { + individualClientReferenceIds.add(e.clientReferenceId); + }); + + individualsList = await individual.search(IndividualSearchModel( + clientReferenceId: + individualClientReferenceIds.map((e) => e.toString()).toList())); + + // Search for individual results using the extracted IDs and search text. + final List householdMembers = + await fetchHouseholdMembersBulk( + individualClientReferenceIds, + null, + ); + + householdList = await household.search(HouseholdSearchModel( + clientReferenceId: householdMembers + .map((e) => e.householdClientReferenceId.toString()) + .toList(), )); + + projectBeneficiariesList = await projectBeneficiary.search( + ProjectBeneficiarySearchModel( + projectId: [RegistrationDeliverySingleton().projectId.toString()], + beneficiaryClientReferenceId: + individualClientReferenceIds.map((e) => e).toList())); + + List tasksRelated = await _processTasksAndRelatedData( + projectBeneficiariesList, taskList, sideEffectsList, referralsList); + + taskList = tasksRelated[0]; + sideEffectsList = tasksRelated[1]; + referralsList = tasksRelated[2]; + + await _processHouseholdEntries( + householdMembers, + householdList, + individualsList, + projectBeneficiariesList, + taskList, + sideEffectsList, + referralsList, + containers); } + emit(state.copyWith( + householdMembers: containers, + loading: false, + searchQuery: event.globalSearchParams.nameSearch, + offset: + event.globalSearchParams.offset! + event.globalSearchParams.limit!, + limit: event.globalSearchParams.limit!, + totalResults: totalCount, + )); + } + + _processHouseholdEntries( + List householdMembers, + List householdList, + List individualsList, + List projectBeneficiariesList, + List taskList, + List sideEffectsList, + List referralsList, + List containers) async { + // Group household members by household client reference ID + final groupedHouseholdsMembers = householdMembers + .groupListsBy((element) => element.householdClientReferenceId); + for (final entry in groupedHouseholdsMembers.entries) { HouseholdModel filteredHousehold; List filteredIndividuals; @@ -126,6 +273,7 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { filteredIndividuals = individualsList .where((element) => membersIds.contains(element.clientReferenceId)) .toList(); + // Filter beneficiaries based on individual client reference IDs filteredBeneficiaries = projectBeneficiariesList .where((element) => @@ -168,14 +316,29 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { ), ); } + } - emit(state.copyWith( - householdMembers: containers, - loading: false, - searchQuery: event.globalSearchParams.nameSearch, - offset: - event.globalSearchParams.offset! + event.globalSearchParams.limit!, - limit: event.globalSearchParams.limit!, - )); + _processTasksAndRelatedData( + List projectBeneficiariesList, + List taskList, + List sideEffectsList, + List referralsList) async { + if (projectBeneficiariesList.isNotEmpty) { + if (taskList.isEmpty) { + taskList = + await fetchTaskbyProjectBeneficiary(projectBeneficiariesList); + } + sideEffectsList = + await sideEffectDataRepository.search(SideEffectSearchModel( + taskClientReferenceId: + taskList.map((e) => e.clientReferenceId).toList(), + )); + referralsList = await referralDataRepository.search(ReferralSearchModel( + projectBeneficiaryClientReferenceId: + projectBeneficiariesList.map((e) => e.clientReferenceId).toList(), + )); + } + + return [taskList, sideEffectsList, referralsList]; } } diff --git a/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart b/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart index 28569fbef..26ffbd225 100644 --- a/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart +++ b/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'dart:math' as math; + import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; import 'package:flutter/material.dart'; @@ -180,14 +181,20 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { ..where(buildAnd([ sql.address.relatedClientReferenceId.isNotNull(), sql.household.clientReferenceId.isNotNull(), - CustomExpression(''' + if (params.latitude != null && + params.longitude != null && + params.maxRadius != null) + CustomExpression(''' (6371393 * acos( cos(${params.latitude! * math.pi / 180.0}) * cos((address.latitude * ${math.pi / 180.0})) * cos((address.longitude * ${math.pi / 180.0}) - ${params.longitude! * math.pi / 180.0}) + sin(${params.latitude! * math.pi / 180.0}) * sin((address.latitude * ${math.pi / 180.0})) )) <= ${params.maxRadius!} '''), - sql.address.longitude.isNotNull(), + if (params.latitude != null && + params.longitude != null && + params.maxRadius != null) + sql.address.longitude.isNotNull(), sql.address.latitude.isNotNull(), ])) ..orderBy([ @@ -205,8 +212,8 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { mode: OrderingMode.asc, ), ]); - return selectQuery; } + return selectQuery; } // Function to perform name search based on provided parameters @@ -253,9 +260,14 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { // Function to search by name based on provided parameters searchByName( selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) { - return selectQuery.where(sql.name.givenName.contains( - params.nameSearch!, - )); + return selectQuery.where(buildAnd([ + if (params.nameSearch != null) + buildOr([ + sql.name.givenName.contains( + params.nameSearch!, + ), + ]), + ])); } filterSearch(selectQuery, GlobalSearchParameters params, String filter, @@ -275,7 +287,8 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { ? sql.projectBeneficiary.beneficiaryClientReferenceId.isNotNull() : sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); } else { - var filterSearchQuery = await filterTasks(selectQuery, filter, sql); + var filterSearchQuery = + await filterTasks(selectQuery, filter, sql, params); selectQuery = filterSearchQuery; } @@ -293,17 +306,19 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { ? sql.projectBeneficiary.beneficiaryClientReferenceId.isNotNull() : sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); } else { - var filterSearchQuery = await filterTasks(selectQuery, filter, sql); + var filterSearchQuery = + await filterTasks(selectQuery, filter, sql, params); selectQuery = filterSearchQuery; } } return selectQuery; } - filterTasks(selectQuery, String filter, LocalSqlDataStore sql) { + filterTasks(selectQuery, String filter, LocalSqlDataStore sql, + GlobalSearchParameters params) { final statusMap = { Status.delivered.name: Status.delivered, - Status.notDelivered.name: Status.notDelivered, + Status.notAdministered.name: Status.notAdministered, Status.visited.name: Status.visited, Status.notVisited.name: Status.notVisited, Status.beneficiaryRefused.name: Status.beneficiaryRefused, @@ -316,10 +331,23 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { }; var applyFilter = filter; if (selectQuery == null) { - selectQuery = sql.select(sql.task).join([]) + selectQuery = sql.select(sql.task).join([ + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.clientReferenceId + .equalsExp(sql.task.projectBeneficiaryClientReferenceId)), + leftOuterJoin( + sql.household, + sql.household.clientReferenceId + .equalsExp(sql.projectBeneficiary.beneficiaryClientReferenceId)) + ]) ..where(sql.task.status.equals( statusMap[applyFilter]!.toValue(), )); + if (!(params.filter!.contains(Status.notRegistered.name))) { + selectQuery + .where(sql.projectBeneficiary.projectId.equals(params.projectId!)); + } } else { selectQuery = selectQuery.join([ leftOuterJoin( @@ -328,6 +356,11 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { .equalsExp(sql.projectBeneficiary.clientReferenceId)) ]) ..where(sql.task.status.equals(statusMap[filter]!.toValue())); + + if (!(params.filter!.contains(Status.notRegistered.name))) { + selectQuery + .where(sql.projectBeneficiary.projectId.equals(params.projectId!)); + } } return selectQuery; diff --git a/packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart b/packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart index 7227825f4..abd395fef 100644 --- a/packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart +++ b/packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart @@ -3,8 +3,11 @@ import 'dart:math' as math; import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; +import 'package:flutter/material.dart'; import '../../../models/entities/status.dart'; +import '../../../models/entities/task.dart'; +import '../../../models/entities/task_resource.dart'; import '../../../utils/global_search_parameters.dart'; class IndividualGlobalSearchRepository extends LocalRepository { @@ -20,95 +23,143 @@ class IndividualGlobalSearchRepository extends LocalRepository { individualGlobalSearch(GlobalSearchParameters params) async { dynamic selectQuery; + late int? count = params.totalCount == 0 ? 0 : params.totalCount; - var proximitySelectQuery = - await proximitySearch(selectQuery, params, super.sql); + // Check if the filter contains status for registered or not registered + if (params.filter!.contains(Status.registered.name) || + params.filter!.contains(Status.notRegistered.name)) { + var proximitySelectQuery = + await proximitySearch(selectQuery, params, super.sql); - var nameSelectQuery = - await nameSearch(proximitySelectQuery, params, super.sql); + var nameSelectQuery = + await nameSearch(proximitySelectQuery, params, super.sql); - var filterSelectQuery = nameSelectQuery; + var filterSelectQuery = nameSelectQuery; - if (params.filter != null && params.filter!.isNotEmpty) { - for (var element in params.filter!) { - filterSelectQuery = - await filterSearch(filterSelectQuery, element, super.sql); + if (params.filter != null && params.filter!.isNotEmpty) { + for (var filter in params.filter!) { + filterSelectQuery = + await filterSearch(filterSelectQuery, params, filter, super.sql); + } + } else { + filterSelectQuery = nameSelectQuery; + } + + if (filterSelectQuery == null) { + return []; + } + // Get total count if offset is zero and filters are applied + else { + if (params.offset == 0 && + params.filter != null && + params.filter!.isNotEmpty) { + count = await _getTotalCount(filterSelectQuery, params, super.sql); + } + + await filterSelectQuery.limit(params.limit ?? 50, + offset: params.offset ?? 0); + + final results = await filterSelectQuery.get(); + + return _returnIndividualModel(results, count); + } + } else if (params.filter!.isNotEmpty && params.filter != null) { + var proximitySelectQuery = + await proximitySearch(selectQuery, params, super.sql); + + var nameSelectQuery = + await nameSearch(proximitySelectQuery, params, super.sql); + + var filterSelectQuery = nameSelectQuery; + + // Apply filters if present + if (params.filter != null && params.filter!.isNotEmpty) { + for (var filter in params.filter!) { + filterSelectQuery = + await filterSearch(filterSelectQuery, params, filter, super.sql); + } + } else { + filterSelectQuery = nameSelectQuery; + } + + // Return empty list if no results found + if (filterSelectQuery == null) { + return []; + } else { + if (params.offset == 0 && + params.filter != null && + params.filter!.isNotEmpty) { + count = await _getTotalCount(filterSelectQuery, params, super.sql); + } + await filterSelectQuery.limit(params.limit ?? 50, + offset: params.offset ?? 0); + + final results = await filterSelectQuery.get(); + var data = results + .map((e) { + final task = e.readTableOrNull(sql.task); + final resources = e.readTableOrNull(sql.taskResource); + + return TaskModel( + id: task.id, + createdBy: task.createdBy, + clientReferenceId: task.clientReferenceId, + rowVersion: task.rowVersion, + tenantId: task.tenantId, + isDeleted: task.isDeleted, + projectId: task.projectId, + projectBeneficiaryId: task.projectBeneficiaryId, + projectBeneficiaryClientReferenceId: + task.projectBeneficiaryClientReferenceId, + createdDate: task.createdDate, + status: task.status, + resources: resources == null + ? null + : [ + TaskResourceModel( + taskclientReferenceId: + resources.taskclientReferenceId, + clientReferenceId: resources.clientReferenceId, + id: resources.id, + productVariantId: resources.productVariantId, + taskId: resources.taskId, + deliveryComment: resources.deliveryComment, + quantity: resources.quantity, + rowVersion: resources.rowVersion, + ), + ], + ); + }) + .where((element) => element.isDeleted != true) + .toList(); + + return {"data": data, "total_count": count}; } } else { - filterSelectQuery = nameSelectQuery; - } + var proximitySelectQuery = + await proximitySearch(selectQuery, params, super.sql); - await filterSelectQuery.limit(params.limit ?? 50, - offset: params.offset ?? 0); + var nameSelectQuery = + await nameSearch(proximitySelectQuery, params, super.sql); - final results = await filterSelectQuery.get(); - return results - .map((e) { - final individual = e.readTableOrNull(sql.individual); - final address = e.readTableOrNull(sql.address); - final name = e.readTableOrNull(sql.name); + // Return empty list if no results found + if (nameSelectQuery == null) { + return []; + } else { + // Get total count if offset is zero and filters are applied + if (params.offset == 0 && + params.filter != null && + params.filter!.isNotEmpty) { + count = await _getTotalCount(nameSelectQuery, params, super.sql); + } + await nameSelectQuery.limit(params.limit ?? 50, + offset: params.offset ?? 0); - return IndividualModel( - id: individual?.id, - tenantId: individual?.tenantId, - clientReferenceId: individual!.clientReferenceId, - dateOfBirth: individual.dateOfBirth, - name: NameModel( - givenName: name?.givenName, - individualClientReferenceId: individual.clientReferenceId, - tenantId: individual.tenantId, - auditDetails: AuditDetails( - createdBy: individual.auditCreatedBy!, - createdTime: individual.auditCreatedTime!, - lastModifiedBy: individual.auditModifiedBy, - lastModifiedTime: individual.auditModifiedTime, - ), - ), - rowVersion: individual.rowVersion, - isDeleted: individual.isDeleted, - auditDetails: AuditDetails( - createdBy: individual.auditCreatedBy!, - createdTime: individual.auditCreatedTime!, - lastModifiedBy: individual.auditModifiedBy, - lastModifiedTime: individual.auditModifiedTime, - ), - address: address == null - ? null - : [ - AddressModel( - id: address.id, - relatedClientReferenceId: - address.relatedClientReferenceId, - tenantId: address.tenantId, - doorNo: address.doorNo, - latitude: address.latitude, - longitude: address.longitude, - landmark: address.landmark, - locationAccuracy: address.locationAccuracy, - addressLine1: address.addressLine1, - addressLine2: address.addressLine2, - city: address.city, - pincode: address.pincode, - locality: address.localityBoundaryCode != null - ? LocalityModel( - code: address.localityBoundaryCode!, - name: address.localityBoundaryName, - ) - : null, - type: address.type, - rowVersion: address.rowVersion, - auditDetails: AuditDetails( - createdBy: individual.auditCreatedBy!, - createdTime: individual.auditCreatedTime!, - lastModifiedBy: individual.auditModifiedBy, - lastModifiedTime: individual.auditModifiedTime, - ), - ), - ], - ); - }) - .where((element) => element.isDeleted != true) - .toList(); + final results = await nameSelectQuery.get(); + + return _returnIndividualModel(results, count); + } + } } proximitySearch( @@ -118,12 +169,50 @@ class IndividualGlobalSearchRepository extends LocalRepository { } else if (params.isProximityEnabled) { selectQuery = super.sql.individual.select().join([ joinIndividualAddress(sql), - ]); - performProximitySearch(selectQuery, params, sql); - return selectQuery; + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(sql.individual.clientReferenceId)) + ]) + ..where(buildAnd([ + sql.address.relatedClientReferenceId.isNotNull(), + sql.individual.clientReferenceId.isNotNull(), + if (params.latitude != null && + params.longitude != null && + params.maxRadius != null) + CustomExpression(''' + (6371393 * acos( + cos(${params.latitude! * math.pi / 180.0}) * cos((address.latitude * ${math.pi / 180.0})) + * cos((address.longitude * ${math.pi / 180.0}) - ${params.longitude! * math.pi / 180.0}) + + sin(${params.latitude! * math.pi / 180.0}) * sin((address.latitude * ${math.pi / 180.0})) + )) <= ${params.maxRadius!} + '''), + if (params.latitude != null && + params.longitude != null && + params.maxRadius != null) + sql.address.longitude.isNotNull(), + sql.address.latitude.isNotNull(), + ])) + ..orderBy([ + if (params.latitude != null && + params.longitude != null && + params.maxRadius != null) + OrderingTerm( + expression: CustomExpression(''' + (6371393 * acos( + cos(${params.latitude! * math.pi / 180.0}) * cos((address.latitude * ${math.pi / 180.0})) + * cos((address.longitude * ${math.pi / 180.0}) - ${params.longitude! * math.pi / 180.0}) + + sin(${params.latitude! * math.pi / 180.0}) * sin((address.latitude * ${math.pi / 180.0})) + )) + '''), + mode: OrderingMode.asc, + ), + ]); } + return selectQuery; } + // Function to perform name search based on provided parameters nameSearch( selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) async { if (params.nameSearch == null || params.nameSearch!.isEmpty) { @@ -136,6 +225,23 @@ class IndividualGlobalSearchRepository extends LocalRepository { .select() .join([joinName(sql), joinIndividualAddress(sql)]); await searchByName(selectQuery, params, sql); + selectQuery = selectQuery.join([ + leftOuterJoin( + sql.householdMember, + sql.householdMember.individualClientReferenceId + .equalsExp(sql.individual.clientReferenceId)) + ]) + ..where(sql.householdMember.isHeadOfHousehold.equals(true)); + selectQuery.join([ + leftOuterJoin( + sql.household, + sql.household.clientReferenceId + .equalsExp(sql.householdMember.householdClientReferenceId)), + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(sql.household.clientReferenceId)) + ]); } else if (params.nameSearch != null && params.nameSearch!.isNotEmpty && selectQuery != null) { @@ -147,32 +253,111 @@ class IndividualGlobalSearchRepository extends LocalRepository { return selectQuery; } - filterSearch(selectQuery, String filter, LocalSqlDataStore sql) async { + searchByName( + selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) { + return selectQuery.where(buildAnd([ + if (params.nameSearch != null) + buildOr([ + sql.name.givenName.contains( + params.nameSearch!, + ), + ]), + ])); + } + + filterSearch(selectQuery, GlobalSearchParameters params, String filter, + LocalSqlDataStore sql) async { var sql = super.sql; if (selectQuery == null) { - selectQuery = super.sql.individual.select().join([ + if (filter == Status.registered.name || + filter == Status.notRegistered.name) { + selectQuery = sql.individual.select().join([ + if (params.nameSearch == null || !params.isProximityEnabled) + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(sql.individual.clientReferenceId)) + ]) + ..where(filter == Status.registered.name + ? sql.projectBeneficiary.beneficiaryClientReferenceId.isNotNull() + : sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); + } else { + var filterSearchQuery = + await filterTasks(selectQuery, filter, sql, params); + + selectQuery = filterSearchQuery; + } + } else if (selectQuery != null) { + if (filter == Status.registered.name || + filter == Status.notRegistered.name) { + selectQuery = selectQuery.join([ + if (params.nameSearch == null && !params.isProximityEnabled) + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(sql.individual.clientReferenceId)) + ]) + ..where(filter == Status.registered.name + ? sql.projectBeneficiary.beneficiaryClientReferenceId.isNotNull() + : sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); + } else { + var filterSearchQuery = + await filterTasks(selectQuery, filter, sql, params); + selectQuery = filterSearchQuery; + } + } + return selectQuery; + } + + filterTasks(selectQuery, String filter, LocalSqlDataStore sql, + GlobalSearchParameters params) { + final statusMap = { + Status.delivered.name: Status.delivered, + Status.notAdministered.name: Status.notAdministered, + Status.visited.name: Status.visited, + Status.notVisited.name: Status.notVisited, + Status.beneficiaryRefused.name: Status.beneficiaryRefused, + Status.beneficiaryReferred.name: Status.beneficiaryReferred, + Status.administeredSuccess.name: Status.administeredSuccess, + Status.administeredFailed.name: Status.administeredFailed, + Status.inComplete.name: Status.inComplete, + Status.toAdminister.name: Status.toAdminister, + Status.closeHousehold.name: Status.closeHousehold, + }; + var applyFilter = filter; + if (selectQuery == null) { + selectQuery = sql.select(sql.task).join([ leftOuterJoin( sql.projectBeneficiary, - sql.projectBeneficiary.beneficiaryClientReferenceId - .equalsExp(super.sql.individual.clientReferenceId)) + sql.projectBeneficiary.clientReferenceId + .equalsExp(sql.task.projectBeneficiaryClientReferenceId)), + leftOuterJoin( + sql.individual, + sql.individual.clientReferenceId + .equalsExp(sql.projectBeneficiary.beneficiaryClientReferenceId)), ]) - ..where(filter == Status.registered.name - ? sql.projectBeneficiary.beneficiaryClientReferenceId.isNotNull() - : sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); - } else if (selectQuery != null) { + ..where(sql.task.status.equals( + statusMap[applyFilter]!.toValue(), + )); + if (!(params.filter!.contains(Status.notRegistered.name))) { + selectQuery + .where(sql.projectBeneficiary.projectId.equals(params.projectId!)); + } + } else { selectQuery = selectQuery.join([ leftOuterJoin( - sql.projectBeneficiary, - filter == Status.registered.name - ? sql.projectBeneficiary.beneficiaryClientReferenceId - .equalsExp(super.sql.individual.clientReferenceId) - : sql.projectBeneficiary.beneficiaryClientReferenceId - .equalsExp(super.sql.individual.clientReferenceId)) + sql.task, + sql.task.projectBeneficiaryClientReferenceId + .equalsExp(sql.projectBeneficiary.clientReferenceId)) ]) - ..where(filter == Status.registered.name - ? sql.projectBeneficiary.beneficiaryClientReferenceId.isNotNull() - : sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); + ..where(sql.task.status.equals(statusMap[filter]!.toValue())); + + if (!(params.filter!.contains(Status.notRegistered.name))) { + selectQuery + .where(sql.projectBeneficiary.projectId.equals(params.projectId!)); + } } + return selectQuery; } @@ -194,59 +379,104 @@ class IndividualGlobalSearchRepository extends LocalRepository { ); } - performProximitySearch( - selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) { - return (selectQuery - ..where(buildAnd([ - sql.address.relatedClientReferenceId.isNotNull(), - sql.individual.clientReferenceId.isNotNull(), - if (params.latitude != null && - params.longitude != null && - params.maxRadius != null) - CustomExpression(''' - (6371393 * acos( - cos(${params.latitude! * math.pi / 180.0}) * cos((address.latitude * ${math.pi / 180.0})) - * cos((address.longitude * ${math.pi / 180.0}) - ${params.longitude! * math.pi / 180.0}) - + sin(${params.latitude! * math.pi / 180.0}) * sin((address.latitude * ${math.pi / 180.0})) - )) <= ${params.maxRadius!} - '''), - if (params.latitude != null && - params.longitude != null && - params.maxRadius != null) - sql.address.longitude.isNotNull(), - sql.address.latitude.isNotNull(), - ]))) - .orderBy([ - if (params.latitude != null && - params.longitude != null && - params.maxRadius != null) - OrderingTerm( - expression: CustomExpression(''' - (6371393 * acos( - cos(${params.latitude! * math.pi / 180.0}) * cos((address.latitude * ${math.pi / 180.0})) - * cos((address.longitude * ${math.pi / 180.0}) - ${params.longitude! * math.pi / 180.0}) - + sin(${params.latitude! * math.pi / 180.0}) * sin((address.latitude * ${math.pi / 180.0})) - )) - '''), - mode: OrderingMode.asc, - ), - ]); + joinProjectBeneficiary(LocalSqlDataStore sql) { + return leftOuterJoin(sql.projectBeneficiary, + sql.projectBeneficiary.clientReferenceId.isNotNull()); } - searchByName( - selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) { - return selectQuery.where(buildAnd([ - if (params.nameSearch != null) - buildOr([ - sql.name.givenName.contains( - params.nameSearch!, - ), - ]), - ])); + // Executing custom select query on top of filterSelectQuery to get count + _getTotalCount(filterSelectQuery, GlobalSearchParameters params, + LocalSqlDataStore sql) async { + JoinedSelectStatement selectQuery = filterSelectQuery; + var query = + selectQuery.constructQuery().buffer.toString().replaceAll(';', ''); + var variables = selectQuery.constructQuery().introducedVariables; + var indexesLength = selectQuery.constructQuery().variableIndices; + + var totalCount; + + try { + totalCount = await sql + .customSelect('SELECT COUNT(*) AS total_count FROM ($query)', + variables: indexesLength.isNotEmpty + ? variables.map((e) => Variable(e.value)).toList() + : []) + .get(); + } catch (e) { + debugPrint('error in total $e'); + } + return totalCount == null ? 0 : totalCount.first.data['total_count']; } - joinProjectBeneficiary(LocalSqlDataStore sql) { - return leftOuterJoin(sql.projectBeneficiary, - sql.projectBeneficiary.clientReferenceId.isNotNull()); + _returnIndividualModel(results, int? count) { + var data = results + .map((e) { + final individual = e.readTableOrNull(sql.individual); + final address = e.readTableOrNull(sql.address); + final name = e.readTableOrNull(sql.name); + + return IndividualModel( + id: individual?.id, + tenantId: individual?.tenantId, + clientReferenceId: individual!.clientReferenceId, + dateOfBirth: individual.dateOfBirth, + name: NameModel( + givenName: name?.givenName, + individualClientReferenceId: individual.clientReferenceId, + tenantId: individual.tenantId, + auditDetails: AuditDetails( + createdBy: individual.auditCreatedBy!, + createdTime: individual.auditCreatedTime!, + lastModifiedBy: individual.auditModifiedBy, + lastModifiedTime: individual.auditModifiedTime, + ), + ), + rowVersion: individual.rowVersion, + isDeleted: individual.isDeleted, + auditDetails: AuditDetails( + createdBy: individual.auditCreatedBy!, + createdTime: individual.auditCreatedTime!, + lastModifiedBy: individual.auditModifiedBy, + lastModifiedTime: individual.auditModifiedTime, + ), + address: address == null + ? null + : [ + AddressModel( + id: address.id, + relatedClientReferenceId: + address.relatedClientReferenceId, + tenantId: address.tenantId, + doorNo: address.doorNo, + latitude: address.latitude, + longitude: address.longitude, + landmark: address.landmark, + locationAccuracy: address.locationAccuracy, + addressLine1: address.addressLine1, + addressLine2: address.addressLine2, + city: address.city, + pincode: address.pincode, + locality: address.localityBoundaryCode != null + ? LocalityModel( + code: address.localityBoundaryCode!, + name: address.localityBoundaryName, + ) + : null, + type: address.type, + rowVersion: address.rowVersion, + auditDetails: AuditDetails( + createdBy: individual.auditCreatedBy!, + createdTime: individual.auditCreatedTime!, + lastModifiedBy: individual.auditModifiedBy, + lastModifiedTime: individual.auditModifiedTime, + ), + ), + ], + ); + }) + .where((element) => element.isDeleted != true) + .toList(); + + return {'total_count': count, 'data': data}; } } diff --git a/packages/registration_delivery/lib/data/repositories/local/task.dart b/packages/registration_delivery/lib/data/repositories/local/task.dart index a9a23fa42..dbddb9607 100644 --- a/packages/registration_delivery/lib/data/repositories/local/task.dart +++ b/packages/registration_delivery/lib/data/repositories/local/task.dart @@ -287,16 +287,16 @@ class TaskLocalRepository extends LocalRepository { resourcesCompanions, mode: InsertMode.insertOrReplace, ); + } - if (addresses != null) { - final addressCompanions = addresses.companion; + if (addresses != null) { + final addressCompanions = addresses.companion; - batch.insert( - sql.address, - addressCompanions, - mode: InsertMode.insertOrReplace, - ); - } + batch.insert( + sql.address, + addressCompanions, + mode: InsertMode.insertOrReplace, + ); } await super.create( diff --git a/packages/registration_delivery/lib/models/entities/status.dart b/packages/registration_delivery/lib/models/entities/status.dart index 0268d8eb0..c3cb7c79f 100644 --- a/packages/registration_delivery/lib/models/entities/status.dart +++ b/packages/registration_delivery/lib/models/entities/status.dart @@ -7,8 +7,8 @@ part 'status.mapper.dart'; enum Status { @MappableValue("DELIVERED") delivered, - @MappableValue("NOT_DELIVERED") - notDelivered, + @MappableValue("NOT_ADMINISTERED") + notAdministered, @MappableValue("VISITED") visited, @MappableValue("NOT_VISITED") @@ -31,5 +31,4 @@ enum Status { notRegistered, @MappableValue("CLOSED_HOUSEHOLD") closeHousehold, - ; } diff --git a/packages/registration_delivery/lib/models/entities/status.mapper.dart b/packages/registration_delivery/lib/models/entities/status.mapper.dart index de0b39e4b..3f1896d6e 100644 --- a/packages/registration_delivery/lib/models/entities/status.mapper.dart +++ b/packages/registration_delivery/lib/models/entities/status.mapper.dart @@ -27,8 +27,8 @@ class StatusMapper extends EnumMapper { switch (value) { case "DELIVERED": return Status.delivered; - case "NOT_DELIVERED": - return Status.notDelivered; + case "NOT_ADMINISTERED": + return Status.notAdministered; case "VISITED": return Status.visited; case "NOT_VISITED": @@ -61,8 +61,8 @@ class StatusMapper extends EnumMapper { switch (self) { case Status.delivered: return "DELIVERED"; - case Status.notDelivered: - return "NOT_DELIVERED"; + case Status.notAdministered: + return "NOT_ADMINISTERED"; case Status.visited: return "VISITED"; case Status.notVisited: diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart index f73e756db..e0543da70 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart @@ -186,6 +186,7 @@ class BeneficiaryDetailsPageState context, variant, state.selectedIndividual, + state.householdMemberWrapper.household ), barrierDismissible: true, primaryAction: diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart index 1e2a1f3f5..c8fe2c357 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart @@ -141,8 +141,8 @@ class BeneficiaryWrapperPage extends StatelessWidget { )..add(DeliverInterventionSearchEvent( taskSearch: TaskSearchModel( projectBeneficiaryClientReferenceId: houseHoldOverviewState - .householdMemberWrapper.projectBeneficiaries - ?.map((e) => e.clientReferenceId) + .householdMemberWrapper.projectBeneficiaries?.where((element) => element.projectId == RegistrationDeliverySingleton().projectId) + .map((e) => e.clientReferenceId) .toList(), ))), child: BlocProvider( diff --git a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart index 1f3911d98..d33b76454 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart @@ -6,6 +6,7 @@ import 'package:digit_components/widgets/atoms/digit_toaster.dart'; import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/scheduler.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:registration_delivery/models/entities/deliver_strategy_type.dart'; @@ -90,12 +91,11 @@ class DeliverInterventionPageState latitude: lat, longitude: long, ), - isEditing: - ( deliverInterventionState.tasks ?? []) - .isNotEmpty && RegistrationDeliverySingleton().beneficiaryType == - BeneficiaryType.household - ? true - : false, + isEditing: (deliverInterventionState.tasks ?? []).isNotEmpty && + RegistrationDeliverySingleton().beneficiaryType == + BeneficiaryType.household + ? true + : false, boundaryModel: RegistrationDeliverySingleton().boundary!, navigateToSummary: true, householdMemberWrapper: householdMember), @@ -176,17 +176,19 @@ class DeliverInterventionPageState ?.isNotEmpty == true ? (fetchProductVariant( - RegistrationDeliverySingleton() - .selectedProject - ?.additionalDetails - ?.projectType - ?.cycles![deliveryInterventionState - .cycle - - 1] - .deliveries?[ - deliveryInterventionState.dose - 1], - state.selectedIndividual, - )?.productVariants) + RegistrationDeliverySingleton() + .selectedProject + ?.additionalDetails + ?.projectType + ?.cycles![ + deliveryInterventionState + .cycle - + 1] + .deliveries?[ + deliveryInterventionState.dose - 1], + state.selectedIndividual, + state.householdMemberWrapper.household) + ?.productVariants) : RegistrationDeliverySingleton() .selectedProject ?.additionalDetails @@ -210,18 +212,20 @@ class DeliverInterventionPageState : 0; final steps = generateSteps(numberOfDoses); - if ((productVariants ?? []).isEmpty) { - DigitToast.show( - context, - options: DigitToastOptions( - localizations.translate( - i18.deliverIntervention - .checkForProductVariantsConfig, + if ((productVariants ?? []).isEmpty && context.mounted) { + SchedulerBinding.instance.addPostFrameCallback((_) { + DigitToast.show( + context, + options: DigitToastOptions( + localizations.translate( + i18.deliverIntervention + .checkForProductVariantsConfig, + ), + true, + theme, ), - true, - theme, - ), - ); + ); + }); } return BlocBuilder 1) + DigitStepper( + activeStep: + deliveryInterventionState + .dose - + 1, + stepRadius: 12.5, + steps: steps, + maxStepReached: 3, + lineLength: (MediaQuery.of( + context) + .size + .width - + 12.5 * + 2 * + steps.length - + 50) / + (steps.length - 1), + ), DigitDateFormPicker( isEnabled: false, formControlName: @@ -620,6 +625,9 @@ class DeliverInterventionPageState task ??= TaskModel( projectBeneficiaryClientReferenceId: projectBeneficiaryClientReferenceId, clientReferenceId: clientReferenceId, + address: address?.copyWith( + relatedClientReferenceId: clientReferenceId, + ), tenantId: RegistrationDeliverySingleton().tenantId, rowVersion: 1, auditDetails: AuditDetails( @@ -729,21 +737,35 @@ class DeliverInterventionPageState List? variants, ) { final bloc = context.read().state; + final overViewbloc = context.read().state; + _controllers.forEachIndexed((index, element) { + _controllers.removeAt(index); + }); // Add controllers for each product variant to the _controllers list. - - if ((bloc.tasks?.last.resources ?? []).isNotEmpty) { - _controllers.addAll(bloc.tasks!.last.resources!.mapIndexed((e, i) => i)); - } else { - var groupedVariants = >{}; - variants?.forEach((variant) { - if (!groupedVariants.containsKey(variant.productId)) { - groupedVariants[variant.productId!] = []; - } - groupedVariants[variant.productId]!.add(variant); - }); - - _controllers.addAll(groupedVariants.keys.mapIndexed((e, i) => i)); + if (_controllers.isEmpty) { + final int r = RegistrationDeliverySingleton() + .selectedProject + ?.additionalDetails + ?.projectType + ?.cycles == + null + ? 1 + : fetchProductVariant( + RegistrationDeliverySingleton() + .selectedProject + ?.additionalDetails + ?.projectType + ?.cycles![bloc.cycle - 1] + .deliveries?[bloc.dose - 1], + overViewbloc.selectedIndividual, + overViewbloc.householdMemberWrapper.household)! + .productVariants + ?.length ?? + 0; + + _controllers.addAll(List.generate(r, (index) => index) + .mapIndexed((index, element) => index)); } return fb.group({ @@ -777,16 +799,18 @@ class DeliverInterventionPageState _resourceDeliveredKey: FormArray( [ ..._controllers.map((e) => FormControl( - value: variants != null && - _controllers.indexOf(e) < variants.length - ? variants.firstWhereOrNull( - (element) => - element.id == - productVariants - ?.elementAt(_controllers.indexOf(e)) - .productVariantId, - ) - : null, + value: variants != null && variants.length < _controllers.length + ? variants.last + : (variants != null && + _controllers.indexOf(e) < variants.length + ? variants.firstWhereOrNull( + (element) => + element.id == + productVariants + ?.elementAt(_controllers.indexOf(e)) + .productVariantId, + ) + : null), )), ], ), diff --git a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart index ef799324f..3d06173d8 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart @@ -108,9 +108,11 @@ class DeliverySummaryPageState extends LocalizedState { context.read().add( DeliverInterventionSubmitEvent( task: deliverState.oldTask!, - isEditing: ( deliverState.tasks ?? []) - .isNotEmpty && RegistrationDeliverySingleton().beneficiaryType == - BeneficiaryType.household + isEditing: (deliverState.tasks ?? []) + .isNotEmpty && + RegistrationDeliverySingleton() + .beneficiaryType == + BeneficiaryType.household ? true : false, boundaryModel: @@ -318,17 +320,16 @@ class DeliverySummaryPageState extends LocalizedState { withDivider: true, items: [ LabelValuePair( - label: localizations.translate( - deliverState.oldTask?.status == - Status.administeredFailed - .toValue() || - deliverState.oldTask?.status == - Status.beneficiaryRefused - .toValue() - ? i18.deliverIntervention - .reasonForRefusalLabel - : i18.deliverIntervention - .typeOfInsecticideUsed), + label: localizations.translate(deliverState + .oldTask?.status == + Status.administeredFailed + .toValue() || + deliverState.oldTask?.status == + Status.beneficiaryRefused + .toValue() + ? i18.deliverIntervention + .reasonForRefusalLabel + : '${RegistrationDeliverySingleton().selectedProject?.name.toUpperCase()}_${i18.deliverIntervention.typeOfResourceUsed}'), value: deliverState.oldTask?.status == Status.administeredFailed .toValue() || diff --git a/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart b/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart index 70e8e8acd..74cb1f27a 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart @@ -108,9 +108,9 @@ class DoseAdministeredPageState extends LocalizedState { } form.markAllAsTouched(); - if (!form.valid) + if (!form.valid) { return; - else { + } else { final doseAdministered = form .control(_doseAdministeredKey) .value as KeyValue; @@ -170,9 +170,12 @@ class DoseAdministeredPageState extends LocalizedState { .millisecondsSinceEpoch(), ), resources: fetchProductVariant( - e, - overViewBloc.selectedIndividual, - ) + e, + overViewBloc + .selectedIndividual, + overViewBloc + .householdMemberWrapper + .household) ?.productVariants ?.map((variant) => TaskResourceModel( @@ -364,9 +367,10 @@ class DoseAdministeredPageState extends LocalizedState { deliveryState.dose + 1; List skus = fetchProductVariant( - e, - overViewBloc.selectedIndividual, - )! + e, + overViewBloc.selectedIndividual, + overViewBloc.householdMemberWrapper + .household)! .productVariants! .map((ele) { final pv = variant!.firstWhere( @@ -416,12 +420,16 @@ class DoseAdministeredPageState extends LocalizedState { localizations.translate( i18.beneficiaryDetails .beneficiaryAge, - ): localizations - .translate(fetchProductVariant( - deliveryState - .futureDeliveries?.first, - overViewBloc.selectedIndividual, - )! + ): localizations.translate( + fetchProductVariant( + deliveryState + .futureDeliveries + ?.first, + overViewBloc + .selectedIndividual, + overViewBloc + .householdMemberWrapper + .household)! .condition!), }, ), diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index b0997de47..cae3e78fb 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -82,8 +82,7 @@ class _HouseholdOverviewPageState const EdgeInsets.fromLTRB(0, kPadding, 0, 0), padding: const EdgeInsets.fromLTRB( kPadding, 0, kPadding, 0), - child: deliverInterventionState - .tasks?.last.status == + child: state.householdMemberWrapper.tasks?.lastOrNull?.status == Status.administeredSuccess.toValue() ? Padding( padding: const EdgeInsets.symmetric( @@ -93,7 +92,7 @@ class _HouseholdOverviewPageState i18.memberCard .deliverDetailsUpdateLabel, ), - onPressed: state.householdMemberWrapper.tasks?.last.status == Status.administeredSuccess.toValue() ? null :() { + onPressed: state.householdMemberWrapper.tasks?.lastOrNull?.status == Status.administeredSuccess.toValue() ? null :() { serviceDefinitionState.when( empty: () {}, isloading: () {}, @@ -123,7 +122,7 @@ class _HouseholdOverviewPageState []) .isEmpty || state.householdMemberWrapper.tasks - ?.last.status == + ?.lastOrNull?.status == Status.closeHousehold.toValue() ? null : () async { @@ -429,7 +428,7 @@ class _HouseholdOverviewPageState .householdMemberWrapper.sideEffects ?.where((element) => element.taskClientReferenceId == - taskData.last.clientReferenceId) + taskData.lastOrNull?.clientReferenceId) .toList() : null; final ageInYears = e.dateOfBirth != null @@ -629,7 +628,7 @@ class _HouseholdOverviewPageState RegistrationDeliverySingleton() .projectType, (taskData ?? []).isNotEmpty - ? taskData?.last + ? taskData?.lastOrNull : null, sideEffectData, ) @@ -758,14 +757,14 @@ class _HouseholdOverviewPageState : Status.registered.toValue(); color = state.householdMemberWrapper.tasks?.isNotEmpty ?? false - ? (state.householdMemberWrapper.tasks?.last.status == + ? (state.householdMemberWrapper.tasks?.lastOrNull?.status == Status.administeredSuccess.toValue() ? DigitTheme.instance.colorScheme.onSurfaceVariant : DigitTheme.instance.colorScheme.error) : DigitTheme.instance.colorScheme.onSurfaceVariant; icon = state.householdMemberWrapper.tasks?.isNotEmpty ?? false - ? (state.householdMemberWrapper.tasks?.last.status == + ? (state.householdMemberWrapper.tasks?.lastOrNull?.status == Status.administeredSuccess.toValue() ? Icons.check_circle : Icons.info_rounded) diff --git a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart index c5d6b2b73..033d184ac 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart @@ -106,20 +106,33 @@ class RefusedDeliveryPageState extends LocalizedState { // Determine the status based on the reason of refusal String status; - if (reasonOfRefusal ==Status.beneficiaryRefused.toValue()) { + if (reasonOfRefusal == + Status.beneficiaryRefused.toValue()) { status = Status.beneficiaryRefused.toValue(); } else { status = Status.administeredFailed.toValue(); } - final oldTask = RegistrationDeliverySingleton().beneficiaryType != - BeneficiaryType.individual ? registrationState.householdMemberWrapper.tasks?.last : null; + final oldTask = + RegistrationDeliverySingleton().beneficiaryType != + BeneficiaryType.individual + ? registrationState + .householdMemberWrapper.tasks?.last + : null; context.read().add( DeliverInterventionSubmitEvent( navigateToSummary: true, householdMemberWrapper: registrationState.householdMemberWrapper, - task: _getTaskModel(oldTask, projectBeneficiary?.first?.clientReferenceId, status, reasonOfRefusal, refusalComment), + task: _getTaskModel( + oldTask, + projectBeneficiary + ?.first?.clientReferenceId, + status, + reasonOfRefusal, + refusalComment, + registrationState.householdMemberWrapper + .members?.first.address?.first), isEditing: false, boundaryModel: RegistrationDeliverySingleton().boundary!, @@ -188,7 +201,8 @@ class RefusedDeliveryPageState extends LocalizedState { ), isRequired: true, child: SelectionBox( - width: MediaQuery.of(context).size.width*.36, + width: MediaQuery.of(context).size.width * + .36, allowMultipleSelection: false, options: RegistrationDeliverySingleton() .refusalReasons ?? @@ -215,8 +229,8 @@ class RefusedDeliveryPageState extends LocalizedState { }); }, valueMapper: (value) { - return localizations - .translate('REASON_${value.toString()}'); + return localizations.translate( + 'REASON_${value.toString()}'); }, errorMessage: form .control(_reasonOfRefusal) @@ -248,64 +262,63 @@ class RefusedDeliveryPageState extends LocalizedState { }, )), ); - - } - _getTaskModel(TaskModel? oldTask, String? projectBeneficiaryClientReferenceId, String status, String? reasonOfRefusal, String? refusalComment) { + _getTaskModel( + TaskModel? oldTask, + String? projectBeneficiaryClientReferenceId, + String status, + String? reasonOfRefusal, + String? refusalComment, + AddressModel? address, + ) { var task = oldTask; var clientReferenceId = task?.clientReferenceId ?? IdGen.i.identifier; - task ??=TaskModel( - projectBeneficiaryClientReferenceId:projectBeneficiaryClientReferenceId, - clientReferenceId: clientReferenceId, - tenantId: RegistrationDeliverySingleton() - .tenantId, - rowVersion: 1, - auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: - context.millisecondsSinceEpoch(), - ), - projectId: RegistrationDeliverySingleton() - .projectId, - clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: - context.millisecondsSinceEpoch(), - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: - context.millisecondsSinceEpoch(), - ), - ); - - task = task.copyWith( - status: status, - additionalFields: TaskAdditionalFields( - version: 1, - fields: [ - AdditionalField( - AdditionalFieldsType.reasonOfRefusal - .toValue(), - reasonOfRefusal, - ), - if (refusalComment != null) - AdditionalField( - AdditionalFieldsType.deliveryComment - .toValue(), - refusalComment, - ), - ], - ), - ); + task ??= TaskModel( + projectBeneficiaryClientReferenceId: projectBeneficiaryClientReferenceId, + clientReferenceId: clientReferenceId, + address: address?.copyWith( + relatedClientReferenceId: clientReferenceId, + ), + tenantId: RegistrationDeliverySingleton().tenantId, + rowVersion: 1, + auditDetails: AuditDetails( + createdBy: RegistrationDeliverySingleton().loggedInUserUuid!, + createdTime: context.millisecondsSinceEpoch(), + ), + projectId: RegistrationDeliverySingleton().projectId, + clientAuditDetails: ClientAuditDetails( + createdBy: RegistrationDeliverySingleton().loggedInUserUuid!, + createdTime: context.millisecondsSinceEpoch(), + lastModifiedBy: RegistrationDeliverySingleton().loggedInUserUuid, + lastModifiedTime: context.millisecondsSinceEpoch(), + ), + ); + task = task.copyWith( + status: status, + address: address?.copyWith( + relatedClientReferenceId: clientReferenceId, + ), + additionalFields: TaskAdditionalFields( + version: 1, + fields: [ + AdditionalField( + AdditionalFieldsType.reasonOfRefusal.toValue(), + reasonOfRefusal, + ), + if (refusalComment != null) + AdditionalField( + AdditionalFieldsType.deliveryComment.toValue(), + refusalComment, + ), + ], + ), + ); - return task; + return task; + } - } FormGroup buildForm() { return fb.group({ _dataOfRefusalKey: diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart index ebbbfaf28..ba7118d19 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart @@ -4,6 +4,7 @@ import 'package:digit_components/models/digit_table_model.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:registration_delivery/blocs/app_localization.dart'; +import 'package:registration_delivery/registration_delivery.dart'; import '../../../blocs/delivery_intervention/deliver_intervention.dart'; import '../../../utils/i18_key_constants.dart' as i18; @@ -15,6 +16,7 @@ Widget buildTableContent( BuildContext context, List? variant, IndividualModel? individualModel, + HouseholdModel? householdModel, ) { // Calculate the current cycle. If deliverInterventionState.cycle is negative, set it to 0. final currentCycle = @@ -44,7 +46,7 @@ Widget buildTableContent( final item = projectType.cycles?[currentCycle - 1].deliveries?[currentDose - 1]; final productVariants = - fetchProductVariant(item, individualModel)?.productVariants; + fetchProductVariant(item, individualModel, householdModel)?.productVariants; final numRows = productVariants?.length ?? 0; const rowHeight = 84; const paddingHeight = (kPadding * 2); @@ -72,9 +74,9 @@ Widget buildTableContent( element: { localizations.translate( i18.beneficiaryDetails.beneficiaryAge, - ): fetchProductVariant(item, individualModel)?.condition != null + ): fetchProductVariant(item, individualModel, householdModel)?.condition != null ? localizations.translate( - fetchProductVariant(item, individualModel)!.condition!) + fetchProductVariant(item, individualModel, householdModel)!.condition!) : null, }, ), @@ -82,11 +84,11 @@ Widget buildTableContent( thickness: 1.0, ), // Build the DigitTable with the data - fetchProductVariant(item, individualModel)?.productVariants != null + fetchProductVariant(item, individualModel, householdModel)?.productVariants != null ? DigitTable( headerList: headerListResource, tableData: [ - ...fetchProductVariant(item, individualModel)! + ...fetchProductVariant(item, individualModel, householdModel )! .productVariants! .map( (e) { @@ -102,7 +104,7 @@ Widget buildTableContent( // Display the dose information in the first column if it's the first row, // otherwise, display an empty cell. - fetchProductVariant(item, individualModel) + fetchProductVariant(item, individualModel, householdModel) ?.productVariants ?.indexOf(e) == 0 @@ -121,7 +123,7 @@ Widget buildTableContent( ), ], columnWidth: columnWidth, - height: ((fetchProductVariant(item, individualModel) + height: ((fetchProductVariant(item, individualModel, householdModel) ?.productVariants ?? []) .length + diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index 13118d83d..0cf5c4650 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -169,19 +169,27 @@ class _SearchBeneficiaryPageState } }, ), - Align( - alignment: Alignment.topLeft, - child: Padding( - padding: - const EdgeInsets.only(left: kPadding), - child: DigitIconButton( - textDirection: TextDirection.rtl, - iconText: getFilterIconNLabel()['label'], - icon: getFilterIconNLabel()['icon'], - onPressed: () => showFilterDialog(), - ), - ), - ), + RegistrationDeliverySingleton() + .searchHouseHoldFilter != + null && + RegistrationDeliverySingleton() + .searchHouseHoldFilter! + .isNotEmpty + ? Align( + alignment: Alignment.topLeft, + child: Padding( + padding: const EdgeInsets.only( + left: kPadding), + child: DigitIconButton( + textDirection: TextDirection.rtl, + iconText: + getFilterIconNLabel()['label'], + icon: getFilterIconNLabel()['icon'], + onPressed: () => showFilterDialog(), + ), + ), + ) + : const Offstage(), selectedFilters.isNotEmpty ? Align( alignment: Alignment.topLeft, @@ -474,9 +482,13 @@ class _SearchBeneficiaryPageState dialogPadding: EdgeInsets.zero, contentPadding: EdgeInsets.zero, barrierDismissible: true, - content: StatusFilter(selectedFilters: selectedFilters, titleIcon: Icon(getFilterIconNLabel()['icon'], - color: const DigitColors().burningOrange), - titleText: getFilterIconNLabel()['label'], isCloseIcon: true,), + content: StatusFilter( + selectedFilters: selectedFilters, + titleIcon: Icon(getFilterIconNLabel()['icon'], + color: const DigitColors().burningOrange), + titleText: getFilterIconNLabel()['label'], + isCloseIcon: true, + ), )); if (filters != null && filters.isNotEmpty) { @@ -510,6 +522,7 @@ class _SearchBeneficiaryPageState globalSearchParams: GlobalSearchParameters( isProximityEnabled: isProximityEnabled, latitude: lat, + projectId: RegistrationDeliverySingleton().projectId!, longitude: long, maxRadius: RegistrationDeliverySingleton().maxRadius, nameSearch: searchController.text.trim().length > 2 @@ -517,10 +530,10 @@ class _SearchBeneficiaryPageState : blocWrapper.searchHouseholdsBloc.state.searchQuery, filter: selectedFilters, offset: isPagination - ? blocWrapper.houseHoldGlobalSearchBloc.state.offset + ? blocWrapper.individualGlobalSearchBloc.state.offset : offset, limit: isPagination - ? blocWrapper.houseHoldGlobalSearchBloc.state.limit + ? blocWrapper.individualGlobalSearchBloc.state.limit : limit, ))); } @@ -534,6 +547,7 @@ class _SearchBeneficiaryPageState isProximityEnabled: isProximityEnabled, latitude: lat, longitude: long, + projectId: RegistrationDeliverySingleton().projectId!, maxRadius: RegistrationDeliverySingleton().maxRadius, nameSearch: searchController.text.trim().length > 2 ? searchController.text.trim() @@ -553,7 +567,7 @@ class _SearchBeneficiaryPageState String getStatus(String selectedFilter) { final statusMap = { Status.delivered.toValue(): Status.delivered, - Status.notDelivered.toValue(): Status.notDelivered, + Status.notAdministered.toValue(): Status.notAdministered, Status.visited.toValue(): Status.visited, Status.notVisited.toValue(): Status.notVisited, Status.beneficiaryRefused.toValue(): Status.beneficiaryRefused, diff --git a/packages/registration_delivery/lib/utils/global_search_parameters.dart b/packages/registration_delivery/lib/utils/global_search_parameters.dart index e4642cc5a..dfee00637 100644 --- a/packages/registration_delivery/lib/utils/global_search_parameters.dart +++ b/packages/registration_delivery/lib/utils/global_search_parameters.dart @@ -1,6 +1,7 @@ class GlobalSearchParameters { final bool isProximityEnabled; final double? latitude; + final String? projectId; final double? longitude; final double? maxRadius; final String? nameSearch; @@ -19,5 +20,6 @@ class GlobalSearchParameters { required this.limit, required this.filter, this.totalCount, + this.projectId }); } diff --git a/packages/registration_delivery/lib/utils/i18_key_constants.dart b/packages/registration_delivery/lib/utils/i18_key_constants.dart index e93e3254e..671c89cb8 100644 --- a/packages/registration_delivery/lib/utils/i18_key_constants.dart +++ b/packages/registration_delivery/lib/utils/i18_key_constants.dart @@ -512,8 +512,7 @@ class DeliverIntervention { String get resourceDeliveredLabel => 'DELIVER_INTERVENTION_RESOURCE_DELIVERED_LABEL'; - String get typeOfInsecticideUsed => - 'DELIVER_INTERVENTION_TYPE_OF_INSECTICIDE_USED'; + String get typeOfResourceUsed => 'TYPE_OF_RESOURCE_USED'; String get resourceDeliveredError => 'DELIVER_INTERVENTION_RESOURCE_DELIVERED_ERROR'; diff --git a/packages/registration_delivery/lib/utils/utils.dart b/packages/registration_delivery/lib/utils/utils.dart index 08640ba8d..1b40a62af 100644 --- a/packages/registration_delivery/lib/utils/utils.dart +++ b/packages/registration_delivery/lib/utils/utils.dart @@ -6,6 +6,7 @@ import 'package:digit_components/utils/date_utils.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:formula_parser/formula_parser.dart'; import 'package:reactive_forms/reactive_forms.dart'; +import 'package:registration_delivery/models/entities/household.dart'; import '../models/entities/additional_fields_type.dart'; import '../models/entities/referral.dart'; @@ -181,19 +182,34 @@ bool checkIfBeneficiaryReferred( } } -DeliveryDoseCriteria? fetchProductVariant( - ProjectCycleDelivery? currentDelivery, - IndividualModel? individualModel, -) { - if (currentDelivery != null && individualModel != null) { - final individualAge = DigitDateUtils.calculateAge( - DigitDateUtils.getFormattedDateToDateTime( - individualModel.dateOfBirth!, - ) ?? - DateTime.now(), - ); - final individualAgeInMonths = - individualAge.years * 12 + individualAge.months; +DeliveryDoseCriteria? fetchProductVariant(ProjectCycleDelivery? currentDelivery, + IndividualModel? individualModel, HouseholdModel? householdModel) { + if (currentDelivery != null) { + var individualAgeInMonths = 0; + var gender; + var roomCount; + var memberCount; + + if (individualModel != null) { + final individualAge = DigitDateUtils.calculateAge( + DigitDateUtils.getFormattedDateToDateTime( + individualModel.dateOfBirth!, + ) ?? + DateTime.now(), + ); + individualAgeInMonths = individualAge.years * 12 + individualAge.months; + + gender = individualModel.gender?.index; + } + if (householdModel != null && householdModel.additionalFields != null) { + memberCount = householdModel.memberCount; + roomCount = int.tryParse(householdModel.additionalFields?.fields + .where((h) => h.key == AdditionalFieldsType.noOfRooms.toValue()) + .firstOrNull + ?.value + .toString() ?? + '1')!; + } final filteredCriteria = currentDelivery.doseCriteria?.where((criteria) { final condition = criteria.condition; @@ -206,8 +222,9 @@ DeliveryDoseCriteria? fetchProductVariant( element, { 'age': individualAgeInMonths, - if (individualModel.gender != null) - 'gender': individualModel.gender?.index, + if (gender != null) 'gender': gender, + if (memberCount != null) 'memberCount': memberCount, + if (roomCount != null) 'roomCount': roomCount }, ); final error = expression.parse; @@ -435,7 +452,7 @@ bool allDosesDelivered( Status getTaskStatus(Iterable tasks) { final statusMap = { Status.delivered.toValue(): Status.delivered, - Status.notDelivered.toValue(): Status.notDelivered, + Status.notAdministered.toValue(): Status.notAdministered, Status.visited.toValue(): Status.visited, Status.notVisited.toValue(): Status.notVisited, Status.beneficiaryRefused.toValue(): Status.beneficiaryRefused, diff --git a/packages/registration_delivery/lib/widgets/member_card/member_card.dart b/packages/registration_delivery/lib/widgets/member_card/member_card.dart index 8549c7cfe..014dab8dc 100644 --- a/packages/registration_delivery/lib/widgets/member_card/member_card.dart +++ b/packages/registration_delivery/lib/widgets/member_card/member_card.dart @@ -162,9 +162,9 @@ class MemberCard extends StatelessWidget { ), Expanded( child: Text( - years!=null && months != null ? - " | $years ${localizations.translate(i18.memberCard.deliverDetailsYearText)} $months ${localizations.translate(i18.memberCard.deliverDetailsMonthsText)}" - : "| --" , + years != null && months != null + ? " | $years ${localizations.translate(i18.memberCard.deliverDetailsYearText)} $months ${localizations.translate(i18.memberCard.deliverDetailsMonthsText)}" + : "| --", style: theme.textTheme.bodyMedium, ), ), diff --git a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart index 0cab882cc..90b0b2c44 100644 --- a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart +++ b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart @@ -45,118 +45,120 @@ class StatusFilterState extends LocalizedState { mainAxisSize: MainAxisSize.min, children: isLoading ? [ - Padding( - padding: const EdgeInsets.only(top: kPadding*2), - child: Icon( - Icons.autorenew, - color: const DigitColors().burningOrange, - size: kPadding * 4, - ), - ), - const SizedBox(height: kPadding * 2), - Center( - child: Text( - localizations.translate(i18.common.coreCommonLoadingText), - style: theme.textTheme.headlineSmall - ?.copyWith(color: const DigitColors().burningOrange), - ), - ) - ] - : [ - Row( - children: [ - if (widget.titleIcon != null) ...[ Padding( - padding: const EdgeInsets.all(kPadding), - child: widget.titleIcon!, + padding: const EdgeInsets.only(top: kPadding * 2), + child: Icon( + Icons.autorenew, + color: const DigitColors().burningOrange, + size: kPadding * 4, + ), ), - ], - Expanded( - child: Padding( - padding: const EdgeInsets.symmetric(vertical: kPadding), + const SizedBox(height: kPadding * 2), + Center( child: Text( - widget.titleText!, - textAlign: TextAlign.left, - style: DigitTheme.instance.mobileTheme.textTheme.headlineMedium, + localizations.translate(i18.common.coreCommonLoadingText), + style: theme.textTheme.headlineSmall + ?.copyWith(color: const DigitColors().burningOrange), ), - ), - ), - if (widget.isCloseIcon) - InkWell( - onTap: () => Navigator.of(context).pop(), - child: const Icon(Icons.close), - ), - ], - ), - Padding( - padding: const EdgeInsets.all(kPadding), - child: SelectionBox( - options: getFilters() ?? [], - allowMultipleSelection: false, - equalWidthOptions: true, - initialSelection: [...selectedButtons], - onSelectionChanged: (selected) { - setState(() { - selectedButtons = selected; - }); - }, - valueMapper: (value) { - return localizations.translate(value.toValue().toString()); - }, - ), - ), - const SizedBox( - height: kPadding, - ), - Padding( - padding: const EdgeInsets.symmetric(horizontal: kPadding), - child: Row( - mainAxisAlignment: - MainAxisAlignment.spaceEvenly, // Adjust button spacing - children: [ - Expanded( - child: DigitOutLineButton( - label: localizations.translate( - i18.searchBeneficiary.clearFilter, + ) + ] + : [ + Row( + children: [ + if (widget.titleIcon != null) ...[ + Padding( + padding: const EdgeInsets.all(kPadding), + child: widget.titleIcon!, + ), + ], + Expanded( + child: Padding( + padding: const EdgeInsets.symmetric(vertical: kPadding), + child: Text( + widget.titleText!, + textAlign: TextAlign.left, + style: DigitTheme + .instance.mobileTheme.textTheme.headlineMedium, + ), ), - onPressed: selectedButtons.isEmpty - ? null - : () { - setState(() { - selectedButtons.clear(); - }); - }), + ), + if (widget.isCloseIcon) + InkWell( + onTap: () => Navigator.of(context).pop(), + child: const Icon(Icons.close), + ), + ], + ), + Padding( + padding: const EdgeInsets.all(kPadding), + child: SelectionBox( + options: getFilters() ?? [], + allowMultipleSelection: false, + equalWidthOptions: true, + initialSelection: [...selectedButtons], + onSelectionChanged: (selected) { + setState(() { + selectedButtons = selected; + }); + }, + valueMapper: (value) { + return localizations + .translate(value.toValue().toString()); + }, + ), ), const SizedBox( - width: kPadding, + height: kPadding, ), - Expanded( - child: DigitElevatedButton( - onPressed: selectedButtons.isEmpty - ? null - : () { - setState(() { - isLoading = true; - }); - var selected = selectedButtons - .map((e) => e.name) - .toList(); + Padding( + padding: const EdgeInsets.symmetric(horizontal: kPadding), + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, // Adjust button spacing + children: [ + Expanded( + child: DigitOutLineButton( + label: localizations.translate( + i18.searchBeneficiary.clearFilter, + ), + onPressed: selectedButtons.isEmpty + ? null + : () { + setState(() { + selectedButtons.clear(); + }); + }), + ), + const SizedBox( + width: kPadding, + ), + Expanded( + child: DigitElevatedButton( + onPressed: selectedButtons.isEmpty + ? null + : () { + setState(() { + isLoading = true; + }); + var selected = selectedButtons + .map((e) => e.name) + .toList(); - Future.delayed(const Duration(seconds: 1), - () { - Navigator.pop(context, selected); - }); - }, - child: Text( - localizations.translate( - i18.searchBeneficiary.applyFilter, - ), - )), - ), + Future.delayed(const Duration(seconds: 1), + () { + Navigator.pop(context, selected); + }); + }, + child: Text( + localizations.translate( + i18.searchBeneficiary.applyFilter, + ), + )), + ), + ], + ), + ) ], - ), - ) - ], ), ); } @@ -174,8 +176,8 @@ class StatusFilterState extends LocalizedState { getFilters() { var finalStatues = []; finalStatues.addAll((RegistrationDeliverySingleton() - .searchHouseHoldFilter ?? - []) + .searchHouseHoldFilter ?? + []) .map((e) => Status.values.where((element) => element.toValue() == e)) .expand((element) => element) .toList()); @@ -191,4 +193,4 @@ class StatusFilterState extends LocalizedState { .toList(); }); } -} \ No newline at end of file +} diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 9a3aefe2e..aba4e9cae 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -428,18 +428,18 @@ packages: dependency: "direct main" description: name: digit_data_model - sha256: "5559c3e652a24f3d24f324d275399f6e864ca5671285386516b94fdf9fe8724c" + sha256: e1ea907e9cb7d521341325ac1b1b98fad8bd5e5ca1bab7f7c18ed02ccd2f2c2b url: "https://pub.dev" source: hosted - version: "1.0.3-dev.3" + version: "1.0.3" digit_scanner: dependency: "direct main" description: name: digit_scanner - sha256: bc172291df5ffe720e3d471fbc5c542086b8efecbdb6e25ee737381cc47c8e05 + sha256: "1f1fe3ca8f038a3c93cd52491cf72c0b0e45c88b14580243d47eac59672e67ea" url: "https://pub.dev" source: hosted - version: "1.0.3-dev.1" + version: "1.0.3" digit_showcase: dependency: "direct main" description: diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index 6105ad697..163e31601 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -1,6 +1,6 @@ name: registration_delivery description: This package enables health facility workers to register a household and individual members and deliver the resources. -version: 1.0.3-dev.5 +version: 1.0.3 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/registration_delivery repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -29,10 +29,10 @@ dependencies: uuid: ^3.0.6 recase: ^4.1.0 pluto_grid: ^7.0.1 - digit_scanner: ^1.0.3-dev.1 + digit_scanner: ^1.0.3 gs1_barcode_parser: ^1.0.5 auto_route: ^7.8.4 - digit_data_model: ^1.0.3-dev.3 + digit_data_model: ^1.0.3 package_info_plus: ^5.0.1 digit_showcase: ^1.0.0 collection: ^1.16.0 diff --git a/tools/digit_dss_imports.dart b/tools/digit_dss_imports.dart index 2e8842a46..52fd61fbb 100644 --- a/tools/digit_dss_imports.dart +++ b/tools/digit_dss_imports.dart @@ -117,8 +117,7 @@ void _updateHome(String homeFilePath) { '''; var showCaseData = ''' - i18.home.dashboard: - homeShowcaseData.dashBoard.showcaseKey, + i18.home.dashboard: homeShowcaseData.dashBoard.showcaseKey, '''; var itemsLabel = ''' From 162b89feafbee3a2d044d8ca54ea102e46e43c0e Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Mon, 26 Aug 2024 12:01:37 +0530 Subject: [PATCH 076/241] Added Privacy Policy (#499) * added data privacy component * added privacy component * updated localization * updated the dialog to use localized value * updated privacy config inside mdms * updated privacy model * removed local privacy config now coming from mdms * Delete packages/digit_components/lib/widgets/atoms/privacy_component.dart as component is part of main application * fixed github build issue * added a configuration to enable or disable this privacy policy component * fix the issue when privacy policy component is not there * fix the issue when privacy policy component is not there * fixed github comments --------- Co-authored-by: rachana-egov --- .../app_initialization.dart | 3 +- .../no_sql/schema/app_configuration.dart | 34 + .../no_sql/schema/app_configuration.g.dart | 2047 ++++++++++++++++- .../lib/data/repositories/remote/mdms.dart | 31 + .../models/app_config/app_config_model.dart | 2 + .../app_config/app_config_model.freezed.dart | 62 +- .../models/app_config/app_config_model.g.dart | 4 + .../models/entities/mdms_master_enums.dart | 2 + .../entities/mdms_master_enums.mapper.dart | 4 + .../privacy_notice/privacy_notice_model.dart | 50 + .../privacy_notice_model.freezed.dart | 796 +++++++ .../privacy_notice_model.g.dart | 79 + .../lib/pages/login.dart | 34 + .../lib/utils/i18_key_constants.dart | 18 + .../privacy_notice/privacy_component.dart | 172 ++ .../privacy_notice/privacy_notice_dialog.dart | 142 ++ .../privacy_notice_expand_component.dart | 251 ++ 17 files changed, 3705 insertions(+), 26 deletions(-) create mode 100644 apps/health_campaign_field_worker_app/lib/models/privacy_notice/privacy_notice_model.dart create mode 100644 apps/health_campaign_field_worker_app/lib/models/privacy_notice/privacy_notice_model.freezed.dart create mode 100644 apps/health_campaign_field_worker_app/lib/models/privacy_notice/privacy_notice_model.g.dart create mode 100644 apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_component.dart create mode 100644 apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_notice_dialog.dart create mode 100644 apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_notice_expand_component.dart diff --git a/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.dart b/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.dart index 98a9ac125..4530ae776 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/app_initialization/app_initialization.dart @@ -112,7 +112,8 @@ class AppInitializationBloc moduleName: ModuleEnums.commonMasters.toValue(), masterDetails: getMasterDetailsModel([ MasterEnums.stateInfo.toValue(), - MasterEnums.genderType.toValue() + MasterEnums.genderType.toValue(), + MasterEnums.privacyPolicy.toValue(), ]), ), MdmsModuleDetailModel( diff --git a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.dart b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.dart index 44c01b1f5..ff59f2077 100644 --- a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.dart +++ b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.dart @@ -1,6 +1,8 @@ import 'package:digit_dss/digit_dss.dart'; import 'package:isar/isar.dart'; +import '../../../../models/privacy_notice/privacy_notice_model.dart'; + part 'app_configuration.g.dart'; @Collection() @@ -79,6 +81,7 @@ class AppConfiguration { late List? referralReasons; late List? houseStructureTypes; late List? refusalReasons; + late PrivacyPolicy? privacyPolicyConfig; } @embedded @@ -224,3 +227,34 @@ class RefusalReasons { late String name; late bool active; } + +@embedded +class PrivacyPolicy { + late String header; + late String module; + late bool? active; + late List? contents; +} + +@embedded +class Content { + late String? header; + late List? descriptions; +} + +@embedded +class Description { + late String? text; + late String? type; + late bool? isBold; + late List? subDescriptions; +} + +@embedded +class SubDescription { + late String? text; + late String? type; + late bool? isBold; + late bool? isSpaceRequired; +} + diff --git a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.g.dart b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.g.dart index 59195103d..d2e76c13c 100644 --- a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.g.dart +++ b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/app_configuration.g.dart @@ -149,20 +149,26 @@ const AppConfigurationSchema = CollectionSchema( type: IsarType.objectList, target: r'HouseStructureTypes', ), - r'referralReasons': PropertySchema( + r'privacyPolicyConfig': PropertySchema( id: 23, + name: r'privacyPolicyConfig', + type: IsarType.object, + target: r'PrivacyPolicy', + ), + r'referralReasons': PropertySchema( + id: 24, name: r'referralReasons', type: IsarType.objectList, target: r'ReferralReasons', ), r'refusalReasons': PropertySchema( - id: 24, + id: 25, name: r'refusalReasons', type: IsarType.objectList, target: r'RefusalReasons', ), r'symptomsTypes': PropertySchema( - id: 25, + id: 26, name: r'symptomsTypes', type: IsarType.objectList, target: r'SymptomsTypes', @@ -197,7 +203,11 @@ const AppConfigurationSchema = CollectionSchema( r'SearchHouseHoldFilters': SearchHouseHoldFiltersSchema, r'ReferralReasons': ReferralReasonsSchema, r'HouseStructureTypes': HouseStructureTypesSchema, - r'RefusalReasons': RefusalReasonsSchema + r'RefusalReasons': RefusalReasonsSchema, + r'PrivacyPolicy': PrivacyPolicySchema, + r'Content': ContentSchema, + r'Description': DescriptionSchema, + r'SubDescription': SubDescriptionSchema }, getId: _appConfigurationGetId, getLinks: _appConfigurationGetLinks, @@ -461,6 +471,14 @@ int _appConfigurationEstimateSize( } } } + { + final value = object.privacyPolicyConfig; + if (value != null) { + bytesCount += 3 + + PrivacyPolicySchema.estimateSize( + value, allOffsets[PrivacyPolicy]!, allOffsets); + } + } { final list = object.referralReasons; if (list != null) { @@ -620,20 +638,26 @@ void _appConfigurationSerialize( HouseStructureTypesSchema.serialize, object.houseStructureTypes, ); - writer.writeObjectList( + writer.writeObject( offsets[23], allOffsets, + PrivacyPolicySchema.serialize, + object.privacyPolicyConfig, + ); + writer.writeObjectList( + offsets[24], + allOffsets, ReferralReasonsSchema.serialize, object.referralReasons, ); writer.writeObjectList( - offsets[24], + offsets[25], allOffsets, RefusalReasonsSchema.serialize, object.refusalReasons, ); writer.writeObjectList( - offsets[25], + offsets[26], allOffsets, SymptomsTypesSchema.serialize, object.symptomsTypes, @@ -756,20 +780,25 @@ AppConfiguration _appConfigurationDeserialize( HouseStructureTypes(), ); object.id = id; - object.referralReasons = reader.readObjectList( + object.privacyPolicyConfig = reader.readObjectOrNull( offsets[23], + PrivacyPolicySchema.deserialize, + allOffsets, + ); + object.referralReasons = reader.readObjectList( + offsets[24], ReferralReasonsSchema.deserialize, allOffsets, ReferralReasons(), ); object.refusalReasons = reader.readObjectList( - offsets[24], + offsets[25], RefusalReasonsSchema.deserialize, allOffsets, RefusalReasons(), ); object.symptomsTypes = reader.readObjectList( - offsets[25], + offsets[26], SymptomsTypesSchema.deserialize, allOffsets, SymptomsTypes(), @@ -913,20 +942,26 @@ P _appConfigurationDeserializeProp

( HouseStructureTypes(), )) as P; case 23: + return (reader.readObjectOrNull( + offset, + PrivacyPolicySchema.deserialize, + allOffsets, + )) as P; + case 24: return (reader.readObjectList( offset, ReferralReasonsSchema.deserialize, allOffsets, ReferralReasons(), )) as P; - case 24: + case 25: return (reader.readObjectList( offset, RefusalReasonsSchema.deserialize, allOffsets, RefusalReasons(), )) as P; - case 25: + case 26: return (reader.readObjectList( offset, SymptomsTypesSchema.deserialize, @@ -3494,6 +3529,24 @@ extension AppConfigurationQueryFilter }); } + QueryBuilder + privacyPolicyConfigIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'privacyPolicyConfig', + )); + }); + } + + QueryBuilder + privacyPolicyConfigIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'privacyPolicyConfig', + )); + }); + } + QueryBuilder referralReasonsIsNull() { return QueryBuilder.apply(this, (query) { @@ -3939,6 +3992,13 @@ extension AppConfigurationQueryObject }); } + QueryBuilder + privacyPolicyConfig(FilterQuery q) { + return QueryBuilder.apply(this, (query) { + return query.object(q, r'privacyPolicyConfig'); + }); + } + QueryBuilder referralReasonsElement(FilterQuery q) { return QueryBuilder.apply(this, (query) { @@ -4366,6 +4426,13 @@ extension AppConfigurationQueryProperty }); } + QueryBuilder + privacyPolicyConfigProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'privacyPolicyConfig'); + }); + } + QueryBuilder?, QQueryOperations> referralReasonsProperty() { return QueryBuilder.apply(this, (query) { @@ -11171,3 +11238,1959 @@ extension RefusalReasonsQueryFilter extension RefusalReasonsQueryObject on QueryBuilder {} + +// coverage:ignore-file +// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types + +const PrivacyPolicySchema = Schema( + name: r'PrivacyPolicy', + id: 4448755274946548969, + properties: { + r'active': PropertySchema( + id: 0, + name: r'active', + type: IsarType.bool, + ), + r'contents': PropertySchema( + id: 1, + name: r'contents', + type: IsarType.objectList, + target: r'Content', + ), + r'header': PropertySchema( + id: 2, + name: r'header', + type: IsarType.string, + ), + r'module': PropertySchema( + id: 3, + name: r'module', + type: IsarType.string, + ) + }, + estimateSize: _privacyPolicyEstimateSize, + serialize: _privacyPolicySerialize, + deserialize: _privacyPolicyDeserialize, + deserializeProp: _privacyPolicyDeserializeProp, +); + +int _privacyPolicyEstimateSize( + PrivacyPolicy object, + List offsets, + Map> allOffsets, +) { + var bytesCount = offsets.last; + { + final list = object.contents; + if (list != null) { + bytesCount += 3 + list.length * 3; + { + final offsets = allOffsets[Content]!; + for (var i = 0; i < list.length; i++) { + final value = list[i]; + bytesCount += ContentSchema.estimateSize(value, offsets, allOffsets); + } + } + } + } + bytesCount += 3 + object.header.length * 3; + bytesCount += 3 + object.module.length * 3; + return bytesCount; +} + +void _privacyPolicySerialize( + PrivacyPolicy object, + IsarWriter writer, + List offsets, + Map> allOffsets, +) { + writer.writeBool(offsets[0], object.active); + writer.writeObjectList( + offsets[1], + allOffsets, + ContentSchema.serialize, + object.contents, + ); + writer.writeString(offsets[2], object.header); + writer.writeString(offsets[3], object.module); +} + +PrivacyPolicy _privacyPolicyDeserialize( + Id id, + IsarReader reader, + List offsets, + Map> allOffsets, +) { + final object = PrivacyPolicy(); + object.active = reader.readBoolOrNull(offsets[0]); + object.contents = reader.readObjectList( + offsets[1], + ContentSchema.deserialize, + allOffsets, + Content(), + ); + object.header = reader.readString(offsets[2]); + object.module = reader.readString(offsets[3]); + return object; +} + +P _privacyPolicyDeserializeProp

( + IsarReader reader, + int propertyId, + int offset, + Map> allOffsets, +) { + switch (propertyId) { + case 0: + return (reader.readBoolOrNull(offset)) as P; + case 1: + return (reader.readObjectList( + offset, + ContentSchema.deserialize, + allOffsets, + Content(), + )) as P; + case 2: + return (reader.readString(offset)) as P; + case 3: + return (reader.readString(offset)) as P; + default: + throw IsarError('Unknown property with id $propertyId'); + } +} + +extension PrivacyPolicyQueryFilter + on QueryBuilder { + QueryBuilder + activeIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'active', + )); + }); + } + + QueryBuilder + activeIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'active', + )); + }); + } + + QueryBuilder + activeEqualTo(bool? value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'active', + value: value, + )); + }); + } + + QueryBuilder + contentsIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'contents', + )); + }); + } + + QueryBuilder + contentsIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'contents', + )); + }); + } + + QueryBuilder + contentsLengthEqualTo(int length) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'contents', + length, + true, + length, + true, + ); + }); + } + + QueryBuilder + contentsIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'contents', + 0, + true, + 0, + true, + ); + }); + } + + QueryBuilder + contentsIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'contents', + 0, + false, + 999999, + true, + ); + }); + } + + QueryBuilder + contentsLengthLessThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'contents', + 0, + true, + length, + include, + ); + }); + } + + QueryBuilder + contentsLengthGreaterThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'contents', + length, + include, + 999999, + true, + ); + }); + } + + QueryBuilder + contentsLengthBetween( + int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'contents', + lower, + includeLower, + upper, + includeUpper, + ); + }); + } + + QueryBuilder + headerEqualTo( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'header', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerGreaterThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'header', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerLessThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'header', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerBetween( + String lower, + String upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'header', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'header', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'header', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'header', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'header', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + headerIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'header', + value: '', + )); + }); + } + + QueryBuilder + headerIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'header', + value: '', + )); + }); + } + + QueryBuilder + moduleEqualTo( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'module', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + moduleGreaterThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'module', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + moduleLessThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'module', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + moduleBetween( + String lower, + String upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'module', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + moduleStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'module', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + moduleEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'module', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + moduleContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'module', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + moduleMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'module', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + moduleIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'module', + value: '', + )); + }); + } + + QueryBuilder + moduleIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'module', + value: '', + )); + }); + } +} + +extension PrivacyPolicyQueryObject + on QueryBuilder { + QueryBuilder + contentsElement(FilterQuery q) { + return QueryBuilder.apply(this, (query) { + return query.object(q, r'contents'); + }); + } +} + +// coverage:ignore-file +// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types + +const ContentSchema = Schema( + name: r'Content', + id: 2749874844035024652, + properties: { + r'descriptions': PropertySchema( + id: 0, + name: r'descriptions', + type: IsarType.objectList, + target: r'Description', + ), + r'header': PropertySchema( + id: 1, + name: r'header', + type: IsarType.string, + ) + }, + estimateSize: _contentEstimateSize, + serialize: _contentSerialize, + deserialize: _contentDeserialize, + deserializeProp: _contentDeserializeProp, +); + +int _contentEstimateSize( + Content object, + List offsets, + Map> allOffsets, +) { + var bytesCount = offsets.last; + { + final list = object.descriptions; + if (list != null) { + bytesCount += 3 + list.length * 3; + { + final offsets = allOffsets[Description]!; + for (var i = 0; i < list.length; i++) { + final value = list[i]; + bytesCount += + DescriptionSchema.estimateSize(value, offsets, allOffsets); + } + } + } + } + { + final value = object.header; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + return bytesCount; +} + +void _contentSerialize( + Content object, + IsarWriter writer, + List offsets, + Map> allOffsets, +) { + writer.writeObjectList( + offsets[0], + allOffsets, + DescriptionSchema.serialize, + object.descriptions, + ); + writer.writeString(offsets[1], object.header); +} + +Content _contentDeserialize( + Id id, + IsarReader reader, + List offsets, + Map> allOffsets, +) { + final object = Content(); + object.descriptions = reader.readObjectList( + offsets[0], + DescriptionSchema.deserialize, + allOffsets, + Description(), + ); + object.header = reader.readStringOrNull(offsets[1]); + return object; +} + +P _contentDeserializeProp

( + IsarReader reader, + int propertyId, + int offset, + Map> allOffsets, +) { + switch (propertyId) { + case 0: + return (reader.readObjectList( + offset, + DescriptionSchema.deserialize, + allOffsets, + Description(), + )) as P; + case 1: + return (reader.readStringOrNull(offset)) as P; + default: + throw IsarError('Unknown property with id $propertyId'); + } +} + +extension ContentQueryFilter + on QueryBuilder { + QueryBuilder descriptionsIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'descriptions', + )); + }); + } + + QueryBuilder + descriptionsIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'descriptions', + )); + }); + } + + QueryBuilder + descriptionsLengthEqualTo(int length) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'descriptions', + length, + true, + length, + true, + ); + }); + } + + QueryBuilder descriptionsIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'descriptions', + 0, + true, + 0, + true, + ); + }); + } + + QueryBuilder + descriptionsIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'descriptions', + 0, + false, + 999999, + true, + ); + }); + } + + QueryBuilder + descriptionsLengthLessThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'descriptions', + 0, + true, + length, + include, + ); + }); + } + + QueryBuilder + descriptionsLengthGreaterThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'descriptions', + length, + include, + 999999, + true, + ); + }); + } + + QueryBuilder + descriptionsLengthBetween( + int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'descriptions', + lower, + includeLower, + upper, + includeUpper, + ); + }); + } + + QueryBuilder headerIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'header', + )); + }); + } + + QueryBuilder headerIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'header', + )); + }); + } + + QueryBuilder headerEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'header', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder headerGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'header', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder headerLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'header', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder headerBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'header', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder headerStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'header', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder headerEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'header', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder headerContains( + String value, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'header', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder headerMatches( + String pattern, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'header', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder headerIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'header', + value: '', + )); + }); + } + + QueryBuilder headerIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'header', + value: '', + )); + }); + } +} + +extension ContentQueryObject + on QueryBuilder { + QueryBuilder descriptionsElement( + FilterQuery q) { + return QueryBuilder.apply(this, (query) { + return query.object(q, r'descriptions'); + }); + } +} + +// coverage:ignore-file +// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types + +const DescriptionSchema = Schema( + name: r'Description', + id: 405142296649109475, + properties: { + r'isBold': PropertySchema( + id: 0, + name: r'isBold', + type: IsarType.bool, + ), + r'subDescriptions': PropertySchema( + id: 1, + name: r'subDescriptions', + type: IsarType.objectList, + target: r'SubDescription', + ), + r'text': PropertySchema( + id: 2, + name: r'text', + type: IsarType.string, + ), + r'type': PropertySchema( + id: 3, + name: r'type', + type: IsarType.string, + ) + }, + estimateSize: _descriptionEstimateSize, + serialize: _descriptionSerialize, + deserialize: _descriptionDeserialize, + deserializeProp: _descriptionDeserializeProp, +); + +int _descriptionEstimateSize( + Description object, + List offsets, + Map> allOffsets, +) { + var bytesCount = offsets.last; + { + final list = object.subDescriptions; + if (list != null) { + bytesCount += 3 + list.length * 3; + { + final offsets = allOffsets[SubDescription]!; + for (var i = 0; i < list.length; i++) { + final value = list[i]; + bytesCount += + SubDescriptionSchema.estimateSize(value, offsets, allOffsets); + } + } + } + } + { + final value = object.text; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + { + final value = object.type; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + return bytesCount; +} + +void _descriptionSerialize( + Description object, + IsarWriter writer, + List offsets, + Map> allOffsets, +) { + writer.writeBool(offsets[0], object.isBold); + writer.writeObjectList( + offsets[1], + allOffsets, + SubDescriptionSchema.serialize, + object.subDescriptions, + ); + writer.writeString(offsets[2], object.text); + writer.writeString(offsets[3], object.type); +} + +Description _descriptionDeserialize( + Id id, + IsarReader reader, + List offsets, + Map> allOffsets, +) { + final object = Description(); + object.isBold = reader.readBoolOrNull(offsets[0]); + object.subDescriptions = reader.readObjectList( + offsets[1], + SubDescriptionSchema.deserialize, + allOffsets, + SubDescription(), + ); + object.text = reader.readStringOrNull(offsets[2]); + object.type = reader.readStringOrNull(offsets[3]); + return object; +} + +P _descriptionDeserializeProp

( + IsarReader reader, + int propertyId, + int offset, + Map> allOffsets, +) { + switch (propertyId) { + case 0: + return (reader.readBoolOrNull(offset)) as P; + case 1: + return (reader.readObjectList( + offset, + SubDescriptionSchema.deserialize, + allOffsets, + SubDescription(), + )) as P; + case 2: + return (reader.readStringOrNull(offset)) as P; + case 3: + return (reader.readStringOrNull(offset)) as P; + default: + throw IsarError('Unknown property with id $propertyId'); + } +} + +extension DescriptionQueryFilter + on QueryBuilder { + QueryBuilder isBoldIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'isBold', + )); + }); + } + + QueryBuilder + isBoldIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'isBold', + )); + }); + } + + QueryBuilder isBoldEqualTo( + bool? value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'isBold', + value: value, + )); + }); + } + + QueryBuilder + subDescriptionsIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'subDescriptions', + )); + }); + } + + QueryBuilder + subDescriptionsIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'subDescriptions', + )); + }); + } + + QueryBuilder + subDescriptionsLengthEqualTo(int length) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'subDescriptions', + length, + true, + length, + true, + ); + }); + } + + QueryBuilder + subDescriptionsIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'subDescriptions', + 0, + true, + 0, + true, + ); + }); + } + + QueryBuilder + subDescriptionsIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'subDescriptions', + 0, + false, + 999999, + true, + ); + }); + } + + QueryBuilder + subDescriptionsLengthLessThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'subDescriptions', + 0, + true, + length, + include, + ); + }); + } + + QueryBuilder + subDescriptionsLengthGreaterThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'subDescriptions', + length, + include, + 999999, + true, + ); + }); + } + + QueryBuilder + subDescriptionsLengthBetween( + int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'subDescriptions', + lower, + includeLower, + upper, + includeUpper, + ); + }); + } + + QueryBuilder textIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'text', + )); + }); + } + + QueryBuilder + textIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'text', + )); + }); + } + + QueryBuilder textEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'text', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder textGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'text', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder textLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'text', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder textBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'text', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder textStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'text', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder textEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'text', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder textContains( + String value, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'text', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder textMatches( + String pattern, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'text', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder textIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'text', + value: '', + )); + }); + } + + QueryBuilder + textIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'text', + value: '', + )); + }); + } + + QueryBuilder typeIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'type', + )); + }); + } + + QueryBuilder + typeIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'type', + )); + }); + } + + QueryBuilder typeEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'type', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder typeGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'type', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder typeLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'type', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder typeBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'type', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder typeStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'type', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder typeEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'type', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder typeContains( + String value, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'type', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder typeMatches( + String pattern, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'type', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder typeIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'type', + value: '', + )); + }); + } + + QueryBuilder + typeIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'type', + value: '', + )); + }); + } +} + +extension DescriptionQueryObject + on QueryBuilder { + QueryBuilder + subDescriptionsElement(FilterQuery q) { + return QueryBuilder.apply(this, (query) { + return query.object(q, r'subDescriptions'); + }); + } +} + +// coverage:ignore-file +// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types + +const SubDescriptionSchema = Schema( + name: r'SubDescription', + id: -605965919312517132, + properties: { + r'isBold': PropertySchema( + id: 0, + name: r'isBold', + type: IsarType.bool, + ), + r'isSpaceRequired': PropertySchema( + id: 1, + name: r'isSpaceRequired', + type: IsarType.bool, + ), + r'text': PropertySchema( + id: 2, + name: r'text', + type: IsarType.string, + ), + r'type': PropertySchema( + id: 3, + name: r'type', + type: IsarType.string, + ) + }, + estimateSize: _subDescriptionEstimateSize, + serialize: _subDescriptionSerialize, + deserialize: _subDescriptionDeserialize, + deserializeProp: _subDescriptionDeserializeProp, +); + +int _subDescriptionEstimateSize( + SubDescription object, + List offsets, + Map> allOffsets, +) { + var bytesCount = offsets.last; + { + final value = object.text; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + { + final value = object.type; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + return bytesCount; +} + +void _subDescriptionSerialize( + SubDescription object, + IsarWriter writer, + List offsets, + Map> allOffsets, +) { + writer.writeBool(offsets[0], object.isBold); + writer.writeBool(offsets[1], object.isSpaceRequired); + writer.writeString(offsets[2], object.text); + writer.writeString(offsets[3], object.type); +} + +SubDescription _subDescriptionDeserialize( + Id id, + IsarReader reader, + List offsets, + Map> allOffsets, +) { + final object = SubDescription(); + object.isBold = reader.readBoolOrNull(offsets[0]); + object.isSpaceRequired = reader.readBoolOrNull(offsets[1]); + object.text = reader.readStringOrNull(offsets[2]); + object.type = reader.readStringOrNull(offsets[3]); + return object; +} + +P _subDescriptionDeserializeProp

( + IsarReader reader, + int propertyId, + int offset, + Map> allOffsets, +) { + switch (propertyId) { + case 0: + return (reader.readBoolOrNull(offset)) as P; + case 1: + return (reader.readBoolOrNull(offset)) as P; + case 2: + return (reader.readStringOrNull(offset)) as P; + case 3: + return (reader.readStringOrNull(offset)) as P; + default: + throw IsarError('Unknown property with id $propertyId'); + } +} + +extension SubDescriptionQueryFilter + on QueryBuilder { + QueryBuilder + isBoldIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'isBold', + )); + }); + } + + QueryBuilder + isBoldIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'isBold', + )); + }); + } + + QueryBuilder + isBoldEqualTo(bool? value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'isBold', + value: value, + )); + }); + } + + QueryBuilder + isSpaceRequiredIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'isSpaceRequired', + )); + }); + } + + QueryBuilder + isSpaceRequiredIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'isSpaceRequired', + )); + }); + } + + QueryBuilder + isSpaceRequiredEqualTo(bool? value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'isSpaceRequired', + value: value, + )); + }); + } + + QueryBuilder + textIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'text', + )); + }); + } + + QueryBuilder + textIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'text', + )); + }); + } + + QueryBuilder + textEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'text', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + textGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'text', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + textLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'text', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + textBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'text', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + textStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'text', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + textEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'text', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + textContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'text', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + textMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'text', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + textIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'text', + value: '', + )); + }); + } + + QueryBuilder + textIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'text', + value: '', + )); + }); + } + + QueryBuilder + typeIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'type', + )); + }); + } + + QueryBuilder + typeIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'type', + )); + }); + } + + QueryBuilder + typeEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'type', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + typeGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'type', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + typeLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'type', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + typeBetween( + String? lower, + String? upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'type', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + typeStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'type', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + typeEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'type', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + typeContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'type', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + typeMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'type', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + typeIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'type', + value: '', + )); + }); + } + + QueryBuilder + typeIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'type', + value: '', + )); + }); + } +} + +extension SubDescriptionQueryObject + on QueryBuilder {} diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart index ef7974017..37958947e 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart @@ -8,6 +8,7 @@ import 'package:isar/isar.dart'; import '../../../models/app_config/app_config_model.dart' as app_configuration; import '../../../models/mdms/service_registry/pgr_service_defenitions.dart'; import '../../../models/mdms/service_registry/service_registry_model.dart'; +import '../../../models/privacy_notice/privacy_notice_model.dart'; import '../../../models/role_actions/role_actions_model.dart'; import '../../local_store/no_sql/schema/app_configuration.dart'; import '../../local_store/no_sql/schema/row_versions.dart'; @@ -216,6 +217,35 @@ class MdmsRepository { return genderOption; }).toList(); + final privacyPolicyConfig = commonMasters?.privacyPolicyConfig; + + final privacyPolicy = PrivacyPolicy() + ..header = privacyPolicyConfig?.first.header ?? '' + ..module = privacyPolicyConfig?.first.module ?? '' + ..active = privacyPolicyConfig?.first.active + ..contents = (privacyPolicyConfig?.first.contents ?? []).map((cont) { + final content = Content() + ..header = cont.header + ..descriptions = (cont.descriptions ?? []).map((d) { + final description = Description() + ..text = d.text + ..type = d.type + ..isBold = d.isBold + ..subDescriptions = (d.subDescriptions ?? []).map((sd) { + final subDescription = SubDescription() + ..text = sd.text + ..type = sd.type + ..isBold = sd.isBold + ..isSpaceRequired = sd.isSpaceRequired; + return subDescription; + }).toList(); + return description; + }).toList(); + return content; + }).toList(); + + + final List? idTypeOptions = element?.idTypeOptions.map((element) { final idOption = IdTypeOptions() @@ -277,6 +307,7 @@ class MdmsRepository { ..interfaces = interfaceList ?? []; appConfiguration.genderOptions = genderOptions; appConfiguration.idTypeOptions = idTypeOptions; + appConfiguration.privacyPolicyConfig = privacyPolicy; appConfiguration.deliveryCommentOptions = deliveryCommentOptions; appConfiguration.householdDeletionReasonOptions = householdDeletionReasonOptions; diff --git a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart index 0be5c3e0f..a6ec53262 100644 --- a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart +++ b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart @@ -1,6 +1,7 @@ import 'package:digit_dss/digit_dss.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; +import '../privacy_notice/privacy_notice_model.dart'; import '../referral_reasons/referral_reasons_model.dart'; import '../symptoms_types/symptoms_types_model.dart'; @@ -122,6 +123,7 @@ class CommonMastersWrapperModel with _$CommonMastersWrapperModel { const factory CommonMastersWrapperModel({ @JsonKey(name: 'GenderType') required List genderType, @JsonKey(name: 'StateInfo') required List stateInfo, + @JsonKey(name: 'PrivacyPolicy') required List privacyPolicyConfig, }) = _CommonMastersWrapperModel; factory CommonMastersWrapperModel.fromJson( diff --git a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.freezed.dart b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.freezed.dart index 4f556de9b..2be2b1a00 100644 --- a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.freezed.dart +++ b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.freezed.dart @@ -1892,6 +1892,9 @@ mixin _$CommonMastersWrapperModel { List get genderType => throw _privateConstructorUsedError; @JsonKey(name: 'StateInfo') List get stateInfo => throw _privateConstructorUsedError; + @JsonKey(name: 'PrivacyPolicy') + List get privacyPolicyConfig => + throw _privateConstructorUsedError; Map toJson() => throw _privateConstructorUsedError; @JsonKey(ignore: true) @@ -1907,7 +1910,9 @@ abstract class $CommonMastersWrapperModelCopyWith<$Res> { @useResult $Res call( {@JsonKey(name: 'GenderType') List genderType, - @JsonKey(name: 'StateInfo') List stateInfo}); + @JsonKey(name: 'StateInfo') List stateInfo, + @JsonKey(name: 'PrivacyPolicy') + List privacyPolicyConfig}); } /// @nodoc @@ -1926,6 +1931,7 @@ class _$CommonMastersWrapperModelCopyWithImpl<$Res, $Res call({ Object? genderType = null, Object? stateInfo = null, + Object? privacyPolicyConfig = null, }) { return _then(_value.copyWith( genderType: null == genderType @@ -1936,6 +1942,10 @@ class _$CommonMastersWrapperModelCopyWithImpl<$Res, ? _value.stateInfo : stateInfo // ignore: cast_nullable_to_non_nullable as List, + privacyPolicyConfig: null == privacyPolicyConfig + ? _value.privacyPolicyConfig + : privacyPolicyConfig // ignore: cast_nullable_to_non_nullable + as List, ) as $Val); } } @@ -1951,7 +1961,9 @@ abstract class _$$CommonMastersWrapperModelImplCopyWith<$Res> @useResult $Res call( {@JsonKey(name: 'GenderType') List genderType, - @JsonKey(name: 'StateInfo') List stateInfo}); + @JsonKey(name: 'StateInfo') List stateInfo, + @JsonKey(name: 'PrivacyPolicy') + List privacyPolicyConfig}); } /// @nodoc @@ -1969,6 +1981,7 @@ class __$$CommonMastersWrapperModelImplCopyWithImpl<$Res> $Res call({ Object? genderType = null, Object? stateInfo = null, + Object? privacyPolicyConfig = null, }) { return _then(_$CommonMastersWrapperModelImpl( genderType: null == genderType @@ -1979,6 +1992,10 @@ class __$$CommonMastersWrapperModelImplCopyWithImpl<$Res> ? _value._stateInfo : stateInfo // ignore: cast_nullable_to_non_nullable as List, + privacyPolicyConfig: null == privacyPolicyConfig + ? _value._privacyPolicyConfig + : privacyPolicyConfig // ignore: cast_nullable_to_non_nullable + as List, )); } } @@ -1989,10 +2006,12 @@ class _$CommonMastersWrapperModelImpl implements _CommonMastersWrapperModel { const _$CommonMastersWrapperModelImpl( {@JsonKey(name: 'GenderType') required final List genderType, - @JsonKey(name: 'StateInfo') - required final List stateInfo}) + @JsonKey(name: 'StateInfo') required final List stateInfo, + @JsonKey(name: 'PrivacyPolicy') + required final List privacyPolicyConfig}) : _genderType = genderType, - _stateInfo = stateInfo; + _stateInfo = stateInfo, + _privacyPolicyConfig = privacyPolicyConfig; factory _$CommonMastersWrapperModelImpl.fromJson(Map json) => _$$CommonMastersWrapperModelImplFromJson(json); @@ -2015,9 +2034,19 @@ class _$CommonMastersWrapperModelImpl implements _CommonMastersWrapperModel { return EqualUnmodifiableListView(_stateInfo); } + final List _privacyPolicyConfig; + @override + @JsonKey(name: 'PrivacyPolicy') + List get privacyPolicyConfig { + if (_privacyPolicyConfig is EqualUnmodifiableListView) + return _privacyPolicyConfig; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_privacyPolicyConfig); + } + @override String toString() { - return 'CommonMastersWrapperModel(genderType: $genderType, stateInfo: $stateInfo)'; + return 'CommonMastersWrapperModel(genderType: $genderType, stateInfo: $stateInfo, privacyPolicyConfig: $privacyPolicyConfig)'; } @override @@ -2028,7 +2057,9 @@ class _$CommonMastersWrapperModelImpl implements _CommonMastersWrapperModel { const DeepCollectionEquality() .equals(other._genderType, _genderType) && const DeepCollectionEquality() - .equals(other._stateInfo, _stateInfo)); + .equals(other._stateInfo, _stateInfo) && + const DeepCollectionEquality() + .equals(other._privacyPolicyConfig, _privacyPolicyConfig)); } @JsonKey(ignore: true) @@ -2036,7 +2067,8 @@ class _$CommonMastersWrapperModelImpl implements _CommonMastersWrapperModel { int get hashCode => Object.hash( runtimeType, const DeepCollectionEquality().hash(_genderType), - const DeepCollectionEquality().hash(_stateInfo)); + const DeepCollectionEquality().hash(_stateInfo), + const DeepCollectionEquality().hash(_privacyPolicyConfig)); @JsonKey(ignore: true) @override @@ -2055,11 +2087,12 @@ class _$CommonMastersWrapperModelImpl implements _CommonMastersWrapperModel { abstract class _CommonMastersWrapperModel implements CommonMastersWrapperModel { const factory _CommonMastersWrapperModel( - {@JsonKey(name: 'GenderType') - required final List genderType, - @JsonKey(name: 'StateInfo') - required final List stateInfo}) = - _$CommonMastersWrapperModelImpl; + {@JsonKey(name: 'GenderType') + required final List genderType, + @JsonKey(name: 'StateInfo') required final List stateInfo, + @JsonKey(name: 'PrivacyPolicy') + required final List + privacyPolicyConfig}) = _$CommonMastersWrapperModelImpl; factory _CommonMastersWrapperModel.fromJson(Map json) = _$CommonMastersWrapperModelImpl.fromJson; @@ -2071,6 +2104,9 @@ abstract class _CommonMastersWrapperModel implements CommonMastersWrapperModel { @JsonKey(name: 'StateInfo') List get stateInfo; @override + @JsonKey(name: 'PrivacyPolicy') + List get privacyPolicyConfig; + @override @JsonKey(ignore: true) _$$CommonMastersWrapperModelImplCopyWith<_$CommonMastersWrapperModelImpl> get copyWith => throw _privateConstructorUsedError; diff --git a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.g.dart b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.g.dart index 45397d69f..04a332684 100644 --- a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.g.dart +++ b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.g.dart @@ -203,6 +203,9 @@ _$CommonMastersWrapperModelImpl _$$CommonMastersWrapperModelImplFromJson( stateInfo: (json['StateInfo'] as List) .map((e) => StateInfoModel.fromJson(e as Map)) .toList(), + privacyPolicyConfig: (json['PrivacyPolicy'] as List) + .map((e) => PrivacyPolicyModel.fromJson(e as Map)) + .toList(), ); Map _$$CommonMastersWrapperModelImplToJson( @@ -210,6 +213,7 @@ Map _$$CommonMastersWrapperModelImplToJson( { 'GenderType': instance.genderType, 'StateInfo': instance.stateInfo, + 'PrivacyPolicy': instance.privacyPolicyConfig, }; _$CommonMasterModelImpl _$$CommonMasterModelImplFromJson( diff --git a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart index 681d15053..b44f040b1 100644 --- a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart +++ b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart @@ -49,6 +49,8 @@ enum MasterEnums { firebaseConfig, @MappableValue("SEARCH_HOUSEHOLD_FILTERS") searchHouseHoldFilters, + @MappableValue("PRIVACY_POLICY") + privacyPolicy, @MappableValue("dashboardConfig") dashboardConfig, } diff --git a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart index a8dabd797..8e12d08c8 100644 --- a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart +++ b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart @@ -69,6 +69,8 @@ class MasterEnumsMapper extends EnumMapper { return MasterEnums.firebaseConfig; case "SEARCH_HOUSEHOLD_FILTERS": return MasterEnums.searchHouseHoldFilters; + case "PRIVACY_POLICY": + return MasterEnums.privacyPolicy; case "dashboardConfig": return MasterEnums.dashboardConfig; default: @@ -123,6 +125,8 @@ class MasterEnumsMapper extends EnumMapper { return "FIREBASE_CONFIG"; case MasterEnums.searchHouseHoldFilters: return "SEARCH_HOUSEHOLD_FILTERS"; + case MasterEnums.privacyPolicy: + return "PRIVACY_POLICY"; case MasterEnums.dashboardConfig: return "dashboardConfig"; } diff --git a/apps/health_campaign_field_worker_app/lib/models/privacy_notice/privacy_notice_model.dart b/apps/health_campaign_field_worker_app/lib/models/privacy_notice/privacy_notice_model.dart new file mode 100644 index 000000000..5ac1866af --- /dev/null +++ b/apps/health_campaign_field_worker_app/lib/models/privacy_notice/privacy_notice_model.dart @@ -0,0 +1,50 @@ +import 'package:freezed_annotation/freezed_annotation.dart'; + +part 'privacy_notice_model.freezed.dart'; +part 'privacy_notice_model.g.dart'; + +@freezed +class PrivacyPolicyModel with _$PrivacyPolicyModel { + const factory PrivacyPolicyModel({ + required String header, + required String module, + bool? active, + List? contents, + }) = _PrivacyPolicyModel; + + factory PrivacyPolicyModel.fromJson(Map json) => _$PrivacyPolicyModelFromJson(json); +} + +@freezed +class ContentModel with _$ContentModel { + const factory ContentModel({ + String? header, + List? descriptions, + }) = _ContentModel; + + factory ContentModel.fromJson(Map json) => _$ContentModelFromJson(json); +} + +@freezed +class DescriptionModel with _$DescriptionModel { + const factory DescriptionModel({ + String? text, + String? type, + bool? isBold, + List? subDescriptions, + }) = _DescriptionModel; + + factory DescriptionModel.fromJson(Map json) => _$DescriptionModelFromJson(json); +} + +@freezed +class SubDescriptionModel with _$SubDescriptionModel { + const factory SubDescriptionModel({ + String? text, + String? type, + bool? isBold, + bool? isSpaceRequired, + }) = _SubDescriptionModel; + + factory SubDescriptionModel.fromJson(Map json) => _$SubDescriptionModelFromJson(json); +} diff --git a/apps/health_campaign_field_worker_app/lib/models/privacy_notice/privacy_notice_model.freezed.dart b/apps/health_campaign_field_worker_app/lib/models/privacy_notice/privacy_notice_model.freezed.dart new file mode 100644 index 000000000..c999b3371 --- /dev/null +++ b/apps/health_campaign_field_worker_app/lib/models/privacy_notice/privacy_notice_model.freezed.dart @@ -0,0 +1,796 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'privacy_notice_model.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + +PrivacyPolicyModel _$PrivacyPolicyModelFromJson(Map json) { + return _PrivacyPolicyModel.fromJson(json); +} + +/// @nodoc +mixin _$PrivacyPolicyModel { + String get header => throw _privateConstructorUsedError; + String get module => throw _privateConstructorUsedError; + bool? get active => throw _privateConstructorUsedError; + List? get contents => throw _privateConstructorUsedError; + + Map toJson() => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + $PrivacyPolicyModelCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $PrivacyPolicyModelCopyWith<$Res> { + factory $PrivacyPolicyModelCopyWith( + PrivacyPolicyModel value, $Res Function(PrivacyPolicyModel) then) = + _$PrivacyPolicyModelCopyWithImpl<$Res, PrivacyPolicyModel>; + @useResult + $Res call( + {String header, + String module, + bool? active, + List? contents}); +} + +/// @nodoc +class _$PrivacyPolicyModelCopyWithImpl<$Res, $Val extends PrivacyPolicyModel> + implements $PrivacyPolicyModelCopyWith<$Res> { + _$PrivacyPolicyModelCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? header = null, + Object? module = null, + Object? active = freezed, + Object? contents = freezed, + }) { + return _then(_value.copyWith( + header: null == header + ? _value.header + : header // ignore: cast_nullable_to_non_nullable + as String, + module: null == module + ? _value.module + : module // ignore: cast_nullable_to_non_nullable + as String, + active: freezed == active + ? _value.active + : active // ignore: cast_nullable_to_non_nullable + as bool?, + contents: freezed == contents + ? _value.contents + : contents // ignore: cast_nullable_to_non_nullable + as List?, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$PrivacyPolicyModelImplCopyWith<$Res> + implements $PrivacyPolicyModelCopyWith<$Res> { + factory _$$PrivacyPolicyModelImplCopyWith(_$PrivacyPolicyModelImpl value, + $Res Function(_$PrivacyPolicyModelImpl) then) = + __$$PrivacyPolicyModelImplCopyWithImpl<$Res>; + @override + @useResult + $Res call( + {String header, + String module, + bool? active, + List? contents}); +} + +/// @nodoc +class __$$PrivacyPolicyModelImplCopyWithImpl<$Res> + extends _$PrivacyPolicyModelCopyWithImpl<$Res, _$PrivacyPolicyModelImpl> + implements _$$PrivacyPolicyModelImplCopyWith<$Res> { + __$$PrivacyPolicyModelImplCopyWithImpl(_$PrivacyPolicyModelImpl _value, + $Res Function(_$PrivacyPolicyModelImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? header = null, + Object? module = null, + Object? active = freezed, + Object? contents = freezed, + }) { + return _then(_$PrivacyPolicyModelImpl( + header: null == header + ? _value.header + : header // ignore: cast_nullable_to_non_nullable + as String, + module: null == module + ? _value.module + : module // ignore: cast_nullable_to_non_nullable + as String, + active: freezed == active + ? _value.active + : active // ignore: cast_nullable_to_non_nullable + as bool?, + contents: freezed == contents + ? _value._contents + : contents // ignore: cast_nullable_to_non_nullable + as List?, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$PrivacyPolicyModelImpl implements _PrivacyPolicyModel { + const _$PrivacyPolicyModelImpl( + {required this.header, + required this.module, + this.active, + final List? contents}) + : _contents = contents; + + factory _$PrivacyPolicyModelImpl.fromJson(Map json) => + _$$PrivacyPolicyModelImplFromJson(json); + + @override + final String header; + @override + final String module; + @override + final bool? active; + final List? _contents; + @override + List? get contents { + final value = _contents; + if (value == null) return null; + if (_contents is EqualUnmodifiableListView) return _contents; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); + } + + @override + String toString() { + return 'PrivacyPolicyModel(header: $header, module: $module, active: $active, contents: $contents)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$PrivacyPolicyModelImpl && + (identical(other.header, header) || other.header == header) && + (identical(other.module, module) || other.module == module) && + (identical(other.active, active) || other.active == active) && + const DeepCollectionEquality().equals(other._contents, _contents)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => Object.hash(runtimeType, header, module, active, + const DeepCollectionEquality().hash(_contents)); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$PrivacyPolicyModelImplCopyWith<_$PrivacyPolicyModelImpl> get copyWith => + __$$PrivacyPolicyModelImplCopyWithImpl<_$PrivacyPolicyModelImpl>( + this, _$identity); + + @override + Map toJson() { + return _$$PrivacyPolicyModelImplToJson( + this, + ); + } +} + +abstract class _PrivacyPolicyModel implements PrivacyPolicyModel { + const factory _PrivacyPolicyModel( + {required final String header, + required final String module, + final bool? active, + final List? contents}) = _$PrivacyPolicyModelImpl; + + factory _PrivacyPolicyModel.fromJson(Map json) = + _$PrivacyPolicyModelImpl.fromJson; + + @override + String get header; + @override + String get module; + @override + bool? get active; + @override + List? get contents; + @override + @JsonKey(ignore: true) + _$$PrivacyPolicyModelImplCopyWith<_$PrivacyPolicyModelImpl> get copyWith => + throw _privateConstructorUsedError; +} + +ContentModel _$ContentModelFromJson(Map json) { + return _ContentModel.fromJson(json); +} + +/// @nodoc +mixin _$ContentModel { + String? get header => throw _privateConstructorUsedError; + List? get descriptions => + throw _privateConstructorUsedError; + + Map toJson() => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + $ContentModelCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $ContentModelCopyWith<$Res> { + factory $ContentModelCopyWith( + ContentModel value, $Res Function(ContentModel) then) = + _$ContentModelCopyWithImpl<$Res, ContentModel>; + @useResult + $Res call({String? header, List? descriptions}); +} + +/// @nodoc +class _$ContentModelCopyWithImpl<$Res, $Val extends ContentModel> + implements $ContentModelCopyWith<$Res> { + _$ContentModelCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? header = freezed, + Object? descriptions = freezed, + }) { + return _then(_value.copyWith( + header: freezed == header + ? _value.header + : header // ignore: cast_nullable_to_non_nullable + as String?, + descriptions: freezed == descriptions + ? _value.descriptions + : descriptions // ignore: cast_nullable_to_non_nullable + as List?, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$ContentModelImplCopyWith<$Res> + implements $ContentModelCopyWith<$Res> { + factory _$$ContentModelImplCopyWith( + _$ContentModelImpl value, $Res Function(_$ContentModelImpl) then) = + __$$ContentModelImplCopyWithImpl<$Res>; + @override + @useResult + $Res call({String? header, List? descriptions}); +} + +/// @nodoc +class __$$ContentModelImplCopyWithImpl<$Res> + extends _$ContentModelCopyWithImpl<$Res, _$ContentModelImpl> + implements _$$ContentModelImplCopyWith<$Res> { + __$$ContentModelImplCopyWithImpl( + _$ContentModelImpl _value, $Res Function(_$ContentModelImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? header = freezed, + Object? descriptions = freezed, + }) { + return _then(_$ContentModelImpl( + header: freezed == header + ? _value.header + : header // ignore: cast_nullable_to_non_nullable + as String?, + descriptions: freezed == descriptions + ? _value._descriptions + : descriptions // ignore: cast_nullable_to_non_nullable + as List?, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$ContentModelImpl implements _ContentModel { + const _$ContentModelImpl( + {this.header, final List? descriptions}) + : _descriptions = descriptions; + + factory _$ContentModelImpl.fromJson(Map json) => + _$$ContentModelImplFromJson(json); + + @override + final String? header; + final List? _descriptions; + @override + List? get descriptions { + final value = _descriptions; + if (value == null) return null; + if (_descriptions is EqualUnmodifiableListView) return _descriptions; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); + } + + @override + String toString() { + return 'ContentModel(header: $header, descriptions: $descriptions)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$ContentModelImpl && + (identical(other.header, header) || other.header == header) && + const DeepCollectionEquality() + .equals(other._descriptions, _descriptions)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => Object.hash( + runtimeType, header, const DeepCollectionEquality().hash(_descriptions)); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$ContentModelImplCopyWith<_$ContentModelImpl> get copyWith => + __$$ContentModelImplCopyWithImpl<_$ContentModelImpl>(this, _$identity); + + @override + Map toJson() { + return _$$ContentModelImplToJson( + this, + ); + } +} + +abstract class _ContentModel implements ContentModel { + const factory _ContentModel( + {final String? header, + final List? descriptions}) = _$ContentModelImpl; + + factory _ContentModel.fromJson(Map json) = + _$ContentModelImpl.fromJson; + + @override + String? get header; + @override + List? get descriptions; + @override + @JsonKey(ignore: true) + _$$ContentModelImplCopyWith<_$ContentModelImpl> get copyWith => + throw _privateConstructorUsedError; +} + +DescriptionModel _$DescriptionModelFromJson(Map json) { + return _DescriptionModel.fromJson(json); +} + +/// @nodoc +mixin _$DescriptionModel { + String? get text => throw _privateConstructorUsedError; + String? get type => throw _privateConstructorUsedError; + bool? get isBold => throw _privateConstructorUsedError; + List? get subDescriptions => + throw _privateConstructorUsedError; + + Map toJson() => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + $DescriptionModelCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $DescriptionModelCopyWith<$Res> { + factory $DescriptionModelCopyWith( + DescriptionModel value, $Res Function(DescriptionModel) then) = + _$DescriptionModelCopyWithImpl<$Res, DescriptionModel>; + @useResult + $Res call( + {String? text, + String? type, + bool? isBold, + List? subDescriptions}); +} + +/// @nodoc +class _$DescriptionModelCopyWithImpl<$Res, $Val extends DescriptionModel> + implements $DescriptionModelCopyWith<$Res> { + _$DescriptionModelCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? text = freezed, + Object? type = freezed, + Object? isBold = freezed, + Object? subDescriptions = freezed, + }) { + return _then(_value.copyWith( + text: freezed == text + ? _value.text + : text // ignore: cast_nullable_to_non_nullable + as String?, + type: freezed == type + ? _value.type + : type // ignore: cast_nullable_to_non_nullable + as String?, + isBold: freezed == isBold + ? _value.isBold + : isBold // ignore: cast_nullable_to_non_nullable + as bool?, + subDescriptions: freezed == subDescriptions + ? _value.subDescriptions + : subDescriptions // ignore: cast_nullable_to_non_nullable + as List?, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$DescriptionModelImplCopyWith<$Res> + implements $DescriptionModelCopyWith<$Res> { + factory _$$DescriptionModelImplCopyWith(_$DescriptionModelImpl value, + $Res Function(_$DescriptionModelImpl) then) = + __$$DescriptionModelImplCopyWithImpl<$Res>; + @override + @useResult + $Res call( + {String? text, + String? type, + bool? isBold, + List? subDescriptions}); +} + +/// @nodoc +class __$$DescriptionModelImplCopyWithImpl<$Res> + extends _$DescriptionModelCopyWithImpl<$Res, _$DescriptionModelImpl> + implements _$$DescriptionModelImplCopyWith<$Res> { + __$$DescriptionModelImplCopyWithImpl(_$DescriptionModelImpl _value, + $Res Function(_$DescriptionModelImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? text = freezed, + Object? type = freezed, + Object? isBold = freezed, + Object? subDescriptions = freezed, + }) { + return _then(_$DescriptionModelImpl( + text: freezed == text + ? _value.text + : text // ignore: cast_nullable_to_non_nullable + as String?, + type: freezed == type + ? _value.type + : type // ignore: cast_nullable_to_non_nullable + as String?, + isBold: freezed == isBold + ? _value.isBold + : isBold // ignore: cast_nullable_to_non_nullable + as bool?, + subDescriptions: freezed == subDescriptions + ? _value._subDescriptions + : subDescriptions // ignore: cast_nullable_to_non_nullable + as List?, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$DescriptionModelImpl implements _DescriptionModel { + const _$DescriptionModelImpl( + {this.text, + this.type, + this.isBold, + final List? subDescriptions}) + : _subDescriptions = subDescriptions; + + factory _$DescriptionModelImpl.fromJson(Map json) => + _$$DescriptionModelImplFromJson(json); + + @override + final String? text; + @override + final String? type; + @override + final bool? isBold; + final List? _subDescriptions; + @override + List? get subDescriptions { + final value = _subDescriptions; + if (value == null) return null; + if (_subDescriptions is EqualUnmodifiableListView) return _subDescriptions; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); + } + + @override + String toString() { + return 'DescriptionModel(text: $text, type: $type, isBold: $isBold, subDescriptions: $subDescriptions)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$DescriptionModelImpl && + (identical(other.text, text) || other.text == text) && + (identical(other.type, type) || other.type == type) && + (identical(other.isBold, isBold) || other.isBold == isBold) && + const DeepCollectionEquality() + .equals(other._subDescriptions, _subDescriptions)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => Object.hash(runtimeType, text, type, isBold, + const DeepCollectionEquality().hash(_subDescriptions)); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$DescriptionModelImplCopyWith<_$DescriptionModelImpl> get copyWith => + __$$DescriptionModelImplCopyWithImpl<_$DescriptionModelImpl>( + this, _$identity); + + @override + Map toJson() { + return _$$DescriptionModelImplToJson( + this, + ); + } +} + +abstract class _DescriptionModel implements DescriptionModel { + const factory _DescriptionModel( + {final String? text, + final String? type, + final bool? isBold, + final List? subDescriptions}) = + _$DescriptionModelImpl; + + factory _DescriptionModel.fromJson(Map json) = + _$DescriptionModelImpl.fromJson; + + @override + String? get text; + @override + String? get type; + @override + bool? get isBold; + @override + List? get subDescriptions; + @override + @JsonKey(ignore: true) + _$$DescriptionModelImplCopyWith<_$DescriptionModelImpl> get copyWith => + throw _privateConstructorUsedError; +} + +SubDescriptionModel _$SubDescriptionModelFromJson(Map json) { + return _SubDescriptionModel.fromJson(json); +} + +/// @nodoc +mixin _$SubDescriptionModel { + String? get text => throw _privateConstructorUsedError; + String? get type => throw _privateConstructorUsedError; + bool? get isBold => throw _privateConstructorUsedError; + bool? get isSpaceRequired => throw _privateConstructorUsedError; + + Map toJson() => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + $SubDescriptionModelCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $SubDescriptionModelCopyWith<$Res> { + factory $SubDescriptionModelCopyWith( + SubDescriptionModel value, $Res Function(SubDescriptionModel) then) = + _$SubDescriptionModelCopyWithImpl<$Res, SubDescriptionModel>; + @useResult + $Res call({String? text, String? type, bool? isBold, bool? isSpaceRequired}); +} + +/// @nodoc +class _$SubDescriptionModelCopyWithImpl<$Res, $Val extends SubDescriptionModel> + implements $SubDescriptionModelCopyWith<$Res> { + _$SubDescriptionModelCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? text = freezed, + Object? type = freezed, + Object? isBold = freezed, + Object? isSpaceRequired = freezed, + }) { + return _then(_value.copyWith( + text: freezed == text + ? _value.text + : text // ignore: cast_nullable_to_non_nullable + as String?, + type: freezed == type + ? _value.type + : type // ignore: cast_nullable_to_non_nullable + as String?, + isBold: freezed == isBold + ? _value.isBold + : isBold // ignore: cast_nullable_to_non_nullable + as bool?, + isSpaceRequired: freezed == isSpaceRequired + ? _value.isSpaceRequired + : isSpaceRequired // ignore: cast_nullable_to_non_nullable + as bool?, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$SubDescriptionModelImplCopyWith<$Res> + implements $SubDescriptionModelCopyWith<$Res> { + factory _$$SubDescriptionModelImplCopyWith(_$SubDescriptionModelImpl value, + $Res Function(_$SubDescriptionModelImpl) then) = + __$$SubDescriptionModelImplCopyWithImpl<$Res>; + @override + @useResult + $Res call({String? text, String? type, bool? isBold, bool? isSpaceRequired}); +} + +/// @nodoc +class __$$SubDescriptionModelImplCopyWithImpl<$Res> + extends _$SubDescriptionModelCopyWithImpl<$Res, _$SubDescriptionModelImpl> + implements _$$SubDescriptionModelImplCopyWith<$Res> { + __$$SubDescriptionModelImplCopyWithImpl(_$SubDescriptionModelImpl _value, + $Res Function(_$SubDescriptionModelImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? text = freezed, + Object? type = freezed, + Object? isBold = freezed, + Object? isSpaceRequired = freezed, + }) { + return _then(_$SubDescriptionModelImpl( + text: freezed == text + ? _value.text + : text // ignore: cast_nullable_to_non_nullable + as String?, + type: freezed == type + ? _value.type + : type // ignore: cast_nullable_to_non_nullable + as String?, + isBold: freezed == isBold + ? _value.isBold + : isBold // ignore: cast_nullable_to_non_nullable + as bool?, + isSpaceRequired: freezed == isSpaceRequired + ? _value.isSpaceRequired + : isSpaceRequired // ignore: cast_nullable_to_non_nullable + as bool?, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$SubDescriptionModelImpl implements _SubDescriptionModel { + const _$SubDescriptionModelImpl( + {this.text, this.type, this.isBold, this.isSpaceRequired}); + + factory _$SubDescriptionModelImpl.fromJson(Map json) => + _$$SubDescriptionModelImplFromJson(json); + + @override + final String? text; + @override + final String? type; + @override + final bool? isBold; + @override + final bool? isSpaceRequired; + + @override + String toString() { + return 'SubDescriptionModel(text: $text, type: $type, isBold: $isBold, isSpaceRequired: $isSpaceRequired)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$SubDescriptionModelImpl && + (identical(other.text, text) || other.text == text) && + (identical(other.type, type) || other.type == type) && + (identical(other.isBold, isBold) || other.isBold == isBold) && + (identical(other.isSpaceRequired, isSpaceRequired) || + other.isSpaceRequired == isSpaceRequired)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => + Object.hash(runtimeType, text, type, isBold, isSpaceRequired); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$SubDescriptionModelImplCopyWith<_$SubDescriptionModelImpl> get copyWith => + __$$SubDescriptionModelImplCopyWithImpl<_$SubDescriptionModelImpl>( + this, _$identity); + + @override + Map toJson() { + return _$$SubDescriptionModelImplToJson( + this, + ); + } +} + +abstract class _SubDescriptionModel implements SubDescriptionModel { + const factory _SubDescriptionModel( + {final String? text, + final String? type, + final bool? isBold, + final bool? isSpaceRequired}) = _$SubDescriptionModelImpl; + + factory _SubDescriptionModel.fromJson(Map json) = + _$SubDescriptionModelImpl.fromJson; + + @override + String? get text; + @override + String? get type; + @override + bool? get isBold; + @override + bool? get isSpaceRequired; + @override + @JsonKey(ignore: true) + _$$SubDescriptionModelImplCopyWith<_$SubDescriptionModelImpl> get copyWith => + throw _privateConstructorUsedError; +} diff --git a/apps/health_campaign_field_worker_app/lib/models/privacy_notice/privacy_notice_model.g.dart b/apps/health_campaign_field_worker_app/lib/models/privacy_notice/privacy_notice_model.g.dart new file mode 100644 index 000000000..a40bc1b49 --- /dev/null +++ b/apps/health_campaign_field_worker_app/lib/models/privacy_notice/privacy_notice_model.g.dart @@ -0,0 +1,79 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'privacy_notice_model.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +_$PrivacyPolicyModelImpl _$$PrivacyPolicyModelImplFromJson( + Map json) => + _$PrivacyPolicyModelImpl( + header: json['header'] as String, + module: json['module'] as String, + active: json['active'] as bool?, + contents: (json['contents'] as List?) + ?.map((e) => ContentModel.fromJson(e as Map)) + .toList(), + ); + +Map _$$PrivacyPolicyModelImplToJson( + _$PrivacyPolicyModelImpl instance) => + { + 'header': instance.header, + 'module': instance.module, + 'active': instance.active, + 'contents': instance.contents, + }; + +_$ContentModelImpl _$$ContentModelImplFromJson(Map json) => + _$ContentModelImpl( + header: json['header'] as String?, + descriptions: (json['descriptions'] as List?) + ?.map((e) => DescriptionModel.fromJson(e as Map)) + .toList(), + ); + +Map _$$ContentModelImplToJson(_$ContentModelImpl instance) => + { + 'header': instance.header, + 'descriptions': instance.descriptions, + }; + +_$DescriptionModelImpl _$$DescriptionModelImplFromJson( + Map json) => + _$DescriptionModelImpl( + text: json['text'] as String?, + type: json['type'] as String?, + isBold: json['isBold'] as bool?, + subDescriptions: (json['subDescriptions'] as List?) + ?.map((e) => SubDescriptionModel.fromJson(e as Map)) + .toList(), + ); + +Map _$$DescriptionModelImplToJson( + _$DescriptionModelImpl instance) => + { + 'text': instance.text, + 'type': instance.type, + 'isBold': instance.isBold, + 'subDescriptions': instance.subDescriptions, + }; + +_$SubDescriptionModelImpl _$$SubDescriptionModelImplFromJson( + Map json) => + _$SubDescriptionModelImpl( + text: json['text'] as String?, + type: json['type'] as String?, + isBold: json['isBold'] as bool?, + isSpaceRequired: json['isSpaceRequired'] as bool?, + ); + +Map _$$SubDescriptionModelImplToJson( + _$SubDescriptionModelImpl instance) => + { + 'text': instance.text, + 'type': instance.type, + 'isBold': instance.isBold, + 'isSpaceRequired': instance.isSpaceRequired, + }; diff --git a/apps/health_campaign_field_worker_app/lib/pages/login.dart b/apps/health_campaign_field_worker_app/lib/pages/login.dart index 4df393cce..37ddf9c91 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/login.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/login.dart @@ -4,11 +4,14 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; +import '../blocs/app_initialization/app_initialization.dart'; import '../blocs/auth/auth.dart'; +import '../data/local_store/no_sql/schema/app_configuration.dart'; import '../router/app_router.dart'; import '../utils/environment_config.dart'; import '../utils/i18_key_constants.dart' as i18; import '../widgets/localized.dart'; +import '../widgets/privacy_notice/privacy_component.dart'; @RoutePage() class LoginPage extends LocalizedStatefulWidget { @@ -23,8 +26,10 @@ class LoginPage extends LocalizedStatefulWidget { class _LoginPageState extends LocalizedState { var passwordVisible = false; + bool isPrivacyEnabled =false; static const _userId = 'userId'; static const _password = 'password'; + static const _privacyCheck = 'privacyCheck'; @override void initState() { @@ -120,6 +125,31 @@ class _LoginPageState extends LocalizedState { obscureText: !passwordVisible, suffix: buildPasswordVisibility(), ), + BlocBuilder( + builder: (context, initState) { + final privacyPolicyJson = initState.maybeWhen( + initialized: + (AppConfiguration appConfiguration, _, __) => + appConfiguration.privacyPolicyConfig, + orElse: () => null); + if(privacyPolicyJson?.active==false){ + return const SizedBox.shrink(); + } + setState(() { + isPrivacyEnabled = true; + }); + return PrivacyComponent( + privacyPolicy: privacyPolicyJson, + formControlName: _privacyCheck, + text: localizations + .translate(i18.privacyPolicy.privacyNoticeText), + linkText: localizations.translate( + i18.privacyPolicy.privacyPolicyLinkText), + validationMessage: localizations.translate( + i18.privacyPolicy.privacyPolicyValidationText), + ); + }), const SizedBox(height: 16), DigitElevatedButton( onPressed: () { @@ -202,5 +232,9 @@ class _LoginPageState extends LocalizedState { validators: [Validators.required], value: '', ), + _privacyCheck: FormControl( + validators: [Validators.requiredTrue], + value: isPrivacyEnabled ? false : true, + ) }); } diff --git a/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart b/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart index fd4f79ff3..a0e808eba 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart @@ -11,6 +11,7 @@ const checklist = Checklist(); const complaints = Complaints(); const syncDialog = SyncDialog(); const homeShowcase = HomeShowcase(); +const privacyPolicy = PrivacyPolicy(); const dashBoard = Dashboard(); const householdLocationShowcase = HouseholdLocationShowcase(); @@ -1037,6 +1038,23 @@ class BeneficiaryDetails { String get recordCycle => 'BENEFICIARY_DETAILS_RECORD_CYCLE'; } +class PrivacyPolicy { + const PrivacyPolicy(); + + String get acceptText { + return 'PRIVACY_POLICY_ACCEPT_TEXT'; + } + + String get declineText { + return 'PRIVACY_POLICY_DECLINE_TEXT'; + } + + String get privacyNoticeText => 'PRIVACY_POLICY_TEXT'; + String get privacyPolicyLinkText => 'PRIVACY_POLICY_LINK_TEXT'; + String get privacyPolicyValidationText => 'PRIVACY_POLICY_VALIDATION_TEXT'; + +} + class Dashboard { const Dashboard(); diff --git a/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_component.dart b/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_component.dart new file mode 100644 index 000000000..e3d921384 --- /dev/null +++ b/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_component.dart @@ -0,0 +1,172 @@ +import 'package:digit_components/digit_components.dart'; +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import '../../blocs/app_initialization/app_initialization.dart'; +import '../../data/local_store/no_sql/schema/app_configuration.dart'; +import '../../models/privacy_notice/privacy_notice_model.dart'; +import '../localized.dart'; +import 'privacy_notice_dialog.dart'; +import 'package:reactive_forms/reactive_forms.dart'; + +class PrivacyComponent extends LocalizedStatefulWidget { + final String formControlName; + final String text; + final String linkText; + final PrivacyPolicy? privacyPolicy; + final String? trailingText; + final String validationMessage; + + const PrivacyComponent({ + super.key, + super.appLocalizations, + required this.formControlName, + required this.text, + required this.linkText, + this.trailingText, + this.privacyPolicy, + required this.validationMessage, + }); + + @override + State createState() => _PrivacyComponentState(); +} + +class _PrivacyComponentState extends LocalizedState { + late ValueNotifier checkboxStateNotifier; + + @override + void initState() { + super.initState(); + checkboxStateNotifier = ValueNotifier(false); + } + + @override + void dispose() { + checkboxStateNotifier.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + + return ReactiveFormField( + formControlName: widget.formControlName, + builder: (field) { + return ValueListenableBuilder( + valueListenable: checkboxStateNotifier, + builder: (context, value, child) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + GestureDetector( + onTap: () { + checkboxStateNotifier.value = + !checkboxStateNotifier.value; + field.didChange(checkboxStateNotifier.value); + }, + child: value + ? Container( + width: kPadding*3, + height: kPadding*3, + decoration: BoxDecoration( + border: Border.all( + color: const DigitColors().burningOrange, + width: 2, + ), + borderRadius: BorderRadius.zero, + ), + child: Center( + child: Icon( + Icons.check, + size: kPadding*2, + color: const DigitColors().burningOrange, + ), + ), + ) + : Container( + width: kPadding*3, + height: kPadding*3, + decoration: BoxDecoration( + border: Border.all( + color: const DigitColors().woodsmokeBlack, + width: 1, + ), + borderRadius: BorderRadius.zero, + ), + ), + ), + const SizedBox(width: kPadding), + Expanded( + child: Text.rich( + TextSpan( + text: widget.text, + style: theme.textTheme.bodyLarge?.copyWith( + color: const DigitColors().woodsmokeBlack, + ), + children: [ + TextSpan( + text: widget.linkText, + style: theme.textTheme.bodyLarge?.copyWith( + color: const DigitColors().burningOrange, + decoration: TextDecoration.underline, + decorationColor: + const DigitColors().burningOrange, + ), + recognizer: TapGestureRecognizer() + ..onTap = () { + showDialog( + context: context, + builder: (context) { + + return FullPageDialog( + privacyPolicy: widget.privacyPolicy ?? PrivacyPolicy(), + onAccept: () { + checkboxStateNotifier.value = true; + field.didChange(true); + }, + onDecline: () { + checkboxStateNotifier.value = false; + field.didChange(false); + }, + ); + }, + ); + }, + ), + if (widget.trailingText != null) + TextSpan( + text: widget.trailingText, + style: theme.textTheme.bodyLarge?.copyWith( + color: const DigitColors().woodsmokeBlack, + ), + ), + ], + ), + ), + ), + ], + ), + if (field.errorText != null) ...[ + const SizedBox(height: kPadding/2), + Text( + widget.validationMessage, + style: theme.textTheme.bodySmall?.copyWith( + color: const DigitColors().lavaRed, + ), + ), + ], + ], + ); + }, + ); + }, + validationMessages: { + ValidationMessage.required: (error) => widget.validationMessage, + }, + ); + } +} diff --git a/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_notice_dialog.dart b/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_notice_dialog.dart new file mode 100644 index 000000000..55421cfc2 --- /dev/null +++ b/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_notice_dialog.dart @@ -0,0 +1,142 @@ +import 'package:digit_components/theme/colors.dart'; +import 'package:digit_components/widgets/digit_card.dart'; +import 'package:digit_components/widgets/digit_elevated_button.dart'; +import 'package:digit_components/widgets/digit_outline_button.dart'; +import 'package:flutter/material.dart'; +import '../../data/local_store/no_sql/schema/app_configuration.dart'; +import '../localized.dart'; +import 'privacy_notice_expand_component.dart'; +import '../../utils/i18_key_constants.dart' as i18; +import '../../models/privacy_notice/privacy_notice_model.dart'; +import '../showcase/showcase_wrappers.dart'; + +class FullPageDialog extends LocalizedStatefulWidget { + final PrivacyPolicy privacyPolicy; + final VoidCallback onAccept; + final VoidCallback onDecline; + + const FullPageDialog({ + super.key, + super.appLocalizations, + required this.privacyPolicy, + required this.onAccept, + required this.onDecline, + }); + + @override + _FullPageDialogState createState() => _FullPageDialogState(); +} + +class _FullPageDialogState extends LocalizedState { + @override + Widget build(BuildContext context) { + return Dialog.fullscreen( + backgroundColor: const DigitColors().white, + child: Container( + color: const DigitColors().white, + child: Column( + children: [ + Expanded( + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: kPadding*2), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Padding( + padding: const EdgeInsets.only(top: kPadding*3, left: 0), + child: Text( + localizations.translate(widget.privacyPolicy.header), + maxLines: 3, + style: Theme.of(context).textTheme.displayMedium?.copyWith( + color: const DigitColors().woodsmokeBlack, + ), + ), + ), + Padding( + padding: EdgeInsets.zero, + child: InkWell( + onTap: () { + Navigator.of(context).pop(); + }, + child: Icon( + Icons.close, + size: kPadding*4, + color: const DigitColors().woodsmokeBlack, + ), + ), + ), + ], + ), + const SizedBox(height: kPadding*2), + if(widget.privacyPolicy.contents != null) + Column( + children: widget.privacyPolicy.contents!.map((section) { + return Padding( + padding: const EdgeInsets.only(bottom: kPadding*2), + child: ExpandableSection(content: section), + ); + }).toList(), + ), + ], + ), + ), + ), + ), + Container( + decoration: BoxDecoration( + boxShadow: [ + BoxShadow( + color: const Color(0xFF000000).withOpacity(.16), + offset: const Offset(0, -1), + spreadRadius: 0, + blurRadius: 2, + ), + ], + ), + child: DigitCard( + margin: const EdgeInsets.symmetric(horizontal: 0), + padding: const EdgeInsets.all(kPadding), + child: Column( + children: [ + DigitElevatedButton( + onPressed: () { + widget.onAccept(); + Navigator.of(context).pop(); + }, + child: Text(localizations.translate(i18.privacyPolicy.acceptText)), + ), + DigitOutLineButton( + onPressed: () { + widget.onDecline(); + Navigator.of(context).pop(); + }, + label: localizations.translate(i18.privacyPolicy.declineText), + buttonStyle: OutlinedButton.styleFrom( + backgroundColor: Colors.white, + side: BorderSide( + width: 1.0, + color: Theme.of(context).colorScheme.secondary, + ), + minimumSize: Size( + MediaQuery.of(context).size.width, + 50, + ), + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.zero, + ), + ), + ), + ], + ), + ), + ), + ], + ), + ), + ); + } +} diff --git a/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_notice_expand_component.dart b/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_notice_expand_component.dart new file mode 100644 index 000000000..fdac8c023 --- /dev/null +++ b/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_notice_expand_component.dart @@ -0,0 +1,251 @@ +import 'package:closed_household/widgets/showcase/showcase_wrappers.dart'; +import 'package:collection/collection.dart'; +import 'package:digit_components/theme/colors.dart'; +import 'package:flutter/material.dart'; +import '../../data/local_store/no_sql/schema/app_configuration.dart'; +import '../../models/privacy_notice/privacy_notice_model.dart'; +import '../localized.dart'; + +class ExpandableSection extends LocalizedStatefulWidget { + final Content content; + + const ExpandableSection({ + super.key, + super.appLocalizations, + required this.content, + }); + + @override + _ExpandableSectionState createState() => _ExpandableSectionState(); +} + +class _ExpandableSectionState extends LocalizedState { + bool _isExpanded = false; + + @override + Widget build(BuildContext context) { + return Container( + decoration: BoxDecoration( + color: const DigitColors().alabasterWhite, + borderRadius: const BorderRadius.all(Radius.circular(kPadding/2)), + border: Border.all(color: const DigitColors().quillGray, width: 1.0), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + GestureDetector( + onTap: () { + setState(() { + _isExpanded = !_isExpanded; + }); + }, + child: Container( + padding: _isExpanded ? const EdgeInsets.only(top: kPadding*2, left: kPadding*2, right: kPadding*2): const EdgeInsets.all(kPadding*2), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if(widget.content.header != null) + Flexible( + child: Text( + localizations.translate(widget.content.header!), + maxLines: 3, + style: Theme.of(context).textTheme.bodyLarge?.copyWith(fontWeight: FontWeight.bold), + ), + ), + Icon( + _isExpanded ? Icons.expand_less : Icons.chevron_right, size: kPadding*3, + ), + ], + ), + ), + ), + if (_isExpanded && widget.content.descriptions != null) + Padding( + padding: const EdgeInsets.symmetric(horizontal: kPadding*2), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: widget.content.descriptions!.asMap().entries.map((entry) { + int index = entry.key; + Description desc = entry.value; + int? stepNumber = desc.type == 'step' ? index + 1 : null; + return DescriptionWidget( + description: desc, + stepNumber: stepNumber, + ); + }).toList(), + ), + ), + ], + ), + ); + } +} + +class DescriptionWidget extends LocalizedStatefulWidget { + final Description description; + final int? stepNumber; + + const DescriptionWidget({ + super.key, + super.appLocalizations, + required this.description, + this.stepNumber, + }); + + @override + _DescriptionWidgetState createState() => _DescriptionWidgetState(); +} + +class _DescriptionWidgetState extends LocalizedState { + @override + Widget build(BuildContext context) { + final descriptionText = widget.description.text ?? ''; + final descriptionType = widget.description.type ?? "null"; + final isBold = widget.description.isBold ?? false; + final hasSubDescriptions = widget.description.subDescriptions != null; + + return Padding( + padding: const EdgeInsets.only(top: kPadding, bottom: kPadding), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _buildDescriptionText(descriptionText, descriptionType, isBold, widget.stepNumber), + if (hasSubDescriptions) + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: widget.description.subDescriptions!.asMap().entries.map((entry) { + final index = entry.key; + final subDesc = entry.value; + return SubDescriptionWidget( + subDescription: subDesc, + stepNumber: subDesc.type == 'step' ? index + 1 : null, // Pass step number if type is 'step' + ); + }).toList(), + ), + ], + ), + ); + } + + Widget _buildDescriptionText(String descriptionText, String descriptionType, bool isBold, int? stepNumber) { + if (descriptionType == 'step') { + return Text( + '$stepNumber. ${localizations.translate(descriptionText)}', + textAlign: TextAlign.justify, + style: TextStyle( + fontWeight: isBold ? FontWeight.bold : FontWeight.normal, + ), + ); + } else if (descriptionType == 'points') { + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Column( + children: [ + SizedBox(height: kPadding/4,), + Icon(Icons.circle, size: kPadding), + ], + ), + const SizedBox(width: kPadding), + Expanded( + child: Text( + localizations.translate(descriptionText), + textAlign: TextAlign.justify, + style: TextStyle( + fontWeight: isBold ? FontWeight.bold : FontWeight.normal, + ), + ), + ), + ], + ); + } else { + return Text( + localizations.translate(descriptionText), + textAlign: TextAlign.justify, + style: TextStyle( + fontWeight: isBold ? FontWeight.bold : FontWeight.normal, + ), + ); + } + } +} + +class SubDescriptionWidget extends LocalizedStatefulWidget { + final SubDescription subDescription; + final int? stepNumber; + + const SubDescriptionWidget({ + super.key, + super.appLocalizations, + required this.subDescription, + this.stepNumber, + }); + + @override + _SubDescriptionWidgetState createState() => _SubDescriptionWidgetState(); +} + +class _SubDescriptionWidgetState extends LocalizedState { + @override + Widget build(BuildContext context) { + final subDescriptionText = widget.subDescription.text ?? ''; + final subDescriptionType = widget.subDescription.type ?? "null"; + final isBold = widget.subDescription.isBold ?? false; + final isSpaceRequired = widget.subDescription.isSpaceRequired ?? false; + + return Padding( + padding: EdgeInsets.only(left: isSpaceRequired ? kPadding*2 : 0.0, top: kPadding/2, bottom: kPadding/2), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _buildSubDescriptionText(subDescriptionText, subDescriptionType, isBold, widget.stepNumber), + ], + ), + ); + } + + Widget _buildSubDescriptionText(String subDescriptionText, String subDescriptionType, bool isBold, int? stepNumber) { + if (subDescriptionType == 'step') { + return Text( + '$stepNumber. ${localizations.translate(subDescriptionText)}', + textAlign: TextAlign.justify, + style: TextStyle( + fontWeight: isBold ? FontWeight.bold : FontWeight.normal, + ), + ); + } else if (subDescriptionType == 'points') { + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Column( + children: [ + SizedBox(height: kPadding/4,), + Icon(Icons.circle, size: kPadding), + ], + ), + const SizedBox(width: kPadding), + Expanded( + child: Text( + localizations.translate(subDescriptionText), + textAlign: TextAlign.justify, + style: TextStyle( + fontWeight: isBold ? FontWeight.bold : FontWeight.normal, + ), + ), + ), + ], + ); + } else { + return Text( + localizations.translate(subDescriptionText), + textAlign: TextAlign.justify, + style: TextStyle( + fontWeight: isBold ? FontWeight.bold : FontWeight.normal, + ), + ); + } + } +} + + From d1a8046dc369529f6aac215dce37f1c0ea25e0b6 Mon Sep 17 00:00:00 2001 From: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Date: Mon, 26 Aug 2024 16:34:31 +0530 Subject: [PATCH 077/241] HCMPRE-332:: Mobile dashboard added check for lastSyncTime to convert to date format (#540) * HCMPRE-332:: Mobile dashboard added check for lastSyncTime to convert to date format * added a enum for lastSyncedTime --------- Co-authored-by: rachana-egov --- packages/digit_dss/lib/blocs/dashboard.dart | 21 ++++++++++++------- .../lib/models/entities/dss_enums.dart | 2 ++ .../lib/models/entities/dss_enums.mapper.dart | 4 ++++ 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/packages/digit_dss/lib/blocs/dashboard.dart b/packages/digit_dss/lib/blocs/dashboard.dart index 3ed2e8780..7f69c15e6 100644 --- a/packages/digit_dss/lib/blocs/dashboard.dart +++ b/packages/digit_dss/lib/blocs/dashboard.dart @@ -6,6 +6,7 @@ import 'package:collection/collection.dart'; // Import the collection package fo import 'package:digit_components/models/digit_table_model.dart'; // Import the digit_table_model.dart file from the digit_components package import 'package:digit_components/theme/colors.dart'; // Import the colors.dart file from the digit_components package import 'package:digit_components/theme/digit_theme.dart'; // Import the digit_theme.dart file from the digit_components package +import 'package:digit_components/utils/date_utils.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_dss/digit_dss.dart'; // Import the digit_dss.dart file from the digit_dss package import 'package:flutter/cupertino.dart'; @@ -202,13 +203,19 @@ class DashboardBloc extends Bloc { (i, plot) => TableData( plot.symbol == DSSEnums.number.toValue() || plot.symbol == DSSEnums.percentage.toValue() - ? double.parse(plot.value.toString()) == - double.parse(plot.value.toString()).toInt() - ? double.parse(plot.value.toString()) - .toInt() - .toString() - : double.parse(plot.value.toString()) - .toStringAsFixed(2) + ? plot.name == DSSEnums.lastSyncedTime.toValue() && + plot.symbol == DSSEnums.number.toValue() + ? DigitDateUtils.getDateFromTimestamp(int.parse( + double.parse(plot.value.toString()) + .toInt() + .toString())) + : double.parse(plot.value.toString()) == + double.parse(plot.value.toString()).toInt() + ? double.parse(plot.value.toString()) + .toInt() + .toString() + : double.parse(plot.value.toString()) + .toStringAsFixed(2) : plot.label.toString(), cellKey: plot.name, style: DigitTheme.instance.mobileTheme.textTheme.bodyMedium diff --git a/packages/digit_dss/lib/models/entities/dss_enums.dart b/packages/digit_dss/lib/models/entities/dss_enums.dart index 4c772c55a..cf03db3eb 100644 --- a/packages/digit_dss/lib/models/entities/dss_enums.dart +++ b/packages/digit_dss/lib/models/entities/dss_enums.dart @@ -31,4 +31,6 @@ enum DSSEnums { uuid, @MappableValue("projectId") projectId, + @MappableValue("Lastsyncedtime") + lastSyncedTime, } diff --git a/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart b/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart index 6e591fd40..8844c362f 100644 --- a/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart +++ b/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart @@ -51,6 +51,8 @@ class DSSEnumsMapper extends EnumMapper { return DSSEnums.uuid; case "projectId": return DSSEnums.projectId; + case "Lastsyncedtime": + return DSSEnums.lastSyncedTime; default: throw MapperException.unknownEnumValue(value); } @@ -85,6 +87,8 @@ class DSSEnumsMapper extends EnumMapper { return "uuid"; case DSSEnums.projectId: return "projectId"; + case DSSEnums.lastSyncedTime: + return "Lastsyncedtime"; } } } From c6f0449122d7ec5f8acae72044ed52f42891d26b Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Tue, 27 Aug 2024 16:24:52 +0530 Subject: [PATCH 078/241] Hcmpre 263 - Sync write transaction for ISAR - fix, Localization fall back (#538) * Update closed_household_details.dart (#482) * Fixed pagination refresh issue (#481) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments --------- Co-authored-by: rachana-egov * implemented count for filter search, added todo for combination search count * Fixed count TODO: search with task status filter * Fixed search with task status filter Removed delay in delivery_summary_page.dart * added code comments * HCMPRE-165 issues (#484) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments * HCMPRE-162:: Reload issue fix for closed household and not registered * HCMPRE-165: issues fixes * updated reasons for refusals --------- Co-authored-by: rachana-egov Co-authored-by: Ramkrishna-egov * Updated publock * Added a check to avoid multiple leftJoin for projectBeneficiary - fix for multiple left join error * created new table for localization TODO: separate packages localization delegates to individual package and move the localization model to data_model package for common usage Delete localization related isar files once tested * init Boundary code wise localization.dart * create localization local repo modified module separation from query to exclude and include specified module * modified module exclude in boundary page * modified localization call for boundary selection bug where first value is localized in dropdown * removed un-required localization bloc calls * updated index value to selected language on home * Uploaded pre release for inventory-management and digit-dss * Updated delivery enums for Not delivered status * Updated status model in task to taskStatus * Updated registration delivery package * Reverted Task Model status key change * Update pubspec with latest version of packages * Summary page Type of resource locale key updated * Resolved comments * Resolved comments and unused variables * Resolved comments and unused variables * Updated version * Updated individual_global_search.dart for search * added data segration * check to enable edit delivery * added project filter * Registration delivery- Attendance management fixes (#497) * Removed captured location dialog on attendance submit * Removed stpper if deliveries length is greater than 1 * Updated digit_components and digit_data_model packages in attendance management * Updated digit_components and digit_data_model packages in attendance management * Localization loader and dialog localization fix (#505) * added dialog till localization is not loaded * fixed localization not coming issue * added a util funtion to show language loading --------- Co-authored-by: rachana-egov * updated search added project id in beneficiary search removed commented code * User uuids filter fixes for attendees local search in an attendance register (#512) * User uuids filters fixes for attendees search in a register * Removed default dashboard card from home * Sync fix --------- Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> * Added Task address mapping on refused delivery (#514) * replace and push homepage from boundary page sync dialog * updated register search query to exclude attendee and staff in limit query updated attendance and registration_delivery package * registration_delivery package update * * Added error toast for network failure (#525) * No result card added if no charts available * Updated end date for dss charts to 23:59 instead of 11:59 (#527) * task create fix - removed condition check of resources during create updated changelog of registration, closed, digit_data_model, inventory, registration_delivery --dry-run fixes * Updated stable packages for scanner, attendance and dss (#528) * updated packages to latest version digit_components version update * added fallback ui dialog when localization call fails. * added localization code * merge from dev * fix for isar transaction lock issue * moved boundary localization path to constants. Updated dialog in language_selection.dart page * isar lock fix * updated data_model version for isar fix. updated a check in language_selection.dart for dialog --------- Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: rachana-egov Co-authored-by: Ramkrishna-egov Co-authored-by: naveen-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> --- .../blocs/localization/app_localization.dart | 2 - .../lib/blocs/localization/localization.dart | 66 +++++++- .../localization/localization.freezed.dart | 43 ++++- .../lib/blocs/project/project.dart | 6 +- .../lib/blocs/sync/sync.dart | 8 +- .../lib/data/network_manager.dart | 4 +- .../data/repositories/local/localization.dart | 31 ++++ .../repositories/remote/localization.dart | 60 +++---- .../lib/data/repositories/remote/mdms.dart | 8 +- .../lib/data/repositories/sync/sync_up.dart | 1 - .../lib/pages/boundary_selection.dart | 151 ++++++++++-------- .../lib/pages/language_selection.dart | 151 ++++++++++++------ .../lib/pages/project_facility_selection.dart | 1 - .../lib/utils/constants.dart | 2 + .../lib/utils/i18_key_constants.dart | 4 + .../pubspec.lock | 16 +- packages/digit_data_model/CHANGELOG.md | 5 + .../lib/data/repositories/oplog/oplog.dart | 84 +++++----- packages/digit_data_model/pubspec.yaml | 2 +- .../digit_dss/lib/data/remote/dashboard.dart | 12 +- packages/digit_dss/pubspec.yaml | 2 +- packages/digit_scanner/example/pubspec.lock | 6 +- 22 files changed, 415 insertions(+), 250 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/blocs/localization/app_localization.dart b/apps/health_campaign_field_worker_app/lib/blocs/localization/app_localization.dart index 27e08cc72..b11d925fe 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/localization/app_localization.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/localization/app_localization.dart @@ -1,10 +1,8 @@ import 'package:digit_data_model/data/local_store/sql_store/sql_store.dart'; import 'package:flutter/material.dart'; -import 'package:isar/isar.dart'; import '../../data/local_store/no_sql/schema/app_configuration.dart'; import '../../data/local_store/no_sql/schema/localization.dart'; import '../../data/repositories/local/localization.dart'; -import '../../utils/utils.dart'; import 'app_localizations_delegate.dart'; class AppLocalizations { diff --git a/apps/health_campaign_field_worker_app/lib/blocs/localization/localization.dart b/apps/health_campaign_field_worker_app/lib/blocs/localization/localization.dart index 2bbc45815..5784ce14d 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/localization/localization.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/localization/localization.dart @@ -3,8 +3,8 @@ import 'package:digit_data_model/data/local_store/sql_store/sql_store.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:isar/isar.dart'; import '../../data/local_store/app_shared_preferences.dart'; +import '../../data/repositories/local/localization.dart'; import '../../data/repositories/remote/localization.dart'; import '../../utils/utils.dart'; import 'app_localization.dart'; @@ -33,12 +33,63 @@ class LocalizationBloc extends Bloc { emit(state.copyWith(loading: true)); try { - await localizationRepository.loadLocalization( - path: event.path, - locale: event.locale, - module: event.module, - tenantId: event.tenantId, - ); + final boundaryModuleCheck = + event.module.contains(Constants.boundaryLocalizationPath); + final allModules = event.module.split(','); + var boundaryModule; + + if (boundaryModuleCheck) { + final boundaryModuleIndex = + allModules.indexOf(Constants.boundaryLocalizationPath); + boundaryModule = allModules[boundaryModuleIndex]; + allModules.removeAt(boundaryModuleIndex); + } + + try { + var localizationList; + + var localResults = await LocalizationLocalRepository() + .fetchLocalization( + sql: sql, locale: event.locale, module: allModules.join(',')); + if (localResults.isEmpty) { + var results = await localizationRepository.loadLocalization( + path: event.path, + locale: event.locale, + module: allModules.join(','), + tenantId: event.tenantId, + ); + localizationList = LocalizationLocalRepository().create(results, sql); + if (boundaryModule != null) { + try { + var localizationList; + var localResults = await LocalizationLocalRepository() + .fetchLocalization( + sql: sql, locale: event.locale, module: boundaryModule); + if (localResults.isEmpty) { + var results = await localizationRepository.loadLocalization( + path: event.path, + locale: event.locale, + module: boundaryModule, + tenantId: event.tenantId, + ); + + localizationList = + LocalizationLocalRepository().create(results, sql); + } else { + localizationList = localResults; + } + } catch (error) { + debugPrint('error in boundary module localization $error'); + emit(state.copyWith(loading: false, retryModule: boundaryModule)); + } + } + } else { + localizationList = localResults; + } + } catch (error) { + debugPrint('error in other modules localization $error'); + emit(state.copyWith(loading: false, retryModule: allModules.join(','))); + } final List codes = event.locale.split('_'); await _loadLocale(codes); @@ -86,5 +137,6 @@ class LocalizationState with _$LocalizationState { @Default(false) bool loading, @Default(0) int index, @Default(false) bool isLocalizationLoadCompleted, + String? retryModule, }) = _LocalizationState; } diff --git a/apps/health_campaign_field_worker_app/lib/blocs/localization/localization.freezed.dart b/apps/health_campaign_field_worker_app/lib/blocs/localization/localization.freezed.dart index 928e83c4b..520ed63f0 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/localization/localization.freezed.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/localization/localization.freezed.dart @@ -430,6 +430,7 @@ mixin _$LocalizationState { bool get loading => throw _privateConstructorUsedError; int get index => throw _privateConstructorUsedError; bool get isLocalizationLoadCompleted => throw _privateConstructorUsedError; + String? get retryModule => throw _privateConstructorUsedError; @JsonKey(ignore: true) $LocalizationStateCopyWith get copyWith => @@ -442,7 +443,11 @@ abstract class $LocalizationStateCopyWith<$Res> { LocalizationState value, $Res Function(LocalizationState) then) = _$LocalizationStateCopyWithImpl<$Res, LocalizationState>; @useResult - $Res call({bool loading, int index, bool isLocalizationLoadCompleted}); + $Res call( + {bool loading, + int index, + bool isLocalizationLoadCompleted, + String? retryModule}); } /// @nodoc @@ -461,6 +466,7 @@ class _$LocalizationStateCopyWithImpl<$Res, $Val extends LocalizationState> Object? loading = null, Object? index = null, Object? isLocalizationLoadCompleted = null, + Object? retryModule = freezed, }) { return _then(_value.copyWith( loading: null == loading @@ -475,6 +481,10 @@ class _$LocalizationStateCopyWithImpl<$Res, $Val extends LocalizationState> ? _value.isLocalizationLoadCompleted : isLocalizationLoadCompleted // ignore: cast_nullable_to_non_nullable as bool, + retryModule: freezed == retryModule + ? _value.retryModule + : retryModule // ignore: cast_nullable_to_non_nullable + as String?, ) as $Val); } } @@ -487,7 +497,11 @@ abstract class _$$LocalizationStateImplCopyWith<$Res> __$$LocalizationStateImplCopyWithImpl<$Res>; @override @useResult - $Res call({bool loading, int index, bool isLocalizationLoadCompleted}); + $Res call( + {bool loading, + int index, + bool isLocalizationLoadCompleted, + String? retryModule}); } /// @nodoc @@ -504,6 +518,7 @@ class __$$LocalizationStateImplCopyWithImpl<$Res> Object? loading = null, Object? index = null, Object? isLocalizationLoadCompleted = null, + Object? retryModule = freezed, }) { return _then(_$LocalizationStateImpl( loading: null == loading @@ -518,6 +533,10 @@ class __$$LocalizationStateImplCopyWithImpl<$Res> ? _value.isLocalizationLoadCompleted : isLocalizationLoadCompleted // ignore: cast_nullable_to_non_nullable as bool, + retryModule: freezed == retryModule + ? _value.retryModule + : retryModule // ignore: cast_nullable_to_non_nullable + as String?, )); } } @@ -528,7 +547,8 @@ class _$LocalizationStateImpl implements _LocalizationState { const _$LocalizationStateImpl( {this.loading = false, this.index = 0, - this.isLocalizationLoadCompleted = false}); + this.isLocalizationLoadCompleted = false, + this.retryModule}); @override @JsonKey() @@ -539,10 +559,12 @@ class _$LocalizationStateImpl implements _LocalizationState { @override @JsonKey() final bool isLocalizationLoadCompleted; + @override + final String? retryModule; @override String toString() { - return 'LocalizationState(loading: $loading, index: $index, isLocalizationLoadCompleted: $isLocalizationLoadCompleted)'; + return 'LocalizationState(loading: $loading, index: $index, isLocalizationLoadCompleted: $isLocalizationLoadCompleted, retryModule: $retryModule)'; } @override @@ -555,12 +577,14 @@ class _$LocalizationStateImpl implements _LocalizationState { (identical(other.isLocalizationLoadCompleted, isLocalizationLoadCompleted) || other.isLocalizationLoadCompleted == - isLocalizationLoadCompleted)); + isLocalizationLoadCompleted) && + (identical(other.retryModule, retryModule) || + other.retryModule == retryModule)); } @override - int get hashCode => - Object.hash(runtimeType, loading, index, isLocalizationLoadCompleted); + int get hashCode => Object.hash( + runtimeType, loading, index, isLocalizationLoadCompleted, retryModule); @JsonKey(ignore: true) @override @@ -574,7 +598,8 @@ abstract class _LocalizationState implements LocalizationState { const factory _LocalizationState( {final bool loading, final int index, - final bool isLocalizationLoadCompleted}) = _$LocalizationStateImpl; + final bool isLocalizationLoadCompleted, + final String? retryModule}) = _$LocalizationStateImpl; @override bool get loading; @@ -583,6 +608,8 @@ abstract class _LocalizationState implements LocalizationState { @override bool get isLocalizationLoadCompleted; @override + String? get retryModule; + @override @JsonKey(ignore: true) _$$LocalizationStateImplCopyWith<_$LocalizationStateImpl> get copyWith => throw _privateConstructorUsedError; diff --git a/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart b/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart index e90a8453a..18e420dea 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart @@ -555,10 +555,10 @@ class ProjectBloc extends Bloc { rowVersion.version = element.version; rowVersionList.add(rowVersion); } - await isar.writeTxn(() async { - await isar.rowVersionLists.clear(); + isar.writeTxnSync(() { + isar.rowVersionLists.clear(); - await isar.rowVersionLists.putAll(rowVersionList); + isar.rowVersionLists.putAllSync(rowVersionList); }); } else { boundaries = await boundaryLocalRepository.search( diff --git a/apps/health_campaign_field_worker_app/lib/blocs/sync/sync.dart b/apps/health_campaign_field_worker_app/lib/blocs/sync/sync.dart index fccc5cf44..ea6826cbe 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/sync/sync.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/sync/sync.dart @@ -38,17 +38,17 @@ class SyncBloc extends Bloc { int? length = event.count; emit(const SyncState.loading()); try { - length ??= getSyncCount(await isar.opLogs + length ??= getSyncCount(isar.opLogs .filter() .createdByEqualTo(event.createdBy) .syncedUpEqualTo(false) - .findAll()) + - getSyncCount(await isar.opLogs + .findAllSync()) + + getSyncCount(isar.opLogs .filter() .createdByEqualTo(event.createdBy) .syncedUpEqualTo(true) .syncedDownEqualTo(false) - .findAll()); + .findAllSync()); } catch (_) { rethrow; } finally { diff --git a/apps/health_campaign_field_worker_app/lib/data/network_manager.dart b/apps/health_campaign_field_worker_app/lib/data/network_manager.dart index 66652ea67..54188873b 100644 --- a/apps/health_campaign_field_worker_app/lib/data/network_manager.dart +++ b/apps/health_campaign_field_worker_app/lib/data/network_manager.dart @@ -231,9 +231,9 @@ abstract class SyncError implements Exception { } class SyncUpError extends SyncError { - const SyncUpError([dynamic error]) : super(error); + const SyncUpError([super.error]); } class SyncDownError extends SyncError { - const SyncDownError([dynamic error]) : super(error); + const SyncDownError([super.error]); } diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart index 956fcd512..a5d873711 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart @@ -73,4 +73,35 @@ class LocalizationLocalRepository { ..message = data.message; }).toList(); } + + FutureOr> fetchLocalization( + {required LocalSqlDataStore sql, + required String locale, + required String module}) async { + final query = sql.select(sql.localization).join([]) + ..where( + buildAnd([ + sql.localization.locale.equals(locale), + sql.localization.module.contains(module), + ]), + ); + + final results = await query.get(); + + return results.map((e) { + final data = e.readTableOrNull(sql.localization); + return Localization() + ..code = data!.code + ..locale = data.locale + ..module = data.module + ..message = data.message; + }).toList(); + } + + FutureOr create( + List result, LocalSqlDataStore sql) async { + return sql.batch((batch) { + batch.insertAll(sql.localization, result); + }); + } } diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/remote/localization.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/remote/localization.dart index b290a17a9..d4d3bee1d 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/remote/localization.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/remote/localization.dart @@ -6,6 +6,7 @@ import 'package:drift/drift.dart'; import '../../../models/localization/localization_model.dart'; import '../../local_store/no_sql/schema/localization.dart'; +import '../local/localization.dart'; class LocalizationRepository { final Dio _client; @@ -30,7 +31,7 @@ class LocalizationRepository { return LocalizationModel.fromJson( json.decode(response.toString()), ); - } on DioError catch (_) { + } on DioException catch (_) { // Assuming there will be an errorMessage property in the JSON object rethrow; } @@ -42,47 +43,22 @@ class LocalizationRepository { required String module, required String tenantId, }) async { - List localizationList = []; + var results = await search( + url: path, + queryParameters: { + "module": module, + "locale": locale, + "tenantId": tenantId, + }, + ); - final query = _sql.select(_sql.localization).join([]) - ..where( - buildAnd([ - _sql.localization.locale.equals(locale), - ]), - ); - - final results = await query.get(); - - localizationList = results.map((e) { - final data = e.readTableOrNull(_sql.localization); - return Localization() - ..code = data!.code - ..locale = data.locale - ..module = data.module - ..message = data.message; - }).toList(); - - if (localizationList.isEmpty) { - final result = await search( - url: path, - queryParameters: { - "module": module, - "locale": locale, - "tenantId": tenantId, - }, - ); - await _sql.batch((batch) { - batch.insertAll( - _sql.localization, - result.messages - .map((e) => LocalizationCompanion( - code: Value(e.code), - locale: Value(e.locale), - message: Value(e.message), - module: Value(e.module), - )) - .toList()); - }); - } + return results.messages + .map((e) => LocalizationCompanion( + code: Value(e.code), + locale: Value(e.locale), + message: Value(e.message), + module: Value(e.module), + )) + .toList(); } } diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart index 37958947e..748d821d1 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart @@ -114,7 +114,7 @@ class MdmsRepository { app_configuration.AppConfigPrimaryWrapperModel result, PGRServiceDefinitions pgrServiceDefinitions, Isar isar, - ) async { + ) { final appConfiguration = AppConfiguration(); final data = result.rowVersions?.rowVersionslist; @@ -369,9 +369,9 @@ class MdmsRepository { return reasonTypes; }).toList(); - await isar.writeTxn(() async { - await isar.appConfigurations.put(appConfiguration); - await isar.rowVersionLists.putAll(rowVersionList); + isar.writeTxnSync(() { + isar.appConfigurations.putSync(appConfiguration); + isar.rowVersionLists.putAllSync(rowVersionList); }); } diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/sync/sync_up.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/sync/sync_up.dart index b5a8995ce..fdf1ab1dd 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/sync/sync_up.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/sync/sync_up.dart @@ -1,6 +1,5 @@ import 'dart:async'; -import 'package:closed_household/closed_household.dart'; import 'package:collection/collection.dart'; import 'package:digit_components/utils/app_logger.dart'; import 'package:digit_data_model/data_model.dart'; diff --git a/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart b/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart index c613b479f..a4acf7a33 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart @@ -214,7 +214,8 @@ class _BoundarySelectionPageState .getSelectedLocale), code: AppSharedPreferences() .getSelectedLocale!)); - Future.delayed(const Duration(milliseconds: 10), () { + Future.delayed(const Duration(milliseconds: 10), + () { downSyncState.maybeWhen( orElse: () => false, loading: (isPop) => { @@ -224,7 +225,7 @@ class _BoundarySelectionPageState context, rootNavigator: true, ).popUntil( - (route) => route is! PopupRoute, + (route) => route is! PopupRoute, ), }, DigitSyncDialog.show( @@ -238,28 +239,28 @@ class _BoundarySelectionPageState ), }, getBatchSize: ( - batchSize, - projectId, - boundaryCode, - pendingSyncCount, - boundaryName, - ) => + batchSize, + projectId, + boundaryCode, + pendingSyncCount, + boundaryName, + ) => context .read() .add( - DownSyncCheckTotalCountEvent( - projectId: context.projectId, - boundaryCode: selectedBoundary! - .value!.code - .toString(), - pendingSyncCount: - pendingSyncCount, - boundaryName: selectedBoundary - .value!.name - .toString(), - batchSize: batchSize, - ), - ), + DownSyncCheckTotalCountEvent( + projectId: context.projectId, + boundaryCode: selectedBoundary! + .value!.code + .toString(), + pendingSyncCount: + pendingSyncCount, + boundaryName: selectedBoundary + .value!.name + .toString(), + batchSize: batchSize, + ), + ), pendingSync: () => showDownloadDialog( context, model: DownloadBeneficiary( @@ -274,14 +275,15 @@ class _BoundarySelectionPageState i18.syncDialog.pendingSyncContent, ), primaryButtonLabel: - localizations.translate( + localizations.translate( i18.acknowledgementSuccess.goToHome, ), - boundaryName: selectedBoundary.value!.name + boundaryName: selectedBoundary + .value!.name .toString(), ), dialogType: - DigitProgressDialogType.pendingSync, + DigitProgressDialogType.pendingSync, isPop: true, ), dataFound: (initialServerCount, batchSize) { @@ -291,43 +293,45 @@ class _BoundarySelectionPageState model: DownloadBeneficiary( title: localizations.translate( initialServerCount > 0 - ? i18.beneficiaryDetails.dataFound + ? i18.beneficiaryDetails + .dataFound : i18.beneficiaryDetails - .noDataFound, + .noDataFound, ), appConfiguartion: appConfiguration, projectId: context.projectId, - boundary: selectedBoundary!.value!.code + boundary: selectedBoundary! + .value!.code .toString(), batchSize: batchSize, totalCount: initialServerCount, content: localizations.translate( initialServerCount > 0 ? i18.beneficiaryDetails - .dataFoundContent + .dataFoundContent : i18.beneficiaryDetails - .noDataFoundContent, + .noDataFoundContent, ), primaryButtonLabel: - localizations.translate( + localizations.translate( initialServerCount > 0 ? i18.common.coreCommonDownload : i18.common.coreCommonGoback, ), secondaryButtonLabel: - localizations.translate( + localizations.translate( initialServerCount > 0 ? i18.beneficiaryDetails - .proceedWithoutDownloading + .proceedWithoutDownloading : i18.acknowledgementSuccess - .goToHome, + .goToHome, ), boundaryName: selectedBoundary .value!.name .toString(), ), dialogType: - DigitProgressDialogType.dataFound, + DigitProgressDialogType.dataFound, isPop: true, ); }, @@ -359,11 +363,11 @@ class _BoundarySelectionPageState .value!.name .toString(), ), - dialogType: - DigitProgressDialogType.inProgress, + dialogType: DigitProgressDialogType + .inProgress, isPop: true, downloadProgressController: - downloadProgress, + downloadProgress, ); } }, @@ -380,7 +384,8 @@ class _BoundarySelectionPageState )} ${result.boundaryName}\n${localizations.translate( i18.beneficiaryDetails.status, )} ${localizations.translate( - i18.beneficiaryDetails.downloadcompleted, + i18.beneficiaryDetails + .downloadcompleted, )}\n${localizations.translate( i18.beneficiaryDetails.downloadedon, )} $date\n${localizations.translate( @@ -390,7 +395,7 @@ class _BoundarySelectionPageState context, rootNavigator: true, ).popUntil( - (route) => route is! PopupRoute, + (route) => route is! PopupRoute, ); context.router .popAndPush((AcknowledgementRoute( @@ -431,52 +436,56 @@ class _BoundarySelectionPageState boundary: selectedBoundary!.value!.code .toString(), content: localizations.translate( - i18.beneficiaryDetails.dataFoundContent, + i18.beneficiaryDetails + .dataFoundContent, ), primaryButtonLabel: - localizations.translate( + localizations.translate( i18.syncDialog.retryButtonLabel, ), secondaryButtonLabel: - localizations.translate( + localizations.translate( i18.beneficiaryDetails .proceedWithoutDownloading, ), - boundaryName: selectedBoundary.value!.name + boundaryName: selectedBoundary + .value!.name .toString(), ), - dialogType: DigitProgressDialogType.failed, + dialogType: + DigitProgressDialogType.failed, isPop: true, ), totalCountCheckFailed: () => showDownloadDialog( - context, - model: DownloadBeneficiary( - title: localizations.translate( - i18.beneficiaryDetails - .unableToCheckDataInServer, - ), - appConfiguartion: appConfiguration, - projectId: context.projectId, - pendingSyncCount: pendingSyncCount, - boundary: selectedBoundary!.value!.code - .toString(), - primaryButtonLabel: + context, + model: DownloadBeneficiary( + title: localizations.translate( + i18.beneficiaryDetails + .unableToCheckDataInServer, + ), + appConfiguartion: appConfiguration, + projectId: context.projectId, + pendingSyncCount: pendingSyncCount, + boundary: selectedBoundary!.value!.code + .toString(), + primaryButtonLabel: localizations.translate( - i18.syncDialog.retryButtonLabel, - ), - secondaryButtonLabel: + i18.syncDialog.retryButtonLabel, + ), + secondaryButtonLabel: localizations.translate( - i18.beneficiaryDetails - .proceedWithoutDownloading, - ), - boundaryName: selectedBoundary.value!.name - .toString(), - ), - dialogType: - DigitProgressDialogType.checkFailed, - isPop: true, + i18.beneficiaryDetails + .proceedWithoutDownloading, ), + boundaryName: selectedBoundary + .value!.name + .toString(), + ), + dialogType: + DigitProgressDialogType.checkFailed, + isPop: true, + ), insufficientStorage: () { clickedStatus.value = false; showDownloadDialog( @@ -491,10 +500,11 @@ class _BoundarySelectionPageState .insufficientStorageContent), projectId: context.projectId, appConfiguartion: appConfiguration, - boundary: selectedBoundary!.value!.code + boundary: selectedBoundary! + .value!.code .toString(), primaryButtonLabel: - localizations.translate( + localizations.translate( i18.common.coreCommonOk, ), boundaryName: selectedBoundary @@ -508,7 +518,6 @@ class _BoundarySelectionPageState }, ); }); - }, child: DigitCard( margin: const EdgeInsets.fromLTRB( diff --git a/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart b/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart index a3ffbb095..8c833ffed 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart @@ -8,6 +8,8 @@ import 'package:package_info_plus/package_info_plus.dart'; import '../blocs/app_initialization/app_initialization.dart'; import '../blocs/localization/app_localization.dart'; import '../blocs/localization/localization.dart'; +import '../data/local_store/app_shared_preferences.dart'; +import '../data/local_store/no_sql/schema/app_configuration.dart'; import '../router/app_router.dart'; import '../utils/constants.dart'; import '../utils/i18_key_constants.dart' as i18; @@ -24,6 +26,12 @@ class LanguageSelectionPage extends StatefulWidget { class _LanguageSelectionPageState extends State { bool isDialogVisible = false; + @override + void dispose() { + isDialogVisible = false; + super.dispose(); + } + @override Widget build(BuildContext context) { final theme = Theme.of(context); @@ -55,11 +63,46 @@ class _LanguageSelectionPageState extends State { ); } else if (!state.loading && isDialogVisible) { isDialogVisible = false; - DigitComponentsUtils().hideLocalizationLoadingDialog(context); + DigitComponentsUtils() + .hideLocalizationLoadingDialog(context); + } + if (!state.loading && + !isDialogVisible && + state.retryModule != null) { + DigitSyncDialog.show( + context, + type: DigitSyncDialogType.failed, + label: i18.common.failedToFetch, + primaryAction: DigitDialogActions( + label: AppLocalizations.of(context).translate( + i18.common.coreCommonRetry, + ), + action: (ctx) { + context.read().add( + LocalizationEvent.onLoadLocalization( + module: state.retryModule.toString(), + tenantId: appConfig.tenantId ?? "default", + locale: AppSharedPreferences() + .getSelectedLocale + .toString(), + path: Constants.localizationApiPath)); + Navigator.pop(ctx); + }, + ), + secondaryAction: DigitDialogActions( + label: AppLocalizations.of(context).translate( + i18.common.corecommonclose, + ), + action: (ctx) => Navigator.pop(ctx), + ), + ); } }, builder: (context, localizationState) { - if (localizationState.loading && !isDialogVisible) { + if (localizationState.loading && + !isDialogVisible && + mounted && + ModalRoute.of(context)?.isCurrent == true) { WidgetsBinding.instance.addPostFrameCallback((_) { isDialogVisible = true; DigitComponentsUtils().showLocationCapturingDialog( @@ -72,52 +115,39 @@ class _LanguageSelectionPageState extends State { return localizationModulesList != null ? DigitLanguageCard( - digitRowCardItems: languages.map((e) { - var index = languages.indexOf(e); - - return DigitRowCardModel( - label: e.label, - value: e.value, - isSelected: getSelectedLanguage( - state, - index, - ), - ); - }).toList(), - onLanguageChange: (value) async { - final info = await PackageInfo.fromPlatform(); - Constants().initialize(info.version); - int index = languages.indexWhere( - (ele) => - ele.value.toString() == - value.value.toString(), - ); - - context.read().add( - LocalizationEvent.onLoadLocalization( - module: localizationModulesList - .map((e) => e.name.toString()) - .join(',') - .toString(), - tenantId: appConfig.tenantId ?? "default", - locale: value.value.toString(), - path: Constants.localizationApiPath, - ), - ); + digitRowCardItems: languages.map((e) { + var index = languages.indexOf(e); - context.read().add( - OnUpdateLocalizationIndexEvent( - index: index, - code: value.value.toString(), - ), - ); - }, - onLanguageSubmit: () => context.router.push( - LoginRoute(), - ), - languageSubmitLabel: AppLocalizations.of(context) - .translate(i18.common.coreCommonContinue), - ) + return DigitRowCardModel( + label: e.label, + value: e.value, + isSelected: getSelectedLanguage( + state, + index, + ), + ); + }).toList(), + onLanguageChange: (value) async { + final info = await PackageInfo.fromPlatform(); + Constants().initialize(info.version); + int index = languages.indexWhere( + (ele) => + ele.value.toString() == + value.value.toString(), + ); + triggerLanguageChange( + index, + localizationModulesList, + appConfig.tenantId ?? "default", + value.value.toString(), + ); + }, + onLanguageSubmit: () => context.router.push( + LoginRoute(), + ), + languageSubmitLabel: AppLocalizations.of(context) + .translate(i18.common.coreCommonContinue), + ) : const Offstage(); }, ); @@ -128,4 +158,31 @@ class _LanguageSelectionPageState extends State { ), ); } + + void triggerLanguageChange( + int index, + List localizationModulesList, + String tenantId, + String locale, + ) { + setState(() {}); + context.read().add( + LocalizationEvent.onLoadLocalization( + module: localizationModulesList + .map((e) => e.name.toString()) + .join(',') + .toString(), + tenantId: tenantId, + locale: locale, + path: Constants.localizationApiPath, + ), + ); + + context.read().add( + OnUpdateLocalizationIndexEvent( + index: index, + code: locale, + ), + ); + } } diff --git a/apps/health_campaign_field_worker_app/lib/pages/project_facility_selection.dart b/apps/health_campaign_field_worker_app/lib/pages/project_facility_selection.dart index f977f1741..cab08f048 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/project_facility_selection.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/project_facility_selection.dart @@ -5,7 +5,6 @@ import 'package:flutter/material.dart'; import 'package:reactive_forms/reactive_forms.dart'; import '../blocs/localization/app_localization.dart'; -import '../models/data_model.dart'; import '../router/app_router.dart'; import '../utils/i18_key_constants.dart' as i18; import '../widgets/header/back_navigation_help_header.dart'; diff --git a/apps/health_campaign_field_worker_app/lib/utils/constants.dart b/apps/health_campaign_field_worker_app/lib/utils/constants.dart index 8c6429be1..3d05740b3 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/constants.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/constants.dart @@ -80,6 +80,8 @@ class Constants { static const String checklistViewDateFormat = 'dd/MM/yyyy hh:mm a'; static const String healthFacilityChecklistPrefix = 'HF_RF'; + static const String boundaryLocalizationPath = 'rainmaker-boundary-admin'; + static List getLocalRepositories( LocalSqlDataStore sql, Isar isar, diff --git a/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart b/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart index a0e808eba..18305c911 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart @@ -62,6 +62,10 @@ class Common { String get corecommonclose => 'CORE_COMMON_CLOSE'; + String get coreCommonRetry => 'CORE_COMMON_RETRY'; + + String get failedToFetch => 'CORE_COMMON_FAILED_TO_FETCH'; + String get coreCommonOk => 'CORE_COMMON_OK'; String get coreCommonNA => 'CORE_COMMON_NA'; diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 175822cd2..7ae4bdb06 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -499,11 +499,10 @@ packages: digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: e1ea907e9cb7d521341325ac1b1b98fad8bd5e5ca1bab7f7c18ed02ccd2f2c2b - url: "https://pub.dev" - source: hosted - version: "1.0.3" + path: "../../packages/digit_data_model" + relative: true + source: path + version: "1.0.4" digit_dss: dependency: "direct main" description: @@ -1541,10 +1540,9 @@ packages: registration_delivery: dependency: "direct main" description: - name: registration_delivery - sha256: d63c9ea4fe5a5eedb9bfe635c5d84f8c88a43c2b85acc4701e6faf60f2b29323 - url: "https://pub.dev" - source: hosted + path: "../../packages/registration_delivery" + relative: true + source: path version: "1.0.3" remove_emoji_input_formatter: dependency: transitive diff --git a/packages/digit_data_model/CHANGELOG.md b/packages/digit_data_model/CHANGELOG.md index a27de86e0..b7dde2faa 100644 --- a/packages/digit_data_model/CHANGELOG.md +++ b/packages/digit_data_model/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.0.4-dev.3 + +* Updated oplog transactions to synchronous - fix for write transaction lock +* Same change in 1.0.3-hotfix, 1.0.4-dev.3 + ## 1.0.3 * Added localization table diff --git a/packages/digit_data_model/lib/data/repositories/oplog/oplog.dart b/packages/digit_data_model/lib/data/repositories/oplog/oplog.dart index 03d2d0124..3d4349c8e 100644 --- a/packages/digit_data_model/lib/data/repositories/oplog/oplog.dart +++ b/packages/digit_data_model/lib/data/repositories/oplog/oplog.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:collection/collection.dart'; +import 'package:flutter/foundation.dart'; import 'package:isar/isar.dart'; import '../../../data_model.dart'; @@ -15,7 +16,7 @@ abstract class OpLogManager { DataModelType type, { required String createdBy, }) async { - final createOpLogs = await isar.opLogs + final createOpLogs = isar.opLogs .filter() .entityTypeEqualTo(type) .operationEqualTo(DataOperation.create) @@ -23,9 +24,9 @@ abstract class OpLogManager { .syncedUpEqualTo(false) .syncedDownEqualTo(false) .createdByEqualTo(createdBy) - .findAll(); + .findAllSync(); - final singleCreateOpLogs = await isar.opLogs + final singleCreateOpLogs = isar.opLogs .filter() .entityTypeEqualTo(type) .operationEqualTo(DataOperation.singleCreate) @@ -33,9 +34,9 @@ abstract class OpLogManager { .syncedUpEqualTo(false) .syncedDownEqualTo(false) .createdByEqualTo(createdBy) - .findAll(); + .findAllSync(); - final updateOpLogs = await isar.opLogs + final updateOpLogs = isar.opLogs .filter() .entityTypeEqualTo(type) .operationEqualTo(DataOperation.update) @@ -44,17 +45,17 @@ abstract class OpLogManager { .syncedUpEqualTo(false) .syncedDownEqualTo(false) .createdByEqualTo(createdBy) - .findAll(); + .findAllSync(); - final errorOpLogs = await isar.opLogs + final errorOpLogs = isar.opLogs .filter() .entityTypeEqualTo(type) .syncedDownEqualTo(false) .nonRecoverableErrorEqualTo(true) .createdByEqualTo(createdBy) - .findAll(); + .findAllSync(); - final deleteOpLogs = await isar.opLogs + final deleteOpLogs = isar.opLogs .filter() .entityTypeEqualTo(type) .operationEqualTo(DataOperation.delete) @@ -62,9 +63,9 @@ abstract class OpLogManager { .syncedUpEqualTo(false) .syncedDownEqualTo(false) .createdByEqualTo(createdBy) - .findAll(); + .findAllSync(); - final nonRecoverableOpLogs = await isar.opLogs + final nonRecoverableOpLogs = isar.opLogs .filter() .entityTypeEqualTo(type) .syncedUpEqualTo(true) @@ -74,7 +75,7 @@ abstract class OpLogManager { 5 - 1, ) .createdByEqualTo(createdBy) - .findAll(); + .findAllSync(); var entries = [ createOpLogs, @@ -108,13 +109,13 @@ abstract class OpLogManager { DataModelType type, { required String createdBy, }) async { - var oplogs = await isar.opLogs + var oplogs = isar.opLogs .filter() .syncedUpEqualTo(true) .syncDownRetryCountLessThan(5) .syncedDownEqualTo(false) .entityTypeEqualTo(type) - .findAll(); + .findAllSync(); oplogs = oplogs .sortedBy((element) => element.createdAt) @@ -130,16 +131,23 @@ abstract class OpLogManager { } Future put(OpLogEntry entry) async { - await isar.writeTxn(() async { - await isar.opLogs.put(entry - .copyWith( - clientReferenceId: getClientReferenceId(entry.entity), - serverGeneratedId: getServerGeneratedId(entry.entity), - rowVersion: getRowVersion(entry.entity), - nonRecoverableError: getNonRecoverableError(entry.entity), - ) - .oplog); - }); + try { + isar.writeTxnSync(() { + isar.opLogs.putSync(entry + .copyWith( + clientReferenceId: getClientReferenceId(entry.entity), + serverGeneratedId: getServerGeneratedId(entry.entity), + rowVersion: getRowVersion(entry.entity), + nonRecoverableError: getNonRecoverableError(entry.entity), + ) + .oplog); + }); + } catch (e) { + if (kDebugMode) { + print('error in isar ${e}'); + } + rethrow; + } return; } @@ -154,8 +162,8 @@ abstract class OpLogManager { final oplog = await isar.opLogs.filter().idEqualTo(id).findFirst(); if (oplog == null) return; final OpLogEntry fetchedEntry = OpLogEntry.fromOpLog(oplog); - await isar.writeTxn(() async { - await isar.opLogs.put(fetchedEntry + isar.writeTxnSync(() { + isar.opLogs.putSync(fetchedEntry .copyWith( syncedUp: true, syncedDown: true, @@ -207,10 +215,10 @@ abstract class OpLogManager { Future updateServerGeneratedIds({ required UpdateServerGeneratedIdModel model, }) async { - final opLogs = await isar.opLogs + final opLogs = isar.opLogs .filter() .clientReferenceIdEqualTo(model.clientReferenceId) - .findAll(); + .findAllSync(); for (final oplog in opLogs .where( @@ -235,8 +243,8 @@ abstract class OpLogManager { final updatedOplog = updatedEntry.oplog; - await isar.writeTxn(() async { - await isar.opLogs.put(updatedOplog); + isar.writeTxnSync(() { + isar.opLogs.putSync(updatedOplog); }); } @@ -247,11 +255,11 @@ abstract class OpLogManager { String clientReferenceId, DataOperation operation, ) async { - final oplog = await isar.opLogs + final oplog = isar.opLogs .filter() .operationEqualTo(operation) .clientReferenceIdEqualTo(clientReferenceId) - .findAll(); + .findAllSync(); if (oplog.isEmpty) { throw AppException('OpLog not found for id: $clientReferenceId'); @@ -263,10 +271,10 @@ abstract class OpLogManager { Future> getSyncDownRetryList( String clientReferenceId, ) async { - final oplogs = await isar.opLogs + final oplogs = isar.opLogs .filter() .clientReferenceIdEqualTo(clientReferenceId) - .findAll(); + .findAllSync(); return oplogs; } @@ -274,10 +282,10 @@ abstract class OpLogManager { Future updateSyncDownRetry( String clientReferenceId, ) async { - final oplogs = await isar.opLogs + final oplogs = isar.opLogs .filter() .clientReferenceIdEqualTo(clientReferenceId) - .findAll(); + .findAllSync(); if (oplogs.isEmpty) { throw AppException('OpLog not found for id: $clientReferenceId'); @@ -295,8 +303,8 @@ abstract class OpLogManager { updatedEntry = updatedEntry.copyWith(nonRecoverableError: true); } - await isar.writeTxn(() async { - await isar.opLogs.put(updatedEntry.oplog); + isar.writeTxnSync(() { + isar.opLogs.putSync(updatedEntry.oplog); }); } diff --git a/packages/digit_data_model/pubspec.yaml b/packages/digit_data_model/pubspec.yaml index 2b3817937..33cc2ddbe 100644 --- a/packages/digit_data_model/pubspec.yaml +++ b/packages/digit_data_model/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_data_model description: The digit_data_model package is a data modeling library. It defines various classes, enums, and functions. -version: 1.0.3 +version: 1.0.4-dev.3 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_data_model repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/digit_dss/lib/data/remote/dashboard.dart b/packages/digit_dss/lib/data/remote/dashboard.dart index 1bde2078e..f601d6037 100644 --- a/packages/digit_dss/lib/data/remote/dashboard.dart +++ b/packages/digit_dss/lib/data/remote/dashboard.dart @@ -39,8 +39,8 @@ class DashboardRemoteRepository { if (dashboardResponse.data != null) { // Write transaction to delete existing data and insert new data - await isar.writeTxn(() async { - await isar.dashboardResponses + isar.writeTxnSync(() { + isar.dashboardResponses .where() .filter() .projectIdEqualTo(projectId) @@ -94,8 +94,8 @@ class DashboardRemoteRepository { chart.data = dataPlots; // Set the data plots // Write transaction to insert the new chart data - return await isar.writeTxn(() async { - await isar.dashboardResponses.put(chart); + return isar.writeTxnSync(() { + isar.dashboardResponses.putSync(chart); }); } } on DioException catch (e) { @@ -145,8 +145,8 @@ class DashboardRemoteRepository { return dssChart; }).toList(); - await isar.writeTxn(() async { - await isar.dashboardConfigSchemas.put(dashboardConfig); + isar.writeTxnSync(() { + isar.dashboardConfigSchemas.putSync(dashboardConfig); }); } } diff --git a/packages/digit_dss/pubspec.yaml b/packages/digit_dss/pubspec.yaml index b394149b6..2ead774a0 100644 --- a/packages/digit_dss/pubspec.yaml +++ b/packages/digit_dss/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_dss description: "DSS Dashboard for campaign management" -version: 1.0.0 +version: 1.0.1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/develop/packages/digit_dss repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/digit_scanner/example/pubspec.lock b/packages/digit_scanner/example/pubspec.lock index f3920bc04..dea8707d4 100644 --- a/packages/digit_scanner/example/pubspec.lock +++ b/packages/digit_scanner/example/pubspec.lock @@ -309,17 +309,17 @@ packages: dependency: transitive description: name: digit_components - sha256: "53ee8c0a7c992c0e8d1c9c867b6cf1d52e1728200f4b4436943a5d6c5e4984c3" + sha256: "01320d4c72829045e789d1a56e23ff2bd85dad6a1831d27bd507a1acaceae17e" url: "https://pub.dev" source: hosted - version: "1.0.0+2" + version: "1.0.1" digit_scanner: dependency: "direct main" description: path: ".." relative: true source: path - version: "1.0.3-dev.1" + version: "1.0.3" easy_stepper: dependency: transitive description: From 6b80b8f9f1eff89917a6c03d639ad80529ced4cc Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Tue, 27 Aug 2024 16:29:55 +0530 Subject: [PATCH 079/241] Impel changes - background-services, beneficiary_checklist (#548) * Update closed_household_details.dart (#482) * Fixed pagination refresh issue (#481) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments --------- Co-authored-by: rachana-egov * implemented count for filter search, added todo for combination search count * Fixed count TODO: search with task status filter * Fixed search with task status filter Removed delay in delivery_summary_page.dart * added code comments * HCMPRE-165 issues (#484) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments * HCMPRE-162:: Reload issue fix for closed household and not registered * HCMPRE-165: issues fixes * updated reasons for refusals --------- Co-authored-by: rachana-egov Co-authored-by: Ramkrishna-egov * Updated publock * Added a check to avoid multiple leftJoin for projectBeneficiary - fix for multiple left join error * created new table for localization TODO: separate packages localization delegates to individual package and move the localization model to data_model package for common usage Delete localization related isar files once tested * init Boundary code wise localization.dart * create localization local repo modified module separation from query to exclude and include specified module * modified module exclude in boundary page * modified localization call for boundary selection bug where first value is localized in dropdown * removed un-required localization bloc calls * updated index value to selected language on home * Uploaded pre release for inventory-management and digit-dss * Updated delivery enums for Not delivered status * Updated status model in task to taskStatus * Updated registration delivery package * Reverted Task Model status key change * Update pubspec with latest version of packages * Summary page Type of resource locale key updated * Resolved comments * Resolved comments and unused variables * Resolved comments and unused variables * Updated version * Updated individual_global_search.dart for search * added data segration * check to enable edit delivery * added project filter * Registration delivery- Attendance management fixes (#497) * Removed captured location dialog on attendance submit * Removed stpper if deliveries length is greater than 1 * Updated digit_components and digit_data_model packages in attendance management * Updated digit_components and digit_data_model packages in attendance management * Localization loader and dialog localization fix (#505) * added dialog till localization is not loaded * fixed localization not coming issue * added a util funtion to show language loading --------- Co-authored-by: rachana-egov * updated search added project id in beneficiary search removed commented code * User uuids filter fixes for attendees local search in an attendance register (#512) * User uuids filters fixes for attendees search in a register * Removed default dashboard card from home * Sync fix --------- Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> * Added Task address mapping on refused delivery (#514) * replace and push homepage from boundary page sync dialog * updated register search query to exclude attendee and staff in limit query updated attendance and registration_delivery package * registration_delivery package update * * Added error toast for network failure (#525) * No result card added if no charts available * Updated end date for dss charts to 23:59 instead of 11:59 (#527) * task create fix - removed condition check of resources during create updated changelog of registration, closed, digit_data_model, inventory, registration_delivery --dry-run fixes * Updated stable packages for scanner, attendance and dss (#528) * updated packages to latest version digit_components version update * added fallback ui dialog when localization call fails. * added localization code * merge from dev * fix for isar transaction lock issue * moved boundary localization path to constants. Updated dialog in language_selection.dart page * isar lock fix * pulled changes from impel related to background service added missing audit details and client audit details for beneficiary_checklist.dart --------- Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: rachana-egov Co-authored-by: Ramkrishna-egov Co-authored-by: naveen-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> --- .../project_beneficiaries_downsync.dart | 1 + .../lib/pages/home.dart | 2 +- .../lib/pages/login.dart | 4 +- .../lib/utils/background_service.dart | 137 ++++++++------- .../lib/utils/utils.dart | 9 +- .../beneficiary/beneficiary_checklist.dart | 166 ++++++++++-------- 6 files changed, 176 insertions(+), 143 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart b/apps/health_campaign_field_worker_app/lib/blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart index 757804b09..a443250b1 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart @@ -140,6 +140,7 @@ class BeneficiaryDownSyncBloc event.batchSize, )); } else { + await LocalSecureStore.instance.setManualSyncTrigger(false); emit(const BeneficiaryDownSyncState.resetState()); emit(const BeneficiaryDownSyncState.totalCountCheckFailed()); } diff --git a/apps/health_campaign_field_worker_app/lib/pages/home.dart b/apps/health_campaign_field_worker_app/lib/pages/home.dart index ce8e91436..2e6ff96b8 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/home.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/home.dart @@ -189,7 +189,7 @@ class _HomePageState extends LocalizedState { state.maybeWhen( orElse: () => null, syncInProgress: () async { - await localSecureStore.setManualSyncTrigger(false); + await localSecureStore.setManualSyncTrigger(true); if (context.mounted) { DigitSyncDialog.show( context, diff --git a/apps/health_campaign_field_worker_app/lib/pages/login.dart b/apps/health_campaign_field_worker_app/lib/pages/login.dart index 37ddf9c91..703eee68c 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/login.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/login.dart @@ -225,12 +225,12 @@ class _LoginPageState extends LocalizedState { FormGroup buildForm() => fb.group({ _userId: FormControl( - value: '', + value: 'QADistributor', validators: [Validators.required], ), _password: FormControl( validators: [Validators.required], - value: '', + value: 'eGov@1234', ), _privacyCheck: FormControl( validators: [Validators.requiredTrue], diff --git a/apps/health_campaign_field_worker_app/lib/utils/background_service.dart b/apps/health_campaign_field_worker_app/lib/utils/background_service.dart index 9d718f82e..6e2a08c2d 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/background_service.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/background_service.dart @@ -127,6 +127,9 @@ void onStart(ServiceInstance service) async { makePeriodicTimer( Duration(seconds: interval), (timer) async { + service.invoke('serviceRunning', { + "enablesManualSync": false, + }); var battery = Battery(); final int batteryPercent = await battery.batteryLevel; if (batteryPercent <= @@ -137,85 +140,93 @@ void onStart(ServiceInstance service) async { final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); - if (frequencyCount != null) { + final isManualSyncRunning = + await LocalSecureStore.instance.isManualSyncRunning; + if (frequencyCount != null && !isManualSyncRunning) { final serviceRegistryList = await _isar.serviceRegistrys.where().findAll(); if (serviceRegistryList.isNotEmpty) { - final bandwidthPath = serviceRegistryList - .firstWhere((element) => element.service == 'BANDWIDTH-CHECK') - .actions - .first - .path; + final bandwidthService = serviceRegistryList.firstWhereOrNull( + (element) => element.service == 'BANDWIDTH-CHECK', + ); + if (bandwidthService != null) { + final bandwidthPath = bandwidthService.actions.first.path; - List speedArray = []; - for (var i = 0; i < frequencyCount; i++) { - try { - final double speed = await BandwidthCheckRepository( - _dio, - bandwidthPath: bandwidthPath, - ).pingBandwidthCheck(bandWidthCheckModel: null); - speedArray.add(speed); - } catch (e) { - service.invoke('serviceRunning', { - "enablesManualSync": true, - }); - service.stopSelf(); - break; + List speedArray = []; + for (var i = 0; i < frequencyCount; i++) { + try { + final double speed = await BandwidthCheckRepository( + _dio, + bandwidthPath: bandwidthPath, + ).pingBandwidthCheck(bandWidthCheckModel: null); + speedArray.add(speed); + } catch (e) { + service.invoke('serviceRunning', { + "enablesManualSync": true, + }); + service.stopSelf(); + break; + } } - } - double sum = speedArray.fold(0, (p, c) => p + c); + double sum = speedArray.fold(0, (p, c) => p + c); - int configuredBatchSize = getBatchSizeToBandwidth( - sum / speedArray.length, - appConfiguration, - ); - final BandwidthModel bandwidthModel = BandwidthModel.fromJson({ - 'userId': userRequestModel?.uuid, - 'batchSize': configuredBatchSize, - }); - flutterLocalNotificationsPlugin.show( - 888, - 'Auto Sync', - 'Speed : ${speedArray.isNotEmpty && speedArray.firstOrNull != null ? double.tryParse(speedArray.first.toString())?.toStringAsFixed(2) ?? '0' : '0'}Mb/ps - BatchSize : $configuredBatchSize', - const NotificationDetails( - android: AndroidNotificationDetails( - "my_foreground", - 'AUTO SYNC', - icon: 'ic_bg_service_small', - ongoing: true, + int configuredBatchSize = getBatchSizeToBandwidth( + sum / speedArray.length, + appConfiguration, + ); + final BandwidthModel bandwidthModel = BandwidthModel.fromJson({ + 'userId': userRequestModel?.uuid, + 'batchSize': configuredBatchSize, + }); + flutterLocalNotificationsPlugin.show( + 888, + 'Auto Sync', + 'Speed : ${speedArray.isNotEmpty && speedArray.firstOrNull != null ? double.tryParse(speedArray.first.toString())?.toStringAsFixed(2) ?? '0' : '0'}Mb/ps - BatchSize : $configuredBatchSize', + const NotificationDetails( + android: AndroidNotificationDetails( + "my_foreground", + 'AUTO SYNC', + icon: 'ic_bg_service_small', + ongoing: true, + ), ), - ), - ); - final isSyncCompleted = await const NetworkManager( - configuration: NetworkManagerConfiguration( - persistenceConfig: PersistenceConfiguration.offlineFirst, - ), - ).performSync( - localRepositories: Constants.getLocalRepositories( - _sql, - _isar, - ).toList(), - remoteRepositories: Constants.getRemoteRepositories( - _dio, - getActionMap(serviceRegistryList), - ), - bandwidthModel: bandwidthModel, - service: service, - ); + ); + final isSyncCompleted = await const NetworkManager( + configuration: NetworkManagerConfiguration( + persistenceConfig: PersistenceConfiguration.offlineFirst, + ), + ).performSync( + localRepositories: Constants.getLocalRepositories( + _sql, + _isar, + ).toList(), + remoteRepositories: Constants.getRemoteRepositories( + _dio, + getActionMap(serviceRegistryList), + ), + bandwidthModel: bandwidthModel, + service: service, + ); - i++; - final isAppInActive = - await LocalSecureStore.instance.isAppInActive; + i++; + final isAppInActive = + await LocalSecureStore.instance.isAppInActive; - if (isSyncCompleted && i >= 2 && isAppInActive) { - service.stopSelf(); + if (isSyncCompleted && i >= 2 && isAppInActive) { + service.stopSelf(); + } } } } } + service.invoke('serviceRunning', { + "enablesManualSync": true, + }); }, fireNow: true, ); + } else { + service.stopSelf(); } } diff --git a/apps/health_campaign_field_worker_app/lib/utils/utils.dart b/apps/health_campaign_field_worker_app/lib/utils/utils.dart index 526e26ab1..dfda5e62f 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/utils.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/utils.dart @@ -322,9 +322,12 @@ void showDownloadDialog( secondaryAction: model.secondaryButtonLabel != null ? DigitDialogActions( label: model.secondaryButtonLabel ?? '', - action: (ctx) { - Navigator.of(context, rootNavigator: true).pop(); - context.router.replaceAll([HomeRoute()]); + action: (ctx) async { + await LocalSecureStore.instance.setManualSyncTrigger(false); + if (context.mounted) { + Navigator.of(context, rootNavigator: true).pop(); + context.router.replaceAll([HomeRoute()]); + } }, ) : null, diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart index b70ed802b..16538f7fa 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart @@ -46,13 +46,12 @@ class _BeneficiaryChecklistPageState @override void initState() { - context.read().add( - ServiceChecklistEvent( - value: Random().nextInt(100).toString(), - submitTriggered: true, - ), - ); + ServiceChecklistEvent( + value: Random().nextInt(100).toString(), + submitTriggered: true, + ), + ); super.initState(); } @@ -112,13 +111,13 @@ class _BeneficiaryChecklistPageState submitTriggered = true; context.read().add( - const ServiceChecklistEvent( - value: '', - submitTriggered: true, - ), - ); - final isValid = - checklistFormKey.currentState?.validate(); + const ServiceChecklistEvent( + value: '', + submitTriggered: true, + ), + ); + final isValid = + checklistFormKey.currentState?.validate(); if (!isValid!) { return; } @@ -128,13 +127,12 @@ class _BeneficiaryChecklistPageState for (int i = 0; i < controller.length; i++) { if (itemsAttributes?[i].required == true && - ( (itemsAttributes?[i].dataType == - 'Boolean' && - (controller[i].text == '')) )) { - setState(() { - validFields = false; - validChecklist = false; - }); + ((itemsAttributes?[i].dataType == 'Boolean' && + (controller[i].text == '')))) { + setState(() { + validFields = false; + validChecklist = false; + }); } } @@ -145,58 +143,77 @@ class _BeneficiaryChecklistPageState for (int i = 0; i < controller.length; i++) { final attribute = initialAttributes; attributes.add(ServiceAttributesModel( - attributeCode: '${attribute?[i].code}', - dataType: attribute?[i].dataType, - clientReferenceId: IdGen.i.identifier, - referenceId: widget.beneficiaryClientRefId, - value: attribute?[i].dataType != - 'SingleValueList' - ? controller[i] - .text - .toString() - .trim() - .isNotEmpty - ? controller[i].text.toString() - : '' - : visibleChecklistIndexes.contains(i) - ? controller[i].text.toString() - : i18.checklist.notSelectedKey, - rowVersion: 1, - tenantId: attribute?[i].tenantId, - additionalDetails: null)); + attributeCode: '${attribute?[i].code}', + dataType: attribute?[i].dataType, + clientReferenceId: IdGen.i.identifier, + referenceId: widget.beneficiaryClientRefId, + value: attribute?[i].dataType != 'SingleValueList' + ? controller[i] + .text + .toString() + .trim() + .isNotEmpty + ? controller[i].text.toString() + : '' + : visibleChecklistIndexes.contains(i) + ? controller[i].text.toString() + : i18.checklist.notSelectedKey, + rowVersion: 1, + tenantId: attribute?[i].tenantId, + additionalDetails: null, + )); } context.read().add( - ServiceCreateEvent( - serviceModel: ServiceModel( - createdAt: DigitDateUtils - .getDateFromTimestamp( - DateTime.now() - .toLocal() - .millisecondsSinceEpoch, - dateFormat: Constants.checklistViewDateFormat, + ServiceCreateEvent( + serviceModel: ServiceModel( + createdAt: + DigitDateUtils.getDateFromTimestamp( + DateTime.now() + .toLocal() + .millisecondsSinceEpoch, + dateFormat: + Constants.checklistViewDateFormat, + ), + tenantId: selectedServiceDefinition!.tenantId, + clientId: + widget.beneficiaryClientRefId.toString(), + serviceDefId: selectedServiceDefinition?.id, + attributes: attributes, + rowVersion: 1, + accountId: + RegistrationDeliverySingleton().projectId, + additionalDetails: + RegistrationDeliverySingleton() + .boundary + ?.code, + auditDetails: AuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: + DateTime.now().millisecondsSinceEpoch, + ), + clientAuditDetails: ClientAuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: + DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid!, + lastModifiedTime: + DateTime.now().millisecondsSinceEpoch, + ), + ), ), - tenantId: selectedServiceDefinition! - .tenantId, - clientId: widget.beneficiaryClientRefId - .toString(), - serviceDefId: selectedServiceDefinition?.id, - attributes: attributes, - rowVersion: 1, - accountId: RegistrationDeliverySingleton() - .projectId, - additionalDetails: - RegistrationDeliverySingleton() - .boundary - ?.code, - ), - ), - ); + ); DigitDialog.show( context, options: DigitDialogOptions( - titleText: localizations.translate(i18.deliverIntervention.beneficiaryChecklistDialogTitle), + titleText: localizations.translate(i18 + .deliverIntervention + .beneficiaryChecklistDialogTitle), titlePadding: const EdgeInsets.only(top: kPadding), barrierDismissible: false, enableRecordPast: true, @@ -206,7 +223,6 @@ class _BeneficiaryChecklistPageState kPadding, 0, ), - contentPadding: EdgeInsets.zero, primaryAction: DigitDialogActions( label: localizations.translate( @@ -232,7 +248,6 @@ class _BeneficiaryChecklistPageState ), ), ); - }, child: Text( localizations.translate(i18.common.coreCommonSubmit), @@ -244,7 +259,6 @@ class _BeneficiaryChecklistPageState key: checklistFormKey, //assigning key to form child: DigitCard( padding: EdgeInsets.zero, - child: Column(children: [ ...initialAttributes!.map(( e, @@ -397,7 +411,6 @@ class _BeneficiaryChecklistPageState )} ${e.required == true ? '*' : ''}', style: theme .textTheme.headlineSmall, - ), ], ), @@ -419,8 +432,13 @@ class _BeneficiaryChecklistPageState i18.common.coreCommonNo, ); }, - errorMessage: ( !validFields && - (controller[index].text == '')) ? localizations.translate(i18.common.corecommonRequired) : null, + errorMessage: (!validFields && + (controller[index].text == + '')) + ? localizations.translate(i18 + .common + .corecommonRequired) + : null, initialSelection: controller[index].text == 'true' @@ -446,11 +464,11 @@ class _BeneficiaryChecklistPageState setState(() { controller[index].value = TextEditingValue( - text: curValue.first - .toString(), - ); + text: curValue.first + .toString(), + ); }); - }else{ + } else { controller[index].value = const TextEditingValue( text: '', From fbe1a4ca6687e1e5f40d14b3a0b4ba64876787f1 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Tue, 27 Aug 2024 18:10:36 +0530 Subject: [PATCH 080/241] resolved code rabbit comments (#549) --- .../lib/router/app_router.dart | 4 - .../privacy_notice/privacy_component.dart | 3 - .../privacy_notice_expand_component.dart | 110 ++++++++++++------ .../digit_components/lib/utils/utils.dart | 2 +- 4 files changed, 73 insertions(+), 46 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/router/app_router.dart b/apps/health_campaign_field_worker_app/lib/router/app_router.dart index 6f0420ad8..50382946e 100644 --- a/apps/health_campaign_field_worker_app/lib/router/app_router.dart +++ b/apps/health_campaign_field_worker_app/lib/router/app_router.dart @@ -150,10 +150,6 @@ class AppRouter extends _$AppRouter { page: BeneficiaryDetailsRoute.page, path: 'beneficiary-details', ), - AutoRoute( - page: BeneficiaryChecklistRoute.page, - path: 'beneficiary-checklist', - ), AutoRoute( page: DeliverInterventionRoute.page, path: 'deliver-intervention', diff --git a/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_component.dart b/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_component.dart index e3d921384..e246dc30a 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_component.dart +++ b/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_component.dart @@ -1,10 +1,7 @@ import 'package:digit_components/digit_components.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import '../../blocs/app_initialization/app_initialization.dart'; import '../../data/local_store/no_sql/schema/app_configuration.dart'; -import '../../models/privacy_notice/privacy_notice_model.dart'; import '../localized.dart'; import 'privacy_notice_dialog.dart'; import 'package:reactive_forms/reactive_forms.dart'; diff --git a/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_notice_expand_component.dart b/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_notice_expand_component.dart index fdac8c023..6f3f6006a 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_notice_expand_component.dart +++ b/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_notice_expand_component.dart @@ -1,9 +1,7 @@ import 'package:closed_household/widgets/showcase/showcase_wrappers.dart'; -import 'package:collection/collection.dart'; import 'package:digit_components/theme/colors.dart'; import 'package:flutter/material.dart'; import '../../data/local_store/no_sql/schema/app_configuration.dart'; -import '../../models/privacy_notice/privacy_notice_model.dart'; import '../localized.dart'; class ExpandableSection extends LocalizedStatefulWidget { @@ -27,7 +25,7 @@ class _ExpandableSectionState extends LocalizedState { return Container( decoration: BoxDecoration( color: const DigitColors().alabasterWhite, - borderRadius: const BorderRadius.all(Radius.circular(kPadding/2)), + borderRadius: const BorderRadius.all(Radius.circular(kPadding / 2)), border: Border.all(color: const DigitColors().quillGray, width: 1.0), ), child: Column( @@ -40,21 +38,30 @@ class _ExpandableSectionState extends LocalizedState { }); }, child: Container( - padding: _isExpanded ? const EdgeInsets.only(top: kPadding*2, left: kPadding*2, right: kPadding*2): const EdgeInsets.all(kPadding*2), + padding: _isExpanded + ? const EdgeInsets.only( + top: kPadding * 2, + left: kPadding * 2, + right: kPadding * 2) + : const EdgeInsets.all(kPadding * 2), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ - if(widget.content.header != null) - Flexible( - child: Text( - localizations.translate(widget.content.header!), - maxLines: 3, - style: Theme.of(context).textTheme.bodyLarge?.copyWith(fontWeight: FontWeight.bold), + if (widget.content.header != null) + Flexible( + child: Text( + localizations.translate(widget.content.header!), + maxLines: 3, + style: Theme.of(context) + .textTheme + .bodyLarge + ?.copyWith(fontWeight: FontWeight.bold), + ), ), - ), Icon( - _isExpanded ? Icons.expand_less : Icons.chevron_right, size: kPadding*3, + _isExpanded ? Icons.expand_less : Icons.chevron_right, + size: kPadding * 3, ), ], ), @@ -62,10 +69,11 @@ class _ExpandableSectionState extends LocalizedState { ), if (_isExpanded && widget.content.descriptions != null) Padding( - padding: const EdgeInsets.symmetric(horizontal: kPadding*2), + padding: const EdgeInsets.symmetric(horizontal: kPadding * 2), child: Column( crossAxisAlignment: CrossAxisAlignment.start, - children: widget.content.descriptions!.asMap().entries.map((entry) { + children: + widget.content.descriptions!.asMap().entries.map((entry) { int index = entry.key; Description desc = entry.value; int? stepNumber = desc.type == 'step' ? index + 1 : null; @@ -110,16 +118,22 @@ class _DescriptionWidgetState extends LocalizedState { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - _buildDescriptionText(descriptionText, descriptionType, isBold, widget.stepNumber), + _buildDescriptionText( + descriptionText, descriptionType, isBold, widget.stepNumber), if (hasSubDescriptions) Column( crossAxisAlignment: CrossAxisAlignment.start, - children: widget.description.subDescriptions!.asMap().entries.map((entry) { + children: widget.description.subDescriptions! + .asMap() + .entries + .map((entry) { final index = entry.key; final subDesc = entry.value; return SubDescriptionWidget( subDescription: subDesc, - stepNumber: subDesc.type == 'step' ? index + 1 : null, // Pass step number if type is 'step' + stepNumber: subDesc.type == 'step' + ? index + 1 + : null, // Pass step number if type is 'step' ); }).toList(), ), @@ -128,33 +142,48 @@ class _DescriptionWidgetState extends LocalizedState { ); } - Widget _buildDescriptionText(String descriptionText, String descriptionType, bool isBold, int? stepNumber) { + Widget _buildDescriptionText(String descriptionText, String descriptionType, + bool isBold, int? stepNumber) { if (descriptionType == 'step') { - return Text( - '$stepNumber. ${localizations.translate(descriptionText)}', - textAlign: TextAlign.justify, - style: TextStyle( - fontWeight: isBold ? FontWeight.bold : FontWeight.normal, + return RichText( + text: TextSpan( + text: '$stepNumber. ', + style: TextStyle( + fontWeight: isBold ? FontWeight.bold : FontWeight.normal, + ), + children: [ + TextSpan( + text: localizations.translate(descriptionText), + style: TextStyle( + fontWeight: isBold ? FontWeight.bold : FontWeight.normal, + ), + ), + ], ), + textAlign: TextAlign.justify, ); } else if (descriptionType == 'points') { return Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Column( - children: [ - SizedBox(height: kPadding/4,), - Icon(Icons.circle, size: kPadding), - ], + children: [ + SizedBox( + height: kPadding / 4, + ), + Icon(Icons.circle, size: kPadding), + ], ), const SizedBox(width: kPadding), Expanded( - child: Text( - localizations.translate(descriptionText), - textAlign: TextAlign.justify, - style: TextStyle( - fontWeight: isBold ? FontWeight.bold : FontWeight.normal, + child: RichText( + text: TextSpan( + text: localizations.translate(descriptionText), + style: TextStyle( + fontWeight: isBold ? FontWeight.bold : FontWeight.normal, + ), ), + textAlign: TextAlign.justify, ), ), ], @@ -195,17 +224,22 @@ class _SubDescriptionWidgetState extends LocalizedState { final isSpaceRequired = widget.subDescription.isSpaceRequired ?? false; return Padding( - padding: EdgeInsets.only(left: isSpaceRequired ? kPadding*2 : 0.0, top: kPadding/2, bottom: kPadding/2), + padding: EdgeInsets.only( + left: isSpaceRequired ? kPadding * 2 : 0.0, + top: kPadding / 2, + bottom: kPadding / 2), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - _buildSubDescriptionText(subDescriptionText, subDescriptionType, isBold, widget.stepNumber), + _buildSubDescriptionText(subDescriptionText, subDescriptionType, + isBold, widget.stepNumber), ], ), ); } - Widget _buildSubDescriptionText(String subDescriptionText, String subDescriptionType, bool isBold, int? stepNumber) { + Widget _buildSubDescriptionText(String subDescriptionText, + String subDescriptionType, bool isBold, int? stepNumber) { if (subDescriptionType == 'step') { return Text( '$stepNumber. ${localizations.translate(subDescriptionText)}', @@ -220,7 +254,9 @@ class _SubDescriptionWidgetState extends LocalizedState { children: [ const Column( children: [ - SizedBox(height: kPadding/4,), + SizedBox( + height: kPadding / 4, + ), Icon(Icons.circle, size: kPadding), ], ), @@ -247,5 +283,3 @@ class _SubDescriptionWidgetState extends LocalizedState { } } } - - diff --git a/packages/digit_components/lib/utils/utils.dart b/packages/digit_components/lib/utils/utils.dart index 03e3d4ef5..3fecc38ee 100644 --- a/packages/digit_components/lib/utils/utils.dart +++ b/packages/digit_components/lib/utils/utils.dart @@ -2,7 +2,7 @@ import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:flutter/material.dart'; class DigitComponentsUtils { - void hideLocationDialog(BuildContext context) { + void hideLocationDialog(BuildContext context) { // [TODO: create it as a common method since it has the similar behaviour of hideLocalizationLoadingDialog] Navigator.of( context, rootNavigator: true, From 7e429407294b87a0fdaf769701d012cfca0cd297 Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Wed, 28 Aug 2024 14:00:38 +0530 Subject: [PATCH 081/241] privacy policy config issue fix (#550) Co-authored-by: rachana-egov --- .../lib/models/entities/mdms_master_enums.dart | 2 +- .../lib/models/entities/mdms_master_enums.mapper.dart | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart index b44f040b1..b426355d0 100644 --- a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart +++ b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.dart @@ -49,7 +49,7 @@ enum MasterEnums { firebaseConfig, @MappableValue("SEARCH_HOUSEHOLD_FILTERS") searchHouseHoldFilters, - @MappableValue("PRIVACY_POLICY") + @MappableValue("PrivacyPolicy") privacyPolicy, @MappableValue("dashboardConfig") dashboardConfig, diff --git a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart index 8e12d08c8..870f84eeb 100644 --- a/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart +++ b/apps/health_campaign_field_worker_app/lib/models/entities/mdms_master_enums.mapper.dart @@ -69,7 +69,7 @@ class MasterEnumsMapper extends EnumMapper { return MasterEnums.firebaseConfig; case "SEARCH_HOUSEHOLD_FILTERS": return MasterEnums.searchHouseHoldFilters; - case "PRIVACY_POLICY": + case "PrivacyPolicy": return MasterEnums.privacyPolicy; case "dashboardConfig": return MasterEnums.dashboardConfig; @@ -126,7 +126,7 @@ class MasterEnumsMapper extends EnumMapper { case MasterEnums.searchHouseHoldFilters: return "SEARCH_HOUSEHOLD_FILTERS"; case MasterEnums.privacyPolicy: - return "PRIVACY_POLICY"; + return "PrivacyPolicy"; case MasterEnums.dashboardConfig: return "dashboardConfig"; } From 78dd3f3732daa842fb5124f3ab5baf45a051a576 Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Wed, 28 Aug 2024 15:43:34 +0530 Subject: [PATCH 082/241] fixed text ellipse issue (#553) Co-authored-by: rachana-egov --- .../lib/widgets/beneficiary/resource_beneficiary_card.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart index e3b66c660..aa2a84f2a 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart @@ -57,7 +57,7 @@ class ResourceBeneficiaryCardState fetched: (productVariants) { return SelectionBox( - width: 116, + equalWidthOptions: true, options: productVariants, onSelectionChanged: (selectedOptions) { if (selectedOptions.isNotEmpty) { From 30b639617d261ce11de8460994f2535d553be1f4 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Thu, 29 Aug 2024 16:40:38 +0530 Subject: [PATCH 083/241] updated sync package with dev --- .../lib/pages/authenticated.dart | 4 +- .../lib/pages/boundary_selection.dart | 2 +- .../lib/pages/home.dart | 5 +- .../lib/pages/login.dart | 2 +- .../beneficiary/beneficaries_report.dart | 372 +++--- .../lib/utils/background_service.dart | 4 - .../lib/utils/constants.dart | 1 + .../pubspec.lock | 37 +- .../pubspec.yaml | 11 - packages/attendance_management/pubspec.lock | 30 +- packages/attendance_management/pubspec.yaml | 5 - .../lib/pages/closed_household_details.dart | 4 +- packages/closed_household/pubspec.yaml | 16 +- .../digit_components/example/pubspec.lock | 2 +- packages/digit_components/pubspec.lock | 84 +- packages/digit_dss/pubspec.yaml | 27 +- packages/digit_scanner/example/pubspec.lock | 1141 ----------------- .../example/test/widget_test.dart | 2 +- packages/digit_scanner/pubspec.lock | 90 +- packages/digit_scanner/pubspec.yaml | 4 +- packages/inventory_management/pubspec.lock | 13 +- packages/referral_reconciliation/pubspec.lock | 13 +- packages/referral_reconciliation/pubspec.yaml | 1 - .../individual_details.dart | 8 +- .../lib/utils/constants.dart | 3 + packages/registration_delivery/pubspec.lock | 20 +- .../lib/data/repositories/sync/sync_down.dart | 1 - 27 files changed, 415 insertions(+), 1487 deletions(-) delete mode 100644 packages/digit_scanner/example/pubspec.lock diff --git a/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart b/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart index e54170e5b..d8251023c 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart @@ -114,8 +114,7 @@ class AuthenticatedPageWrapper extends StatelessWidget { final userId = context.loggedInUserUuid; final isar = context.read(); - final bloc = SyncBloc - ( + final bloc = SyncBloc( isar: isar, syncService: SyncService(), ); @@ -189,7 +188,6 @@ class AuthenticatedPageWrapper extends StatelessWidget { downSyncLocalRepository: ctx.read< LocalRepository>(), - networkManager: ctx.read(), householdLocalRepository: ctx.read< LocalRepository>(), diff --git a/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart b/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart index 241364de9..bc4ccd02c 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/boundary_selection.dart @@ -10,6 +10,7 @@ import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; +import 'package:sync_service/blocs/sync/sync.dart'; import '../blocs/app_initialization/app_initialization.dart'; import '../blocs/localization/localization.dart'; @@ -624,7 +625,6 @@ class _BoundarySelectionPageState ), ), ), - ), ], ), ), diff --git a/apps/health_campaign_field_worker_app/lib/pages/home.dart b/apps/health_campaign_field_worker_app/lib/pages/home.dart index c2d786a0e..e786ce267 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/home.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/home.dart @@ -18,21 +18,20 @@ import 'package:flutter/material.dart'; import 'package:flutter_background_service/flutter_background_service.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; -import 'package:health_campaign_field_worker_app/data/local_store/no_sql/schema/service_registry.dart'; import 'package:inventory_management/inventory_management.dart'; import 'package:inventory_management/router/inventory_router.gm.dart'; import 'package:referral_reconciliation/referral_reconciliation.dart'; import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart'; import 'package:registration_delivery/registration_delivery.dart'; import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; -import 'package:sync_service/sync_service_lib.dart'; +import 'package:sync_service/blocs/sync/sync.dart'; import '../blocs/app_initialization/app_initialization.dart'; import '../blocs/auth/auth.dart'; import '../blocs/localization/localization.dart'; -import '../blocs/sync/sync.dart'; import '../data/local_store/app_shared_preferences.dart'; import '../data/local_store/no_sql/schema/app_configuration.dart'; +import '../data/local_store/no_sql/schema/service_registry.dart'; import '../data/local_store/secure_store/secure_store.dart'; import '../models/entities/roles_type.dart'; import '../router/app_router.dart'; diff --git a/apps/health_campaign_field_worker_app/lib/pages/login.dart b/apps/health_campaign_field_worker_app/lib/pages/login.dart index 703eee68c..21b69f906 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/login.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/login.dart @@ -225,7 +225,7 @@ class _LoginPageState extends LocalizedState { FormGroup buildForm() => fb.group({ _userId: FormControl( - value: 'QADistributor', + value: 'UATDistributor-1', validators: [Validators.required], ), _password: FormControl( diff --git a/apps/health_campaign_field_worker_app/lib/pages/reports/beneficiary/beneficaries_report.dart b/apps/health_campaign_field_worker_app/lib/pages/reports/beneficiary/beneficaries_report.dart index bc844eec8..02dd968be 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/reports/beneficiary/beneficaries_report.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/reports/beneficiary/beneficaries_report.dart @@ -11,7 +11,6 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import '../../../blocs/app_initialization/app_initialization.dart'; import '../../../blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart'; import '../../../models/downsync/downsync.dart'; -import '../../../models/downsync/downsync.dart'; import '../../../router/app_router.dart'; import '../../../utils/i18_key_constants.dart' as i18; import '../../../utils/utils.dart'; @@ -219,209 +218,206 @@ class BeneficiariesReportState extends LocalizedState { success: (result) { int? epochTime = result.lastSyncedTime; - String date = - '${DigitDateUtils.getTimeFromTimestamp(epochTime!)} on ${DigitDateUtils.getDateFromTimestamp(epochTime)}'; - String dataDescription = "${localizations.translate( - i18.beneficiaryDetails.downloadreport, - )}\n\n\n${localizations.translate( - i18.beneficiaryDetails.boundary, - )} ${result.boundaryName}\n${localizations.translate( - i18.beneficiaryDetails.status, - )} ${localizations.translate( - i18.beneficiaryDetails.downloadcompleted, - )}\n${localizations.translate( - i18.beneficiaryDetails.downloadedon, - )} $date\n${localizations.translate( - i18.beneficiaryDetails.recordsdownload, - )} ${result.totalCount}/${result.totalCount}"; - Navigator.of(context, rootNavigator: true).pop(); - context.router.popAndPush((AcknowledgementRoute( - isDataRecordSuccess: true, - description: dataDescription, - descriptionTableData: { - localizations.translate( - i18.beneficiaryDetails.boundary, - ): result.boundaryName!, - localizations.translate( - i18.beneficiaryDetails.status, - ): localizations.translate( - i18.beneficiaryDetails.downloadcompleted, - ), - localizations.translate( - i18.beneficiaryDetails.downloadtime, - ): date, - localizations.translate( - i18.beneficiaryDetails.totalrecorddownload, - ): '${result.totalCount}/${result.totalCount}', - }, - label: localizations.translate(i18 - .acknowledgementSuccess - .dataDownloadedSuccessLabel), - ))); - }, - failed: () => showDownloadDialog( - context, - model: DownloadBeneficiary( - title: localizations.translate( - i18.common.coreCommonDownloadFailed, - ), - projectId: context.projectId, - pendingSyncCount: pendingSyncCount, - appConfiguartion: appConfiguration, - boundary: selectedBoundary!.code.toString(), - content: localizations.translate( - i18.beneficiaryDetails.dataFoundContent, - ), - primaryButtonLabel: localizations.translate( - i18.syncDialog.retryButtonLabel, - ), - secondaryButtonLabel: localizations.translate( - i18.beneficiaryDetails.proceedWithoutDownloading, + String date = + '${DigitDateUtils.getTimeFromTimestamp(epochTime!)} on ${DigitDateUtils.getDateFromTimestamp(epochTime)}'; + String dataDescription = "${localizations.translate( + i18.beneficiaryDetails.downloadreport, + )}\n\n\n${localizations.translate( + i18.beneficiaryDetails.boundary, + )} ${result.boundaryName}\n${localizations.translate( + i18.beneficiaryDetails.status, + )} ${localizations.translate( + i18.beneficiaryDetails.downloadcompleted, + )}\n${localizations.translate( + i18.beneficiaryDetails.downloadedon, + )} $date\n${localizations.translate( + i18.beneficiaryDetails.recordsdownload, + )} ${result.totalCount}/${result.totalCount}"; + Navigator.of(context, rootNavigator: true).pop(); + context.router.popAndPush((AcknowledgementRoute( + isDataRecordSuccess: true, + description: dataDescription, + descriptionTableData: { + localizations.translate( + i18.beneficiaryDetails.boundary, + ): result.boundaryName!, + localizations.translate( + i18.beneficiaryDetails.status, + ): localizations.translate( + i18.beneficiaryDetails.downloadcompleted, ), - boundaryName: selectedBoundary!.name.toString(), + localizations.translate( + i18.beneficiaryDetails.downloadtime, + ): date, + localizations.translate( + i18.beneficiaryDetails.totalrecorddownload, + ): '${result.totalCount}/${result.totalCount}', + }, + label: localizations.translate(i18 + .acknowledgementSuccess + .dataDownloadedSuccessLabel), + ))); + }, + failed: () => showDownloadDialog( + context, + model: DownloadBeneficiary( + title: localizations.translate( + i18.common.coreCommonDownloadFailed, + ), + projectId: context.projectId, + pendingSyncCount: pendingSyncCount, + appConfiguartion: appConfiguration, + boundary: selectedBoundary!.code.toString(), + content: localizations.translate( + i18.beneficiaryDetails.dataFoundContent, ), - dialogType: DigitProgressDialogType.failed, - isPop: true, + primaryButtonLabel: localizations.translate( + i18.syncDialog.retryButtonLabel, + ), + secondaryButtonLabel: localizations.translate( + i18.beneficiaryDetails.proceedWithoutDownloading, + ), + boundaryName: selectedBoundary!.name.toString(), ), - totalCountCheckFailed: () => showDownloadDialog( - context, - model: DownloadBeneficiary( - title: localizations.translate( - i18.beneficiaryDetails.unableToCheckDataInServer, - ), - projectId: context.projectId, - pendingSyncCount: pendingSyncCount, - appConfiguartion: appConfiguration, - boundary: selectedBoundary!.code.toString(), - primaryButtonLabel: localizations.translate( - i18.syncDialog.retryButtonLabel, - ), - secondaryButtonLabel: localizations.translate( - i18.beneficiaryDetails.proceedWithoutDownloading, - ), - boundaryName: selectedBoundary!.name.toString(), + dialogType: DigitProgressDialogType.failed, + isPop: true, + ), + totalCountCheckFailed: () => showDownloadDialog( + context, + model: DownloadBeneficiary( + title: localizations.translate( + i18.beneficiaryDetails.unableToCheckDataInServer, ), - dialogType: DigitProgressDialogType.checkFailed, - isPop: true, + projectId: context.projectId, + pendingSyncCount: pendingSyncCount, + appConfiguartion: appConfiguration, + boundary: selectedBoundary!.code.toString(), + primaryButtonLabel: localizations.translate( + i18.syncDialog.retryButtonLabel, + ), + secondaryButtonLabel: localizations.translate( + i18.beneficiaryDetails.proceedWithoutDownloading, + ), + boundaryName: selectedBoundary!.name.toString(), ), - insufficientStorage: () => showDownloadDialog( - context, - model: DownloadBeneficiary( - title: localizations.translate( - i18.beneficiaryDetails.insufficientStorage, - ), - content: localizations.translate(i18 - .beneficiaryDetails.insufficientStorageContent), - projectId: context.projectId, - appConfiguartion: appConfiguration, - boundary: selectedBoundary!.code.toString(), - primaryButtonLabel: localizations.translate( - i18.common.coreCommonOk, - ), - boundaryName: selectedBoundary!.name.toString(), + dialogType: DigitProgressDialogType.checkFailed, + isPop: true, + ), + insufficientStorage: () => showDownloadDialog( + context, + model: DownloadBeneficiary( + title: localizations.translate( + i18.beneficiaryDetails.insufficientStorage, ), - dialogType: - DigitProgressDialogType.insufficientStorage, - isPop: true, + content: localizations.translate(i18 + .beneficiaryDetails.insufficientStorageContent), + projectId: context.projectId, + appConfiguartion: appConfiguration, + boundary: selectedBoundary!.code.toString(), + primaryButtonLabel: localizations.translate( + i18.common.coreCommonOk, + ), + boundaryName: selectedBoundary!.name.toString(), ), - ); - }, - child: Column(children: [ - Padding( - padding: const EdgeInsets.all(kPadding), - child: Align( - alignment: Alignment.centerLeft, - child: Text( - localizations.translate( - i18.beneficiaryDetails.datadownloadreport, - ), - style: theme.textTheme.displayMedium, - overflow: TextOverflow.ellipsis, + dialogType: DigitProgressDialogType.insufficientStorage, + isPop: true, + ), + ); + }, + child: Column(children: [ + Padding( + padding: const EdgeInsets.all(kPadding), + child: Align( + alignment: Alignment.centerLeft, + child: Text( + localizations.translate( + i18.beneficiaryDetails.datadownloadreport, ), + style: theme.textTheme.displayMedium, + overflow: TextOverflow.ellipsis, ), ), - ...downSyncList.map( - (e) => DigitCard( - child: Column( - children: [ - DigitTableCard( - element: { - localizations.translate( - i18.beneficiaryDetails.boundary, - ): e.boundaryName!, - localizations.translate( - i18.beneficiaryDetails.status, - ): e.offset == 0 && e.limit == 0 - ? localizations.translate( - i18.beneficiaryDetails - .downloadcompleted, - ) - : localizations.translate( - i18.beneficiaryDetails - .partialdownloaded, - ), - localizations.translate( - i18.beneficiaryDetails.downloadtime, - ): e.lastSyncedTime != null - ? '${DigitDateUtils.getTimeFromTimestamp(e.lastSyncedTime!)} on ${DigitDateUtils.getDateFromTimestamp(e.lastSyncedTime!)}' - : '--', - localizations.translate( - i18.beneficiaryDetails.totalrecorddownload, - ): e.offset == 0 && e.limit == 0 - ? '${e.totalCount}/${e.totalCount}' - : '${e.offset}/${e.totalCount}', - }, + ), + ...downSyncList.map( + (e) => DigitCard( + child: Column( + children: [ + DigitTableCard( + element: { + localizations.translate( + i18.beneficiaryDetails.boundary, + ): e.boundaryName!, + localizations.translate( + i18.beneficiaryDetails.status, + ): e.offset == 0 && e.limit == 0 + ? localizations.translate( + i18.beneficiaryDetails + .downloadcompleted, + ) + : localizations.translate( + i18.beneficiaryDetails + .partialdownloaded, + ), + localizations.translate( + i18.beneficiaryDetails.downloadtime, + ): e.lastSyncedTime != null + ? '${DigitDateUtils.getTimeFromTimestamp(e.lastSyncedTime!)} on ${DigitDateUtils.getDateFromTimestamp(e.lastSyncedTime!)}' + : '--', + localizations.translate( + i18.beneficiaryDetails.totalrecorddownload, + ): e.offset == 0 && e.limit == 0 + ? '${e.totalCount}/${e.totalCount}' + : '${e.offset}/${e.totalCount}', + }, + ), + DigitOutLineButton( + label: localizations.translate( + i18.beneficiaryDetails.download, ), - DigitOutLineButton( - label: localizations.translate( - i18.beneficiaryDetails.download, + buttonStyle: OutlinedButton.styleFrom( + backgroundColor: Colors.white, + side: BorderSide( + width: 1.0, + color: theme.colorScheme.secondary, ), - buttonStyle: OutlinedButton.styleFrom( - backgroundColor: Colors.white, - side: BorderSide( - width: 1.0, - color: theme.colorScheme.secondary, - ), - minimumSize: Size( - MediaQuery.of(context).size.width, - 50, - ), + minimumSize: Size( + MediaQuery.of(context).size.width, + 50, ), - onPressed: () { - setState(() { - selectedBoundary = BoundaryModel( - code: e.locality, - name: e.boundaryName, - ); - }); - context.read().add( - DownSyncGetBatchSizeEvent( - appConfiguration: [ - appConfiguration, - ], - projectId: context.projectId, - boundaryCode: e.locality!, - pendingSyncCount: pendingSyncCount, - boundaryName: - e.boundaryName.toString(), - ), - ); - }, ), - ], - ), + onPressed: () { + setState(() { + selectedBoundary = BoundaryModel( + code: e.locality, + name: e.boundaryName, + ); + }); + context.read().add( + DownSyncGetBatchSizeEvent( + appConfiguration: [ + appConfiguration, + ], + projectId: context.projectId, + boundaryCode: e.locality!, + pendingSyncCount: pendingSyncCount, + boundaryName: e.boundaryName.toString(), + ), + ); + }, + ), + ], ), ), - downSyncList.isEmpty - ? NoResultCard( - align: Alignment.center, - label: localizations.translate( - i18.common.noResultsFound, - ), - ) - : const SizedBox.shrink(), - ]), - ), + ), + downSyncList.isEmpty + ? NoResultCard( + align: Alignment.center, + label: localizations.translate( + i18.common.noResultsFound, + ), + ) + : const SizedBox.shrink(), + ]), ), ], ), diff --git a/apps/health_campaign_field_worker_app/lib/utils/background_service.dart b/apps/health_campaign_field_worker_app/lib/utils/background_service.dart index 9d268495d..a33108d94 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/background_service.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/background_service.dart @@ -192,10 +192,6 @@ void onStart(ServiceInstance service) async { ), ); // Insert sync logic here - final BandwidthModel bandwidthModel = BandwidthModel.fromJson({ - 'userId': userRequestModel!.uuid, - 'batchSize': configuredBatchSize, - }); final isSyncCompleted = await SyncService().performSync( localRepositories: Constants.getLocalRepositories( _sql, diff --git a/apps/health_campaign_field_worker_app/lib/utils/constants.dart b/apps/health_campaign_field_worker_app/lib/utils/constants.dart index f482de931..f16c9b2cc 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/constants.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/constants.dart @@ -22,6 +22,7 @@ import '../data/local_store/no_sql/schema/project_types.dart'; import '../data/local_store/no_sql/schema/row_versions.dart'; import '../data/local_store/no_sql/schema/service_registry.dart'; import '../data/repositories/remote/downsync.dart'; +import '../data/sync_service_mapper.dart'; import '../firebase_options.dart'; import 'environment_config.dart'; import 'utils.dart'; diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 0e6f42ef0..76252500a 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -71,7 +71,7 @@ packages: path: "../../packages/attendance_management" relative: true source: path - version: "1.0.0+2" + version: "1.0.2" audioplayers: dependency: transitive description: @@ -336,6 +336,13 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" + closed_household: + dependency: "direct main" + description: + path: "../../packages/closed_household" + relative: true + source: path + version: "1.0.1" code_builder: dependency: transitive description: @@ -485,7 +492,7 @@ packages: path: "../../packages/digit_components" relative: true source: path - version: "1.0.0+1" + version: "1.0.1" digit_data_model: dependency: "direct main" description: @@ -493,6 +500,13 @@ packages: relative: true source: path version: "1.0.1" + digit_dss: + dependency: "direct main" + description: + path: "../../packages/digit_dss" + relative: true + source: path + version: "1.0.1" digit_firebase_services: dependency: "direct main" description: @@ -506,13 +520,14 @@ packages: path: "../../packages/digit_scanner" relative: true source: path - version: "1.0.1" + version: "1.0.3" digit_showcase: dependency: "direct main" description: - path: "../../packages/digit_showcase" - relative: true - source: path + name: digit_showcase + sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" + url: "https://pub.dev" + source: hosted version: "1.0.0" dio: dependency: "direct main" @@ -522,6 +537,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.4.3+1" + disable_battery_optimization: + dependency: "direct main" + description: + name: disable_battery_optimization + sha256: "6b2ba802f984af141faf1b6b5fb956d5ef01f9cd555597c35b9cc335a03185ba" + url: "https://pub.dev" + source: hosted + version: "1.1.1" disk_space_update: dependency: "direct main" description: @@ -1522,7 +1545,7 @@ packages: path: "../../packages/referral_reconciliation" relative: true source: path - version: "1.0.1" + version: "1.0.2" registration_delivery: dependency: "direct main" description: diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index dcb874681..4f34d8e45 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -56,15 +56,7 @@ dependencies: digit_showcase: ^1.0.0 qr_flutter: ^4.1.0 disk_space_update: ^0.0.2 - digit_data_model: ^1.0.1 - digit_scanner: ^1.0.0+1 - attendance_management: ^1.0.0+1 - inventory_management: ^1.0.0 - referral_reconciliation: ^1.0.0 - registration_delivery: ^1.0.0+1 sync_service: ^0.0.1 - google_mlkit_barcode_scanning: ^0.10.0 - camera: ^0.10.5+7 attendance_management: ^1.0.2 digit_scanner: ^1.0.3 inventory_management: ^1.0.3+1 @@ -93,9 +85,6 @@ dev_dependencies: flutter_launcher_icons: ^0.13.1 hrk_flutter_test_batteries: ^0.8.0 -dependency_overrides: - intl: ^0.18.0 - flutter_icons: android: 'ic_launcher' ios: true diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index 973ac7bea..10adab8eb 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -260,10 +260,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.0" + name: dart_mappable_builder + sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e + url: "https://pub.dev" + source: hosted + version: "4.2.3" dart_style: dependency: transitive description: @@ -294,14 +295,13 @@ packages: path: "../digit_components" relative: true source: path - version: "1.0.0+1" + version: "1.0.1" digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "2d033990f03f7a0ea651e08c37933b4ed5ea76bf3a6a2ac3ff652c2286d04912" - url: "https://pub.dev" - source: hosted + path: "../digit_data_model" + relative: true + source: path version: "1.0.1" dio: dependency: "direct main" @@ -1032,6 +1032,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqlite3: dependency: transitive description: @@ -1148,10 +1156,10 @@ packages: dependency: transitive description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: "83d37c7ad7aaf9aa8e275490669535c8080377cfa7a7004c24dfac53afffaa90" url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.4.2" vector_graphics: dependency: transitive description: diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index ddc1e8659..7c6d796ba 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -29,12 +29,7 @@ dependencies: path_provider: ^2.0.11 path: ^1.8.2 drift_db_viewer: ^2.0.0 - auto_route: ^7.8.4 digit_data_model: ^1.0.3 - connectivity_plus: ^5.0.2 - collection: ^1.16.0 - location: ^5.0.0 - dio: ^5.1.2 dev_dependencies: flutter_test: diff --git a/packages/closed_household/lib/pages/closed_household_details.dart b/packages/closed_household/lib/pages/closed_household_details.dart index 5058973c6..5e0b15afd 100644 --- a/packages/closed_household/lib/pages/closed_household_details.dart +++ b/packages/closed_household/lib/pages/closed_household_details.dart @@ -193,7 +193,9 @@ class ClosedHouseholdDetailsPageState _householdHeadNameKey: FormControl( value: null, validators: [ - CustomValidator.requiredMin, + Validators.delegate( + CustomValidator.requiredMin, + ), Validators.maxLength(200), ], ), diff --git a/packages/closed_household/pubspec.yaml b/packages/closed_household/pubspec.yaml index 26dd71e26..4c7cb06f4 100644 --- a/packages/closed_household/pubspec.yaml +++ b/packages/closed_household/pubspec.yaml @@ -15,10 +15,10 @@ dependencies: flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 - reactive_forms: ^14.1.0 + reactive_forms: ^17.0.0 fluttertoast: ^8.1.2 overlay_builder: ^1.1.0 - intl: ^0.18.0 + intl: ^0.19.0 flutter_svg: ^2.0.8 dart_mappable: ^4.2.0 drift: ^2.0.0 @@ -26,14 +26,14 @@ dependencies: path_provider: ^2.0.11 path: ^1.8.2 drift_db_viewer: ^2.0.0 - uuid: ^3.0.6 + uuid: ^4.4.0 recase: ^4.1.0 - pluto_grid: ^7.0.1 + pluto_grid: ^8.0.0 digit_scanner: ^1.0.2 gs1_barcode_parser: ^1.0.5 - auto_route: ^7.8.4 + auto_route: ^8.1.3 digit_data_model: ^1.0.3 - package_info_plus: ^5.0.1 + package_info_plus: ^8.0.0 digit_showcase: ^1.0.0 collection: ^1.16.0 flutter_keyboard_visibility: ^5.4.0 @@ -47,14 +47,14 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^3.0.1 - dart_code_metrics: ^5.7.6 freezed: ^2.1.0+1 json_serializable: ^6.4.0 drift_dev: ^2.14.1 bloc_test: ^9.1.0 mocktail: ^1.0.2 dart_mappable_builder: ^4.2.0 - auto_route_generator: ^7.3.2 + auto_route_generator: ^8.0.0 + isar_generator: ^3.1.0+1 flutter: assets: diff --git a/packages/digit_components/example/pubspec.lock b/packages/digit_components/example/pubspec.lock index 6b788a16b..8c841a817 100644 --- a/packages/digit_components/example/pubspec.lock +++ b/packages/digit_components/example/pubspec.lock @@ -231,7 +231,7 @@ packages: path: ".." relative: true source: path - version: "1.0.0+1" + version: "1.0.1" easy_stepper: dependency: transitive description: diff --git a/packages/digit_components/pubspec.lock b/packages/digit_components/pubspec.lock index ad67fe314..a34573761 100644 --- a/packages/digit_components/pubspec.lock +++ b/packages/digit_components/pubspec.lock @@ -181,18 +181,18 @@ packages: dependency: transitive description: name: coverage - sha256: "3945034e86ea203af7a056d98e98e42a5518fff200d6e8e6647e1886b07e936e" + sha256: "7b594a150942e0d3be99cd45a1d0b5caff27ba5a27f292ed8e8d904ba3f167b5" url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.9.1" crypto: dependency: transitive description: name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27 url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.5" cupertino_icons: dependency: transitive description: @@ -221,10 +221,10 @@ packages: dependency: "direct main" description: name: easy_stepper - sha256: d09e974ec9148480072f8a7d3b0779dfdbc1a3ec1ff7daa7fbda95b0c1fe7453 + sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" url: "https://pub.dev" source: hosted - version: "0.8.5" + version: "0.8.5+1" fake_async: dependency: transitive description: @@ -237,10 +237,10 @@ packages: dependency: transitive description: name: ffi - sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" + sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.3" file: dependency: transitive description: @@ -266,10 +266,10 @@ packages: dependency: "direct main" description: name: flutter_bloc - sha256: f0ecf6e6eb955193ca60af2d5ca39565a86b8a142452c5b24d96fb477428f4d2 + sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a url: "https://pub.dev" source: hosted - version: "8.1.5" + version: "8.1.6" flutter_focus_watcher: dependency: "direct main" description: @@ -369,10 +369,10 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: "7eae679e596a44fdf761853a706f74979f8dd3cd92cf4e23cae161fda091b847" + sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" url: "https://pub.dev" source: hosted - version: "8.2.6" + version: "8.2.8" freezed: dependency: "direct dev" description: @@ -385,10 +385,10 @@ packages: dependency: "direct main" description: name: freezed_annotation - sha256: c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d + sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.4" frontend_server_client: dependency: transitive description: @@ -417,10 +417,10 @@ packages: dependency: transitive description: name: graphs - sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 + sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" horizontal_data_table: dependency: "direct main" description: @@ -433,10 +433,10 @@ packages: dependency: transitive description: name: http - sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -593,18 +593,18 @@ packages: dependency: transitive description: name: mime - sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.6" mocktail: dependency: "direct dev" description: name: mocktail - sha256: c4b5007d91ca4f67256e720cb1b6d704e79a510183a12fa551021f652577dce6 + sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" nested: dependency: transitive description: @@ -641,18 +641,18 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: b93d8b4d624b4ea19b0a5a208b2d6eff06004bc3ce74c06040b120eeadd00ce0 + sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 url: "https://pub.dev" source: hosted - version: "8.0.0" + version: "8.0.2" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: f49918f3433a3146047372f9d4f1f847511f2acd5cd030e1f44fe5a50036b70e + sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "3.0.1" path: dependency: transitive description: @@ -665,18 +665,18 @@ packages: dependency: transitive description: name: path_provider - sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "9c96da072b421e98183f9ea7464898428e764bc0ce5567f27ec8693442e72514" + sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7" url: "https://pub.dev" source: hosted - version: "2.2.5" + version: "2.2.10" path_provider_foundation: dependency: transitive description: @@ -705,18 +705,18 @@ packages: dependency: transitive description: name: path_provider_windows - sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.3.0" platform: dependency: transitive description: name: platform - sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" + sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" url: "https://pub.dev" source: hosted - version: "3.1.4" + version: "3.1.5" plugin_platform_interface: dependency: "direct main" description: @@ -846,10 +846,10 @@ packages: dependency: transitive description: name: source_map_stack_trace - sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" + sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" source_maps: dependency: transitive description: @@ -974,18 +974,18 @@ packages: dependency: transitive description: name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062 url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "1.0.0" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: "58c6666b342a38816b2e7e50ed0f1e261959630becd4c879c4f26bfa14aa5a42" + sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b url: "https://pub.dev" source: hosted - version: "2.4.5" + version: "2.4.0" webkit_inspection_protocol: dependency: transitive description: @@ -998,10 +998,10 @@ packages: dependency: transitive description: name: win32 - sha256: a79dbe579cb51ecd6d30b17e0cae4e0ea15e2c0e66f69ad4198f22a6789e94f4 + sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a" url: "https://pub.dev" source: hosted - version: "5.5.1" + version: "5.5.4" xdg_directories: dependency: transitive description: diff --git a/packages/digit_dss/pubspec.yaml b/packages/digit_dss/pubspec.yaml index 2ead774a0..70c85edc2 100644 --- a/packages/digit_dss/pubspec.yaml +++ b/packages/digit_dss/pubspec.yaml @@ -11,28 +11,27 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0+9 - flutter_bloc: ^8.1.1 - reactive_forms: ^14.1.0 - intl: ^0.18.0 - freezed_annotation: ^2.1.0 + digit_components: ^1.0.1 + flutter_bloc: ^8.1.5 + reactive_forms: ^17.0.0 + intl: ^0.19.0 + freezed_annotation: ^2.4.1 flutter_svg: ^2.0.8 dart_mappable: ^4.2.0 - auto_route: ^7.8.4 + auto_route: ^8.1.3 digit_data_model: ^1.0.3 - package_info_plus: ^5.0.1 - collection: ^1.16.0 + package_info_plus: ^8.0.0 + collection: ^1.18.0 async: ^2.11.0 - dio: ^5.4.2+1 - isar: ^3.0.5 - isar_flutter_libs: ^3.0.5 + dio: ^5.4.3+1 + isar: ^3.1.0+1 + isar_flutter_libs: ^3.1.0+1 attendance_management: ^1.0.2 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^2.0.0 - dart_code_metrics: ^5.7.6 freezed: ^2.1.0+1 json_serializable: ^6.4.0 drift_dev: ^2.14.1 @@ -44,8 +43,8 @@ dev_dependencies: url: https://github.com/egovernments/health-campaign-field-worker-app/ ref: master path: ./packages/dart_mappable_builder - auto_route_generator: ^7.3.2 - isar_generator: ^3.0.5 + auto_route_generator: ^8.0.0 + isar_generator: ^3.1.0+1 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/packages/digit_scanner/example/pubspec.lock b/packages/digit_scanner/example/pubspec.lock deleted file mode 100644 index 68e0b3441..000000000 --- a/packages/digit_scanner/example/pubspec.lock +++ /dev/null @@ -1,1141 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" - url: "https://pub.dev" - source: hosted - version: "67.0.0" - analyzer: - dependency: transitive - description: - name: analyzer - sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" - url: "https://pub.dev" - source: hosted - version: "6.4.1" - archive: - dependency: transitive - description: - name: archive - sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d - url: "https://pub.dev" - source: hosted - version: "3.6.1" - args: - dependency: transitive - description: - name: args - sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" - url: "https://pub.dev" - source: hosted - version: "2.5.0" - async: - dependency: transitive - description: - name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" - url: "https://pub.dev" - source: hosted - version: "2.11.0" - audioplayers: - dependency: transitive - description: - name: audioplayers - sha256: "752039d6aa752597c98ec212e9759519061759e402e7da59a511f39d43aa07d2" - url: "https://pub.dev" - source: hosted - version: "6.0.0" - audioplayers_android: - dependency: transitive - description: - name: audioplayers_android - sha256: de576b890befe27175c2f511ba8b742bec83765fa97c3ce4282bba46212f58e4 - url: "https://pub.dev" - source: hosted - version: "5.0.0" - audioplayers_darwin: - dependency: transitive - description: - name: audioplayers_darwin - sha256: e507887f3ff18d8e5a10a668d7bedc28206b12e10b98347797257c6ae1019c3b - url: "https://pub.dev" - source: hosted - version: "6.0.0" - audioplayers_linux: - dependency: transitive - description: - name: audioplayers_linux - sha256: "3d3d244c90436115417f170426ce768856d8fe4dfc5ed66a049d2890acfa82f9" - url: "https://pub.dev" - source: hosted - version: "4.0.0" - audioplayers_platform_interface: - dependency: transitive - description: - name: audioplayers_platform_interface - sha256: "6834dd48dfb7bc6c2404998ebdd161f79cd3774a7e6779e1348d54a3bfdcfaa5" - url: "https://pub.dev" - source: hosted - version: "7.0.0" - audioplayers_web: - dependency: transitive - description: - name: audioplayers_web - sha256: db8fc420dadf80da18e2286c18e746fb4c3b2c5adbf0c963299dde046828886d - url: "https://pub.dev" - source: hosted - version: "5.0.0" - audioplayers_windows: - dependency: transitive - description: - name: audioplayers_windows - sha256: "8605762dddba992138d476f6a0c3afd9df30ac5b96039929063eceed416795c2" - url: "https://pub.dev" - source: hosted - version: "4.0.0" - auto_route: - dependency: transitive - description: - name: auto_route - sha256: "6cad3f408863ffff2b5757967c802b18415dac4acb1b40c5cdd45d0a26e5080f" - url: "https://pub.dev" - source: hosted - version: "8.1.3" - bloc: - dependency: transitive - description: - name: bloc - sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e" - url: "https://pub.dev" - source: hosted - version: "8.1.4" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - build: - dependency: transitive - description: - name: build - sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" - url: "https://pub.dev" - source: hosted - version: "2.4.1" - build_config: - dependency: transitive - description: - name: build_config - sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 - url: "https://pub.dev" - source: hosted - version: "1.1.1" - build_daemon: - dependency: transitive - description: - name: build_daemon - sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - build_resolvers: - dependency: transitive - description: - name: build_resolvers - sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" - url: "https://pub.dev" - source: hosted - version: "2.4.2" - build_runner: - dependency: transitive - description: - name: build_runner - sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" - url: "https://pub.dev" - source: hosted - version: "2.4.11" - build_runner_core: - dependency: transitive - description: - name: build_runner_core - sha256: e3c79f69a64bdfcd8a776a3c28db4eb6e3fb5356d013ae5eb2e52007706d5dbe - url: "https://pub.dev" - source: hosted - version: "7.3.1" - built_collection: - dependency: transitive - description: - name: built_collection - sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" - url: "https://pub.dev" - source: hosted - version: "5.1.1" - built_value: - dependency: transitive - description: - name: built_value - sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb - url: "https://pub.dev" - source: hosted - version: "8.9.2" - camera: - dependency: transitive - description: - name: camera - sha256: "2170a943dcb67be2af2c6bcda8775e74b41d4c02d6a4eb10bdc832ee185c4eea" - url: "https://pub.dev" - source: hosted - version: "0.11.0+1" - camera_android_camerax: - dependency: transitive - description: - name: camera_android_camerax - sha256: "7d84815edbb8304b51c10deba3c20f44eef80aa46ff156ec45428ed16600b49a" - url: "https://pub.dev" - source: hosted - version: "0.6.5+5" - camera_avfoundation: - dependency: transitive - description: - name: camera_avfoundation - sha256: "7d021e8cd30d9b71b8b92b4ad669e80af432d722d18d6aac338572754a786c15" - url: "https://pub.dev" - source: hosted - version: "0.9.16" - camera_platform_interface: - dependency: transitive - description: - name: camera_platform_interface - sha256: a250314a48ea337b35909a4c9d5416a208d736dcb01d0b02c6af122be66660b0 - url: "https://pub.dev" - source: hosted - version: "2.7.4" - camera_web: - dependency: transitive - description: - name: camera_web - sha256: "9e9aba2fbab77ce2472924196ff8ac4dd8f9126c4f9a3096171cd1d870d6b26c" - url: "https://pub.dev" - source: hosted - version: "0.3.3" - characters: - dependency: transitive - description: - name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - checked_yaml: - dependency: transitive - description: - name: checked_yaml - sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff - url: "https://pub.dev" - source: hosted - version: "2.0.3" - clock: - dependency: transitive - description: - name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.dev" - source: hosted - version: "1.1.1" - code_builder: - dependency: transitive - description: - name: code_builder - sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 - url: "https://pub.dev" - source: hosted - version: "4.10.0" - collection: - dependency: transitive - description: - name: collection - sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a - url: "https://pub.dev" - source: hosted - version: "1.18.0" - convert: - dependency: transitive - description: - name: convert - sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" - url: "https://pub.dev" - source: hosted - version: "3.1.1" - cross_file: - dependency: transitive - description: - name: cross_file - sha256: "55d7b444feb71301ef6b8838dbc1ae02e63dd48c8773f3810ff53bb1e2945b32" - url: "https://pub.dev" - source: hosted - version: "0.3.4+1" - crypto: - dependency: transitive - description: - name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab - url: "https://pub.dev" - source: hosted - version: "3.0.3" - cupertino_icons: - dependency: "direct main" - description: - name: cupertino_icons - sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 - url: "https://pub.dev" - source: hosted - version: "1.0.8" - dart_style: - dependency: transitive - description: - name: dart_style - sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" - url: "https://pub.dev" - source: hosted - version: "2.3.6" - digit_components: - dependency: "direct overridden" - description: - path: "../../digit_components" - relative: true - source: path - version: "1.0.0+1" - digit_scanner: - dependency: "direct main" - description: - path: ".." - relative: true - source: path - version: "1.0.1" - easy_stepper: - dependency: transitive - description: - name: easy_stepper - sha256: d09e974ec9148480072f8a7d3b0779dfdbc1a3ec1ff7daa7fbda95b0c1fe7453 - url: "https://pub.dev" - source: hosted - version: "0.8.5" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - ffi: - dependency: transitive - description: - name: ffi - sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - file: - dependency: transitive - description: - name: file - sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" - url: "https://pub.dev" - source: hosted - version: "7.0.0" - fixnum: - dependency: transitive - description: - name: fixnum - sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_bloc: - dependency: "direct main" - description: - name: flutter_bloc - sha256: f0ecf6e6eb955193ca60af2d5ca39565a86b8a142452c5b24d96fb477428f4d2 - url: "https://pub.dev" - source: hosted - version: "8.1.5" - flutter_focus_watcher: - dependency: transitive - description: - name: flutter_focus_watcher - sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility: - dependency: transitive - description: - name: flutter_keyboard_visibility - sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" - url: "https://pub.dev" - source: hosted - version: "5.4.1" - flutter_keyboard_visibility_linux: - dependency: transitive - description: - name: flutter_keyboard_visibility_linux - sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_macos: - dependency: transitive - description: - name: flutter_keyboard_visibility_macos - sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_platform_interface: - dependency: transitive - description: - name: flutter_keyboard_visibility_platform_interface - sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_web: - dependency: transitive - description: - name: flutter_keyboard_visibility_web - sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_windows: - dependency: transitive - description: - name: flutter_keyboard_visibility_windows - sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_lints: - dependency: "direct dev" - description: - name: flutter_lints - sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 - url: "https://pub.dev" - source: hosted - version: "2.0.3" - flutter_localizations: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - flutter_plugin_android_lifecycle: - dependency: transitive - description: - name: flutter_plugin_android_lifecycle - sha256: c6b0b4c05c458e1c01ad9bcc14041dd7b1f6783d487be4386f793f47a8a4d03e - url: "https://pub.dev" - source: hosted - version: "2.0.20" - flutter_spinkit: - dependency: transitive - description: - name: flutter_spinkit - sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 - url: "https://pub.dev" - source: hosted - version: "5.2.1" - flutter_svg: - dependency: transitive - description: - name: flutter_svg - sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" - url: "https://pub.dev" - source: hosted - version: "2.0.10+1" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" - flutter_web_plugins: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - fluttertoast: - dependency: transitive - description: - name: fluttertoast - sha256: "7eae679e596a44fdf761853a706f74979f8dd3cd92cf4e23cae161fda091b847" - url: "https://pub.dev" - source: hosted - version: "8.2.6" - freezed_annotation: - dependency: transitive - description: - name: freezed_annotation - sha256: c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d - url: "https://pub.dev" - source: hosted - version: "2.4.1" - frontend_server_client: - dependency: transitive - description: - name: frontend_server_client - sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 - url: "https://pub.dev" - source: hosted - version: "4.0.0" - glob: - dependency: transitive - description: - name: glob - sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - google_fonts: - dependency: transitive - description: - name: google_fonts - sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 - url: "https://pub.dev" - source: hosted - version: "6.2.1" - google_mlkit_barcode_scanning: - dependency: transitive - description: - name: google_mlkit_barcode_scanning - sha256: f1a2a39cf1730b9a5e2784a07efa1ca5bfdfdde6aa00b193b3f8cd1953c638ec - url: "https://pub.dev" - source: hosted - version: "0.12.0" - google_mlkit_commons: - dependency: transitive - description: - name: google_mlkit_commons - sha256: "27d626c66a181351a953eba5b6ff1ff123aadb891b4dab085b292118f039d6ac" - url: "https://pub.dev" - source: hosted - version: "0.7.1" - graphs: - dependency: transitive - description: - name: graphs - sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 - url: "https://pub.dev" - source: hosted - version: "2.3.1" - gs1_barcode_parser: - dependency: transitive - description: - name: gs1_barcode_parser - sha256: "9aaff47bdab7177deaf9248cc861ef41cf611d3f828498cb40b64bedcbf53391" - url: "https://pub.dev" - source: hosted - version: "1.0.5" - horizontal_data_table: - dependency: transitive - description: - name: horizontal_data_table - sha256: c8ab5256bbced698a729f3e0ff2cb0e8e97416cdbb082860370eaf883badf722 - url: "https://pub.dev" - source: hosted - version: "4.3.1" - http: - dependency: transitive - description: - name: http - sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - http_multi_server: - dependency: transitive - description: - name: http_multi_server - sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" - url: "https://pub.dev" - source: hosted - version: "3.2.1" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - intl: - dependency: transitive - description: - name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf - url: "https://pub.dev" - source: hosted - version: "0.19.0" - io: - dependency: transitive - description: - name: io - sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" - url: "https://pub.dev" - source: hosted - version: "1.0.4" - js: - dependency: transitive - description: - name: js - sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 - url: "https://pub.dev" - source: hosted - version: "0.6.7" - json_annotation: - dependency: transitive - description: - name: json_annotation - sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" - url: "https://pub.dev" - source: hosted - version: "4.9.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" - url: "https://pub.dev" - source: hosted - version: "10.0.4" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" - url: "https://pub.dev" - source: hosted - version: "3.0.3" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://pub.dev" - source: hosted - version: "3.0.1" - lints: - dependency: transitive - description: - name: lints - sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - location: - dependency: transitive - description: - name: location - sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" - url: "https://pub.dev" - source: hosted - version: "6.0.2" - location_platform_interface: - dependency: transitive - description: - name: location_platform_interface - sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" - url: "https://pub.dev" - source: hosted - version: "4.0.0" - location_web: - dependency: transitive - description: - name: location_web - sha256: "15ad7b4c8a9f55abee513373755e093a40c04d7e24fc1b4f89676fe99523d034" - url: "https://pub.dev" - source: hosted - version: "5.0.1" - logging: - dependency: transitive - description: - name: logging - sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - lottie: - dependency: transitive - description: - name: lottie - sha256: "6a24ade5d3d918c306bb1c21a6b9a04aab0489d51a2582522eea820b4093b62b" - url: "https://pub.dev" - source: hosted - version: "3.1.2" - matcher: - dependency: transitive - description: - name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb - url: "https://pub.dev" - source: hosted - version: "0.12.16+1" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" - url: "https://pub.dev" - source: hosted - version: "0.8.0" - meta: - dependency: transitive - description: - name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" - url: "https://pub.dev" - source: hosted - version: "1.12.0" - mime: - dependency: transitive - description: - name: mime - sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" - url: "https://pub.dev" - source: hosted - version: "1.0.5" - nested: - dependency: transitive - description: - name: nested - sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - overlay_builder: - dependency: transitive - description: - name: overlay_builder - sha256: "58b97bc5f67a2e2bb7006dd88e697ac757dfffc9dbd1e7dfc1917fb510a4b5c8" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - package_config: - dependency: transitive - description: - name: package_config - sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - package_info_plus: - dependency: transitive - description: - name: package_info_plus - sha256: b93d8b4d624b4ea19b0a5a208b2d6eff06004bc3ce74c06040b120eeadd00ce0 - url: "https://pub.dev" - source: hosted - version: "8.0.0" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: f49918f3433a3146047372f9d4f1f847511f2acd5cd030e1f44fe5a50036b70e - url: "https://pub.dev" - source: hosted - version: "3.0.0" - path: - dependency: transitive - description: - name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" - url: "https://pub.dev" - source: hosted - version: "1.9.0" - path_parsing: - dependency: transitive - description: - name: path_parsing - sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf - url: "https://pub.dev" - source: hosted - version: "1.0.1" - path_provider: - dependency: transitive - description: - name: path_provider - sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 - url: "https://pub.dev" - source: hosted - version: "2.1.3" - path_provider_android: - dependency: transitive - description: - name: path_provider_android - sha256: "9c96da072b421e98183f9ea7464898428e764bc0ce5567f27ec8693442e72514" - url: "https://pub.dev" - source: hosted - version: "2.2.5" - path_provider_foundation: - dependency: transitive - description: - name: path_provider_foundation - sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16 - url: "https://pub.dev" - source: hosted - version: "2.4.0" - path_provider_linux: - dependency: transitive - description: - name: path_provider_linux - sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 - url: "https://pub.dev" - source: hosted - version: "2.2.1" - path_provider_platform_interface: - dependency: transitive - description: - name: path_provider_platform_interface - sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - path_provider_windows: - dependency: transitive - description: - name: path_provider_windows - sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" - url: "https://pub.dev" - source: hosted - version: "2.2.1" - petitparser: - dependency: transitive - description: - name: petitparser - sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 - url: "https://pub.dev" - source: hosted - version: "6.0.2" - platform: - dependency: transitive - description: - name: platform - sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" - url: "https://pub.dev" - source: hosted - version: "3.1.4" - plugin_platform_interface: - dependency: transitive - description: - name: plugin_platform_interface - sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" - url: "https://pub.dev" - source: hosted - version: "2.1.8" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" - pool: - dependency: transitive - description: - name: pool - sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" - url: "https://pub.dev" - source: hosted - version: "1.5.1" - provider: - dependency: transitive - description: - name: provider - sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c - url: "https://pub.dev" - source: hosted - version: "6.1.2" - pub_semver: - dependency: transitive - description: - name: pub_semver - sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - pubspec_parse: - dependency: transitive - description: - name: pubspec_parse - sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 - url: "https://pub.dev" - source: hosted - version: "1.3.0" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a - url: "https://pub.dev" - source: hosted - version: "2.1.1" - reactive_forms: - dependency: transitive - description: - name: reactive_forms - sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" - url: "https://pub.dev" - source: hosted - version: "17.0.1" - remove_emoji_input_formatter: - dependency: transitive - description: - name: remove_emoji_input_formatter - sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" - url: "https://pub.dev" - source: hosted - version: "0.0.1+1" - shelf: - dependency: transitive - description: - name: shelf - sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 - url: "https://pub.dev" - source: hosted - version: "1.4.1" - shelf_web_socket: - dependency: transitive - description: - name: shelf_web_socket - sha256: "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611" - url: "https://pub.dev" - source: hosted - version: "2.0.0" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.99" - source_span: - dependency: transitive - description: - name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" - url: "https://pub.dev" - source: hosted - version: "1.10.0" - sprintf: - dependency: transitive - description: - name: sprintf - sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" - url: "https://pub.dev" - source: hosted - version: "7.0.0" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" - url: "https://pub.dev" - source: hosted - version: "1.11.1" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 - url: "https://pub.dev" - source: hosted - version: "2.1.2" - stream_transform: - dependency: transitive - description: - name: stream_transform - sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - synchronized: - dependency: transitive - description: - name: synchronized - sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.dev" - source: hosted - version: "1.2.1" - test_api: - dependency: transitive - description: - name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" - url: "https://pub.dev" - source: hosted - version: "0.7.0" - timing: - dependency: transitive - description: - name: timing - sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c - url: "https://pub.dev" - source: hosted - version: "1.3.2" - uuid: - dependency: transitive - description: - name: uuid - sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8" - url: "https://pub.dev" - source: hosted - version: "4.4.0" - vector_graphics: - dependency: transitive - description: - name: vector_graphics - sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" - url: "https://pub.dev" - source: hosted - version: "1.1.11+1" - vector_graphics_codec: - dependency: transitive - description: - name: vector_graphics_codec - sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da - url: "https://pub.dev" - source: hosted - version: "1.1.11+1" - vector_graphics_compiler: - dependency: transitive - description: - name: vector_graphics_compiler - sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" - url: "https://pub.dev" - source: hosted - version: "1.1.11+1" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - vm_service: - dependency: transitive - description: - name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" - url: "https://pub.dev" - source: hosted - version: "14.2.1" - watcher: - dependency: transitive - description: - name: watcher - sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - web: - dependency: transitive - description: - name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" - url: "https://pub.dev" - source: hosted - version: "0.5.1" - web_socket: - dependency: transitive - description: - name: web_socket - sha256: "24301d8c293ce6fe327ffe6f59d8fd8834735f0ec36e4fd383ec7ff8a64aa078" - url: "https://pub.dev" - source: hosted - version: "0.1.5" - web_socket_channel: - dependency: transitive - description: - name: web_socket_channel - sha256: a2d56211ee4d35d9b344d9d4ce60f362e4f5d1aafb988302906bd732bc731276 - url: "https://pub.dev" - source: hosted - version: "3.0.0" - win32: - dependency: transitive - description: - name: win32 - sha256: a79dbe579cb51ecd6d30b17e0cae4e0ea15e2c0e66f69ad4198f22a6789e94f4 - url: "https://pub.dev" - source: hosted - version: "5.5.1" - xdg_directories: - dependency: transitive - description: - name: xdg_directories - sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d - url: "https://pub.dev" - source: hosted - version: "1.0.4" - xml: - dependency: transitive - description: - name: xml - sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 - url: "https://pub.dev" - source: hosted - version: "6.5.0" - yaml: - dependency: transitive - description: - name: yaml - sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" - url: "https://pub.dev" - source: hosted - version: "3.1.2" -sdks: - dart: ">=3.4.0 <3.9.0" - flutter: ">=3.22.0" diff --git a/packages/digit_scanner/example/test/widget_test.dart b/packages/digit_scanner/example/test/widget_test.dart index 092d222f7..db7ddd343 100644 --- a/packages/digit_scanner/example/test/widget_test.dart +++ b/packages/digit_scanner/example/test/widget_test.dart @@ -8,7 +8,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:example/main.dart'; +import '../lib/main.dart'; void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async { diff --git a/packages/digit_scanner/pubspec.lock b/packages/digit_scanner/pubspec.lock index 67fe93040..5895bf3a2 100644 --- a/packages/digit_scanner/pubspec.lock +++ b/packages/digit_scanner/pubspec.lock @@ -17,14 +17,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.4.1" - ansicolor: - dependency: transitive - description: - name: ansicolor - sha256: "8bf17a8ff6ea17499e40a2d2542c2f481cd7615760c6d34065cb22bfd22e6880" - url: "https://pub.dev" - source: hosted - version: "2.0.2" archive: dependency: transitive description: @@ -337,13 +329,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.2.2" - dart_mappable_builder: - dependency: "direct overridden" - description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.0" dart_style: dependency: transitive description: @@ -366,7 +351,38 @@ packages: path: "../digit_components" relative: true source: path - version: "1.0.0+1" + version: "1.0.1" + digit_data_model: + dependency: "direct overridden" + description: + path: "../digit_data_model" + relative: true + source: path + version: "1.0.1" + dio: + dependency: transitive + description: + name: dio + sha256: "0dfb6b6a1979dac1c1245e17cef824d7b452ea29bd33d3467269f9bef3715fb0" + url: "https://pub.dev" + source: hosted + version: "5.6.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "33259a9276d6cea88774a0000cfae0d861003497755969c92faa223108620dc8" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + drift: + dependency: transitive + description: + name: drift + sha256: "4e0ffee40d23f0b809e6cff1ad202886f51d629649073ed42d9cd1d194ea943e" + url: "https://pub.dev" + source: hosted + version: "2.19.1+1" easy_stepper: dependency: transitive description: @@ -659,6 +675,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" + isar: + dependency: transitive + description: + name: isar + sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" + isar_flutter_libs: + dependency: transitive + description: + name: isar_flutter_libs + sha256: bc6768cc4b9c61aabff77152e7f33b4b17d2fc93134f7af1c3dd51500fe8d5e8 + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" js: dependency: transitive description: @@ -980,13 +1012,21 @@ packages: source: hosted version: "2.1.1" reactive_forms: - dependency: transitive + dependency: "direct main" description: name: reactive_forms sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" url: "https://pub.dev" source: hosted version: "17.0.1" + recase: + dependency: transitive + description: + name: recase + sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 + url: "https://pub.dev" + source: hosted + version: "4.1.0" remove_emoji_input_formatter: dependency: transitive description: @@ -1080,6 +1120,22 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.0" + sqlite3: + dependency: transitive + description: + name: sqlite3 + sha256: fde692580bee3379374af1f624eb3e113ab2865ecb161dbe2d8ac2de9735dbdb + url: "https://pub.dev" + source: hosted + version: "2.4.5" + sqlite3_flutter_libs: + dependency: transitive + description: + name: sqlite3_flutter_libs + sha256: "62bbb4073edbcdf53f40c80775f33eea01d301b7b81417e5b3fb7395416258c1" + url: "https://pub.dev" + source: hosted + version: "0.5.24" stack_trace: dependency: transitive description: diff --git a/packages/digit_scanner/pubspec.yaml b/packages/digit_scanner/pubspec.yaml index 5dde19907..2ac854401 100644 --- a/packages/digit_scanner/pubspec.yaml +++ b/packages/digit_scanner/pubspec.yaml @@ -38,7 +38,7 @@ dependencies: google_mlkit_barcode_scanning: ^0.12.0 camera: ^0.11.0+1 gs1_barcode_parser: ^1.0.5 - digit_components: ^1.0.0+9 + digit_components: ^1.0.1 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 overlay_builder: ^1.1.0 @@ -48,7 +48,7 @@ dependencies: path_provider: ^2.1.3 path: ^1.9.0 google_mlkit_commons: ^0.7.1 - reactive_forms: ^14.1.0 + reactive_forms: ^17.0.0 dev_dependencies: flutter_test: diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index d564aa923..f072c6709 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -364,10 +364,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.0" + name: dart_mappable_builder + sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e + url: "https://pub.dev" + source: hosted + version: "4.2.3" dart_style: dependency: transitive description: @@ -398,7 +399,7 @@ packages: path: "../digit_components" relative: true source: path - version: "1.0.0+1" + version: "1.0.1" digit_data_model: dependency: "direct main" description: @@ -412,7 +413,7 @@ packages: path: "../digit_scanner" relative: true source: path - version: "1.0.1" + version: "1.0.3" dio: dependency: "direct main" description: diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index 246c709de..fa188b310 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -364,10 +364,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.0" + name: dart_mappable_builder + sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e + url: "https://pub.dev" + source: hosted + version: "4.2.3" dart_style: dependency: transitive description: @@ -398,7 +399,7 @@ packages: path: "../digit_components" relative: true source: path - version: "1.0.0+1" + version: "1.0.1" digit_data_model: dependency: "direct main" description: @@ -412,7 +413,7 @@ packages: path: "../digit_scanner" relative: true source: path - version: "1.0.1" + version: "1.0.3" dio: dependency: "direct main" description: diff --git a/packages/referral_reconciliation/pubspec.yaml b/packages/referral_reconciliation/pubspec.yaml index 7b3b857c3..d30df8004 100644 --- a/packages/referral_reconciliation/pubspec.yaml +++ b/packages/referral_reconciliation/pubspec.yaml @@ -19,7 +19,6 @@ dependencies: dart_mappable: ^4.2.2 drift: ^2.18.0 auto_route: ^8.1.3 - digit_data_model: ^1.0.1 collection: ^1.18.0 dio: ^5.4.3+1 location: ^6.0.2 diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index b8e28a752..1e67b1b88 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -767,7 +767,8 @@ class IndividualDetailsPageState extends LocalizedState { _individualNameKey: FormControl( validators: [ Validators.required, - CustomValidator.requiredMin, + Validators.delegate( + (validator) => CustomValidator.requiredMin(validator)), Validators.maxLength(200), ], value: individual?.name?.givenName ?? searchQuery?.trim(), @@ -789,8 +790,9 @@ class IndividualDetailsPageState extends LocalizedState { _genderKey: FormControl(value: getGenderOptions(individual)), _mobileNumberKey: FormControl(value: individual?.mobileNumber, validators: [ - CustomValidator.validMobileNumber, - CustomValidator.minPhoneNumValidation, + Validators.pattern(Constants.mobileNumberRegExp, + validationMessage: + localizations.translate(i18.common.coreCommonMobileNumber)), Validators.maxLength(10) ]), }); diff --git a/packages/registration_delivery/lib/utils/constants.dart b/packages/registration_delivery/lib/utils/constants.dart index a3f9de2ad..a398efa59 100644 --- a/packages/registration_delivery/lib/utils/constants.dart +++ b/packages/registration_delivery/lib/utils/constants.dart @@ -4,6 +4,9 @@ class Constants { KeyValue('CORE_COMMON_NO', false), ]; + static RegExp mobileNumberRegExp = + RegExp(r'^(?=.{10}$)[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\./0-9]*$'); + final String dateFormat = 'dd/MM/yyyy'; final String communityHealthWorker = 'Community Health Worker'; final String deliveryTeam = 'Delivery Team'; diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 18520d2a5..efb443f57 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -364,10 +364,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.0" + name: dart_mappable_builder + sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e + url: "https://pub.dev" + source: hosted + version: "4.2.3" dart_style: dependency: transitive description: @@ -398,7 +399,7 @@ packages: path: "../digit_components" relative: true source: path - version: "1.0.0+1" + version: "1.0.1" digit_data_model: dependency: "direct main" description: @@ -412,13 +413,14 @@ packages: path: "../digit_scanner" relative: true source: path - version: "1.0.1" + version: "1.0.3" digit_showcase: dependency: "direct main" description: - path: "../digit_showcase" - relative: true - source: path + name: digit_showcase + sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" + url: "https://pub.dev" + source: hosted version: "1.0.0" dio: dependency: "direct main" diff --git a/packages/sync_service/lib/data/repositories/sync/sync_down.dart b/packages/sync_service/lib/data/repositories/sync/sync_down.dart index fdaa14385..beda255a3 100644 --- a/packages/sync_service/lib/data/repositories/sync/sync_down.dart +++ b/packages/sync_service/lib/data/repositories/sync/sync_down.dart @@ -5,7 +5,6 @@ import 'package:digit_data_model/data_model.dart'; import 'package:sync_service/utils/utils.dart'; import '../../../models/bandwidth/bandwidth_model.dart'; -import '../../sync_service.dart'; import 'remote_type.dart'; /// The `PerformSyncDown` class provides a method to perform a sync down operation. From f40558a191bd4622bfdbf5558e1ed40ecab9574c Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Fri, 30 Aug 2024 11:35:32 +0530 Subject: [PATCH 084/241] Resource validation added (#555) * added project valid check, fixed house type selection issue, added resource duplicate check * removed split code for boundary * fixed pop up not closing issue * removed credentials --------- Co-authored-by: rachana-egov --- .../lib/pages/language_selection.dart | 4 + .../lib/pages/login.dart | 4 +- .../beneficiary/deliver_intervention.dart | 134 ++++++++++-------- .../pages/beneficiary/household_overview.dart | 21 ++- .../house_details.dart | 14 +- .../household_location.dart | 2 +- .../lib/pages/summary_page.dart | 6 +- .../lib/utils/i18_key_constants.dart | 2 + 8 files changed, 101 insertions(+), 86 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart b/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart index 8c833ffed..f6ad795db 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart @@ -28,6 +28,10 @@ class _LanguageSelectionPageState extends State { @override void dispose() { + if (isDialogVisible) { + // Close the dialog if it's visible + DigitComponentsUtils().hideLocalizationLoadingDialog(context); + } isDialogVisible = false; super.dispose(); } diff --git a/apps/health_campaign_field_worker_app/lib/pages/login.dart b/apps/health_campaign_field_worker_app/lib/pages/login.dart index 703eee68c..37ddf9c91 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/login.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/login.dart @@ -225,12 +225,12 @@ class _LoginPageState extends LocalizedState { FormGroup buildForm() => fb.group({ _userId: FormControl( - value: 'QADistributor', + value: '', validators: [Validators.required], ), _password: FormControl( validators: [Validators.required], - value: 'eGov@1234', + value: '', ), _privacyCheck: FormControl( validators: [Validators.requiredTrue], diff --git a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart index d33b76454..475a50aa2 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart @@ -269,64 +269,51 @@ class DeliverInterventionPageState onPressed: isClicked ? null : () async { - final deliveredProducts = - ((form.control( - _resourceDeliveredKey, - ) as FormArray) - .value - as List< - ProductVariantModel?>); - if (hasDuplicatesOrEmptyResource( - deliveredProducts)) { - await DigitToast - .show( - context, - options: - DigitToastOptions( - localizations - .translate(i18 - .deliverIntervention - .resourceDeliveredValidation), - true, - theme, - ), - ); - } else if ((((form - .control( - _quantityDistributedKey, - ) as FormArray) - .value) ?? - []) - .any((e) => e == 0)) { - await DigitToast - .show( - context, - options: - DigitToastOptions( - localizations - .translate(i18 - .deliverIntervention - .resourceCannotBeZero), - true, - theme, - ), - ); - } else { - context - .read< - LocationBloc>() - .add( - const LoadLocationEvent()); - handleLocationState( - locationState, - context, - deliveryInterventionState, - form, - householdMemberWrapper, - projectBeneficiary! - .first); - } - }, + final deliveredProducts = ((form.control(_resourceDeliveredKey) as FormArray).value as List); + final hasEmptyResources = hasEmptyOrNullResources(deliveredProducts); + final hasZeroQuantity = hasEmptyOrZeroQuantity(form); + final hasDuplicates = hasDuplicateResources(deliveredProducts, form); + + if (hasEmptyResources) { + await DigitToast.show( + context, + options: DigitToastOptions( + localizations.translate(i18.deliverIntervention.resourceDeliveredValidation), + true, + theme, + ), + ); + } else if (hasDuplicates) { + await DigitToast.show( + context, + options: DigitToastOptions( + localizations.translate(i18.deliverIntervention.resourceDuplicateValidation), + true, + theme, + ), + ); + } else if (hasZeroQuantity) { + await DigitToast.show( + context, + options: DigitToastOptions( + localizations.translate(i18.deliverIntervention.resourceCannotBeZero), + true, + theme, + ), + ); + } else { + context.read().add(const LoadLocationEvent()); + handleLocationState( + locationState, + context, + deliveryInterventionState, + form, + householdMemberWrapper, + projectBeneficiary!.first, + ); + } + }, + child: Center( child: Text( localizations.translate( @@ -586,8 +573,14 @@ class DeliverInterventionPageState .add(FormControl(value: 0, validators: [Validators.min(1)])); } - bool hasDuplicatesOrEmptyResource( - List deliveredProducts) { + bool hasEmptyOrZeroQuantity(FormGroup form) { + final quantityDistributedArray = form.control(_quantityDistributedKey) as FormArray; + + // Check if any quantity is zero or null + return quantityDistributedArray.value?.any((e) => e == 0 || e == null) ?? true; + } + + bool hasEmptyOrNullResources(List deliveredProducts) { final Map> groupedVariants = {}; if (deliveredProducts.isNotEmpty) { for (final variant in deliveredProducts) { @@ -598,7 +591,7 @@ class DeliverInterventionPageState } } bool hasDuplicateProductIdOrNoProductId = - deliveredProducts.any((ele) => ele?.productId == null); + deliveredProducts.any((ele) => ele?.productId == null); return hasDuplicateProductIdOrNoProductId; } @@ -606,6 +599,25 @@ class DeliverInterventionPageState return true; } + bool hasDuplicateResources(List deliveredProducts, FormGroup form) { + final resourceDeliveredArray = form.control(_resourceDeliveredKey) as FormArray; + final Set uniqueProductIds = {}; + + for (int i = 0; i < resourceDeliveredArray.value!.length; i++) { + final productId = deliveredProducts[i]?.id; + if (productId != null) { + if (uniqueProductIds.contains(productId)) { + // Duplicate found + return true; + } else { + uniqueProductIds.add(productId); + } + } + } + return false; + } + + // ignore: long-parameter-list TaskModel _getTaskModel( BuildContext context, { diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index cae3e78fb..d5f340a05 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -71,7 +71,7 @@ class _HouseholdOverviewPageState ), enableFixedButton: true, footer: Offstage( - offstage: beneficiaryType == BeneficiaryType.individual, + offstage: beneficiaryType == BeneficiaryType.individual || isOutsideProjectDateRange(), child: BlocBuilder( builder: (context, serviceDefinitionState) => @@ -344,9 +344,7 @@ class _HouseholdOverviewPageState localizations.translate( i18.householdLocation .administrationAreaFormLabel, - ): RegistrationDeliverySingleton() - .boundary - ?.name, + ): state.householdMemberWrapper.headOfHousehold?.address?.first.locality?.code, localizations.translate( i18.deliverIntervention .memberCountText, @@ -744,6 +742,21 @@ class _HouseholdOverviewPageState ); } + bool isOutsideProjectDateRange() { + final project = RegistrationDeliverySingleton().selectedProject; + + if (project?.startDate != null && project?.endDate != null) { + final now = DateTime.now().millisecondsSinceEpoch; + final startDate = project!.startDate!; + final endDate = project!.endDate!; + + return now < startDate || now > endDate; + } + + return false; + } + + getStatusAttributes(HouseholdOverviewState state, DeliverInterventionState deliverInterventionState) { var textLabel = diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart index 08e42399c..55d762731 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart @@ -238,19 +238,7 @@ class HouseDetailsPageState extends LocalizedState { options: RegistrationDeliverySingleton() .houseStructureTypes ?? [], - initialSelection: registrationState - .householdModel - ?.additionalFields - ?.fields - .where((e) => - e.key == - AdditionalFieldsType - .houseStructureTypes - .toValue()) - .first - .value - .toString() - .split("|"), + initialSelection: form.control(_householdStructureKey).value!= null ? [...form.control(_householdStructureKey).value ] : [], onSelectionChanged: (values) { form .control(_householdStructureKey) diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index ef237cd63..9833d6330 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -400,7 +400,7 @@ class HouseholdLocationPageState extends LocalizedState { return fb.group({ _administrationAreaKey: FormControl( value: localizations.translate( - RegistrationDeliverySingleton().boundary!.name.toString()), + RegistrationDeliverySingleton().boundary!.code ?? ''), validators: [Validators.required], ), _addressLine1Key: diff --git a/packages/registration_delivery/lib/pages/summary_page.dart b/packages/registration_delivery/lib/pages/summary_page.dart index 1e60af607..873e85f30 100644 --- a/packages/registration_delivery/lib/pages/summary_page.dart +++ b/packages/registration_delivery/lib/pages/summary_page.dart @@ -206,11 +206,7 @@ class SummaryPageState extends LocalizedState { label: localizations.translate( i18.householdLocation.villageLabel), value: householdState.householdModel?.address - ?.locality?.code - .split('_') - .last - .toString() - .titleCase ?? + ?.locality?.code ?? localizations .translate(i18.common.coreCommonNA), isInline: true), diff --git a/packages/registration_delivery/lib/utils/i18_key_constants.dart b/packages/registration_delivery/lib/utils/i18_key_constants.dart index 671c89cb8..6dbb112c2 100644 --- a/packages/registration_delivery/lib/utils/i18_key_constants.dart +++ b/packages/registration_delivery/lib/utils/i18_key_constants.dart @@ -572,6 +572,8 @@ class DeliverIntervention { String get resourceDeliveredValidation => 'RESOURCE_DELIVERED_VALIDATION'; + String get resourceDuplicateValidation => 'RESOURCE_DUPLICATE_VALIDATION'; + String get unableToScan => 'UNABLE_TO_SCAN'; String get scanValidResource => 'SCAN_VALID_RESOURCE'; From 7ff5507101c9458d017150df57acb6efd5d8f968 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Fri, 30 Aug 2024 17:03:29 +0530 Subject: [PATCH 085/241] UAT fixes, HCMPRE-412 (#556) * added project valid check, fixed house type selection issue, added resource duplicate check * removed split code for boundary * fixed pop up not closing issue * removed credentials * HCMPRE-412 - creating beneficiary for all individuals if not registered, reload event fix, removed dialog for loader of localization.dart * added check condition to show status and updated selection card * beneficiary_checklist.dart code compare with enum * fix state not getting updated issue (#557) Co-authored-by: rachana-egov * Fixed dashboard chart delete fixes in isar (#558) * Resource validation added (#555) * added project valid check, fixed house type selection issue, added resource duplicate check * removed split code for boundary * fixed pop up not closing issue * removed credentials --------- Co-authored-by: rachana-egov * Fixed dashboard chart delete fixes in isar * Update language_selection.dart --------- Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: rachana-egov Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> * updated packages version and published --------- Co-authored-by: rachana-egov Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> --- .../data/repositories/local/localization.dart | 2 +- .../lib/pages/language_selection.dart | 16 +-- .../lib/pages/login.dart | 93 ++++++------ .../pubspec.lock | 54 +++---- .../pubspec.yaml | 24 ++-- packages/attendance_management/CHANGELOG.md | 3 + .../lib/pages/mark_attendance.dart | 2 +- packages/attendance_management/pubspec.lock | 16 ++- packages/attendance_management/pubspec.yaml | 12 +- packages/closed_household/CHANGELOG.md | 4 + .../lib/pages/closed_household_details.dart | 2 +- packages/closed_household/pubspec.yaml | 14 +- packages/digit_components/CHANGELOG.md | 3 + .../digit_components/example/pubspec.lock | 2 +- .../digit_components/lib/utils/utils.dart | 11 +- .../lib/widgets/atoms/selection_card.dart | 12 +- packages/digit_components/pubspec.yaml | 2 +- packages/digit_data_model/CHANGELOG.md | 4 + packages/digit_data_model/pubspec.yaml | 2 +- packages/digit_dss/CHANGELOG.md | 6 + packages/digit_dss/lib/blocs/dashboard.dart | 17 ++- .../digit_dss/lib/data/remote/dashboard.dart | 2 +- .../lib/models/entities/dss_enums.dart | 4 +- .../lib/models/entities/dss_enums.mapper.dart | 8 +- packages/digit_dss/pubspec.yaml | 6 +- packages/digit_scanner/CHANGELOG.md | 3 + packages/digit_scanner/example/pubspec.lock | 6 +- packages/digit_scanner/pubspec.lock | 116 +++++++++++++-- packages/digit_scanner/pubspec.yaml | 6 +- packages/inventory_management/CHANGELOG.md | 4 + .../lib/pages/record_stock/stock_details.dart | 2 +- packages/inventory_management/pubspec.lock | 20 +-- packages/inventory_management/pubspec.yaml | 14 +- packages/referral_reconciliation/CHANGELOG.md | 36 ++--- packages/referral_reconciliation/pubspec.lock | 25 ++-- packages/referral_reconciliation/pubspec.yaml | 14 +- packages/registration_delivery/CHANGELOG.md | 7 + .../beneficiary_registration.dart | 74 +++++----- .../beneficiary/beneficiary_checklist.dart | 6 +- .../beneficiary/deliver_intervention.dart | 136 +++++++++++------- .../pages/beneficiary/household_overview.dart | 4 + .../household_location.dart | 2 +- .../individual_details.dart | 6 +- packages/registration_delivery/pubspec.lock | 20 +-- packages/registration_delivery/pubspec.yaml | 14 +- 45 files changed, 517 insertions(+), 319 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart index a5d873711..bd9fc1e08 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart @@ -80,7 +80,7 @@ class LocalizationLocalRepository { required String module}) async { final query = sql.select(sql.localization).join([]) ..where( - buildAnd([ + buildOr([ sql.localization.locale.equals(locale), sql.localization.module.contains(module), ]), diff --git a/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart b/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart index f6ad795db..64515f74e 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart @@ -68,7 +68,7 @@ class _LanguageSelectionPageState extends State { } else if (!state.loading && isDialogVisible) { isDialogVisible = false; DigitComponentsUtils() - .hideLocalizationLoadingDialog(context); + .hideDialog(context); } if (!state.loading && !isDialogVisible && @@ -103,20 +103,6 @@ class _LanguageSelectionPageState extends State { } }, builder: (context, localizationState) { - if (localizationState.loading && - !isDialogVisible && - mounted && - ModalRoute.of(context)?.isCurrent == true) { - WidgetsBinding.instance.addPostFrameCallback((_) { - isDialogVisible = true; - DigitComponentsUtils().showLocationCapturingDialog( - context, - '', - DigitSyncDialogType.inProgress, - ); - }); - } - return localizationModulesList != null ? DigitLanguageCard( digitRowCardItems: languages.map((e) { diff --git a/apps/health_campaign_field_worker_app/lib/pages/login.dart b/apps/health_campaign_field_worker_app/lib/pages/login.dart index 37ddf9c91..f0912efb5 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/login.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/login.dart @@ -26,7 +26,7 @@ class LoginPage extends LocalizedStatefulWidget { class _LoginPageState extends LocalizedState { var passwordVisible = false; - bool isPrivacyEnabled =false; + bool isPrivacyEnabled = false; static const _userId = 'userId'; static const _password = 'password'; static const _privacyCheck = 'privacyCheck'; @@ -126,30 +126,30 @@ class _LoginPageState extends LocalizedState { suffix: buildPasswordVisibility(), ), BlocBuilder( + AppInitializationState>( builder: (context, initState) { - final privacyPolicyJson = initState.maybeWhen( - initialized: - (AppConfiguration appConfiguration, _, __) => - appConfiguration.privacyPolicyConfig, - orElse: () => null); - if(privacyPolicyJson?.active==false){ - return const SizedBox.shrink(); - } - setState(() { - isPrivacyEnabled = true; - }); - return PrivacyComponent( - privacyPolicy: privacyPolicyJson, - formControlName: _privacyCheck, - text: localizations - .translate(i18.privacyPolicy.privacyNoticeText), - linkText: localizations.translate( - i18.privacyPolicy.privacyPolicyLinkText), - validationMessage: localizations.translate( - i18.privacyPolicy.privacyPolicyValidationText), - ); - }), + final privacyPolicyJson = initState.maybeWhen( + initialized: + (AppConfiguration appConfiguration, _, __) => + appConfiguration.privacyPolicyConfig, + orElse: () => null); + if (privacyPolicyJson?.active == false) { + return const SizedBox.shrink(); + } + + form.control(_privacyCheck).setValidators([Validators.requiredTrue]); + form.control(_privacyCheck).updateValueAndValidity(); + return PrivacyComponent( + privacyPolicy: privacyPolicyJson, + formControlName: _privacyCheck, + text: localizations + .translate(i18.privacyPolicy.privacyNoticeText), + linkText: localizations.translate( + i18.privacyPolicy.privacyPolicyLinkText), + validationMessage: localizations.translate( + i18.privacyPolicy.privacyPolicyValidationText), + ); + }), const SizedBox(height: 16), DigitElevatedButton( onPressed: () { @@ -159,16 +159,16 @@ class _LoginPageState extends LocalizedState { FocusManager.instance.primaryFocus?.unfocus(); context.read().add( - AuthLoginEvent( - userId: - (form.control(_userId).value as String) - .trim(), - password: - (form.control(_password).value as String) - .trim(), - tenantId: envConfig.variables.tenantId, - ), - ); + AuthLoginEvent( + userId: + (form.control(_userId).value as String) + .trim(), + password: + (form.control(_password).value as String) + .trim(), + tenantId: envConfig.variables.tenantId, + ), + ); }, child: Center( child: Text( @@ -224,17 +224,16 @@ class _LoginPageState extends LocalizedState { } FormGroup buildForm() => fb.group({ - _userId: FormControl( - value: '', - validators: [Validators.required], - ), - _password: FormControl( - validators: [Validators.required], - value: '', - ), - _privacyCheck: FormControl( - validators: [Validators.requiredTrue], - value: isPrivacyEnabled ? false : true, - ) - }); + _userId: FormControl( + value: '', + validators: [Validators.required], + ), + _password: FormControl( + validators: [Validators.required], + value: '', + ), + _privacyCheck: FormControl( + value: false, + ) + }); } diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 7ae4bdb06..c96f0b5fd 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -69,10 +69,10 @@ packages: dependency: "direct main" description: name: attendance_management - sha256: b14b538f2d2900c5e4f6a12fefef615d08905398338deb5ea6d67f45f52c8ef0 + sha256: f1b4373e8d0d9f8227ede0d25d4141f0d16d18ac2525c0347b844098cdab080f url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.0.2+1" audioplayers: dependency: "direct main" description: @@ -341,10 +341,10 @@ packages: dependency: "direct main" description: name: closed_household - sha256: "7d3ae93e5702df79b1fb88720bba30fe4b8a603dd2b128a53bbf77d0a8a1dba4" + sha256: d216dbc8e263c9be576e3747ceee9715a6a96e6056a7a812847fb44589f515e8 url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.0.1+1" code_builder: dependency: transitive description: @@ -428,9 +428,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../../packages/dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "9b887d24c05459c027a92391869d4c10b440e00f" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -492,25 +494,26 @@ packages: dependency: "direct main" description: name: digit_components - sha256: "01320d4c72829045e789d1a56e23ff2bd85dad6a1831d27bd507a1acaceae17e" + sha256: "9cca4d9a546037080afe02b6ade82fdf01574e11f5656ad12120fd6966578616" url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.0.1+1" digit_data_model: dependency: "direct main" description: - path: "../../packages/digit_data_model" - relative: true - source: path - version: "1.0.4" + name: digit_data_model + sha256: "0b81e96636496b56b4f9c5d918690a17d8985d6b131e0ab54968eb5471ee4f54" + url: "https://pub.dev" + source: hosted + version: "1.0.3+1" digit_dss: dependency: "direct main" description: name: digit_dss - sha256: c21036372bb4dcb2b888024b488f8817997b9514e442c6f5c1ccf89d97537636 + sha256: "32e2173ae52e7fd9fb53fa435fb21466248029366584f44a0c0f2c6836267a98" url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.0.1" digit_firebase_services: dependency: "direct main" description: @@ -522,10 +525,10 @@ packages: dependency: "direct main" description: name: digit_scanner - sha256: "1f1fe3ca8f038a3c93cd52491cf72c0b0e45c88b14580243d47eac59672e67ea" + sha256: "9862c4885465bb1942e36dc9b42596c201648db9b0f5ffb8ad768e2409fc2742" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.3+1" digit_showcase: dependency: "direct main" description: @@ -1117,10 +1120,10 @@ packages: dependency: "direct main" description: name: inventory_management - sha256: "5bad99832b9d828839f69e0288ad8fe06188e6504301c298f5dc3258cf677c75" + sha256: "1a5976ab807666629704f559730d5418e1c723fed898df2cc6e7d9807f813b6f" url: "https://pub.dev" source: hosted - version: "1.0.3+1" + version: "1.0.3+2" io: dependency: transitive description: @@ -1533,17 +1536,18 @@ packages: dependency: "direct main" description: name: referral_reconciliation - sha256: "27f03bb51743cb9b25419fc1089507ee95693270a43233b92194298b1f87779c" + sha256: "80d5b93164e4f8337fa757fcb75a1e85b88ffbb760e731ca24496a0cae2aef38" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.0.2+1" registration_delivery: dependency: "direct main" description: - path: "../../packages/registration_delivery" - relative: true - source: path - version: "1.0.3" + name: registration_delivery + sha256: a6a88665bbf1fa5dce5b864d66992ff9c885b2a3cd898d37f349f1be03cf4086 + url: "https://pub.dev" + source: hosted + version: "1.0.3+1" remove_emoji_input_formatter: dependency: transitive description: diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 50aba039c..c2d6d352d 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -18,7 +18,7 @@ dependencies: sqlite3_flutter_libs: ^0.5.10 path_provider: ^2.0.11 path: ^1.8.2 - digit_components: ^1.0.1 + digit_components: ^1.0.1+1 auto_route: ^7.8.4 flutter_bloc: ^8.1.1 collection: ^1.16.0 @@ -65,15 +65,15 @@ dependencies: disk_space: ^0.2.1 google_mlkit_barcode_scanning: ^0.10.0 camera: ^0.10.5+7 - attendance_management: ^1.0.2 - digit_scanner: ^1.0.3 - inventory_management: ^1.0.3+1 - referral_reconciliation: ^1.0.2 - digit_data_model: ^1.0.3 - registration_delivery: ^1.0.3 + attendance_management: ^1.0.2+1 + digit_scanner: ^1.0.3+1 + inventory_management: ^1.0.3+2 + referral_reconciliation: ^1.0.2+1 + digit_data_model: ^1.0.3+1 + registration_delivery: ^1.0.3+1 disable_battery_optimization: ^1.1.1 - digit_dss: ^1.0.0 - closed_household: ^1.0.1 + digit_dss: ^1.0.1 + closed_household: ^1.0.1+1 dev_dependencies: flutter_test: @@ -88,7 +88,11 @@ dev_dependencies: auto_route_generator: ^7.3.2 bloc_test: ^9.1.0 mocktail: ^1.0.2 - dart_mappable_builder: ^4.2.0 + dart_mappable_builder: + git: + url: https://github.com/egovernments/health-campaign-field-worker-app/ + ref: master + path: ./packages/dart_mappable_builder isar_generator: ^3.0.5 flutter_launcher_icons: ^0.13.1 hrk_flutter_test_batteries: ^0.8.0 diff --git a/packages/attendance_management/CHANGELOG.md b/packages/attendance_management/CHANGELOG.md index db47a0cc4..98e21c57e 100644 --- a/packages/attendance_management/CHANGELOG.md +++ b/packages/attendance_management/CHANGELOG.md @@ -1,3 +1,6 @@ +## 1.0.2+1 +* Updated Digit_components + ## 1.0.2 * Capturing location on attendance submit * Pagination issue fix to fetch all attendees diff --git a/packages/attendance_management/lib/pages/mark_attendance.dart b/packages/attendance_management/lib/pages/mark_attendance.dart index 3e63719f5..4f18cc14a 100644 --- a/packages/attendance_management/lib/pages/mark_attendance.dart +++ b/packages/attendance_management/lib/pages/mark_attendance.dart @@ -448,7 +448,7 @@ class _MarkAttendancePageState extends State { localizations.translate(i18.common.locationCapturing), DigitSyncDialogType.inProgress); Future.delayed(const Duration(seconds: 2), () async { - DigitComponentsUtils().hideLocationDialog(context); + DigitComponentsUtils().hideDialog(context); state.maybeWhen( orElse: () {}, loaded: ( diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index 77b186a33..92c10cb88 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -276,9 +276,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "9b887d24c05459c027a92391869d4c10b440e00f" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -316,18 +318,18 @@ packages: dependency: "direct main" description: name: digit_components - sha256: "90e12017934343a197a0c25bec00e5fc28e19cfbf11e522798cc39719609612c" + sha256: "9cca4d9a546037080afe02b6ade82fdf01574e11f5656ad12120fd6966578616" url: "https://pub.dev" source: hosted - version: "1.0.0+9" + version: "1.0.1+1" digit_data_model: dependency: "direct main" description: name: digit_data_model - sha256: "5559c3e652a24f3d24f324d275399f6e864ca5671285386516b94fdf9fe8724c" + sha256: "0b81e96636496b56b4f9c5d918690a17d8985d6b131e0ab54968eb5471ee4f54" url: "https://pub.dev" source: hosted - version: "1.0.3-dev.3" + version: "1.0.3+1" dio: dependency: "direct main" description: diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index 1838be863..6dde92634 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -1,6 +1,6 @@ name: attendance_management description: Digit UI attendance management specification - This tool is designed for tracking user attendance with customizable session counts per day. -version: 1.0.2 +version: 1.0.2+1 homepage: "https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/attendance_management" repository: "https://github.com/egovernments/health-campaign-field-worker-app" @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0+9 + digit_components: ^1.0.1+1 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 @@ -27,7 +27,7 @@ dependencies: path: ^1.8.2 drift_db_viewer: ^2.0.0 auto_route: ^7.8.4 - digit_data_model: ^1.0.3 + digit_data_model: ^1.0.3+1 connectivity_plus: ^5.0.2 collection: ^1.16.0 location: ^5.0.0 @@ -41,7 +41,11 @@ dev_dependencies: freezed: ^2.2.0 bloc_test: ^9.1.0 mocktail: ^1.0.2 - dart_mappable_builder: ^4.2.0 + dart_mappable_builder: + git: + url: https://github.com/egovernments/health-campaign-field-worker-app/ + ref: master + path: ./packages/dart_mappable_builder drift_dev: ^2.14.1 auto_route_generator: ^7.3.2 diff --git a/packages/closed_household/CHANGELOG.md b/packages/closed_household/CHANGELOG.md index 53f7cc70c..a3f6ce26a 100644 --- a/packages/closed_household/CHANGELOG.md +++ b/packages/closed_household/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.1+1 + +* Updated digit_data_model, digit_components and registration_delivery + ## 1.0.1 * Updated digit_data_model and registration_delivery diff --git a/packages/closed_household/lib/pages/closed_household_details.dart b/packages/closed_household/lib/pages/closed_household_details.dart index 5058973c6..58f3454ff 100644 --- a/packages/closed_household/lib/pages/closed_household_details.dart +++ b/packages/closed_household/lib/pages/closed_household_details.dart @@ -62,7 +62,7 @@ class ClosedHouseholdDetailsPageState if (locationState.accuracy != null) { //Hide the dialog after 1 seconds Future.delayed(const Duration(seconds: 1), () { - DigitComponentsUtils().hideLocationDialog(context); + DigitComponentsUtils().hideDialog(context); }); } final lat = locationState.latitude; diff --git a/packages/closed_household/pubspec.yaml b/packages/closed_household/pubspec.yaml index 26dd71e26..6dccba824 100644 --- a/packages/closed_household/pubspec.yaml +++ b/packages/closed_household/pubspec.yaml @@ -1,6 +1,6 @@ name: closed_household description: This package enables health facility workers to mark household closed and update. -version: 1.0.1 +version: 1.0.1+1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/develop/packages/closed_household repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0+9 + digit_components: ^1.0.1+1 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 @@ -32,7 +32,7 @@ dependencies: digit_scanner: ^1.0.2 gs1_barcode_parser: ^1.0.5 auto_route: ^7.8.4 - digit_data_model: ^1.0.3 + digit_data_model: ^1.0.3+1 package_info_plus: ^5.0.1 digit_showcase: ^1.0.0 collection: ^1.16.0 @@ -40,7 +40,7 @@ dependencies: stream_transform: ^2.1.0 async: ^2.11.0 formula_parser: ^2.0.1 - registration_delivery: ^1.0.3 + registration_delivery: ^1.0.3+1 dev_dependencies: @@ -53,7 +53,11 @@ dev_dependencies: drift_dev: ^2.14.1 bloc_test: ^9.1.0 mocktail: ^1.0.2 - dart_mappable_builder: ^4.2.0 + dart_mappable_builder: + git: + url: https://github.com/egovernments/health-campaign-field-worker-app/ + ref: master + path: ./packages/dart_mappable_builder auto_route_generator: ^7.3.2 flutter: diff --git a/packages/digit_components/CHANGELOG.md b/packages/digit_components/CHANGELOG.md index 8ad9209a7..7270235e4 100644 --- a/packages/digit_components/CHANGELOG.md +++ b/packages/digit_components/CHANGELOG.md @@ -1,3 +1,6 @@ +## 1.0.1+1 +* Changed similar dialogs to a common hideDialog + ## 1.0.1 * Added new loader dialog diff --git a/packages/digit_components/example/pubspec.lock b/packages/digit_components/example/pubspec.lock index be10b5ed0..5f036b9d0 100644 --- a/packages/digit_components/example/pubspec.lock +++ b/packages/digit_components/example/pubspec.lock @@ -231,7 +231,7 @@ packages: path: ".." relative: true source: path - version: "1.0.0+8" + version: "1.0.1+1" easy_stepper: dependency: transitive description: diff --git a/packages/digit_components/lib/utils/utils.dart b/packages/digit_components/lib/utils/utils.dart index 3fecc38ee..51dc9ae8c 100644 --- a/packages/digit_components/lib/utils/utils.dart +++ b/packages/digit_components/lib/utils/utils.dart @@ -2,7 +2,7 @@ import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:flutter/material.dart'; class DigitComponentsUtils { - void hideLocationDialog(BuildContext context) { // [TODO: create it as a common method since it has the similar behaviour of hideLocalizationLoadingDialog] + void hideDialog(BuildContext context) { Navigator.of( context, rootNavigator: true, @@ -20,15 +20,6 @@ class DigitComponentsUtils { ); } - void hideLocalizationLoadingDialog(BuildContext context) { - Navigator.of( - context, - rootNavigator: true, - ).popUntil( - (route) => route is! PopupRoute, - ); - } - void showLocalizationLoadingDialog( BuildContext context, DigitSyncDialogType dialogType) { DigitSyncDialog.show( diff --git a/packages/digit_components/lib/widgets/atoms/selection_card.dart b/packages/digit_components/lib/widgets/atoms/selection_card.dart index af4d81244..1a9191c2f 100644 --- a/packages/digit_components/lib/widgets/atoms/selection_card.dart +++ b/packages/digit_components/lib/widgets/atoms/selection_card.dart @@ -43,9 +43,7 @@ class _SelectionBoxState extends State> { } if (widget.equalWidthOptions) { - WidgetsBinding.instance.addPostFrameCallback((_) { _calculateMaxOptionWidth(); - }); } } @@ -53,9 +51,7 @@ class _SelectionBoxState extends State> { void didChangeDependencies() { super.didChangeDependencies(); if (widget.equalWidthOptions) { - WidgetsBinding.instance.addPostFrameCallback((_) { _calculateMaxOptionWidth(); - }); } } @override @@ -71,15 +67,17 @@ class _SelectionBoxState extends State> { void _calculateMaxOptionWidth() { double maxWidth = 0; - final textTheme = Theme.of(context).textTheme; for (var option in widget.options) { final textPainter = TextPainter( text: TextSpan( text: widget.valueMapper(option), - style: textTheme.bodyLarge?.copyWith( + style: TextStyle( + fontFamily: 'Roboto', + fontSize: 16, + fontWeight: FontWeight.w400, color: const DigitColors().woodsmokeBlack, - ), + ) ), textDirection: TextDirection.ltr, ); diff --git a/packages/digit_components/pubspec.yaml b/packages/digit_components/pubspec.yaml index 65366bafa..901f6c61c 100644 --- a/packages/digit_components/pubspec.yaml +++ b/packages/digit_components/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_components description: Digit UI Design specification Flutter widgets. Import this package by adding digit_components in respective pubspec.yaml dependencies. -version: 1.0.1 +version: 1.0.1+1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_components repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/digit_data_model/CHANGELOG.md b/packages/digit_data_model/CHANGELOG.md index b7dde2faa..49f954173 100644 --- a/packages/digit_data_model/CHANGELOG.md +++ b/packages/digit_data_model/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.3+1 + +* Updated oplog transactions to synchronous - fix for write transaction lock + ## 1.0.4-dev.3 * Updated oplog transactions to synchronous - fix for write transaction lock diff --git a/packages/digit_data_model/pubspec.yaml b/packages/digit_data_model/pubspec.yaml index 33cc2ddbe..96cf93b28 100644 --- a/packages/digit_data_model/pubspec.yaml +++ b/packages/digit_data_model/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_data_model description: The digit_data_model package is a data modeling library. It defines various classes, enums, and functions. -version: 1.0.4-dev.3 +version: 1.0.3+1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_data_model repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/digit_dss/CHANGELOG.md b/packages/digit_dss/CHANGELOG.md index a9616d31f..968f59396 100644 --- a/packages/digit_dss/CHANGELOG.md +++ b/packages/digit_dss/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.0.1 +* Bug fixes +* Added enums for dss charts +* Fixed chart delete issue +* Updated digit_scanner package, digit_components, digit_data_model, attendance_management + ## 1.0.0 * Initial DSS Dashboard Release supporting metric and table charts diff --git a/packages/digit_dss/lib/blocs/dashboard.dart b/packages/digit_dss/lib/blocs/dashboard.dart index 7f69c15e6..b41be19c3 100644 --- a/packages/digit_dss/lib/blocs/dashboard.dart +++ b/packages/digit_dss/lib/blocs/dashboard.dart @@ -202,13 +202,16 @@ class DashboardBloc extends Bloc { .mapIndexed( (i, plot) => TableData( plot.symbol == DSSEnums.number.toValue() || - plot.symbol == DSSEnums.percentage.toValue() - ? plot.name == DSSEnums.lastSyncedTime.toValue() && - plot.symbol == DSSEnums.number.toValue() - ? DigitDateUtils.getDateFromTimestamp(int.parse( - double.parse(plot.value.toString()) - .toInt() - .toString())) + plot.symbol == DSSEnums.percentage.toValue() || + plot.symbol == DSSEnums.amount.toValue() + ? plot.name == DSSEnums.lastSyncedTime.toValue() + ? double.tryParse(plot.value.toString())?.toInt() != + 0 + ? DigitDateUtils.getDateFromTimestamp(int.parse( + double.parse(plot.value.toString()) + .toInt() + .toString())) + : '' : double.parse(plot.value.toString()) == double.parse(plot.value.toString()).toInt() ? double.parse(plot.value.toString()) diff --git a/packages/digit_dss/lib/data/remote/dashboard.dart b/packages/digit_dss/lib/data/remote/dashboard.dart index f601d6037..8f6a2a321 100644 --- a/packages/digit_dss/lib/data/remote/dashboard.dart +++ b/packages/digit_dss/lib/data/remote/dashboard.dart @@ -46,7 +46,7 @@ class DashboardRemoteRepository { .projectIdEqualTo(projectId) .visualizationCodeEqualTo(dashboardResponse.visualizationCode) .chartTypeEqualTo(dashboardResponse.chartType) - .deleteAll(); // Delete existing data matching the project ID, visualization code, and chart type + .deleteAllSync(); // Delete existing data matching the project ID, visualization code, and chart type }); final data = diff --git a/packages/digit_dss/lib/models/entities/dss_enums.dart b/packages/digit_dss/lib/models/entities/dss_enums.dart index cf03db3eb..7b741986b 100644 --- a/packages/digit_dss/lib/models/entities/dss_enums.dart +++ b/packages/digit_dss/lib/models/entities/dss_enums.dart @@ -31,6 +31,8 @@ enum DSSEnums { uuid, @MappableValue("projectId") projectId, - @MappableValue("Lastsyncedtime") + @MappableValue("Last synced time") lastSyncedTime, + @MappableValue("amount") + amount, } diff --git a/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart b/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart index 8844c362f..ce46f6324 100644 --- a/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart +++ b/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart @@ -51,8 +51,10 @@ class DSSEnumsMapper extends EnumMapper { return DSSEnums.uuid; case "projectId": return DSSEnums.projectId; - case "Lastsyncedtime": + case "Last synced time": return DSSEnums.lastSyncedTime; + case "amount": + return DSSEnums.amount; default: throw MapperException.unknownEnumValue(value); } @@ -88,7 +90,9 @@ class DSSEnumsMapper extends EnumMapper { case DSSEnums.projectId: return "projectId"; case DSSEnums.lastSyncedTime: - return "Lastsyncedtime"; + return "Last synced time"; + case DSSEnums.amount: + return "amount"; } } } diff --git a/packages/digit_dss/pubspec.yaml b/packages/digit_dss/pubspec.yaml index 2ead774a0..a5496ae33 100644 --- a/packages/digit_dss/pubspec.yaml +++ b/packages/digit_dss/pubspec.yaml @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0+9 + digit_components: ^1.0.1+1 flutter_bloc: ^8.1.1 reactive_forms: ^14.1.0 intl: ^0.18.0 @@ -19,14 +19,14 @@ dependencies: flutter_svg: ^2.0.8 dart_mappable: ^4.2.0 auto_route: ^7.8.4 - digit_data_model: ^1.0.3 + digit_data_model: ^1.0.3+1 package_info_plus: ^5.0.1 collection: ^1.16.0 async: ^2.11.0 dio: ^5.4.2+1 isar: ^3.0.5 isar_flutter_libs: ^3.0.5 - attendance_management: ^1.0.2 + attendance_management: ^1.0.2+1 dev_dependencies: flutter_test: diff --git a/packages/digit_scanner/CHANGELOG.md b/packages/digit_scanner/CHANGELOG.md index 398996315..be2b5caae 100644 --- a/packages/digit_scanner/CHANGELOG.md +++ b/packages/digit_scanner/CHANGELOG.md @@ -1,3 +1,6 @@ +## 1.0.3+1 +* Updated Digit_Components + ## 1.0.3 * Manual code entry fixes with stable version diff --git a/packages/digit_scanner/example/pubspec.lock b/packages/digit_scanner/example/pubspec.lock index dea8707d4..600e45214 100644 --- a/packages/digit_scanner/example/pubspec.lock +++ b/packages/digit_scanner/example/pubspec.lock @@ -309,17 +309,17 @@ packages: dependency: transitive description: name: digit_components - sha256: "01320d4c72829045e789d1a56e23ff2bd85dad6a1831d27bd507a1acaceae17e" + sha256: "9cca4d9a546037080afe02b6ade82fdf01574e11f5656ad12120fd6966578616" url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.0.1+1" digit_scanner: dependency: "direct main" description: path: ".." relative: true source: path - version: "1.0.3" + version: "1.0.3+1" easy_stepper: dependency: transitive description: diff --git a/packages/digit_scanner/pubspec.lock b/packages/digit_scanner/pubspec.lock index 4f77af87f..465d76a5f 100644 --- a/packages/digit_scanner/pubspec.lock +++ b/packages/digit_scanner/pubspec.lock @@ -321,6 +321,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" + dart_mappable: + dependency: transitive + description: + name: dart_mappable + sha256: "47269caf2060533c29b823ff7fa9706502355ffcb61e7f2a374e3a0fb2f2c3f0" + url: "https://pub.dev" + source: hosted + version: "4.2.2" dart_style: dependency: transitive description: @@ -329,6 +337,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.6" + db_viewer: + dependency: transitive + description: + name: db_viewer + sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" + url: "https://pub.dev" + source: hosted + version: "1.1.0" diff_match_patch: dependency: transitive description: @@ -340,11 +356,49 @@ packages: digit_components: dependency: "direct main" description: - name: digit_components - sha256: "53ee8c0a7c992c0e8d1c9c867b6cf1d52e1728200f4b4436943a5d6c5e4984c3" + path: "../digit_components" + relative: true + source: path + version: "1.0.1+1" + digit_data_model: + dependency: "direct overridden" + description: + path: "../digit_data_model" + relative: true + source: path + version: "1.0.3+1" + dio: + dependency: transitive + description: + name: dio + sha256: "0dfb6b6a1979dac1c1245e17cef824d7b452ea29bd33d3467269f9bef3715fb0" url: "https://pub.dev" source: hosted - version: "1.0.0+2" + version: "5.6.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + drift: + dependency: transitive + description: + name: drift + sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + url: "https://pub.dev" + source: hosted + version: "2.15.0" + drift_db_viewer: + dependency: transitive + description: + name: drift_db_viewer + sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" easy_stepper: dependency: transitive description: @@ -632,6 +686,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" + isar: + dependency: transitive + description: + name: isar + sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" + isar_flutter_libs: + dependency: transitive + description: + name: isar_flutter_libs + sha256: bc6768cc4b9c61aabff77152e7f33b4b17d2fc93134f7af1c3dd51500fe8d5e8 + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" js: dependency: transitive description: @@ -740,10 +810,10 @@ packages: dependency: "direct dev" description: name: mocktail - sha256: "80a996cd9a69284b3dc521ce185ffe9150cde69767c2d3a0720147d93c0cef53" + sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "1.0.4" nested: dependency: transitive description: @@ -936,6 +1006,14 @@ packages: url: "https://pub.dev" source: hosted version: "14.3.0" + recase: + dependency: transitive + description: + name: recase + sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 + url: "https://pub.dev" + source: hosted + version: "4.1.0" remove_emoji_input_formatter: dependency: transitive description: @@ -1021,14 +1099,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" - sprintf: + sqlite3: dependency: transitive description: - name: sprintf - sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + name: sqlite3 + sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "2.4.0" + sqlite3_flutter_libs: + dependency: transitive + description: + name: sqlite3_flutter_libs + sha256: "62bbb4073edbcdf53f40c80775f33eea01d301b7b81417e5b3fb7395416258c1" + url: "https://pub.dev" + source: hosted + version: "0.5.24" stack_trace: dependency: transitive description: @@ -1109,6 +1195,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + type_plus: + dependency: transitive + description: + name: type_plus + sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 + url: "https://pub.dev" + source: hosted + version: "2.1.1" typed_data: dependency: transitive description: @@ -1121,10 +1215,10 @@ packages: dependency: transitive description: name: uuid - sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8" + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" url: "https://pub.dev" source: hosted - version: "4.4.0" + version: "3.0.7" vector_graphics: dependency: transitive description: diff --git a/packages/digit_scanner/pubspec.yaml b/packages/digit_scanner/pubspec.yaml index bd1f19549..0e08b4c1b 100644 --- a/packages/digit_scanner/pubspec.yaml +++ b/packages/digit_scanner/pubspec.yaml @@ -17,7 +17,7 @@ repository: https://github.com/egovernments/health-campaign-field-worker-app # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.0.3 +version: 1.0.3+1 environment: sdk: '>=2.19.4 <3.9.0' @@ -38,7 +38,7 @@ dependencies: google_mlkit_barcode_scanning: ^0.10.0 camera: ^0.10.5+7 gs1_barcode_parser: ^1.0.5 - digit_components: ^1.0.0+9 + digit_components: ^1.0.1+1 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 overlay_builder: ^1.1.0 @@ -57,7 +57,7 @@ dev_dependencies: json_serializable: ^6.4.0 freezed: ^2.2.0 bloc_test: ^9.1.0 - mocktail: ^0.3.0 + mocktail: ^1.0.2 build_runner: ^2.4.7 auto_route_generator: ^7.3.2 diff --git a/packages/inventory_management/CHANGELOG.md b/packages/inventory_management/CHANGELOG.md index e4659fe04..930c5526b 100644 --- a/packages/inventory_management/CHANGELOG.md +++ b/packages/inventory_management/CHANGELOG.md @@ -1,5 +1,9 @@ ## 1.0.3+1 +* Updated digit_scanner package, digit_components, digit_data_model + +## 1.0.3+1 + * Updated scanner package ## 1.0.3 diff --git a/packages/inventory_management/lib/pages/record_stock/stock_details.dart b/packages/inventory_management/lib/pages/record_stock/stock_details.dart index 66c1bcae9..ac1373925 100644 --- a/packages/inventory_management/lib/pages/record_stock/stock_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/stock_details.dart @@ -305,7 +305,7 @@ class StockDetailsPageState extends LocalizedState { const Duration(seconds: 2), () async { DigitComponentsUtils() - .hideLocationDialog(context); + .hideDialog(context); final bloc = context.read(); diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index 2773eed0f..8135fff11 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -388,9 +388,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "9b887d24c05459c027a92391869d4c10b440e00f" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -420,26 +422,26 @@ packages: dependency: "direct main" description: name: digit_components - sha256: "90e12017934343a197a0c25bec00e5fc28e19cfbf11e522798cc39719609612c" + sha256: "9cca4d9a546037080afe02b6ade82fdf01574e11f5656ad12120fd6966578616" url: "https://pub.dev" source: hosted - version: "1.0.0+9" + version: "1.0.1+1" digit_data_model: dependency: "direct main" description: name: digit_data_model - sha256: e1ea907e9cb7d521341325ac1b1b98fad8bd5e5ca1bab7f7c18ed02ccd2f2c2b + sha256: "0b81e96636496b56b4f9c5d918690a17d8985d6b131e0ab54968eb5471ee4f54" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.3+1" digit_scanner: dependency: "direct main" description: name: digit_scanner - sha256: "1f1fe3ca8f038a3c93cd52491cf72c0b0e45c88b14580243d47eac59672e67ea" + sha256: "9862c4885465bb1942e36dc9b42596c201648db9b0f5ffb8ad768e2409fc2742" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.3+1" dio: dependency: transitive description: diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index ce46fe227..29c0c7f95 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -1,6 +1,6 @@ name: inventory_management description: This package offers inventory management features, allowing users to view stock reports and perform inventory resource reconciliation. -version: 1.0.3+1 +version: 1.0.3+2 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/inventory_management repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0+9 + digit_components: ^1.0.1+1 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 @@ -29,10 +29,10 @@ dependencies: uuid: ^3.0.6 recase: ^4.1.0 pluto_grid: ^7.0.1 - digit_scanner: ^1.0.3 + digit_scanner: ^1.0.3+1 gs1_barcode_parser: ^1.0.5 auto_route: ^7.8.4 - digit_data_model: ^1.0.3 + digit_data_model: ^1.0.3+1 collection: ^1.16.0 dev_dependencies: @@ -45,7 +45,11 @@ dev_dependencies: drift_dev: ^2.14.1 bloc_test: ^9.1.0 mocktail: ^1.0.2 - dart_mappable_builder: ^4.2.0 + dart_mappable_builder: + git: + url: https://github.com/egovernments/health-campaign-field-worker-app/ + ref: master + path: ./packages/dart_mappable_builder auto_route_generator: ^7.3.2 flutter: diff --git a/packages/referral_reconciliation/CHANGELOG.md b/packages/referral_reconciliation/CHANGELOG.md index b2a40b4d1..00372f19e 100644 --- a/packages/referral_reconciliation/CHANGELOG.md +++ b/packages/referral_reconciliation/CHANGELOG.md @@ -1,32 +1,36 @@ -## 0.0.0-dev.1 +## 1.0.2+1 -Referral Reconciliation Initial Release +* Updated digit_scanner package, digit_components, digit_data_model -## 0.0.0-dev.2 +## 1.0.2 -Updated digit_components version for dropdown fix +* Bug fixes and enhancements +* Added try catch for local repository to handle db lock -## 0.0.0-dev.3 +## 1.0.1 -Updated digit_data_model to latest version +* Upgraded digit_scanner, digit_data_model, and digit_components to their latest versions -## 0.0.0-dev.4 +## 1.0.0 -Updated digit_scanner to latest version +* Initial stable version ## 0.0.0-dev.5 -Updated digit_scanner to latest version +* Updated digit_scanner to the latest version -## 1.0.0 +## 0.0.0-dev.4 -* Initial stable version +* Updated digit_scanner to the latest version -## 1.0.1 +## 0.0.0-dev.3 -* Upgraded digit_scanner,digit_data_model and digit_components to latest versions +* Updated digit_data_model to the latest version -## 1.0.2 +## 0.0.0-dev.2 -* Bug fixes and enhancements -* Added try catch for local repository to handle db lock +* Updated digit_components to fix a dropdown issue + +## 0.0.0-dev.1 + +Referral Reconciliation Initial Release \ No newline at end of file diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index fc9b2461d..60830a342 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -388,9 +388,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "9b887d24c05459c027a92391869d4c10b440e00f" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -419,26 +421,27 @@ packages: digit_components: dependency: "direct main" description: - path: "../digit_components" - relative: true - source: path - version: "1.0.0+3" + name: digit_components + sha256: "9cca4d9a546037080afe02b6ade82fdf01574e11f5656ad12120fd6966578616" + url: "https://pub.dev" + source: hosted + version: "1.0.1+1" digit_data_model: dependency: "direct main" description: name: digit_data_model - sha256: "0e1ec8e4d2776fcc4a8118ac85043b8876466ec7399c14880f3d585ad3586ef6" + sha256: "0b81e96636496b56b4f9c5d918690a17d8985d6b131e0ab54968eb5471ee4f54" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.0.3+1" digit_scanner: dependency: "direct main" description: name: digit_scanner - sha256: a040c9c413436aeb953fdea3bc99ef618641189b06e8f155d84ac83ba8d40fd1 + sha256: "9862c4885465bb1942e36dc9b42596c201648db9b0f5ffb8ad768e2409fc2742" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.0.3+1" dio: dependency: transitive description: diff --git a/packages/referral_reconciliation/pubspec.yaml b/packages/referral_reconciliation/pubspec.yaml index 41e881be3..4813ae9df 100644 --- a/packages/referral_reconciliation/pubspec.yaml +++ b/packages/referral_reconciliation/pubspec.yaml @@ -1,6 +1,6 @@ name: referral_reconciliation description: "This module will enable the health facility supervisors to track referrals made by on-field health workers to different health facilities digitally via the Digit HCM app" -version: 1.0.2 +version: 1.0.2+1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/referral_reconciliation repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0+2 + digit_components: ^1.0.1+1 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 reactive_forms: ^14.1.0 @@ -28,12 +28,12 @@ dependencies: uuid: ^3.0.6 recase: ^4.1.0 pluto_grid: ^7.0.1 - digit_scanner: ^1.0.2 + digit_scanner: ^1.0.3+1 group_radio_button: ^1.3.0 flutter_keyboard_visibility: ^5.4.0 auto_route: ^7.8.4 collection: ^1.16.0 - digit_data_model: ^1.0.2 + digit_data_model: ^1.0.3+1 stream_transform: ^2.1.0 dev_dependencies: @@ -47,7 +47,11 @@ dev_dependencies: drift_dev: ^2.14.1 bloc_test: ^9.1.0 mocktail: ^1.0.2 - dart_mappable_builder: ^4.2.0 + dart_mappable_builder: + git: + url: https://github.com/egovernments/health-campaign-field-worker-app/ + ref: master + path: ./packages/dart_mappable_builder auto_route_generator: ^7.3.2 flutter: diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration_delivery/CHANGELOG.md index 1fb632260..10e985d7e 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration_delivery/CHANGELOG.md @@ -1,3 +1,10 @@ +## 1.0.3+1 + +* Bug Fixes - + * Reload fix after edit + * Project Beneficiary create for all members if not registered for campaign +* Updated digit_scanner package, digit_components, digit_data_model + ## 1.0.3 * IRS Campaign changes diff --git a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart index fce9aa60a..ba5a9736b 100644 --- a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart +++ b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart @@ -1,6 +1,7 @@ // GENERATED using mason_cli import 'dart:async'; +import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/utils/typedefs.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -430,11 +431,11 @@ class BeneficiaryRegistrationBloc final projectBeneficiary = await projectBeneficiaryRepository.search( ProjectBeneficiarySearchModel( projectId: [RegistrationDeliverySingleton().projectId.toString()], - beneficiaryClientReferenceId: beneficiaryType == - BeneficiaryType - .individual ? getIndividualBeneficiaryClientReferenceId( - value.individualModel) - : [event.household.clientReferenceId], + beneficiaryClientReferenceId: + beneficiaryType == BeneficiaryType.individual + ? getIndividualBeneficiaryClientReferenceId( + value.individualModel) + : [event.household.clientReferenceId], ), ); @@ -456,36 +457,38 @@ class BeneficiaryRegistrationBloc } } } else { - await projectBeneficiaryRepository.create(ProjectBeneficiaryModel( - rowVersion: 1, - clientReferenceId: IdGen.i.identifier, - dateOfRegistration: DateTime.now().millisecondsSinceEpoch, - projectId: RegistrationDeliverySingleton().projectId, - tenantId: RegistrationDeliverySingleton().tenantId, - beneficiaryClientReferenceId: - beneficiaryType == BeneficiaryType.individual - ? value.individualModel.first.clientReferenceId - : value.householdModel.clientReferenceId, - clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid - .toString(), - createdTime: DateTime.now().millisecondsSinceEpoch, - lastModifiedTime: DateTime.now().millisecondsSinceEpoch, - lastModifiedBy: RegistrationDeliverySingleton() - .loggedInUserUuid - .toString(), - ), - auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid - .toString(), - createdTime: DateTime.now().millisecondsSinceEpoch, - lastModifiedTime: DateTime.now().millisecondsSinceEpoch, - lastModifiedBy: RegistrationDeliverySingleton() - .loggedInUserUuid - .toString(), - ))); + for (var element in value.individualModel) { + await projectBeneficiaryRepository.create(ProjectBeneficiaryModel( + rowVersion: 1, + clientReferenceId: IdGen.i.identifier, + dateOfRegistration: DateTime.now().millisecondsSinceEpoch, + projectId: RegistrationDeliverySingleton().projectId, + tenantId: RegistrationDeliverySingleton().tenantId, + beneficiaryClientReferenceId: + beneficiaryType == BeneficiaryType.individual + ? element.clientReferenceId + : value.householdModel.clientReferenceId, + clientAuditDetails: ClientAuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid + .toString(), + createdTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: RegistrationDeliverySingleton() + .loggedInUserUuid + .toString(), + ), + auditDetails: AuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid + .toString(), + createdTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + lastModifiedBy: RegistrationDeliverySingleton() + .loggedInUserUuid + .toString(), + ))); + } } for (var element in value.individualModel) { @@ -569,6 +572,7 @@ class BeneficiaryRegistrationBloc emit(value.copyWith(loading: false)); emit(BeneficiaryRegistrationPersistedState( householdModel: value.householdModel, + projectBeneficiaryModel: value.projectBeneficiaryModel, )); } }, diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart index 16538f7fa..8a1980d7a 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart @@ -9,6 +9,7 @@ import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:registration_delivery/models/entities/registration_delivery_enums.dart'; import 'package:registration_delivery/utils/constants.dart'; import '../../router/registration_delivery_router.gm.dart'; @@ -68,9 +69,8 @@ class _BeneficiaryChecklistPageState state.mapOrNull( serviceDefinitionFetch: (value) { selectedServiceDefinition = value.serviceDefinitionList - .where((element) => element.code - .toString() - .contains('IRS.TRAINING_SUPERVISION.DISTRIBUTOR')) + .where((element) => element.code.toString().contains( + '${RegistrationDeliverySingleton().selectedProject!.name}.${RegistrationDeliveryEnums.iec.toValue()}')) .toList() .first; diff --git a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart index 475a50aa2..a8f8f6bd6 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart @@ -118,7 +118,7 @@ class DeliverInterventionPageState Future.delayed(const Duration(seconds: 2), () { // After delay, hide the initial dialog - DigitComponentsUtils().hideLocationDialog(context); + DigitComponentsUtils().hideDialog(context); handleCapturedLocationState( locationState, context, @@ -269,51 +269,82 @@ class DeliverInterventionPageState onPressed: isClicked ? null : () async { - final deliveredProducts = ((form.control(_resourceDeliveredKey) as FormArray).value as List); - final hasEmptyResources = hasEmptyOrNullResources(deliveredProducts); - final hasZeroQuantity = hasEmptyOrZeroQuantity(form); - final hasDuplicates = hasDuplicateResources(deliveredProducts, form); - - if (hasEmptyResources) { - await DigitToast.show( - context, - options: DigitToastOptions( - localizations.translate(i18.deliverIntervention.resourceDeliveredValidation), - true, - theme, - ), - ); - } else if (hasDuplicates) { - await DigitToast.show( - context, - options: DigitToastOptions( - localizations.translate(i18.deliverIntervention.resourceDuplicateValidation), - true, - theme, - ), - ); - } else if (hasZeroQuantity) { - await DigitToast.show( - context, - options: DigitToastOptions( - localizations.translate(i18.deliverIntervention.resourceCannotBeZero), - true, - theme, - ), - ); - } else { - context.read().add(const LoadLocationEvent()); - handleLocationState( - locationState, - context, - deliveryInterventionState, - form, - householdMemberWrapper, - projectBeneficiary!.first, - ); - } - }, - + final deliveredProducts = + ((form.control(_resourceDeliveredKey) + as FormArray) + .value + as List< + ProductVariantModel?>); + final hasEmptyResources = + hasEmptyOrNullResources( + deliveredProducts); + final hasZeroQuantity = + hasEmptyOrZeroQuantity( + form); + final hasDuplicates = + hasDuplicateResources( + deliveredProducts, + form); + + if (hasEmptyResources) { + await DigitToast + .show( + context, + options: + DigitToastOptions( + localizations + .translate(i18 + .deliverIntervention + .resourceDeliveredValidation), + true, + theme, + ), + ); + } else if (hasDuplicates) { + await DigitToast + .show( + context, + options: + DigitToastOptions( + localizations + .translate(i18 + .deliverIntervention + .resourceDuplicateValidation), + true, + theme, + ), + ); + } else if (hasZeroQuantity) { + await DigitToast + .show( + context, + options: + DigitToastOptions( + localizations + .translate(i18 + .deliverIntervention + .resourceCannotBeZero), + true, + theme, + ), + ); + } else { + context + .read< + LocationBloc>() + .add( + const LoadLocationEvent()); + handleLocationState( + locationState, + context, + deliveryInterventionState, + form, + householdMemberWrapper, + projectBeneficiary! + .first, + ); + } + }, child: Center( child: Text( localizations.translate( @@ -574,10 +605,12 @@ class DeliverInterventionPageState } bool hasEmptyOrZeroQuantity(FormGroup form) { - final quantityDistributedArray = form.control(_quantityDistributedKey) as FormArray; + final quantityDistributedArray = + form.control(_quantityDistributedKey) as FormArray; // Check if any quantity is zero or null - return quantityDistributedArray.value?.any((e) => e == 0 || e == null) ?? true; + return quantityDistributedArray.value?.any((e) => e == 0 || e == null) ?? + true; } bool hasEmptyOrNullResources(List deliveredProducts) { @@ -599,8 +632,10 @@ class DeliverInterventionPageState return true; } - bool hasDuplicateResources(List deliveredProducts, FormGroup form) { - final resourceDeliveredArray = form.control(_resourceDeliveredKey) as FormArray; + bool hasDuplicateResources( + List deliveredProducts, FormGroup form) { + final resourceDeliveredArray = + form.control(_resourceDeliveredKey) as FormArray; final Set uniqueProductIds = {}; for (int i = 0; i < resourceDeliveredArray.value!.length; i++) { @@ -617,7 +652,6 @@ class DeliverInterventionPageState return false; } - // ignore: long-parameter-list TaskModel _getTaskModel( BuildContext context, { diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index d5f340a05..61ca961b9 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -327,6 +327,9 @@ class _HouseholdOverviewPageState child: BlocBuilder( builder: (ctx, deliverInterventionState) { + + bool shouldShowStatus = beneficiaryType == BeneficiaryType.household; + return Column( children: [ DigitTableCard( @@ -350,6 +353,7 @@ class _HouseholdOverviewPageState .memberCountText, ): state.householdMemberWrapper .household?.memberCount, + if(shouldShowStatus) localizations.translate(i18 .beneficiaryDetails .status): localizations.translate( diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index 9833d6330..59a3eb206 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -81,7 +81,7 @@ class HouseholdLocationPageState extends LocalizedState { if (locationState.accuracy != null) { //Hide the dialog after 1 seconds Future.delayed(const Duration(seconds: 1), () { - DigitComponentsUtils().hideLocationDialog(context); + DigitComponentsUtils().hideDialog(context); }); } }); diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index b8e28a752..34ea6c862 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -68,7 +68,7 @@ class IndividualDetailsPageState extends LocalizedState { BeneficiaryRegistrationBloc, BeneficiaryRegistrationState>( listener: (context, state) { state.mapOrNull( - persisted: (value) { + persisted: (value) async { if (value.navigateToRoot) { final overviewBloc = context.read(); @@ -81,6 +81,10 @@ class IndividualDetailsPageState extends LocalizedState { BeneficiaryType.household, ), ); + + await overviewBloc.stream.firstWhere((element) => + element.loading == false && + element.householdMemberWrapper.household != null); HouseholdMemberWrapper memberWrapper = overviewBloc.state.householdMemberWrapper; final route = router.parent() as StackRouter; diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index aba4e9cae..95488a9b0 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -388,9 +388,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "9b887d24c05459c027a92391869d4c10b440e00f" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -420,26 +422,26 @@ packages: dependency: "direct main" description: name: digit_components - sha256: "90e12017934343a197a0c25bec00e5fc28e19cfbf11e522798cc39719609612c" + sha256: "9cca4d9a546037080afe02b6ade82fdf01574e11f5656ad12120fd6966578616" url: "https://pub.dev" source: hosted - version: "1.0.0+9" + version: "1.0.1+1" digit_data_model: dependency: "direct main" description: name: digit_data_model - sha256: e1ea907e9cb7d521341325ac1b1b98fad8bd5e5ca1bab7f7c18ed02ccd2f2c2b + sha256: "0b81e96636496b56b4f9c5d918690a17d8985d6b131e0ab54968eb5471ee4f54" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.3+1" digit_scanner: dependency: "direct main" description: name: digit_scanner - sha256: "1f1fe3ca8f038a3c93cd52491cf72c0b0e45c88b14580243d47eac59672e67ea" + sha256: "9862c4885465bb1942e36dc9b42596c201648db9b0f5ffb8ad768e2409fc2742" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.3+1" digit_showcase: dependency: "direct main" description: diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index 163e31601..b88722f63 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -1,6 +1,6 @@ name: registration_delivery description: This package enables health facility workers to register a household and individual members and deliver the resources. -version: 1.0.3 +version: 1.0.3+1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/registration_delivery repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0+9 + digit_components: ^1.0.1+1 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 @@ -29,10 +29,10 @@ dependencies: uuid: ^3.0.6 recase: ^4.1.0 pluto_grid: ^7.0.1 - digit_scanner: ^1.0.3 + digit_scanner: ^1.0.3+1 gs1_barcode_parser: ^1.0.5 auto_route: ^7.8.4 - digit_data_model: ^1.0.3 + digit_data_model: ^1.0.3+1 package_info_plus: ^5.0.1 digit_showcase: ^1.0.0 collection: ^1.16.0 @@ -51,7 +51,11 @@ dev_dependencies: drift_dev: ^2.14.1 bloc_test: ^9.1.0 mocktail: ^1.0.2 - dart_mappable_builder: ^4.2.0 + dart_mappable_builder: + git: + url: https://github.com/egovernments/health-campaign-field-worker-app/ + ref: master + path: ./packages/dart_mappable_builder auto_route_generator: ^7.3.2 flutter: From 9ad9ea9386bf7408fd38eb1fce029691c85ac009 Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Fri, 30 Aug 2024 17:13:27 +0530 Subject: [PATCH 086/241] removed dialog closing function from language page (#560) Co-authored-by: rachana-egov --- .../lib/pages/language_selection.dart | 4 ---- 1 file changed, 4 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart b/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart index 64515f74e..d14118731 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart @@ -28,10 +28,6 @@ class _LanguageSelectionPageState extends State { @override void dispose() { - if (isDialogVisible) { - // Close the dialog if it's visible - DigitComponentsUtils().hideLocalizationLoadingDialog(context); - } isDialogVisible = false; super.dispose(); } From 8d673c52c2c1fa3b18571427639939b1b606e62c Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Wed, 4 Sep 2024 12:53:04 +0530 Subject: [PATCH 087/241] pulled 6000 changes for pub upgrade updated with latest dev updated sync package - made the sync up to accept the datamodel type custom registry to modify --- .../lib/data/sync_registry.dart | 120 + .../lib/data/sync_service_mapper.dart | 199 +- .../lib/pages/login.dart | 90 +- .../lib/utils/constants.dart | 12 +- .../pubspec.lock | 31 +- .../pubspec.yaml | 2 +- packages/attendance_management/pubspec.lock | 15 +- packages/attendance_management/pubspec.yaml | 4 +- .../digit_components/example/pubspec.lock | 2 +- .../local_store/sql_store/sql_store.g.dart | 15681 ++++++++++++++++ packages/digit_data_model/pubspec.lock | 8 +- packages/digit_firebase_services/pubspec.lock | 56 +- packages/digit_scanner/example/pubspec.lock | 657 + packages/digit_scanner/pubspec.lock | 138 +- packages/digit_scanner/pubspec.yaml | 3 +- packages/forms_engine/pubspec.lock | 82 +- packages/forms_engine/pubspec.yaml | 6 +- .../lib/pages/record_stock/stock_details.dart | 2 +- packages/inventory_management/pubspec.lock | 23 +- packages/inventory_management/pubspec.yaml | 2 +- packages/referral_reconciliation/pubspec.lock | 23 +- packages/registration_delivery/pubspec.lock | 30 +- packages/registration_delivery/pubspec.yaml | 2 - .../lib/data/repositories/sync/sync_down.dart | 2 +- .../lib/data/repositories/sync/sync_up.dart | 223 +- .../lib/data/sync_entity_mapper_listener.dart | 4 +- .../sync_service/lib/data/sync_service.dart | 2 +- packages/sync_service/lib/utils/utils.dart | 12 +- pubspec.lock | 59 +- 29 files changed, 17011 insertions(+), 479 deletions(-) create mode 100644 apps/health_campaign_field_worker_app/lib/data/sync_registry.dart create mode 100644 packages/digit_scanner/example/pubspec.lock diff --git a/apps/health_campaign_field_worker_app/lib/data/sync_registry.dart b/apps/health_campaign_field_worker_app/lib/data/sync_registry.dart new file mode 100644 index 000000000..90f3675dc --- /dev/null +++ b/apps/health_campaign_field_worker_app/lib/data/sync_registry.dart @@ -0,0 +1,120 @@ +import 'package:digit_components/utils/app_logger.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:sync_service/data/repositories/sync/sync_up.dart'; + +class CustomSyncRegistry implements SyncUpOperation { + final RemoteRepository remote; + + CustomSyncRegistry(this.remote); + + @override + Future update(List entities, LocalRepository local) async { + await remote.bulkUpdate(entities); + } + + @override + Future delete(List entities, LocalRepository local) async { + await remote.bulkDelete(entities); + } + + @override + Future singleCreate(EntityModel entity, LocalRepository local) async { + await remote.singleCreate(entity); + } + + @override + Future create( + {required List> entry, + required List entities, + required LocalRepository local, + required MapEntry>> + operationGroupedEntity, + required MapEntry>> + typeGroupedEntity}) async { + switch (typeGroupedEntity.key) { + case DataModelType.complaints: + for (final entity in entities) { + if (remote is PgrServiceRemoteRepository && + entity is PgrServiceModel) { + final response = await remote.create(entity); + final responseData = response.data; + if (responseData is! Map) { + AppLogger.instance.error( + title: 'NetworkManager : PgrServiceRemoteRepository', + message: responseData, + stackTrace: StackTrace.current, + ); + continue; + } + + PgrServiceCreateResponseModel pgrServiceCreateResponseModel; + PgrComplaintResponseModel pgrComplaintModel; + try { + pgrServiceCreateResponseModel = + PgrServiceCreateResponseModelMapper.fromMap( + responseData, + ); + pgrComplaintModel = + pgrServiceCreateResponseModel.serviceWrappers.first; + } catch (e) { + rethrow; + } + + final service = pgrComplaintModel.service; + final serviceRequestId = service.serviceRequestId; + + if (serviceRequestId == null || serviceRequestId.isEmpty) { + AppLogger.instance.error( + title: 'NetworkManager : PgrServiceRemoteRepository', + message: 'Service Request ID is null', + stackTrace: StackTrace.current, + ); + continue; + } + + await local.markSyncedUp( + entry: entry.firstWhere((element) => + element.clientReferenceId == entity.clientReferenceId), + clientReferenceId: entity.clientReferenceId, + nonRecoverableError: entity.nonRecoverableError, + ); + + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serviceRequestId, + dataOperation: operationGroupedEntity.key, + rowVersion: entity.rowVersion, + ), + ); + + await local.update( + entity.copyWith( + serviceRequestId: serviceRequestId, + id: service.id, + applicationStatus: service.applicationStatus, + accountId: service.accountId, + ), + createOpLog: false, + ); + } + } + default: + await remote.bulkCreate(entities); + } + } + + @override + Future localMarkSyncUp(List> entity, + LocalRepository local) async { + for (final syncedEntity in entity) { + if (syncedEntity.type == DataModelType.complaints) continue; + await local.markSyncedUp( + entry: syncedEntity, + id: syncedEntity.id, + nonRecoverableError: syncedEntity.nonRecoverableError, + clientReferenceId: syncedEntity.clientReferenceId, + ); + } + } +} diff --git a/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart b/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart index bc715c8ee..903bebc8f 100644 --- a/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart +++ b/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart @@ -88,23 +88,42 @@ class SyncServiceMapper extends SyncEntityMapperListener { @override int getSyncCount(List opLogs) { int count = opLogs.where((element) { - switch (element.entityType) { - case DataModelType.household: - case DataModelType.individual: - case DataModelType.householdMember: - case DataModelType.projectBeneficiary: - case DataModelType.task: - case DataModelType.stock: - case DataModelType.stockReconciliation: - case DataModelType.service: - case DataModelType.complaints: - case DataModelType.sideEffect: - case DataModelType.referral: - case DataModelType.hFReferral: - case DataModelType.attendance: - return true; - default: - return false; + if (element.syncedDown == false && element.syncedUp == true) { + switch (element.entityType) { + case DataModelType.household: + case DataModelType.individual: + case DataModelType.householdMember: + case DataModelType.projectBeneficiary: + case DataModelType.task: + case DataModelType.stock: + case DataModelType.stockReconciliation: + case DataModelType.sideEffect: + case DataModelType.referral: + case DataModelType.hFReferral: + case DataModelType.attendance: + return true; + default: + return false; + } + } else { + switch (element.entityType) { + case DataModelType.household: + case DataModelType.individual: + case DataModelType.householdMember: + case DataModelType.projectBeneficiary: + case DataModelType.task: + case DataModelType.stock: + case DataModelType.stockReconciliation: + case DataModelType.service: + case DataModelType.complaints: + case DataModelType.sideEffect: + case DataModelType.referral: + case DataModelType.hFReferral: + case DataModelType.attendance: + return true; + default: + return false; + } } }).length; @@ -112,7 +131,7 @@ class SyncServiceMapper extends SyncEntityMapperListener { } @override - Future> entityResponse( + Future> syncDownEntityResponse( MapEntry>> typeGroupedEntity, MapEntry>> operationGroupedEntity, @@ -622,7 +641,7 @@ class SyncServiceMapper extends SyncEntityMapperListener { if (serverGeneratedId != null) { await local.opLogManager.updateServerGeneratedIds( model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId!, + clientReferenceId: entity.clientReferenceId, serverGeneratedId: serverGeneratedId, dataOperation: element.operation, rowVersion: rowVersion, @@ -692,71 +711,73 @@ class SyncServiceMapper extends SyncEntityMapperListener { break; - case DataModelType.complaints: - if (remote is! PgrServiceRemoteRepository) return responseEntities; - - final futures = entities - .whereType() - .map((e) => e.serviceRequestId) - .whereNotNull() - .map( - (e) { - final future = remote.searchWithoutClientReferenceId( - PgrServiceSearchModel( - serviceRequestId: e, - ), - ); - - return Future.sync(() => future); - }, - ); - - final resolvedFutures = await Future.wait(futures); - - responseEntities = resolvedFutures - .expand((element) => element) - .whereType() - // We only need serviceRequestId and application status - .map((e) => PgrServiceModel( - clientReferenceId: '', - tenantId: e.tenantId ?? '', - serviceCode: e.serviceCode ?? '', - description: e.description ?? '', - serviceRequestId: e.serviceRequestId, - applicationStatus: e.applicationStatus ?? - PgrServiceApplicationStatus.pendingAssignment, - user: PgrComplainantModel( - clientReferenceId: '', - tenantId: '', - complaintClientReferenceId: e.serviceRequestId ?? '', - ), - address: PgrAddressModel(), - )) - .toList(); - - for (var element in operationGroupedEntity.value) { - if (element.id == null) continue; - final entity = element.entity as PgrServiceModel; - final responseEntity = - responseEntities.whereType().firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId, - ); - - final serverGeneratedId = responseEntity?.serviceRequestId; - final rowVersion = responseEntity?.rowVersion; - - if (serverGeneratedId != null) { - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } - } - break; + // Note: Uncomment the following code block to enable complaints sync down + + // case DataModelType.complaints: + // if (remote is! PgrServiceRemoteRepository) break; + // + // final futures = entities + // .whereType() + // .map((e) => e.serviceRequestId) + // .whereNotNull() + // .map( + // (e) { + // final future = remote.searchWithoutClientReferenceId( + // PgrServiceSearchModel( + // serviceRequestId: e, + // ), + // ); + // + // return Future.sync(() => future); + // }, + // ); + // + // final resolvedFutures = await Future.wait(futures); + // + // responseEntities = resolvedFutures + // .expand((element) => element) + // .whereType() + // // We only need serviceRequestId and application status + // .map((e) => PgrServiceModel( + // clientReferenceId: '', + // tenantId: e.tenantId ?? '', + // serviceCode: e.serviceCode ?? '', + // description: e.description ?? '', + // serviceRequestId: e.serviceRequestId, + // applicationStatus: e.applicationStatus ?? + // PgrServiceApplicationStatus.pendingAssignment, + // user: PgrComplainantModel( + // clientReferenceId: '', + // tenantId: '', + // complaintClientReferenceId: e.serviceRequestId ?? '', + // ), + // address: PgrAddressModel(), + // )) + // .toList(); + // + // for (var element in operationGroupedEntity.value) { + // if (element.id == null) continue; + // final entity = element.entity as PgrServiceModel; + // final responseEntity = + // responseEntities.whereType().firstWhereOrNull( + // (e) => e.clientReferenceId == entity.clientReferenceId, + // ); + // + // final serverGeneratedId = responseEntity?.serviceRequestId; + // final rowVersion = responseEntity?.rowVersion; + // + // if (serverGeneratedId != null) { + // await local.opLogManager.updateServerGeneratedIds( + // model: UpdateServerGeneratedIdModel( + // clientReferenceId: entity.clientReferenceId, + // serverGeneratedId: serverGeneratedId, + // dataOperation: element.operation, + // rowVersion: rowVersion, + // ), + // ); + // } + // } + // break; default: break; @@ -766,7 +787,7 @@ class SyncServiceMapper extends SyncEntityMapperListener { } @override - EntityModel updatedEntity(EntityModel entity, OpLogEntry e, + EntityModel updatedEntity(EntityModel entity, OpLogEntry entry, String? serverGeneratedId) { var updatedEntity = entity; @@ -776,7 +797,7 @@ class SyncServiceMapper extends SyncEntityMapperListener { const individualAddressIdKey = 'individualAddressId'; if (updatedEntity is HouseholdModel) { - final addressId = e.additionalIds.firstWhereOrNull( + final addressId = entry.additionalIds.firstWhereOrNull( (element) { return element.idType == householdAddressIdKey; }, @@ -790,13 +811,13 @@ class SyncServiceMapper extends SyncEntityMapperListener { } if (updatedEntity is IndividualModel) { - final identifierId = e.additionalIds.firstWhereOrNull( + final identifierId = entry.additionalIds.firstWhereOrNull( (element) { return element.idType == individualIdentifierIdKey; }, )?.id; - final addressId = e.additionalIds.firstWhereOrNull( + final addressId = entry.additionalIds.firstWhereOrNull( (element) { return element.idType == individualAddressIdKey; }, @@ -817,7 +838,7 @@ class SyncServiceMapper extends SyncEntityMapperListener { } if (updatedEntity is TaskModel) { - final resourceId = e.additionalIds + final resourceId = entry.additionalIds .firstWhereOrNull( (element) => element.idType == taskResourceIdKey, ) diff --git a/apps/health_campaign_field_worker_app/lib/pages/login.dart b/apps/health_campaign_field_worker_app/lib/pages/login.dart index f0912efb5..21e73b804 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/login.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/login.dart @@ -126,30 +126,32 @@ class _LoginPageState extends LocalizedState { suffix: buildPasswordVisibility(), ), BlocBuilder( + AppInitializationState>( builder: (context, initState) { - final privacyPolicyJson = initState.maybeWhen( - initialized: - (AppConfiguration appConfiguration, _, __) => - appConfiguration.privacyPolicyConfig, - orElse: () => null); - if (privacyPolicyJson?.active == false) { - return const SizedBox.shrink(); - } + final privacyPolicyJson = initState.maybeWhen( + initialized: + (AppConfiguration appConfiguration, _, __) => + appConfiguration.privacyPolicyConfig, + orElse: () => null); + if (privacyPolicyJson?.active == false) { + return const SizedBox.shrink(); + } - form.control(_privacyCheck).setValidators([Validators.requiredTrue]); - form.control(_privacyCheck).updateValueAndValidity(); - return PrivacyComponent( - privacyPolicy: privacyPolicyJson, - formControlName: _privacyCheck, - text: localizations - .translate(i18.privacyPolicy.privacyNoticeText), - linkText: localizations.translate( - i18.privacyPolicy.privacyPolicyLinkText), - validationMessage: localizations.translate( - i18.privacyPolicy.privacyPolicyValidationText), - ); - }), + form + .control(_privacyCheck) + .setValidators([Validators.requiredTrue]); + form.control(_privacyCheck).updateValueAndValidity(); + return PrivacyComponent( + privacyPolicy: privacyPolicyJson, + formControlName: _privacyCheck, + text: localizations + .translate(i18.privacyPolicy.privacyNoticeText), + linkText: localizations.translate( + i18.privacyPolicy.privacyPolicyLinkText), + validationMessage: localizations.translate( + i18.privacyPolicy.privacyPolicyValidationText), + ); + }), const SizedBox(height: 16), DigitElevatedButton( onPressed: () { @@ -159,16 +161,16 @@ class _LoginPageState extends LocalizedState { FocusManager.instance.primaryFocus?.unfocus(); context.read().add( - AuthLoginEvent( - userId: - (form.control(_userId).value as String) - .trim(), - password: - (form.control(_password).value as String) - .trim(), - tenantId: envConfig.variables.tenantId, - ), - ); + AuthLoginEvent( + userId: + (form.control(_userId).value as String) + .trim(), + password: + (form.control(_password).value as String) + .trim(), + tenantId: envConfig.variables.tenantId, + ), + ); }, child: Center( child: Text( @@ -224,16 +226,16 @@ class _LoginPageState extends LocalizedState { } FormGroup buildForm() => fb.group({ - _userId: FormControl( - value: '', - validators: [Validators.required], - ), - _password: FormControl( - validators: [Validators.required], - value: '', - ), - _privacyCheck: FormControl( - value: false, - ) - }); + _userId: FormControl( + value: '', + validators: [Validators.required], + ), + _password: FormControl( + validators: [Validators.required], + value: '', + ), + _privacyCheck: FormControl( + value: false, + ) + }); } diff --git a/apps/health_campaign_field_worker_app/lib/utils/constants.dart b/apps/health_campaign_field_worker_app/lib/utils/constants.dart index f16c9b2cc..3e4ef9101 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/constants.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/constants.dart @@ -23,6 +23,7 @@ import '../data/local_store/no_sql/schema/row_versions.dart'; import '../data/local_store/no_sql/schema/service_registry.dart'; import '../data/repositories/remote/downsync.dart'; import '../data/sync_service_mapper.dart'; +import '../data/sync_registry.dart'; import '../firebase_options.dart'; import 'environment_config.dart'; import 'utils.dart'; @@ -275,9 +276,14 @@ class Constants { ReferralReconSingleton().setTenantId(envConfig.variables.tenantId); InventorySingleton().setTenantId(tenantId: envConfig.variables.tenantId); SyncServiceSingleton().setData( - syncDownRetryCount: envConfig.variables.syncDownRetryCount, - persistenceConfiguration: PersistenceConfiguration.offlineFirst, - entityMapper: SyncServiceMapper()); + syncDownRetryCount: envConfig.variables.syncDownRetryCount, + persistenceConfiguration: PersistenceConfiguration.offlineFirst, + entityMapper: SyncServiceMapper(), + ); + SyncServiceSingleton().setRegistries(SyncServiceRegistry()); + SyncServiceSingleton().registries?.registerSyncRegistries({ + DataModelType.complaints: (remote) => CustomSyncRegistry(remote), + }); } } diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 76252500a..9d20b5411 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -71,15 +71,15 @@ packages: path: "../../packages/attendance_management" relative: true source: path - version: "1.0.2" + version: "1.0.2+1" audioplayers: dependency: transitive description: name: audioplayers - sha256: "752039d6aa752597c98ec212e9759519061759e402e7da59a511f39d43aa07d2" + sha256: c346ba5a39dc208f1bab55fc239855f573d69b0e832402114bf0b793622adc4d url: "https://pub.dev" source: hosted - version: "6.0.0" + version: "6.1.0" audioplayers_android: dependency: transitive description: @@ -116,10 +116,10 @@ packages: dependency: transitive description: name: audioplayers_web - sha256: db8fc420dadf80da18e2286c18e746fb4c3b2c5adbf0c963299dde046828886d + sha256: "3609bdf0e05e66a3d9750ee40b1e37f2a622c4edb796cc600b53a90a30a2ace4" url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.0.1" audioplayers_windows: dependency: transitive description: @@ -342,7 +342,7 @@ packages: path: "../../packages/closed_household" relative: true source: path - version: "1.0.1" + version: "1.0.1+1" code_builder: dependency: transitive description: @@ -492,14 +492,14 @@ packages: path: "../../packages/digit_components" relative: true source: path - version: "1.0.1" + version: "1.0.1+1" digit_data_model: dependency: "direct main" description: path: "../../packages/digit_data_model" relative: true source: path - version: "1.0.1" + version: "1.0.3+1" digit_dss: dependency: "direct main" description: @@ -520,14 +520,13 @@ packages: path: "../../packages/digit_scanner" relative: true source: path - version: "1.0.3" + version: "1.0.3+1" digit_showcase: dependency: "direct main" description: - name: digit_showcase - sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_showcase" + relative: true + source: path version: "1.0.0" dio: dependency: "direct main" @@ -1114,7 +1113,7 @@ packages: path: "../../packages/inventory_management" relative: true source: path - version: "1.0.1" + version: "1.0.3+2" io: dependency: transitive description: @@ -1545,14 +1544,14 @@ packages: path: "../../packages/referral_reconciliation" relative: true source: path - version: "1.0.2" + version: "1.0.2+1" registration_delivery: dependency: "direct main" description: path: "../../packages/registration_delivery" relative: true source: path - version: "1.0.1" + version: "1.0.3+1" remove_emoji_input_formatter: dependency: transitive description: diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index efd3ddd85..325a20285 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -18,7 +18,7 @@ dependencies: sqlite3_flutter_libs: ^0.5.11+1 path_provider: ^2.1.3 path: ^1.9.0 - digit_components: ^1.0.0+1+1 + digit_components: ^1.0.0+1 auto_route: ^8.1.3 flutter_bloc: ^8.1.5 collection: ^1.18.0 diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index 10adab8eb..81eba4b48 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -260,11 +260,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - name: dart_mappable_builder - sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e - url: "https://pub.dev" - source: hosted - version: "4.2.3" + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.0" dart_style: dependency: transitive description: @@ -295,14 +294,14 @@ packages: path: "../digit_components" relative: true source: path - version: "1.0.1" + version: "1.0.1+1" digit_data_model: dependency: "direct main" description: path: "../digit_data_model" relative: true source: path - version: "1.0.1" + version: "1.0.3+1" dio: dependency: "direct main" description: @@ -932,7 +931,7 @@ packages: source: hosted version: "2.1.1" reactive_forms: - dependency: transitive + dependency: "direct main" description: name: reactive_forms sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index 5df752054..9fef63afa 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -1,6 +1,6 @@ name: attendance_management description: Digit UI attendance management specification - This tool is designed for tracking user attendance with customizable session counts per day. -version: 1.0.2+1+1 +version: 1.0.2+1 homepage: "https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/attendance_management" repository: "https://github.com/egovernments/health-campaign-field-worker-app" @@ -30,7 +30,7 @@ dependencies: path: ^1.8.2 drift_db_viewer: ^2.0.0 digit_data_model: ^1.0.3+1 - connectivity_plus: ^5.0.2 + reactive_forms: ^17.0.0 dev_dependencies: flutter_test: diff --git a/packages/digit_components/example/pubspec.lock b/packages/digit_components/example/pubspec.lock index 8c841a817..0e4b56c89 100644 --- a/packages/digit_components/example/pubspec.lock +++ b/packages/digit_components/example/pubspec.lock @@ -231,7 +231,7 @@ packages: path: ".." relative: true source: path - version: "1.0.1" + version: "1.0.1+1" easy_stepper: dependency: transitive description: diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart index 3c37e452b..b6dd1502e 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart @@ -38968,6 +38968,7 @@ class LocalizationCompanion extends UpdateCompanion { abstract class _$LocalSqlDataStore extends GeneratedDatabase { _$LocalSqlDataStore(QueryExecutor e) : super(e); + _$LocalSqlDataStoreManager get managers => _$LocalSqlDataStoreManager(this); late final $AttendanceRegisterTable attendanceRegister = $AttendanceRegisterTable(this); late final $AttendanceTable attendance = $AttendanceTable(this); @@ -39164,3 +39165,15683 @@ abstract class _$LocalSqlDataStore extends GeneratedDatabase { localizationModule ]; } + +typedef $$AttendanceRegisterTableInsertCompanionBuilder + = AttendanceRegisterCompanion Function({ + Value id, + required String tenantId, + required String registerNumber, + required String name, + required String referenceId, + required String serviceCode, + required String status, + Value startDate, + Value endDate, + Value additionalFields, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value isDeleted, + Value rowVersion, + Value rowid, +}); +typedef $$AttendanceRegisterTableUpdateCompanionBuilder + = AttendanceRegisterCompanion Function({ + Value id, + Value tenantId, + Value registerNumber, + Value name, + Value referenceId, + Value serviceCode, + Value status, + Value startDate, + Value endDate, + Value additionalFields, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value isDeleted, + Value rowVersion, + Value rowid, +}); + +class $$AttendanceRegisterTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $AttendanceRegisterTable, + AttendanceRegisterData, + $$AttendanceRegisterTableFilterComposer, + $$AttendanceRegisterTableOrderingComposer, + $$AttendanceRegisterTableProcessedTableManager, + $$AttendanceRegisterTableInsertCompanionBuilder, + $$AttendanceRegisterTableUpdateCompanionBuilder> { + $$AttendanceRegisterTableTableManager( + _$LocalSqlDataStore db, $AttendanceRegisterTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$AttendanceRegisterTableFilterComposer(ComposerState(db, table)), + orderingComposer: $$AttendanceRegisterTableOrderingComposer( + ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$AttendanceRegisterTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value tenantId = const Value.absent(), + Value registerNumber = const Value.absent(), + Value name = const Value.absent(), + Value referenceId = const Value.absent(), + Value serviceCode = const Value.absent(), + Value status = const Value.absent(), + Value startDate = const Value.absent(), + Value endDate = const Value.absent(), + Value additionalFields = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value rowid = const Value.absent(), + }) => + AttendanceRegisterCompanion( + id: id, + tenantId: tenantId, + registerNumber: registerNumber, + name: name, + referenceId: referenceId, + serviceCode: serviceCode, + status: status, + startDate: startDate, + endDate: endDate, + additionalFields: additionalFields, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + isDeleted: isDeleted, + rowVersion: rowVersion, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + required String tenantId, + required String registerNumber, + required String name, + required String referenceId, + required String serviceCode, + required String status, + Value startDate = const Value.absent(), + Value endDate = const Value.absent(), + Value additionalFields = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value rowid = const Value.absent(), + }) => + AttendanceRegisterCompanion.insert( + id: id, + tenantId: tenantId, + registerNumber: registerNumber, + name: name, + referenceId: referenceId, + serviceCode: serviceCode, + status: status, + startDate: startDate, + endDate: endDate, + additionalFields: additionalFields, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + isDeleted: isDeleted, + rowVersion: rowVersion, + rowid: rowid, + ), + )); +} + +class $$AttendanceRegisterTableProcessedTableManager + extends ProcessedTableManager< + _$LocalSqlDataStore, + $AttendanceRegisterTable, + AttendanceRegisterData, + $$AttendanceRegisterTableFilterComposer, + $$AttendanceRegisterTableOrderingComposer, + $$AttendanceRegisterTableProcessedTableManager, + $$AttendanceRegisterTableInsertCompanionBuilder, + $$AttendanceRegisterTableUpdateCompanionBuilder> { + $$AttendanceRegisterTableProcessedTableManager(super.$state); +} + +class $$AttendanceRegisterTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $AttendanceRegisterTable> { + $$AttendanceRegisterTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get registerNumber => $state.composableBuilder( + column: $state.table.registerNumber, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get name => $state.composableBuilder( + column: $state.table.name, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get referenceId => $state.composableBuilder( + column: $state.table.referenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get serviceCode => $state.composableBuilder( + column: $state.table.serviceCode, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get status => $state.composableBuilder( + column: $state.table.status, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get startDate => $state.composableBuilder( + column: $state.table.startDate, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get endDate => $state.composableBuilder( + column: $state.table.endDate, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$AttendanceRegisterTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $AttendanceRegisterTable> { + $$AttendanceRegisterTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get registerNumber => $state.composableBuilder( + column: $state.table.registerNumber, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get name => $state.composableBuilder( + column: $state.table.name, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get referenceId => $state.composableBuilder( + column: $state.table.referenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get serviceCode => $state.composableBuilder( + column: $state.table.serviceCode, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get status => $state.composableBuilder( + column: $state.table.status, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get startDate => $state.composableBuilder( + column: $state.table.startDate, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get endDate => $state.composableBuilder( + column: $state.table.endDate, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$AttendanceTableInsertCompanionBuilder = AttendanceCompanion Function({ + Value id, + Value clientReferenceId, + required String tenantId, + required String registerId, + required String individualId, + Value time, + Value status, + Value type, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditCreatedBy, + Value auditModifiedBy, + Value auditModifiedTime, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value uploadToServer, + Value rowid, +}); +typedef $$AttendanceTableUpdateCompanionBuilder = AttendanceCompanion Function({ + Value id, + Value clientReferenceId, + Value tenantId, + Value registerId, + Value individualId, + Value time, + Value status, + Value type, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditCreatedBy, + Value auditModifiedBy, + Value auditModifiedTime, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value uploadToServer, + Value rowid, +}); + +class $$AttendanceTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $AttendanceTable, + AttendanceData, + $$AttendanceTableFilterComposer, + $$AttendanceTableOrderingComposer, + $$AttendanceTableProcessedTableManager, + $$AttendanceTableInsertCompanionBuilder, + $$AttendanceTableUpdateCompanionBuilder> { + $$AttendanceTableTableManager(_$LocalSqlDataStore db, $AttendanceTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$AttendanceTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$AttendanceTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$AttendanceTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value clientReferenceId = const Value.absent(), + Value tenantId = const Value.absent(), + Value registerId = const Value.absent(), + Value individualId = const Value.absent(), + Value time = const Value.absent(), + Value status = const Value.absent(), + Value type = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value uploadToServer = const Value.absent(), + Value rowid = const Value.absent(), + }) => + AttendanceCompanion( + id: id, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + registerId: registerId, + individualId: individualId, + time: time, + status: status, + type: type, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditCreatedBy: auditCreatedBy, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + uploadToServer: uploadToServer, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + Value clientReferenceId = const Value.absent(), + required String tenantId, + required String registerId, + required String individualId, + Value time = const Value.absent(), + Value status = const Value.absent(), + Value type = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value uploadToServer = const Value.absent(), + Value rowid = const Value.absent(), + }) => + AttendanceCompanion.insert( + id: id, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + registerId: registerId, + individualId: individualId, + time: time, + status: status, + type: type, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditCreatedBy: auditCreatedBy, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + uploadToServer: uploadToServer, + rowid: rowid, + ), + )); +} + +class $$AttendanceTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $AttendanceTable, + AttendanceData, + $$AttendanceTableFilterComposer, + $$AttendanceTableOrderingComposer, + $$AttendanceTableProcessedTableManager, + $$AttendanceTableInsertCompanionBuilder, + $$AttendanceTableUpdateCompanionBuilder> { + $$AttendanceTableProcessedTableManager(super.$state); +} + +class $$AttendanceTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $AttendanceTable> { + $$AttendanceTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get registerId => $state.composableBuilder( + column: $state.table.registerId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get individualId => $state.composableBuilder( + column: $state.table.individualId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get time => $state.composableBuilder( + column: $state.table.time, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get status => $state.composableBuilder( + column: $state.table.status, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get type => $state.composableBuilder( + column: $state.table.type, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get uploadToServer => $state.composableBuilder( + column: $state.table.uploadToServer, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$AttendanceTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $AttendanceTable> { + $$AttendanceTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get registerId => $state.composableBuilder( + column: $state.table.registerId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get individualId => $state.composableBuilder( + column: $state.table.individualId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get time => $state.composableBuilder( + column: $state.table.time, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get status => $state.composableBuilder( + column: $state.table.status, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get type => $state.composableBuilder( + column: $state.table.type, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get uploadToServer => $state.composableBuilder( + column: $state.table.uploadToServer, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$AttendeeTableInsertCompanionBuilder = AttendeeCompanion Function({ + Value id, + required String tenantId, + required String registerId, + required String individualId, + Value status, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditCreatedBy, + Value auditModifiedBy, + Value auditModifiedTime, + Value enrollmentDate, + Value denrollmentDate, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$AttendeeTableUpdateCompanionBuilder = AttendeeCompanion Function({ + Value id, + Value tenantId, + Value registerId, + Value individualId, + Value status, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditCreatedBy, + Value auditModifiedBy, + Value auditModifiedTime, + Value enrollmentDate, + Value denrollmentDate, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$AttendeeTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $AttendeeTable, + AttendeeData, + $$AttendeeTableFilterComposer, + $$AttendeeTableOrderingComposer, + $$AttendeeTableProcessedTableManager, + $$AttendeeTableInsertCompanionBuilder, + $$AttendeeTableUpdateCompanionBuilder> { + $$AttendeeTableTableManager(_$LocalSqlDataStore db, $AttendeeTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$AttendeeTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$AttendeeTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$AttendeeTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value tenantId = const Value.absent(), + Value registerId = const Value.absent(), + Value individualId = const Value.absent(), + Value status = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value enrollmentDate = const Value.absent(), + Value denrollmentDate = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + AttendeeCompanion( + id: id, + tenantId: tenantId, + registerId: registerId, + individualId: individualId, + status: status, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditCreatedBy: auditCreatedBy, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + enrollmentDate: enrollmentDate, + denrollmentDate: denrollmentDate, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + required String tenantId, + required String registerId, + required String individualId, + Value status = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value enrollmentDate = const Value.absent(), + Value denrollmentDate = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + AttendeeCompanion.insert( + id: id, + tenantId: tenantId, + registerId: registerId, + individualId: individualId, + status: status, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditCreatedBy: auditCreatedBy, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + enrollmentDate: enrollmentDate, + denrollmentDate: denrollmentDate, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$AttendeeTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $AttendeeTable, + AttendeeData, + $$AttendeeTableFilterComposer, + $$AttendeeTableOrderingComposer, + $$AttendeeTableProcessedTableManager, + $$AttendeeTableInsertCompanionBuilder, + $$AttendeeTableUpdateCompanionBuilder> { + $$AttendeeTableProcessedTableManager(super.$state); +} + +class $$AttendeeTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $AttendeeTable> { + $$AttendeeTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get registerId => $state.composableBuilder( + column: $state.table.registerId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get individualId => $state.composableBuilder( + column: $state.table.individualId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get status => $state.composableBuilder( + column: $state.table.status, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get enrollmentDate => $state.composableBuilder( + column: $state.table.enrollmentDate, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get denrollmentDate => $state.composableBuilder( + column: $state.table.denrollmentDate, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$AttendeeTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $AttendeeTable> { + $$AttendeeTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get registerId => $state.composableBuilder( + column: $state.table.registerId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get individualId => $state.composableBuilder( + column: $state.table.individualId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get status => $state.composableBuilder( + column: $state.table.status, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get enrollmentDate => $state.composableBuilder( + column: $state.table.enrollmentDate, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get denrollmentDate => $state.composableBuilder( + column: $state.table.denrollmentDate, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$AddressTableInsertCompanionBuilder = AddressCompanion Function({ + Value id, + Value relatedClientReferenceId, + Value doorNo, + Value latitude, + Value longitude, + Value locationAccuracy, + Value addressLine1, + Value addressLine2, + Value landmark, + Value city, + Value pincode, + Value buildingName, + Value street, + Value boundaryType, + Value boundary, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value localityBoundaryCode, + Value localityBoundaryName, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value type, + Value additionalFields, + Value rowid, +}); +typedef $$AddressTableUpdateCompanionBuilder = AddressCompanion Function({ + Value id, + Value relatedClientReferenceId, + Value doorNo, + Value latitude, + Value longitude, + Value locationAccuracy, + Value addressLine1, + Value addressLine2, + Value landmark, + Value city, + Value pincode, + Value buildingName, + Value street, + Value boundaryType, + Value boundary, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value localityBoundaryCode, + Value localityBoundaryName, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value type, + Value additionalFields, + Value rowid, +}); + +class $$AddressTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $AddressTable, + Addres, + $$AddressTableFilterComposer, + $$AddressTableOrderingComposer, + $$AddressTableProcessedTableManager, + $$AddressTableInsertCompanionBuilder, + $$AddressTableUpdateCompanionBuilder> { + $$AddressTableTableManager(_$LocalSqlDataStore db, $AddressTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$AddressTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$AddressTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => $$AddressTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value relatedClientReferenceId = const Value.absent(), + Value doorNo = const Value.absent(), + Value latitude = const Value.absent(), + Value longitude = const Value.absent(), + Value locationAccuracy = const Value.absent(), + Value addressLine1 = const Value.absent(), + Value addressLine2 = const Value.absent(), + Value landmark = const Value.absent(), + Value city = const Value.absent(), + Value pincode = const Value.absent(), + Value buildingName = const Value.absent(), + Value street = const Value.absent(), + Value boundaryType = const Value.absent(), + Value boundary = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value localityBoundaryCode = const Value.absent(), + Value localityBoundaryName = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value type = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + AddressCompanion( + id: id, + relatedClientReferenceId: relatedClientReferenceId, + doorNo: doorNo, + latitude: latitude, + longitude: longitude, + locationAccuracy: locationAccuracy, + addressLine1: addressLine1, + addressLine2: addressLine2, + landmark: landmark, + city: city, + pincode: pincode, + buildingName: buildingName, + street: street, + boundaryType: boundaryType, + boundary: boundary, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + localityBoundaryCode: localityBoundaryCode, + localityBoundaryName: localityBoundaryName, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + type: type, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + Value relatedClientReferenceId = const Value.absent(), + Value doorNo = const Value.absent(), + Value latitude = const Value.absent(), + Value longitude = const Value.absent(), + Value locationAccuracy = const Value.absent(), + Value addressLine1 = const Value.absent(), + Value addressLine2 = const Value.absent(), + Value landmark = const Value.absent(), + Value city = const Value.absent(), + Value pincode = const Value.absent(), + Value buildingName = const Value.absent(), + Value street = const Value.absent(), + Value boundaryType = const Value.absent(), + Value boundary = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value localityBoundaryCode = const Value.absent(), + Value localityBoundaryName = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value type = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + AddressCompanion.insert( + id: id, + relatedClientReferenceId: relatedClientReferenceId, + doorNo: doorNo, + latitude: latitude, + longitude: longitude, + locationAccuracy: locationAccuracy, + addressLine1: addressLine1, + addressLine2: addressLine2, + landmark: landmark, + city: city, + pincode: pincode, + buildingName: buildingName, + street: street, + boundaryType: boundaryType, + boundary: boundary, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + localityBoundaryCode: localityBoundaryCode, + localityBoundaryName: localityBoundaryName, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + type: type, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$AddressTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $AddressTable, + Addres, + $$AddressTableFilterComposer, + $$AddressTableOrderingComposer, + $$AddressTableProcessedTableManager, + $$AddressTableInsertCompanionBuilder, + $$AddressTableUpdateCompanionBuilder> { + $$AddressTableProcessedTableManager(super.$state); +} + +class $$AddressTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $AddressTable> { + $$AddressTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get relatedClientReferenceId => + $state.composableBuilder( + column: $state.table.relatedClientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get doorNo => $state.composableBuilder( + column: $state.table.doorNo, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get latitude => $state.composableBuilder( + column: $state.table.latitude, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get longitude => $state.composableBuilder( + column: $state.table.longitude, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get locationAccuracy => $state.composableBuilder( + column: $state.table.locationAccuracy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get addressLine1 => $state.composableBuilder( + column: $state.table.addressLine1, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get addressLine2 => $state.composableBuilder( + column: $state.table.addressLine2, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get landmark => $state.composableBuilder( + column: $state.table.landmark, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get city => $state.composableBuilder( + column: $state.table.city, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get pincode => $state.composableBuilder( + column: $state.table.pincode, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get buildingName => $state.composableBuilder( + column: $state.table.buildingName, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get street => $state.composableBuilder( + column: $state.table.street, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get boundaryType => $state.composableBuilder( + column: $state.table.boundaryType, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get boundary => $state.composableBuilder( + column: $state.table.boundary, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get localityBoundaryCode => $state.composableBuilder( + column: $state.table.localityBoundaryCode, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get localityBoundaryName => $state.composableBuilder( + column: $state.table.localityBoundaryName, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnWithTypeConverterFilters get type => + $state.composableBuilder( + column: $state.table.type, + builder: (column, joinBuilders) => ColumnWithTypeConverterFilters( + column, + joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$AddressTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $AddressTable> { + $$AddressTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get relatedClientReferenceId => + $state.composableBuilder( + column: $state.table.relatedClientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get doorNo => $state.composableBuilder( + column: $state.table.doorNo, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get latitude => $state.composableBuilder( + column: $state.table.latitude, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get longitude => $state.composableBuilder( + column: $state.table.longitude, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get locationAccuracy => $state.composableBuilder( + column: $state.table.locationAccuracy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get addressLine1 => $state.composableBuilder( + column: $state.table.addressLine1, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get addressLine2 => $state.composableBuilder( + column: $state.table.addressLine2, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get landmark => $state.composableBuilder( + column: $state.table.landmark, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get city => $state.composableBuilder( + column: $state.table.city, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get pincode => $state.composableBuilder( + column: $state.table.pincode, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get buildingName => $state.composableBuilder( + column: $state.table.buildingName, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get street => $state.composableBuilder( + column: $state.table.street, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get boundaryType => $state.composableBuilder( + column: $state.table.boundaryType, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get boundary => $state.composableBuilder( + column: $state.table.boundary, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get localityBoundaryCode => $state.composableBuilder( + column: $state.table.localityBoundaryCode, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get localityBoundaryName => $state.composableBuilder( + column: $state.table.localityBoundaryName, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get type => $state.composableBuilder( + column: $state.table.type, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$NameTableInsertCompanionBuilder = NameCompanion Function({ + Value id, + Value individualClientReferenceId, + Value givenName, + Value familyName, + Value otherNames, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$NameTableUpdateCompanionBuilder = NameCompanion Function({ + Value id, + Value individualClientReferenceId, + Value givenName, + Value familyName, + Value otherNames, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$NameTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $NameTable, + NameData, + $$NameTableFilterComposer, + $$NameTableOrderingComposer, + $$NameTableProcessedTableManager, + $$NameTableInsertCompanionBuilder, + $$NameTableUpdateCompanionBuilder> { + $$NameTableTableManager(_$LocalSqlDataStore db, $NameTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$NameTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$NameTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => $$NameTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value individualClientReferenceId = const Value.absent(), + Value givenName = const Value.absent(), + Value familyName = const Value.absent(), + Value otherNames = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + NameCompanion( + id: id, + individualClientReferenceId: individualClientReferenceId, + givenName: givenName, + familyName: familyName, + otherNames: otherNames, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + Value individualClientReferenceId = const Value.absent(), + Value givenName = const Value.absent(), + Value familyName = const Value.absent(), + Value otherNames = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + NameCompanion.insert( + id: id, + individualClientReferenceId: individualClientReferenceId, + givenName: givenName, + familyName: familyName, + otherNames: otherNames, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$NameTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $NameTable, + NameData, + $$NameTableFilterComposer, + $$NameTableOrderingComposer, + $$NameTableProcessedTableManager, + $$NameTableInsertCompanionBuilder, + $$NameTableUpdateCompanionBuilder> { + $$NameTableProcessedTableManager(super.$state); +} + +class $$NameTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $NameTable> { + $$NameTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get individualClientReferenceId => $state + .composableBuilder( + column: $state.table.individualClientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get givenName => $state.composableBuilder( + column: $state.table.givenName, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get familyName => $state.composableBuilder( + column: $state.table.familyName, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get otherNames => $state.composableBuilder( + column: $state.table.otherNames, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$NameTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $NameTable> { + $$NameTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get individualClientReferenceId => + $state.composableBuilder( + column: $state.table.individualClientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get givenName => $state.composableBuilder( + column: $state.table.givenName, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get familyName => $state.composableBuilder( + column: $state.table.familyName, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get otherNames => $state.composableBuilder( + column: $state.table.otherNames, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$BoundaryTableInsertCompanionBuilder = BoundaryCompanion Function({ + Value code, + Value name, + Value label, + Value latitude, + Value longitude, + Value materializedPath, + Value auditCreatedBy, + Value boundaryNum, + Value auditCreatedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value rowid, +}); +typedef $$BoundaryTableUpdateCompanionBuilder = BoundaryCompanion Function({ + Value code, + Value name, + Value label, + Value latitude, + Value longitude, + Value materializedPath, + Value auditCreatedBy, + Value boundaryNum, + Value auditCreatedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value rowid, +}); + +class $$BoundaryTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $BoundaryTable, + BoundaryData, + $$BoundaryTableFilterComposer, + $$BoundaryTableOrderingComposer, + $$BoundaryTableProcessedTableManager, + $$BoundaryTableInsertCompanionBuilder, + $$BoundaryTableUpdateCompanionBuilder> { + $$BoundaryTableTableManager(_$LocalSqlDataStore db, $BoundaryTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$BoundaryTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$BoundaryTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$BoundaryTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value code = const Value.absent(), + Value name = const Value.absent(), + Value label = const Value.absent(), + Value latitude = const Value.absent(), + Value longitude = const Value.absent(), + Value materializedPath = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value boundaryNum = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value rowid = const Value.absent(), + }) => + BoundaryCompanion( + code: code, + name: name, + label: label, + latitude: latitude, + longitude: longitude, + materializedPath: materializedPath, + auditCreatedBy: auditCreatedBy, + boundaryNum: boundaryNum, + auditCreatedTime: auditCreatedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value code = const Value.absent(), + Value name = const Value.absent(), + Value label = const Value.absent(), + Value latitude = const Value.absent(), + Value longitude = const Value.absent(), + Value materializedPath = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value boundaryNum = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value rowid = const Value.absent(), + }) => + BoundaryCompanion.insert( + code: code, + name: name, + label: label, + latitude: latitude, + longitude: longitude, + materializedPath: materializedPath, + auditCreatedBy: auditCreatedBy, + boundaryNum: boundaryNum, + auditCreatedTime: auditCreatedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + rowid: rowid, + ), + )); +} + +class $$BoundaryTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $BoundaryTable, + BoundaryData, + $$BoundaryTableFilterComposer, + $$BoundaryTableOrderingComposer, + $$BoundaryTableProcessedTableManager, + $$BoundaryTableInsertCompanionBuilder, + $$BoundaryTableUpdateCompanionBuilder> { + $$BoundaryTableProcessedTableManager(super.$state); +} + +class $$BoundaryTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $BoundaryTable> { + $$BoundaryTableFilterComposer(super.$state); + ColumnFilters get code => $state.composableBuilder( + column: $state.table.code, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get name => $state.composableBuilder( + column: $state.table.name, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get label => $state.composableBuilder( + column: $state.table.label, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get latitude => $state.composableBuilder( + column: $state.table.latitude, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get longitude => $state.composableBuilder( + column: $state.table.longitude, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get materializedPath => $state.composableBuilder( + column: $state.table.materializedPath, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get boundaryNum => $state.composableBuilder( + column: $state.table.boundaryNum, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$BoundaryTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $BoundaryTable> { + $$BoundaryTableOrderingComposer(super.$state); + ColumnOrderings get code => $state.composableBuilder( + column: $state.table.code, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get name => $state.composableBuilder( + column: $state.table.name, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get label => $state.composableBuilder( + column: $state.table.label, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get latitude => $state.composableBuilder( + column: $state.table.latitude, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get longitude => $state.composableBuilder( + column: $state.table.longitude, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get materializedPath => $state.composableBuilder( + column: $state.table.materializedPath, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get boundaryNum => $state.composableBuilder( + column: $state.table.boundaryNum, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$DocumentTableInsertCompanionBuilder = DocumentCompanion Function({ + Value id, + Value documentType, + Value fileStoreId, + Value documentUid, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + required String clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$DocumentTableUpdateCompanionBuilder = DocumentCompanion Function({ + Value id, + Value documentType, + Value fileStoreId, + Value documentUid, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$DocumentTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $DocumentTable, + DocumentData, + $$DocumentTableFilterComposer, + $$DocumentTableOrderingComposer, + $$DocumentTableProcessedTableManager, + $$DocumentTableInsertCompanionBuilder, + $$DocumentTableUpdateCompanionBuilder> { + $$DocumentTableTableManager(_$LocalSqlDataStore db, $DocumentTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$DocumentTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$DocumentTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$DocumentTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value documentType = const Value.absent(), + Value fileStoreId = const Value.absent(), + Value documentUid = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value clientReferenceId = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + DocumentCompanion( + id: id, + documentType: documentType, + fileStoreId: fileStoreId, + documentUid: documentUid, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + Value documentType = const Value.absent(), + Value fileStoreId = const Value.absent(), + Value documentUid = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + required String clientReferenceId, + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + DocumentCompanion.insert( + id: id, + documentType: documentType, + fileStoreId: fileStoreId, + documentUid: documentUid, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$DocumentTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $DocumentTable, + DocumentData, + $$DocumentTableFilterComposer, + $$DocumentTableOrderingComposer, + $$DocumentTableProcessedTableManager, + $$DocumentTableInsertCompanionBuilder, + $$DocumentTableUpdateCompanionBuilder> { + $$DocumentTableProcessedTableManager(super.$state); +} + +class $$DocumentTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $DocumentTable> { + $$DocumentTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get documentType => $state.composableBuilder( + column: $state.table.documentType, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get fileStoreId => $state.composableBuilder( + column: $state.table.fileStoreId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get documentUid => $state.composableBuilder( + column: $state.table.documentUid, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$DocumentTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $DocumentTable> { + $$DocumentTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get documentType => $state.composableBuilder( + column: $state.table.documentType, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get fileStoreId => $state.composableBuilder( + column: $state.table.fileStoreId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get documentUid => $state.composableBuilder( + column: $state.table.documentUid, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$FacilityTableInsertCompanionBuilder = FacilityCompanion Function({ + required String id, + Value isPermanent, + Value usage, + Value storageCapacity, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$FacilityTableUpdateCompanionBuilder = FacilityCompanion Function({ + Value id, + Value isPermanent, + Value usage, + Value storageCapacity, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$FacilityTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $FacilityTable, + FacilityData, + $$FacilityTableFilterComposer, + $$FacilityTableOrderingComposer, + $$FacilityTableProcessedTableManager, + $$FacilityTableInsertCompanionBuilder, + $$FacilityTableUpdateCompanionBuilder> { + $$FacilityTableTableManager(_$LocalSqlDataStore db, $FacilityTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$FacilityTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$FacilityTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$FacilityTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value isPermanent = const Value.absent(), + Value usage = const Value.absent(), + Value storageCapacity = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + FacilityCompanion( + id: id, + isPermanent: isPermanent, + usage: usage, + storageCapacity: storageCapacity, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + required String id, + Value isPermanent = const Value.absent(), + Value usage = const Value.absent(), + Value storageCapacity = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + FacilityCompanion.insert( + id: id, + isPermanent: isPermanent, + usage: usage, + storageCapacity: storageCapacity, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$FacilityTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $FacilityTable, + FacilityData, + $$FacilityTableFilterComposer, + $$FacilityTableOrderingComposer, + $$FacilityTableProcessedTableManager, + $$FacilityTableInsertCompanionBuilder, + $$FacilityTableUpdateCompanionBuilder> { + $$FacilityTableProcessedTableManager(super.$state); +} + +class $$FacilityTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $FacilityTable> { + $$FacilityTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isPermanent => $state.composableBuilder( + column: $state.table.isPermanent, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get usage => $state.composableBuilder( + column: $state.table.usage, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get storageCapacity => $state.composableBuilder( + column: $state.table.storageCapacity, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$FacilityTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $FacilityTable> { + $$FacilityTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isPermanent => $state.composableBuilder( + column: $state.table.isPermanent, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get usage => $state.composableBuilder( + column: $state.table.usage, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get storageCapacity => $state.composableBuilder( + column: $state.table.storageCapacity, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$ProductTableInsertCompanionBuilder = ProductCompanion Function({ + Value id, + Value type, + Value name, + Value manufacturer, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + required String clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$ProductTableUpdateCompanionBuilder = ProductCompanion Function({ + Value id, + Value type, + Value name, + Value manufacturer, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$ProductTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $ProductTable, + ProductData, + $$ProductTableFilterComposer, + $$ProductTableOrderingComposer, + $$ProductTableProcessedTableManager, + $$ProductTableInsertCompanionBuilder, + $$ProductTableUpdateCompanionBuilder> { + $$ProductTableTableManager(_$LocalSqlDataStore db, $ProductTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$ProductTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$ProductTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => $$ProductTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value type = const Value.absent(), + Value name = const Value.absent(), + Value manufacturer = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value clientReferenceId = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ProductCompanion( + id: id, + type: type, + name: name, + manufacturer: manufacturer, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + Value type = const Value.absent(), + Value name = const Value.absent(), + Value manufacturer = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + required String clientReferenceId, + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ProductCompanion.insert( + id: id, + type: type, + name: name, + manufacturer: manufacturer, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$ProductTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $ProductTable, + ProductData, + $$ProductTableFilterComposer, + $$ProductTableOrderingComposer, + $$ProductTableProcessedTableManager, + $$ProductTableInsertCompanionBuilder, + $$ProductTableUpdateCompanionBuilder> { + $$ProductTableProcessedTableManager(super.$state); +} + +class $$ProductTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $ProductTable> { + $$ProductTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get type => $state.composableBuilder( + column: $state.table.type, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get name => $state.composableBuilder( + column: $state.table.name, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get manufacturer => $state.composableBuilder( + column: $state.table.manufacturer, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$ProductTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $ProductTable> { + $$ProductTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get type => $state.composableBuilder( + column: $state.table.type, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get name => $state.composableBuilder( + column: $state.table.name, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get manufacturer => $state.composableBuilder( + column: $state.table.manufacturer, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$ProductVariantTableInsertCompanionBuilder = ProductVariantCompanion + Function({ + required String id, + Value productId, + Value sku, + Value variation, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$ProductVariantTableUpdateCompanionBuilder = ProductVariantCompanion + Function({ + Value id, + Value productId, + Value sku, + Value variation, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$ProductVariantTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $ProductVariantTable, + ProductVariantData, + $$ProductVariantTableFilterComposer, + $$ProductVariantTableOrderingComposer, + $$ProductVariantTableProcessedTableManager, + $$ProductVariantTableInsertCompanionBuilder, + $$ProductVariantTableUpdateCompanionBuilder> { + $$ProductVariantTableTableManager( + _$LocalSqlDataStore db, $ProductVariantTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$ProductVariantTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$ProductVariantTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$ProductVariantTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value productId = const Value.absent(), + Value sku = const Value.absent(), + Value variation = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ProductVariantCompanion( + id: id, + productId: productId, + sku: sku, + variation: variation, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + required String id, + Value productId = const Value.absent(), + Value sku = const Value.absent(), + Value variation = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ProductVariantCompanion.insert( + id: id, + productId: productId, + sku: sku, + variation: variation, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$ProductVariantTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $ProductVariantTable, + ProductVariantData, + $$ProductVariantTableFilterComposer, + $$ProductVariantTableOrderingComposer, + $$ProductVariantTableProcessedTableManager, + $$ProductVariantTableInsertCompanionBuilder, + $$ProductVariantTableUpdateCompanionBuilder> { + $$ProductVariantTableProcessedTableManager(super.$state); +} + +class $$ProductVariantTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $ProductVariantTable> { + $$ProductVariantTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get productId => $state.composableBuilder( + column: $state.table.productId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get sku => $state.composableBuilder( + column: $state.table.sku, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get variation => $state.composableBuilder( + column: $state.table.variation, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$ProductVariantTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $ProductVariantTable> { + $$ProductVariantTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get productId => $state.composableBuilder( + column: $state.table.productId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get sku => $state.composableBuilder( + column: $state.table.sku, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get variation => $state.composableBuilder( + column: $state.table.variation, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$ProjectTableInsertCompanionBuilder = ProjectCompanion Function({ + required String id, + Value projectTypeId, + Value projectNumber, + Value subProjectTypeId, + Value isTaskEnabled, + Value parent, + required String name, + Value department, + Value description, + Value referenceId, + Value projectHierarchy, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value startDate, + Value endDate, + Value additionalFields, + Value rowid, +}); +typedef $$ProjectTableUpdateCompanionBuilder = ProjectCompanion Function({ + Value id, + Value projectTypeId, + Value projectNumber, + Value subProjectTypeId, + Value isTaskEnabled, + Value parent, + Value name, + Value department, + Value description, + Value referenceId, + Value projectHierarchy, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value startDate, + Value endDate, + Value additionalFields, + Value rowid, +}); + +class $$ProjectTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $ProjectTable, + ProjectData, + $$ProjectTableFilterComposer, + $$ProjectTableOrderingComposer, + $$ProjectTableProcessedTableManager, + $$ProjectTableInsertCompanionBuilder, + $$ProjectTableUpdateCompanionBuilder> { + $$ProjectTableTableManager(_$LocalSqlDataStore db, $ProjectTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$ProjectTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$ProjectTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => $$ProjectTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value projectTypeId = const Value.absent(), + Value projectNumber = const Value.absent(), + Value subProjectTypeId = const Value.absent(), + Value isTaskEnabled = const Value.absent(), + Value parent = const Value.absent(), + Value name = const Value.absent(), + Value department = const Value.absent(), + Value description = const Value.absent(), + Value referenceId = const Value.absent(), + Value projectHierarchy = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value startDate = const Value.absent(), + Value endDate = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ProjectCompanion( + id: id, + projectTypeId: projectTypeId, + projectNumber: projectNumber, + subProjectTypeId: subProjectTypeId, + isTaskEnabled: isTaskEnabled, + parent: parent, + name: name, + department: department, + description: description, + referenceId: referenceId, + projectHierarchy: projectHierarchy, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + startDate: startDate, + endDate: endDate, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + required String id, + Value projectTypeId = const Value.absent(), + Value projectNumber = const Value.absent(), + Value subProjectTypeId = const Value.absent(), + Value isTaskEnabled = const Value.absent(), + Value parent = const Value.absent(), + required String name, + Value department = const Value.absent(), + Value description = const Value.absent(), + Value referenceId = const Value.absent(), + Value projectHierarchy = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value startDate = const Value.absent(), + Value endDate = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ProjectCompanion.insert( + id: id, + projectTypeId: projectTypeId, + projectNumber: projectNumber, + subProjectTypeId: subProjectTypeId, + isTaskEnabled: isTaskEnabled, + parent: parent, + name: name, + department: department, + description: description, + referenceId: referenceId, + projectHierarchy: projectHierarchy, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + startDate: startDate, + endDate: endDate, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$ProjectTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $ProjectTable, + ProjectData, + $$ProjectTableFilterComposer, + $$ProjectTableOrderingComposer, + $$ProjectTableProcessedTableManager, + $$ProjectTableInsertCompanionBuilder, + $$ProjectTableUpdateCompanionBuilder> { + $$ProjectTableProcessedTableManager(super.$state); +} + +class $$ProjectTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $ProjectTable> { + $$ProjectTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get projectTypeId => $state.composableBuilder( + column: $state.table.projectTypeId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get projectNumber => $state.composableBuilder( + column: $state.table.projectNumber, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get subProjectTypeId => $state.composableBuilder( + column: $state.table.subProjectTypeId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isTaskEnabled => $state.composableBuilder( + column: $state.table.isTaskEnabled, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get parent => $state.composableBuilder( + column: $state.table.parent, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get name => $state.composableBuilder( + column: $state.table.name, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get department => $state.composableBuilder( + column: $state.table.department, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get description => $state.composableBuilder( + column: $state.table.description, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get referenceId => $state.composableBuilder( + column: $state.table.referenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get projectHierarchy => $state.composableBuilder( + column: $state.table.projectHierarchy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get startDate => $state.composableBuilder( + column: $state.table.startDate, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get endDate => $state.composableBuilder( + column: $state.table.endDate, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$ProjectTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $ProjectTable> { + $$ProjectTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get projectTypeId => $state.composableBuilder( + column: $state.table.projectTypeId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get projectNumber => $state.composableBuilder( + column: $state.table.projectNumber, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get subProjectTypeId => $state.composableBuilder( + column: $state.table.subProjectTypeId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isTaskEnabled => $state.composableBuilder( + column: $state.table.isTaskEnabled, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get parent => $state.composableBuilder( + column: $state.table.parent, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get name => $state.composableBuilder( + column: $state.table.name, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get department => $state.composableBuilder( + column: $state.table.department, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get description => $state.composableBuilder( + column: $state.table.description, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get referenceId => $state.composableBuilder( + column: $state.table.referenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get projectHierarchy => $state.composableBuilder( + column: $state.table.projectHierarchy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get startDate => $state.composableBuilder( + column: $state.table.startDate, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get endDate => $state.composableBuilder( + column: $state.table.endDate, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$ProjectBeneficiaryTableInsertCompanionBuilder + = ProjectBeneficiaryCompanion Function({ + Value id, + Value projectId, + Value beneficiaryId, + Value tag, + Value beneficiaryClientReferenceId, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + required String clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + required int dateOfRegistration, + Value additionalFields, + Value rowid, +}); +typedef $$ProjectBeneficiaryTableUpdateCompanionBuilder + = ProjectBeneficiaryCompanion Function({ + Value id, + Value projectId, + Value beneficiaryId, + Value tag, + Value beneficiaryClientReferenceId, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value dateOfRegistration, + Value additionalFields, + Value rowid, +}); + +class $$ProjectBeneficiaryTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $ProjectBeneficiaryTable, + ProjectBeneficiaryData, + $$ProjectBeneficiaryTableFilterComposer, + $$ProjectBeneficiaryTableOrderingComposer, + $$ProjectBeneficiaryTableProcessedTableManager, + $$ProjectBeneficiaryTableInsertCompanionBuilder, + $$ProjectBeneficiaryTableUpdateCompanionBuilder> { + $$ProjectBeneficiaryTableTableManager( + _$LocalSqlDataStore db, $ProjectBeneficiaryTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$ProjectBeneficiaryTableFilterComposer(ComposerState(db, table)), + orderingComposer: $$ProjectBeneficiaryTableOrderingComposer( + ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$ProjectBeneficiaryTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value projectId = const Value.absent(), + Value beneficiaryId = const Value.absent(), + Value tag = const Value.absent(), + Value beneficiaryClientReferenceId = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value clientReferenceId = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value dateOfRegistration = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ProjectBeneficiaryCompanion( + id: id, + projectId: projectId, + beneficiaryId: beneficiaryId, + tag: tag, + beneficiaryClientReferenceId: beneficiaryClientReferenceId, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + dateOfRegistration: dateOfRegistration, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + Value projectId = const Value.absent(), + Value beneficiaryId = const Value.absent(), + Value tag = const Value.absent(), + Value beneficiaryClientReferenceId = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + required String clientReferenceId, + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + required int dateOfRegistration, + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ProjectBeneficiaryCompanion.insert( + id: id, + projectId: projectId, + beneficiaryId: beneficiaryId, + tag: tag, + beneficiaryClientReferenceId: beneficiaryClientReferenceId, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + dateOfRegistration: dateOfRegistration, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$ProjectBeneficiaryTableProcessedTableManager + extends ProcessedTableManager< + _$LocalSqlDataStore, + $ProjectBeneficiaryTable, + ProjectBeneficiaryData, + $$ProjectBeneficiaryTableFilterComposer, + $$ProjectBeneficiaryTableOrderingComposer, + $$ProjectBeneficiaryTableProcessedTableManager, + $$ProjectBeneficiaryTableInsertCompanionBuilder, + $$ProjectBeneficiaryTableUpdateCompanionBuilder> { + $$ProjectBeneficiaryTableProcessedTableManager(super.$state); +} + +class $$ProjectBeneficiaryTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $ProjectBeneficiaryTable> { + $$ProjectBeneficiaryTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get projectId => $state.composableBuilder( + column: $state.table.projectId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get beneficiaryId => $state.composableBuilder( + column: $state.table.beneficiaryId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tag => $state.composableBuilder( + column: $state.table.tag, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get beneficiaryClientReferenceId => + $state.composableBuilder( + column: $state.table.beneficiaryClientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get dateOfRegistration => $state.composableBuilder( + column: $state.table.dateOfRegistration, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$ProjectBeneficiaryTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $ProjectBeneficiaryTable> { + $$ProjectBeneficiaryTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get projectId => $state.composableBuilder( + column: $state.table.projectId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get beneficiaryId => $state.composableBuilder( + column: $state.table.beneficiaryId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tag => $state.composableBuilder( + column: $state.table.tag, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get beneficiaryClientReferenceId => + $state.composableBuilder( + column: $state.table.beneficiaryClientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get dateOfRegistration => $state.composableBuilder( + column: $state.table.dateOfRegistration, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$ProjectFacilityTableInsertCompanionBuilder = ProjectFacilityCompanion + Function({ + required String id, + required String facilityId, + required String projectId, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$ProjectFacilityTableUpdateCompanionBuilder = ProjectFacilityCompanion + Function({ + Value id, + Value facilityId, + Value projectId, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$ProjectFacilityTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $ProjectFacilityTable, + ProjectFacilityData, + $$ProjectFacilityTableFilterComposer, + $$ProjectFacilityTableOrderingComposer, + $$ProjectFacilityTableProcessedTableManager, + $$ProjectFacilityTableInsertCompanionBuilder, + $$ProjectFacilityTableUpdateCompanionBuilder> { + $$ProjectFacilityTableTableManager( + _$LocalSqlDataStore db, $ProjectFacilityTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$ProjectFacilityTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$ProjectFacilityTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$ProjectFacilityTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value facilityId = const Value.absent(), + Value projectId = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ProjectFacilityCompanion( + id: id, + facilityId: facilityId, + projectId: projectId, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + required String id, + required String facilityId, + required String projectId, + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ProjectFacilityCompanion.insert( + id: id, + facilityId: facilityId, + projectId: projectId, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$ProjectFacilityTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $ProjectFacilityTable, + ProjectFacilityData, + $$ProjectFacilityTableFilterComposer, + $$ProjectFacilityTableOrderingComposer, + $$ProjectFacilityTableProcessedTableManager, + $$ProjectFacilityTableInsertCompanionBuilder, + $$ProjectFacilityTableUpdateCompanionBuilder> { + $$ProjectFacilityTableProcessedTableManager(super.$state); +} + +class $$ProjectFacilityTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $ProjectFacilityTable> { + $$ProjectFacilityTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get facilityId => $state.composableBuilder( + column: $state.table.facilityId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get projectId => $state.composableBuilder( + column: $state.table.projectId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$ProjectFacilityTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $ProjectFacilityTable> { + $$ProjectFacilityTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get facilityId => $state.composableBuilder( + column: $state.table.facilityId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get projectId => $state.composableBuilder( + column: $state.table.projectId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$ProjectProductVariantTableInsertCompanionBuilder + = ProjectProductVariantCompanion Function({ + required String productVariantId, + Value type, + Value isBaseUnitVariant, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$ProjectProductVariantTableUpdateCompanionBuilder + = ProjectProductVariantCompanion Function({ + Value productVariantId, + Value type, + Value isBaseUnitVariant, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$ProjectProductVariantTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $ProjectProductVariantTable, + ProjectProductVariantData, + $$ProjectProductVariantTableFilterComposer, + $$ProjectProductVariantTableOrderingComposer, + $$ProjectProductVariantTableProcessedTableManager, + $$ProjectProductVariantTableInsertCompanionBuilder, + $$ProjectProductVariantTableUpdateCompanionBuilder> { + $$ProjectProductVariantTableTableManager( + _$LocalSqlDataStore db, $ProjectProductVariantTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: $$ProjectProductVariantTableFilterComposer( + ComposerState(db, table)), + orderingComposer: $$ProjectProductVariantTableOrderingComposer( + ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$ProjectProductVariantTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value productVariantId = const Value.absent(), + Value type = const Value.absent(), + Value isBaseUnitVariant = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ProjectProductVariantCompanion( + productVariantId: productVariantId, + type: type, + isBaseUnitVariant: isBaseUnitVariant, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + required String productVariantId, + Value type = const Value.absent(), + Value isBaseUnitVariant = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ProjectProductVariantCompanion.insert( + productVariantId: productVariantId, + type: type, + isBaseUnitVariant: isBaseUnitVariant, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$ProjectProductVariantTableProcessedTableManager + extends ProcessedTableManager< + _$LocalSqlDataStore, + $ProjectProductVariantTable, + ProjectProductVariantData, + $$ProjectProductVariantTableFilterComposer, + $$ProjectProductVariantTableOrderingComposer, + $$ProjectProductVariantTableProcessedTableManager, + $$ProjectProductVariantTableInsertCompanionBuilder, + $$ProjectProductVariantTableUpdateCompanionBuilder> { + $$ProjectProductVariantTableProcessedTableManager(super.$state); +} + +class $$ProjectProductVariantTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $ProjectProductVariantTable> { + $$ProjectProductVariantTableFilterComposer(super.$state); + ColumnFilters get productVariantId => $state.composableBuilder( + column: $state.table.productVariantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get type => $state.composableBuilder( + column: $state.table.type, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isBaseUnitVariant => $state.composableBuilder( + column: $state.table.isBaseUnitVariant, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ComposableFilter projectResourceRefs( + ComposableFilter Function($$ProjectResourceTableFilterComposer f) f) { + final $$ProjectResourceTableFilterComposer composer = + $state.composerBuilder( + composer: this, + getCurrentColumn: (t) => t.productVariantId, + referencedTable: $state.db.projectResource, + getReferencedColumn: (t) => t.resource, + builder: (joinBuilder, parentComposers) => + $$ProjectResourceTableFilterComposer(ComposerState($state.db, + $state.db.projectResource, joinBuilder, parentComposers))); + return f(composer); + } +} + +class $$ProjectProductVariantTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $ProjectProductVariantTable> { + $$ProjectProductVariantTableOrderingComposer(super.$state); + ColumnOrderings get productVariantId => $state.composableBuilder( + column: $state.table.productVariantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get type => $state.composableBuilder( + column: $state.table.type, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isBaseUnitVariant => $state.composableBuilder( + column: $state.table.isBaseUnitVariant, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$ProjectResourceTableInsertCompanionBuilder = ProjectResourceCompanion + Function({ + Value id, + Value projectId, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + required String resource, + Value additionalFields, + Value rowid, +}); +typedef $$ProjectResourceTableUpdateCompanionBuilder = ProjectResourceCompanion + Function({ + Value id, + Value projectId, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value resource, + Value additionalFields, + Value rowid, +}); + +class $$ProjectResourceTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $ProjectResourceTable, + ProjectResourceData, + $$ProjectResourceTableFilterComposer, + $$ProjectResourceTableOrderingComposer, + $$ProjectResourceTableProcessedTableManager, + $$ProjectResourceTableInsertCompanionBuilder, + $$ProjectResourceTableUpdateCompanionBuilder> { + $$ProjectResourceTableTableManager( + _$LocalSqlDataStore db, $ProjectResourceTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$ProjectResourceTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$ProjectResourceTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$ProjectResourceTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value projectId = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value resource = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ProjectResourceCompanion( + id: id, + projectId: projectId, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + resource: resource, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + Value projectId = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + required String resource, + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ProjectResourceCompanion.insert( + id: id, + projectId: projectId, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + resource: resource, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$ProjectResourceTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $ProjectResourceTable, + ProjectResourceData, + $$ProjectResourceTableFilterComposer, + $$ProjectResourceTableOrderingComposer, + $$ProjectResourceTableProcessedTableManager, + $$ProjectResourceTableInsertCompanionBuilder, + $$ProjectResourceTableUpdateCompanionBuilder> { + $$ProjectResourceTableProcessedTableManager(super.$state); +} + +class $$ProjectResourceTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $ProjectResourceTable> { + $$ProjectResourceTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get projectId => $state.composableBuilder( + column: $state.table.projectId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + $$ProjectProductVariantTableFilterComposer get resource { + final $$ProjectProductVariantTableFilterComposer composer = + $state.composerBuilder( + composer: this, + getCurrentColumn: (t) => t.resource, + referencedTable: $state.db.projectProductVariant, + getReferencedColumn: (t) => t.productVariantId, + builder: (joinBuilder, parentComposers) => + $$ProjectProductVariantTableFilterComposer(ComposerState( + $state.db, + $state.db.projectProductVariant, + joinBuilder, + parentComposers))); + return composer; + } +} + +class $$ProjectResourceTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $ProjectResourceTable> { + $$ProjectResourceTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get projectId => $state.composableBuilder( + column: $state.table.projectId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + $$ProjectProductVariantTableOrderingComposer get resource { + final $$ProjectProductVariantTableOrderingComposer composer = + $state.composerBuilder( + composer: this, + getCurrentColumn: (t) => t.resource, + referencedTable: $state.db.projectProductVariant, + getReferencedColumn: (t) => t.productVariantId, + builder: (joinBuilder, parentComposers) => + $$ProjectProductVariantTableOrderingComposer(ComposerState( + $state.db, + $state.db.projectProductVariant, + joinBuilder, + parentComposers))); + return composer; + } +} + +typedef $$ProjectStaffTableInsertCompanionBuilder = ProjectStaffCompanion + Function({ + required String id, + Value staffId, + Value userId, + Value projectId, + Value channel, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value startDate, + Value endDate, + Value additionalFields, + Value rowid, +}); +typedef $$ProjectStaffTableUpdateCompanionBuilder = ProjectStaffCompanion + Function({ + Value id, + Value staffId, + Value userId, + Value projectId, + Value channel, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value startDate, + Value endDate, + Value additionalFields, + Value rowid, +}); + +class $$ProjectStaffTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $ProjectStaffTable, + ProjectStaffData, + $$ProjectStaffTableFilterComposer, + $$ProjectStaffTableOrderingComposer, + $$ProjectStaffTableProcessedTableManager, + $$ProjectStaffTableInsertCompanionBuilder, + $$ProjectStaffTableUpdateCompanionBuilder> { + $$ProjectStaffTableTableManager( + _$LocalSqlDataStore db, $ProjectStaffTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$ProjectStaffTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$ProjectStaffTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$ProjectStaffTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value staffId = const Value.absent(), + Value userId = const Value.absent(), + Value projectId = const Value.absent(), + Value channel = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value startDate = const Value.absent(), + Value endDate = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ProjectStaffCompanion( + id: id, + staffId: staffId, + userId: userId, + projectId: projectId, + channel: channel, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + startDate: startDate, + endDate: endDate, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + required String id, + Value staffId = const Value.absent(), + Value userId = const Value.absent(), + Value projectId = const Value.absent(), + Value channel = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value startDate = const Value.absent(), + Value endDate = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ProjectStaffCompanion.insert( + id: id, + staffId: staffId, + userId: userId, + projectId: projectId, + channel: channel, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + startDate: startDate, + endDate: endDate, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$ProjectStaffTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $ProjectStaffTable, + ProjectStaffData, + $$ProjectStaffTableFilterComposer, + $$ProjectStaffTableOrderingComposer, + $$ProjectStaffTableProcessedTableManager, + $$ProjectStaffTableInsertCompanionBuilder, + $$ProjectStaffTableUpdateCompanionBuilder> { + $$ProjectStaffTableProcessedTableManager(super.$state); +} + +class $$ProjectStaffTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $ProjectStaffTable> { + $$ProjectStaffTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get staffId => $state.composableBuilder( + column: $state.table.staffId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get userId => $state.composableBuilder( + column: $state.table.userId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get projectId => $state.composableBuilder( + column: $state.table.projectId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get channel => $state.composableBuilder( + column: $state.table.channel, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get startDate => $state.composableBuilder( + column: $state.table.startDate, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get endDate => $state.composableBuilder( + column: $state.table.endDate, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$ProjectStaffTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $ProjectStaffTable> { + $$ProjectStaffTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get staffId => $state.composableBuilder( + column: $state.table.staffId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get userId => $state.composableBuilder( + column: $state.table.userId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get projectId => $state.composableBuilder( + column: $state.table.projectId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get channel => $state.composableBuilder( + column: $state.table.channel, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get startDate => $state.composableBuilder( + column: $state.table.startDate, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get endDate => $state.composableBuilder( + column: $state.table.endDate, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$ProjectTypeTableInsertCompanionBuilder = ProjectTypeCompanion + Function({ + Value id, + Value name, + Value code, + Value group, + Value beneficiaryType, + Value eligibilityCriteria, + Value taskProcedure, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + required String clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$ProjectTypeTableUpdateCompanionBuilder = ProjectTypeCompanion + Function({ + Value id, + Value name, + Value code, + Value group, + Value beneficiaryType, + Value eligibilityCriteria, + Value taskProcedure, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$ProjectTypeTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $ProjectTypeTable, + ProjectTypeData, + $$ProjectTypeTableFilterComposer, + $$ProjectTypeTableOrderingComposer, + $$ProjectTypeTableProcessedTableManager, + $$ProjectTypeTableInsertCompanionBuilder, + $$ProjectTypeTableUpdateCompanionBuilder> { + $$ProjectTypeTableTableManager( + _$LocalSqlDataStore db, $ProjectTypeTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$ProjectTypeTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$ProjectTypeTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$ProjectTypeTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value name = const Value.absent(), + Value code = const Value.absent(), + Value group = const Value.absent(), + Value beneficiaryType = const Value.absent(), + Value eligibilityCriteria = const Value.absent(), + Value taskProcedure = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value clientReferenceId = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ProjectTypeCompanion( + id: id, + name: name, + code: code, + group: group, + beneficiaryType: beneficiaryType, + eligibilityCriteria: eligibilityCriteria, + taskProcedure: taskProcedure, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + Value name = const Value.absent(), + Value code = const Value.absent(), + Value group = const Value.absent(), + Value beneficiaryType = const Value.absent(), + Value eligibilityCriteria = const Value.absent(), + Value taskProcedure = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + required String clientReferenceId, + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ProjectTypeCompanion.insert( + id: id, + name: name, + code: code, + group: group, + beneficiaryType: beneficiaryType, + eligibilityCriteria: eligibilityCriteria, + taskProcedure: taskProcedure, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$ProjectTypeTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $ProjectTypeTable, + ProjectTypeData, + $$ProjectTypeTableFilterComposer, + $$ProjectTypeTableOrderingComposer, + $$ProjectTypeTableProcessedTableManager, + $$ProjectTypeTableInsertCompanionBuilder, + $$ProjectTypeTableUpdateCompanionBuilder> { + $$ProjectTypeTableProcessedTableManager(super.$state); +} + +class $$ProjectTypeTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $ProjectTypeTable> { + $$ProjectTypeTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get name => $state.composableBuilder( + column: $state.table.name, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get code => $state.composableBuilder( + column: $state.table.code, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get group => $state.composableBuilder( + column: $state.table.group, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get beneficiaryType => $state.composableBuilder( + column: $state.table.beneficiaryType, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get eligibilityCriteria => $state.composableBuilder( + column: $state.table.eligibilityCriteria, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get taskProcedure => $state.composableBuilder( + column: $state.table.taskProcedure, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$ProjectTypeTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $ProjectTypeTable> { + $$ProjectTypeTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get name => $state.composableBuilder( + column: $state.table.name, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get code => $state.composableBuilder( + column: $state.table.code, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get group => $state.composableBuilder( + column: $state.table.group, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get beneficiaryType => $state.composableBuilder( + column: $state.table.beneficiaryType, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get eligibilityCriteria => $state.composableBuilder( + column: $state.table.eligibilityCriteria, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get taskProcedure => $state.composableBuilder( + column: $state.table.taskProcedure, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$IndividualTableInsertCompanionBuilder = IndividualCompanion Function({ + Value id, + Value individualId, + Value userId, + Value userUuid, + Value dateOfBirth, + Value mobileNumber, + Value altContactNumber, + Value email, + Value fatherName, + Value husbandName, + Value photo, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + required String clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value bloodGroup, + Value gender, + Value additionalFields, + Value rowid, +}); +typedef $$IndividualTableUpdateCompanionBuilder = IndividualCompanion Function({ + Value id, + Value individualId, + Value userId, + Value userUuid, + Value dateOfBirth, + Value mobileNumber, + Value altContactNumber, + Value email, + Value fatherName, + Value husbandName, + Value photo, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value bloodGroup, + Value gender, + Value additionalFields, + Value rowid, +}); + +class $$IndividualTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $IndividualTable, + IndividualData, + $$IndividualTableFilterComposer, + $$IndividualTableOrderingComposer, + $$IndividualTableProcessedTableManager, + $$IndividualTableInsertCompanionBuilder, + $$IndividualTableUpdateCompanionBuilder> { + $$IndividualTableTableManager(_$LocalSqlDataStore db, $IndividualTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$IndividualTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$IndividualTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$IndividualTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value individualId = const Value.absent(), + Value userId = const Value.absent(), + Value userUuid = const Value.absent(), + Value dateOfBirth = const Value.absent(), + Value mobileNumber = const Value.absent(), + Value altContactNumber = const Value.absent(), + Value email = const Value.absent(), + Value fatherName = const Value.absent(), + Value husbandName = const Value.absent(), + Value photo = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value clientReferenceId = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value bloodGroup = const Value.absent(), + Value gender = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + IndividualCompanion( + id: id, + individualId: individualId, + userId: userId, + userUuid: userUuid, + dateOfBirth: dateOfBirth, + mobileNumber: mobileNumber, + altContactNumber: altContactNumber, + email: email, + fatherName: fatherName, + husbandName: husbandName, + photo: photo, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + bloodGroup: bloodGroup, + gender: gender, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + Value individualId = const Value.absent(), + Value userId = const Value.absent(), + Value userUuid = const Value.absent(), + Value dateOfBirth = const Value.absent(), + Value mobileNumber = const Value.absent(), + Value altContactNumber = const Value.absent(), + Value email = const Value.absent(), + Value fatherName = const Value.absent(), + Value husbandName = const Value.absent(), + Value photo = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + required String clientReferenceId, + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value bloodGroup = const Value.absent(), + Value gender = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + IndividualCompanion.insert( + id: id, + individualId: individualId, + userId: userId, + userUuid: userUuid, + dateOfBirth: dateOfBirth, + mobileNumber: mobileNumber, + altContactNumber: altContactNumber, + email: email, + fatherName: fatherName, + husbandName: husbandName, + photo: photo, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + bloodGroup: bloodGroup, + gender: gender, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$IndividualTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $IndividualTable, + IndividualData, + $$IndividualTableFilterComposer, + $$IndividualTableOrderingComposer, + $$IndividualTableProcessedTableManager, + $$IndividualTableInsertCompanionBuilder, + $$IndividualTableUpdateCompanionBuilder> { + $$IndividualTableProcessedTableManager(super.$state); +} + +class $$IndividualTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $IndividualTable> { + $$IndividualTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get individualId => $state.composableBuilder( + column: $state.table.individualId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get userId => $state.composableBuilder( + column: $state.table.userId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get userUuid => $state.composableBuilder( + column: $state.table.userUuid, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get dateOfBirth => $state.composableBuilder( + column: $state.table.dateOfBirth, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get mobileNumber => $state.composableBuilder( + column: $state.table.mobileNumber, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get altContactNumber => $state.composableBuilder( + column: $state.table.altContactNumber, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get email => $state.composableBuilder( + column: $state.table.email, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get fatherName => $state.composableBuilder( + column: $state.table.fatherName, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get husbandName => $state.composableBuilder( + column: $state.table.husbandName, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get photo => $state.composableBuilder( + column: $state.table.photo, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnWithTypeConverterFilters get bloodGroup => + $state.composableBuilder( + column: $state.table.bloodGroup, + builder: (column, joinBuilders) => ColumnWithTypeConverterFilters( + column, + joinBuilders: joinBuilders)); + + ColumnWithTypeConverterFilters get gender => + $state.composableBuilder( + column: $state.table.gender, + builder: (column, joinBuilders) => ColumnWithTypeConverterFilters( + column, + joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$IndividualTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $IndividualTable> { + $$IndividualTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get individualId => $state.composableBuilder( + column: $state.table.individualId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get userId => $state.composableBuilder( + column: $state.table.userId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get userUuid => $state.composableBuilder( + column: $state.table.userUuid, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get dateOfBirth => $state.composableBuilder( + column: $state.table.dateOfBirth, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get mobileNumber => $state.composableBuilder( + column: $state.table.mobileNumber, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get altContactNumber => $state.composableBuilder( + column: $state.table.altContactNumber, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get email => $state.composableBuilder( + column: $state.table.email, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get fatherName => $state.composableBuilder( + column: $state.table.fatherName, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get husbandName => $state.composableBuilder( + column: $state.table.husbandName, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get photo => $state.composableBuilder( + column: $state.table.photo, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get bloodGroup => $state.composableBuilder( + column: $state.table.bloodGroup, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get gender => $state.composableBuilder( + column: $state.table.gender, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$IdentifierTableInsertCompanionBuilder = IdentifierCompanion Function({ + Value id, + Value identifierType, + Value identifierId, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + required String clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$IdentifierTableUpdateCompanionBuilder = IdentifierCompanion Function({ + Value id, + Value identifierType, + Value identifierId, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$IdentifierTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $IdentifierTable, + IdentifierData, + $$IdentifierTableFilterComposer, + $$IdentifierTableOrderingComposer, + $$IdentifierTableProcessedTableManager, + $$IdentifierTableInsertCompanionBuilder, + $$IdentifierTableUpdateCompanionBuilder> { + $$IdentifierTableTableManager(_$LocalSqlDataStore db, $IdentifierTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$IdentifierTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$IdentifierTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$IdentifierTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value identifierType = const Value.absent(), + Value identifierId = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value clientReferenceId = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + IdentifierCompanion( + id: id, + identifierType: identifierType, + identifierId: identifierId, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + Value identifierType = const Value.absent(), + Value identifierId = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + required String clientReferenceId, + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + IdentifierCompanion.insert( + id: id, + identifierType: identifierType, + identifierId: identifierId, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$IdentifierTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $IdentifierTable, + IdentifierData, + $$IdentifierTableFilterComposer, + $$IdentifierTableOrderingComposer, + $$IdentifierTableProcessedTableManager, + $$IdentifierTableInsertCompanionBuilder, + $$IdentifierTableUpdateCompanionBuilder> { + $$IdentifierTableProcessedTableManager(super.$state); +} + +class $$IdentifierTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $IdentifierTable> { + $$IdentifierTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get identifierType => $state.composableBuilder( + column: $state.table.identifierType, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get identifierId => $state.composableBuilder( + column: $state.table.identifierId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$IdentifierTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $IdentifierTable> { + $$IdentifierTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get identifierType => $state.composableBuilder( + column: $state.table.identifierType, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get identifierId => $state.composableBuilder( + column: $state.table.identifierId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$StockTableInsertCompanionBuilder = StockCompanion Function({ + Value id, + Value tenantId, + Value facilityId, + Value productVariantId, + Value referenceId, + Value referenceIdType, + Value transactingPartyId, + Value transactingPartyType, + Value quantity, + Value waybillNumber, + Value receiverId, + Value receiverType, + Value senderId, + Value senderType, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + required String clientReferenceId, + Value isDeleted, + Value rowVersion, + Value transactionType, + Value transactionReason, + Value additionalFields, + Value rowid, +}); +typedef $$StockTableUpdateCompanionBuilder = StockCompanion Function({ + Value id, + Value tenantId, + Value facilityId, + Value productVariantId, + Value referenceId, + Value referenceIdType, + Value transactingPartyId, + Value transactingPartyType, + Value quantity, + Value waybillNumber, + Value receiverId, + Value receiverType, + Value senderId, + Value senderType, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value clientReferenceId, + Value isDeleted, + Value rowVersion, + Value transactionType, + Value transactionReason, + Value additionalFields, + Value rowid, +}); + +class $$StockTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $StockTable, + StockData, + $$StockTableFilterComposer, + $$StockTableOrderingComposer, + $$StockTableProcessedTableManager, + $$StockTableInsertCompanionBuilder, + $$StockTableUpdateCompanionBuilder> { + $$StockTableTableManager(_$LocalSqlDataStore db, $StockTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$StockTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$StockTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => $$StockTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value tenantId = const Value.absent(), + Value facilityId = const Value.absent(), + Value productVariantId = const Value.absent(), + Value referenceId = const Value.absent(), + Value referenceIdType = const Value.absent(), + Value transactingPartyId = const Value.absent(), + Value transactingPartyType = const Value.absent(), + Value quantity = const Value.absent(), + Value waybillNumber = const Value.absent(), + Value receiverId = const Value.absent(), + Value receiverType = const Value.absent(), + Value senderId = const Value.absent(), + Value senderType = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value clientReferenceId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value transactionType = const Value.absent(), + Value transactionReason = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + StockCompanion( + id: id, + tenantId: tenantId, + facilityId: facilityId, + productVariantId: productVariantId, + referenceId: referenceId, + referenceIdType: referenceIdType, + transactingPartyId: transactingPartyId, + transactingPartyType: transactingPartyType, + quantity: quantity, + waybillNumber: waybillNumber, + receiverId: receiverId, + receiverType: receiverType, + senderId: senderId, + senderType: senderType, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + isDeleted: isDeleted, + rowVersion: rowVersion, + transactionType: transactionType, + transactionReason: transactionReason, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + Value tenantId = const Value.absent(), + Value facilityId = const Value.absent(), + Value productVariantId = const Value.absent(), + Value referenceId = const Value.absent(), + Value referenceIdType = const Value.absent(), + Value transactingPartyId = const Value.absent(), + Value transactingPartyType = const Value.absent(), + Value quantity = const Value.absent(), + Value waybillNumber = const Value.absent(), + Value receiverId = const Value.absent(), + Value receiverType = const Value.absent(), + Value senderId = const Value.absent(), + Value senderType = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + required String clientReferenceId, + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value transactionType = const Value.absent(), + Value transactionReason = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + StockCompanion.insert( + id: id, + tenantId: tenantId, + facilityId: facilityId, + productVariantId: productVariantId, + referenceId: referenceId, + referenceIdType: referenceIdType, + transactingPartyId: transactingPartyId, + transactingPartyType: transactingPartyType, + quantity: quantity, + waybillNumber: waybillNumber, + receiverId: receiverId, + receiverType: receiverType, + senderId: senderId, + senderType: senderType, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + isDeleted: isDeleted, + rowVersion: rowVersion, + transactionType: transactionType, + transactionReason: transactionReason, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$StockTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $StockTable, + StockData, + $$StockTableFilterComposer, + $$StockTableOrderingComposer, + $$StockTableProcessedTableManager, + $$StockTableInsertCompanionBuilder, + $$StockTableUpdateCompanionBuilder> { + $$StockTableProcessedTableManager(super.$state); +} + +class $$StockTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $StockTable> { + $$StockTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get facilityId => $state.composableBuilder( + column: $state.table.facilityId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get productVariantId => $state.composableBuilder( + column: $state.table.productVariantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get referenceId => $state.composableBuilder( + column: $state.table.referenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get referenceIdType => $state.composableBuilder( + column: $state.table.referenceIdType, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get transactingPartyId => $state.composableBuilder( + column: $state.table.transactingPartyId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get transactingPartyType => $state.composableBuilder( + column: $state.table.transactingPartyType, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get quantity => $state.composableBuilder( + column: $state.table.quantity, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get waybillNumber => $state.composableBuilder( + column: $state.table.waybillNumber, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get receiverId => $state.composableBuilder( + column: $state.table.receiverId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get receiverType => $state.composableBuilder( + column: $state.table.receiverType, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get senderId => $state.composableBuilder( + column: $state.table.senderId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get senderType => $state.composableBuilder( + column: $state.table.senderType, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get transactionType => $state.composableBuilder( + column: $state.table.transactionType, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get transactionReason => $state.composableBuilder( + column: $state.table.transactionReason, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$StockTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $StockTable> { + $$StockTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get facilityId => $state.composableBuilder( + column: $state.table.facilityId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get productVariantId => $state.composableBuilder( + column: $state.table.productVariantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get referenceId => $state.composableBuilder( + column: $state.table.referenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get referenceIdType => $state.composableBuilder( + column: $state.table.referenceIdType, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get transactingPartyId => $state.composableBuilder( + column: $state.table.transactingPartyId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get transactingPartyType => $state.composableBuilder( + column: $state.table.transactingPartyType, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get quantity => $state.composableBuilder( + column: $state.table.quantity, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get waybillNumber => $state.composableBuilder( + column: $state.table.waybillNumber, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get receiverId => $state.composableBuilder( + column: $state.table.receiverId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get receiverType => $state.composableBuilder( + column: $state.table.receiverType, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get senderId => $state.composableBuilder( + column: $state.table.senderId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get senderType => $state.composableBuilder( + column: $state.table.senderType, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get transactionType => $state.composableBuilder( + column: $state.table.transactionType, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get transactionReason => $state.composableBuilder( + column: $state.table.transactionReason, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$StockReconciliationTableInsertCompanionBuilder + = StockReconciliationCompanion Function({ + Value id, + Value tenantId, + Value facilityId, + Value productVariantId, + Value referenceId, + Value referenceIdType, + Value physicalCount, + Value calculatedCount, + Value commentsOnReconciliation, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + required String clientReferenceId, + Value isDeleted, + Value rowVersion, + required int dateOfReconciliation, + Value additionalFields, + Value rowid, +}); +typedef $$StockReconciliationTableUpdateCompanionBuilder + = StockReconciliationCompanion Function({ + Value id, + Value tenantId, + Value facilityId, + Value productVariantId, + Value referenceId, + Value referenceIdType, + Value physicalCount, + Value calculatedCount, + Value commentsOnReconciliation, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value clientReferenceId, + Value isDeleted, + Value rowVersion, + Value dateOfReconciliation, + Value additionalFields, + Value rowid, +}); + +class $$StockReconciliationTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $StockReconciliationTable, + StockReconciliationData, + $$StockReconciliationTableFilterComposer, + $$StockReconciliationTableOrderingComposer, + $$StockReconciliationTableProcessedTableManager, + $$StockReconciliationTableInsertCompanionBuilder, + $$StockReconciliationTableUpdateCompanionBuilder> { + $$StockReconciliationTableTableManager( + _$LocalSqlDataStore db, $StockReconciliationTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: $$StockReconciliationTableFilterComposer( + ComposerState(db, table)), + orderingComposer: $$StockReconciliationTableOrderingComposer( + ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$StockReconciliationTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value tenantId = const Value.absent(), + Value facilityId = const Value.absent(), + Value productVariantId = const Value.absent(), + Value referenceId = const Value.absent(), + Value referenceIdType = const Value.absent(), + Value physicalCount = const Value.absent(), + Value calculatedCount = const Value.absent(), + Value commentsOnReconciliation = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value clientReferenceId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value dateOfReconciliation = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + StockReconciliationCompanion( + id: id, + tenantId: tenantId, + facilityId: facilityId, + productVariantId: productVariantId, + referenceId: referenceId, + referenceIdType: referenceIdType, + physicalCount: physicalCount, + calculatedCount: calculatedCount, + commentsOnReconciliation: commentsOnReconciliation, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + isDeleted: isDeleted, + rowVersion: rowVersion, + dateOfReconciliation: dateOfReconciliation, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + Value tenantId = const Value.absent(), + Value facilityId = const Value.absent(), + Value productVariantId = const Value.absent(), + Value referenceId = const Value.absent(), + Value referenceIdType = const Value.absent(), + Value physicalCount = const Value.absent(), + Value calculatedCount = const Value.absent(), + Value commentsOnReconciliation = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + required String clientReferenceId, + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + required int dateOfReconciliation, + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + StockReconciliationCompanion.insert( + id: id, + tenantId: tenantId, + facilityId: facilityId, + productVariantId: productVariantId, + referenceId: referenceId, + referenceIdType: referenceIdType, + physicalCount: physicalCount, + calculatedCount: calculatedCount, + commentsOnReconciliation: commentsOnReconciliation, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + isDeleted: isDeleted, + rowVersion: rowVersion, + dateOfReconciliation: dateOfReconciliation, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$StockReconciliationTableProcessedTableManager + extends ProcessedTableManager< + _$LocalSqlDataStore, + $StockReconciliationTable, + StockReconciliationData, + $$StockReconciliationTableFilterComposer, + $$StockReconciliationTableOrderingComposer, + $$StockReconciliationTableProcessedTableManager, + $$StockReconciliationTableInsertCompanionBuilder, + $$StockReconciliationTableUpdateCompanionBuilder> { + $$StockReconciliationTableProcessedTableManager(super.$state); +} + +class $$StockReconciliationTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $StockReconciliationTable> { + $$StockReconciliationTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get facilityId => $state.composableBuilder( + column: $state.table.facilityId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get productVariantId => $state.composableBuilder( + column: $state.table.productVariantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get referenceId => $state.composableBuilder( + column: $state.table.referenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get referenceIdType => $state.composableBuilder( + column: $state.table.referenceIdType, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get physicalCount => $state.composableBuilder( + column: $state.table.physicalCount, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get calculatedCount => $state.composableBuilder( + column: $state.table.calculatedCount, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get commentsOnReconciliation => + $state.composableBuilder( + column: $state.table.commentsOnReconciliation, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get dateOfReconciliation => $state.composableBuilder( + column: $state.table.dateOfReconciliation, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$StockReconciliationTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $StockReconciliationTable> { + $$StockReconciliationTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get facilityId => $state.composableBuilder( + column: $state.table.facilityId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get productVariantId => $state.composableBuilder( + column: $state.table.productVariantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get referenceId => $state.composableBuilder( + column: $state.table.referenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get referenceIdType => $state.composableBuilder( + column: $state.table.referenceIdType, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get physicalCount => $state.composableBuilder( + column: $state.table.physicalCount, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get calculatedCount => $state.composableBuilder( + column: $state.table.calculatedCount, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get commentsOnReconciliation => + $state.composableBuilder( + column: $state.table.commentsOnReconciliation, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get dateOfReconciliation => $state.composableBuilder( + column: $state.table.dateOfReconciliation, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$TargetTableInsertCompanionBuilder = TargetCompanion Function({ + required String id, + Value clientReferenceId, + Value totalNo, + Value targetNo, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value beneficiaryType, + Value additionalFields, + Value rowid, +}); +typedef $$TargetTableUpdateCompanionBuilder = TargetCompanion Function({ + Value id, + Value clientReferenceId, + Value totalNo, + Value targetNo, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value beneficiaryType, + Value additionalFields, + Value rowid, +}); + +class $$TargetTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $TargetTable, + TargetData, + $$TargetTableFilterComposer, + $$TargetTableOrderingComposer, + $$TargetTableProcessedTableManager, + $$TargetTableInsertCompanionBuilder, + $$TargetTableUpdateCompanionBuilder> { + $$TargetTableTableManager(_$LocalSqlDataStore db, $TargetTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$TargetTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$TargetTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => $$TargetTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value clientReferenceId = const Value.absent(), + Value totalNo = const Value.absent(), + Value targetNo = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value beneficiaryType = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + TargetCompanion( + id: id, + clientReferenceId: clientReferenceId, + totalNo: totalNo, + targetNo: targetNo, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + beneficiaryType: beneficiaryType, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + required String id, + Value clientReferenceId = const Value.absent(), + Value totalNo = const Value.absent(), + Value targetNo = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value beneficiaryType = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + TargetCompanion.insert( + id: id, + clientReferenceId: clientReferenceId, + totalNo: totalNo, + targetNo: targetNo, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + beneficiaryType: beneficiaryType, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$TargetTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $TargetTable, + TargetData, + $$TargetTableFilterComposer, + $$TargetTableOrderingComposer, + $$TargetTableProcessedTableManager, + $$TargetTableInsertCompanionBuilder, + $$TargetTableUpdateCompanionBuilder> { + $$TargetTableProcessedTableManager(super.$state); +} + +class $$TargetTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $TargetTable> { + $$TargetTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get totalNo => $state.composableBuilder( + column: $state.table.totalNo, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get targetNo => $state.composableBuilder( + column: $state.table.targetNo, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnWithTypeConverterFilters + get beneficiaryType => $state.composableBuilder( + column: $state.table.beneficiaryType, + builder: (column, joinBuilders) => ColumnWithTypeConverterFilters( + column, + joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$TargetTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $TargetTable> { + $$TargetTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get totalNo => $state.composableBuilder( + column: $state.table.totalNo, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get targetNo => $state.composableBuilder( + column: $state.table.targetNo, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get beneficiaryType => $state.composableBuilder( + column: $state.table.beneficiaryType, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$ServiceTableInsertCompanionBuilder = ServiceCompanion Function({ + Value id, + required String clientId, + Value serviceDefId, + Value isActive, + Value accountId, + Value additionalDetails, + Value createdAt, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$ServiceTableUpdateCompanionBuilder = ServiceCompanion Function({ + Value id, + Value clientId, + Value serviceDefId, + Value isActive, + Value accountId, + Value additionalDetails, + Value createdAt, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$ServiceTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $ServiceTable, + ServiceData, + $$ServiceTableFilterComposer, + $$ServiceTableOrderingComposer, + $$ServiceTableProcessedTableManager, + $$ServiceTableInsertCompanionBuilder, + $$ServiceTableUpdateCompanionBuilder> { + $$ServiceTableTableManager(_$LocalSqlDataStore db, $ServiceTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$ServiceTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$ServiceTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => $$ServiceTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value clientId = const Value.absent(), + Value serviceDefId = const Value.absent(), + Value isActive = const Value.absent(), + Value accountId = const Value.absent(), + Value additionalDetails = const Value.absent(), + Value createdAt = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ServiceCompanion( + id: id, + clientId: clientId, + serviceDefId: serviceDefId, + isActive: isActive, + accountId: accountId, + additionalDetails: additionalDetails, + createdAt: createdAt, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + required String clientId, + Value serviceDefId = const Value.absent(), + Value isActive = const Value.absent(), + Value accountId = const Value.absent(), + Value additionalDetails = const Value.absent(), + Value createdAt = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ServiceCompanion.insert( + id: id, + clientId: clientId, + serviceDefId: serviceDefId, + isActive: isActive, + accountId: accountId, + additionalDetails: additionalDetails, + createdAt: createdAt, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$ServiceTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $ServiceTable, + ServiceData, + $$ServiceTableFilterComposer, + $$ServiceTableOrderingComposer, + $$ServiceTableProcessedTableManager, + $$ServiceTableInsertCompanionBuilder, + $$ServiceTableUpdateCompanionBuilder> { + $$ServiceTableProcessedTableManager(super.$state); +} + +class $$ServiceTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $ServiceTable> { + $$ServiceTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientId => $state.composableBuilder( + column: $state.table.clientId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get serviceDefId => $state.composableBuilder( + column: $state.table.serviceDefId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isActive => $state.composableBuilder( + column: $state.table.isActive, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get accountId => $state.composableBuilder( + column: $state.table.accountId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalDetails => $state.composableBuilder( + column: $state.table.additionalDetails, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get createdAt => $state.composableBuilder( + column: $state.table.createdAt, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$ServiceTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $ServiceTable> { + $$ServiceTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientId => $state.composableBuilder( + column: $state.table.clientId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get serviceDefId => $state.composableBuilder( + column: $state.table.serviceDefId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isActive => $state.composableBuilder( + column: $state.table.isActive, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get accountId => $state.composableBuilder( + column: $state.table.accountId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalDetails => $state.composableBuilder( + column: $state.table.additionalDetails, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get createdAt => $state.composableBuilder( + column: $state.table.createdAt, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$ServiceAttributesTableInsertCompanionBuilder + = ServiceAttributesCompanion Function({ + Value attributeCode, + Value value, + Value dataType, + Value referenceId, + Value additionalDetails, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + required String clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$ServiceAttributesTableUpdateCompanionBuilder + = ServiceAttributesCompanion Function({ + Value attributeCode, + Value value, + Value dataType, + Value referenceId, + Value additionalDetails, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$ServiceAttributesTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $ServiceAttributesTable, + ServiceAttribute, + $$ServiceAttributesTableFilterComposer, + $$ServiceAttributesTableOrderingComposer, + $$ServiceAttributesTableProcessedTableManager, + $$ServiceAttributesTableInsertCompanionBuilder, + $$ServiceAttributesTableUpdateCompanionBuilder> { + $$ServiceAttributesTableTableManager( + _$LocalSqlDataStore db, $ServiceAttributesTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$ServiceAttributesTableFilterComposer(ComposerState(db, table)), + orderingComposer: $$ServiceAttributesTableOrderingComposer( + ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$ServiceAttributesTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value attributeCode = const Value.absent(), + Value value = const Value.absent(), + Value dataType = const Value.absent(), + Value referenceId = const Value.absent(), + Value additionalDetails = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value clientReferenceId = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ServiceAttributesCompanion( + attributeCode: attributeCode, + value: value, + dataType: dataType, + referenceId: referenceId, + additionalDetails: additionalDetails, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value attributeCode = const Value.absent(), + Value value = const Value.absent(), + Value dataType = const Value.absent(), + Value referenceId = const Value.absent(), + Value additionalDetails = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + required String clientReferenceId, + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ServiceAttributesCompanion.insert( + attributeCode: attributeCode, + value: value, + dataType: dataType, + referenceId: referenceId, + additionalDetails: additionalDetails, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$ServiceAttributesTableProcessedTableManager + extends ProcessedTableManager< + _$LocalSqlDataStore, + $ServiceAttributesTable, + ServiceAttribute, + $$ServiceAttributesTableFilterComposer, + $$ServiceAttributesTableOrderingComposer, + $$ServiceAttributesTableProcessedTableManager, + $$ServiceAttributesTableInsertCompanionBuilder, + $$ServiceAttributesTableUpdateCompanionBuilder> { + $$ServiceAttributesTableProcessedTableManager(super.$state); +} + +class $$ServiceAttributesTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $ServiceAttributesTable> { + $$ServiceAttributesTableFilterComposer(super.$state); + ColumnFilters get attributeCode => $state.composableBuilder( + column: $state.table.attributeCode, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get value => $state.composableBuilder( + column: $state.table.value, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get dataType => $state.composableBuilder( + column: $state.table.dataType, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get referenceId => $state.composableBuilder( + column: $state.table.referenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalDetails => $state.composableBuilder( + column: $state.table.additionalDetails, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$ServiceAttributesTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $ServiceAttributesTable> { + $$ServiceAttributesTableOrderingComposer(super.$state); + ColumnOrderings get attributeCode => $state.composableBuilder( + column: $state.table.attributeCode, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get value => $state.composableBuilder( + column: $state.table.value, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get dataType => $state.composableBuilder( + column: $state.table.dataType, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get referenceId => $state.composableBuilder( + column: $state.table.referenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalDetails => $state.composableBuilder( + column: $state.table.additionalDetails, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$ServiceDefinitionTableInsertCompanionBuilder + = ServiceDefinitionCompanion Function({ + Value id, + Value tenantId, + Value code, + Value isActive, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$ServiceDefinitionTableUpdateCompanionBuilder + = ServiceDefinitionCompanion Function({ + Value id, + Value tenantId, + Value code, + Value isActive, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$ServiceDefinitionTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $ServiceDefinitionTable, + ServiceDefinitionData, + $$ServiceDefinitionTableFilterComposer, + $$ServiceDefinitionTableOrderingComposer, + $$ServiceDefinitionTableProcessedTableManager, + $$ServiceDefinitionTableInsertCompanionBuilder, + $$ServiceDefinitionTableUpdateCompanionBuilder> { + $$ServiceDefinitionTableTableManager( + _$LocalSqlDataStore db, $ServiceDefinitionTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$ServiceDefinitionTableFilterComposer(ComposerState(db, table)), + orderingComposer: $$ServiceDefinitionTableOrderingComposer( + ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$ServiceDefinitionTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value tenantId = const Value.absent(), + Value code = const Value.absent(), + Value isActive = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ServiceDefinitionCompanion( + id: id, + tenantId: tenantId, + code: code, + isActive: isActive, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + Value tenantId = const Value.absent(), + Value code = const Value.absent(), + Value isActive = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ServiceDefinitionCompanion.insert( + id: id, + tenantId: tenantId, + code: code, + isActive: isActive, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$ServiceDefinitionTableProcessedTableManager + extends ProcessedTableManager< + _$LocalSqlDataStore, + $ServiceDefinitionTable, + ServiceDefinitionData, + $$ServiceDefinitionTableFilterComposer, + $$ServiceDefinitionTableOrderingComposer, + $$ServiceDefinitionTableProcessedTableManager, + $$ServiceDefinitionTableInsertCompanionBuilder, + $$ServiceDefinitionTableUpdateCompanionBuilder> { + $$ServiceDefinitionTableProcessedTableManager(super.$state); +} + +class $$ServiceDefinitionTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $ServiceDefinitionTable> { + $$ServiceDefinitionTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get code => $state.composableBuilder( + column: $state.table.code, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isActive => $state.composableBuilder( + column: $state.table.isActive, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$ServiceDefinitionTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $ServiceDefinitionTable> { + $$ServiceDefinitionTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get code => $state.composableBuilder( + column: $state.table.code, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isActive => $state.composableBuilder( + column: $state.table.isActive, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$LocalityTableInsertCompanionBuilder = LocalityCompanion Function({ + required String code, + Value name, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$LocalityTableUpdateCompanionBuilder = LocalityCompanion Function({ + Value code, + Value name, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$LocalityTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $LocalityTable, + LocalityData, + $$LocalityTableFilterComposer, + $$LocalityTableOrderingComposer, + $$LocalityTableProcessedTableManager, + $$LocalityTableInsertCompanionBuilder, + $$LocalityTableUpdateCompanionBuilder> { + $$LocalityTableTableManager(_$LocalSqlDataStore db, $LocalityTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$LocalityTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$LocalityTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$LocalityTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value code = const Value.absent(), + Value name = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + LocalityCompanion( + code: code, + name: name, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + required String code, + Value name = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + LocalityCompanion.insert( + code: code, + name: name, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$LocalityTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $LocalityTable, + LocalityData, + $$LocalityTableFilterComposer, + $$LocalityTableOrderingComposer, + $$LocalityTableProcessedTableManager, + $$LocalityTableInsertCompanionBuilder, + $$LocalityTableUpdateCompanionBuilder> { + $$LocalityTableProcessedTableManager(super.$state); +} + +class $$LocalityTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $LocalityTable> { + $$LocalityTableFilterComposer(super.$state); + ColumnFilters get code => $state.composableBuilder( + column: $state.table.code, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get name => $state.composableBuilder( + column: $state.table.name, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$LocalityTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $LocalityTable> { + $$LocalityTableOrderingComposer(super.$state); + ColumnOrderings get code => $state.composableBuilder( + column: $state.table.code, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get name => $state.composableBuilder( + column: $state.table.name, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$StaffTableInsertCompanionBuilder = StaffCompanion Function({ + Value id, + required String tenantId, + required String registerId, + required String userId, + Value enrollmentDate, + Value denrollmentDate, + Value rowid, +}); +typedef $$StaffTableUpdateCompanionBuilder = StaffCompanion Function({ + Value id, + Value tenantId, + Value registerId, + Value userId, + Value enrollmentDate, + Value denrollmentDate, + Value rowid, +}); + +class $$StaffTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $StaffTable, + StaffData, + $$StaffTableFilterComposer, + $$StaffTableOrderingComposer, + $$StaffTableProcessedTableManager, + $$StaffTableInsertCompanionBuilder, + $$StaffTableUpdateCompanionBuilder> { + $$StaffTableTableManager(_$LocalSqlDataStore db, $StaffTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$StaffTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$StaffTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => $$StaffTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value tenantId = const Value.absent(), + Value registerId = const Value.absent(), + Value userId = const Value.absent(), + Value enrollmentDate = const Value.absent(), + Value denrollmentDate = const Value.absent(), + Value rowid = const Value.absent(), + }) => + StaffCompanion( + id: id, + tenantId: tenantId, + registerId: registerId, + userId: userId, + enrollmentDate: enrollmentDate, + denrollmentDate: denrollmentDate, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + required String tenantId, + required String registerId, + required String userId, + Value enrollmentDate = const Value.absent(), + Value denrollmentDate = const Value.absent(), + Value rowid = const Value.absent(), + }) => + StaffCompanion.insert( + id: id, + tenantId: tenantId, + registerId: registerId, + userId: userId, + enrollmentDate: enrollmentDate, + denrollmentDate: denrollmentDate, + rowid: rowid, + ), + )); +} + +class $$StaffTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $StaffTable, + StaffData, + $$StaffTableFilterComposer, + $$StaffTableOrderingComposer, + $$StaffTableProcessedTableManager, + $$StaffTableInsertCompanionBuilder, + $$StaffTableUpdateCompanionBuilder> { + $$StaffTableProcessedTableManager(super.$state); +} + +class $$StaffTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $StaffTable> { + $$StaffTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get registerId => $state.composableBuilder( + column: $state.table.registerId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get userId => $state.composableBuilder( + column: $state.table.userId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get enrollmentDate => $state.composableBuilder( + column: $state.table.enrollmentDate, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get denrollmentDate => $state.composableBuilder( + column: $state.table.denrollmentDate, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$StaffTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $StaffTable> { + $$StaffTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get registerId => $state.composableBuilder( + column: $state.table.registerId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get userId => $state.composableBuilder( + column: $state.table.userId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get enrollmentDate => $state.composableBuilder( + column: $state.table.enrollmentDate, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get denrollmentDate => $state.composableBuilder( + column: $state.table.denrollmentDate, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$AttributesTableInsertCompanionBuilder = AttributesCompanion Function({ + Value id, + Value dataType, + Value referenceId, + Value tenantId, + Value code, + Value values, + Value isActive, + Value required, + Value regex, + Value order, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$AttributesTableUpdateCompanionBuilder = AttributesCompanion Function({ + Value id, + Value dataType, + Value referenceId, + Value tenantId, + Value code, + Value values, + Value isActive, + Value required, + Value regex, + Value order, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$AttributesTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $AttributesTable, + Attribute, + $$AttributesTableFilterComposer, + $$AttributesTableOrderingComposer, + $$AttributesTableProcessedTableManager, + $$AttributesTableInsertCompanionBuilder, + $$AttributesTableUpdateCompanionBuilder> { + $$AttributesTableTableManager(_$LocalSqlDataStore db, $AttributesTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$AttributesTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$AttributesTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$AttributesTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value dataType = const Value.absent(), + Value referenceId = const Value.absent(), + Value tenantId = const Value.absent(), + Value code = const Value.absent(), + Value values = const Value.absent(), + Value isActive = const Value.absent(), + Value required = const Value.absent(), + Value regex = const Value.absent(), + Value order = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + AttributesCompanion( + id: id, + dataType: dataType, + referenceId: referenceId, + tenantId: tenantId, + code: code, + values: values, + isActive: isActive, + required: required, + regex: regex, + order: order, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + Value dataType = const Value.absent(), + Value referenceId = const Value.absent(), + Value tenantId = const Value.absent(), + Value code = const Value.absent(), + Value values = const Value.absent(), + Value isActive = const Value.absent(), + Value required = const Value.absent(), + Value regex = const Value.absent(), + Value order = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + AttributesCompanion.insert( + id: id, + dataType: dataType, + referenceId: referenceId, + tenantId: tenantId, + code: code, + values: values, + isActive: isActive, + required: required, + regex: regex, + order: order, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$AttributesTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $AttributesTable, + Attribute, + $$AttributesTableFilterComposer, + $$AttributesTableOrderingComposer, + $$AttributesTableProcessedTableManager, + $$AttributesTableInsertCompanionBuilder, + $$AttributesTableUpdateCompanionBuilder> { + $$AttributesTableProcessedTableManager(super.$state); +} + +class $$AttributesTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $AttributesTable> { + $$AttributesTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get dataType => $state.composableBuilder( + column: $state.table.dataType, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get referenceId => $state.composableBuilder( + column: $state.table.referenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get code => $state.composableBuilder( + column: $state.table.code, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get values => $state.composableBuilder( + column: $state.table.values, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isActive => $state.composableBuilder( + column: $state.table.isActive, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get required => $state.composableBuilder( + column: $state.table.required, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get regex => $state.composableBuilder( + column: $state.table.regex, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get order => $state.composableBuilder( + column: $state.table.order, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$AttributesTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $AttributesTable> { + $$AttributesTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get dataType => $state.composableBuilder( + column: $state.table.dataType, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get referenceId => $state.composableBuilder( + column: $state.table.referenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get code => $state.composableBuilder( + column: $state.table.code, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get values => $state.composableBuilder( + column: $state.table.values, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isActive => $state.composableBuilder( + column: $state.table.isActive, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get required => $state.composableBuilder( + column: $state.table.required, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get regex => $state.composableBuilder( + column: $state.table.regex, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get order => $state.composableBuilder( + column: $state.table.order, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$PgrServiceTableInsertCompanionBuilder = PgrServiceCompanion Function({ + required bool active, + required String clientReferenceId, + Value id, + required String tenantId, + required String serviceCode, + required String description, + Value serviceRequestId, + Value accountId, + required PgrServiceApplicationStatus applicationStatus, + Value source, + Value auditCreatedBy, + Value auditCreatedTime, + Value auditModifiedBy, + Value auditModifiedTime, + required bool isDeleted, + required int rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$PgrServiceTableUpdateCompanionBuilder = PgrServiceCompanion Function({ + Value active, + Value clientReferenceId, + Value id, + Value tenantId, + Value serviceCode, + Value description, + Value serviceRequestId, + Value accountId, + Value applicationStatus, + Value source, + Value auditCreatedBy, + Value auditCreatedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$PgrServiceTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $PgrServiceTable, + PgrServiceData, + $$PgrServiceTableFilterComposer, + $$PgrServiceTableOrderingComposer, + $$PgrServiceTableProcessedTableManager, + $$PgrServiceTableInsertCompanionBuilder, + $$PgrServiceTableUpdateCompanionBuilder> { + $$PgrServiceTableTableManager(_$LocalSqlDataStore db, $PgrServiceTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$PgrServiceTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$PgrServiceTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$PgrServiceTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value active = const Value.absent(), + Value clientReferenceId = const Value.absent(), + Value id = const Value.absent(), + Value tenantId = const Value.absent(), + Value serviceCode = const Value.absent(), + Value description = const Value.absent(), + Value serviceRequestId = const Value.absent(), + Value accountId = const Value.absent(), + Value applicationStatus = + const Value.absent(), + Value source = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + PgrServiceCompanion( + active: active, + clientReferenceId: clientReferenceId, + id: id, + tenantId: tenantId, + serviceCode: serviceCode, + description: description, + serviceRequestId: serviceRequestId, + accountId: accountId, + applicationStatus: applicationStatus, + source: source, + auditCreatedBy: auditCreatedBy, + auditCreatedTime: auditCreatedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + required bool active, + required String clientReferenceId, + Value id = const Value.absent(), + required String tenantId, + required String serviceCode, + required String description, + Value serviceRequestId = const Value.absent(), + Value accountId = const Value.absent(), + required PgrServiceApplicationStatus applicationStatus, + Value source = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + required bool isDeleted, + required int rowVersion, + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + PgrServiceCompanion.insert( + active: active, + clientReferenceId: clientReferenceId, + id: id, + tenantId: tenantId, + serviceCode: serviceCode, + description: description, + serviceRequestId: serviceRequestId, + accountId: accountId, + applicationStatus: applicationStatus, + source: source, + auditCreatedBy: auditCreatedBy, + auditCreatedTime: auditCreatedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$PgrServiceTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $PgrServiceTable, + PgrServiceData, + $$PgrServiceTableFilterComposer, + $$PgrServiceTableOrderingComposer, + $$PgrServiceTableProcessedTableManager, + $$PgrServiceTableInsertCompanionBuilder, + $$PgrServiceTableUpdateCompanionBuilder> { + $$PgrServiceTableProcessedTableManager(super.$state); +} + +class $$PgrServiceTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $PgrServiceTable> { + $$PgrServiceTableFilterComposer(super.$state); + ColumnFilters get active => $state.composableBuilder( + column: $state.table.active, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get serviceCode => $state.composableBuilder( + column: $state.table.serviceCode, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get description => $state.composableBuilder( + column: $state.table.description, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get serviceRequestId => $state.composableBuilder( + column: $state.table.serviceRequestId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get accountId => $state.composableBuilder( + column: $state.table.accountId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnWithTypeConverterFilters + get applicationStatus => $state.composableBuilder( + column: $state.table.applicationStatus, + builder: (column, joinBuilders) => ColumnWithTypeConverterFilters( + column, + joinBuilders: joinBuilders)); + + ColumnFilters get source => $state.composableBuilder( + column: $state.table.source, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$PgrServiceTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $PgrServiceTable> { + $$PgrServiceTableOrderingComposer(super.$state); + ColumnOrderings get active => $state.composableBuilder( + column: $state.table.active, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get serviceCode => $state.composableBuilder( + column: $state.table.serviceCode, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get description => $state.composableBuilder( + column: $state.table.description, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get serviceRequestId => $state.composableBuilder( + column: $state.table.serviceRequestId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get accountId => $state.composableBuilder( + column: $state.table.accountId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get applicationStatus => $state.composableBuilder( + column: $state.table.applicationStatus, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get source => $state.composableBuilder( + column: $state.table.source, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$PgrComplainantTableInsertCompanionBuilder = PgrComplainantCompanion + Function({ + Value id, + required String clientReferenceId, + required String complaintClientReferenceId, + Value userName, + Value name, + Value type, + Value mobileNumber, + Value emailId, + required String tenantId, + Value uuid, + required bool active, + Value auditCreatedBy, + Value auditCreatedTime, + Value auditModifiedBy, + Value auditModifiedTime, + required bool isDeleted, + required int rowVersion, + Value rowid, +}); +typedef $$PgrComplainantTableUpdateCompanionBuilder = PgrComplainantCompanion + Function({ + Value id, + Value clientReferenceId, + Value complaintClientReferenceId, + Value userName, + Value name, + Value type, + Value mobileNumber, + Value emailId, + Value tenantId, + Value uuid, + Value active, + Value auditCreatedBy, + Value auditCreatedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value isDeleted, + Value rowVersion, + Value rowid, +}); + +class $$PgrComplainantTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $PgrComplainantTable, + PgrComplainantData, + $$PgrComplainantTableFilterComposer, + $$PgrComplainantTableOrderingComposer, + $$PgrComplainantTableProcessedTableManager, + $$PgrComplainantTableInsertCompanionBuilder, + $$PgrComplainantTableUpdateCompanionBuilder> { + $$PgrComplainantTableTableManager( + _$LocalSqlDataStore db, $PgrComplainantTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$PgrComplainantTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$PgrComplainantTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$PgrComplainantTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value clientReferenceId = const Value.absent(), + Value complaintClientReferenceId = const Value.absent(), + Value userName = const Value.absent(), + Value name = const Value.absent(), + Value type = const Value.absent(), + Value mobileNumber = const Value.absent(), + Value emailId = const Value.absent(), + Value tenantId = const Value.absent(), + Value uuid = const Value.absent(), + Value active = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value rowid = const Value.absent(), + }) => + PgrComplainantCompanion( + id: id, + clientReferenceId: clientReferenceId, + complaintClientReferenceId: complaintClientReferenceId, + userName: userName, + name: name, + type: type, + mobileNumber: mobileNumber, + emailId: emailId, + tenantId: tenantId, + uuid: uuid, + active: active, + auditCreatedBy: auditCreatedBy, + auditCreatedTime: auditCreatedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + isDeleted: isDeleted, + rowVersion: rowVersion, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + required String clientReferenceId, + required String complaintClientReferenceId, + Value userName = const Value.absent(), + Value name = const Value.absent(), + Value type = const Value.absent(), + Value mobileNumber = const Value.absent(), + Value emailId = const Value.absent(), + required String tenantId, + Value uuid = const Value.absent(), + required bool active, + Value auditCreatedBy = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + required bool isDeleted, + required int rowVersion, + Value rowid = const Value.absent(), + }) => + PgrComplainantCompanion.insert( + id: id, + clientReferenceId: clientReferenceId, + complaintClientReferenceId: complaintClientReferenceId, + userName: userName, + name: name, + type: type, + mobileNumber: mobileNumber, + emailId: emailId, + tenantId: tenantId, + uuid: uuid, + active: active, + auditCreatedBy: auditCreatedBy, + auditCreatedTime: auditCreatedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + isDeleted: isDeleted, + rowVersion: rowVersion, + rowid: rowid, + ), + )); +} + +class $$PgrComplainantTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $PgrComplainantTable, + PgrComplainantData, + $$PgrComplainantTableFilterComposer, + $$PgrComplainantTableOrderingComposer, + $$PgrComplainantTableProcessedTableManager, + $$PgrComplainantTableInsertCompanionBuilder, + $$PgrComplainantTableUpdateCompanionBuilder> { + $$PgrComplainantTableProcessedTableManager(super.$state); +} + +class $$PgrComplainantTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $PgrComplainantTable> { + $$PgrComplainantTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get complaintClientReferenceId => + $state.composableBuilder( + column: $state.table.complaintClientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get userName => $state.composableBuilder( + column: $state.table.userName, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get name => $state.composableBuilder( + column: $state.table.name, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get type => $state.composableBuilder( + column: $state.table.type, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get mobileNumber => $state.composableBuilder( + column: $state.table.mobileNumber, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get emailId => $state.composableBuilder( + column: $state.table.emailId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get uuid => $state.composableBuilder( + column: $state.table.uuid, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get active => $state.composableBuilder( + column: $state.table.active, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$PgrComplainantTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $PgrComplainantTable> { + $$PgrComplainantTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get complaintClientReferenceId => + $state.composableBuilder( + column: $state.table.complaintClientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get userName => $state.composableBuilder( + column: $state.table.userName, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get name => $state.composableBuilder( + column: $state.table.name, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get type => $state.composableBuilder( + column: $state.table.type, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get mobileNumber => $state.composableBuilder( + column: $state.table.mobileNumber, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get emailId => $state.composableBuilder( + column: $state.table.emailId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get uuid => $state.composableBuilder( + column: $state.table.uuid, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get active => $state.composableBuilder( + column: $state.table.active, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$UserTableInsertCompanionBuilder = UserCompanion Function({ + Value id, + Value userName, + Value salutation, + Value name, + Value gender, + Value mobileNumber, + Value emailId, + Value altContactNumber, + Value pan, + Value aadhaarNumber, + Value permanentAddress, + Value permanentCity, + Value permanentPinCode, + Value correspondenceAddress, + Value correspondenceCity, + Value correspondencePinCode, + Value alternatemobilenumber, + Value active, + Value locale, + Value type, + Value accountLocked, + Value accountLockedDate, + Value fatherOrHusbandName, + Value relationship, + Value signature, + Value bloodGroup, + Value photo, + Value identificationMark, + Value createdBy, + Value lastModifiedBy, + Value tenantId, + Value uuid, + Value createdDate, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$UserTableUpdateCompanionBuilder = UserCompanion Function({ + Value id, + Value userName, + Value salutation, + Value name, + Value gender, + Value mobileNumber, + Value emailId, + Value altContactNumber, + Value pan, + Value aadhaarNumber, + Value permanentAddress, + Value permanentCity, + Value permanentPinCode, + Value correspondenceAddress, + Value correspondenceCity, + Value correspondencePinCode, + Value alternatemobilenumber, + Value active, + Value locale, + Value type, + Value accountLocked, + Value accountLockedDate, + Value fatherOrHusbandName, + Value relationship, + Value signature, + Value bloodGroup, + Value photo, + Value identificationMark, + Value createdBy, + Value lastModifiedBy, + Value tenantId, + Value uuid, + Value createdDate, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$UserTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $UserTable, + UserData, + $$UserTableFilterComposer, + $$UserTableOrderingComposer, + $$UserTableProcessedTableManager, + $$UserTableInsertCompanionBuilder, + $$UserTableUpdateCompanionBuilder> { + $$UserTableTableManager(_$LocalSqlDataStore db, $UserTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$UserTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$UserTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => $$UserTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value userName = const Value.absent(), + Value salutation = const Value.absent(), + Value name = const Value.absent(), + Value gender = const Value.absent(), + Value mobileNumber = const Value.absent(), + Value emailId = const Value.absent(), + Value altContactNumber = const Value.absent(), + Value pan = const Value.absent(), + Value aadhaarNumber = const Value.absent(), + Value permanentAddress = const Value.absent(), + Value permanentCity = const Value.absent(), + Value permanentPinCode = const Value.absent(), + Value correspondenceAddress = const Value.absent(), + Value correspondenceCity = const Value.absent(), + Value correspondencePinCode = const Value.absent(), + Value alternatemobilenumber = const Value.absent(), + Value active = const Value.absent(), + Value locale = const Value.absent(), + Value type = const Value.absent(), + Value accountLocked = const Value.absent(), + Value accountLockedDate = const Value.absent(), + Value fatherOrHusbandName = const Value.absent(), + Value relationship = const Value.absent(), + Value signature = const Value.absent(), + Value bloodGroup = const Value.absent(), + Value photo = const Value.absent(), + Value identificationMark = const Value.absent(), + Value createdBy = const Value.absent(), + Value lastModifiedBy = const Value.absent(), + Value tenantId = const Value.absent(), + Value uuid = const Value.absent(), + Value createdDate = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + UserCompanion( + id: id, + userName: userName, + salutation: salutation, + name: name, + gender: gender, + mobileNumber: mobileNumber, + emailId: emailId, + altContactNumber: altContactNumber, + pan: pan, + aadhaarNumber: aadhaarNumber, + permanentAddress: permanentAddress, + permanentCity: permanentCity, + permanentPinCode: permanentPinCode, + correspondenceAddress: correspondenceAddress, + correspondenceCity: correspondenceCity, + correspondencePinCode: correspondencePinCode, + alternatemobilenumber: alternatemobilenumber, + active: active, + locale: locale, + type: type, + accountLocked: accountLocked, + accountLockedDate: accountLockedDate, + fatherOrHusbandName: fatherOrHusbandName, + relationship: relationship, + signature: signature, + bloodGroup: bloodGroup, + photo: photo, + identificationMark: identificationMark, + createdBy: createdBy, + lastModifiedBy: lastModifiedBy, + tenantId: tenantId, + uuid: uuid, + createdDate: createdDate, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + Value userName = const Value.absent(), + Value salutation = const Value.absent(), + Value name = const Value.absent(), + Value gender = const Value.absent(), + Value mobileNumber = const Value.absent(), + Value emailId = const Value.absent(), + Value altContactNumber = const Value.absent(), + Value pan = const Value.absent(), + Value aadhaarNumber = const Value.absent(), + Value permanentAddress = const Value.absent(), + Value permanentCity = const Value.absent(), + Value permanentPinCode = const Value.absent(), + Value correspondenceAddress = const Value.absent(), + Value correspondenceCity = const Value.absent(), + Value correspondencePinCode = const Value.absent(), + Value alternatemobilenumber = const Value.absent(), + Value active = const Value.absent(), + Value locale = const Value.absent(), + Value type = const Value.absent(), + Value accountLocked = const Value.absent(), + Value accountLockedDate = const Value.absent(), + Value fatherOrHusbandName = const Value.absent(), + Value relationship = const Value.absent(), + Value signature = const Value.absent(), + Value bloodGroup = const Value.absent(), + Value photo = const Value.absent(), + Value identificationMark = const Value.absent(), + Value createdBy = const Value.absent(), + Value lastModifiedBy = const Value.absent(), + Value tenantId = const Value.absent(), + Value uuid = const Value.absent(), + Value createdDate = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + UserCompanion.insert( + id: id, + userName: userName, + salutation: salutation, + name: name, + gender: gender, + mobileNumber: mobileNumber, + emailId: emailId, + altContactNumber: altContactNumber, + pan: pan, + aadhaarNumber: aadhaarNumber, + permanentAddress: permanentAddress, + permanentCity: permanentCity, + permanentPinCode: permanentPinCode, + correspondenceAddress: correspondenceAddress, + correspondenceCity: correspondenceCity, + correspondencePinCode: correspondencePinCode, + alternatemobilenumber: alternatemobilenumber, + active: active, + locale: locale, + type: type, + accountLocked: accountLocked, + accountLockedDate: accountLockedDate, + fatherOrHusbandName: fatherOrHusbandName, + relationship: relationship, + signature: signature, + bloodGroup: bloodGroup, + photo: photo, + identificationMark: identificationMark, + createdBy: createdBy, + lastModifiedBy: lastModifiedBy, + tenantId: tenantId, + uuid: uuid, + createdDate: createdDate, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$UserTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $UserTable, + UserData, + $$UserTableFilterComposer, + $$UserTableOrderingComposer, + $$UserTableProcessedTableManager, + $$UserTableInsertCompanionBuilder, + $$UserTableUpdateCompanionBuilder> { + $$UserTableProcessedTableManager(super.$state); +} + +class $$UserTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $UserTable> { + $$UserTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get userName => $state.composableBuilder( + column: $state.table.userName, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get salutation => $state.composableBuilder( + column: $state.table.salutation, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get name => $state.composableBuilder( + column: $state.table.name, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get gender => $state.composableBuilder( + column: $state.table.gender, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get mobileNumber => $state.composableBuilder( + column: $state.table.mobileNumber, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get emailId => $state.composableBuilder( + column: $state.table.emailId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get altContactNumber => $state.composableBuilder( + column: $state.table.altContactNumber, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get pan => $state.composableBuilder( + column: $state.table.pan, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get aadhaarNumber => $state.composableBuilder( + column: $state.table.aadhaarNumber, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get permanentAddress => $state.composableBuilder( + column: $state.table.permanentAddress, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get permanentCity => $state.composableBuilder( + column: $state.table.permanentCity, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get permanentPinCode => $state.composableBuilder( + column: $state.table.permanentPinCode, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get correspondenceAddress => $state.composableBuilder( + column: $state.table.correspondenceAddress, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get correspondenceCity => $state.composableBuilder( + column: $state.table.correspondenceCity, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get correspondencePinCode => $state.composableBuilder( + column: $state.table.correspondencePinCode, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get alternatemobilenumber => $state.composableBuilder( + column: $state.table.alternatemobilenumber, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get active => $state.composableBuilder( + column: $state.table.active, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get locale => $state.composableBuilder( + column: $state.table.locale, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get type => $state.composableBuilder( + column: $state.table.type, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get accountLocked => $state.composableBuilder( + column: $state.table.accountLocked, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get accountLockedDate => $state.composableBuilder( + column: $state.table.accountLockedDate, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get fatherOrHusbandName => $state.composableBuilder( + column: $state.table.fatherOrHusbandName, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get relationship => $state.composableBuilder( + column: $state.table.relationship, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get signature => $state.composableBuilder( + column: $state.table.signature, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get bloodGroup => $state.composableBuilder( + column: $state.table.bloodGroup, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get photo => $state.composableBuilder( + column: $state.table.photo, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get identificationMark => $state.composableBuilder( + column: $state.table.identificationMark, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get createdBy => $state.composableBuilder( + column: $state.table.createdBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get lastModifiedBy => $state.composableBuilder( + column: $state.table.lastModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get uuid => $state.composableBuilder( + column: $state.table.uuid, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get createdDate => $state.composableBuilder( + column: $state.table.createdDate, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$UserTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $UserTable> { + $$UserTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get userName => $state.composableBuilder( + column: $state.table.userName, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get salutation => $state.composableBuilder( + column: $state.table.salutation, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get name => $state.composableBuilder( + column: $state.table.name, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get gender => $state.composableBuilder( + column: $state.table.gender, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get mobileNumber => $state.composableBuilder( + column: $state.table.mobileNumber, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get emailId => $state.composableBuilder( + column: $state.table.emailId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get altContactNumber => $state.composableBuilder( + column: $state.table.altContactNumber, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get pan => $state.composableBuilder( + column: $state.table.pan, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get aadhaarNumber => $state.composableBuilder( + column: $state.table.aadhaarNumber, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get permanentAddress => $state.composableBuilder( + column: $state.table.permanentAddress, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get permanentCity => $state.composableBuilder( + column: $state.table.permanentCity, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get permanentPinCode => $state.composableBuilder( + column: $state.table.permanentPinCode, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get correspondenceAddress => $state.composableBuilder( + column: $state.table.correspondenceAddress, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get correspondenceCity => $state.composableBuilder( + column: $state.table.correspondenceCity, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get correspondencePinCode => $state.composableBuilder( + column: $state.table.correspondencePinCode, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get alternatemobilenumber => $state.composableBuilder( + column: $state.table.alternatemobilenumber, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get active => $state.composableBuilder( + column: $state.table.active, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get locale => $state.composableBuilder( + column: $state.table.locale, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get type => $state.composableBuilder( + column: $state.table.type, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get accountLocked => $state.composableBuilder( + column: $state.table.accountLocked, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get accountLockedDate => $state.composableBuilder( + column: $state.table.accountLockedDate, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get fatherOrHusbandName => $state.composableBuilder( + column: $state.table.fatherOrHusbandName, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get relationship => $state.composableBuilder( + column: $state.table.relationship, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get signature => $state.composableBuilder( + column: $state.table.signature, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get bloodGroup => $state.composableBuilder( + column: $state.table.bloodGroup, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get photo => $state.composableBuilder( + column: $state.table.photo, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get identificationMark => $state.composableBuilder( + column: $state.table.identificationMark, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get createdBy => $state.composableBuilder( + column: $state.table.createdBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get lastModifiedBy => $state.composableBuilder( + column: $state.table.lastModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get uuid => $state.composableBuilder( + column: $state.table.uuid, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get createdDate => $state.composableBuilder( + column: $state.table.createdDate, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$DownsyncTableInsertCompanionBuilder = DownsyncCompanion Function({ + Value locality, + Value projectId, + Value offset, + Value limit, + Value lastSyncedTime, + Value totalCount, + Value boundaryName, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$DownsyncTableUpdateCompanionBuilder = DownsyncCompanion Function({ + Value locality, + Value projectId, + Value offset, + Value limit, + Value lastSyncedTime, + Value totalCount, + Value boundaryName, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$DownsyncTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $DownsyncTable, + DownsyncData, + $$DownsyncTableFilterComposer, + $$DownsyncTableOrderingComposer, + $$DownsyncTableProcessedTableManager, + $$DownsyncTableInsertCompanionBuilder, + $$DownsyncTableUpdateCompanionBuilder> { + $$DownsyncTableTableManager(_$LocalSqlDataStore db, $DownsyncTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$DownsyncTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$DownsyncTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$DownsyncTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value locality = const Value.absent(), + Value projectId = const Value.absent(), + Value offset = const Value.absent(), + Value limit = const Value.absent(), + Value lastSyncedTime = const Value.absent(), + Value totalCount = const Value.absent(), + Value boundaryName = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + DownsyncCompanion( + locality: locality, + projectId: projectId, + offset: offset, + limit: limit, + lastSyncedTime: lastSyncedTime, + totalCount: totalCount, + boundaryName: boundaryName, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value locality = const Value.absent(), + Value projectId = const Value.absent(), + Value offset = const Value.absent(), + Value limit = const Value.absent(), + Value lastSyncedTime = const Value.absent(), + Value totalCount = const Value.absent(), + Value boundaryName = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + DownsyncCompanion.insert( + locality: locality, + projectId: projectId, + offset: offset, + limit: limit, + lastSyncedTime: lastSyncedTime, + totalCount: totalCount, + boundaryName: boundaryName, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$DownsyncTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $DownsyncTable, + DownsyncData, + $$DownsyncTableFilterComposer, + $$DownsyncTableOrderingComposer, + $$DownsyncTableProcessedTableManager, + $$DownsyncTableInsertCompanionBuilder, + $$DownsyncTableUpdateCompanionBuilder> { + $$DownsyncTableProcessedTableManager(super.$state); +} + +class $$DownsyncTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $DownsyncTable> { + $$DownsyncTableFilterComposer(super.$state); + ColumnFilters get locality => $state.composableBuilder( + column: $state.table.locality, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get projectId => $state.composableBuilder( + column: $state.table.projectId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get offset => $state.composableBuilder( + column: $state.table.offset, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get limit => $state.composableBuilder( + column: $state.table.limit, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get lastSyncedTime => $state.composableBuilder( + column: $state.table.lastSyncedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get totalCount => $state.composableBuilder( + column: $state.table.totalCount, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get boundaryName => $state.composableBuilder( + column: $state.table.boundaryName, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$DownsyncTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $DownsyncTable> { + $$DownsyncTableOrderingComposer(super.$state); + ColumnOrderings get locality => $state.composableBuilder( + column: $state.table.locality, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get projectId => $state.composableBuilder( + column: $state.table.projectId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get offset => $state.composableBuilder( + column: $state.table.offset, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get limit => $state.composableBuilder( + column: $state.table.limit, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get lastSyncedTime => $state.composableBuilder( + column: $state.table.lastSyncedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get totalCount => $state.composableBuilder( + column: $state.table.totalCount, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get boundaryName => $state.composableBuilder( + column: $state.table.boundaryName, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$DownsyncCriteriaTableInsertCompanionBuilder + = DownsyncCriteriaCompanion Function({ + Value locality, + Value tenantId, + Value offset, + Value limit, + Value projectId, + Value lastSyncedTime, + Value totalCount, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + required String clientReferenceId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$DownsyncCriteriaTableUpdateCompanionBuilder + = DownsyncCriteriaCompanion Function({ + Value locality, + Value tenantId, + Value offset, + Value limit, + Value projectId, + Value lastSyncedTime, + Value totalCount, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value clientReferenceId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$DownsyncCriteriaTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $DownsyncCriteriaTable, + DownsyncCriteriaData, + $$DownsyncCriteriaTableFilterComposer, + $$DownsyncCriteriaTableOrderingComposer, + $$DownsyncCriteriaTableProcessedTableManager, + $$DownsyncCriteriaTableInsertCompanionBuilder, + $$DownsyncCriteriaTableUpdateCompanionBuilder> { + $$DownsyncCriteriaTableTableManager( + _$LocalSqlDataStore db, $DownsyncCriteriaTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$DownsyncCriteriaTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$DownsyncCriteriaTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$DownsyncCriteriaTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value locality = const Value.absent(), + Value tenantId = const Value.absent(), + Value offset = const Value.absent(), + Value limit = const Value.absent(), + Value projectId = const Value.absent(), + Value lastSyncedTime = const Value.absent(), + Value totalCount = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value clientReferenceId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + DownsyncCriteriaCompanion( + locality: locality, + tenantId: tenantId, + offset: offset, + limit: limit, + projectId: projectId, + lastSyncedTime: lastSyncedTime, + totalCount: totalCount, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value locality = const Value.absent(), + Value tenantId = const Value.absent(), + Value offset = const Value.absent(), + Value limit = const Value.absent(), + Value projectId = const Value.absent(), + Value lastSyncedTime = const Value.absent(), + Value totalCount = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + required String clientReferenceId, + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + DownsyncCriteriaCompanion.insert( + locality: locality, + tenantId: tenantId, + offset: offset, + limit: limit, + projectId: projectId, + lastSyncedTime: lastSyncedTime, + totalCount: totalCount, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$DownsyncCriteriaTableProcessedTableManager + extends ProcessedTableManager< + _$LocalSqlDataStore, + $DownsyncCriteriaTable, + DownsyncCriteriaData, + $$DownsyncCriteriaTableFilterComposer, + $$DownsyncCriteriaTableOrderingComposer, + $$DownsyncCriteriaTableProcessedTableManager, + $$DownsyncCriteriaTableInsertCompanionBuilder, + $$DownsyncCriteriaTableUpdateCompanionBuilder> { + $$DownsyncCriteriaTableProcessedTableManager(super.$state); +} + +class $$DownsyncCriteriaTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $DownsyncCriteriaTable> { + $$DownsyncCriteriaTableFilterComposer(super.$state); + ColumnFilters get locality => $state.composableBuilder( + column: $state.table.locality, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get offset => $state.composableBuilder( + column: $state.table.offset, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get limit => $state.composableBuilder( + column: $state.table.limit, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get projectId => $state.composableBuilder( + column: $state.table.projectId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get lastSyncedTime => $state.composableBuilder( + column: $state.table.lastSyncedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get totalCount => $state.composableBuilder( + column: $state.table.totalCount, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$DownsyncCriteriaTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $DownsyncCriteriaTable> { + $$DownsyncCriteriaTableOrderingComposer(super.$state); + ColumnOrderings get locality => $state.composableBuilder( + column: $state.table.locality, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get offset => $state.composableBuilder( + column: $state.table.offset, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get limit => $state.composableBuilder( + column: $state.table.limit, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get projectId => $state.composableBuilder( + column: $state.table.projectId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get lastSyncedTime => $state.composableBuilder( + column: $state.table.lastSyncedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get totalCount => $state.composableBuilder( + column: $state.table.totalCount, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$HFReferralTableInsertCompanionBuilder = HFReferralCompanion Function({ + Value id, + Value tenantId, + Value name, + Value projectId, + Value projectFacilityId, + Value symptomSurveyId, + Value beneficiaryId, + Value referralCode, + Value nationalLevelId, + Value symptom, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + required String clientReferenceId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$HFReferralTableUpdateCompanionBuilder = HFReferralCompanion Function({ + Value id, + Value tenantId, + Value name, + Value projectId, + Value projectFacilityId, + Value symptomSurveyId, + Value beneficiaryId, + Value referralCode, + Value nationalLevelId, + Value symptom, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value clientReferenceId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$HFReferralTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $HFReferralTable, + HFReferralData, + $$HFReferralTableFilterComposer, + $$HFReferralTableOrderingComposer, + $$HFReferralTableProcessedTableManager, + $$HFReferralTableInsertCompanionBuilder, + $$HFReferralTableUpdateCompanionBuilder> { + $$HFReferralTableTableManager(_$LocalSqlDataStore db, $HFReferralTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$HFReferralTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$HFReferralTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$HFReferralTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value tenantId = const Value.absent(), + Value name = const Value.absent(), + Value projectId = const Value.absent(), + Value projectFacilityId = const Value.absent(), + Value symptomSurveyId = const Value.absent(), + Value beneficiaryId = const Value.absent(), + Value referralCode = const Value.absent(), + Value nationalLevelId = const Value.absent(), + Value symptom = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value clientReferenceId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + HFReferralCompanion( + id: id, + tenantId: tenantId, + name: name, + projectId: projectId, + projectFacilityId: projectFacilityId, + symptomSurveyId: symptomSurveyId, + beneficiaryId: beneficiaryId, + referralCode: referralCode, + nationalLevelId: nationalLevelId, + symptom: symptom, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + Value tenantId = const Value.absent(), + Value name = const Value.absent(), + Value projectId = const Value.absent(), + Value projectFacilityId = const Value.absent(), + Value symptomSurveyId = const Value.absent(), + Value beneficiaryId = const Value.absent(), + Value referralCode = const Value.absent(), + Value nationalLevelId = const Value.absent(), + Value symptom = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + required String clientReferenceId, + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + HFReferralCompanion.insert( + id: id, + tenantId: tenantId, + name: name, + projectId: projectId, + projectFacilityId: projectFacilityId, + symptomSurveyId: symptomSurveyId, + beneficiaryId: beneficiaryId, + referralCode: referralCode, + nationalLevelId: nationalLevelId, + symptom: symptom, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$HFReferralTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $HFReferralTable, + HFReferralData, + $$HFReferralTableFilterComposer, + $$HFReferralTableOrderingComposer, + $$HFReferralTableProcessedTableManager, + $$HFReferralTableInsertCompanionBuilder, + $$HFReferralTableUpdateCompanionBuilder> { + $$HFReferralTableProcessedTableManager(super.$state); +} + +class $$HFReferralTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $HFReferralTable> { + $$HFReferralTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get name => $state.composableBuilder( + column: $state.table.name, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get projectId => $state.composableBuilder( + column: $state.table.projectId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get projectFacilityId => $state.composableBuilder( + column: $state.table.projectFacilityId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get symptomSurveyId => $state.composableBuilder( + column: $state.table.symptomSurveyId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get beneficiaryId => $state.composableBuilder( + column: $state.table.beneficiaryId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get referralCode => $state.composableBuilder( + column: $state.table.referralCode, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nationalLevelId => $state.composableBuilder( + column: $state.table.nationalLevelId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get symptom => $state.composableBuilder( + column: $state.table.symptom, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$HFReferralTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $HFReferralTable> { + $$HFReferralTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get name => $state.composableBuilder( + column: $state.table.name, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get projectId => $state.composableBuilder( + column: $state.table.projectId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get projectFacilityId => $state.composableBuilder( + column: $state.table.projectFacilityId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get symptomSurveyId => $state.composableBuilder( + column: $state.table.symptomSurveyId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get beneficiaryId => $state.composableBuilder( + column: $state.table.beneficiaryId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get referralCode => $state.composableBuilder( + column: $state.table.referralCode, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nationalLevelId => $state.composableBuilder( + column: $state.table.nationalLevelId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get symptom => $state.composableBuilder( + column: $state.table.symptom, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$HouseholdTableInsertCompanionBuilder = HouseholdCompanion Function({ + Value id, + Value memberCount, + Value latitude, + Value longitude, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + required String clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$HouseholdTableUpdateCompanionBuilder = HouseholdCompanion Function({ + Value id, + Value memberCount, + Value latitude, + Value longitude, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$HouseholdTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $HouseholdTable, + HouseholdData, + $$HouseholdTableFilterComposer, + $$HouseholdTableOrderingComposer, + $$HouseholdTableProcessedTableManager, + $$HouseholdTableInsertCompanionBuilder, + $$HouseholdTableUpdateCompanionBuilder> { + $$HouseholdTableTableManager(_$LocalSqlDataStore db, $HouseholdTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$HouseholdTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$HouseholdTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$HouseholdTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value memberCount = const Value.absent(), + Value latitude = const Value.absent(), + Value longitude = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value clientReferenceId = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + HouseholdCompanion( + id: id, + memberCount: memberCount, + latitude: latitude, + longitude: longitude, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + Value memberCount = const Value.absent(), + Value latitude = const Value.absent(), + Value longitude = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + required String clientReferenceId, + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + HouseholdCompanion.insert( + id: id, + memberCount: memberCount, + latitude: latitude, + longitude: longitude, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$HouseholdTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $HouseholdTable, + HouseholdData, + $$HouseholdTableFilterComposer, + $$HouseholdTableOrderingComposer, + $$HouseholdTableProcessedTableManager, + $$HouseholdTableInsertCompanionBuilder, + $$HouseholdTableUpdateCompanionBuilder> { + $$HouseholdTableProcessedTableManager(super.$state); +} + +class $$HouseholdTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $HouseholdTable> { + $$HouseholdTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get memberCount => $state.composableBuilder( + column: $state.table.memberCount, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get latitude => $state.composableBuilder( + column: $state.table.latitude, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get longitude => $state.composableBuilder( + column: $state.table.longitude, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$HouseholdTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $HouseholdTable> { + $$HouseholdTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get memberCount => $state.composableBuilder( + column: $state.table.memberCount, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get latitude => $state.composableBuilder( + column: $state.table.latitude, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get longitude => $state.composableBuilder( + column: $state.table.longitude, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$HouseholdMemberTableInsertCompanionBuilder = HouseholdMemberCompanion + Function({ + Value id, + Value householdId, + Value householdClientReferenceId, + Value individualId, + Value individualClientReferenceId, + required bool isHeadOfHousehold, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + required String clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$HouseholdMemberTableUpdateCompanionBuilder = HouseholdMemberCompanion + Function({ + Value id, + Value householdId, + Value householdClientReferenceId, + Value individualId, + Value individualClientReferenceId, + Value isHeadOfHousehold, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$HouseholdMemberTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $HouseholdMemberTable, + HouseholdMemberData, + $$HouseholdMemberTableFilterComposer, + $$HouseholdMemberTableOrderingComposer, + $$HouseholdMemberTableProcessedTableManager, + $$HouseholdMemberTableInsertCompanionBuilder, + $$HouseholdMemberTableUpdateCompanionBuilder> { + $$HouseholdMemberTableTableManager( + _$LocalSqlDataStore db, $HouseholdMemberTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$HouseholdMemberTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$HouseholdMemberTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$HouseholdMemberTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value householdId = const Value.absent(), + Value householdClientReferenceId = const Value.absent(), + Value individualId = const Value.absent(), + Value individualClientReferenceId = const Value.absent(), + Value isHeadOfHousehold = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value clientReferenceId = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + HouseholdMemberCompanion( + id: id, + householdId: householdId, + householdClientReferenceId: householdClientReferenceId, + individualId: individualId, + individualClientReferenceId: individualClientReferenceId, + isHeadOfHousehold: isHeadOfHousehold, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + Value householdId = const Value.absent(), + Value householdClientReferenceId = const Value.absent(), + Value individualId = const Value.absent(), + Value individualClientReferenceId = const Value.absent(), + required bool isHeadOfHousehold, + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + required String clientReferenceId, + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + HouseholdMemberCompanion.insert( + id: id, + householdId: householdId, + householdClientReferenceId: householdClientReferenceId, + individualId: individualId, + individualClientReferenceId: individualClientReferenceId, + isHeadOfHousehold: isHeadOfHousehold, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$HouseholdMemberTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $HouseholdMemberTable, + HouseholdMemberData, + $$HouseholdMemberTableFilterComposer, + $$HouseholdMemberTableOrderingComposer, + $$HouseholdMemberTableProcessedTableManager, + $$HouseholdMemberTableInsertCompanionBuilder, + $$HouseholdMemberTableUpdateCompanionBuilder> { + $$HouseholdMemberTableProcessedTableManager(super.$state); +} + +class $$HouseholdMemberTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $HouseholdMemberTable> { + $$HouseholdMemberTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get householdId => $state.composableBuilder( + column: $state.table.householdId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get householdClientReferenceId => + $state.composableBuilder( + column: $state.table.householdClientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get individualId => $state.composableBuilder( + column: $state.table.individualId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get individualClientReferenceId => $state + .composableBuilder( + column: $state.table.individualClientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isHeadOfHousehold => $state.composableBuilder( + column: $state.table.isHeadOfHousehold, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$HouseholdMemberTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $HouseholdMemberTable> { + $$HouseholdMemberTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get householdId => $state.composableBuilder( + column: $state.table.householdId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get householdClientReferenceId => + $state.composableBuilder( + column: $state.table.householdClientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get individualId => $state.composableBuilder( + column: $state.table.individualId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get individualClientReferenceId => + $state.composableBuilder( + column: $state.table.individualClientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isHeadOfHousehold => $state.composableBuilder( + column: $state.table.isHeadOfHousehold, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$TaskTableInsertCompanionBuilder = TaskCompanion Function({ + Value id, + Value projectId, + Value projectBeneficiaryId, + Value projectBeneficiaryClientReferenceId, + Value createdBy, + Value status, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + required String clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value plannedStartDate, + Value plannedEndDate, + Value actualStartDate, + Value actualEndDate, + Value createdDate, + Value additionalFields, + Value rowid, +}); +typedef $$TaskTableUpdateCompanionBuilder = TaskCompanion Function({ + Value id, + Value projectId, + Value projectBeneficiaryId, + Value projectBeneficiaryClientReferenceId, + Value createdBy, + Value status, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value plannedStartDate, + Value plannedEndDate, + Value actualStartDate, + Value actualEndDate, + Value createdDate, + Value additionalFields, + Value rowid, +}); + +class $$TaskTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $TaskTable, + TaskData, + $$TaskTableFilterComposer, + $$TaskTableOrderingComposer, + $$TaskTableProcessedTableManager, + $$TaskTableInsertCompanionBuilder, + $$TaskTableUpdateCompanionBuilder> { + $$TaskTableTableManager(_$LocalSqlDataStore db, $TaskTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$TaskTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$TaskTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => $$TaskTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value projectId = const Value.absent(), + Value projectBeneficiaryId = const Value.absent(), + Value projectBeneficiaryClientReferenceId = + const Value.absent(), + Value createdBy = const Value.absent(), + Value status = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value clientReferenceId = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value plannedStartDate = const Value.absent(), + Value plannedEndDate = const Value.absent(), + Value actualStartDate = const Value.absent(), + Value actualEndDate = const Value.absent(), + Value createdDate = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + TaskCompanion( + id: id, + projectId: projectId, + projectBeneficiaryId: projectBeneficiaryId, + projectBeneficiaryClientReferenceId: + projectBeneficiaryClientReferenceId, + createdBy: createdBy, + status: status, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + plannedStartDate: plannedStartDate, + plannedEndDate: plannedEndDate, + actualStartDate: actualStartDate, + actualEndDate: actualEndDate, + createdDate: createdDate, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + Value projectId = const Value.absent(), + Value projectBeneficiaryId = const Value.absent(), + Value projectBeneficiaryClientReferenceId = + const Value.absent(), + Value createdBy = const Value.absent(), + Value status = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + required String clientReferenceId, + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value plannedStartDate = const Value.absent(), + Value plannedEndDate = const Value.absent(), + Value actualStartDate = const Value.absent(), + Value actualEndDate = const Value.absent(), + Value createdDate = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + TaskCompanion.insert( + id: id, + projectId: projectId, + projectBeneficiaryId: projectBeneficiaryId, + projectBeneficiaryClientReferenceId: + projectBeneficiaryClientReferenceId, + createdBy: createdBy, + status: status, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + plannedStartDate: plannedStartDate, + plannedEndDate: plannedEndDate, + actualStartDate: actualStartDate, + actualEndDate: actualEndDate, + createdDate: createdDate, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$TaskTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $TaskTable, + TaskData, + $$TaskTableFilterComposer, + $$TaskTableOrderingComposer, + $$TaskTableProcessedTableManager, + $$TaskTableInsertCompanionBuilder, + $$TaskTableUpdateCompanionBuilder> { + $$TaskTableProcessedTableManager(super.$state); +} + +class $$TaskTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $TaskTable> { + $$TaskTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get projectId => $state.composableBuilder( + column: $state.table.projectId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get projectBeneficiaryId => $state.composableBuilder( + column: $state.table.projectBeneficiaryId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get projectBeneficiaryClientReferenceId => + $state.composableBuilder( + column: $state.table.projectBeneficiaryClientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get createdBy => $state.composableBuilder( + column: $state.table.createdBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get status => $state.composableBuilder( + column: $state.table.status, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get plannedStartDate => $state.composableBuilder( + column: $state.table.plannedStartDate, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get plannedEndDate => $state.composableBuilder( + column: $state.table.plannedEndDate, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get actualStartDate => $state.composableBuilder( + column: $state.table.actualStartDate, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get actualEndDate => $state.composableBuilder( + column: $state.table.actualEndDate, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get createdDate => $state.composableBuilder( + column: $state.table.createdDate, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$TaskTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $TaskTable> { + $$TaskTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get projectId => $state.composableBuilder( + column: $state.table.projectId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get projectBeneficiaryId => $state.composableBuilder( + column: $state.table.projectBeneficiaryId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get projectBeneficiaryClientReferenceId => + $state.composableBuilder( + column: $state.table.projectBeneficiaryClientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get createdBy => $state.composableBuilder( + column: $state.table.createdBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get status => $state.composableBuilder( + column: $state.table.status, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get plannedStartDate => $state.composableBuilder( + column: $state.table.plannedStartDate, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get plannedEndDate => $state.composableBuilder( + column: $state.table.plannedEndDate, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get actualStartDate => $state.composableBuilder( + column: $state.table.actualStartDate, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get actualEndDate => $state.composableBuilder( + column: $state.table.actualEndDate, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get createdDate => $state.composableBuilder( + column: $state.table.createdDate, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$TaskResourceTableInsertCompanionBuilder = TaskResourceCompanion + Function({ + required String clientReferenceId, + Value taskclientReferenceId, + Value taskId, + Value id, + Value productVariantId, + Value quantity, + Value isDelivered, + Value deliveryComment, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$TaskResourceTableUpdateCompanionBuilder = TaskResourceCompanion + Function({ + Value clientReferenceId, + Value taskclientReferenceId, + Value taskId, + Value id, + Value productVariantId, + Value quantity, + Value isDelivered, + Value deliveryComment, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$TaskResourceTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $TaskResourceTable, + TaskResourceData, + $$TaskResourceTableFilterComposer, + $$TaskResourceTableOrderingComposer, + $$TaskResourceTableProcessedTableManager, + $$TaskResourceTableInsertCompanionBuilder, + $$TaskResourceTableUpdateCompanionBuilder> { + $$TaskResourceTableTableManager( + _$LocalSqlDataStore db, $TaskResourceTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$TaskResourceTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$TaskResourceTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$TaskResourceTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value clientReferenceId = const Value.absent(), + Value taskclientReferenceId = const Value.absent(), + Value taskId = const Value.absent(), + Value id = const Value.absent(), + Value productVariantId = const Value.absent(), + Value quantity = const Value.absent(), + Value isDelivered = const Value.absent(), + Value deliveryComment = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + TaskResourceCompanion( + clientReferenceId: clientReferenceId, + taskclientReferenceId: taskclientReferenceId, + taskId: taskId, + id: id, + productVariantId: productVariantId, + quantity: quantity, + isDelivered: isDelivered, + deliveryComment: deliveryComment, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + required String clientReferenceId, + Value taskclientReferenceId = const Value.absent(), + Value taskId = const Value.absent(), + Value id = const Value.absent(), + Value productVariantId = const Value.absent(), + Value quantity = const Value.absent(), + Value isDelivered = const Value.absent(), + Value deliveryComment = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + TaskResourceCompanion.insert( + clientReferenceId: clientReferenceId, + taskclientReferenceId: taskclientReferenceId, + taskId: taskId, + id: id, + productVariantId: productVariantId, + quantity: quantity, + isDelivered: isDelivered, + deliveryComment: deliveryComment, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$TaskResourceTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $TaskResourceTable, + TaskResourceData, + $$TaskResourceTableFilterComposer, + $$TaskResourceTableOrderingComposer, + $$TaskResourceTableProcessedTableManager, + $$TaskResourceTableInsertCompanionBuilder, + $$TaskResourceTableUpdateCompanionBuilder> { + $$TaskResourceTableProcessedTableManager(super.$state); +} + +class $$TaskResourceTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $TaskResourceTable> { + $$TaskResourceTableFilterComposer(super.$state); + ColumnFilters get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get taskclientReferenceId => $state.composableBuilder( + column: $state.table.taskclientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get taskId => $state.composableBuilder( + column: $state.table.taskId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get productVariantId => $state.composableBuilder( + column: $state.table.productVariantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get quantity => $state.composableBuilder( + column: $state.table.quantity, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDelivered => $state.composableBuilder( + column: $state.table.isDelivered, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get deliveryComment => $state.composableBuilder( + column: $state.table.deliveryComment, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$TaskResourceTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $TaskResourceTable> { + $$TaskResourceTableOrderingComposer(super.$state); + ColumnOrderings get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get taskclientReferenceId => $state.composableBuilder( + column: $state.table.taskclientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get taskId => $state.composableBuilder( + column: $state.table.taskId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get productVariantId => $state.composableBuilder( + column: $state.table.productVariantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get quantity => $state.composableBuilder( + column: $state.table.quantity, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDelivered => $state.composableBuilder( + column: $state.table.isDelivered, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get deliveryComment => $state.composableBuilder( + column: $state.table.deliveryComment, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$SideEffectTableInsertCompanionBuilder = SideEffectCompanion Function({ + Value id, + Value projectId, + Value taskClientReferenceId, + Value reAttempts, + Value symptoms, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + required String clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$SideEffectTableUpdateCompanionBuilder = SideEffectCompanion Function({ + Value id, + Value projectId, + Value taskClientReferenceId, + Value reAttempts, + Value symptoms, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$SideEffectTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $SideEffectTable, + SideEffectData, + $$SideEffectTableFilterComposer, + $$SideEffectTableOrderingComposer, + $$SideEffectTableProcessedTableManager, + $$SideEffectTableInsertCompanionBuilder, + $$SideEffectTableUpdateCompanionBuilder> { + $$SideEffectTableTableManager(_$LocalSqlDataStore db, $SideEffectTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$SideEffectTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$SideEffectTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$SideEffectTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value projectId = const Value.absent(), + Value taskClientReferenceId = const Value.absent(), + Value reAttempts = const Value.absent(), + Value symptoms = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value clientReferenceId = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + SideEffectCompanion( + id: id, + projectId: projectId, + taskClientReferenceId: taskClientReferenceId, + reAttempts: reAttempts, + symptoms: symptoms, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + Value projectId = const Value.absent(), + Value taskClientReferenceId = const Value.absent(), + Value reAttempts = const Value.absent(), + Value symptoms = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + required String clientReferenceId, + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + SideEffectCompanion.insert( + id: id, + projectId: projectId, + taskClientReferenceId: taskClientReferenceId, + reAttempts: reAttempts, + symptoms: symptoms, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$SideEffectTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $SideEffectTable, + SideEffectData, + $$SideEffectTableFilterComposer, + $$SideEffectTableOrderingComposer, + $$SideEffectTableProcessedTableManager, + $$SideEffectTableInsertCompanionBuilder, + $$SideEffectTableUpdateCompanionBuilder> { + $$SideEffectTableProcessedTableManager(super.$state); +} + +class $$SideEffectTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $SideEffectTable> { + $$SideEffectTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get projectId => $state.composableBuilder( + column: $state.table.projectId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get taskClientReferenceId => $state.composableBuilder( + column: $state.table.taskClientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get reAttempts => $state.composableBuilder( + column: $state.table.reAttempts, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get symptoms => $state.composableBuilder( + column: $state.table.symptoms, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$SideEffectTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $SideEffectTable> { + $$SideEffectTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get projectId => $state.composableBuilder( + column: $state.table.projectId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get taskClientReferenceId => $state.composableBuilder( + column: $state.table.taskClientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get reAttempts => $state.composableBuilder( + column: $state.table.reAttempts, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get symptoms => $state.composableBuilder( + column: $state.table.symptoms, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$ReferralTableInsertCompanionBuilder = ReferralCompanion Function({ + Value id, + Value projectId, + Value projectBeneficiaryClientReferenceId, + Value referrerId, + Value recipientType, + Value recipientId, + Value reasons, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + required String clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); +typedef $$ReferralTableUpdateCompanionBuilder = ReferralCompanion Function({ + Value id, + Value projectId, + Value projectBeneficiaryClientReferenceId, + Value referrerId, + Value recipientType, + Value recipientId, + Value reasons, + Value auditCreatedBy, + Value nonRecoverableError, + Value auditCreatedTime, + Value clientCreatedTime, + Value clientModifiedBy, + Value clientCreatedBy, + Value clientModifiedTime, + Value auditModifiedBy, + Value auditModifiedTime, + Value clientReferenceId, + Value tenantId, + Value isDeleted, + Value rowVersion, + Value additionalFields, + Value rowid, +}); + +class $$ReferralTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $ReferralTable, + ReferralData, + $$ReferralTableFilterComposer, + $$ReferralTableOrderingComposer, + $$ReferralTableProcessedTableManager, + $$ReferralTableInsertCompanionBuilder, + $$ReferralTableUpdateCompanionBuilder> { + $$ReferralTableTableManager(_$LocalSqlDataStore db, $ReferralTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$ReferralTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$ReferralTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$ReferralTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value id = const Value.absent(), + Value projectId = const Value.absent(), + Value projectBeneficiaryClientReferenceId = + const Value.absent(), + Value referrerId = const Value.absent(), + Value recipientType = const Value.absent(), + Value recipientId = const Value.absent(), + Value reasons = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + Value clientReferenceId = const Value.absent(), + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ReferralCompanion( + id: id, + projectId: projectId, + projectBeneficiaryClientReferenceId: + projectBeneficiaryClientReferenceId, + referrerId: referrerId, + recipientType: recipientType, + recipientId: recipientId, + reasons: reasons, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + Value id = const Value.absent(), + Value projectId = const Value.absent(), + Value projectBeneficiaryClientReferenceId = + const Value.absent(), + Value referrerId = const Value.absent(), + Value recipientType = const Value.absent(), + Value recipientId = const Value.absent(), + Value reasons = const Value.absent(), + Value auditCreatedBy = const Value.absent(), + Value nonRecoverableError = const Value.absent(), + Value auditCreatedTime = const Value.absent(), + Value clientCreatedTime = const Value.absent(), + Value clientModifiedBy = const Value.absent(), + Value clientCreatedBy = const Value.absent(), + Value clientModifiedTime = const Value.absent(), + Value auditModifiedBy = const Value.absent(), + Value auditModifiedTime = const Value.absent(), + required String clientReferenceId, + Value tenantId = const Value.absent(), + Value isDeleted = const Value.absent(), + Value rowVersion = const Value.absent(), + Value additionalFields = const Value.absent(), + Value rowid = const Value.absent(), + }) => + ReferralCompanion.insert( + id: id, + projectId: projectId, + projectBeneficiaryClientReferenceId: + projectBeneficiaryClientReferenceId, + referrerId: referrerId, + recipientType: recipientType, + recipientId: recipientId, + reasons: reasons, + auditCreatedBy: auditCreatedBy, + nonRecoverableError: nonRecoverableError, + auditCreatedTime: auditCreatedTime, + clientCreatedTime: clientCreatedTime, + clientModifiedBy: clientModifiedBy, + clientCreatedBy: clientCreatedBy, + clientModifiedTime: clientModifiedTime, + auditModifiedBy: auditModifiedBy, + auditModifiedTime: auditModifiedTime, + clientReferenceId: clientReferenceId, + tenantId: tenantId, + isDeleted: isDeleted, + rowVersion: rowVersion, + additionalFields: additionalFields, + rowid: rowid, + ), + )); +} + +class $$ReferralTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $ReferralTable, + ReferralData, + $$ReferralTableFilterComposer, + $$ReferralTableOrderingComposer, + $$ReferralTableProcessedTableManager, + $$ReferralTableInsertCompanionBuilder, + $$ReferralTableUpdateCompanionBuilder> { + $$ReferralTableProcessedTableManager(super.$state); +} + +class $$ReferralTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $ReferralTable> { + $$ReferralTableFilterComposer(super.$state); + ColumnFilters get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get projectId => $state.composableBuilder( + column: $state.table.projectId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get projectBeneficiaryClientReferenceId => + $state.composableBuilder( + column: $state.table.projectBeneficiaryClientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get referrerId => $state.composableBuilder( + column: $state.table.referrerId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get recipientType => $state.composableBuilder( + column: $state.table.recipientType, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get recipientId => $state.composableBuilder( + column: $state.table.recipientId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get reasons => $state.composableBuilder( + column: $state.table.reasons, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$ReferralTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $ReferralTable> { + $$ReferralTableOrderingComposer(super.$state); + ColumnOrderings get id => $state.composableBuilder( + column: $state.table.id, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get projectId => $state.composableBuilder( + column: $state.table.projectId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get projectBeneficiaryClientReferenceId => + $state.composableBuilder( + column: $state.table.projectBeneficiaryClientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get referrerId => $state.composableBuilder( + column: $state.table.referrerId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get recipientType => $state.composableBuilder( + column: $state.table.recipientType, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get recipientId => $state.composableBuilder( + column: $state.table.recipientId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get reasons => $state.composableBuilder( + column: $state.table.reasons, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedBy => $state.composableBuilder( + column: $state.table.auditCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get nonRecoverableError => $state.composableBuilder( + column: $state.table.nonRecoverableError, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditCreatedTime => $state.composableBuilder( + column: $state.table.auditCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedTime => $state.composableBuilder( + column: $state.table.clientCreatedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedBy => $state.composableBuilder( + column: $state.table.clientModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientCreatedBy => $state.composableBuilder( + column: $state.table.clientCreatedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientModifiedTime => $state.composableBuilder( + column: $state.table.clientModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedBy => $state.composableBuilder( + column: $state.table.auditModifiedBy, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get auditModifiedTime => $state.composableBuilder( + column: $state.table.auditModifiedTime, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get clientReferenceId => $state.composableBuilder( + column: $state.table.clientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get tenantId => $state.composableBuilder( + column: $state.table.tenantId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get isDeleted => $state.composableBuilder( + column: $state.table.isDeleted, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get rowVersion => $state.composableBuilder( + column: $state.table.rowVersion, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalFields => $state.composableBuilder( + column: $state.table.additionalFields, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +typedef $$LocalizationTableInsertCompanionBuilder = LocalizationCompanion + Function({ + required String locale, + required String code, + required String message, + required String module, + Value rowid, +}); +typedef $$LocalizationTableUpdateCompanionBuilder = LocalizationCompanion + Function({ + Value locale, + Value code, + Value message, + Value module, + Value rowid, +}); + +class $$LocalizationTableTableManager extends RootTableManager< + _$LocalSqlDataStore, + $LocalizationTable, + LocalizationData, + $$LocalizationTableFilterComposer, + $$LocalizationTableOrderingComposer, + $$LocalizationTableProcessedTableManager, + $$LocalizationTableInsertCompanionBuilder, + $$LocalizationTableUpdateCompanionBuilder> { + $$LocalizationTableTableManager( + _$LocalSqlDataStore db, $LocalizationTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$LocalizationTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$LocalizationTableOrderingComposer(ComposerState(db, table)), + getChildManagerBuilder: (p) => + $$LocalizationTableProcessedTableManager(p), + getUpdateCompanionBuilder: ({ + Value locale = const Value.absent(), + Value code = const Value.absent(), + Value message = const Value.absent(), + Value module = const Value.absent(), + Value rowid = const Value.absent(), + }) => + LocalizationCompanion( + locale: locale, + code: code, + message: message, + module: module, + rowid: rowid, + ), + getInsertCompanionBuilder: ({ + required String locale, + required String code, + required String message, + required String module, + Value rowid = const Value.absent(), + }) => + LocalizationCompanion.insert( + locale: locale, + code: code, + message: message, + module: module, + rowid: rowid, + ), + )); +} + +class $$LocalizationTableProcessedTableManager extends ProcessedTableManager< + _$LocalSqlDataStore, + $LocalizationTable, + LocalizationData, + $$LocalizationTableFilterComposer, + $$LocalizationTableOrderingComposer, + $$LocalizationTableProcessedTableManager, + $$LocalizationTableInsertCompanionBuilder, + $$LocalizationTableUpdateCompanionBuilder> { + $$LocalizationTableProcessedTableManager(super.$state); +} + +class $$LocalizationTableFilterComposer + extends FilterComposer<_$LocalSqlDataStore, $LocalizationTable> { + $$LocalizationTableFilterComposer(super.$state); + ColumnFilters get locale => $state.composableBuilder( + column: $state.table.locale, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get code => $state.composableBuilder( + column: $state.table.code, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get message => $state.composableBuilder( + column: $state.table.message, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get module => $state.composableBuilder( + column: $state.table.module, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); +} + +class $$LocalizationTableOrderingComposer + extends OrderingComposer<_$LocalSqlDataStore, $LocalizationTable> { + $$LocalizationTableOrderingComposer(super.$state); + ColumnOrderings get locale => $state.composableBuilder( + column: $state.table.locale, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get code => $state.composableBuilder( + column: $state.table.code, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get message => $state.composableBuilder( + column: $state.table.message, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get module => $state.composableBuilder( + column: $state.table.module, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); +} + +class _$LocalSqlDataStoreManager { + final _$LocalSqlDataStore _db; + _$LocalSqlDataStoreManager(this._db); + $$AttendanceRegisterTableTableManager get attendanceRegister => + $$AttendanceRegisterTableTableManager(_db, _db.attendanceRegister); + $$AttendanceTableTableManager get attendance => + $$AttendanceTableTableManager(_db, _db.attendance); + $$AttendeeTableTableManager get attendee => + $$AttendeeTableTableManager(_db, _db.attendee); + $$AddressTableTableManager get address => + $$AddressTableTableManager(_db, _db.address); + $$NameTableTableManager get name => $$NameTableTableManager(_db, _db.name); + $$BoundaryTableTableManager get boundary => + $$BoundaryTableTableManager(_db, _db.boundary); + $$DocumentTableTableManager get document => + $$DocumentTableTableManager(_db, _db.document); + $$FacilityTableTableManager get facility => + $$FacilityTableTableManager(_db, _db.facility); + $$ProductTableTableManager get product => + $$ProductTableTableManager(_db, _db.product); + $$ProductVariantTableTableManager get productVariant => + $$ProductVariantTableTableManager(_db, _db.productVariant); + $$ProjectTableTableManager get project => + $$ProjectTableTableManager(_db, _db.project); + $$ProjectBeneficiaryTableTableManager get projectBeneficiary => + $$ProjectBeneficiaryTableTableManager(_db, _db.projectBeneficiary); + $$ProjectFacilityTableTableManager get projectFacility => + $$ProjectFacilityTableTableManager(_db, _db.projectFacility); + $$ProjectProductVariantTableTableManager get projectProductVariant => + $$ProjectProductVariantTableTableManager(_db, _db.projectProductVariant); + $$ProjectResourceTableTableManager get projectResource => + $$ProjectResourceTableTableManager(_db, _db.projectResource); + $$ProjectStaffTableTableManager get projectStaff => + $$ProjectStaffTableTableManager(_db, _db.projectStaff); + $$ProjectTypeTableTableManager get projectType => + $$ProjectTypeTableTableManager(_db, _db.projectType); + $$IndividualTableTableManager get individual => + $$IndividualTableTableManager(_db, _db.individual); + $$IdentifierTableTableManager get identifier => + $$IdentifierTableTableManager(_db, _db.identifier); + $$StockTableTableManager get stock => + $$StockTableTableManager(_db, _db.stock); + $$StockReconciliationTableTableManager get stockReconciliation => + $$StockReconciliationTableTableManager(_db, _db.stockReconciliation); + $$TargetTableTableManager get target => + $$TargetTableTableManager(_db, _db.target); + $$ServiceTableTableManager get service => + $$ServiceTableTableManager(_db, _db.service); + $$ServiceAttributesTableTableManager get serviceAttributes => + $$ServiceAttributesTableTableManager(_db, _db.serviceAttributes); + $$ServiceDefinitionTableTableManager get serviceDefinition => + $$ServiceDefinitionTableTableManager(_db, _db.serviceDefinition); + $$LocalityTableTableManager get locality => + $$LocalityTableTableManager(_db, _db.locality); + $$StaffTableTableManager get staff => + $$StaffTableTableManager(_db, _db.staff); + $$AttributesTableTableManager get attributes => + $$AttributesTableTableManager(_db, _db.attributes); + $$PgrServiceTableTableManager get pgrService => + $$PgrServiceTableTableManager(_db, _db.pgrService); + $$PgrComplainantTableTableManager get pgrComplainant => + $$PgrComplainantTableTableManager(_db, _db.pgrComplainant); + $$UserTableTableManager get user => $$UserTableTableManager(_db, _db.user); + $$DownsyncTableTableManager get downsync => + $$DownsyncTableTableManager(_db, _db.downsync); + $$DownsyncCriteriaTableTableManager get downsyncCriteria => + $$DownsyncCriteriaTableTableManager(_db, _db.downsyncCriteria); + $$HFReferralTableTableManager get hFReferral => + $$HFReferralTableTableManager(_db, _db.hFReferral); + $$HouseholdTableTableManager get household => + $$HouseholdTableTableManager(_db, _db.household); + $$HouseholdMemberTableTableManager get householdMember => + $$HouseholdMemberTableTableManager(_db, _db.householdMember); + $$TaskTableTableManager get task => $$TaskTableTableManager(_db, _db.task); + $$TaskResourceTableTableManager get taskResource => + $$TaskResourceTableTableManager(_db, _db.taskResource); + $$SideEffectTableTableManager get sideEffect => + $$SideEffectTableTableManager(_db, _db.sideEffect); + $$ReferralTableTableManager get referral => + $$ReferralTableTableManager(_db, _db.referral); + $$LocalizationTableTableManager get localization => + $$LocalizationTableTableManager(_db, _db.localization); +} diff --git a/packages/digit_data_model/pubspec.lock b/packages/digit_data_model/pubspec.lock index 2b7fff90a..a1850c91a 100644 --- a/packages/digit_data_model/pubspec.lock +++ b/packages/digit_data_model/pubspec.lock @@ -228,11 +228,9 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "145091c3b5f05ccea22ec7520f5b9f4e50ff6106" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git + path: "../dart_mappable_builder" + relative: true + source: path version: "4.2.0" dart_style: dependency: transitive diff --git a/packages/digit_firebase_services/pubspec.lock b/packages/digit_firebase_services/pubspec.lock index 20c7bd06b..7b890a488 100644 --- a/packages/digit_firebase_services/pubspec.lock +++ b/packages/digit_firebase_services/pubspec.lock @@ -128,6 +128,30 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.7" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -140,34 +164,34 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" path: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" plugin_platform_interface: dependency: transitive description: @@ -225,10 +249,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" vector_math: dependency: transitive description: @@ -237,6 +261,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + url: "https://pub.dev" + source: hosted + version: "14.2.1" web: dependency: transitive description: @@ -246,5 +278,5 @@ packages: source: hosted version: "0.3.0" sdks: - dart: ">=3.2.0 <4.0.0" - flutter: ">=3.3.0" + dart: ">=3.3.0 <4.0.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/digit_scanner/example/pubspec.lock b/packages/digit_scanner/example/pubspec.lock new file mode 100644 index 000000000..b74ce0a6c --- /dev/null +++ b/packages/digit_scanner/example/pubspec.lock @@ -0,0 +1,657 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + args: + dependency: transitive + description: + name: args + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" + url: "https://pub.dev" + source: hosted + version: "2.5.0" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + audioplayers: + dependency: transitive + description: + name: audioplayers + sha256: c346ba5a39dc208f1bab55fc239855f573d69b0e832402114bf0b793622adc4d + url: "https://pub.dev" + source: hosted + version: "6.1.0" + audioplayers_android: + dependency: transitive + description: + name: audioplayers_android + sha256: de576b890befe27175c2f511ba8b742bec83765fa97c3ce4282bba46212f58e4 + url: "https://pub.dev" + source: hosted + version: "5.0.0" + audioplayers_darwin: + dependency: transitive + description: + name: audioplayers_darwin + sha256: e507887f3ff18d8e5a10a668d7bedc28206b12e10b98347797257c6ae1019c3b + url: "https://pub.dev" + source: hosted + version: "6.0.0" + audioplayers_linux: + dependency: transitive + description: + name: audioplayers_linux + sha256: "3d3d244c90436115417f170426ce768856d8fe4dfc5ed66a049d2890acfa82f9" + url: "https://pub.dev" + source: hosted + version: "4.0.0" + audioplayers_platform_interface: + dependency: transitive + description: + name: audioplayers_platform_interface + sha256: "6834dd48dfb7bc6c2404998ebdd161f79cd3774a7e6779e1348d54a3bfdcfaa5" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + audioplayers_web: + dependency: transitive + description: + name: audioplayers_web + sha256: "3609bdf0e05e66a3d9750ee40b1e37f2a622c4edb796cc600b53a90a30a2ace4" + url: "https://pub.dev" + source: hosted + version: "5.0.1" + audioplayers_windows: + dependency: transitive + description: + name: audioplayers_windows + sha256: "8605762dddba992138d476f6a0c3afd9df30ac5b96039929063eceed416795c2" + url: "https://pub.dev" + source: hosted + version: "4.0.0" + auto_route: + dependency: transitive + description: + name: auto_route + sha256: "8de4a280ce7861ef24a6baa14c2b02b77a8c31b4a4c4f12d7b608678cc657c7f" + url: "https://pub.dev" + source: hosted + version: "8.1.4" + bloc: + dependency: transitive + description: + name: bloc + sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e" + url: "https://pub.dev" + source: hosted + version: "8.1.4" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + camera: + dependency: transitive + description: + name: camera + sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167" + url: "https://pub.dev" + source: hosted + version: "0.11.0+2" + camera_android_camerax: + dependency: transitive + description: + name: camera_android_camerax + sha256: "011be2ab0e5b3e3aa8094413fa890f8c5c5afd7cfdaef353a992047d4dab5780" + url: "https://pub.dev" + source: hosted + version: "0.6.8+2" + camera_avfoundation: + dependency: transitive + description: + name: camera_avfoundation + sha256: "7c28969a975a7eb2349bc2cb2dfe3ad218a33dba9968ecfb181ce08c87486655" + url: "https://pub.dev" + source: hosted + version: "0.9.17+3" + camera_platform_interface: + dependency: transitive + description: + name: camera_platform_interface + sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 + url: "https://pub.dev" + source: hosted + version: "2.8.0" + camera_web: + dependency: transitive + description: + name: camera_web + sha256: "595f28c89d1fb62d77c73c633193755b781c6d2e0ebcd8dc25b763b514e6ba8f" + url: "https://pub.dev" + source: hosted + version: "0.3.5" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + collection: + dependency: transitive + description: + name: collection + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" + source: hosted + version: "1.18.0" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" + url: "https://pub.dev" + source: hosted + version: "0.3.4+2" + crypto: + dependency: transitive + description: + name: crypto + sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27 + url: "https://pub.dev" + source: hosted + version: "3.0.5" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 + url: "https://pub.dev" + source: hosted + version: "1.0.8" + digit_scanner: + dependency: "direct main" + description: + path: ".." + relative: true + source: path + version: "1.0.3" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" + url: "https://pub.dev" + source: hosted + version: "2.1.3" + file: + dependency: transitive + description: + name: file + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_bloc: + dependency: "direct main" + description: + name: flutter_bloc + sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a + url: "https://pub.dev" + source: hosted + version: "8.1.6" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 + url: "https://pub.dev" + source: hosted + version: "2.0.3" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda" + url: "https://pub.dev" + source: hosted + version: "2.0.22" + flutter_svg: + dependency: transitive + description: + name: flutter_svg + sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" + url: "https://pub.dev" + source: hosted + version: "2.0.10+1" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + freezed_annotation: + dependency: transitive + description: + name: freezed_annotation + sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 + url: "https://pub.dev" + source: hosted + version: "2.4.4" + google_mlkit_barcode_scanning: + dependency: transitive + description: + name: google_mlkit_barcode_scanning + sha256: f1a2a39cf1730b9a5e2784a07efa1ca5bfdfdde6aa00b193b3f8cd1953c638ec + url: "https://pub.dev" + source: hosted + version: "0.12.0" + google_mlkit_commons: + dependency: transitive + description: + name: google_mlkit_commons + sha256: "27d626c66a181351a953eba5b6ff1ff123aadb891b4dab085b292118f039d6ac" + url: "https://pub.dev" + source: hosted + version: "0.7.1" + gs1_barcode_parser: + dependency: transitive + description: + name: gs1_barcode_parser + sha256: ff171bc40038de3f7178fbc32eaf9eebc3d35a3c4c00bb0281fe4a976d853a42 + url: "https://pub.dev" + source: hosted + version: "1.1.0" + http: + dependency: transitive + description: + name: http + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 + url: "https://pub.dev" + source: hosted + version: "1.2.2" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.dev" + source: hosted + version: "4.9.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + lints: + dependency: transitive + description: + name: lints + sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + matcher: + dependency: transitive + description: + name: matcher + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + url: "https://pub.dev" + source: hosted + version: "0.12.16+1" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + url: "https://pub.dev" + source: hosted + version: "0.8.0" + meta: + dependency: transitive + description: + name: meta + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + url: "https://pub.dev" + source: hosted + version: "1.12.0" + nested: + dependency: transitive + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + overlay_builder: + dependency: transitive + description: + name: overlay_builder + sha256: "58b97bc5f67a2e2bb7006dd88e697ac757dfffc9dbd1e7dfc1917fb510a4b5c8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + path: + dependency: transitive + description: + name: path + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + url: "https://pub.dev" + source: hosted + version: "1.9.0" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + url: "https://pub.dev" + source: hosted + version: "1.0.1" + path_provider: + dependency: transitive + description: + name: path_provider + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 + url: "https://pub.dev" + source: hosted + version: "2.1.4" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7" + url: "https://pub.dev" + source: hosted + version: "2.2.10" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16 + url: "https://pub.dev" + source: hosted + version: "2.4.0" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 + url: "https://pub.dev" + source: hosted + version: "2.3.0" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + url: "https://pub.dev" + source: hosted + version: "6.0.2" + platform: + dependency: transitive + description: + name: platform + sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" + url: "https://pub.dev" + source: hosted + version: "3.1.5" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + provider: + dependency: transitive + description: + name: provider + sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c + url: "https://pub.dev" + source: hosted + version: "6.1.2" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://pub.dev" + source: hosted + version: "1.11.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" + source: hosted + version: "2.1.2" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + url: "https://pub.dev" + source: hosted + version: "0.7.0" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" + uuid: + dependency: transitive + description: + name: uuid + sha256: f33d6bb662f0e4f79dcd7ada2e6170f3b3a2530c28fc41f49a411ddedd576a77 + url: "https://pub.dev" + source: hosted + version: "4.5.0" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + url: "https://pub.dev" + source: hosted + version: "14.2.1" + web: + dependency: transitive + description: + name: web + sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d + url: "https://pub.dev" + source: hosted + version: "1.0.4" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" +sdks: + dart: ">=3.4.0 <3.9.0" + flutter: ">=3.22.0" diff --git a/packages/digit_scanner/pubspec.lock b/packages/digit_scanner/pubspec.lock index 5895bf3a2..76dc325ac 100644 --- a/packages/digit_scanner/pubspec.lock +++ b/packages/digit_scanner/pubspec.lock @@ -45,10 +45,10 @@ packages: dependency: "direct main" description: name: audioplayers - sha256: "752039d6aa752597c98ec212e9759519061759e402e7da59a511f39d43aa07d2" + sha256: c346ba5a39dc208f1bab55fc239855f573d69b0e832402114bf0b793622adc4d url: "https://pub.dev" source: hosted - version: "6.0.0" + version: "6.1.0" audioplayers_android: dependency: transitive description: @@ -85,10 +85,10 @@ packages: dependency: transitive description: name: audioplayers_web - sha256: db8fc420dadf80da18e2286c18e746fb4c3b2c5adbf0c963299dde046828886d + sha256: "3609bdf0e05e66a3d9750ee40b1e37f2a622c4edb796cc600b53a90a30a2ace4" url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.0.1" audioplayers_windows: dependency: transitive description: @@ -101,18 +101,18 @@ packages: dependency: "direct main" description: name: auto_route - sha256: "6cad3f408863ffff2b5757967c802b18415dac4acb1b40c5cdd45d0a26e5080f" + sha256: a9001a90539ca3effc168f7e1029a5885c7326b9032c09ac895e303c1d137704 url: "https://pub.dev" source: hosted - version: "8.1.3" + version: "8.3.0" auto_route_generator: dependency: "direct dev" description: name: auto_route_generator - sha256: ba28133d3a3bf0a66772bcc98dade5843753cd9f1a8fb4802b842895515b67d3 + sha256: a21d7a936c917488653c972f62d884d8adcf8c5d37acc7cd24da33cf784546c0 url: "https://pub.dev" source: hosted - version: "8.0.0" + version: "8.1.0" bloc: dependency: transitive description: @@ -205,42 +205,42 @@ packages: dependency: "direct main" description: name: camera - sha256: "2170a943dcb67be2af2c6bcda8775e74b41d4c02d6a4eb10bdc832ee185c4eea" + sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167" url: "https://pub.dev" source: hosted - version: "0.11.0+1" + version: "0.11.0+2" camera_android_camerax: dependency: transitive description: name: camera_android_camerax - sha256: "7d84815edbb8304b51c10deba3c20f44eef80aa46ff156ec45428ed16600b49a" + sha256: "011be2ab0e5b3e3aa8094413fa890f8c5c5afd7cfdaef353a992047d4dab5780" url: "https://pub.dev" source: hosted - version: "0.6.5+5" + version: "0.6.8+2" camera_avfoundation: dependency: transitive description: name: camera_avfoundation - sha256: "7d021e8cd30d9b71b8b92b4ad669e80af432d722d18d6aac338572754a786c15" + sha256: "7c28969a975a7eb2349bc2cb2dfe3ad218a33dba9968ecfb181ce08c87486655" url: "https://pub.dev" source: hosted - version: "0.9.16" + version: "0.9.17+3" camera_platform_interface: dependency: transitive description: name: camera_platform_interface - sha256: a250314a48ea337b35909a4c9d5416a208d736dcb01d0b02c6af122be66660b0 + sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 url: "https://pub.dev" source: hosted - version: "2.7.4" + version: "2.8.0" camera_web: dependency: transitive description: name: camera_web - sha256: "9e9aba2fbab77ce2472924196ff8ac4dd8f9126c4f9a3096171cd1d870d6b26c" + sha256: "595f28c89d1fb62d77c73c633193755b781c6d2e0ebcd8dc25b763b514e6ba8f" url: "https://pub.dev" source: hosted - version: "0.3.3" + version: "0.3.5" characters: dependency: transitive description: @@ -293,26 +293,26 @@ packages: dependency: transitive description: name: coverage - sha256: "3945034e86ea203af7a056d98e98e42a5518fff200d6e8e6647e1886b07e936e" + sha256: c1fb2dce3c0085f39dc72668e85f8e0210ec7de05345821ff58530567df345a5 url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.9.2" cross_file: dependency: transitive description: name: cross_file - sha256: "55d7b444feb71301ef6b8838dbc1ae02e63dd48c8773f3810ff53bb1e2945b32" + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" url: "https://pub.dev" source: hosted - version: "0.3.4+1" + version: "0.3.4+2" crypto: dependency: transitive description: name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27 url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.5" cupertino_icons: dependency: "direct main" description: @@ -351,14 +351,14 @@ packages: path: "../digit_components" relative: true source: path - version: "1.0.1" + version: "1.0.1+1" digit_data_model: dependency: "direct overridden" description: path: "../digit_data_model" relative: true source: path - version: "1.0.1" + version: "1.0.3+1" dio: dependency: transitive description: @@ -387,10 +387,10 @@ packages: dependency: transitive description: name: easy_stepper - sha256: d09e974ec9148480072f8a7d3b0779dfdbc1a3ec1ff7daa7fbda95b0c1fe7453 + sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" url: "https://pub.dev" source: hosted - version: "0.8.5" + version: "0.8.5+1" fake_async: dependency: transitive description: @@ -403,10 +403,10 @@ packages: dependency: transitive description: name: ffi - sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" + sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.3" file: dependency: transitive description: @@ -432,10 +432,10 @@ packages: dependency: "direct main" description: name: flutter_bloc - sha256: f0ecf6e6eb955193ca60af2d5ca39565a86b8a142452c5b24d96fb477428f4d2 + sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a url: "https://pub.dev" source: hosted - version: "8.1.5" + version: "8.1.6" flutter_focus_watcher: dependency: transitive description: @@ -509,10 +509,10 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: c6b0b4c05c458e1c01ad9bcc14041dd7b1f6783d487be4386f793f47a8a4d03e + sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda" url: "https://pub.dev" source: hosted - version: "2.0.20" + version: "2.0.22" flutter_spinkit: dependency: transitive description: @@ -551,10 +551,10 @@ packages: dependency: transitive description: name: fluttertoast - sha256: "7eae679e596a44fdf761853a706f74979f8dd3cd92cf4e23cae161fda091b847" + sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" url: "https://pub.dev" source: hosted - version: "8.2.6" + version: "8.2.8" freezed: dependency: "direct dev" description: @@ -567,10 +567,10 @@ packages: dependency: "direct main" description: name: freezed_annotation - sha256: c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d + sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.4" frontend_server_client: dependency: transitive description: @@ -615,18 +615,18 @@ packages: dependency: transitive description: name: graphs - sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 + sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" gs1_barcode_parser: dependency: "direct main" description: name: gs1_barcode_parser - sha256: "9aaff47bdab7177deaf9248cc861ef41cf611d3f828498cb40b64bedcbf53391" + sha256: ff171bc40038de3f7178fbc32eaf9eebc3d35a3c4c00bb0281fe4a976d853a42 url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.1.0" horizontal_data_table: dependency: transitive description: @@ -639,10 +639,10 @@ packages: dependency: transitive description: name: http - sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -767,10 +767,10 @@ packages: dependency: transitive description: name: location_web - sha256: "15ad7b4c8a9f55abee513373755e093a40c04d7e24fc1b4f89676fe99523d034" + sha256: "49dda13d415c4603c5775a33fb22f575e0aa3f0ec2916644ddcd722db31ee884" url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "5.0.2" logging: dependency: transitive description: @@ -815,18 +815,18 @@ packages: dependency: transitive description: name: mime - sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.6" mocktail: dependency: "direct dev" description: name: mocktail - sha256: c4b5007d91ca4f67256e720cb1b6d704e79a510183a12fa551021f652577dce6 + sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" nested: dependency: transitive description: @@ -863,18 +863,18 @@ packages: dependency: transitive description: name: package_info_plus - sha256: b93d8b4d624b4ea19b0a5a208b2d6eff06004bc3ce74c06040b120eeadd00ce0 + sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 url: "https://pub.dev" source: hosted - version: "8.0.0" + version: "8.0.2" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: f49918f3433a3146047372f9d4f1f847511f2acd5cd030e1f44fe5a50036b70e + sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "3.0.1" path: dependency: "direct main" description: @@ -895,18 +895,18 @@ packages: dependency: "direct main" description: name: path_provider - sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "9c96da072b421e98183f9ea7464898428e764bc0ce5567f27ec8693442e72514" + sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7" url: "https://pub.dev" source: hosted - version: "2.2.5" + version: "2.2.10" path_provider_foundation: dependency: transitive description: @@ -935,10 +935,10 @@ packages: dependency: transitive description: name: path_provider_windows - sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.3.0" petitparser: dependency: transitive description: @@ -951,10 +951,10 @@ packages: dependency: transitive description: name: platform - sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" + sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" url: "https://pub.dev" source: hosted - version: "3.1.4" + version: "3.1.5" plugin_platform_interface: dependency: transitive description: @@ -1012,7 +1012,7 @@ packages: source: hosted version: "2.1.1" reactive_forms: - dependency: "direct main" + dependency: transitive description: name: reactive_forms sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" @@ -1092,10 +1092,10 @@ packages: dependency: transitive description: name: source_map_stack_trace - sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" + sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" source_maps: dependency: transitive description: @@ -1236,10 +1236,10 @@ packages: dependency: transitive description: name: uuid - sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8" + sha256: f33d6bb662f0e4f79dcd7ada2e6170f3b3a2530c28fc41f49a411ddedd576a77 url: "https://pub.dev" source: hosted - version: "4.4.0" + version: "4.5.0" vector_graphics: dependency: transitive description: @@ -1316,10 +1316,10 @@ packages: dependency: transitive description: name: win32 - sha256: a79dbe579cb51ecd6d30b17e0cae4e0ea15e2c0e66f69ad4198f22a6789e94f4 + sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a" url: "https://pub.dev" source: hosted - version: "5.5.1" + version: "5.5.4" xdg_directories: dependency: transitive description: diff --git a/packages/digit_scanner/pubspec.yaml b/packages/digit_scanner/pubspec.yaml index c83d4f6b5..6c91e4491 100644 --- a/packages/digit_scanner/pubspec.yaml +++ b/packages/digit_scanner/pubspec.yaml @@ -43,12 +43,11 @@ dependencies: freezed_annotation: ^2.1.0 overlay_builder: ^1.1.0 flutter_svg: ^2.0.8 - audioplayers: ^6.0.0 + audioplayers: ^6.1.0 auto_route: ^8.1.3 path_provider: ^2.1.3 path: ^1.9.0 google_mlkit_commons: ^0.7.1 - reactive_forms: ^17.0.0 dev_dependencies: flutter_test: diff --git a/packages/forms_engine/pubspec.lock b/packages/forms_engine/pubspec.lock index a52776731..54e0eec74 100644 --- a/packages/forms_engine/pubspec.lock +++ b/packages/forms_engine/pubspec.lock @@ -109,10 +109,10 @@ packages: dependency: "direct dev" description: name: build_runner - sha256: "67d591d602906ef9201caf93452495ad1812bea2074f04e25dbd7c133785821b" + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" url: "https://pub.dev" source: hosted - version: "2.4.7" + version: "2.4.11" build_runner_core: dependency: transitive description: @@ -228,19 +228,18 @@ packages: digit_components: dependency: "direct main" description: - name: digit_components - sha256: "8e5d120f2c16c0d8ffaf4d0de1218da5e492061d6bb9245214589fb1ea5ec09e" - url: "https://pub.dev" - source: hosted - version: "0.0.3+16" + path: "../digit_components" + relative: true + source: path + version: "1.0.1+1" easy_stepper: dependency: transitive description: name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" url: "https://pub.dev" source: hosted - version: "0.5.2+1" + version: "0.8.5+1" fake_async: dependency: transitive description: @@ -350,6 +349,11 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.3" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" flutter_spinkit: dependency: transitive description: @@ -380,10 +384,10 @@ packages: dependency: transitive description: name: fluttertoast - sha256: dfdde255317af381bfc1c486ed968d5a43a2ded9c931e87cbecd88767d6a71c1 + sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" url: "https://pub.dev" source: hosted - version: "8.2.4" + version: "8.2.8" freezed: dependency: "direct dev" description: @@ -420,10 +424,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 url: "https://pub.dev" source: hosted - version: "4.0.5" + version: "6.2.1" graphs: dependency: transitive description: @@ -444,10 +448,10 @@ packages: dependency: transitive description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -468,10 +472,10 @@ packages: dependency: "direct main" description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" io: dependency: transitive description: @@ -540,26 +544,26 @@ packages: dependency: transitive description: name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.0" location_web: dependency: transitive description: name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + sha256: "15ad7b4c8a9f55abee513373755e093a40c04d7e24fc1b4f89676fe99523d034" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "5.0.1" logging: dependency: transitive description: @@ -572,10 +576,10 @@ packages: dependency: transitive description: name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + sha256: "6a24ade5d3d918c306bb1c21a6b9a04aab0489d51a2582522eea820b4093b62b" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "3.1.2" matcher: dependency: transitive description: @@ -652,18 +656,18 @@ packages: dependency: transitive description: name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "8.0.2" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.1" path: dependency: transitive description: @@ -732,10 +736,10 @@ packages: dependency: transitive description: name: plugin_platform_interface - sha256: f4f88d4a900933e7267e2b353594774fc0d07fb072b47eedcd5b54e1ea3269f8 + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" url: "https://pub.dev" source: hosted - version: "2.1.7" + version: "2.1.8" pointer_interceptor: dependency: transitive description: @@ -788,18 +792,18 @@ packages: dependency: transitive description: name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 + sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a url: "https://pub.dev" source: hosted - version: "0.8.1" + version: "2.1.1" reactive_forms: dependency: "direct main" description: name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "17.0.1" remove_emoji_input_formatter: dependency: transitive description: @@ -993,10 +997,10 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062 url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "1.0.0" web_socket_channel: dependency: transitive description: @@ -1038,5 +1042,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.3.0 <3.9.0" - flutter: ">=3.18.0-18.0.pre.54" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.19.2" diff --git a/packages/forms_engine/pubspec.yaml b/packages/forms_engine/pubspec.yaml index b1bc6a5d7..21b136a7e 100644 --- a/packages/forms_engine/pubspec.yaml +++ b/packages/forms_engine/pubspec.yaml @@ -13,10 +13,10 @@ dependencies: flutter: sdk: flutter freezed_annotation: ^2.1.0 - intl: ^0.18.0 + intl: ^0.19.0 json_annotation: ^4.7.0 - reactive_forms: ^14.1.0 - digit_components: ^0.0.1 + reactive_forms: ^17.0.0 + digit_components: ^1.0.1+1 flutter_bloc: ^8.1.1 dev_dependencies: diff --git a/packages/inventory_management/lib/pages/record_stock/stock_details.dart b/packages/inventory_management/lib/pages/record_stock/stock_details.dart index 2bcead5b1..8e9599111 100644 --- a/packages/inventory_management/lib/pages/record_stock/stock_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/stock_details.dart @@ -558,7 +558,7 @@ class StockDetailsPageState extends LocalizedState { } }); } - } + }, child: Center( child: Text( localizations diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index f072c6709..343c8de22 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -61,10 +61,10 @@ packages: dependency: transitive description: name: audioplayers - sha256: "752039d6aa752597c98ec212e9759519061759e402e7da59a511f39d43aa07d2" + sha256: c346ba5a39dc208f1bab55fc239855f573d69b0e832402114bf0b793622adc4d url: "https://pub.dev" source: hosted - version: "6.0.0" + version: "6.1.0" audioplayers_android: dependency: transitive description: @@ -101,10 +101,10 @@ packages: dependency: transitive description: name: audioplayers_web - sha256: db8fc420dadf80da18e2286c18e746fb4c3b2c5adbf0c963299dde046828886d + sha256: "3609bdf0e05e66a3d9750ee40b1e37f2a622c4edb796cc600b53a90a30a2ace4" url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.0.1" audioplayers_windows: dependency: transitive description: @@ -364,11 +364,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - name: dart_mappable_builder - sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e - url: "https://pub.dev" - source: hosted - version: "4.2.3" + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.0" dart_style: dependency: transitive description: @@ -399,21 +398,21 @@ packages: path: "../digit_components" relative: true source: path - version: "1.0.1" + version: "1.0.1+1" digit_data_model: dependency: "direct main" description: path: "../digit_data_model" relative: true source: path - version: "1.0.1" + version: "1.0.3+1" digit_scanner: dependency: "direct main" description: path: "../digit_scanner" relative: true source: path - version: "1.0.3" + version: "1.0.3+1" dio: dependency: "direct main" description: diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index 7462d050c..70d110e51 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -1,6 +1,6 @@ name: inventory_management description: This package offers inventory management features, allowing users to view stock reports and perform inventory resource reconciliation. -version: 1.0.3+2+1 +version: 1.0.3+2 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/inventory_management repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index fa188b310..382aab4d2 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -61,10 +61,10 @@ packages: dependency: transitive description: name: audioplayers - sha256: "752039d6aa752597c98ec212e9759519061759e402e7da59a511f39d43aa07d2" + sha256: c346ba5a39dc208f1bab55fc239855f573d69b0e832402114bf0b793622adc4d url: "https://pub.dev" source: hosted - version: "6.0.0" + version: "6.1.0" audioplayers_android: dependency: transitive description: @@ -101,10 +101,10 @@ packages: dependency: transitive description: name: audioplayers_web - sha256: db8fc420dadf80da18e2286c18e746fb4c3b2c5adbf0c963299dde046828886d + sha256: "3609bdf0e05e66a3d9750ee40b1e37f2a622c4edb796cc600b53a90a30a2ace4" url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.0.1" audioplayers_windows: dependency: transitive description: @@ -364,11 +364,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - name: dart_mappable_builder - sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e - url: "https://pub.dev" - source: hosted - version: "4.2.3" + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.0" dart_style: dependency: transitive description: @@ -399,21 +398,21 @@ packages: path: "../digit_components" relative: true source: path - version: "1.0.1" + version: "1.0.1+1" digit_data_model: dependency: "direct main" description: path: "../digit_data_model" relative: true source: path - version: "1.0.1" + version: "1.0.3+1" digit_scanner: dependency: "direct main" description: path: "../digit_scanner" relative: true source: path - version: "1.0.3" + version: "1.0.3+1" dio: dependency: "direct main" description: diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index efb443f57..573ea5cb6 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -61,10 +61,10 @@ packages: dependency: transitive description: name: audioplayers - sha256: "752039d6aa752597c98ec212e9759519061759e402e7da59a511f39d43aa07d2" + sha256: c346ba5a39dc208f1bab55fc239855f573d69b0e832402114bf0b793622adc4d url: "https://pub.dev" source: hosted - version: "6.0.0" + version: "6.1.0" audioplayers_android: dependency: transitive description: @@ -101,10 +101,10 @@ packages: dependency: transitive description: name: audioplayers_web - sha256: db8fc420dadf80da18e2286c18e746fb4c3b2c5adbf0c963299dde046828886d + sha256: "3609bdf0e05e66a3d9750ee40b1e37f2a622c4edb796cc600b53a90a30a2ace4" url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.0.1" audioplayers_windows: dependency: transitive description: @@ -364,11 +364,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - name: dart_mappable_builder - sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e - url: "https://pub.dev" - source: hosted - version: "4.2.3" + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.0" dart_style: dependency: transitive description: @@ -399,28 +398,27 @@ packages: path: "../digit_components" relative: true source: path - version: "1.0.1" + version: "1.0.1+1" digit_data_model: dependency: "direct main" description: path: "../digit_data_model" relative: true source: path - version: "1.0.1" + version: "1.0.3+1" digit_scanner: dependency: "direct main" description: path: "../digit_scanner" relative: true source: path - version: "1.0.3" + version: "1.0.3+1" digit_showcase: dependency: "direct main" description: - name: digit_showcase - sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" - url: "https://pub.dev" - source: hosted + path: "../digit_showcase" + relative: true + source: path version: "1.0.0" dio: dependency: "direct main" diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index 25ec6b400..e5527e103 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -38,7 +38,6 @@ dependencies: drift_db_viewer: ^2.0.0 package_info_plus: ^8.0.0 digit_showcase: ^1.0.0 - flutter_keyboard_visibility: ^5.4.0 stream_transform: ^2.1.0 async: ^2.11.0 formula_parser: ^2.0.1 @@ -55,7 +54,6 @@ dev_dependencies: bloc_test: ^9.1.0 build_runner: ^2.4.11 mocktail: ^1.0.2 - build_runner: ^2.4.11 dart_mappable_builder: git: url: https://github.com/egovernments/health-campaign-field-worker-app/ diff --git a/packages/sync_service/lib/data/repositories/sync/sync_down.dart b/packages/sync_service/lib/data/repositories/sync/sync_down.dart index beda255a3..ac36c8525 100644 --- a/packages/sync_service/lib/data/repositories/sync/sync_down.dart +++ b/packages/sync_service/lib/data/repositories/sync/sync_down.dart @@ -74,7 +74,7 @@ class PerformSyncDown { responseEntities = await SyncServiceSingleton() .entityMapper - ?.entityResponse(typeGroupedEntity, operationGroupedEntity, + ?.syncDownEntityResponse(typeGroupedEntity, operationGroupedEntity, entities, remote, local); for (var element in responseEntities!) { diff --git a/packages/sync_service/lib/data/repositories/sync/sync_up.dart b/packages/sync_service/lib/data/repositories/sync/sync_up.dart index 22cb39cd0..3342dcba4 100644 --- a/packages/sync_service/lib/data/repositories/sync/sync_up.dart +++ b/packages/sync_service/lib/data/repositories/sync/sync_up.dart @@ -1,8 +1,8 @@ import 'dart:async'; import 'package:collection/collection.dart'; -import 'package:digit_components/utils/app_logger.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:flutter/foundation.dart'; import 'package:sync_service/utils/utils.dart'; import '../../../models/bandwidth/bandwidth_model.dart'; @@ -119,6 +119,15 @@ class PerformSyncUp { listOfBatchedNonRecoverableErrorList = nonRecoverableErrorList.slices(bandwidthModel.batchSize).toList(); + final registry = SyncServiceSingleton() + .registries + ?.getSyncRegistries(typeGroupedEntity.key, remote); + if (registry == null) { + if (kDebugMode) { + print('no custom sync registry found for ${typeGroupedEntity.key}'); + } + } + // Handle non-recoverable errors if (listOfBatchedNonRecoverableErrorList.isNotEmpty) { for (final sublist in listOfBatchedNonRecoverableErrorList) { @@ -127,14 +136,17 @@ class PerformSyncUp { nonRecoverableErrorEntities, operationGroupedEntity.key, ); - for (final syncedEntity in sublist) { - if (syncedEntity.type == DataModelType.complaints) continue; - await local.markSyncedUp( - entry: syncedEntity, - nonRecoverableError: syncedEntity.nonRecoverableError, - clientReferenceId: syncedEntity.clientReferenceId, - id: syncedEntity.id, - ); + if (registry != null) { + await registry.localMarkSyncUp(sublist, local); + } else { + for (final syncedEntity in sublist) { + await local.markSyncedUp( + entry: syncedEntity, + nonRecoverableError: syncedEntity.nonRecoverableError, + clientReferenceId: syncedEntity.clientReferenceId, + id: syncedEntity.id, + ); + } } } } @@ -160,104 +172,63 @@ class PerformSyncUp { // Handle successful operations if (listOfBatchedOpLogList.isNotEmpty) { + final registry = SyncServiceSingleton() + .registries + ?.getSyncRegistries(typeGroupedEntity.key, remote); + if (registry == null) { + if (kDebugMode) { + print( + 'no custom sync registry found for ${typeGroupedEntity.key}'); + } + } for (final sublist in listOfBatchedOpLogList) { final entities = getEntityModel(sublist, local); if (operationGroupedEntity.key == DataOperation.create) { - switch (typeGroupedEntity.key) { - case DataModelType.complaints: - for (final entity in entities) { - if (remote is PgrServiceRemoteRepository && - entity is PgrServiceModel) { - final response = await remote.create(entity); - final responseData = response.data; - if (responseData is! Map) { - AppLogger.instance.error( - title: 'NetworkManager : PgrServiceRemoteRepository', - message: responseData, - stackTrace: StackTrace.current, - ); - continue; - } - - PgrServiceCreateResponseModel - pgrServiceCreateResponseModel; - PgrComplaintResponseModel pgrComplaintModel; - try { - pgrServiceCreateResponseModel = - PgrServiceCreateResponseModelMapper.fromMap( - responseData, - ); - pgrComplaintModel = - pgrServiceCreateResponseModel.serviceWrappers.first; - } catch (e) { - rethrow; - } - - final service = pgrComplaintModel.service; - final serviceRequestId = service.serviceRequestId; - - if (serviceRequestId == null || - serviceRequestId.isEmpty) { - AppLogger.instance.error( - title: 'NetworkManager : PgrServiceRemoteRepository', - message: 'Service Request ID is null', - stackTrace: StackTrace.current, - ); - continue; - } - - await local.markSyncedUp( - entry: sublist.firstWhere((element) => - element.clientReferenceId == - entity.clientReferenceId), - clientReferenceId: entity.clientReferenceId, - nonRecoverableError: entity.nonRecoverableError, - ); - - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serviceRequestId, - dataOperation: operationGroupedEntity.key, - rowVersion: entity.rowVersion, - ), - ); - - await local.update( - entity.copyWith( - serviceRequestId: serviceRequestId, - id: service.id, - applicationStatus: service.applicationStatus, - accountId: service.accountId, - ), - createOpLog: false, - ); - } - } - break; - default: - await remote.bulkCreate(entities); + if (registry != null) { + await registry.create( + entities: entities, + entry: sublist, + local: local, + operationGroupedEntity: operationGroupedEntity, + typeGroupedEntity: typeGroupedEntity); + } else { + remote.bulkCreate(entities); } } else if (operationGroupedEntity.key == DataOperation.update) { await Future.delayed(const Duration(seconds: 1)); - await remote.bulkUpdate(entities); + if (registry != null) { + await registry.update(entities, local); + } else { + remote.bulkUpdate(entities); + } } else if (operationGroupedEntity.key == DataOperation.delete) { await Future.delayed(const Duration(seconds: 1)); - await remote.bulkDelete(entities); + if (registry != null) { + await registry.delete(entities, local); + } else { + remote.bulkDelete(entities); + } } if (operationGroupedEntity.key == DataOperation.singleCreate) { for (var element in entities) { - await remote.singleCreate(element); + if (registry != null) { + await registry.singleCreate(element, local); + } else { + remote.singleCreate(element); + } } } - for (final syncedEntity in sublist) { - if (syncedEntity.type == DataModelType.complaints) continue; - await local.markSyncedUp( - entry: syncedEntity, - id: syncedEntity.id, - nonRecoverableError: syncedEntity.nonRecoverableError, - clientReferenceId: syncedEntity.clientReferenceId, - ); + if (registry != null) { + registry.localMarkSyncUp(sublist, local); + } else { + for (final syncedEntity in sublist) { + await local.markSyncedUp( + entry: syncedEntity, + id: syncedEntity.id, + nonRecoverableError: syncedEntity.nonRecoverableError, + clientReferenceId: syncedEntity.clientReferenceId, + ); + } } } } @@ -265,3 +236,67 @@ class PerformSyncUp { } } } + +abstract class SyncUpOperation { + Future create( + {required List> entry, + required List entities, + required LocalRepository local, + required MapEntry>> + operationGroupedEntity, + required MapEntry>> + typeGroupedEntity}); + Future update(List entities, LocalRepository local); + Future delete(List entities, LocalRepository local); + Future singleCreate(EntityModel entity, LocalRepository local); + Future localMarkSyncUp( + List> entity, LocalRepository local); +} + +class SyncServiceRegistry { + // Singleton instance + static final SyncServiceRegistry _instance = SyncServiceRegistry._internal(); + + // Private constructor for singleton pattern + SyncServiceRegistry._internal(); + + // Factory constructor to return the singleton instance + factory SyncServiceRegistry() { + return _instance; + } + + // Private map to store registries + static final Map + _registries = {}; + + /// Registers a sync registry for a given [DataModelType]. + void registerSyncRegistries( + Map registries, + ) { + registries.forEach((type, strategyList) { + _registries[type] = strategyList; // Create a new list + }); + } + + /// Retrieves a sync registry for the given [DataModelType]. + SyncUpOperation? getSyncRegistries( + DataModelType type, RemoteRepository remote) { + final strategyFunction = _registries[type]; + return strategyFunction != null ? strategyFunction(remote) : null; + } + + /// Getter to access the _registries map + Map + get registries { + return _registries; + } + + /// Setter to update the _registries map + set registries( + Map + newStrategies) { + newStrategies.forEach((type, strategyList) { + _registries[type] = strategyList; // Create a new list + }); + } +} diff --git a/packages/sync_service/lib/data/sync_entity_mapper_listener.dart b/packages/sync_service/lib/data/sync_entity_mapper_listener.dart index 1366bf4de..63cfb63c5 100644 --- a/packages/sync_service/lib/data/sync_entity_mapper_listener.dart +++ b/packages/sync_service/lib/data/sync_entity_mapper_listener.dart @@ -26,7 +26,7 @@ abstract class SyncEntityMapperListener { /// This method accepts a `MapEntry` of `DataModelType` and a list of `OpLogEntry` objects, another `MapEntry` of `DataOperation` and a list of `OpLogEntry` objects, a list of `EntityModel` objects, a `RemoteRepository` object, and a `LocalRepository` object as parameters. /// It returns a `Future` that resolves to a list of `EntityModel` objects. /// It is expected to be overridden in a concrete implementation of `SyncEntityMapperListener`. - Future> entityResponse( + Future> syncDownEntityResponse( MapEntry>> typeGroupedEntity, MapEntry>> operationGroupedEntity, @@ -40,5 +40,5 @@ abstract class SyncEntityMapperListener { /// It returns an updated `EntityModel` object. /// It is expected to be overridden in a concrete implementation of `SyncEntityMapperListener`. EntityModel updatedEntity( - EntityModel entity, OpLogEntry e, String? serverGeneratedId); + EntityModel entity, OpLogEntry entry, String? serverGeneratedId); } diff --git a/packages/sync_service/lib/data/sync_service.dart b/packages/sync_service/lib/data/sync_service.dart index 2174adae3..43ba120df 100644 --- a/packages/sync_service/lib/data/sync_service.dart +++ b/packages/sync_service/lib/data/sync_service.dart @@ -71,7 +71,7 @@ class SyncService { service?.stopSelf(); } - if (syncError != null) throw syncError; + if (syncError != null) throw 'SyncUp Error: ${syncError.error}'; // Recursive function which will call the Perform Sync diff --git a/packages/sync_service/lib/utils/utils.dart b/packages/sync_service/lib/utils/utils.dart index 7db4d94d4..b87946c83 100644 --- a/packages/sync_service/lib/utils/utils.dart +++ b/packages/sync_service/lib/utils/utils.dart @@ -1,9 +1,7 @@ import 'package:digit_data_model/data_model.dart'; import 'package:flutter/cupertino.dart'; import 'package:provider/provider.dart'; - -import '../blocs/sync/sync.dart'; -import '../data/sync_entity_mapper_listener.dart'; +import 'package:sync_service/sync_service_lib.dart'; /// The `SyncServiceSingleton` class is a singleton that provides access to sync service related configurations and listeners. /// @@ -25,6 +23,8 @@ class SyncServiceSingleton { // Listener for sync entity mapper events SyncEntityMapperListener? _entityListener; + SyncServiceRegistry? _registries; + // Number of times to retry sync down operation late int _syncDownRetryCount = 0; @@ -45,9 +45,15 @@ class SyncServiceSingleton { _entityListener = entityMapper; } + void setRegistries(SyncServiceRegistry? registries) { + _registries = registries; + } + // Getter for the sync entity mapper listener SyncEntityMapperListener? get entityMapper => _entityListener; + SyncServiceRegistry? get registries => _registries; + // Getter for the sync down retry count int get syncDownRetryCount => _syncDownRetryCount; diff --git a/pubspec.lock b/pubspec.lock index cdb78737e..cf817445e 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,23 +5,18 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "5aaf60d96c4cd00fe7f21594b5ad6a1b699c80a27420f8a837f4d68473ef09e3" + sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" url: "https://pub.dev" source: hosted - version: "68.0.0" - _macros: - dependency: transitive - description: dart - source: sdk - version: "0.1.0" + version: "67.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: "21f1d3720fd1c70316399d5e2bccaebb415c434592d778cce8acb967b8578808" + sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" url: "https://pub.dev" source: hosted - version: "6.5.0" + version: "6.4.1" ansi_styles: dependency: transitive description: @@ -74,10 +69,10 @@ packages: dependency: transitive description: name: build_daemon - sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9" + sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" url: "https://pub.dev" source: hosted - version: "4.0.2" + version: "4.0.1" build_resolvers: dependency: transitive description: @@ -90,18 +85,18 @@ packages: dependency: "direct dev" description: name: build_runner - sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" + sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" url: "https://pub.dev" source: hosted - version: "2.4.11" + version: "2.4.9" build_runner_core: dependency: transitive description: name: build_runner_core - sha256: e3c79f69a64bdfcd8a776a3c28db4eb6e3fb5356d013ae5eb2e52007706d5dbe + sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" url: "https://pub.dev" source: hosted - version: "7.3.1" + version: "7.3.0" built_collection: dependency: transitive description: @@ -250,10 +245,10 @@ packages: dependency: transitive description: name: http - sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.0" http_multi_server: dependency: transitive description: @@ -302,14 +297,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" - macros: - dependency: transitive - description: - name: macros - sha256: "12e8a9842b5a7390de7a781ec63d793527582398d16ea26c60fed58833c9ae79" - url: "https://pub.dev" - source: hosted - version: "0.1.0-main.0" matcher: dependency: transitive description: @@ -450,10 +437,10 @@ packages: dependency: transitive description: name: shelf_web_socket - sha256: "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611" + sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "1.0.4" source_span: dependency: transitive description: @@ -554,26 +541,18 @@ packages: dependency: transitive description: name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" - url: "https://pub.dev" - source: hosted - version: "0.5.1" - web_socket: - dependency: transitive - description: - name: web_socket - sha256: "24301d8c293ce6fe327ffe6f59d8fd8834735f0ec36e4fd383ec7ff8a64aa078" + sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05" url: "https://pub.dev" source: hosted - version: "0.1.5" + version: "0.4.2" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: a2d56211ee4d35d9b344d9d4ce60f362e4f5d1aafb988302906bd732bc731276 + sha256: "939ab60734a4f8fa95feacb55804fa278de28bdeef38e616dc08e44a84adea23" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "2.4.3" yaml: dependency: transitive description: @@ -591,4 +570,4 @@ packages: source: hosted version: "2.2.1" sdks: - dart: ">=3.4.0 <4.0.0" + dart: ">=3.2.0 <4.0.0" From d6272f06fd4fa0fab021d1f3d226a328ab974395 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Wed, 4 Sep 2024 17:28:27 +0530 Subject: [PATCH 088/241] pulled 6000 changes for pub upgrade updated with latest dev updated sync package - made the sync up to accept the datamodel type custom registry to modify Updated route annotations of the package and extending new RootStackRouter --- .../lib/pages/home.dart | 12 +- .../lib/router/app_router.dart | 231 +------- .../lib/router/app_router.gr.dart | 7 - .../pubspec.lock | 28 +- .../digit_entity/hooks/lib/models.mapper.dart | 26 +- .../digit_entity/hooks/pubspec.lock | 10 +- .../lib/pages/manage_attendance.dart | 2 +- .../lib/pages/mark_attendance.dart | 2 +- .../lib/pages/session_select.dart | 2 +- .../lib/router/attendance_router.dart | 16 +- ...uter.gm.dart => attendance_router.gr.dart} | 4 +- packages/attendance_management/pubspec.yaml | 1 - .../lib/pages/closed_household_details.dart | 2 +- .../lib/pages/closed_household_summary.dart | 2 +- .../lib/router/closed_household_router.dart | 12 +- ...m.dart => closed_household_router.gr.dart} | 4 +- .../widgets/back_navigation_help_header.dart | 2 +- .../lib/widgets/showcase/showcase_button.dart | 2 +- .../models/entities/chart_data.mapper.dart | 8 +- .../entities/dashboard_request.mapper.dart | 26 +- .../dashboard_response_model.mapper.dart | 14 +- .../lib/models/entities/dss_enums.mapper.dart | 2 +- .../lib/models/entities/insight.mapper.dart | 8 +- .../lib/models/entities/plots.mapper.dart | 8 +- .../lib/router/dashboard_router.dart | 6 +- ...outer.gm.dart => dashboard_router.gr.dart} | 4 +- packages/digit_scanner/example/pubspec.lock | 526 +++++++++++++++++- packages/digit_scanner/example/pubspec.yaml | 4 +- .../lib/router/digit_scanner_router.dart | 4 +- ...r.gm.dart => digit_scanner_router.gr.dart} | 4 +- packages/digit_scanner/pubspec.lock | 139 +---- packages/digit_scanner/pubspec.yaml | 3 +- .../entities/inventory_enums.mapper.dart | 2 +- .../lib/pages/manage_stocks.dart | 2 +- .../lib/pages/record_stock/stock_details.dart | 2 +- .../pages/record_stock/warehouse_details.dart | 2 +- .../lib/pages/reports/report_details.dart | 2 +- .../lib/pages/reports/report_selection.dart | 2 +- .../stock_reconciliation.dart | 2 +- .../lib/router/inventory_router.dart | 8 +- ...outer.gm.dart => inventory_router.gr.dart} | 4 +- .../inventory_management/lib/utils/utils.dart | 1 + packages/inventory_management/pubspec.lock | 28 +- .../record_facility_details.dart | 2 +- .../record_reason_checklist.dart | 2 +- .../record_referral_details.dart | 2 +- .../search_referral_reconciliations.dart | 4 +- .../referral_reconciliation_router.dart | 8 +- ...=> referral_reconciliation_router.gr.dart} | 4 +- packages/referral_reconciliation/pubspec.lock | 30 +- .../household_global_seach.dart | 2 +- .../individual_global_search.dart | 2 +- .../registration_delivery_enums.mapper.dart | 2 +- .../beneficiary/beneficiary_checklist.dart | 3 +- .../beneficiary/beneficiary_details.dart | 2 +- .../beneficiary/deliver_intervention.dart | 2 +- .../beneficiary/delivery_summary_page.dart | 2 +- .../pages/beneficiary/dose_administered.dart | 2 +- .../pages/beneficiary/household_overview.dart | 2 +- .../record_past_delivery_details.dart | 2 +- .../pages/beneficiary/refer_beneficiary.dart | 2 +- .../pages/beneficiary/refused_delivery.dart | 2 +- .../lib/pages/beneficiary/side_effects.dart | 2 +- .../widgets/household_acknowledgement.dart | 2 +- .../widgets/splash_acknowledgement.dart | 2 +- .../beneficiary_acknowledgement.dart | 2 +- .../house_details.dart | 2 +- .../household_details.dart | 2 +- .../household_location.dart | 2 +- .../individual_details.dart | 2 +- .../lib/pages/reason_for_deletion.dart | 2 +- .../lib/pages/search_beneficiary.dart | 2 +- .../lib/pages/summary_page.dart | 3 +- .../router/registration_delivery_router.dart | 8 +- ...t => registration_delivery_router.gr.dart} | 4 +- .../lib/widgets/member_card/member_card.dart | 2 +- .../lib/widgets/showcase/showcase_button.dart | 2 +- packages/registration_delivery/pubspec.lock | 28 +- 78 files changed, 753 insertions(+), 567 deletions(-) rename packages/attendance_management/lib/router/{attendance_router.gm.dart => attendance_router.gr.dart} (98%) rename packages/closed_household/lib/router/{closed_household_router.gm.dart => closed_household_router.gr.dart} (97%) rename packages/digit_dss/lib/router/{dashboard_router.gm.dart => dashboard_router.gr.dart} (91%) rename packages/digit_scanner/lib/router/{digit_scanner_router.gm.dart => digit_scanner_router.gr.dart} (95%) rename packages/inventory_management/lib/router/{inventory_router.gm.dart => inventory_router.gr.dart} (99%) rename packages/referral_reconciliation/lib/router/{referral_reconciliation_router.gm.dart => referral_reconciliation_router.gr.dart} (99%) rename packages/registration_delivery/lib/router/{registration_delivery_router.gm.dart => registration_delivery_router.gr.dart} (99%) diff --git a/apps/health_campaign_field_worker_app/lib/pages/home.dart b/apps/health_campaign_field_worker_app/lib/pages/home.dart index e786ce267..7e905ea79 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/home.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/home.dart @@ -1,9 +1,9 @@ import 'dart:async'; import 'package:attendance_management/attendance_management.dart'; -import 'package:attendance_management/router/attendance_router.gm.dart'; +import 'package:attendance_management/router/attendance_router.gr.dart'; import 'package:closed_household/closed_household.dart'; -import 'package:closed_household/router/closed_household_router.gm.dart'; +import 'package:closed_household/router/closed_household_router.gr.dart'; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/widgets/atoms/digit_toaster.dart'; @@ -11,7 +11,7 @@ import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_dss/data/local_store/no_sql/schema/dashboard_config_schema.dart'; import 'package:digit_dss/models/entities/dashboard_response_model.dart'; -import 'package:digit_dss/router/dashboard_router.gm.dart'; +import 'package:digit_dss/router/dashboard_router.gr.dart'; import 'package:digit_dss/utils/utils.dart'; import 'package:drift_db_viewer/drift_db_viewer.dart'; import 'package:flutter/material.dart'; @@ -19,11 +19,11 @@ import 'package:flutter_background_service/flutter_background_service.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:inventory_management/inventory_management.dart'; -import 'package:inventory_management/router/inventory_router.gm.dart'; +import 'package:inventory_management/router/inventory_router.gr.dart'; import 'package:referral_reconciliation/referral_reconciliation.dart'; -import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart'; +import 'package:referral_reconciliation/router/referral_reconciliation_router.gr.dart'; import 'package:registration_delivery/registration_delivery.dart'; -import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; +import 'package:registration_delivery/router/registration_delivery_router.gr.dart'; import 'package:sync_service/blocs/sync/sync.dart'; import '../blocs/app_initialization/app_initialization.dart'; diff --git a/apps/health_campaign_field_worker_app/lib/router/app_router.dart b/apps/health_campaign_field_worker_app/lib/router/app_router.dart index 50382946e..cb6577911 100644 --- a/apps/health_campaign_field_worker_app/lib/router/app_router.dart +++ b/apps/health_campaign_field_worker_app/lib/router/app_router.dart @@ -1,20 +1,20 @@ import 'package:attendance_management/router/attendance_router.dart'; -import 'package:attendance_management/router/attendance_router.gm.dart'; +import 'package:attendance_management/router/attendance_router.gr.dart'; import 'package:auto_route/auto_route.dart'; import 'package:closed_household/router/closed_household_router.dart'; -import 'package:closed_household/router/closed_household_router.gm.dart'; +import 'package:closed_household/router/closed_household_router.gr.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_dss/router/dashboard_router.dart'; -import 'package:digit_dss/router/dashboard_router.gm.dart'; +import 'package:digit_dss/router/dashboard_router.gr.dart'; import 'package:digit_scanner/router/digit_scanner_router.dart'; -import 'package:digit_scanner/router/digit_scanner_router.gm.dart'; +import 'package:digit_scanner/router/digit_scanner_router.gr.dart'; import 'package:flutter/material.dart'; import 'package:inventory_management/router/inventory_router.dart'; -import 'package:inventory_management/router/inventory_router.gm.dart'; +import 'package:inventory_management/router/inventory_router.gr.dart'; import 'package:referral_reconciliation/router/referral_reconciliation_router.dart'; -import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart'; +import 'package:referral_reconciliation/router/referral_reconciliation_router.gr.dart'; import 'package:registration_delivery/router/registration_delivery_router.dart'; -import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; +import 'package:registration_delivery/router/registration_delivery_router.gr.dart'; import '../blocs/localization/app_localization.dart'; import '../pages/acknowledgement.dart'; @@ -50,18 +50,16 @@ export 'package:auto_route/auto_route.dart'; part 'app_router.gr.dart'; -@AutoRouterConfig( - modules: [ - InventoryRoute, - AttendanceRoute, - ReferralReconciliationRoute, - DigitScannerPackageRoute, - RegistrationDeliveryRoute, - ClosedHouseholdPackageRoute, - DashboardRoute, - ], -) -class AppRouter extends _$AppRouter { +final registrationDeliveryRoute = RegistrationDeliveryRoute(); +final closedHouseholdRoute = ClosedHouseholdPackageRoute(); +final inventoryRoute = InventoryRoute(); +final attendanceRoute = AttendanceRoute(); +final referralReconciliationRoute = ReferralReconciliationRoute(); +final digitScannerRoute = DigitScannerPackageRoute(); +final dashboardRoute = DashboardRoute(); + +@AutoRouterConfig() +class AppRouter extends RootStackRouter { @override RouteType get defaultRouteType => const RouteType.material(); @@ -96,122 +94,10 @@ class AppRouter extends _$AppRouter { page: UserDashboardRoute.page, path: 'dashboard', ), - AutoRoute( - page: RegistrationDeliveryWrapperRoute.page, - path: 'registration-delivery-wrapper', - children: [ - AutoRoute( - initial: true, - page: SearchBeneficiaryRoute.page, - path: 'search-beneficiary'), - - /// Beneficiary Registration - AutoRoute( - page: BeneficiaryRegistrationWrapperRoute.page, - path: 'beneficiary-registration', - children: [ - AutoRoute( - page: IndividualDetailsRoute.page, - path: 'individual-details'), - AutoRoute( - page: HouseHoldDetailsRoute.page, - path: 'household-details'), - AutoRoute( - page: HouseDetailsRoute.page, path: 'house-details'), - AutoRoute( - page: HouseholdLocationRoute.page, - path: 'household-location', - initial: true, - ), - AutoRoute( - page: BeneficiaryAcknowledgementRoute.page, - path: 'beneficiary-acknowledgement', - ), - AutoRoute( - page: SummaryRoute.page, - path: 'beneficiary-summary', - ), - ], - ), - AutoRoute( - page: BeneficiaryWrapperRoute.page, - path: 'beneficiary', - children: [ - AutoRoute( - page: HouseholdOverviewRoute.page, - path: 'overview', - initial: true, - ), - AutoRoute( - page: BeneficiaryChecklistRoute.page, - path: 'beneficiary-checklist', - ), - AutoRoute( - page: BeneficiaryDetailsRoute.page, - path: 'beneficiary-details', - ), - AutoRoute( - page: DeliverInterventionRoute.page, - path: 'deliver-intervention', - ), - AutoRoute( - page: RefusedDeliveryRoute.page, - path: 'refused-delivery', - ), - AutoRoute( - page: SideEffectsRoute.page, - path: 'side-effects', - ), - AutoRoute( - page: ReferBeneficiaryRoute.page, - path: 'refer-beneficiary', - ), - AutoRoute( - page: DoseAdministeredRoute.page, - path: 'dose-administered', - ), - AutoRoute( - page: SplashAcknowledgementRoute.page, - path: 'splash-acknowledgement', - ), - AutoRoute( - page: ReasonForDeletionRoute.page, - path: 'reason-for-deletion', - ), - AutoRoute( - page: RecordPastDeliveryDetailsRoute.page, - path: 'record-past-delivery-details', - ), - AutoRoute( - page: HouseholdAcknowledgementRoute.page, - path: 'household-acknowledgement', - ), - AutoRoute(page: ChecklistViewRoute.page, path: 'view'), - AutoRoute( - page: DeliverySummaryRoute.page, - path: 'delivery-summary', - ), - ], - ), - ]), + ...registrationDeliveryRoute.routes, /// close household - AutoRoute( - page: ClosedHouseholdWrapperRoute.page, - path: 'closed-household-wrapper', - children: [ - AutoRoute( - page: ClosedHouseholdDetailsRoute.page, - path: 'closed-household-details', - initial: true, - ), - AutoRoute( - page: ClosedHouseholdSummaryRoute.page, - path: 'closed-household-summary'), - AutoRoute( - page: ClosedHouseholdAcknowledgementRoute.page, - path: 'closed-household-acknowledgement'), - ]), + ...closedHouseholdRoute.routes, AutoRoute( page: ChecklistWrapperRoute.page, @@ -308,86 +194,13 @@ class AppRouter extends _$AppRouter { ), // Attendance Route - AutoRoute( - page: ManageAttendanceRoute.page, - path: 'manage-attendance', - ), - AutoRoute( - page: AttendanceDateSessionSelectionRoute.page, - path: 'attendance-date-session-selection', - ), - AutoRoute( - page: MarkAttendanceRoute.page, - path: 'mark-attendance', - ), - AutoRoute( - page: AttendanceAcknowledgementRoute.page, - path: 'attendance-acknowledgement', - ), + ...attendanceRoute.routes, //Inventory Route - AutoRoute( - page: ManageStocksRoute.page, - path: 'manage-stocks', - ), - AutoRoute( - page: RecordStockWrapperRoute.page, - path: 'record-stock', - children: [ - AutoRoute( - page: WarehouseDetailsRoute.page, - path: 'warehouse-details', - initial: true), - AutoRoute(page: StockDetailsRoute.page, path: 'details'), - ]), - AutoRoute( - page: InventoryFacilitySelectionRoute.page, - path: 'inventory-select-facilities'), - AutoRoute( - page: StockReconciliationRoute.page, path: 'stock-reconciliation'), - AutoRoute( - page: InventoryReportSelectionRoute.page, - path: 'inventory-report-selection'), - AutoRoute( - page: InventoryReportDetailsRoute.page, - path: 'inventory-report-details'), - AutoRoute( - page: InventoryAcknowledgementRoute.page, - path: 'inventory-acknowledgement'), + ...inventoryRoute.routes, // Referral Reconciliation Route - AutoRoute( - page: HFCreateReferralWrapperRoute.page, - path: 'hf-referral', - children: [ - AutoRoute( - page: ReferralFacilityRoute.page, - path: 'facility-details', - initial: true), - AutoRoute( - page: RecordReferralDetailsRoute.page, - path: 'referral-details'), - AutoRoute( - page: ReferralReasonChecklistRoute.page, - path: 'referral-checklist-create', - ), - AutoRoute( - page: ReferralReasonChecklistPreviewRoute.page, - path: 'referral-checklist-view', - ), - ]), - AutoRoute( - page: ReferralReconAcknowledgementRoute.page, - path: 'referral-acknowledgement', - ), - AutoRoute( - page: ReferralReconProjectFacilitySelectionRoute.page, - path: 'referral-project-facility', - ), - AutoRoute( - page: SearchReferralReconciliationsRoute.page, - path: 'search-referrals', - ), + ...referralReconciliationRoute.routes, ], ) ]; diff --git a/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart b/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart index 68d85a6af..e86077d8f 100644 --- a/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart +++ b/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart @@ -305,13 +305,6 @@ abstract class _$AppRouter extends RootStackRouter { ), ); }, - ...InventoryRoute().pagesMap, - ...AttendanceRoute().pagesMap, - ...ReferralReconciliationRoute().pagesMap, - ...DigitScannerPackageRoute().pagesMap, - ...RegistrationDeliveryRoute().pagesMap, - ...ClosedHouseholdPackageRoute().pagesMap, - ...DashboardRoute().pagesMap, }; } diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 4b5d34e49..08485f7c2 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -76,58 +76,58 @@ packages: dependency: transitive description: name: audioplayers - sha256: c346ba5a39dc208f1bab55fc239855f573d69b0e832402114bf0b793622adc4d + sha256: c05c6147124cd63e725e861335a8b4d57300b80e6e92cea7c145c739223bbaef url: "https://pub.dev" source: hosted - version: "6.1.0" + version: "5.2.1" audioplayers_android: dependency: transitive description: name: audioplayers_android - sha256: de576b890befe27175c2f511ba8b742bec83765fa97c3ce4282bba46212f58e4 + sha256: b00e1a0e11365d88576320ec2d8c192bc21f1afb6c0e5995d1c57ae63156acb5 url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "4.0.3" audioplayers_darwin: dependency: transitive description: name: audioplayers_darwin - sha256: e507887f3ff18d8e5a10a668d7bedc28206b12e10b98347797257c6ae1019c3b + sha256: "3034e99a6df8d101da0f5082dcca0a2a99db62ab1d4ddb3277bed3f6f81afe08" url: "https://pub.dev" source: hosted - version: "6.0.0" + version: "5.0.2" audioplayers_linux: dependency: transitive description: name: audioplayers_linux - sha256: "3d3d244c90436115417f170426ce768856d8fe4dfc5ed66a049d2890acfa82f9" + sha256: "60787e73fefc4d2e0b9c02c69885402177e818e4e27ef087074cf27c02246c9e" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "3.1.0" audioplayers_platform_interface: dependency: transitive description: name: audioplayers_platform_interface - sha256: "6834dd48dfb7bc6c2404998ebdd161f79cd3774a7e6779e1348d54a3bfdcfaa5" + sha256: "365c547f1bb9e77d94dd1687903a668d8f7ac3409e48e6e6a3668a1ac2982adb" url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "6.1.0" audioplayers_web: dependency: transitive description: name: audioplayers_web - sha256: "3609bdf0e05e66a3d9750ee40b1e37f2a622c4edb796cc600b53a90a30a2ace4" + sha256: "22cd0173e54d92bd9b2c80b1204eb1eb159ece87475ab58c9788a70ec43c2a62" url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "4.1.0" audioplayers_windows: dependency: transitive description: name: audioplayers_windows - sha256: "8605762dddba992138d476f6a0c3afd9df30ac5b96039929063eceed416795c2" + sha256: "9536812c9103563644ada2ef45ae523806b0745f7a78e89d1b5fb1951de90e1a" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "3.1.0" auto_route: dependency: "direct main" description: diff --git a/mason_templates/digit_entity/hooks/lib/models.mapper.dart b/mason_templates/digit_entity/hooks/lib/models.mapper.dart index 8d504b44e..fd19a57f5 100644 --- a/mason_templates/digit_entity/hooks/lib/models.mapper.dart +++ b/mason_templates/digit_entity/hooks/lib/models.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'models.dart'; @@ -135,10 +135,8 @@ mixin ConfigModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - ConfigModelMapper.ensureInitialized() - .isValueEqual(this as ConfigModel, other)); + return ConfigModelMapper.ensureInitialized() + .equalsValue(this as ConfigModel, other); } @override @@ -356,10 +354,8 @@ mixin EnumValuesMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - EnumValuesMapper.ensureInitialized() - .isValueEqual(this as EnumValues, other)); + return EnumValuesMapper.ensureInitialized() + .equalsValue(this as EnumValues, other); } @override @@ -528,10 +524,8 @@ mixin AttributeModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - AttributeModelMapper.ensureInitialized() - .isValueEqual(this as AttributeModel, other)); + return AttributeModelMapper.ensureInitialized() + .equalsValue(this as AttributeModel, other); } @override @@ -719,10 +713,8 @@ mixin TableReferenceModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - TableReferenceModelMapper.ensureInitialized() - .isValueEqual(this as TableReferenceModel, other)); + return TableReferenceModelMapper.ensureInitialized() + .equalsValue(this as TableReferenceModel, other); } @override diff --git a/mason_templates/digit_entity/hooks/pubspec.lock b/mason_templates/digit_entity/hooks/pubspec.lock index eb6d23478..4c0f1c7ed 100644 --- a/mason_templates/digit_entity/hooks/pubspec.lock +++ b/mason_templates/digit_entity/hooks/pubspec.lock @@ -173,17 +173,17 @@ packages: dependency: "direct main" description: name: dart_mappable - sha256: "7b6d38ae95f1ae8ffa65df9a5464f14b56c2de94699a035202ca4cd3a0ba249e" + sha256: "47269caf2060533c29b823ff7fa9706502355ffcb61e7f2a374e3a0fb2f2c3f0" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "4.2.2" dart_mappable_builder: dependency: "direct dev" description: path: "../../../packages/dart_mappable_builder" relative: true source: path - version: "4.2.0" + version: "4.2.3" dart_style: dependency: transitive description: @@ -548,10 +548,10 @@ packages: dependency: transitive description: name: type_plus - sha256: "2e33cfac2e129297d5874567bdf7587502ec359881e9318551e014d91b02f84a" + sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" typed_data: dependency: transitive description: diff --git a/packages/attendance_management/lib/pages/manage_attendance.dart b/packages/attendance_management/lib/pages/manage_attendance.dart index 0d8b6f0b2..f1253bf47 100644 --- a/packages/attendance_management/lib/pages/manage_attendance.dart +++ b/packages/attendance_management/lib/pages/manage_attendance.dart @@ -10,7 +10,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '../../utils/i18_key_constants.dart' as i18; -import '../router/attendance_router.gm.dart'; +import '../router/attendance_router.gr.dart'; import '../widgets/back_navigation_help_header.dart'; import '../widgets/localized.dart'; import '../widgets/no_result_card.dart'; diff --git a/packages/attendance_management/lib/pages/mark_attendance.dart b/packages/attendance_management/lib/pages/mark_attendance.dart index 4f18cc14a..2aede000b 100644 --- a/packages/attendance_management/lib/pages/mark_attendance.dart +++ b/packages/attendance_management/lib/pages/mark_attendance.dart @@ -16,7 +16,7 @@ import 'package:location/location.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../widgets/localized.dart'; import '../blocs/attendance_individual_bloc.dart'; -import '../router/attendance_router.gm.dart'; +import '../router/attendance_router.gr.dart'; import '../widgets/back_navigation_help_header.dart'; import '../widgets/circular_button.dart'; import '../widgets/no_result_card.dart'; diff --git a/packages/attendance_management/lib/pages/session_select.dart b/packages/attendance_management/lib/pages/session_select.dart index 080d4a428..8e4caabad 100644 --- a/packages/attendance_management/lib/pages/session_select.dart +++ b/packages/attendance_management/lib/pages/session_select.dart @@ -16,7 +16,7 @@ import '../blocs/attendance_individual_bloc.dart'; import '../models/entities/attendance_log.dart'; import '../models/entities/attendance_register.dart'; import '../models/entities/enum_values.dart'; -import '../router/attendance_router.gm.dart'; +import '../router/attendance_router.gr.dart'; import '../utils/constants.dart'; import '../utils/date_util_attendance.dart'; import '../widgets/back_navigation_help_header.dart'; diff --git a/packages/attendance_management/lib/router/attendance_router.dart b/packages/attendance_management/lib/router/attendance_router.dart index f1ad9d557..1808cc202 100644 --- a/packages/attendance_management/lib/router/attendance_router.dart +++ b/packages/attendance_management/lib/router/attendance_router.dart @@ -1,15 +1,21 @@ import 'package:auto_route/auto_route.dart'; -import 'attendance_router.gm.dart'; +import 'attendance_router.gr.dart'; -@AutoRouterConfig.module() -class AttendanceRoute extends $AttendanceRoute { +@AutoRouterConfig() +class AttendanceRoute extends RootStackRouter { + @override RouteType get defaultRouteType => const RouteType.material(); + @override List routes = [ AutoRoute(page: ManageAttendanceRoute.page), - AutoRoute(page: AttendanceDateSessionSelectionRoute.page,), - AutoRoute(page: MarkAttendanceRoute.page,), + AutoRoute( + page: AttendanceDateSessionSelectionRoute.page, + ), + AutoRoute( + page: MarkAttendanceRoute.page, + ), AutoRoute(page: AttendanceAcknowledgementRoute.page), ]; } diff --git a/packages/attendance_management/lib/router/attendance_router.gm.dart b/packages/attendance_management/lib/router/attendance_router.gr.dart similarity index 98% rename from packages/attendance_management/lib/router/attendance_router.gm.dart rename to packages/attendance_management/lib/router/attendance_router.gr.dart index 8fbef1426..c51e1eb8e 100644 --- a/packages/attendance_management/lib/router/attendance_router.gm.dart +++ b/packages/attendance_management/lib/router/attendance_router.gr.dart @@ -22,7 +22,9 @@ import 'package:attendance_management/widgets/attendance_acknowledgement.dart' import 'package:auto_route/auto_route.dart' as _i5; import 'package:flutter/material.dart' as _i6; -abstract class $AttendanceRoute extends _i5.AutoRouterModule { +abstract class $AttendanceRoute extends _i5.RootStackRouter { + $AttendanceRoute({super.navigatorKey}); + @override final Map pagesMap = { AttendanceAcknowledgementRoute.name: (routeData) { diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index 1b58d7fa4..a2d955062 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -39,7 +39,6 @@ dev_dependencies: lints: ^4.0.0 json_serializable: ^6.4.0 freezed: ^2.5.2 - build_runner: ^2.4.11 bloc_test: ^9.1.0 mocktail: ^1.0.2 dart_mappable_builder: ^4.2.2 diff --git a/packages/closed_household/lib/pages/closed_household_details.dart b/packages/closed_household/lib/pages/closed_household_details.dart index d608e6ac1..669792101 100644 --- a/packages/closed_household/lib/pages/closed_household_details.dart +++ b/packages/closed_household/lib/pages/closed_household_details.dart @@ -8,7 +8,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; import '../../utils/i18_key_constants.dart' as i18; -import '../router/closed_household_router.gm.dart'; +import '../router/closed_household_router.gr.dart'; import '../utils/utils.dart'; import '../widgets/back_navigation_help_header.dart'; import '../widgets/localized.dart'; diff --git a/packages/closed_household/lib/pages/closed_household_summary.dart b/packages/closed_household/lib/pages/closed_household_summary.dart index 826af79f4..e21ef447d 100644 --- a/packages/closed_household/lib/pages/closed_household_summary.dart +++ b/packages/closed_household/lib/pages/closed_household_summary.dart @@ -1,6 +1,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:closed_household/blocs/closed_household.dart'; -import 'package:closed_household/router/closed_household_router.gm.dart'; +import 'package:closed_household/router/closed_household_router.gr.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/utils/date_utils.dart'; import 'package:digit_components/widgets/atoms/details_card.dart'; diff --git a/packages/closed_household/lib/router/closed_household_router.dart b/packages/closed_household/lib/router/closed_household_router.dart index ead0995e8..ea407c6fc 100644 --- a/packages/closed_household/lib/router/closed_household_router.dart +++ b/packages/closed_household/lib/router/closed_household_router.dart @@ -1,10 +1,9 @@ import 'package:auto_route/auto_route.dart'; -import 'closed_household_router.gm.dart'; +import 'closed_household_router.gr.dart'; - -@AutoRouterConfig.module() -class ClosedHouseholdPackageRoute extends $ClosedHouseholdPackageRoute { +@AutoRouterConfig() +class ClosedHouseholdPackageRoute extends RootStackRouter { @override RouteType get defaultRouteType => const RouteType.material(); @@ -15,8 +14,8 @@ class ClosedHouseholdPackageRoute extends $ClosedHouseholdPackageRoute { path: 'closed-household-wrapper', children: [ AutoRoute( - page: ClosedHouseholdDetailsRoute.page, - path: 'closed-household-details', + page: ClosedHouseholdDetailsRoute.page, + path: 'closed-household-details', initial: true, ), AutoRoute( @@ -26,6 +25,5 @@ class ClosedHouseholdPackageRoute extends $ClosedHouseholdPackageRoute { page: ClosedHouseholdAcknowledgementRoute.page, path: 'closed-household-acknowledgement'), ]), - ]; } diff --git a/packages/closed_household/lib/router/closed_household_router.gm.dart b/packages/closed_household/lib/router/closed_household_router.gr.dart similarity index 97% rename from packages/closed_household/lib/router/closed_household_router.gm.dart rename to packages/closed_household/lib/router/closed_household_router.gr.dart index 5cf8d0251..070f1a353 100644 --- a/packages/closed_household/lib/router/closed_household_router.gm.dart +++ b/packages/closed_household/lib/router/closed_household_router.gr.dart @@ -18,7 +18,9 @@ import 'package:closed_household/pages/closed_household_summary.dart' as _i3; import 'package:closed_household/pages/closed_household_wrapper.dart' as _i4; import 'package:flutter/material.dart' as _i6; -abstract class $ClosedHouseholdPackageRoute extends _i5.AutoRouterModule { +abstract class $ClosedHouseholdPackageRoute extends _i5.RootStackRouter { + $ClosedHouseholdPackageRoute({super.navigatorKey}); + @override final Map pagesMap = { ClosedHouseholdAcknowledgementRoute.name: (routeData) { diff --git a/packages/closed_household/lib/widgets/back_navigation_help_header.dart b/packages/closed_household/lib/widgets/back_navigation_help_header.dart index 251c8e6a3..f70e6d91f 100644 --- a/packages/closed_household/lib/widgets/back_navigation_help_header.dart +++ b/packages/closed_household/lib/widgets/back_navigation_help_header.dart @@ -39,7 +39,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { Flexible( child: TextButton.icon( style: TextButton.styleFrom( - foregroundColor: theme.colorScheme.onBackground, + foregroundColor: theme.colorScheme.surface, padding: EdgeInsets.zero, ), onPressed: () { diff --git a/packages/closed_household/lib/widgets/showcase/showcase_button.dart b/packages/closed_household/lib/widgets/showcase/showcase_button.dart index 9e7b1f968..8c42121e5 100644 --- a/packages/closed_household/lib/widgets/showcase/showcase_button.dart +++ b/packages/closed_household/lib/widgets/showcase/showcase_button.dart @@ -1,6 +1,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:closed_household/blocs/app_localization.dart'; -import 'package:closed_household/router/closed_household_router.gm.dart'; +import 'package:closed_household/router/closed_household_router.gr.dart'; import 'package:digit_components/theme/digit_theme.dart'; import 'package:digit_showcase/showcase_widget.dart'; import 'package:flutter/material.dart'; diff --git a/packages/digit_dss/lib/models/entities/chart_data.mapper.dart b/packages/digit_dss/lib/models/entities/chart_data.mapper.dart index 9a69bda16..afb59e1f5 100644 --- a/packages/digit_dss/lib/models/entities/chart_data.mapper.dart +++ b/packages/digit_dss/lib/models/entities/chart_data.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'chart_data.dart'; @@ -110,10 +110,8 @@ mixin DashboardChartDataModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - DashboardChartDataModelMapper.ensureInitialized() - .isValueEqual(this as DashboardChartDataModel, other)); + return DashboardChartDataModelMapper.ensureInitialized() + .equalsValue(this as DashboardChartDataModel, other); } @override diff --git a/packages/digit_dss/lib/models/entities/dashboard_request.mapper.dart b/packages/digit_dss/lib/models/entities/dashboard_request.mapper.dart index 078f5d311..6f79c3cd9 100644 --- a/packages/digit_dss/lib/models/entities/dashboard_request.mapper.dart +++ b/packages/digit_dss/lib/models/entities/dashboard_request.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'dashboard_request.dart'; @@ -80,10 +80,8 @@ mixin DashboardRequestModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - DashboardRequestModelMapper.ensureInitialized() - .isValueEqual(this as DashboardRequestModel, other)); + return DashboardRequestModelMapper.ensureInitialized() + .equalsValue(this as DashboardRequestModel, other); } @override @@ -242,10 +240,8 @@ mixin AggregationRequestDtoMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - AggregationRequestDtoMapper.ensureInitialized() - .isValueEqual(this as AggregationRequestDto, other)); + return AggregationRequestDtoMapper.ensureInitialized() + .equalsValue(this as AggregationRequestDto, other); } @override @@ -410,10 +406,8 @@ mixin RequestDateMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - RequestDateMapper.ensureInitialized() - .isValueEqual(this as RequestDate, other)); + return RequestDateMapper.ensureInitialized() + .equalsValue(this as RequestDate, other); } @override @@ -529,10 +523,8 @@ mixin DSSHeadersMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - DSSHeadersMapper.ensureInitialized() - .isValueEqual(this as DSSHeaders, other)); + return DSSHeadersMapper.ensureInitialized() + .equalsValue(this as DSSHeaders, other); } @override diff --git a/packages/digit_dss/lib/models/entities/dashboard_response_model.mapper.dart b/packages/digit_dss/lib/models/entities/dashboard_response_model.mapper.dart index 3d5f63a52..c116e0b23 100644 --- a/packages/digit_dss/lib/models/entities/dashboard_response_model.mapper.dart +++ b/packages/digit_dss/lib/models/entities/dashboard_response_model.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'dashboard_response_model.dart'; @@ -92,10 +92,8 @@ mixin DashboardResponseSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - DashboardResponseSearchModelMapper.ensureInitialized() - .isValueEqual(this as DashboardResponseSearchModel, other)); + return DashboardResponseSearchModelMapper.ensureInitialized() + .equalsValue(this as DashboardResponseSearchModel, other); } @override @@ -268,10 +266,8 @@ mixin DashboardResponseModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - DashboardResponseModelMapper.ensureInitialized() - .isValueEqual(this as DashboardResponseModel, other)); + return DashboardResponseModelMapper.ensureInitialized() + .equalsValue(this as DashboardResponseModel, other); } @override diff --git a/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart b/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart index ce46f6324..94fcf02e9 100644 --- a/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart +++ b/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'dss_enums.dart'; diff --git a/packages/digit_dss/lib/models/entities/insight.mapper.dart b/packages/digit_dss/lib/models/entities/insight.mapper.dart index a260a0986..83442b816 100644 --- a/packages/digit_dss/lib/models/entities/insight.mapper.dart +++ b/packages/digit_dss/lib/models/entities/insight.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'insight.dart'; @@ -99,10 +99,8 @@ mixin InsightModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - InsightModelMapper.ensureInitialized() - .isValueEqual(this as InsightModel, other)); + return InsightModelMapper.ensureInitialized() + .equalsValue(this as InsightModel, other); } @override diff --git a/packages/digit_dss/lib/models/entities/plots.mapper.dart b/packages/digit_dss/lib/models/entities/plots.mapper.dart index 7369df595..133345c7c 100644 --- a/packages/digit_dss/lib/models/entities/plots.mapper.dart +++ b/packages/digit_dss/lib/models/entities/plots.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'plots.dart'; @@ -107,10 +107,8 @@ mixin DashboardPlotModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - DashboardPlotModelMapper.ensureInitialized() - .isValueEqual(this as DashboardPlotModel, other)); + return DashboardPlotModelMapper.ensureInitialized() + .equalsValue(this as DashboardPlotModel, other); } @override diff --git a/packages/digit_dss/lib/router/dashboard_router.dart b/packages/digit_dss/lib/router/dashboard_router.dart index f20ca702e..a80a5fe72 100644 --- a/packages/digit_dss/lib/router/dashboard_router.dart +++ b/packages/digit_dss/lib/router/dashboard_router.dart @@ -1,9 +1,9 @@ import 'package:auto_route/auto_route.dart'; -import 'dashboard_router.gm.dart'; +import 'dashboard_router.gr.dart'; -@AutoRouterConfig.module() -class DashboardRoute extends $DashboardRoute { +@AutoRouterConfig() +class DashboardRoute extends RootStackRouter { @override RouteType get defaultRouteType => const RouteType.material(); diff --git a/packages/digit_dss/lib/router/dashboard_router.gm.dart b/packages/digit_dss/lib/router/dashboard_router.gr.dart similarity index 91% rename from packages/digit_dss/lib/router/dashboard_router.gm.dart rename to packages/digit_dss/lib/router/dashboard_router.gr.dart index 652ef7091..684a5e431 100644 --- a/packages/digit_dss/lib/router/dashboard_router.gm.dart +++ b/packages/digit_dss/lib/router/dashboard_router.gr.dart @@ -11,7 +11,9 @@ import 'package:auto_route/auto_route.dart' as _i2; import 'package:digit_dss/pages/dashboard/dashboard.dart' as _i1; -abstract class $DashboardRoute extends _i2.AutoRouterModule { +abstract class $DashboardRoute extends _i2.RootStackRouter { + $DashboardRoute({super.navigatorKey}); + @override final Map pagesMap = { UserDashboardRoute.name: (routeData) { diff --git a/packages/digit_scanner/example/pubspec.lock b/packages/digit_scanner/example/pubspec.lock index b74ce0a6c..5786fcee5 100644 --- a/packages/digit_scanner/example/pubspec.lock +++ b/packages/digit_scanner/example/pubspec.lock @@ -1,6 +1,30 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" + url: "https://pub.dev" + source: hosted + version: "67.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" + url: "https://pub.dev" + source: hosted + version: "6.4.1" + archive: + dependency: transitive + description: + name: archive + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d + url: "https://pub.dev" + source: hosted + version: "3.6.1" args: dependency: transitive description: @@ -21,58 +45,58 @@ packages: dependency: transitive description: name: audioplayers - sha256: c346ba5a39dc208f1bab55fc239855f573d69b0e832402114bf0b793622adc4d + sha256: c05c6147124cd63e725e861335a8b4d57300b80e6e92cea7c145c739223bbaef url: "https://pub.dev" source: hosted - version: "6.1.0" + version: "5.2.1" audioplayers_android: dependency: transitive description: name: audioplayers_android - sha256: de576b890befe27175c2f511ba8b742bec83765fa97c3ce4282bba46212f58e4 + sha256: b00e1a0e11365d88576320ec2d8c192bc21f1afb6c0e5995d1c57ae63156acb5 url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "4.0.3" audioplayers_darwin: dependency: transitive description: name: audioplayers_darwin - sha256: e507887f3ff18d8e5a10a668d7bedc28206b12e10b98347797257c6ae1019c3b + sha256: "3034e99a6df8d101da0f5082dcca0a2a99db62ab1d4ddb3277bed3f6f81afe08" url: "https://pub.dev" source: hosted - version: "6.0.0" + version: "5.0.2" audioplayers_linux: dependency: transitive description: name: audioplayers_linux - sha256: "3d3d244c90436115417f170426ce768856d8fe4dfc5ed66a049d2890acfa82f9" + sha256: "60787e73fefc4d2e0b9c02c69885402177e818e4e27ef087074cf27c02246c9e" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "3.1.0" audioplayers_platform_interface: dependency: transitive description: name: audioplayers_platform_interface - sha256: "6834dd48dfb7bc6c2404998ebdd161f79cd3774a7e6779e1348d54a3bfdcfaa5" + sha256: "365c547f1bb9e77d94dd1687903a668d8f7ac3409e48e6e6a3668a1ac2982adb" url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "6.1.0" audioplayers_web: dependency: transitive description: name: audioplayers_web - sha256: "3609bdf0e05e66a3d9750ee40b1e37f2a622c4edb796cc600b53a90a30a2ace4" + sha256: "22cd0173e54d92bd9b2c80b1204eb1eb159ece87475ab58c9788a70ec43c2a62" url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "4.1.0" audioplayers_windows: dependency: transitive description: name: audioplayers_windows - sha256: "8605762dddba992138d476f6a0c3afd9df30ac5b96039929063eceed416795c2" + sha256: "9536812c9103563644ada2ef45ae523806b0745f7a78e89d1b5fb1951de90e1a" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "3.1.0" auto_route: dependency: transitive description: @@ -97,6 +121,70 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + build: + dependency: transitive + description: + name: build + sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + build_config: + dependency: transitive + description: + name: build_config + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" + source: hosted + version: "1.1.1" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + build_runner: + dependency: transitive + description: + name: build_runner + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" + url: "https://pub.dev" + source: hosted + version: "2.4.11" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: e3c79f69a64bdfcd8a776a3c28db4eb6e3fb5356d013ae5eb2e52007706d5dbe + url: "https://pub.dev" + source: hosted + version: "7.3.1" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb + url: "https://pub.dev" + source: hosted + version: "8.9.2" camera: dependency: transitive description: @@ -133,10 +221,10 @@ packages: dependency: transitive description: name: camera_web - sha256: "595f28c89d1fb62d77c73c633193755b781c6d2e0ebcd8dc25b763b514e6ba8f" + sha256: b9235ec0a2ce949daec546f1f3d86f05c3921ed31c7d9ab6b7c03214d152fc2d url: "https://pub.dev" source: hosted - version: "0.3.5" + version: "0.3.4" characters: dependency: transitive description: @@ -145,6 +233,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" clock: dependency: transitive description: @@ -153,6 +249,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 + url: "https://pub.dev" + source: hosted + version: "4.10.0" collection: dependency: transitive description: @@ -161,14 +265,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.18.0" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" cross_file: dependency: transitive description: name: cross_file - sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" + sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e url: "https://pub.dev" source: hosted - version: "0.3.4+2" + version: "0.3.3+8" crypto: dependency: transitive description: @@ -185,13 +297,37 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" + url: "https://pub.dev" + source: hosted + version: "2.3.6" + digit_components: + dependency: transitive + description: + name: digit_components + sha256: "9cca4d9a546037080afe02b6ade82fdf01574e11f5656ad12120fd6966578616" + url: "https://pub.dev" + source: hosted + version: "1.0.1+1" digit_scanner: dependency: "direct main" description: path: ".." relative: true source: path - version: "1.0.3" + version: "1.0.3+1" + easy_stepper: + dependency: transitive + description: + name: easy_stepper + sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + url: "https://pub.dev" + source: hosted + version: "0.5.2+1" fake_async: dependency: transitive description: @@ -237,14 +373,70 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.6" + flutter_focus_watcher: + dependency: transitive + description: + name: flutter_focus_watcher + sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility: + dependency: transitive + description: + name: flutter_keyboard_visibility + sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" + url: "https://pub.dev" + source: hosted + version: "5.4.1" + flutter_keyboard_visibility_linux: + dependency: transitive + description: + name: flutter_keyboard_visibility_linux + sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_macos: + dependency: transitive + description: + name: flutter_keyboard_visibility_macos + sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_platform_interface: + dependency: transitive + description: + name: flutter_keyboard_visibility_platform_interface + sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_web: + dependency: transitive + description: + name: flutter_keyboard_visibility_web + sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_windows: + dependency: transitive + description: + name: flutter_keyboard_visibility_windows + sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 + url: "https://pub.dev" + source: hosted + version: "1.0.0" flutter_lints: dependency: "direct dev" description: name: flutter_lints - sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 + sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" url: "https://pub.dev" source: hosted - version: "2.0.3" + version: "4.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -253,6 +445,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.22" + flutter_spinkit: + dependency: transitive + description: + name: flutter_spinkit + sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 + url: "https://pub.dev" + source: hosted + version: "5.2.1" flutter_svg: dependency: transitive description: @@ -266,11 +466,27 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_typeahead: + dependency: transitive + description: + name: flutter_typeahead + sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 + url: "https://pub.dev" + source: hosted + version: "4.8.0" flutter_web_plugins: dependency: transitive description: flutter source: sdk version: "0.0.0" + fluttertoast: + dependency: transitive + description: + name: fluttertoast + sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" + url: "https://pub.dev" + source: hosted + version: "8.2.5" freezed_annotation: dependency: transitive description: @@ -279,6 +495,30 @@ packages: url: "https://pub.dev" source: hosted version: "2.4.4" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 + url: "https://pub.dev" + source: hosted + version: "4.0.0" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + google_fonts: + dependency: transitive + description: + name: google_fonts + sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + url: "https://pub.dev" + source: hosted + version: "4.0.5" google_mlkit_barcode_scanning: dependency: transitive description: @@ -295,6 +535,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.1" + graphs: + dependency: transitive + description: + name: graphs + sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" + url: "https://pub.dev" + source: hosted + version: "2.3.2" gs1_barcode_parser: dependency: transitive description: @@ -303,14 +551,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" + horizontal_data_table: + dependency: transitive + description: + name: horizontal_data_table + sha256: c8ab5256bbced698a729f3e0ff2cb0e8e97416cdbb082860370eaf883badf722 + url: "https://pub.dev" + source: hosted + version: "4.3.1" http: dependency: transitive description: name: http - sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + url: "https://pub.dev" + source: hosted + version: "1.2.0" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" url: "https://pub.dev" source: hosted - version: "1.2.2" + version: "3.2.1" http_parser: dependency: transitive description: @@ -319,6 +583,30 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + intl: + dependency: transitive + description: + name: intl + sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + url: "https://pub.dev" + source: hosted + version: "0.18.1" + io: + dependency: transitive + description: + name: io + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + js: + dependency: transitive + description: + name: js + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + url: "https://pub.dev" + source: hosted + version: "0.6.7" json_annotation: dependency: transitive description: @@ -355,10 +643,50 @@ packages: dependency: transitive description: name: lints - sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "4.0.0" + location: + dependency: transitive + description: + name: location + sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + url: "https://pub.dev" + source: hosted + version: "5.0.3" + location_platform_interface: + dependency: transitive + description: + name: location_platform_interface + sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + url: "https://pub.dev" + source: hosted + version: "3.1.2" + location_web: + dependency: transitive + description: + name: location_web + sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + url: "https://pub.dev" + source: hosted + version: "4.2.0" + logging: + dependency: transitive + description: + name: logging + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + lottie: + dependency: transitive + description: + name: lottie + sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + url: "https://pub.dev" + source: hosted + version: "2.7.0" matcher: dependency: transitive description: @@ -383,6 +711,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.12.0" + mime: + dependency: transitive + description: + name: mime + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" + url: "https://pub.dev" + source: hosted + version: "1.0.6" nested: dependency: transitive description: @@ -399,6 +735,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + package_info_plus: + dependency: transitive + description: + name: package_info_plus + sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + url: "https://pub.dev" + source: hosted + version: "5.0.1" + package_info_plus_platform_interface: + dependency: transitive + description: + name: package_info_plus_platform_interface + sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + url: "https://pub.dev" + source: hosted + version: "2.0.1" path: dependency: transitive description: @@ -487,6 +847,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" + pointer_interceptor: + dependency: transitive + description: + name: pointer_interceptor + sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 + url: "https://pub.dev" + source: hosted + version: "0.9.3+7" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" provider: dependency: transitive description: @@ -495,6 +871,62 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.2" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 + url: "https://pub.dev" + source: hosted + version: "1.3.0" + reactive_flutter_typeahead: + dependency: transitive + description: + name: reactive_flutter_typeahead + sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 + url: "https://pub.dev" + source: hosted + version: "0.8.1" + reactive_forms: + dependency: transitive + description: + name: reactive_forms + sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + url: "https://pub.dev" + source: hosted + version: "14.3.0" + remove_emoji_input_formatter: + dependency: transitive + description: + name: remove_emoji_input_formatter + sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" + url: "https://pub.dev" + source: hosted + version: "0.0.1+1" + shelf: + dependency: transitive + description: + name: shelf + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 + url: "https://pub.dev" + source: hosted + version: "1.4.1" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611" + url: "https://pub.dev" + source: hosted + version: "2.0.0" sky_engine: dependency: transitive description: flutter @@ -572,6 +1004,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.0" + timing: + dependency: transitive + description: + name: timing + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" + source: hosted + version: "1.0.1" typed_data: dependency: transitive description: @@ -628,14 +1068,38 @@ packages: url: "https://pub.dev" source: hosted version: "14.2.1" + watcher: + dependency: transitive + description: + name: watcher + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" web: dependency: transitive description: name: web - sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062 + sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05" url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "0.4.2" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: "939ab60734a4f8fa95feacb55804fa278de28bdeef38e616dc08e44a84adea23" + url: "https://pub.dev" + source: hosted + version: "2.4.3" + win32: + dependency: transitive + description: + name: win32 + sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a" + url: "https://pub.dev" + source: hosted + version: "5.5.4" xdg_directories: dependency: transitive description: @@ -652,6 +1116,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.5.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" sdks: dart: ">=3.4.0 <3.9.0" flutter: ">=3.22.0" diff --git a/packages/digit_scanner/example/pubspec.yaml b/packages/digit_scanner/example/pubspec.yaml index 4cecc309b..24b000784 100644 --- a/packages/digit_scanner/example/pubspec.yaml +++ b/packages/digit_scanner/example/pubspec.yaml @@ -37,7 +37,7 @@ dependencies: cupertino_icons: ^1.0.2 flutter_bloc: ^8.1.1 digit_scanner: - path: ../ + path: ../../digit_scanner dev_dependencies: flutter_test: @@ -48,7 +48,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^2.0.0 + flutter_lints: ^4.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/packages/digit_scanner/lib/router/digit_scanner_router.dart b/packages/digit_scanner/lib/router/digit_scanner_router.dart index fe16085e0..2ca98ba8a 100644 --- a/packages/digit_scanner/lib/router/digit_scanner_router.dart +++ b/packages/digit_scanner/lib/router/digit_scanner_router.dart @@ -1,8 +1,8 @@ import 'package:auto_route/auto_route.dart'; -import 'digit_scanner_router.gm.dart'; +import 'digit_scanner_router.gr.dart'; -@AutoRouterConfig.module() +@AutoRouterConfig() class DigitScannerPackageRoute extends $DigitScannerPackageRoute { RouteType get defaultRouteType => const RouteType.material(); diff --git a/packages/digit_scanner/lib/router/digit_scanner_router.gm.dart b/packages/digit_scanner/lib/router/digit_scanner_router.gr.dart similarity index 95% rename from packages/digit_scanner/lib/router/digit_scanner_router.gm.dart rename to packages/digit_scanner/lib/router/digit_scanner_router.gr.dart index 23e1bc4ea..dc322c44c 100644 --- a/packages/digit_scanner/lib/router/digit_scanner_router.gm.dart +++ b/packages/digit_scanner/lib/router/digit_scanner_router.gr.dart @@ -13,7 +13,9 @@ import 'package:digit_scanner/blocs/app_localization.dart' as _i4; import 'package:digit_scanner/pages/qr_scanner.dart' as _i1; import 'package:flutter/material.dart' as _i3; -abstract class $DigitScannerPackageRoute extends _i2.AutoRouterModule { +abstract class $DigitScannerPackageRoute extends _i2.RootStackRouter { + $DigitScannerPackageRoute({super.navigatorKey}); + @override final Map pagesMap = { DigitScannerRoute.name: (routeData) { diff --git a/packages/digit_scanner/pubspec.lock b/packages/digit_scanner/pubspec.lock index 76dc325ac..530581a83 100644 --- a/packages/digit_scanner/pubspec.lock +++ b/packages/digit_scanner/pubspec.lock @@ -45,74 +45,74 @@ packages: dependency: "direct main" description: name: audioplayers - sha256: c346ba5a39dc208f1bab55fc239855f573d69b0e832402114bf0b793622adc4d + sha256: c05c6147124cd63e725e861335a8b4d57300b80e6e92cea7c145c739223bbaef url: "https://pub.dev" source: hosted - version: "6.1.0" + version: "5.2.1" audioplayers_android: dependency: transitive description: name: audioplayers_android - sha256: de576b890befe27175c2f511ba8b742bec83765fa97c3ce4282bba46212f58e4 + sha256: b00e1a0e11365d88576320ec2d8c192bc21f1afb6c0e5995d1c57ae63156acb5 url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "4.0.3" audioplayers_darwin: dependency: transitive description: name: audioplayers_darwin - sha256: e507887f3ff18d8e5a10a668d7bedc28206b12e10b98347797257c6ae1019c3b + sha256: "3034e99a6df8d101da0f5082dcca0a2a99db62ab1d4ddb3277bed3f6f81afe08" url: "https://pub.dev" source: hosted - version: "6.0.0" + version: "5.0.2" audioplayers_linux: dependency: transitive description: name: audioplayers_linux - sha256: "3d3d244c90436115417f170426ce768856d8fe4dfc5ed66a049d2890acfa82f9" + sha256: "60787e73fefc4d2e0b9c02c69885402177e818e4e27ef087074cf27c02246c9e" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "3.1.0" audioplayers_platform_interface: dependency: transitive description: name: audioplayers_platform_interface - sha256: "6834dd48dfb7bc6c2404998ebdd161f79cd3774a7e6779e1348d54a3bfdcfaa5" + sha256: "365c547f1bb9e77d94dd1687903a668d8f7ac3409e48e6e6a3668a1ac2982adb" url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "6.1.0" audioplayers_web: dependency: transitive description: name: audioplayers_web - sha256: "3609bdf0e05e66a3d9750ee40b1e37f2a622c4edb796cc600b53a90a30a2ace4" + sha256: "22cd0173e54d92bd9b2c80b1204eb1eb159ece87475ab58c9788a70ec43c2a62" url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "4.1.0" audioplayers_windows: dependency: transitive description: name: audioplayers_windows - sha256: "8605762dddba992138d476f6a0c3afd9df30ac5b96039929063eceed416795c2" + sha256: "9536812c9103563644ada2ef45ae523806b0745f7a78e89d1b5fb1951de90e1a" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "3.1.0" auto_route: dependency: "direct main" description: name: auto_route - sha256: a9001a90539ca3effc168f7e1029a5885c7326b9032c09ac895e303c1d137704 + sha256: "8de4a280ce7861ef24a6baa14c2b02b77a8c31b4a4c4f12d7b608678cc657c7f" url: "https://pub.dev" source: hosted - version: "8.3.0" + version: "8.1.4" auto_route_generator: dependency: "direct dev" description: name: auto_route_generator - sha256: a21d7a936c917488653c972f62d884d8adcf8c5d37acc7cd24da33cf784546c0 + sha256: ba28133d3a3bf0a66772bcc98dade5843753cd9f1a8fb4802b842895515b67d3 url: "https://pub.dev" source: hosted - version: "8.1.0" + version: "8.0.0" bloc: dependency: transitive description: @@ -237,10 +237,10 @@ packages: dependency: transitive description: name: camera_web - sha256: "595f28c89d1fb62d77c73c633193755b781c6d2e0ebcd8dc25b763b514e6ba8f" + sha256: b9235ec0a2ce949daec546f1f3d86f05c3921ed31c7d9ab6b7c03214d152fc2d url: "https://pub.dev" source: hosted - version: "0.3.5" + version: "0.3.4" characters: dependency: transitive description: @@ -321,14 +321,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_mappable: - dependency: transitive - description: - name: dart_mappable - sha256: "47269caf2060533c29b823ff7fa9706502355ffcb61e7f2a374e3a0fb2f2c3f0" - url: "https://pub.dev" - source: hosted - version: "4.2.2" dart_style: dependency: transitive description: @@ -352,37 +344,6 @@ packages: relative: true source: path version: "1.0.1+1" - digit_data_model: - dependency: "direct overridden" - description: - path: "../digit_data_model" - relative: true - source: path - version: "1.0.3+1" - dio: - dependency: transitive - description: - name: dio - sha256: "0dfb6b6a1979dac1c1245e17cef824d7b452ea29bd33d3467269f9bef3715fb0" - url: "https://pub.dev" - source: hosted - version: "5.6.0" - dio_web_adapter: - dependency: transitive - description: - name: dio_web_adapter - sha256: "33259a9276d6cea88774a0000cfae0d861003497755969c92faa223108620dc8" - url: "https://pub.dev" - source: hosted - version: "2.0.0" - drift: - dependency: transitive - description: - name: drift - sha256: "4e0ffee40d23f0b809e6cff1ad202886f51d629649073ed42d9cd1d194ea943e" - url: "https://pub.dev" - source: hosted - version: "2.19.1+1" easy_stepper: dependency: transitive description: @@ -675,22 +636,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" - isar: - dependency: transitive - description: - name: isar - sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - isar_flutter_libs: - dependency: transitive - description: - name: isar_flutter_libs - sha256: bc6768cc4b9c61aabff77152e7f33b4b17d2fc93134f7af1c3dd51500fe8d5e8 - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" js: dependency: transitive description: @@ -767,10 +712,10 @@ packages: dependency: transitive description: name: location_web - sha256: "49dda13d415c4603c5775a33fb22f575e0aa3f0ec2916644ddcd722db31ee884" + sha256: "15ad7b4c8a9f55abee513373755e093a40c04d7e24fc1b4f89676fe99523d034" url: "https://pub.dev" source: hosted - version: "5.0.2" + version: "5.0.1" logging: dependency: transitive description: @@ -1019,14 +964,6 @@ packages: url: "https://pub.dev" source: hosted version: "17.0.1" - recase: - dependency: transitive - description: - name: recase - sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 - url: "https://pub.dev" - source: hosted - version: "4.1.0" remove_emoji_input_formatter: dependency: transitive description: @@ -1120,22 +1057,6 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.0" - sqlite3: - dependency: transitive - description: - name: sqlite3 - sha256: fde692580bee3379374af1f624eb3e113ab2865ecb161dbe2d8ac2de9735dbdb - url: "https://pub.dev" - source: hosted - version: "2.4.5" - sqlite3_flutter_libs: - dependency: transitive - description: - name: sqlite3_flutter_libs - sha256: "62bbb4073edbcdf53f40c80775f33eea01d301b7b81417e5b3fb7395416258c1" - url: "https://pub.dev" - source: hosted - version: "0.5.24" stack_trace: dependency: transitive description: @@ -1216,14 +1137,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" - type_plus: - dependency: transitive - description: - name: type_plus - sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 - url: "https://pub.dev" - source: hosted - version: "2.1.1" typed_data: dependency: transitive description: @@ -1292,18 +1205,18 @@ packages: dependency: transitive description: name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062 url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "1.0.0" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: "58c6666b342a38816b2e7e50ed0f1e261959630becd4c879c4f26bfa14aa5a42" + sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b url: "https://pub.dev" source: hosted - version: "2.4.5" + version: "2.4.0" webkit_inspection_protocol: dependency: transitive description: diff --git a/packages/digit_scanner/pubspec.yaml b/packages/digit_scanner/pubspec.yaml index 6c91e4491..e26f3b60e 100644 --- a/packages/digit_scanner/pubspec.yaml +++ b/packages/digit_scanner/pubspec.yaml @@ -43,7 +43,7 @@ dependencies: freezed_annotation: ^2.1.0 overlay_builder: ^1.1.0 flutter_svg: ^2.0.8 - audioplayers: ^6.1.0 + audioplayers: ^5.2.1 auto_route: ^8.1.3 path_provider: ^2.1.3 path: ^1.9.0 @@ -73,6 +73,5 @@ dev_dependencies: flutter: uses-material-design: true assets: - - ./ - assets/audio/add.wav - assets/audio/buzzer.wav \ No newline at end of file diff --git a/packages/inventory_management/lib/models/entities/inventory_enums.mapper.dart b/packages/inventory_management/lib/models/entities/inventory_enums.mapper.dart index 30e88ba7d..429ff4cd5 100644 --- a/packages/inventory_management/lib/models/entities/inventory_enums.mapper.dart +++ b/packages/inventory_management/lib/models/entities/inventory_enums.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'inventory_enums.dart'; diff --git a/packages/inventory_management/lib/pages/manage_stocks.dart b/packages/inventory_management/lib/pages/manage_stocks.dart index 8730c8634..4c92e4172 100644 --- a/packages/inventory_management/lib/pages/manage_stocks.dart +++ b/packages/inventory_management/lib/pages/manage_stocks.dart @@ -1,7 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; import 'package:flutter/material.dart'; -import 'package:inventory_management/router/inventory_router.gm.dart'; +import 'package:inventory_management/router/inventory_router.gr.dart'; import '../../../utils/i18_key_constants.dart' as i18; import '../../widgets/localized.dart'; diff --git a/packages/inventory_management/lib/pages/record_stock/stock_details.dart b/packages/inventory_management/lib/pages/record_stock/stock_details.dart index 8e9599111..22db48887 100644 --- a/packages/inventory_management/lib/pages/record_stock/stock_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/stock_details.dart @@ -9,7 +9,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:gs1_barcode_parser/gs1_barcode_parser.dart'; import 'package:inventory_management/inventory_management.dart'; -import 'package:inventory_management/router/inventory_router.gm.dart'; +import 'package:inventory_management/router/inventory_router.gr.dart'; import 'package:inventory_management/utils/extensions/extensions.dart'; import 'package:reactive_forms/reactive_forms.dart'; diff --git a/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart b/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart index de24d5850..b075840c3 100644 --- a/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart @@ -6,7 +6,7 @@ import 'package:digit_scanner/blocs/scanner.dart'; import 'package:digit_scanner/pages/qr_scanner.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:inventory_management/router/inventory_router.gm.dart'; +import 'package:inventory_management/router/inventory_router.gr.dart'; import 'package:reactive_forms/reactive_forms.dart'; import '../../../utils/i18_key_constants.dart' as i18; diff --git a/packages/inventory_management/lib/pages/reports/report_details.dart b/packages/inventory_management/lib/pages/reports/report_details.dart index 64768051a..73a6566e2 100644 --- a/packages/inventory_management/lib/pages/reports/report_details.dart +++ b/packages/inventory_management/lib/pages/reports/report_details.dart @@ -4,7 +4,7 @@ import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:inventory_management/router/inventory_router.gm.dart'; +import 'package:inventory_management/router/inventory_router.gr.dart'; import 'package:inventory_management/utils/extensions/extensions.dart'; import 'package:reactive_forms/reactive_forms.dart'; diff --git a/packages/inventory_management/lib/pages/reports/report_selection.dart b/packages/inventory_management/lib/pages/reports/report_selection.dart index 5f7cfd145..b49119513 100644 --- a/packages/inventory_management/lib/pages/reports/report_selection.dart +++ b/packages/inventory_management/lib/pages/reports/report_selection.dart @@ -1,7 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; import 'package:flutter/material.dart'; -import 'package:inventory_management/router/inventory_router.gm.dart'; +import 'package:inventory_management/router/inventory_router.gr.dart'; import '../../../utils/i18_key_constants.dart' as i18; import '../../../widgets/localized.dart'; diff --git a/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart b/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart index a6774a996..da5781747 100644 --- a/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart +++ b/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart @@ -6,7 +6,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:intl/intl.dart'; import 'package:inventory_management/inventory_management.dart'; -import 'package:inventory_management/router/inventory_router.gm.dart'; +import 'package:inventory_management/router/inventory_router.gr.dart'; import 'package:inventory_management/utils/extensions/extensions.dart'; import 'package:reactive_forms/reactive_forms.dart'; diff --git a/packages/inventory_management/lib/router/inventory_router.dart b/packages/inventory_management/lib/router/inventory_router.dart index e333f5c14..ca00e1225 100644 --- a/packages/inventory_management/lib/router/inventory_router.dart +++ b/packages/inventory_management/lib/router/inventory_router.dart @@ -1,11 +1,13 @@ import 'package:auto_route/auto_route.dart'; -import 'inventory_router.gm.dart'; +import 'inventory_router.gr.dart'; -@AutoRouterConfig.module() -class InventoryRoute extends $InventoryRoute { +@AutoRouterConfig() +class InventoryRoute extends RootStackRouter { + @override RouteType get defaultRouteType => const RouteType.material(); + @override List routes = [ AutoRoute( page: ManageStocksRoute.page, diff --git a/packages/inventory_management/lib/router/inventory_router.gm.dart b/packages/inventory_management/lib/router/inventory_router.gr.dart similarity index 99% rename from packages/inventory_management/lib/router/inventory_router.gm.dart rename to packages/inventory_management/lib/router/inventory_router.gr.dart index e67fda3ef..574085615 100644 --- a/packages/inventory_management/lib/router/inventory_router.gm.dart +++ b/packages/inventory_management/lib/router/inventory_router.gr.dart @@ -29,7 +29,9 @@ import 'package:inventory_management/pages/reports/report_selection.dart' import 'package:inventory_management/pages/stock_reconciliation/stock_reconciliation.dart' as _i8; -abstract class $InventoryRoute extends _i10.AutoRouterModule { +abstract class $InventoryRoute extends _i10.RootStackRouter { + $InventoryRoute({super.navigatorKey}); + @override final Map pagesMap = { InventoryAcknowledgementRoute.name: (routeData) { diff --git a/packages/inventory_management/lib/utils/utils.dart b/packages/inventory_management/lib/utils/utils.dart index acedaae63..ffc04f933 100644 --- a/packages/inventory_management/lib/utils/utils.dart +++ b/packages/inventory_management/lib/utils/utils.dart @@ -1,5 +1,6 @@ // Importing necessary packages and modules import 'package:digit_data_model/data_model.dart'; +import 'package:reactive_forms/reactive_forms.dart'; import '../models/entities/inventory_transport_type.dart'; diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index 840a16d9b..f60b74ba8 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -61,58 +61,58 @@ packages: dependency: transitive description: name: audioplayers - sha256: c346ba5a39dc208f1bab55fc239855f573d69b0e832402114bf0b793622adc4d + sha256: c05c6147124cd63e725e861335a8b4d57300b80e6e92cea7c145c739223bbaef url: "https://pub.dev" source: hosted - version: "6.1.0" + version: "5.2.1" audioplayers_android: dependency: transitive description: name: audioplayers_android - sha256: de576b890befe27175c2f511ba8b742bec83765fa97c3ce4282bba46212f58e4 + sha256: b00e1a0e11365d88576320ec2d8c192bc21f1afb6c0e5995d1c57ae63156acb5 url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "4.0.3" audioplayers_darwin: dependency: transitive description: name: audioplayers_darwin - sha256: e507887f3ff18d8e5a10a668d7bedc28206b12e10b98347797257c6ae1019c3b + sha256: "3034e99a6df8d101da0f5082dcca0a2a99db62ab1d4ddb3277bed3f6f81afe08" url: "https://pub.dev" source: hosted - version: "6.0.0" + version: "5.0.2" audioplayers_linux: dependency: transitive description: name: audioplayers_linux - sha256: "3d3d244c90436115417f170426ce768856d8fe4dfc5ed66a049d2890acfa82f9" + sha256: "60787e73fefc4d2e0b9c02c69885402177e818e4e27ef087074cf27c02246c9e" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "3.1.0" audioplayers_platform_interface: dependency: transitive description: name: audioplayers_platform_interface - sha256: "6834dd48dfb7bc6c2404998ebdd161f79cd3774a7e6779e1348d54a3bfdcfaa5" + sha256: "365c547f1bb9e77d94dd1687903a668d8f7ac3409e48e6e6a3668a1ac2982adb" url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "6.1.0" audioplayers_web: dependency: transitive description: name: audioplayers_web - sha256: "3609bdf0e05e66a3d9750ee40b1e37f2a622c4edb796cc600b53a90a30a2ace4" + sha256: "22cd0173e54d92bd9b2c80b1204eb1eb159ece87475ab58c9788a70ec43c2a62" url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "4.1.0" audioplayers_windows: dependency: transitive description: name: audioplayers_windows - sha256: "8605762dddba992138d476f6a0c3afd9df30ac5b96039929063eceed416795c2" + sha256: "9536812c9103563644ada2ef45ae523806b0745f7a78e89d1b5fb1951de90e1a" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "3.1.0" auto_route: dependency: "direct main" description: diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart index 0f2bb4a98..875a87095 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart @@ -7,7 +7,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:referral_reconciliation/models/entities/referral_recon_enums.dart'; -import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart'; +import 'package:referral_reconciliation/router/referral_reconciliation_router.gr.dart'; import 'package:referral_reconciliation/utils/constants.dart'; import '../../../utils/i18_key_constants.dart' as i18; diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart index 5a5303e09..ec8f2a129 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart @@ -8,7 +8,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:group_radio_button/group_radio_button.dart'; -import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart'; +import 'package:referral_reconciliation/router/referral_reconciliation_router.gr.dart'; import 'package:referral_reconciliation/utils/constants.dart'; import '../../blocs/referral_recon_service_definition.dart'; diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart index 26d76e96a..ca8c50287 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart @@ -8,7 +8,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:referral_reconciliation/models/entities/referral_recon_enums.dart'; -import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart'; +import 'package:referral_reconciliation/router/referral_reconciliation_router.gr.dart'; import 'package:referral_reconciliation/utils/extensions/extensions.dart'; import '../../../utils/i18_key_constants.dart' as i18; diff --git a/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart b/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart index 51b1f0c13..51920bf92 100644 --- a/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart +++ b/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart @@ -2,7 +2,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_scanner/blocs/scanner.dart'; -import 'package:digit_scanner/router/digit_scanner_router.gm.dart'; +import 'package:digit_scanner/router/digit_scanner_router.gr.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart'; @@ -10,7 +10,7 @@ import 'package:referral_reconciliation/utils/extensions/extensions.dart'; import '../blocs/search_referral_reconciliations.dart'; import '../models/entities/hf_referral.dart'; -import '../router/referral_reconciliation_router.gm.dart'; +import '../router/referral_reconciliation_router.gr.dart'; import '../utils/i18_key_constants.dart' as i18; import '../utils/utils.dart'; import '../widgets/back_navigation_help_header.dart'; diff --git a/packages/referral_reconciliation/lib/router/referral_reconciliation_router.dart b/packages/referral_reconciliation/lib/router/referral_reconciliation_router.dart index e382a5ca0..7770b29c3 100644 --- a/packages/referral_reconciliation/lib/router/referral_reconciliation_router.dart +++ b/packages/referral_reconciliation/lib/router/referral_reconciliation_router.dart @@ -1,11 +1,13 @@ import 'package:auto_route/auto_route.dart'; -import 'referral_reconciliation_router.gm.dart'; +import 'referral_reconciliation_router.gr.dart'; -@AutoRouterConfig.module() -class ReferralReconciliationRoute extends $ReferralReconciliationRoute { +@AutoRouterConfig() +class ReferralReconciliationRoute extends RootStackRouter { + @override RouteType get defaultRouteType => const RouteType.material(); + @override List routes = [ AutoRoute( page: SearchReferralReconciliationsRoute.page, diff --git a/packages/referral_reconciliation/lib/router/referral_reconciliation_router.gm.dart b/packages/referral_reconciliation/lib/router/referral_reconciliation_router.gr.dart similarity index 99% rename from packages/referral_reconciliation/lib/router/referral_reconciliation_router.gm.dart rename to packages/referral_reconciliation/lib/router/referral_reconciliation_router.gr.dart index 6bbf820ab..2845bd15e 100644 --- a/packages/referral_reconciliation/lib/router/referral_reconciliation_router.gm.dart +++ b/packages/referral_reconciliation/lib/router/referral_reconciliation_router.gr.dart @@ -30,7 +30,9 @@ import 'package:referral_reconciliation/pages/project_facility/project_facility_ import 'package:referral_reconciliation/pages/search_referral_reconciliations.dart' as _i8; -abstract class $ReferralReconciliationRoute extends _i9.AutoRouterModule { +abstract class $ReferralReconciliationRoute extends _i9.RootStackRouter { + $ReferralReconciliationRoute({super.navigatorKey}); + @override final Map pagesMap = { HFCreateReferralWrapperRoute.name: (routeData) { diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index 5773d586b..59f8cc243 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -61,58 +61,58 @@ packages: dependency: transitive description: name: audioplayers - sha256: c346ba5a39dc208f1bab55fc239855f573d69b0e832402114bf0b793622adc4d + sha256: c05c6147124cd63e725e861335a8b4d57300b80e6e92cea7c145c739223bbaef url: "https://pub.dev" source: hosted - version: "6.1.0" + version: "5.2.1" audioplayers_android: dependency: transitive description: name: audioplayers_android - sha256: de576b890befe27175c2f511ba8b742bec83765fa97c3ce4282bba46212f58e4 + sha256: b00e1a0e11365d88576320ec2d8c192bc21f1afb6c0e5995d1c57ae63156acb5 url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "4.0.3" audioplayers_darwin: dependency: transitive description: name: audioplayers_darwin - sha256: e507887f3ff18d8e5a10a668d7bedc28206b12e10b98347797257c6ae1019c3b + sha256: "3034e99a6df8d101da0f5082dcca0a2a99db62ab1d4ddb3277bed3f6f81afe08" url: "https://pub.dev" source: hosted - version: "6.0.0" + version: "5.0.2" audioplayers_linux: dependency: transitive description: name: audioplayers_linux - sha256: "3d3d244c90436115417f170426ce768856d8fe4dfc5ed66a049d2890acfa82f9" + sha256: "60787e73fefc4d2e0b9c02c69885402177e818e4e27ef087074cf27c02246c9e" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "3.1.0" audioplayers_platform_interface: dependency: transitive description: name: audioplayers_platform_interface - sha256: "6834dd48dfb7bc6c2404998ebdd161f79cd3774a7e6779e1348d54a3bfdcfaa5" + sha256: "365c547f1bb9e77d94dd1687903a668d8f7ac3409e48e6e6a3668a1ac2982adb" url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "6.1.0" audioplayers_web: dependency: transitive description: name: audioplayers_web - sha256: "3609bdf0e05e66a3d9750ee40b1e37f2a622c4edb796cc600b53a90a30a2ace4" + sha256: "22cd0173e54d92bd9b2c80b1204eb1eb159ece87475ab58c9788a70ec43c2a62" url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "4.1.0" audioplayers_windows: dependency: transitive description: name: audioplayers_windows - sha256: "8605762dddba992138d476f6a0c3afd9df30ac5b96039929063eceed416795c2" + sha256: "9536812c9103563644ada2ef45ae523806b0745f7a78e89d1b5fb1951de90e1a" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "3.1.0" auto_route: dependency: "direct main" description: @@ -186,7 +186,7 @@ packages: source: hosted version: "2.4.2" build_runner: - dependency: "direct dev" + dependency: "direct main" description: name: build_runner sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" diff --git a/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart b/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart index 332d43054..20c3765b3 100644 --- a/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart +++ b/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart @@ -329,7 +329,7 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { if (projectBeneficiariesList.isNotEmpty) { if (taskList.isEmpty) { taskList = - await fetchTaskbyProjectBeneficiary(projectBeneficiariesList); + await fetchTaskByProjectBeneficiary(projectBeneficiariesList); } sideEffectsList = await sideEffectDataRepository.search(SideEffectSearchModel( diff --git a/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart b/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart index 696df872e..dc95e0659 100644 --- a/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart +++ b/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart @@ -326,7 +326,7 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { if (projectBeneficiariesList.isNotEmpty) { if (taskList.isEmpty) { taskList = - await fetchTaskbyProjectBeneficiary(projectBeneficiariesList); + await fetchTaskByProjectBeneficiary(projectBeneficiariesList); } sideEffectsList = await sideEffectDataRepository.search(SideEffectSearchModel( diff --git a/packages/registration_delivery/lib/models/entities/registration_delivery_enums.mapper.dart b/packages/registration_delivery/lib/models/entities/registration_delivery_enums.mapper.dart index 96206f505..442d8d348 100644 --- a/packages/registration_delivery/lib/models/entities/registration_delivery_enums.mapper.dart +++ b/packages/registration_delivery/lib/models/entities/registration_delivery_enums.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'registration_delivery_enums.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart index 8a1980d7a..ba5347392 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart @@ -3,7 +3,6 @@ import 'dart:math'; import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/utils/date_utils.dart'; -import 'package:digit_components/widgets/atoms/digit_toaster.dart'; import 'package:digit_components/widgets/atoms/selection_card.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; @@ -12,7 +11,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:registration_delivery/models/entities/registration_delivery_enums.dart'; import 'package:registration_delivery/utils/constants.dart'; -import '../../router/registration_delivery_router.gm.dart'; +import '../../router/registration_delivery_router.gr.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart index e0543da70..4dd644975 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart @@ -13,7 +13,7 @@ import 'package:registration_delivery/pages/beneficiary/widgets/past_delivery.da import '../../blocs/delivery_intervention/deliver_intervention.dart'; import '../../blocs/household_overview/household_overview.dart'; import '../../models/entities/additional_fields_type.dart'; -import '../../router/registration_delivery_router.gm.dart'; +import '../../router/registration_delivery_router.gr.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart index a8f8f6bd6..edcf6340b 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart @@ -11,7 +11,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:registration_delivery/models/entities/deliver_strategy_type.dart'; import 'package:registration_delivery/registration_delivery.dart'; -import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; +import 'package:registration_delivery/router/registration_delivery_router.gr.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; import 'package:registration_delivery/utils/utils.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart index 3d06173d8..268f64139 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart @@ -9,7 +9,7 @@ import 'package:registration_delivery/blocs/delivery_intervention/deliver_interv import 'package:registration_delivery/blocs/household_overview/household_overview.dart'; import 'package:registration_delivery/models/entities/additional_fields_type.dart'; import 'package:registration_delivery/models/entities/status.dart'; -import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; +import 'package:registration_delivery/router/registration_delivery_router.gr.dart'; import 'package:registration_delivery/utils/constants.dart'; import 'package:registration_delivery/utils/utils.dart'; import 'package:registration_delivery/widgets/back_navigation_help_header.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart b/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart index 74cb1f27a..85a447b59 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart @@ -22,7 +22,7 @@ import '../../models/entities/additional_fields_type.dart'; import '../../models/entities/status.dart'; import '../../models/entities/task.dart'; import '../../models/entities/task_resource.dart'; -import '../../router/registration_delivery_router.gm.dart'; +import '../../router/registration_delivery_router.gr.dart'; import '../../utils/constants.dart'; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index 61ca961b9..951a465f5 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -14,7 +14,7 @@ import '../../blocs/search_households/search_households.dart'; import '../../models/entities/household.dart'; import '../../models/entities/registration_delivery_enums.dart'; import '../../models/entities/status.dart'; -import '../../router/registration_delivery_router.gm.dart'; +import '../../router/registration_delivery_router.gr.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/action_card/action_card.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart b/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart index 16b58bd2a..d8b027b33 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart @@ -14,7 +14,7 @@ import '../../blocs/household_overview/household_overview.dart'; import '../../models/entities/additional_fields_type.dart'; import '../../models/entities/status.dart'; import '../../models/entities/task.dart'; -import '../../router/registration_delivery_router.gm.dart'; +import '../../router/registration_delivery_router.gr.dart'; import '../../utils/constants.dart'; import '../../widgets/back_navigation_help_header.dart'; import '../../widgets/localized.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart b/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart index 256fb74ef..793941c5a 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart @@ -11,7 +11,7 @@ import '../../blocs/household_overview/household_overview.dart'; import '../../blocs/referral_management/referral_management.dart'; import '../../models/entities/additional_fields_type.dart'; import '../../models/entities/referral.dart'; -import '../../router/registration_delivery_router.gm.dart'; +import '../../router/registration_delivery_router.gr.dart'; import '../../utils/constants.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart index 033d184ac..9b8c22a4b 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart @@ -7,7 +7,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:registration_delivery/models/entities/additional_fields_type.dart'; import 'package:registration_delivery/registration_delivery.dart'; -import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; +import 'package:registration_delivery/router/registration_delivery_router.gr.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; import '../../models/entities/status.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart b/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart index b09067fe2..2c49a7b51 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart @@ -11,7 +11,7 @@ import '../../blocs/household_overview/household_overview.dart'; import '../../blocs/side_effects/side_effects.dart'; import '../../models/entities/side_effect.dart'; import '../../models/entities/task.dart'; -import '../../router/registration_delivery_router.gm.dart'; +import '../../router/registration_delivery_router.gr.dart'; import '../../utils/constants.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart index 8ff5bcfc5..27478929b 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart @@ -4,7 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:registration_delivery/registration_delivery.dart'; -import '../../../router/registration_delivery_router.gm.dart'; +import '../../../router/registration_delivery_router.gr.dart'; import '../../../utils/i18_key_constants.dart' as i18; import '../../../widgets/localized.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart index e1b7e02a0..1fc24b262 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart @@ -4,7 +4,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; import 'package:flutter/material.dart'; -import '../../../router/registration_delivery_router.gm.dart'; +import '../../../router/registration_delivery_router.gr.dart'; import '../../../widgets/localized.dart'; import '../../../utils/i18_key_constants.dart' as i18; diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart index 10b7e82b8..fd24d6e08 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart @@ -6,7 +6,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import '../../../utils/i18_key_constants.dart' as i18; import '../../../widgets/localized.dart'; import '../../blocs/search_households/search_bloc_common_wrapper.dart'; -import '../../router/registration_delivery_router.gm.dart'; +import '../../router/registration_delivery_router.gr.dart'; @RoutePage() class BeneficiaryAcknowledgementPage extends LocalizedStatefulWidget { diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart index 55d762731..7ffe27a7e 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart @@ -6,7 +6,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:registration_delivery/registration_delivery.dart'; -import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; +import 'package:registration_delivery/router/registration_delivery_router.gr.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; import '../../models/entities/additional_fields_type.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart index 8d0f29b23..6efe50562 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart @@ -13,7 +13,7 @@ import 'package:registration_delivery/utils/extensions/extensions.dart'; import '../../blocs/beneficiary_registration/beneficiary_registration.dart'; import '../../models/entities/household.dart'; -import '../../router/registration_delivery_router.gm.dart'; +import '../../router/registration_delivery_router.gr.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index 135e4c8ab..e472d9bd7 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -11,7 +11,7 @@ import 'package:reactive_forms/reactive_forms.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; import '../../blocs/beneficiary_registration/beneficiary_registration.dart'; -import '../../router/registration_delivery_router.gm.dart'; +import '../../router/registration_delivery_router.gr.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index 971668676..ea2e7f17f 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -20,7 +20,7 @@ import 'package:registration_delivery/utils/extensions/extensions.dart'; import '../../blocs/beneficiary_registration/beneficiary_registration.dart'; import '../../blocs/household_overview/household_overview.dart'; -import '../../router/registration_delivery_router.gm.dart'; +import '../../router/registration_delivery_router.gr.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; diff --git a/packages/registration_delivery/lib/pages/reason_for_deletion.dart b/packages/registration_delivery/lib/pages/reason_for_deletion.dart index e001b3627..e0a453596 100644 --- a/packages/registration_delivery/lib/pages/reason_for_deletion.dart +++ b/packages/registration_delivery/lib/pages/reason_for_deletion.dart @@ -7,7 +7,7 @@ import 'package:reactive_forms/reactive_forms.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../blocs/household_overview/household_overview.dart'; -import '../router/registration_delivery_router.gm.dart'; +import '../router/registration_delivery_router.gr.dart'; import '../utils/utils.dart'; import '../widgets/back_navigation_help_header.dart'; import '../widgets/localized.dart'; diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index 0cf5c4650..9340a4b9a 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -10,7 +10,7 @@ import 'package:registration_delivery/registration_delivery.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../models/entities/status.dart'; -import '../router/registration_delivery_router.gm.dart'; +import '../router/registration_delivery_router.gr.dart'; import '../utils/global_search_parameters.dart'; import '../utils/utils.dart'; import '../widgets/back_navigation_help_header.dart'; diff --git a/packages/registration_delivery/lib/pages/summary_page.dart b/packages/registration_delivery/lib/pages/summary_page.dart index 873e85f30..cccad6777 100644 --- a/packages/registration_delivery/lib/pages/summary_page.dart +++ b/packages/registration_delivery/lib/pages/summary_page.dart @@ -4,9 +4,8 @@ import 'package:digit_components/utils/date_utils.dart'; import 'package:digit_components/widgets/atoms/details_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:recase/recase.dart'; import 'package:registration_delivery/models/entities/additional_fields_type.dart'; -import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; +import 'package:registration_delivery/router/registration_delivery_router.gr.dart'; import 'package:registration_delivery/widgets/back_navigation_help_header.dart'; import 'package:registration_delivery/widgets/showcase/showcase_button.dart'; diff --git a/packages/registration_delivery/lib/router/registration_delivery_router.dart b/packages/registration_delivery/lib/router/registration_delivery_router.dart index 676799919..d423c9304 100644 --- a/packages/registration_delivery/lib/router/registration_delivery_router.dart +++ b/packages/registration_delivery/lib/router/registration_delivery_router.dart @@ -1,11 +1,13 @@ import 'package:auto_route/auto_route.dart'; -import 'registration_delivery_router.gm.dart'; +import 'registration_delivery_router.gr.dart'; -@AutoRouterConfig.module() -class RegistrationDeliveryRoute extends $RegistrationDeliveryRoute { +@AutoRouterConfig() +class RegistrationDeliveryRoute extends RootStackRouter { + @override RouteType get defaultRouteType => const RouteType.material(); + @override List get routes => [ AutoRoute( page: RegistrationDeliveryWrapperRoute.page, diff --git a/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart b/packages/registration_delivery/lib/router/registration_delivery_router.gr.dart similarity index 99% rename from packages/registration_delivery/lib/router/registration_delivery_router.gm.dart rename to packages/registration_delivery/lib/router/registration_delivery_router.gr.dart index 9f7594328..84195cc00 100644 --- a/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart +++ b/packages/registration_delivery/lib/router/registration_delivery_router.gr.dart @@ -62,7 +62,9 @@ import 'package:registration_delivery/pages/search_beneficiary.dart' as _i21; import 'package:registration_delivery/pages/summary_page.dart' as _i24; import 'package:registration_delivery/registration_delivery.dart' as _i28; -abstract class $RegistrationDeliveryRoute extends _i25.AutoRouterModule { +abstract class $RegistrationDeliveryRoute extends _i25.RootStackRouter { + $RegistrationDeliveryRoute({super.navigatorKey}); + @override final Map pagesMap = { BeneficiaryAcknowledgementRoute.name: (routeData) { diff --git a/packages/registration_delivery/lib/widgets/member_card/member_card.dart b/packages/registration_delivery/lib/widgets/member_card/member_card.dart index 91f6bb67b..dde5c7a40 100644 --- a/packages/registration_delivery/lib/widgets/member_card/member_card.dart +++ b/packages/registration_delivery/lib/widgets/member_card/member_card.dart @@ -12,7 +12,7 @@ import '../../blocs/household_overview/household_overview.dart'; import '../../models/entities/side_effect.dart'; import '../../models/entities/status.dart'; import '../../models/entities/task.dart'; -import '../../router/registration_delivery_router.gm.dart'; +import '../../router/registration_delivery_router.gr.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../action_card/action_card.dart'; diff --git a/packages/registration_delivery/lib/widgets/showcase/showcase_button.dart b/packages/registration_delivery/lib/widgets/showcase/showcase_button.dart index 32f0e5f1b..c094fc57b 100644 --- a/packages/registration_delivery/lib/widgets/showcase/showcase_button.dart +++ b/packages/registration_delivery/lib/widgets/showcase/showcase_button.dart @@ -4,7 +4,7 @@ import 'package:digit_showcase/showcase_widget.dart'; import 'package:flutter/material.dart'; import 'package:registration_delivery/blocs/app_localization.dart'; -import '../../router/registration_delivery_router.gm.dart'; +import '../../router/registration_delivery_router.gr.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../localized.dart'; import 'config/showcase_constants.dart'; diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 7d0084d7b..72a341750 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -61,58 +61,58 @@ packages: dependency: transitive description: name: audioplayers - sha256: c346ba5a39dc208f1bab55fc239855f573d69b0e832402114bf0b793622adc4d + sha256: c05c6147124cd63e725e861335a8b4d57300b80e6e92cea7c145c739223bbaef url: "https://pub.dev" source: hosted - version: "6.1.0" + version: "5.2.1" audioplayers_android: dependency: transitive description: name: audioplayers_android - sha256: de576b890befe27175c2f511ba8b742bec83765fa97c3ce4282bba46212f58e4 + sha256: b00e1a0e11365d88576320ec2d8c192bc21f1afb6c0e5995d1c57ae63156acb5 url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "4.0.3" audioplayers_darwin: dependency: transitive description: name: audioplayers_darwin - sha256: e507887f3ff18d8e5a10a668d7bedc28206b12e10b98347797257c6ae1019c3b + sha256: "3034e99a6df8d101da0f5082dcca0a2a99db62ab1d4ddb3277bed3f6f81afe08" url: "https://pub.dev" source: hosted - version: "6.0.0" + version: "5.0.2" audioplayers_linux: dependency: transitive description: name: audioplayers_linux - sha256: "3d3d244c90436115417f170426ce768856d8fe4dfc5ed66a049d2890acfa82f9" + sha256: "60787e73fefc4d2e0b9c02c69885402177e818e4e27ef087074cf27c02246c9e" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "3.1.0" audioplayers_platform_interface: dependency: transitive description: name: audioplayers_platform_interface - sha256: "6834dd48dfb7bc6c2404998ebdd161f79cd3774a7e6779e1348d54a3bfdcfaa5" + sha256: "365c547f1bb9e77d94dd1687903a668d8f7ac3409e48e6e6a3668a1ac2982adb" url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "6.1.0" audioplayers_web: dependency: transitive description: name: audioplayers_web - sha256: "3609bdf0e05e66a3d9750ee40b1e37f2a622c4edb796cc600b53a90a30a2ace4" + sha256: "22cd0173e54d92bd9b2c80b1204eb1eb159ece87475ab58c9788a70ec43c2a62" url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "4.1.0" audioplayers_windows: dependency: transitive description: name: audioplayers_windows - sha256: "8605762dddba992138d476f6a0c3afd9df30ac5b96039929063eceed416795c2" + sha256: "9536812c9103563644ada2ef45ae523806b0745f7a78e89d1b5fb1951de90e1a" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "3.1.0" auto_route: dependency: "direct main" description: From 15bfebfbf4db6a9d5604667e5b014b012cf902e6 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Thu, 5 Sep 2024 15:32:45 +0530 Subject: [PATCH 089/241] reverted auto_route module changes as latest auto_route generator is not supported with latest isar generator --- .../lib/pages/home.dart | 12 ++-- .../lib/router/app_router.dart | 40 ++++++------- .../lib/router/app_router.gr.dart | 7 +++ .../pubspec.lock | 4 +- .../pubspec.yaml | 2 +- .../lib/pages/manage_attendance.dart | 2 +- .../lib/pages/mark_attendance.dart | 2 +- .../lib/pages/session_select.dart | 2 +- .../lib/router/attendance_router.dart | 6 +- ...uter.gr.dart => attendance_router.gm.dart} | 4 +- packages/attendance_management/pubspec.lock | 46 +++++++------- packages/attendance_management/pubspec.yaml | 2 +- .../lib/pages/closed_household_details.dart | 2 +- .../lib/pages/closed_household_summary.dart | 2 +- .../lib/router/closed_household_router.dart | 6 +- ...r.dart => closed_household_router.gm.dart} | 4 +- .../lib/widgets/showcase/showcase_button.dart | 2 +- packages/closed_household/pubspec.yaml | 2 +- packages/digit_data_model/pubspec.lock | 4 +- packages/digit_data_model/pubspec.yaml | 2 +- .../lib/router/dashboard_router.dart | 6 +- ...outer.gr.dart => dashboard_router.gm.dart} | 4 +- packages/digit_dss/pubspec.yaml | 2 +- .../lib/router/digit_scanner_router.dart | 6 +- ...r.gr.dart => digit_scanner_router.gm.dart} | 4 +- .../lib/pages/manage_stocks.dart | 2 +- .../lib/pages/record_stock/stock_details.dart | 2 +- .../pages/record_stock/warehouse_details.dart | 2 +- .../lib/pages/reports/report_details.dart | 2 +- .../lib/pages/reports/report_selection.dart | 2 +- .../stock_reconciliation.dart | 2 +- .../lib/router/inventory_router.dart | 6 +- ...outer.gr.dart => inventory_router.gm.dart} | 4 +- packages/inventory_management/pubspec.lock | 60 +++++++++---------- .../record_facility_details.dart | 2 +- .../record_reason_checklist.dart | 2 +- .../record_referral_details.dart | 2 +- .../search_referral_reconciliations.dart | 4 +- .../referral_reconciliation_router.dart | 6 +- ...=> referral_reconciliation_router.gm.dart} | 4 +- packages/referral_reconciliation/pubspec.lock | 50 ++++++++-------- packages/referral_reconciliation/pubspec.yaml | 1 - .../beneficiary/beneficiary_checklist.dart | 2 +- .../beneficiary/beneficiary_details.dart | 2 +- .../beneficiary/deliver_intervention.dart | 2 +- .../beneficiary/delivery_summary_page.dart | 2 +- .../pages/beneficiary/dose_administered.dart | 2 +- .../pages/beneficiary/household_overview.dart | 2 +- .../record_past_delivery_details.dart | 2 +- .../pages/beneficiary/refer_beneficiary.dart | 2 +- .../pages/beneficiary/refused_delivery.dart | 2 +- .../lib/pages/beneficiary/side_effects.dart | 2 +- .../widgets/household_acknowledgement.dart | 2 +- .../widgets/splash_acknowledgement.dart | 2 +- .../beneficiary_acknowledgement.dart | 2 +- .../house_details.dart | 2 +- .../household_details.dart | 2 +- .../household_location.dart | 2 +- .../individual_details.dart | 2 +- .../lib/pages/reason_for_deletion.dart | 2 +- .../lib/pages/search_beneficiary.dart | 2 +- .../lib/pages/summary_page.dart | 2 +- .../router/registration_delivery_router.dart | 6 +- ...t => registration_delivery_router.gm.dart} | 4 +- .../lib/widgets/member_card/member_card.dart | 2 +- .../lib/widgets/showcase/showcase_button.dart | 2 +- packages/registration_delivery/pubspec.lock | 2 +- packages/registration_delivery/pubspec.yaml | 3 +- 68 files changed, 188 insertions(+), 199 deletions(-) rename packages/attendance_management/lib/router/{attendance_router.gr.dart => attendance_router.gm.dart} (98%) rename packages/closed_household/lib/router/{closed_household_router.gr.dart => closed_household_router.gm.dart} (97%) rename packages/digit_dss/lib/router/{dashboard_router.gr.dart => dashboard_router.gm.dart} (91%) rename packages/digit_scanner/lib/router/{digit_scanner_router.gr.dart => digit_scanner_router.gm.dart} (95%) rename packages/inventory_management/lib/router/{inventory_router.gr.dart => inventory_router.gm.dart} (99%) rename packages/referral_reconciliation/lib/router/{referral_reconciliation_router.gr.dart => referral_reconciliation_router.gm.dart} (99%) rename packages/registration_delivery/lib/router/{registration_delivery_router.gr.dart => registration_delivery_router.gm.dart} (99%) diff --git a/apps/health_campaign_field_worker_app/lib/pages/home.dart b/apps/health_campaign_field_worker_app/lib/pages/home.dart index 7e905ea79..e786ce267 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/home.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/home.dart @@ -1,9 +1,9 @@ import 'dart:async'; import 'package:attendance_management/attendance_management.dart'; -import 'package:attendance_management/router/attendance_router.gr.dart'; +import 'package:attendance_management/router/attendance_router.gm.dart'; import 'package:closed_household/closed_household.dart'; -import 'package:closed_household/router/closed_household_router.gr.dart'; +import 'package:closed_household/router/closed_household_router.gm.dart'; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/widgets/atoms/digit_toaster.dart'; @@ -11,7 +11,7 @@ import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_dss/data/local_store/no_sql/schema/dashboard_config_schema.dart'; import 'package:digit_dss/models/entities/dashboard_response_model.dart'; -import 'package:digit_dss/router/dashboard_router.gr.dart'; +import 'package:digit_dss/router/dashboard_router.gm.dart'; import 'package:digit_dss/utils/utils.dart'; import 'package:drift_db_viewer/drift_db_viewer.dart'; import 'package:flutter/material.dart'; @@ -19,11 +19,11 @@ import 'package:flutter_background_service/flutter_background_service.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:inventory_management/inventory_management.dart'; -import 'package:inventory_management/router/inventory_router.gr.dart'; +import 'package:inventory_management/router/inventory_router.gm.dart'; import 'package:referral_reconciliation/referral_reconciliation.dart'; -import 'package:referral_reconciliation/router/referral_reconciliation_router.gr.dart'; +import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart'; import 'package:registration_delivery/registration_delivery.dart'; -import 'package:registration_delivery/router/registration_delivery_router.gr.dart'; +import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; import 'package:sync_service/blocs/sync/sync.dart'; import '../blocs/app_initialization/app_initialization.dart'; diff --git a/apps/health_campaign_field_worker_app/lib/router/app_router.dart b/apps/health_campaign_field_worker_app/lib/router/app_router.dart index cb6577911..3f2fa9483 100644 --- a/apps/health_campaign_field_worker_app/lib/router/app_router.dart +++ b/apps/health_campaign_field_worker_app/lib/router/app_router.dart @@ -1,20 +1,16 @@ import 'package:attendance_management/router/attendance_router.dart'; -import 'package:attendance_management/router/attendance_router.gr.dart'; import 'package:auto_route/auto_route.dart'; import 'package:closed_household/router/closed_household_router.dart'; -import 'package:closed_household/router/closed_household_router.gr.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_dss/router/dashboard_router.dart'; -import 'package:digit_dss/router/dashboard_router.gr.dart'; +import 'package:digit_dss/router/dashboard_router.gm.dart'; import 'package:digit_scanner/router/digit_scanner_router.dart'; -import 'package:digit_scanner/router/digit_scanner_router.gr.dart'; +import 'package:digit_scanner/router/digit_scanner_router.gm.dart'; import 'package:flutter/material.dart'; import 'package:inventory_management/router/inventory_router.dart'; -import 'package:inventory_management/router/inventory_router.gr.dart'; import 'package:referral_reconciliation/router/referral_reconciliation_router.dart'; -import 'package:referral_reconciliation/router/referral_reconciliation_router.gr.dart'; import 'package:registration_delivery/router/registration_delivery_router.dart'; -import 'package:registration_delivery/router/registration_delivery_router.gr.dart'; +import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; import '../blocs/localization/app_localization.dart'; import '../pages/acknowledgement.dart'; @@ -50,16 +46,16 @@ export 'package:auto_route/auto_route.dart'; part 'app_router.gr.dart'; -final registrationDeliveryRoute = RegistrationDeliveryRoute(); -final closedHouseholdRoute = ClosedHouseholdPackageRoute(); -final inventoryRoute = InventoryRoute(); -final attendanceRoute = AttendanceRoute(); -final referralReconciliationRoute = ReferralReconciliationRoute(); -final digitScannerRoute = DigitScannerPackageRoute(); -final dashboardRoute = DashboardRoute(); - -@AutoRouterConfig() -class AppRouter extends RootStackRouter { +@AutoRouterConfig(modules: [ + RegistrationDeliveryRoute, + ClosedHouseholdPackageRoute, + InventoryRoute, + AttendanceRoute, + ReferralReconciliationRoute, + DigitScannerPackageRoute, + DashboardRoute +]) +class AppRouter extends _$AppRouter { @override RouteType get defaultRouteType => const RouteType.material(); @@ -94,10 +90,10 @@ class AppRouter extends RootStackRouter { page: UserDashboardRoute.page, path: 'dashboard', ), - ...registrationDeliveryRoute.routes, + ...RegistrationDeliveryRoute().routes, /// close household - ...closedHouseholdRoute.routes, + ...ClosedHouseholdPackageRoute().routes, AutoRoute( page: ChecklistWrapperRoute.page, @@ -194,13 +190,13 @@ class AppRouter extends RootStackRouter { ), // Attendance Route - ...attendanceRoute.routes, + ...AttendanceRoute().routes, //Inventory Route - ...inventoryRoute.routes, + ...InventoryRoute().routes, // Referral Reconciliation Route - ...referralReconciliationRoute.routes, + ...ReferralReconciliationRoute().routes, ], ) ]; diff --git a/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart b/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart index e86077d8f..0c07ba0d1 100644 --- a/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart +++ b/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart @@ -305,6 +305,13 @@ abstract class _$AppRouter extends RootStackRouter { ), ); }, + ...RegistrationDeliveryRoute().pagesMap, + ...ClosedHouseholdPackageRoute().pagesMap, + ...InventoryRoute().pagesMap, + ...AttendanceRoute().pagesMap, + ...ReferralReconciliationRoute().pagesMap, + ...DigitScannerPackageRoute().pagesMap, + ...DashboardRoute().pagesMap, }; } diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 08485f7c2..ad9b66a6e 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -132,10 +132,10 @@ packages: dependency: "direct main" description: name: auto_route - sha256: "6cad3f408863ffff2b5757967c802b18415dac4acb1b40c5cdd45d0a26e5080f" + sha256: a9001a90539ca3effc168f7e1029a5885c7326b9032c09ac895e303c1d137704 url: "https://pub.dev" source: hosted - version: "8.1.3" + version: "8.3.0" auto_route_generator: dependency: "direct dev" description: diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 0ea2efd33..fd7d38ed3 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -19,7 +19,7 @@ dependencies: path_provider: ^2.1.3 path: ^1.9.0 digit_components: ^1.0.0+1 - auto_route: ^8.1.3 + auto_route: ^8.3.0 flutter_bloc: ^8.1.5 collection: ^1.18.0 reactive_forms: ^17.0.0 diff --git a/packages/attendance_management/lib/pages/manage_attendance.dart b/packages/attendance_management/lib/pages/manage_attendance.dart index f1253bf47..0d8b6f0b2 100644 --- a/packages/attendance_management/lib/pages/manage_attendance.dart +++ b/packages/attendance_management/lib/pages/manage_attendance.dart @@ -10,7 +10,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '../../utils/i18_key_constants.dart' as i18; -import '../router/attendance_router.gr.dart'; +import '../router/attendance_router.gm.dart'; import '../widgets/back_navigation_help_header.dart'; import '../widgets/localized.dart'; import '../widgets/no_result_card.dart'; diff --git a/packages/attendance_management/lib/pages/mark_attendance.dart b/packages/attendance_management/lib/pages/mark_attendance.dart index 2aede000b..4f18cc14a 100644 --- a/packages/attendance_management/lib/pages/mark_attendance.dart +++ b/packages/attendance_management/lib/pages/mark_attendance.dart @@ -16,7 +16,7 @@ import 'package:location/location.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../widgets/localized.dart'; import '../blocs/attendance_individual_bloc.dart'; -import '../router/attendance_router.gr.dart'; +import '../router/attendance_router.gm.dart'; import '../widgets/back_navigation_help_header.dart'; import '../widgets/circular_button.dart'; import '../widgets/no_result_card.dart'; diff --git a/packages/attendance_management/lib/pages/session_select.dart b/packages/attendance_management/lib/pages/session_select.dart index 8e4caabad..080d4a428 100644 --- a/packages/attendance_management/lib/pages/session_select.dart +++ b/packages/attendance_management/lib/pages/session_select.dart @@ -16,7 +16,7 @@ import '../blocs/attendance_individual_bloc.dart'; import '../models/entities/attendance_log.dart'; import '../models/entities/attendance_register.dart'; import '../models/entities/enum_values.dart'; -import '../router/attendance_router.gr.dart'; +import '../router/attendance_router.gm.dart'; import '../utils/constants.dart'; import '../utils/date_util_attendance.dart'; import '../widgets/back_navigation_help_header.dart'; diff --git a/packages/attendance_management/lib/router/attendance_router.dart b/packages/attendance_management/lib/router/attendance_router.dart index 1808cc202..a35c84531 100644 --- a/packages/attendance_management/lib/router/attendance_router.dart +++ b/packages/attendance_management/lib/router/attendance_router.dart @@ -1,9 +1,9 @@ import 'package:auto_route/auto_route.dart'; -import 'attendance_router.gr.dart'; +import 'attendance_router.gm.dart'; -@AutoRouterConfig() -class AttendanceRoute extends RootStackRouter { +@AutoRouterConfig.module() +class AttendanceRoute extends $AttendanceRoute { @override RouteType get defaultRouteType => const RouteType.material(); diff --git a/packages/attendance_management/lib/router/attendance_router.gr.dart b/packages/attendance_management/lib/router/attendance_router.gm.dart similarity index 98% rename from packages/attendance_management/lib/router/attendance_router.gr.dart rename to packages/attendance_management/lib/router/attendance_router.gm.dart index c51e1eb8e..8fbef1426 100644 --- a/packages/attendance_management/lib/router/attendance_router.gr.dart +++ b/packages/attendance_management/lib/router/attendance_router.gm.dart @@ -22,9 +22,7 @@ import 'package:attendance_management/widgets/attendance_acknowledgement.dart' import 'package:auto_route/auto_route.dart' as _i5; import 'package:flutter/material.dart' as _i6; -abstract class $AttendanceRoute extends _i5.RootStackRouter { - $AttendanceRoute({super.navigatorKey}); - +abstract class $AttendanceRoute extends _i5.AutoRouterModule { @override final Map pagesMap = { AttendanceAcknowledgementRoute.name: (routeData) { diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index ce19d5ec9..b9b701cda 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -61,10 +61,10 @@ packages: dependency: "direct main" description: name: auto_route - sha256: "6cad3f408863ffff2b5757967c802b18415dac4acb1b40c5cdd45d0a26e5080f" + sha256: "8de4a280ce7861ef24a6baa14c2b02b77a8c31b4a4c4f12d7b608678cc657c7f" url: "https://pub.dev" source: hosted - version: "8.1.3" + version: "8.1.4" auto_route_generator: dependency: "direct dev" description: @@ -130,7 +130,7 @@ packages: source: hosted version: "2.4.2" build_runner: - dependency: "direct main" + dependency: "direct dev" description: name: build_runner sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" @@ -314,10 +314,10 @@ packages: dependency: "direct main" description: name: drift - sha256: "6acedc562ffeed308049f78fb1906abad3d65714580b6745441ee6d50ec564cd" + sha256: "15b51e0ee1970455c0c3f7e560f3ac02ecb9c04711a9657586e470b234659dba" url: "https://pub.dev" source: hosted - version: "2.18.0" + version: "2.20.0" drift_db_viewer: dependency: "direct main" description: @@ -330,10 +330,10 @@ packages: dependency: "direct dev" description: name: drift_dev - sha256: d9b020736ea85fff1568699ce18b89fabb3f0f042e8a7a05e84a3ec20d39acde + sha256: b9ec6159a731288e805a44225ccbebad507dd84d52ab71352c52584f13199d2d url: "https://pub.dev" source: hosted - version: "2.18.0" + version: "2.20.1" easy_stepper: dependency: transitive description: @@ -494,10 +494,10 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: "7eae679e596a44fdf761853a706f74979f8dd3cd92cf4e23cae161fda091b847" + sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" url: "https://pub.dev" source: hosted - version: "8.2.6" + version: "8.2.8" freezed: dependency: "direct dev" description: @@ -558,10 +558,10 @@ packages: dependency: transitive description: name: http - sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -782,18 +782,18 @@ packages: dependency: transitive description: name: package_info_plus - sha256: b93d8b4d624b4ea19b0a5a208b2d6eff06004bc3ce74c06040b120eeadd00ce0 + sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 url: "https://pub.dev" source: hosted - version: "8.0.0" + version: "8.0.2" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: f49918f3433a3146047372f9d4f1f847511f2acd5cd030e1f44fe5a50036b70e + sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "3.0.1" path: dependency: "direct main" description: @@ -1043,10 +1043,10 @@ packages: dependency: transitive description: name: sqlite3 - sha256: b384f598b813b347c5a7e5ffad82cbaff1bec3d1561af267041e66f6f0899295 + sha256: "45f168ae2213201b54e09429ed0c593dc2c88c924a1488d6f9c523a255d567cb" url: "https://pub.dev" source: hosted - version: "2.4.3" + version: "2.4.6" sqlite3_flutter_libs: dependency: "direct main" description: @@ -1059,10 +1059,10 @@ packages: dependency: transitive description: name: sqlparser - sha256: ade9a67fd70d0369329ed3373208de7ebd8662470e8c396fc8d0d60f9acdfc9f + sha256: "3be52b4968fc2f098ba735863404756d2fe3ea0729cf006a5b5612618f74ca04" url: "https://pub.dev" source: hosted - version: "0.36.0" + version: "0.37.1" stack_trace: dependency: transitive description: @@ -1211,18 +1211,18 @@ packages: dependency: transitive description: name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062 url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "1.0.0" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: "58c6666b342a38816b2e7e50ed0f1e261959630becd4c879c4f26bfa14aa5a42" + sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b url: "https://pub.dev" source: hosted - version: "2.4.5" + version: "2.4.0" webkit_inspection_protocol: dependency: transitive description: diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index a2d955062..9e6e2d461 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -22,7 +22,6 @@ dependencies: collection: ^1.18.0 dio: ^5.4.3+1 location: ^6.0.2 - build_runner: ^2.2.1 fluttertoast: ^8.1.2 overlay_builder: ^1.1.0 sqlite3_flutter_libs: ^0.5.10 @@ -43,6 +42,7 @@ dev_dependencies: mocktail: ^1.0.2 dart_mappable_builder: ^4.2.2 drift_dev: ^2.18.0 + build_runner: ^2.4.11 auto_route_generator: 8.0.0 flutter: diff --git a/packages/closed_household/lib/pages/closed_household_details.dart b/packages/closed_household/lib/pages/closed_household_details.dart index 669792101..d608e6ac1 100644 --- a/packages/closed_household/lib/pages/closed_household_details.dart +++ b/packages/closed_household/lib/pages/closed_household_details.dart @@ -8,7 +8,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; import '../../utils/i18_key_constants.dart' as i18; -import '../router/closed_household_router.gr.dart'; +import '../router/closed_household_router.gm.dart'; import '../utils/utils.dart'; import '../widgets/back_navigation_help_header.dart'; import '../widgets/localized.dart'; diff --git a/packages/closed_household/lib/pages/closed_household_summary.dart b/packages/closed_household/lib/pages/closed_household_summary.dart index e21ef447d..826af79f4 100644 --- a/packages/closed_household/lib/pages/closed_household_summary.dart +++ b/packages/closed_household/lib/pages/closed_household_summary.dart @@ -1,6 +1,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:closed_household/blocs/closed_household.dart'; -import 'package:closed_household/router/closed_household_router.gr.dart'; +import 'package:closed_household/router/closed_household_router.gm.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/utils/date_utils.dart'; import 'package:digit_components/widgets/atoms/details_card.dart'; diff --git a/packages/closed_household/lib/router/closed_household_router.dart b/packages/closed_household/lib/router/closed_household_router.dart index ea407c6fc..466c07009 100644 --- a/packages/closed_household/lib/router/closed_household_router.dart +++ b/packages/closed_household/lib/router/closed_household_router.dart @@ -1,9 +1,9 @@ import 'package:auto_route/auto_route.dart'; -import 'closed_household_router.gr.dart'; +import 'closed_household_router.gm.dart'; -@AutoRouterConfig() -class ClosedHouseholdPackageRoute extends RootStackRouter { +@AutoRouterConfig.module() +class ClosedHouseholdPackageRoute extends $ClosedHouseholdPackageRoute { @override RouteType get defaultRouteType => const RouteType.material(); diff --git a/packages/closed_household/lib/router/closed_household_router.gr.dart b/packages/closed_household/lib/router/closed_household_router.gm.dart similarity index 97% rename from packages/closed_household/lib/router/closed_household_router.gr.dart rename to packages/closed_household/lib/router/closed_household_router.gm.dart index 070f1a353..5cf8d0251 100644 --- a/packages/closed_household/lib/router/closed_household_router.gr.dart +++ b/packages/closed_household/lib/router/closed_household_router.gm.dart @@ -18,9 +18,7 @@ import 'package:closed_household/pages/closed_household_summary.dart' as _i3; import 'package:closed_household/pages/closed_household_wrapper.dart' as _i4; import 'package:flutter/material.dart' as _i6; -abstract class $ClosedHouseholdPackageRoute extends _i5.RootStackRouter { - $ClosedHouseholdPackageRoute({super.navigatorKey}); - +abstract class $ClosedHouseholdPackageRoute extends _i5.AutoRouterModule { @override final Map pagesMap = { ClosedHouseholdAcknowledgementRoute.name: (routeData) { diff --git a/packages/closed_household/lib/widgets/showcase/showcase_button.dart b/packages/closed_household/lib/widgets/showcase/showcase_button.dart index 8c42121e5..9e7b1f968 100644 --- a/packages/closed_household/lib/widgets/showcase/showcase_button.dart +++ b/packages/closed_household/lib/widgets/showcase/showcase_button.dart @@ -1,6 +1,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:closed_household/blocs/app_localization.dart'; -import 'package:closed_household/router/closed_household_router.gr.dart'; +import 'package:closed_household/router/closed_household_router.gm.dart'; import 'package:digit_components/theme/digit_theme.dart'; import 'package:digit_showcase/showcase_widget.dart'; import 'package:flutter/material.dart'; diff --git a/packages/closed_household/pubspec.yaml b/packages/closed_household/pubspec.yaml index ed1bba3eb..4e14baa60 100644 --- a/packages/closed_household/pubspec.yaml +++ b/packages/closed_household/pubspec.yaml @@ -14,7 +14,6 @@ dependencies: digit_components: ^1.0.1+1 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 - build_runner: ^2.2.1 reactive_forms: ^17.0.0 fluttertoast: ^8.1.2 overlay_builder: ^1.1.0 @@ -58,6 +57,7 @@ dev_dependencies: ref: master path: ./packages/dart_mappable_builder auto_route_generator: ^8.0.0 + build_runner: ^2.4.11 isar_generator: ^3.1.0+1 flutter: diff --git a/packages/digit_data_model/pubspec.lock b/packages/digit_data_model/pubspec.lock index 6dc94fb78..9708ad4af 100644 --- a/packages/digit_data_model/pubspec.lock +++ b/packages/digit_data_model/pubspec.lock @@ -109,10 +109,10 @@ packages: dependency: "direct dev" description: name: build_runner - sha256: "1414d6d733a85d8ad2f1dfcb3ea7945759e35a123cb99ccfac75d0758f75edfa" + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" url: "https://pub.dev" source: hosted - version: "2.4.10" + version: "2.4.11" build_runner_core: dependency: transitive description: diff --git a/packages/digit_data_model/pubspec.yaml b/packages/digit_data_model/pubspec.yaml index 990a395ae..35169d554 100644 --- a/packages/digit_data_model/pubspec.yaml +++ b/packages/digit_data_model/pubspec.yaml @@ -31,7 +31,7 @@ dev_dependencies: sdk: flutter flutter_lints: ^4.0.0 freezed: ^2.1.0+1 - build_runner: ^2.4.9 + build_runner: ^2.4.11 json_serializable: ^6.4.0 drift_dev: ^2.18.0 bloc_test: ^9.1.0 diff --git a/packages/digit_dss/lib/router/dashboard_router.dart b/packages/digit_dss/lib/router/dashboard_router.dart index a80a5fe72..f20ca702e 100644 --- a/packages/digit_dss/lib/router/dashboard_router.dart +++ b/packages/digit_dss/lib/router/dashboard_router.dart @@ -1,9 +1,9 @@ import 'package:auto_route/auto_route.dart'; -import 'dashboard_router.gr.dart'; +import 'dashboard_router.gm.dart'; -@AutoRouterConfig() -class DashboardRoute extends RootStackRouter { +@AutoRouterConfig.module() +class DashboardRoute extends $DashboardRoute { @override RouteType get defaultRouteType => const RouteType.material(); diff --git a/packages/digit_dss/lib/router/dashboard_router.gr.dart b/packages/digit_dss/lib/router/dashboard_router.gm.dart similarity index 91% rename from packages/digit_dss/lib/router/dashboard_router.gr.dart rename to packages/digit_dss/lib/router/dashboard_router.gm.dart index 684a5e431..652ef7091 100644 --- a/packages/digit_dss/lib/router/dashboard_router.gr.dart +++ b/packages/digit_dss/lib/router/dashboard_router.gm.dart @@ -11,9 +11,7 @@ import 'package:auto_route/auto_route.dart' as _i2; import 'package:digit_dss/pages/dashboard/dashboard.dart' as _i1; -abstract class $DashboardRoute extends _i2.RootStackRouter { - $DashboardRoute({super.navigatorKey}); - +abstract class $DashboardRoute extends _i2.AutoRouterModule { @override final Map pagesMap = { UserDashboardRoute.name: (routeData) { diff --git a/packages/digit_dss/pubspec.yaml b/packages/digit_dss/pubspec.yaml index 81ce2159a..cd39f2d34 100644 --- a/packages/digit_dss/pubspec.yaml +++ b/packages/digit_dss/pubspec.yaml @@ -35,7 +35,7 @@ dev_dependencies: freezed: ^2.1.0+1 json_serializable: ^6.4.0 drift_dev: ^2.14.1 - build_runner: ^2.4.7 + build_runner: ^2.4.11 bloc_test: ^9.1.0 mocktail: ^1.0.2 dart_mappable_builder: diff --git a/packages/digit_scanner/lib/router/digit_scanner_router.dart b/packages/digit_scanner/lib/router/digit_scanner_router.dart index 2ca98ba8a..e6fbc4f00 100644 --- a/packages/digit_scanner/lib/router/digit_scanner_router.dart +++ b/packages/digit_scanner/lib/router/digit_scanner_router.dart @@ -1,11 +1,13 @@ import 'package:auto_route/auto_route.dart'; -import 'digit_scanner_router.gr.dart'; +import 'digit_scanner_router.gm.dart'; -@AutoRouterConfig() +@AutoRouterConfig.module() class DigitScannerPackageRoute extends $DigitScannerPackageRoute { + @override RouteType get defaultRouteType => const RouteType.material(); + @override List routes = [ AutoRoute( page: DigitScannerRoute.page, diff --git a/packages/digit_scanner/lib/router/digit_scanner_router.gr.dart b/packages/digit_scanner/lib/router/digit_scanner_router.gm.dart similarity index 95% rename from packages/digit_scanner/lib/router/digit_scanner_router.gr.dart rename to packages/digit_scanner/lib/router/digit_scanner_router.gm.dart index dc322c44c..23e1bc4ea 100644 --- a/packages/digit_scanner/lib/router/digit_scanner_router.gr.dart +++ b/packages/digit_scanner/lib/router/digit_scanner_router.gm.dart @@ -13,9 +13,7 @@ import 'package:digit_scanner/blocs/app_localization.dart' as _i4; import 'package:digit_scanner/pages/qr_scanner.dart' as _i1; import 'package:flutter/material.dart' as _i3; -abstract class $DigitScannerPackageRoute extends _i2.RootStackRouter { - $DigitScannerPackageRoute({super.navigatorKey}); - +abstract class $DigitScannerPackageRoute extends _i2.AutoRouterModule { @override final Map pagesMap = { DigitScannerRoute.name: (routeData) { diff --git a/packages/inventory_management/lib/pages/manage_stocks.dart b/packages/inventory_management/lib/pages/manage_stocks.dart index 4c92e4172..8730c8634 100644 --- a/packages/inventory_management/lib/pages/manage_stocks.dart +++ b/packages/inventory_management/lib/pages/manage_stocks.dart @@ -1,7 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; import 'package:flutter/material.dart'; -import 'package:inventory_management/router/inventory_router.gr.dart'; +import 'package:inventory_management/router/inventory_router.gm.dart'; import '../../../utils/i18_key_constants.dart' as i18; import '../../widgets/localized.dart'; diff --git a/packages/inventory_management/lib/pages/record_stock/stock_details.dart b/packages/inventory_management/lib/pages/record_stock/stock_details.dart index 22db48887..8e9599111 100644 --- a/packages/inventory_management/lib/pages/record_stock/stock_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/stock_details.dart @@ -9,7 +9,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:gs1_barcode_parser/gs1_barcode_parser.dart'; import 'package:inventory_management/inventory_management.dart'; -import 'package:inventory_management/router/inventory_router.gr.dart'; +import 'package:inventory_management/router/inventory_router.gm.dart'; import 'package:inventory_management/utils/extensions/extensions.dart'; import 'package:reactive_forms/reactive_forms.dart'; diff --git a/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart b/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart index b075840c3..de24d5850 100644 --- a/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart @@ -6,7 +6,7 @@ import 'package:digit_scanner/blocs/scanner.dart'; import 'package:digit_scanner/pages/qr_scanner.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:inventory_management/router/inventory_router.gr.dart'; +import 'package:inventory_management/router/inventory_router.gm.dart'; import 'package:reactive_forms/reactive_forms.dart'; import '../../../utils/i18_key_constants.dart' as i18; diff --git a/packages/inventory_management/lib/pages/reports/report_details.dart b/packages/inventory_management/lib/pages/reports/report_details.dart index 73a6566e2..64768051a 100644 --- a/packages/inventory_management/lib/pages/reports/report_details.dart +++ b/packages/inventory_management/lib/pages/reports/report_details.dart @@ -4,7 +4,7 @@ import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:inventory_management/router/inventory_router.gr.dart'; +import 'package:inventory_management/router/inventory_router.gm.dart'; import 'package:inventory_management/utils/extensions/extensions.dart'; import 'package:reactive_forms/reactive_forms.dart'; diff --git a/packages/inventory_management/lib/pages/reports/report_selection.dart b/packages/inventory_management/lib/pages/reports/report_selection.dart index b49119513..5f7cfd145 100644 --- a/packages/inventory_management/lib/pages/reports/report_selection.dart +++ b/packages/inventory_management/lib/pages/reports/report_selection.dart @@ -1,7 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; import 'package:flutter/material.dart'; -import 'package:inventory_management/router/inventory_router.gr.dart'; +import 'package:inventory_management/router/inventory_router.gm.dart'; import '../../../utils/i18_key_constants.dart' as i18; import '../../../widgets/localized.dart'; diff --git a/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart b/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart index da5781747..a6774a996 100644 --- a/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart +++ b/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart @@ -6,7 +6,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:intl/intl.dart'; import 'package:inventory_management/inventory_management.dart'; -import 'package:inventory_management/router/inventory_router.gr.dart'; +import 'package:inventory_management/router/inventory_router.gm.dart'; import 'package:inventory_management/utils/extensions/extensions.dart'; import 'package:reactive_forms/reactive_forms.dart'; diff --git a/packages/inventory_management/lib/router/inventory_router.dart b/packages/inventory_management/lib/router/inventory_router.dart index ca00e1225..7f2e849f5 100644 --- a/packages/inventory_management/lib/router/inventory_router.dart +++ b/packages/inventory_management/lib/router/inventory_router.dart @@ -1,9 +1,9 @@ import 'package:auto_route/auto_route.dart'; -import 'inventory_router.gr.dart'; +import 'inventory_router.gm.dart'; -@AutoRouterConfig() -class InventoryRoute extends RootStackRouter { +@AutoRouterConfig.module() +class InventoryRoute extends $InventoryRoute { @override RouteType get defaultRouteType => const RouteType.material(); diff --git a/packages/inventory_management/lib/router/inventory_router.gr.dart b/packages/inventory_management/lib/router/inventory_router.gm.dart similarity index 99% rename from packages/inventory_management/lib/router/inventory_router.gr.dart rename to packages/inventory_management/lib/router/inventory_router.gm.dart index 574085615..e67fda3ef 100644 --- a/packages/inventory_management/lib/router/inventory_router.gr.dart +++ b/packages/inventory_management/lib/router/inventory_router.gm.dart @@ -29,9 +29,7 @@ import 'package:inventory_management/pages/reports/report_selection.dart' import 'package:inventory_management/pages/stock_reconciliation/stock_reconciliation.dart' as _i8; -abstract class $InventoryRoute extends _i10.RootStackRouter { - $InventoryRoute({super.navigatorKey}); - +abstract class $InventoryRoute extends _i10.AutoRouterModule { @override final Map pagesMap = { InventoryAcknowledgementRoute.name: (routeData) { diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index f60b74ba8..51d9330a6 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -5,26 +5,26 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a + sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" url: "https://pub.dev" source: hosted - version: "61.0.0" + version: "67.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 + sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" url: "https://pub.dev" source: hosted - version: "5.13.0" + version: "6.4.1" analyzer_plugin: dependency: transitive description: name: analyzer_plugin - sha256: c1d5f167683de03d5ab6c3b53fc9aeefc5d59476e7810ba7bbddff50c6f4392d + sha256: "9661b30b13a685efaee9f02e5d01ed9f2b423bd889d28a304d02d704aee69161" url: "https://pub.dev" source: hosted - version: "0.11.2" + version: "0.11.3" ansicolor: dependency: transitive description: @@ -117,10 +117,10 @@ packages: dependency: "direct main" description: name: auto_route - sha256: "6cad3f408863ffff2b5757967c802b18415dac4acb1b40c5cdd45d0a26e5080f" + sha256: "8de4a280ce7861ef24a6baa14c2b02b77a8c31b4a4c4f12d7b608678cc657c7f" url: "https://pub.dev" source: hosted - version: "8.1.3" + version: "8.1.4" auto_route_generator: dependency: "direct dev" description: @@ -333,10 +333,10 @@ packages: dependency: transitive description: name: cross_file - sha256: "55d7b444feb71301ef6b8838dbc1ae02e63dd48c8773f3810ff53bb1e2945b32" + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" url: "https://pub.dev" source: hosted - version: "0.3.4+1" + version: "0.3.4+2" crypto: dependency: transitive description: @@ -372,10 +372,10 @@ packages: dependency: transitive description: name: dart_style - sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55" + sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.3.6" db_viewer: dependency: transitive description: @@ -425,10 +425,10 @@ packages: dependency: "direct main" description: name: drift - sha256: "6acedc562ffeed308049f78fb1906abad3d65714580b6745441ee6d50ec564cd" + sha256: "15b51e0ee1970455c0c3f7e560f3ac02ecb9c04711a9657586e470b234659dba" url: "https://pub.dev" source: hosted - version: "2.18.0" + version: "2.20.0" drift_db_viewer: dependency: "direct main" description: @@ -441,10 +441,10 @@ packages: dependency: "direct dev" description: name: drift_dev - sha256: d9b020736ea85fff1568699ce18b89fabb3f0f042e8a7a05e84a3ec20d39acde + sha256: b9ec6159a731288e805a44225ccbebad507dd84d52ab71352c52584f13199d2d url: "https://pub.dev" source: hosted - version: "2.18.0" + version: "2.20.1" easy_stepper: dependency: transitive description: @@ -613,10 +613,10 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: "7eae679e596a44fdf761853a706f74979f8dd3cd92cf4e23cae161fda091b847" + sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" url: "https://pub.dev" source: hosted - version: "8.2.6" + version: "8.2.8" freezed: dependency: "direct dev" description: @@ -701,10 +701,10 @@ packages: dependency: transitive description: name: http - sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -925,18 +925,18 @@ packages: dependency: transitive description: name: package_info_plus - sha256: b93d8b4d624b4ea19b0a5a208b2d6eff06004bc3ce74c06040b120eeadd00ce0 + sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 url: "https://pub.dev" source: hosted - version: "8.0.0" + version: "8.0.2" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: f49918f3433a3146047372f9d4f1f847511f2acd5cd030e1f44fe5a50036b70e + sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "3.0.1" path: dependency: "direct main" description: @@ -1202,10 +1202,10 @@ packages: dependency: transitive description: name: sqlite3 - sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" + sha256: "45f168ae2213201b54e09429ed0c593dc2c88c924a1488d6f9c523a255d567cb" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.6" sqlite3_flutter_libs: dependency: "direct main" description: @@ -1218,10 +1218,10 @@ packages: dependency: transitive description: name: sqlparser - sha256: ade9a67fd70d0369329ed3373208de7ebd8662470e8c396fc8d0d60f9acdfc9f + sha256: "3be52b4968fc2f098ba735863404756d2fe3ea0729cf006a5b5612618f74ca04" url: "https://pub.dev" source: hosted - version: "0.36.0" + version: "0.37.1" stack_trace: dependency: transitive description: @@ -1378,10 +1378,10 @@ packages: dependency: transitive description: name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062 url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "1.0.0" web_socket_channel: dependency: transitive description: diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart index 875a87095..0f2bb4a98 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart @@ -7,7 +7,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:referral_reconciliation/models/entities/referral_recon_enums.dart'; -import 'package:referral_reconciliation/router/referral_reconciliation_router.gr.dart'; +import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart'; import 'package:referral_reconciliation/utils/constants.dart'; import '../../../utils/i18_key_constants.dart' as i18; diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart index ec8f2a129..5a5303e09 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart @@ -8,7 +8,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:group_radio_button/group_radio_button.dart'; -import 'package:referral_reconciliation/router/referral_reconciliation_router.gr.dart'; +import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart'; import 'package:referral_reconciliation/utils/constants.dart'; import '../../blocs/referral_recon_service_definition.dart'; diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart index ca8c50287..26d76e96a 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart @@ -8,7 +8,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:referral_reconciliation/models/entities/referral_recon_enums.dart'; -import 'package:referral_reconciliation/router/referral_reconciliation_router.gr.dart'; +import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart'; import 'package:referral_reconciliation/utils/extensions/extensions.dart'; import '../../../utils/i18_key_constants.dart' as i18; diff --git a/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart b/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart index 51920bf92..51b1f0c13 100644 --- a/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart +++ b/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart @@ -2,7 +2,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_scanner/blocs/scanner.dart'; -import 'package:digit_scanner/router/digit_scanner_router.gr.dart'; +import 'package:digit_scanner/router/digit_scanner_router.gm.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart'; @@ -10,7 +10,7 @@ import 'package:referral_reconciliation/utils/extensions/extensions.dart'; import '../blocs/search_referral_reconciliations.dart'; import '../models/entities/hf_referral.dart'; -import '../router/referral_reconciliation_router.gr.dart'; +import '../router/referral_reconciliation_router.gm.dart'; import '../utils/i18_key_constants.dart' as i18; import '../utils/utils.dart'; import '../widgets/back_navigation_help_header.dart'; diff --git a/packages/referral_reconciliation/lib/router/referral_reconciliation_router.dart b/packages/referral_reconciliation/lib/router/referral_reconciliation_router.dart index 7770b29c3..161831916 100644 --- a/packages/referral_reconciliation/lib/router/referral_reconciliation_router.dart +++ b/packages/referral_reconciliation/lib/router/referral_reconciliation_router.dart @@ -1,9 +1,9 @@ import 'package:auto_route/auto_route.dart'; -import 'referral_reconciliation_router.gr.dart'; +import 'referral_reconciliation_router.gm.dart'; -@AutoRouterConfig() -class ReferralReconciliationRoute extends RootStackRouter { +@AutoRouterConfig.module() +class ReferralReconciliationRoute extends $ReferralReconciliationRoute { @override RouteType get defaultRouteType => const RouteType.material(); diff --git a/packages/referral_reconciliation/lib/router/referral_reconciliation_router.gr.dart b/packages/referral_reconciliation/lib/router/referral_reconciliation_router.gm.dart similarity index 99% rename from packages/referral_reconciliation/lib/router/referral_reconciliation_router.gr.dart rename to packages/referral_reconciliation/lib/router/referral_reconciliation_router.gm.dart index 2845bd15e..6bbf820ab 100644 --- a/packages/referral_reconciliation/lib/router/referral_reconciliation_router.gr.dart +++ b/packages/referral_reconciliation/lib/router/referral_reconciliation_router.gm.dart @@ -30,9 +30,7 @@ import 'package:referral_reconciliation/pages/project_facility/project_facility_ import 'package:referral_reconciliation/pages/search_referral_reconciliations.dart' as _i8; -abstract class $ReferralReconciliationRoute extends _i9.RootStackRouter { - $ReferralReconciliationRoute({super.navigatorKey}); - +abstract class $ReferralReconciliationRoute extends _i9.AutoRouterModule { @override final Map pagesMap = { HFCreateReferralWrapperRoute.name: (routeData) { diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index 59f8cc243..f2ae420e7 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -117,10 +117,10 @@ packages: dependency: "direct main" description: name: auto_route - sha256: "6cad3f408863ffff2b5757967c802b18415dac4acb1b40c5cdd45d0a26e5080f" + sha256: "8de4a280ce7861ef24a6baa14c2b02b77a8c31b4a4c4f12d7b608678cc657c7f" url: "https://pub.dev" source: hosted - version: "8.1.3" + version: "8.1.4" auto_route_generator: dependency: "direct dev" description: @@ -186,7 +186,7 @@ packages: source: hosted version: "2.4.2" build_runner: - dependency: "direct main" + dependency: "direct dev" description: name: build_runner sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" @@ -333,10 +333,10 @@ packages: dependency: transitive description: name: cross_file - sha256: "55d7b444feb71301ef6b8838dbc1ae02e63dd48c8773f3810ff53bb1e2945b32" + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" url: "https://pub.dev" source: hosted - version: "0.3.4+1" + version: "0.3.4+2" crypto: dependency: transitive description: @@ -425,10 +425,10 @@ packages: dependency: "direct main" description: name: drift - sha256: "6acedc562ffeed308049f78fb1906abad3d65714580b6745441ee6d50ec564cd" + sha256: "15b51e0ee1970455c0c3f7e560f3ac02ecb9c04711a9657586e470b234659dba" url: "https://pub.dev" source: hosted - version: "2.18.0" + version: "2.20.0" drift_db_viewer: dependency: "direct main" description: @@ -441,10 +441,10 @@ packages: dependency: "direct dev" description: name: drift_dev - sha256: d9b020736ea85fff1568699ce18b89fabb3f0f042e8a7a05e84a3ec20d39acde + sha256: b9ec6159a731288e805a44225ccbebad507dd84d52ab71352c52584f13199d2d url: "https://pub.dev" source: hosted - version: "2.18.0" + version: "2.20.1" easy_stepper: dependency: transitive description: @@ -613,10 +613,10 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: "7eae679e596a44fdf761853a706f74979f8dd3cd92cf4e23cae161fda091b847" + sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" url: "https://pub.dev" source: hosted - version: "8.2.6" + version: "8.2.8" freezed: dependency: "direct dev" description: @@ -709,10 +709,10 @@ packages: dependency: transitive description: name: http - sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -933,18 +933,18 @@ packages: dependency: transitive description: name: package_info_plus - sha256: b93d8b4d624b4ea19b0a5a208b2d6eff06004bc3ce74c06040b120eeadd00ce0 + sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 url: "https://pub.dev" source: hosted - version: "8.0.0" + version: "8.0.2" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: f49918f3433a3146047372f9d4f1f847511f2acd5cd030e1f44fe5a50036b70e + sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "3.0.1" path: dependency: "direct main" description: @@ -1210,10 +1210,10 @@ packages: dependency: transitive description: name: sqlite3 - sha256: b384f598b813b347c5a7e5ffad82cbaff1bec3d1561af267041e66f6f0899295 + sha256: "45f168ae2213201b54e09429ed0c593dc2c88c924a1488d6f9c523a255d567cb" url: "https://pub.dev" source: hosted - version: "2.4.3" + version: "2.4.6" sqlite3_flutter_libs: dependency: "direct main" description: @@ -1226,10 +1226,10 @@ packages: dependency: transitive description: name: sqlparser - sha256: ade9a67fd70d0369329ed3373208de7ebd8662470e8c396fc8d0d60f9acdfc9f + sha256: "3be52b4968fc2f098ba735863404756d2fe3ea0729cf006a5b5612618f74ca04" url: "https://pub.dev" source: hosted - version: "0.36.0" + version: "0.37.1" stack_trace: dependency: transitive description: @@ -1386,18 +1386,18 @@ packages: dependency: transitive description: name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062 url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "1.0.0" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: "58c6666b342a38816b2e7e50ed0f1e261959630becd4c879c4f26bfa14aa5a42" + sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b url: "https://pub.dev" source: hosted - version: "2.4.5" + version: "2.4.0" webkit_inspection_protocol: dependency: transitive description: diff --git a/packages/referral_reconciliation/pubspec.yaml b/packages/referral_reconciliation/pubspec.yaml index 49c1b321c..fe2ed6307 100644 --- a/packages/referral_reconciliation/pubspec.yaml +++ b/packages/referral_reconciliation/pubspec.yaml @@ -26,7 +26,6 @@ dependencies: uuid: ^4.4.0 recase: ^4.1.0 pluto_grid: ^8.0.0 - build_runner: ^2.2.1 fluttertoast: ^8.1.2 overlay_builder: ^1.1.0 sqlite3_flutter_libs: ^0.5.10 diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart index ba5347392..472f88e9b 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart @@ -11,7 +11,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:registration_delivery/models/entities/registration_delivery_enums.dart'; import 'package:registration_delivery/utils/constants.dart'; -import '../../router/registration_delivery_router.gr.dart'; +import '../../router/registration_delivery_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart index 4dd644975..e0543da70 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart @@ -13,7 +13,7 @@ import 'package:registration_delivery/pages/beneficiary/widgets/past_delivery.da import '../../blocs/delivery_intervention/deliver_intervention.dart'; import '../../blocs/household_overview/household_overview.dart'; import '../../models/entities/additional_fields_type.dart'; -import '../../router/registration_delivery_router.gr.dart'; +import '../../router/registration_delivery_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart index edcf6340b..a8f8f6bd6 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart @@ -11,7 +11,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:registration_delivery/models/entities/deliver_strategy_type.dart'; import 'package:registration_delivery/registration_delivery.dart'; -import 'package:registration_delivery/router/registration_delivery_router.gr.dart'; +import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; import 'package:registration_delivery/utils/utils.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart index 268f64139..3d06173d8 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart @@ -9,7 +9,7 @@ import 'package:registration_delivery/blocs/delivery_intervention/deliver_interv import 'package:registration_delivery/blocs/household_overview/household_overview.dart'; import 'package:registration_delivery/models/entities/additional_fields_type.dart'; import 'package:registration_delivery/models/entities/status.dart'; -import 'package:registration_delivery/router/registration_delivery_router.gr.dart'; +import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; import 'package:registration_delivery/utils/constants.dart'; import 'package:registration_delivery/utils/utils.dart'; import 'package:registration_delivery/widgets/back_navigation_help_header.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart b/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart index 85a447b59..74cb1f27a 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart @@ -22,7 +22,7 @@ import '../../models/entities/additional_fields_type.dart'; import '../../models/entities/status.dart'; import '../../models/entities/task.dart'; import '../../models/entities/task_resource.dart'; -import '../../router/registration_delivery_router.gr.dart'; +import '../../router/registration_delivery_router.gm.dart'; import '../../utils/constants.dart'; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index 951a465f5..61ca961b9 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -14,7 +14,7 @@ import '../../blocs/search_households/search_households.dart'; import '../../models/entities/household.dart'; import '../../models/entities/registration_delivery_enums.dart'; import '../../models/entities/status.dart'; -import '../../router/registration_delivery_router.gr.dart'; +import '../../router/registration_delivery_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/action_card/action_card.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart b/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart index d8b027b33..16b58bd2a 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart @@ -14,7 +14,7 @@ import '../../blocs/household_overview/household_overview.dart'; import '../../models/entities/additional_fields_type.dart'; import '../../models/entities/status.dart'; import '../../models/entities/task.dart'; -import '../../router/registration_delivery_router.gr.dart'; +import '../../router/registration_delivery_router.gm.dart'; import '../../utils/constants.dart'; import '../../widgets/back_navigation_help_header.dart'; import '../../widgets/localized.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart b/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart index 793941c5a..256fb74ef 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart @@ -11,7 +11,7 @@ import '../../blocs/household_overview/household_overview.dart'; import '../../blocs/referral_management/referral_management.dart'; import '../../models/entities/additional_fields_type.dart'; import '../../models/entities/referral.dart'; -import '../../router/registration_delivery_router.gr.dart'; +import '../../router/registration_delivery_router.gm.dart'; import '../../utils/constants.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart index 9b8c22a4b..033d184ac 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart @@ -7,7 +7,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:registration_delivery/models/entities/additional_fields_type.dart'; import 'package:registration_delivery/registration_delivery.dart'; -import 'package:registration_delivery/router/registration_delivery_router.gr.dart'; +import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; import '../../models/entities/status.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart b/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart index 2c49a7b51..b09067fe2 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart @@ -11,7 +11,7 @@ import '../../blocs/household_overview/household_overview.dart'; import '../../blocs/side_effects/side_effects.dart'; import '../../models/entities/side_effect.dart'; import '../../models/entities/task.dart'; -import '../../router/registration_delivery_router.gr.dart'; +import '../../router/registration_delivery_router.gm.dart'; import '../../utils/constants.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart index 27478929b..8ff5bcfc5 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart @@ -4,7 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:registration_delivery/registration_delivery.dart'; -import '../../../router/registration_delivery_router.gr.dart'; +import '../../../router/registration_delivery_router.gm.dart'; import '../../../utils/i18_key_constants.dart' as i18; import '../../../widgets/localized.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart index 1fc24b262..e1b7e02a0 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart @@ -4,7 +4,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; import 'package:flutter/material.dart'; -import '../../../router/registration_delivery_router.gr.dart'; +import '../../../router/registration_delivery_router.gm.dart'; import '../../../widgets/localized.dart'; import '../../../utils/i18_key_constants.dart' as i18; diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart index fd24d6e08..10b7e82b8 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart @@ -6,7 +6,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import '../../../utils/i18_key_constants.dart' as i18; import '../../../widgets/localized.dart'; import '../../blocs/search_households/search_bloc_common_wrapper.dart'; -import '../../router/registration_delivery_router.gr.dart'; +import '../../router/registration_delivery_router.gm.dart'; @RoutePage() class BeneficiaryAcknowledgementPage extends LocalizedStatefulWidget { diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart index 7ffe27a7e..55d762731 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart @@ -6,7 +6,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:registration_delivery/registration_delivery.dart'; -import 'package:registration_delivery/router/registration_delivery_router.gr.dart'; +import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; import '../../models/entities/additional_fields_type.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart index 6efe50562..8d0f29b23 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart @@ -13,7 +13,7 @@ import 'package:registration_delivery/utils/extensions/extensions.dart'; import '../../blocs/beneficiary_registration/beneficiary_registration.dart'; import '../../models/entities/household.dart'; -import '../../router/registration_delivery_router.gr.dart'; +import '../../router/registration_delivery_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index e472d9bd7..135e4c8ab 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -11,7 +11,7 @@ import 'package:reactive_forms/reactive_forms.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; import '../../blocs/beneficiary_registration/beneficiary_registration.dart'; -import '../../router/registration_delivery_router.gr.dart'; +import '../../router/registration_delivery_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index ea2e7f17f..971668676 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -20,7 +20,7 @@ import 'package:registration_delivery/utils/extensions/extensions.dart'; import '../../blocs/beneficiary_registration/beneficiary_registration.dart'; import '../../blocs/household_overview/household_overview.dart'; -import '../../router/registration_delivery_router.gr.dart'; +import '../../router/registration_delivery_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; diff --git a/packages/registration_delivery/lib/pages/reason_for_deletion.dart b/packages/registration_delivery/lib/pages/reason_for_deletion.dart index e0a453596..e001b3627 100644 --- a/packages/registration_delivery/lib/pages/reason_for_deletion.dart +++ b/packages/registration_delivery/lib/pages/reason_for_deletion.dart @@ -7,7 +7,7 @@ import 'package:reactive_forms/reactive_forms.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../blocs/household_overview/household_overview.dart'; -import '../router/registration_delivery_router.gr.dart'; +import '../router/registration_delivery_router.gm.dart'; import '../utils/utils.dart'; import '../widgets/back_navigation_help_header.dart'; import '../widgets/localized.dart'; diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index 9340a4b9a..0cf5c4650 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -10,7 +10,7 @@ import 'package:registration_delivery/registration_delivery.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../models/entities/status.dart'; -import '../router/registration_delivery_router.gr.dart'; +import '../router/registration_delivery_router.gm.dart'; import '../utils/global_search_parameters.dart'; import '../utils/utils.dart'; import '../widgets/back_navigation_help_header.dart'; diff --git a/packages/registration_delivery/lib/pages/summary_page.dart b/packages/registration_delivery/lib/pages/summary_page.dart index cccad6777..7e60f3da5 100644 --- a/packages/registration_delivery/lib/pages/summary_page.dart +++ b/packages/registration_delivery/lib/pages/summary_page.dart @@ -5,7 +5,7 @@ import 'package:digit_components/widgets/atoms/details_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:registration_delivery/models/entities/additional_fields_type.dart'; -import 'package:registration_delivery/router/registration_delivery_router.gr.dart'; +import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; import 'package:registration_delivery/widgets/back_navigation_help_header.dart'; import 'package:registration_delivery/widgets/showcase/showcase_button.dart'; diff --git a/packages/registration_delivery/lib/router/registration_delivery_router.dart b/packages/registration_delivery/lib/router/registration_delivery_router.dart index d423c9304..14d14e52f 100644 --- a/packages/registration_delivery/lib/router/registration_delivery_router.dart +++ b/packages/registration_delivery/lib/router/registration_delivery_router.dart @@ -1,9 +1,9 @@ import 'package:auto_route/auto_route.dart'; -import 'registration_delivery_router.gr.dart'; +import 'registration_delivery_router.gm.dart'; -@AutoRouterConfig() -class RegistrationDeliveryRoute extends RootStackRouter { +@AutoRouterConfig.module() +class RegistrationDeliveryRoute extends $RegistrationDeliveryRoute { @override RouteType get defaultRouteType => const RouteType.material(); diff --git a/packages/registration_delivery/lib/router/registration_delivery_router.gr.dart b/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart similarity index 99% rename from packages/registration_delivery/lib/router/registration_delivery_router.gr.dart rename to packages/registration_delivery/lib/router/registration_delivery_router.gm.dart index 84195cc00..9f7594328 100644 --- a/packages/registration_delivery/lib/router/registration_delivery_router.gr.dart +++ b/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart @@ -62,9 +62,7 @@ import 'package:registration_delivery/pages/search_beneficiary.dart' as _i21; import 'package:registration_delivery/pages/summary_page.dart' as _i24; import 'package:registration_delivery/registration_delivery.dart' as _i28; -abstract class $RegistrationDeliveryRoute extends _i25.RootStackRouter { - $RegistrationDeliveryRoute({super.navigatorKey}); - +abstract class $RegistrationDeliveryRoute extends _i25.AutoRouterModule { @override final Map pagesMap = { BeneficiaryAcknowledgementRoute.name: (routeData) { diff --git a/packages/registration_delivery/lib/widgets/member_card/member_card.dart b/packages/registration_delivery/lib/widgets/member_card/member_card.dart index dde5c7a40..91f6bb67b 100644 --- a/packages/registration_delivery/lib/widgets/member_card/member_card.dart +++ b/packages/registration_delivery/lib/widgets/member_card/member_card.dart @@ -12,7 +12,7 @@ import '../../blocs/household_overview/household_overview.dart'; import '../../models/entities/side_effect.dart'; import '../../models/entities/status.dart'; import '../../models/entities/task.dart'; -import '../../router/registration_delivery_router.gr.dart'; +import '../../router/registration_delivery_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../action_card/action_card.dart'; diff --git a/packages/registration_delivery/lib/widgets/showcase/showcase_button.dart b/packages/registration_delivery/lib/widgets/showcase/showcase_button.dart index c094fc57b..32f0e5f1b 100644 --- a/packages/registration_delivery/lib/widgets/showcase/showcase_button.dart +++ b/packages/registration_delivery/lib/widgets/showcase/showcase_button.dart @@ -4,7 +4,7 @@ import 'package:digit_showcase/showcase_widget.dart'; import 'package:flutter/material.dart'; import 'package:registration_delivery/blocs/app_localization.dart'; -import '../../router/registration_delivery_router.gr.dart'; +import '../../router/registration_delivery_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../localized.dart'; import 'config/showcase_constants.dart'; diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 72a341750..7b1a05011 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -186,7 +186,7 @@ packages: source: hosted version: "2.4.2" build_runner: - dependency: "direct main" + dependency: "direct dev" description: name: build_runner sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index e455cc7ff..a958b4cc5 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -29,7 +29,6 @@ dependencies: pluto_grid: ^8.0.0 digit_scanner: ^1.0.0+1 digit_components: ^1.0.1+1 - build_runner: ^2.2.1 fluttertoast: ^8.1.2 overlay_builder: ^1.1.0 sqlite3_flutter_libs: ^0.5.10 @@ -52,8 +51,8 @@ dev_dependencies: json_serializable: ^6.4.0 drift_dev: ^2.14.1 bloc_test: ^9.1.0 - build_runner: ^2.4.11 mocktail: ^1.0.2 + build_runner: ^2.4.11 dart_mappable_builder: ^4.2.2 auto_route_generator: ^8.0.0 From ea28053d637998a6af16d6a36982ebde1c8ba1ee Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Thu, 5 Sep 2024 17:55:50 +0530 Subject: [PATCH 090/241] Updated dart yml file to incorporate the latest flutter version Updated melos yaml file to reduce build time deleted duplicate LocalizationParams class in utils.dart --- .github/workflows/dart.yml | 2 +- .../lib/router/app_router.gr.dart | 2 +- .../lib/utils/utils.dart | 43 +----- .../pubspec.yaml | 2 +- .../digit_entity/hooks/pubspec.lock | 14 +- .../digit_entity/hooks/pubspec.yaml | 8 +- .../freezed_bloc/hooks/pubspec.lock | 6 +- .../freezed_bloc/hooks/pubspec.yaml | 2 +- melos.yaml | 22 +-- packages/digit_scanner/pubspec.lock | 102 ++++++++++++++ packages/forms_engine/pubspec.lock | 130 +++++++++++++++++- 11 files changed, 256 insertions(+), 77 deletions(-) diff --git a/.github/workflows/dart.yml b/.github/workflows/dart.yml index 35a11152d..85b0c19c3 100644 --- a/.github/workflows/dart.yml +++ b/.github/workflows/dart.yml @@ -22,7 +22,7 @@ jobs: - name: Flutter action uses: subosito/flutter-action@v2.8.0 with: - flutter-version: "3.16.5" + flutter-version: "3.22.1" - name: Generate models run: ./tools/install_bricks.sh diff --git a/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart b/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart index b5bcbdd5c..68d85a6af 100644 --- a/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart +++ b/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart @@ -309,7 +309,7 @@ abstract class _$AppRouter extends RootStackRouter { ...AttendanceRoute().pagesMap, ...ReferralReconciliationRoute().pagesMap, ...DigitScannerPackageRoute().pagesMap, - ...DashboardRoute().pagesMap, + ...RegistrationDeliveryRoute().pagesMap, ...ClosedHouseholdPackageRoute().pagesMap, ...DashboardRoute().pagesMap, }; diff --git a/apps/health_campaign_field_worker_app/lib/utils/utils.dart b/apps/health_campaign_field_worker_app/lib/utils/utils.dart index a8bb1f8b2..37989ce0f 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/utils.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/utils.dart @@ -442,45 +442,4 @@ class LocalizationParams { Locale? get locale => _locale; bool? get exclude => _exclude; -} - -class LocalizationParams { - static final LocalizationParams _singleton = LocalizationParams._internal(); - - factory LocalizationParams() { - return _singleton; - } - - LocalizationParams._internal(); - - List? _code; - String? _module; - Locale? _locale; - bool? _exclude = true; - - void setCode(List? code) { - _code = code; - } - - void setModule(String? module, bool? exclude) { - _module = module; - _exclude = exclude; - } - - void setLocale(Locale locale) { - _locale = locale; - } - - void clear() { - _code = null; - _module = null; - } - - List? get code => _code; - - String? get module => _module; - - Locale? get locale => _locale; - - bool? get exclude => _exclude; -} +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index fd7d38ed3..d405730f5 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -24,7 +24,7 @@ dependencies: collection: ^1.18.0 reactive_forms: ^17.0.0 location: ^6.0.2 - dart_mappable: ^4.2.0 + dart_mappable: ^4.2.2 dio: ^5.4.3+1 flutter_keyboard_visibility: ^5.4.1 isar: ^3.1.0+1 diff --git a/mason_templates/digit_entity/hooks/pubspec.lock b/mason_templates/digit_entity/hooks/pubspec.lock index 4c0f1c7ed..336b23c54 100644 --- a/mason_templates/digit_entity/hooks/pubspec.lock +++ b/mason_templates/digit_entity/hooks/pubspec.lock @@ -93,10 +93,10 @@ packages: dependency: "direct dev" description: name: build_runner - sha256: "220ae4553e50d7c21a17c051afc7b183d28a24a420502e842f303f8e4e6edced" + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" url: "https://pub.dev" source: hosted - version: "2.4.4" + version: "2.4.11" build_runner_core: dependency: transitive description: @@ -284,10 +284,10 @@ packages: dependency: "direct dev" description: name: lints - sha256: "6b0206b0bf4f04961fc5438198ccb3a885685cd67d4d4a32cc20ad7f8adbe015" + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "4.0.0" logging: dependency: transitive description: @@ -364,10 +364,10 @@ packages: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" pointycastle: dependency: transitive description: @@ -601,4 +601,4 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.0.0 <4.0.0" + dart: ">=3.4.0 <4.0.0" diff --git a/mason_templates/digit_entity/hooks/pubspec.yaml b/mason_templates/digit_entity/hooks/pubspec.yaml index 26db869d1..159b35c54 100644 --- a/mason_templates/digit_entity/hooks/pubspec.yaml +++ b/mason_templates/digit_entity/hooks/pubspec.yaml @@ -6,14 +6,14 @@ environment: sdk: '>=3.0.0 <=4.0.0' dev_dependencies: - build_runner: ^2.3.3 + build_runner: ^2.4.11 dart_mappable_builder: path: ../../../packages/dart_mappable_builder - lints: ^2.0.0 + lints: ^4.0.0 test: ^1.16.0 dependencies: collection: ^1.17.0 - dart_mappable: ^4.2.0 + dart_mappable: ^4.2.2 mason: any - path: ^1.8.3 + path: ^1.9.0 recase: ^4.1.0 diff --git a/mason_templates/freezed_bloc/hooks/pubspec.lock b/mason_templates/freezed_bloc/hooks/pubspec.lock index 13b67253e..c65f972de 100644 --- a/mason_templates/freezed_bloc/hooks/pubspec.lock +++ b/mason_templates/freezed_bloc/hooks/pubspec.lock @@ -85,10 +85,10 @@ packages: dependency: "direct main" description: name: build_runner - sha256: "220ae4553e50d7c21a17c051afc7b183d28a24a420502e842f303f8e4e6edced" + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" url: "https://pub.dev" source: hosted - version: "2.4.4" + version: "2.4.11" build_runner_core: dependency: transitive description: @@ -474,4 +474,4 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.0.0 <4.0.0" + dart: ">=3.4.0 <4.0.0" diff --git a/mason_templates/freezed_bloc/hooks/pubspec.yaml b/mason_templates/freezed_bloc/hooks/pubspec.yaml index 36a6f8093..f1cd2fc92 100644 --- a/mason_templates/freezed_bloc/hooks/pubspec.yaml +++ b/mason_templates/freezed_bloc/hooks/pubspec.yaml @@ -6,4 +6,4 @@ environment: dependencies: mason: any recase: ^4.1.0 - build_runner: ^2.2.1 + build_runner: ^2.4.11 diff --git a/melos.yaml b/melos.yaml index 7e89a33b8..9355b7601 100644 --- a/melos.yaml +++ b/melos.yaml @@ -14,16 +14,17 @@ command: post: melos generate scripts: - generate: - description: Generate code for all packages. - run: melos run generate-flutter --no-select && melos run generate-dart --no-select + description: Generate code for all packages (Flutter and Dart). + run: | + melos run generate-flutter --no-select & + melos run generate-dart --no-select exec: - concurrency: 1 + concurrency: 2 generate-flutter: - description: Generate code for all flutter packages. - run: flutter packages run build_runner build --delete-conflicting-outputs + description: Generate code for all Flutter packages. + run: flutter packages run build_runner build exec: concurrency: 1 packageFilters: @@ -32,8 +33,8 @@ scripts: - build_runner generate-dart: - description: Generate code for all packages. - run: dart run build_runner build --delete-conflicting-outputs + description: Generate code for all Dart packages. + run: dart run build_runner build exec: concurrency: 1 packageFilters: @@ -44,7 +45,7 @@ scripts: generate-hooks: description: Generate hooks for all packages. - run: dart run build_runner build --delete-conflicting-outputs + run: dart run build_runner build exec: concurrency: 1 packageFilters: @@ -80,7 +81,7 @@ scripts: description: Run all Flutter tests in this project. run: melos run test --no-select exec: - concurrency: 1 + concurrency: 2 packageFilters: flutter: true dirExists: test @@ -100,4 +101,3 @@ scripts: concurrency: 1 packageFilters: dart: true - diff --git a/packages/digit_scanner/pubspec.lock b/packages/digit_scanner/pubspec.lock index 530581a83..26c959496 100644 --- a/packages/digit_scanner/pubspec.lock +++ b/packages/digit_scanner/pubspec.lock @@ -17,6 +17,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.4.1" + ansicolor: + dependency: transitive + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + url: "https://pub.dev" + source: hosted + version: "2.0.3" archive: dependency: transitive description: @@ -321,6 +329,21 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" + dart_mappable: + dependency: transitive + description: + name: dart_mappable + sha256: "47269caf2060533c29b823ff7fa9706502355ffcb61e7f2a374e3a0fb2f2c3f0" + url: "https://pub.dev" + source: hosted + version: "4.2.2" + dart_mappable_builder: + dependency: "direct overridden" + description: + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.3" dart_style: dependency: transitive description: @@ -344,6 +367,37 @@ packages: relative: true source: path version: "1.0.1+1" + digit_data_model: + dependency: "direct overridden" + description: + path: "../digit_data_model" + relative: true + source: path + version: "1.0.3+1" + dio: + dependency: transitive + description: + name: dio + sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" + url: "https://pub.dev" + source: hosted + version: "5.7.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "33259a9276d6cea88774a0000cfae0d861003497755969c92faa223108620dc8" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + drift: + dependency: transitive + description: + name: drift + sha256: "15b51e0ee1970455c0c3f7e560f3ac02ecb9c04711a9657586e470b234659dba" + url: "https://pub.dev" + source: hosted + version: "2.20.0" easy_stepper: dependency: transitive description: @@ -636,6 +690,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" + isar: + dependency: transitive + description: + name: isar + sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" + isar_flutter_libs: + dependency: transitive + description: + name: isar_flutter_libs + sha256: bc6768cc4b9c61aabff77152e7f33b4b17d2fc93134f7af1c3dd51500fe8d5e8 + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" js: dependency: transitive description: @@ -964,6 +1034,14 @@ packages: url: "https://pub.dev" source: hosted version: "17.0.1" + recase: + dependency: transitive + description: + name: recase + sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 + url: "https://pub.dev" + source: hosted + version: "4.1.0" remove_emoji_input_formatter: dependency: transitive description: @@ -1057,6 +1135,22 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.0" + sqlite3: + dependency: transitive + description: + name: sqlite3 + sha256: "45f168ae2213201b54e09429ed0c593dc2c88c924a1488d6f9c523a255d567cb" + url: "https://pub.dev" + source: hosted + version: "2.4.6" + sqlite3_flutter_libs: + dependency: transitive + description: + name: sqlite3_flutter_libs + sha256: "62bbb4073edbcdf53f40c80775f33eea01d301b7b81417e5b3fb7395416258c1" + url: "https://pub.dev" + source: hosted + version: "0.5.24" stack_trace: dependency: transitive description: @@ -1137,6 +1231,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + type_plus: + dependency: transitive + description: + name: type_plus + sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 + url: "https://pub.dev" + source: hosted + version: "2.1.1" typed_data: dependency: transitive description: diff --git a/packages/forms_engine/pubspec.lock b/packages/forms_engine/pubspec.lock index 54e0eec74..ef8e143ad 100644 --- a/packages/forms_engine/pubspec.lock +++ b/packages/forms_engine/pubspec.lock @@ -17,6 +17,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.2.0" + ansicolor: + dependency: transitive + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + url: "https://pub.dev" + source: hosted + version: "2.0.3" archive: dependency: transitive description: @@ -209,6 +217,21 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" + dart_mappable: + dependency: transitive + description: + name: dart_mappable + sha256: "47269caf2060533c29b823ff7fa9706502355ffcb61e7f2a374e3a0fb2f2c3f0" + url: "https://pub.dev" + source: hosted + version: "4.2.2" + dart_mappable_builder: + dependency: "direct overridden" + description: + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.3" dart_style: dependency: transitive description: @@ -232,6 +255,37 @@ packages: relative: true source: path version: "1.0.1+1" + digit_data_model: + dependency: "direct overridden" + description: + path: "../digit_data_model" + relative: true + source: path + version: "1.0.3+1" + dio: + dependency: transitive + description: + name: dio + sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" + url: "https://pub.dev" + source: hosted + version: "5.7.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "33259a9276d6cea88774a0000cfae0d861003497755969c92faa223108620dc8" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + drift: + dependency: transitive + description: + name: drift + sha256: "15b51e0ee1970455c0c3f7e560f3ac02ecb9c04711a9657586e470b234659dba" + url: "https://pub.dev" + source: hosted + version: "2.20.0" easy_stepper: dependency: transitive description: @@ -281,10 +335,10 @@ packages: dependency: "direct main" description: name: flutter_bloc - sha256: e74efb89ee6945bcbce74a5b3a5a3376b088e5f21f55c263fc38cbdc6237faae + sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a url: "https://pub.dev" source: hosted - version: "8.1.3" + version: "8.1.6" flutter_focus_watcher: dependency: transitive description: @@ -484,6 +538,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" + isar: + dependency: transitive + description: + name: isar + sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" + isar_flutter_libs: + dependency: transitive + description: + name: isar_flutter_libs + sha256: bc6768cc4b9c61aabff77152e7f33b4b17d2fc93134f7af1c3dd51500fe8d5e8 + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" js: dependency: transitive description: @@ -616,10 +686,10 @@ packages: dependency: transitive description: name: mocktail - sha256: f603ebd85a576e5914870b02e5839fc5d0243b867bf710651cf239a28ebb365e + sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.0.4" nested: dependency: transitive description: @@ -680,10 +750,10 @@ packages: dependency: transitive description: name: path_provider - sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" path_provider_android: dependency: transitive description: @@ -804,6 +874,14 @@ packages: url: "https://pub.dev" source: hosted version: "17.0.1" + recase: + dependency: transitive + description: + name: recase + sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 + url: "https://pub.dev" + source: hosted + version: "4.1.0" remove_emoji_input_formatter: dependency: transitive description: @@ -889,6 +967,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + sqlite3: + dependency: transitive + description: + name: sqlite3 + sha256: "45f168ae2213201b54e09429ed0c593dc2c88c924a1488d6f9c523a255d567cb" + url: "https://pub.dev" + source: hosted + version: "2.4.6" + sqlite3_flutter_libs: + dependency: transitive + description: + name: sqlite3_flutter_libs + sha256: "62bbb4073edbcdf53f40c80775f33eea01d301b7b81417e5b3fb7395416258c1" + url: "https://pub.dev" + source: hosted + version: "0.5.24" stack_trace: dependency: transitive description: @@ -961,6 +1063,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + type_plus: + dependency: transitive + description: + name: type_plus + sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 + url: "https://pub.dev" + source: hosted + version: "2.1.1" typed_data: dependency: transitive description: @@ -969,6 +1079,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + uuid: + dependency: transitive + description: + name: uuid + sha256: f33d6bb662f0e4f79dcd7ada2e6170f3b3a2530c28fc41f49a411ddedd576a77 + url: "https://pub.dev" + source: hosted + version: "4.5.0" vector_math: dependency: transitive description: From 033b205f35e8c31b7791c03468350138a58aa26d Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Thu, 5 Sep 2024 18:06:06 +0530 Subject: [PATCH 091/241] Updated melos.yaml --- melos.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/melos.yaml b/melos.yaml index 9355b7601..99ae6a26a 100644 --- a/melos.yaml +++ b/melos.yaml @@ -24,7 +24,7 @@ scripts: generate-flutter: description: Generate code for all Flutter packages. - run: flutter packages run build_runner build + run: flutter packages run build_runner build --delete-conflicting-outputs exec: concurrency: 1 packageFilters: @@ -34,7 +34,7 @@ scripts: generate-dart: description: Generate code for all Dart packages. - run: dart run build_runner build + run: dart run build_runner build --delete-conflicting-outputs exec: concurrency: 1 packageFilters: @@ -45,7 +45,7 @@ scripts: generate-hooks: description: Generate hooks for all packages. - run: dart run build_runner build + run: dart run build_runner build --delete-conflicting-outputs exec: concurrency: 1 packageFilters: From c2596f310865ce946dc25b9b1c1600c5c34e626f Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Thu, 5 Sep 2024 18:27:23 +0530 Subject: [PATCH 092/241] added flutter clean for .dart tool not found error --- .github/workflows/dart.yml | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/.github/workflows/dart.yml b/.github/workflows/dart.yml index 85b0c19c3..bf200da80 100644 --- a/.github/workflows/dart.yml +++ b/.github/workflows/dart.yml @@ -1,8 +1,3 @@ -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. - name: Run analysis and tests on: @@ -24,8 +19,35 @@ jobs: with: flutter-version: "3.22.1" + - name: Restore cache + id: cache + uses: actions/cache@v3 + with: + path: | + .pub-cache + apps/**/.dart_tool + packages/**/.dart_tool + key: ${{ runner.os }}-flutter-${{ hashFiles('**/pubspec.lock') }} + restore-keys: | + ${{ runner.os }}-flutter- + + - name: Clean previous builds + run: flutter clean + + - name: Install dependencies + run: flutter pub get + - name: Generate models run: ./tools/install_bricks.sh - name: Analyze code run: melos run analyze + + - name: Save cache + uses: actions/cache@v3 + with: + path: | + .pub-cache + apps/**/.dart_tool + packages/**/.dart_tool + key: ${{ runner.os }}-flutter-${{ hashFiles('**/pubspec.lock') }} From e5bf02a2f011403de89ff99cf0ae731140369b1b Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Thu, 5 Sep 2024 20:26:47 +0530 Subject: [PATCH 093/241] inventory package dart analyze fixes --- .../lib/models/entities/inventory_enums.dart | 4 +- .../entities/inventory_enums.mapper.dart | 8 +- .../lib/pages/reports/report_details.dart | 88 ++----------------- .../lib/router/inventory_router.dart | 2 - 4 files changed, 15 insertions(+), 87 deletions(-) diff --git a/packages/inventory_management/lib/models/entities/inventory_enums.dart b/packages/inventory_management/lib/models/entities/inventory_enums.dart index 088580334..71f754c35 100644 --- a/packages/inventory_management/lib/models/entities/inventory_enums.dart +++ b/packages/inventory_management/lib/models/entities/inventory_enums.dart @@ -6,9 +6,9 @@ part 'inventory_enums.mapper.dart'; @MappableEnum(caseStyle: CaseStyle.upperCase) enum InventoryManagementEnums { @MappableValue("waybill_quantity") - waybill_quantity, + wayBillQuantity, @MappableValue("vehicle_number") - vehicle_number, + vehicleNumber, @MappableValue("comments") comments, @MappableValue("deliveryTeam") diff --git a/packages/inventory_management/lib/models/entities/inventory_enums.mapper.dart b/packages/inventory_management/lib/models/entities/inventory_enums.mapper.dart index 429ff4cd5..233bdfeac 100644 --- a/packages/inventory_management/lib/models/entities/inventory_enums.mapper.dart +++ b/packages/inventory_management/lib/models/entities/inventory_enums.mapper.dart @@ -28,9 +28,9 @@ class InventoryManagementEnumsMapper InventoryManagementEnums decode(dynamic value) { switch (value) { case "waybill_quantity": - return InventoryManagementEnums.waybill_quantity; + return InventoryManagementEnums.wayBillQuantity; case "vehicle_number": - return InventoryManagementEnums.vehicle_number; + return InventoryManagementEnums.vehicleNumber; case "comments": return InventoryManagementEnums.comments; case "deliveryTeam": @@ -51,9 +51,9 @@ class InventoryManagementEnumsMapper @override dynamic encode(InventoryManagementEnums self) { switch (self) { - case InventoryManagementEnums.waybill_quantity: + case InventoryManagementEnums.wayBillQuantity: return "waybill_quantity"; - case InventoryManagementEnums.vehicle_number: + case InventoryManagementEnums.vehicleNumber: return "vehicle_number"; case InventoryManagementEnums.comments: return "comments"; diff --git a/packages/inventory_management/lib/pages/reports/report_details.dart b/packages/inventory_management/lib/pages/reports/report_details.dart index 64768051a..8d4fac243 100644 --- a/packages/inventory_management/lib/pages/reports/report_details.dart +++ b/packages/inventory_management/lib/pages/reports/report_details.dart @@ -21,7 +21,6 @@ import '../../models/entities/stock.dart'; import '../../models/entities/stock_reconciliation.dart'; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; -import '../facility_selection.dart'; @RoutePage() class InventoryReportDetailsPage extends LocalizedStatefulWidget { @@ -214,41 +213,9 @@ class InventoryReportDetailsPageState []; return InkWell( - onTap: () async { - final stockReconciliationBloc = - context.read< - StockReconciliationBloc>(); - - final facility = await context - .router - .push(InventoryFacilitySelectionRoute( - facilities: - facilities)) - as FacilityModel?; - - if (facility == null) - return; - form - .control(_facilityKey) - .value = - localizations.translate( - 'FAC_${facility.id}', - ); - - setState(() { - selectedFacilityId = - facility.id; - }); - stockReconciliationBloc.add( - StockReconciliationSelectFacilityEvent( - facility, - ), - ); - - handleSelection( - form, - context.read< - InventoryReportBloc>()); + onTap: () { + handleFacilitySelection( + form, facilities); }, child: IgnorePointer( child: DigitTextFormField( @@ -269,48 +236,9 @@ class InventoryReportDetailsPageState _facilityKey, readOnly: false, isRequired: true, - onTap: () async { - final stockReconciliationBloc = - context.read< - StockReconciliationBloc>(); - - final facility = await context - .router - .push(InventoryFacilitySelectionRoute( - facilities: - facilities)) - as FacilityModel?; - - if (facility == null) - return; - form - .control( - _facilityKey) - .value = - localizations - .translate( - 'FAC_${facility.id}', - ); - - setState(() { - selectedFacilityId = - facility.id; - }); - form - .control( - _facilityKey) - .value = facility; - stockReconciliationBloc - .add( - StockReconciliationSelectFacilityEvent( - facility, - ), - ); - - handleSelection( - form, - context.read< - InventoryReportBloc>()); + onTap: () { + handleFacilitySelection( + form, facilities); }, ), ), @@ -811,7 +739,9 @@ class InventoryReportDetailsPageState if (facility == null) { return; } - form.control(_facilityKey).value = facility; + form.control(_facilityKey).value = localizations.translate( + 'FAC_${facility.id}', + ); stockReconciliationBloc.add( StockReconciliationSelectFacilityEvent( facility, diff --git a/packages/inventory_management/lib/router/inventory_router.dart b/packages/inventory_management/lib/router/inventory_router.dart index 7f2e849f5..e333f5c14 100644 --- a/packages/inventory_management/lib/router/inventory_router.dart +++ b/packages/inventory_management/lib/router/inventory_router.dart @@ -4,10 +4,8 @@ import 'inventory_router.gm.dart'; @AutoRouterConfig.module() class InventoryRoute extends $InventoryRoute { - @override RouteType get defaultRouteType => const RouteType.material(); - @override List routes = [ AutoRoute( page: ManageStocksRoute.page, From 218e9d01f547f23b98cf40a69a3ae1c4a9b56e86 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Thu, 5 Sep 2024 20:27:44 +0530 Subject: [PATCH 094/241] attendance package dart analyze fixes --- .../attendance_management/lib/router/attendance_router.dart | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/attendance_management/lib/router/attendance_router.dart b/packages/attendance_management/lib/router/attendance_router.dart index a35c84531..941cf3044 100644 --- a/packages/attendance_management/lib/router/attendance_router.dart +++ b/packages/attendance_management/lib/router/attendance_router.dart @@ -4,10 +4,8 @@ import 'attendance_router.gm.dart'; @AutoRouterConfig.module() class AttendanceRoute extends $AttendanceRoute { - @override RouteType get defaultRouteType => const RouteType.material(); - @override List routes = [ AutoRoute(page: ManageAttendanceRoute.page), AutoRoute( From 54b40b55405e72822cec5d9dd1e38ed0244deecf Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Thu, 5 Sep 2024 20:29:17 +0530 Subject: [PATCH 095/241] closed_household package dart analyze fixes --- .../lib/pages/closed_household_summary.dart | 6 ++---- .../lib/router/closed_household_router.dart | 2 -- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/closed_household/lib/pages/closed_household_summary.dart b/packages/closed_household/lib/pages/closed_household_summary.dart index 826af79f4..a6f642886 100644 --- a/packages/closed_household/lib/pages/closed_household_summary.dart +++ b/packages/closed_household/lib/pages/closed_household_summary.dart @@ -151,10 +151,8 @@ class ClosedHouseholdSummaryPageState LabelValuePair( label: localizations.translate(i18 .closeHousehold.closeHouseholdGpsAccuracyLabel), - value: householdState.locationAccuracy != null - ? '${householdState.locationAccuracy.toStringAsFixed(2)} ${localizations.translate(i18.common.coreCommonMeters)}' - : localizations - .translate(i18.common.coreCommonNA), + value: + '${householdState.locationAccuracy.toStringAsFixed(2)} ${localizations.translate(i18.common.coreCommonMeters)}', ), ]), ), diff --git a/packages/closed_household/lib/router/closed_household_router.dart b/packages/closed_household/lib/router/closed_household_router.dart index 466c07009..29c5b6526 100644 --- a/packages/closed_household/lib/router/closed_household_router.dart +++ b/packages/closed_household/lib/router/closed_household_router.dart @@ -4,10 +4,8 @@ import 'closed_household_router.gm.dart'; @AutoRouterConfig.module() class ClosedHouseholdPackageRoute extends $ClosedHouseholdPackageRoute { - @override RouteType get defaultRouteType => const RouteType.material(); - @override List routes = [ AutoRoute( page: ClosedHouseholdWrapperRoute.page, From 2cae9a0725ad049d58153e74aa83e084ec61b5dd Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Fri, 6 Sep 2024 12:07:28 +0530 Subject: [PATCH 096/241] digit_dss package dart analyze fixes --- .../models/app_config/app_config_model.dart | 1 - packages/digit_dss/lib/blocs/dashboard.dart | 6 +-- .../lib/models/entities/chart_data.dart | 1 - .../lib/models/entities/insight.dart | 1 - .../digit_dss/lib/models/entities/plots.dart | 1 - .../lib/pages/dashboard/dashboard.dart | 37 +++++++------- .../lib/router/dashboard_router.dart | 2 - .../widgets/back_navigation_help_header.dart | 2 +- .../dashboard/dashboard_metric_card.dart | 51 ++++++++++--------- 9 files changed, 50 insertions(+), 52 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart index a6ec53262..763d72d27 100644 --- a/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart +++ b/apps/health_campaign_field_worker_app/lib/models/app_config/app_config_model.dart @@ -1,4 +1,3 @@ -import 'package:digit_dss/digit_dss.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import '../privacy_notice/privacy_notice_model.dart'; diff --git a/packages/digit_dss/lib/blocs/dashboard.dart b/packages/digit_dss/lib/blocs/dashboard.dart index b41be19c3..fa88ad092 100644 --- a/packages/digit_dss/lib/blocs/dashboard.dart +++ b/packages/digit_dss/lib/blocs/dashboard.dart @@ -80,11 +80,11 @@ class DashboardBloc extends Bloc { ), ); List attendeesIndividualIds = []; - registers.forEach((r) { + for (var r in registers) { r.attendees?.where((a) => a.individualId != null).forEach((att) { attendeesIndividualIds.add(att.individualId.toString()); }); - }); + } final individuals = await individualDataRepository.search(IndividualSearchModel( id: attendeesIndividualIds, @@ -186,7 +186,7 @@ class DashboardBloc extends Bloc { .map((e) { final headerData = transformToLocaleCode(e.name ?? ''); return TableHeader( - headerData ?? '', + headerData, cellKey: e.name, ); }).toList() ?? diff --git a/packages/digit_dss/lib/models/entities/chart_data.dart b/packages/digit_dss/lib/models/entities/chart_data.dart index 5e66310db..184c533f6 100644 --- a/packages/digit_dss/lib/models/entities/chart_data.dart +++ b/packages/digit_dss/lib/models/entities/chart_data.dart @@ -1,6 +1,5 @@ // Generated using mason. Do not modify by hand import 'package:dart_mappable/dart_mappable.dart'; -import 'package:digit_data_model/data_model.dart'; import 'package:digit_dss/models/entities/insight.dart'; import 'package:digit_dss/models/entities/plots.dart'; diff --git a/packages/digit_dss/lib/models/entities/insight.dart b/packages/digit_dss/lib/models/entities/insight.dart index 763711b0d..d87dd17f1 100644 --- a/packages/digit_dss/lib/models/entities/insight.dart +++ b/packages/digit_dss/lib/models/entities/insight.dart @@ -1,6 +1,5 @@ // Generated using mason. Do not modify by hand import 'package:dart_mappable/dart_mappable.dart'; -import 'package:digit_data_model/data_model.dart'; part 'insight.mapper.dart'; diff --git a/packages/digit_dss/lib/models/entities/plots.dart b/packages/digit_dss/lib/models/entities/plots.dart index 526377ef1..3b2fd7248 100644 --- a/packages/digit_dss/lib/models/entities/plots.dart +++ b/packages/digit_dss/lib/models/entities/plots.dart @@ -1,6 +1,5 @@ // Generated using mason. Do not modify by hand import 'package:dart_mappable/dart_mappable.dart'; -import 'package:digit_data_model/data_model.dart'; part 'plots.mapper.dart'; diff --git a/packages/digit_dss/lib/pages/dashboard/dashboard.dart b/packages/digit_dss/lib/pages/dashboard/dashboard.dart index f81d390c2..b845a7486 100644 --- a/packages/digit_dss/lib/pages/dashboard/dashboard.dart +++ b/packages/digit_dss/lib/pages/dashboard/dashboard.dart @@ -92,21 +92,7 @@ class UserDashboardPageState extends LocalizedState { fetched: (metricData, tableData, selectedDate, isNetworkError) async { bool isConnected = await getIsConnected(); - if (isConnected) { - context.read().add(DashboardRefreshEvent( - projectId: DashboardSingleton().projectId, - syncFromServer: true, - selectedDate: selectedDate ?? DateTime.now(), - )); - } else { - DigitToast.show(context, - options: DigitToastOptions( - localizations - .translate(i18.dashboard.networkFailureError), - true, - DigitTheme.instance.mobileTheme, - )); - } + fetchData(isConnected, selectedDate); }); return Future.delayed(const Duration(seconds: 1)); @@ -154,9 +140,7 @@ class UserDashboardPageState extends LocalizedState { columnWidth: MediaQuery.of(context).size.width / 2, columnRowFixedHeight: 65, - scrollPhysics: (table.tableData.length ?? - 0) > - 5 + scrollPhysics: (table.tableData.length) > 5 ? const ClampingScrollPhysics() : const NeverScrollableScrollPhysics(), ), @@ -181,4 +165,21 @@ class UserDashboardPageState extends LocalizedState { ); }); } + + void fetchData(bool isConnected, DateTime? selectedDate) { + if (isConnected) { + context.read().add(DashboardRefreshEvent( + projectId: DashboardSingleton().projectId, + syncFromServer: true, + selectedDate: selectedDate ?? DateTime.now(), + )); + } else { + DigitToast.show(context, + options: DigitToastOptions( + localizations.translate(i18.dashboard.networkFailureError), + true, + DigitTheme.instance.mobileTheme, + )); + } + } } diff --git a/packages/digit_dss/lib/router/dashboard_router.dart b/packages/digit_dss/lib/router/dashboard_router.dart index f20ca702e..e9db233f5 100644 --- a/packages/digit_dss/lib/router/dashboard_router.dart +++ b/packages/digit_dss/lib/router/dashboard_router.dart @@ -4,10 +4,8 @@ import 'dashboard_router.gm.dart'; @AutoRouterConfig.module() class DashboardRoute extends $DashboardRoute { - @override RouteType get defaultRouteType => const RouteType.material(); - @override List routes = [ AutoRoute( page: UserDashboardRoute.page, diff --git a/packages/digit_dss/lib/widgets/back_navigation_help_header.dart b/packages/digit_dss/lib/widgets/back_navigation_help_header.dart index c374ca8bb..619166887 100644 --- a/packages/digit_dss/lib/widgets/back_navigation_help_header.dart +++ b/packages/digit_dss/lib/widgets/back_navigation_help_header.dart @@ -36,7 +36,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { Flexible( child: TextButton.icon( style: TextButton.styleFrom( - foregroundColor: theme.colorScheme.onBackground, + foregroundColor: theme.colorScheme.surface, padding: EdgeInsets.zero, ), onPressed: () { diff --git a/packages/digit_dss/lib/widgets/dashboard/dashboard_metric_card.dart b/packages/digit_dss/lib/widgets/dashboard/dashboard_metric_card.dart index ab9ae35be..ccc4bd3c1 100644 --- a/packages/digit_dss/lib/widgets/dashboard/dashboard_metric_card.dart +++ b/packages/digit_dss/lib/widgets/dashboard/dashboard_metric_card.dart @@ -57,30 +57,7 @@ class _DashboardMetricCardState extends LocalizedState { child: InkWell( onTap: () async { bool isConnected = await getIsConnected(); - if (isConnected) { - DateTime? pickedDate = await showDatePicker( - context: context, - initialDate: DateTime.now(), - firstDate: DateTime(1900), - lastDate: DateTime.now(), - ); - - if (pickedDate != null && pickedDate != DateTime.now()) { - final dashboardBloc = context.read(); - dashboardBloc.add(DashboardRefreshEvent( - selectedDate: pickedDate.toLocal(), - projectId: DashboardSingleton().projectId, - syncFromServer: true, - )); - } - } else { - DigitToast.show(context, - options: DigitToastOptions( - localizations - .translate(i18.dashboard.networkFailureError), - true, - DigitTheme.instance.mobileTheme)); - } + fetchChartData(isConnected); }, child: Container( alignment: Alignment.centerRight, @@ -188,4 +165,30 @@ class _DashboardMetricCardState extends LocalizedState { )); }); } + + void fetchChartData(bool isConnected) async { + if (isConnected) { + DateTime? pickedDate = await showDatePicker( + context: context, + initialDate: DateTime.now(), + firstDate: DateTime(1900), + lastDate: DateTime.now(), + ); + + if (pickedDate != null && pickedDate != DateTime.now() && mounted) { + final dashboardBloc = context.read(); + dashboardBloc.add(DashboardRefreshEvent( + selectedDate: pickedDate.toLocal(), + projectId: DashboardSingleton().projectId, + syncFromServer: true, + )); + } + } else { + DigitToast.show(context, + options: DigitToastOptions( + localizations.translate(i18.dashboard.networkFailureError), + true, + DigitTheme.instance.mobileTheme)); + } + } } From 8af4cdf44cab7ab0a95f3e8efea518a0353c75f0 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Fri, 6 Sep 2024 17:34:39 +0530 Subject: [PATCH 097/241] registration_delivery, scanner, referral package dart analyze fixes updated versions and changelogs --- .../pubspec.lock | 22 ++++++------ packages/attendance_management/CHANGELOG.md | 4 +++ packages/attendance_management/pubspec.lock | 4 +-- packages/attendance_management/pubspec.yaml | 2 +- packages/closed_household/CHANGELOG.md | 4 +++ packages/closed_household/pubspec.yaml | 2 +- .../digit_components/example/pubspec.lock | 2 +- packages/digit_components/pubspec.lock | 4 +-- packages/digit_components/pubspec.yaml | 2 +- packages/digit_data_model/CHANGELOG.md | 4 +++ .../lib/data/repositories/oplog/oplog.dart | 2 +- packages/digit_data_model/pubspec.yaml | 2 +- packages/digit_dss/CHANGELOG.md | 4 +++ packages/digit_dss/pubspec.yaml | 2 +- packages/digit_scanner/CHANGELOG.md | 4 +++ packages/digit_scanner/example/pubspec.lock | 2 +- .../example/test/widget_test.dart | 2 +- .../lib/router/digit_scanner_router.dart | 2 -- .../lib/utils/scanner_utils.dart | 2 +- .../vision_detector_views/camera_view.dart | 7 ++++ packages/digit_scanner/pubspec.lock | 6 ++-- packages/digit_scanner/pubspec.yaml | 2 +- packages/digit_showcase/CHANGELOG.md | 11 ++++-- .../digit_showcase/lib/tooltip_widget.dart | 4 +-- packages/digit_showcase/pubspec.yaml | 4 +-- packages/forms_engine/pubspec.lock | 4 +-- packages/inventory_management/CHANGELOG.md | 5 +++ .../stock_reconciliation.dart | 7 ++-- packages/inventory_management/pubspec.lock | 6 ++-- packages/inventory_management/pubspec.yaml | 2 +- packages/referral_reconciliation/CHANGELOG.md | 5 +++ .../record_facility_details.dart | 3 +- .../project_facility_selection.dart | 3 +- .../referral_reconciliation_router.dart | 2 -- packages/referral_reconciliation/pubspec.lock | 6 ++-- packages/referral_reconciliation/pubspec.yaml | 2 +- packages/registration_delivery/CHANGELOG.md | 4 +++ .../beneficiary_registration.dart | 1 - .../local/household_global_search.dart | 2 +- .../repositories/local/household_member.dart | 1 - .../local/individual_global_search.dart | 2 +- .../local/project_beneficiary.dart | 3 +- .../data/repositories/local/side_effect.dart | 1 - .../beneficiary/beneficiary_checklist.dart | 2 -- .../beneficiary/beneficiary_details.dart | 18 +++++----- .../beneficiary/beneficiary_wrapper.dart | 3 -- .../beneficiary/delivery_summary_page.dart | 4 +-- .../pages/beneficiary/household_overview.dart | 2 +- .../pages/beneficiary/refused_delivery.dart | 4 --- .../beneficiary/widgets/past_delivery.dart | 1 - .../house_details.dart | 2 -- .../household_details.dart | 1 - .../router/registration_delivery_router.dart | 2 -- .../lib/utils/utils.dart | 36 +++---------------- .../widgets/status_filter/status_filter.dart | 1 - packages/registration_delivery/pubspec.lock | 8 ++--- packages/registration_delivery/pubspec.yaml | 2 +- packages/sync_service/CHANGELOG.md | 4 +-- packages/sync_service/pubspec.yaml | 5 +-- .../sync_service/test/sync_service_test.dart | 4 --- 60 files changed, 127 insertions(+), 137 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index ad9b66a6e..fef6a1bb5 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -71,7 +71,7 @@ packages: path: "../../packages/attendance_management" relative: true source: path - version: "1.0.2+2" + version: "1.0.3" audioplayers: dependency: transitive description: @@ -342,7 +342,7 @@ packages: path: "../../packages/closed_household" relative: true source: path - version: "1.0.1+1" + version: "1.0.2" code_builder: dependency: transitive description: @@ -492,21 +492,21 @@ packages: path: "../../packages/digit_components" relative: true source: path - version: "1.0.1+1" + version: "1.0.2" digit_data_model: dependency: "direct main" description: path: "../../packages/digit_data_model" relative: true source: path - version: "1.0.3+1" + version: "1.0.4" digit_dss: dependency: "direct main" description: path: "../../packages/digit_dss" relative: true source: path - version: "1.0.1" + version: "1.0.2" digit_firebase_services: dependency: "direct main" description: @@ -520,14 +520,14 @@ packages: path: "../../packages/digit_scanner" relative: true source: path - version: "1.0.3+1" + version: "1.0.4" digit_showcase: dependency: "direct main" description: path: "../../packages/digit_showcase" relative: true source: path - version: "1.0.0" + version: "1.0.1" dio: dependency: "direct main" description: @@ -1113,7 +1113,7 @@ packages: path: "../../packages/inventory_management" relative: true source: path - version: "1.0.3+2" + version: "1.0.4" io: dependency: transitive description: @@ -1544,14 +1544,14 @@ packages: path: "../../packages/referral_reconciliation" relative: true source: path - version: "1.0.2+1" + version: "1.0.3" registration_delivery: dependency: "direct main" description: path: "../../packages/registration_delivery" relative: true source: path - version: "1.0.3+1" + version: "1.0.4" remove_emoji_input_formatter: dependency: transitive description: @@ -1779,7 +1779,7 @@ packages: path: "../../packages/sync_service" relative: true source: path - version: "0.0.1" + version: "0.0.1-dev.1" synchronized: dependency: transitive description: diff --git a/packages/attendance_management/CHANGELOG.md b/packages/attendance_management/CHANGELOG.md index 98e21c57e..bdf34a46e 100644 --- a/packages/attendance_management/CHANGELOG.md +++ b/packages/attendance_management/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.3 +* Updated to latest package versions +* Updated flutter version to 3.22.1 + ## 1.0.2+1 * Updated Digit_components diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index b9b701cda..b7e019a57 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -294,14 +294,14 @@ packages: path: "../digit_components" relative: true source: path - version: "1.0.1+1" + version: "1.0.2" digit_data_model: dependency: "direct main" description: path: "../digit_data_model" relative: true source: path - version: "1.0.3+1" + version: "1.0.4" dio: dependency: "direct main" description: diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index 9e6e2d461..eb584e039 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -1,6 +1,6 @@ name: attendance_management description: Digit UI attendance management specification - This tool is designed for tracking user attendance with customizable session counts per day. -version: 1.0.2+2 +version: 1.0.3 homepage: "https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/attendance_management" repository: "https://github.com/egovernments/health-campaign-field-worker-app" diff --git a/packages/closed_household/CHANGELOG.md b/packages/closed_household/CHANGELOG.md index a3f6ce26a..7369e22d1 100644 --- a/packages/closed_household/CHANGELOG.md +++ b/packages/closed_household/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.2 +* Updated to latest package versions +* Updated flutter version to 3.22.1 + ## 1.0.1+1 * Updated digit_data_model, digit_components and registration_delivery diff --git a/packages/closed_household/pubspec.yaml b/packages/closed_household/pubspec.yaml index 4e14baa60..680f876f2 100644 --- a/packages/closed_household/pubspec.yaml +++ b/packages/closed_household/pubspec.yaml @@ -1,6 +1,6 @@ name: closed_household description: This package enables health facility workers to mark household closed and update. -version: 1.0.1+1 +version: 1.0.2 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/develop/packages/closed_household repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/digit_components/example/pubspec.lock b/packages/digit_components/example/pubspec.lock index 0e4b56c89..e6efc5e1b 100644 --- a/packages/digit_components/example/pubspec.lock +++ b/packages/digit_components/example/pubspec.lock @@ -231,7 +231,7 @@ packages: path: ".." relative: true source: path - version: "1.0.1+1" + version: "1.0.2" easy_stepper: dependency: transitive description: diff --git a/packages/digit_components/pubspec.lock b/packages/digit_components/pubspec.lock index a34573761..d224d1427 100644 --- a/packages/digit_components/pubspec.lock +++ b/packages/digit_components/pubspec.lock @@ -181,10 +181,10 @@ packages: dependency: transitive description: name: coverage - sha256: "7b594a150942e0d3be99cd45a1d0b5caff27ba5a27f292ed8e8d904ba3f167b5" + sha256: c1fb2dce3c0085f39dc72668e85f8e0210ec7de05345821ff58530567df345a5 url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.9.2" crypto: dependency: transitive description: diff --git a/packages/digit_components/pubspec.yaml b/packages/digit_components/pubspec.yaml index 5a35bf7bf..3928e4e7b 100644 --- a/packages/digit_components/pubspec.yaml +++ b/packages/digit_components/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_components description: Digit UI Design specification Flutter widgets. Import this package by adding digit_components in respective pubspec.yaml dependencies. -version: 1.0.1+1 +version: 1.0.2 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_components repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/digit_data_model/CHANGELOG.md b/packages/digit_data_model/CHANGELOG.md index 49f954173..f5e94e99f 100644 --- a/packages/digit_data_model/CHANGELOG.md +++ b/packages/digit_data_model/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 +* Updated to latest package versions +* Updated flutter version to 3.22.1 + ## 1.0.3+1 * Updated oplog transactions to synchronous - fix for write transaction lock diff --git a/packages/digit_data_model/lib/data/repositories/oplog/oplog.dart b/packages/digit_data_model/lib/data/repositories/oplog/oplog.dart index 3d4349c8e..131d90eae 100644 --- a/packages/digit_data_model/lib/data/repositories/oplog/oplog.dart +++ b/packages/digit_data_model/lib/data/repositories/oplog/oplog.dart @@ -144,7 +144,7 @@ abstract class OpLogManager { }); } catch (e) { if (kDebugMode) { - print('error in isar ${e}'); + print('error in isar $e'); } rethrow; } diff --git a/packages/digit_data_model/pubspec.yaml b/packages/digit_data_model/pubspec.yaml index 35169d554..bb3c763dd 100644 --- a/packages/digit_data_model/pubspec.yaml +++ b/packages/digit_data_model/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_data_model description: The digit_data_model package is a data modeling library. It defines various classes, enums, and functions. -version: 1.0.3+1 +version: 1.0.4 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_data_model repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/digit_dss/CHANGELOG.md b/packages/digit_dss/CHANGELOG.md index 968f59396..100c6d571 100644 --- a/packages/digit_dss/CHANGELOG.md +++ b/packages/digit_dss/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.2 +* Updated to latest package versions +* Updated flutter version to 3.22.1 + ## 1.0.1 * Bug fixes * Added enums for dss charts diff --git a/packages/digit_dss/pubspec.yaml b/packages/digit_dss/pubspec.yaml index cd39f2d34..c7a4d6a03 100644 --- a/packages/digit_dss/pubspec.yaml +++ b/packages/digit_dss/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_dss description: "DSS Dashboard for campaign management" -version: 1.0.1 +version: 1.0.2 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/develop/packages/digit_dss repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/digit_scanner/CHANGELOG.md b/packages/digit_scanner/CHANGELOG.md index be2b5caae..c8dd1bd52 100644 --- a/packages/digit_scanner/CHANGELOG.md +++ b/packages/digit_scanner/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 +* Updated to latest package versions +* Updated flutter version to 3.22.1 + ## 1.0.3+1 * Updated Digit_Components diff --git a/packages/digit_scanner/example/pubspec.lock b/packages/digit_scanner/example/pubspec.lock index 5786fcee5..c5667be46 100644 --- a/packages/digit_scanner/example/pubspec.lock +++ b/packages/digit_scanner/example/pubspec.lock @@ -319,7 +319,7 @@ packages: path: ".." relative: true source: path - version: "1.0.3+1" + version: "1.0.4" easy_stepper: dependency: transitive description: diff --git a/packages/digit_scanner/example/test/widget_test.dart b/packages/digit_scanner/example/test/widget_test.dart index db7ddd343..092d222f7 100644 --- a/packages/digit_scanner/example/test/widget_test.dart +++ b/packages/digit_scanner/example/test/widget_test.dart @@ -8,7 +8,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import '../lib/main.dart'; +import 'package:example/main.dart'; void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async { diff --git a/packages/digit_scanner/lib/router/digit_scanner_router.dart b/packages/digit_scanner/lib/router/digit_scanner_router.dart index e6fbc4f00..fe16085e0 100644 --- a/packages/digit_scanner/lib/router/digit_scanner_router.dart +++ b/packages/digit_scanner/lib/router/digit_scanner_router.dart @@ -4,10 +4,8 @@ import 'digit_scanner_router.gm.dart'; @AutoRouterConfig.module() class DigitScannerPackageRoute extends $DigitScannerPackageRoute { - @override RouteType get defaultRouteType => const RouteType.material(); - @override List routes = [ AutoRoute( page: DigitScannerRoute.page, diff --git a/packages/digit_scanner/lib/utils/scanner_utils.dart b/packages/digit_scanner/lib/utils/scanner_utils.dart index 8ca44ac45..cc5d544ca 100644 --- a/packages/digit_scanner/lib/utils/scanner_utils.dart +++ b/packages/digit_scanner/lib/utils/scanner_utils.dart @@ -96,7 +96,7 @@ class DigitScannerUtils { setText(''); // Process the image to detect barcodes - final barcodes; + final List barcodes; try { barcodes = await barcodeScanner.processImage(inputImage); diff --git a/packages/digit_scanner/lib/widgets/vision_detector_views/camera_view.dart b/packages/digit_scanner/lib/widgets/vision_detector_views/camera_view.dart index da842e14a..49318aeca 100644 --- a/packages/digit_scanner/lib/widgets/vision_detector_views/camera_view.dart +++ b/packages/digit_scanner/lib/widgets/vision_detector_views/camera_view.dart @@ -5,6 +5,7 @@ import 'package:digit_components/digit_components.dart'; import 'package:digit_scanner/blocs/app_localization.dart'; import 'package:digit_scanner/utils/i18_key_constants.dart' as i18; import 'package:digit_scanner/widgets/localized.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:google_mlkit_commons/google_mlkit_commons.dart'; @@ -254,9 +255,15 @@ class _CameraViewState extends State { }); _controller?.getMinExposureOffset().then((value) { _minAvailableExposureOffset = value; + if (kDebugMode) { + print('minAvailableExposureOffset: $_minAvailableExposureOffset'); + } }); _controller?.getMaxExposureOffset().then((value) { _maxAvailableExposureOffset = value; + if (kDebugMode) { + print('maxAvailableExposureOffset: $_maxAvailableExposureOffset'); + } }); _controller?.startImageStream(_processCameraImage).then((value) { if (widget.onCameraFeedReady != null) { diff --git a/packages/digit_scanner/pubspec.lock b/packages/digit_scanner/pubspec.lock index 26c959496..8c4dc66e6 100644 --- a/packages/digit_scanner/pubspec.lock +++ b/packages/digit_scanner/pubspec.lock @@ -366,14 +366,14 @@ packages: path: "../digit_components" relative: true source: path - version: "1.0.1+1" + version: "1.0.2" digit_data_model: dependency: "direct overridden" description: path: "../digit_data_model" relative: true source: path - version: "1.0.3+1" + version: "1.0.4" dio: dependency: transitive description: @@ -1027,7 +1027,7 @@ packages: source: hosted version: "2.1.1" reactive_forms: - dependency: transitive + dependency: "direct main" description: name: reactive_forms sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" diff --git a/packages/digit_scanner/pubspec.yaml b/packages/digit_scanner/pubspec.yaml index e26f3b60e..e1e5f961f 100644 --- a/packages/digit_scanner/pubspec.yaml +++ b/packages/digit_scanner/pubspec.yaml @@ -17,7 +17,7 @@ repository: https://github.com/egovernments/health-campaign-field-worker-app # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.0.3+1 +version: 1.0.4 environment: sdk: '>=2.19.4 <3.9.0' diff --git a/packages/digit_showcase/CHANGELOG.md b/packages/digit_showcase/CHANGELOG.md index 69ebf0931..027cc5f03 100644 --- a/packages/digit_showcase/CHANGELOG.md +++ b/packages/digit_showcase/CHANGELOG.md @@ -1,7 +1,12 @@ -## 0.0.0-dev.1 +## 1.0.1 -* Digit Showcase initial release. +* Updated to latest package versions +* Updated flutter version to 3.22.1 ## 1.0.0 -* Stable release \ No newline at end of file +* Stable release + +## 0.0.0-dev.1 + +* Digit Showcase initial release. diff --git a/packages/digit_showcase/lib/tooltip_widget.dart b/packages/digit_showcase/lib/tooltip_widget.dart index 5d260e060..3c10f2167 100644 --- a/packages/digit_showcase/lib/tooltip_widget.dart +++ b/packages/digit_showcase/lib/tooltip_widget.dart @@ -452,7 +452,7 @@ class _ToolTipWidgetState extends State TextButton( style: TextButton.styleFrom( foregroundColor: - theme.colorScheme.onBackground, + theme.colorScheme.surface, tapTargetSize: MaterialTapTargetSize.shrinkWrap, ), @@ -535,7 +535,7 @@ class _ToolTipWidgetState extends State final textPainter = TextPainter( text: TextSpan(text: text, style: style), maxLines: 1, - textScaleFactor: MediaQuery.of(context).textScaleFactor, + textScaler: MediaQuery.of(context).textScaler, textDirection: TextDirection.ltr, )..layout(); return textPainter.size; diff --git a/packages/digit_showcase/pubspec.yaml b/packages/digit_showcase/pubspec.yaml index c44965e5b..97f0b148e 100644 --- a/packages/digit_showcase/pubspec.yaml +++ b/packages/digit_showcase/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_showcase description: Customized showcase view -version: 1.0.0 +version: 1.0.1 homepage: "https://github.com/egovernments/health-campaign-field-worker-app/tree/develop/packages/digit_showcase" environment: @@ -14,7 +14,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^2.0.0 + flutter_lints: ^4.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/packages/forms_engine/pubspec.lock b/packages/forms_engine/pubspec.lock index ef8e143ad..d15cb12fa 100644 --- a/packages/forms_engine/pubspec.lock +++ b/packages/forms_engine/pubspec.lock @@ -254,14 +254,14 @@ packages: path: "../digit_components" relative: true source: path - version: "1.0.1+1" + version: "1.0.2" digit_data_model: dependency: "direct overridden" description: path: "../digit_data_model" relative: true source: path - version: "1.0.3+1" + version: "1.0.4" dio: dependency: transitive description: diff --git a/packages/inventory_management/CHANGELOG.md b/packages/inventory_management/CHANGELOG.md index 930c5526b..88173c879 100644 --- a/packages/inventory_management/CHANGELOG.md +++ b/packages/inventory_management/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.0.4 +* Updated to latest package versions +* Updated flutter version to 3.22.1 + + ## 1.0.3+1 * Updated digit_scanner package, digit_components, digit_data_model diff --git a/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart b/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart index a6774a996..00028efa9 100644 --- a/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart +++ b/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart @@ -45,13 +45,12 @@ class StockReconciliationPageState validators: isDistributor ? [] : [Validators.required], ), _productVariantKey: FormControl(), - _manualCountKey: FormControl( - value: 0, + _manualCountKey: FormControl( + value: '0', validators: [ Validators.number(), Validators.required, - Validators.min(0), - Validators.max(10000) + Validators.delegate(CustomValidator.validStockCount) ], ), _reconciliationCommentsKey: FormControl(), diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index 51d9330a6..b30e317a7 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -398,21 +398,21 @@ packages: path: "../digit_components" relative: true source: path - version: "1.0.1+1" + version: "1.0.2" digit_data_model: dependency: "direct main" description: path: "../digit_data_model" relative: true source: path - version: "1.0.3+1" + version: "1.0.4" digit_scanner: dependency: "direct main" description: path: "../digit_scanner" relative: true source: path - version: "1.0.3+1" + version: "1.0.4" dio: dependency: "direct main" description: diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index 421aba728..c9dc3b8b1 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -1,6 +1,6 @@ name: inventory_management description: This package offers inventory management features, allowing users to view stock reports and perform inventory resource reconciliation. -version: 1.0.3+2 +version: 1.0.4 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/inventory_management repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/referral_reconciliation/CHANGELOG.md b/packages/referral_reconciliation/CHANGELOG.md index 00372f19e..aba8e5086 100644 --- a/packages/referral_reconciliation/CHANGELOG.md +++ b/packages/referral_reconciliation/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.0.3 +* Updated to latest package versions +* Updated flutter version to 3.22.1 + + ## 1.0.2+1 * Updated digit_scanner package, digit_components, digit_data_model diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart index 0f2bb4a98..54a6aa9ae 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart @@ -306,8 +306,9 @@ class _ReferralFacilityPageState extends LocalizedState { ), ); - if (facility == null) + if (facility == null) { return; + } form .control( _evaluationFacilityKey, diff --git a/packages/referral_reconciliation/lib/pages/project_facility/project_facility_selection.dart b/packages/referral_reconciliation/lib/pages/project_facility/project_facility_selection.dart index ee1f22aa3..eba9fa7ae 100644 --- a/packages/referral_reconciliation/lib/pages/project_facility/project_facility_selection.dart +++ b/packages/referral_reconciliation/lib/pages/project_facility/project_facility_selection.dart @@ -4,7 +4,6 @@ import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:reactive_forms/reactive_forms.dart'; -import 'package:referral_reconciliation/blocs/app_localization.dart'; import 'package:referral_reconciliation/utils/constants.dart'; import 'package:referral_reconciliation/widgets/localized.dart'; @@ -48,7 +47,7 @@ class _ReferralReconProjectFacilitySelectionPageState body: ReactiveFormConsumer( builder: (context, form, _) { final filteredProjectFacilities = - (widget.projectFacilities ?? []).isNotEmpty + (widget.projectFacilities).isNotEmpty ? widget.projectFacilities.where((element) { final query = form.control(_facilityName).value as String?; diff --git a/packages/referral_reconciliation/lib/router/referral_reconciliation_router.dart b/packages/referral_reconciliation/lib/router/referral_reconciliation_router.dart index 161831916..e382a5ca0 100644 --- a/packages/referral_reconciliation/lib/router/referral_reconciliation_router.dart +++ b/packages/referral_reconciliation/lib/router/referral_reconciliation_router.dart @@ -4,10 +4,8 @@ import 'referral_reconciliation_router.gm.dart'; @AutoRouterConfig.module() class ReferralReconciliationRoute extends $ReferralReconciliationRoute { - @override RouteType get defaultRouteType => const RouteType.material(); - @override List routes = [ AutoRoute( page: SearchReferralReconciliationsRoute.page, diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index f2ae420e7..0b0a79004 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -398,21 +398,21 @@ packages: path: "../digit_components" relative: true source: path - version: "1.0.1+1" + version: "1.0.2" digit_data_model: dependency: "direct main" description: path: "../digit_data_model" relative: true source: path - version: "1.0.3+1" + version: "1.0.4" digit_scanner: dependency: "direct main" description: path: "../digit_scanner" relative: true source: path - version: "1.0.3+1" + version: "1.0.4" dio: dependency: "direct main" description: diff --git a/packages/referral_reconciliation/pubspec.yaml b/packages/referral_reconciliation/pubspec.yaml index fe2ed6307..0decf4a4e 100644 --- a/packages/referral_reconciliation/pubspec.yaml +++ b/packages/referral_reconciliation/pubspec.yaml @@ -1,6 +1,6 @@ name: referral_reconciliation description: "This module will enable the health facility supervisors to track referrals made by on-field health workers to different health facilities digitally via the Digit HCM app" -version: 1.0.2+1 +version: 1.0.3 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/referral_reconciliation repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration_delivery/CHANGELOG.md index 10e985d7e..424f2b608 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration_delivery/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 +* Updated to latest package versions +* Updated flutter version to 3.22.1 + ## 1.0.3+1 * Bug Fixes - diff --git a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart index ba5a9736b..1714d41e2 100644 --- a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart +++ b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart @@ -1,7 +1,6 @@ // GENERATED using mason_cli import 'dart:async'; -import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/utils/typedefs.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; diff --git a/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart b/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart index 26ffbd225..e91a431ec 100644 --- a/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart +++ b/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart @@ -497,7 +497,7 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { var variables = selectQuery.constructQuery().introducedVariables; var indexesLength = selectQuery.constructQuery().variableIndices; - var totalCount; + dynamic totalCount; try { totalCount = await sql diff --git a/packages/registration_delivery/lib/data/repositories/local/household_member.dart b/packages/registration_delivery/lib/data/repositories/local/household_member.dart index 5815eb473..cb1f426bf 100644 --- a/packages/registration_delivery/lib/data/repositories/local/household_member.dart +++ b/packages/registration_delivery/lib/data/repositories/local/household_member.dart @@ -4,7 +4,6 @@ import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; import 'package:registration_delivery/models/entities/household_member.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; -import 'package:registration_delivery/utils/utils.dart'; class HouseholdMemberLocalRepository extends LocalRepository { diff --git a/packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart b/packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart index abd395fef..199722557 100644 --- a/packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart +++ b/packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart @@ -393,7 +393,7 @@ class IndividualGlobalSearchRepository extends LocalRepository { var variables = selectQuery.constructQuery().introducedVariables; var indexesLength = selectQuery.constructQuery().variableIndices; - var totalCount; + dynamic totalCount; try { totalCount = await sql diff --git a/packages/registration_delivery/lib/data/repositories/local/project_beneficiary.dart b/packages/registration_delivery/lib/data/repositories/local/project_beneficiary.dart index 1a63c8013..3beb9ed45 100644 --- a/packages/registration_delivery/lib/data/repositories/local/project_beneficiary.dart +++ b/packages/registration_delivery/lib/data/repositories/local/project_beneficiary.dart @@ -202,8 +202,7 @@ class ProjectBeneficiaryLocalRepository extends LocalRepository< final updated = entity.copyWith( isDeleted: true, rowVersion: entity.rowVersion, - clientAuditDetails: (entity.clientAuditDetails?.createdBy != null && - entity.clientAuditDetails!.createdTime != null) + clientAuditDetails: (entity.clientAuditDetails?.createdBy != null) ? ClientAuditDetails( createdBy: entity.clientAuditDetails!.createdBy, createdTime: entity.clientAuditDetails!.createdTime, diff --git a/packages/registration_delivery/lib/data/repositories/local/side_effect.dart b/packages/registration_delivery/lib/data/repositories/local/side_effect.dart index 71c57557e..4e7080092 100644 --- a/packages/registration_delivery/lib/data/repositories/local/side_effect.dart +++ b/packages/registration_delivery/lib/data/repositories/local/side_effect.dart @@ -4,7 +4,6 @@ import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; import 'package:registration_delivery/models/entities/side_effect.dart'; -import 'package:registration_delivery/utils/utils.dart'; class SideEffectLocalRepository extends LocalRepository { diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart index 472f88e9b..cd625c76f 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart @@ -105,8 +105,6 @@ class _BeneficiaryChecklistPageState const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), child: DigitElevatedButton( onPressed: () async { - // TODO: Submit checklist - final router = context.router; submitTriggered = true; context.read().add( diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart index e0543da70..af4f332b6 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart @@ -182,12 +182,13 @@ class BeneficiaryDetailsPageState .beneficiaryDetails .resourcesTobeDelivered), content: buildTableContent( - deliverState, - context, - variant, - state.selectedIndividual, - state.householdMemberWrapper.household - ), + deliverState, + context, + variant, + state.selectedIndividual, + state + .householdMemberWrapper + .household), barrierDismissible: true, primaryAction: DigitDialogActions( @@ -305,9 +306,8 @@ class BeneficiaryDetailsPageState } return maskString(identifiers - .first.identifierId - .toString()) ?? - '--'; + .first.identifierId + .toString()); }(), localizations.translate( i18.common.coreCommonAge, diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart index c8fe2c357..a1b3056c2 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart @@ -56,9 +56,6 @@ class BeneficiaryWrapperPage extends StatelessWidget { final referral = context.repository(context); - final serviceDefinationRepo = context.repository(context); - return MultiBlocProvider( providers: [ BlocProvider( diff --git a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart index 3d06173d8..84f0b5ee4 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart @@ -42,9 +42,7 @@ class DeliverySummaryPageState extends LocalizedState { return ProductVariantBlocWrapper( child: Scaffold( body: BlocConsumer( - listener: (context, deliverState) { - final router = context.router; - }, + listener: (context, deliverState) {}, builder: (context, deliverState) { return ScrollableContent( enableFixedButton: true, diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index 61ca961b9..630ea3246 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -752,7 +752,7 @@ class _HouseholdOverviewPageState if (project?.startDate != null && project?.endDate != null) { final now = DateTime.now().millisecondsSinceEpoch; final startDate = project!.startDate!; - final endDate = project!.endDate!; + final endDate = project.endDate!; return now < startDate || now > endDate; } diff --git a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart index 033d184ac..9525e1427 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart @@ -35,16 +35,12 @@ class RefusedDeliveryPageState extends LocalizedState { @override void initState() { - final registrationState = context.read().state; - super.initState(); } @override Widget build(BuildContext context) { final theme = Theme.of(context); - final bloc = context.read(); - final router = context.router; return Scaffold( body: ReactiveFormBuilder( diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart index ba7118d19..b9e86f1e5 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart @@ -6,7 +6,6 @@ import 'package:flutter/material.dart'; import 'package:registration_delivery/blocs/app_localization.dart'; import 'package:registration_delivery/registration_delivery.dart'; -import '../../../blocs/delivery_intervention/deliver_intervention.dart'; import '../../../utils/i18_key_constants.dart' as i18; import '../../../utils/utils.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart index 55d762731..93c1581eb 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart @@ -34,8 +34,6 @@ class HouseDetailsPageState extends LocalizedState { @override void initState() { - final registrationState = context.read().state; - super.initState(); } diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart index 8d0f29b23..9ac5b718a 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart @@ -50,7 +50,6 @@ class HouseHoldDetailsPageState extends LocalizedState { builder: (context, form, child) { int pregnantWomen = form.control(_pregnantWomenCountKey).value; int children = form.control(_childrenCountKey).value; - int memberCount = form.control(_memberCountKey).value; return BlocConsumer( listener: (context, state) { diff --git a/packages/registration_delivery/lib/router/registration_delivery_router.dart b/packages/registration_delivery/lib/router/registration_delivery_router.dart index 14d14e52f..676799919 100644 --- a/packages/registration_delivery/lib/router/registration_delivery_router.dart +++ b/packages/registration_delivery/lib/router/registration_delivery_router.dart @@ -4,10 +4,8 @@ import 'registration_delivery_router.gm.dart'; @AutoRouterConfig.module() class RegistrationDeliveryRoute extends $RegistrationDeliveryRoute { - @override RouteType get defaultRouteType => const RouteType.material(); - @override List get routes => [ AutoRoute( page: RegistrationDeliveryWrapperRoute.page, diff --git a/packages/registration_delivery/lib/utils/utils.dart b/packages/registration_delivery/lib/utils/utils.dart index 5d247fe31..72fbe22fe 100644 --- a/packages/registration_delivery/lib/utils/utils.dart +++ b/packages/registration_delivery/lib/utils/utils.dart @@ -26,32 +26,6 @@ class CustomValidator { ? null : {'required': true}; } - - static Map? validMobileNumber( - AbstractControl control, - ) { - if (control.value == null || control.value.toString().isEmpty) { - return null; - } - - const pattern = r'^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\./0-9]*$'; - - if (RegExp(pattern).hasMatch(control.value.toString())) return null; - - if (control.value.toString().length < 10) return {'mobileNumber': true}; - - return {'mobileNumber': true}; - } - - static Map? minPhoneNumValidation( - AbstractControl control, - ) { - if (control.value != null && - control.value.toString().isNotEmpty && - control.value.toString().length < 9) { - return {'minLength': true}; - } - } } bool checkStatus(List? tasks, ProjectCycle? currentCycle) { @@ -89,7 +63,7 @@ bool checkIfBeneficiaryRefused( List? tasks, ) { final isBeneficiaryRefused = (tasks != null && - (tasks ?? []).isNotEmpty && + (tasks).isNotEmpty && tasks.last.status == Status.administeredFailed.toValue()); return isBeneficiaryRefused; @@ -182,9 +156,9 @@ DeliveryDoseCriteria? fetchProductVariant(ProjectCycleDelivery? currentDelivery, IndividualModel? individualModel, HouseholdModel? householdModel) { if (currentDelivery != null) { var individualAgeInMonths = 0; - var gender; - var roomCount; - var memberCount; + int? gender; + int? roomCount; + int? memberCount; if (individualModel != null) { final individualAge = DigitDateUtils.calculateAge( @@ -208,7 +182,7 @@ DeliveryDoseCriteria? fetchProductVariant(ProjectCycleDelivery? currentDelivery, } final filteredCriteria = currentDelivery.doseCriteria?.where((criteria) { - final condition = criteria.condition; + final String? condition = criteria.condition; if (condition != null) { final conditions = condition.split('and'); diff --git a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart index 90b0b2c44..2b17c34dc 100644 --- a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart +++ b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart @@ -6,7 +6,6 @@ import 'package:registration_delivery/registration_delivery.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../models/entities/status.dart'; -import '../../utils/i18_key_constants.dart' as i18; class StatusFilter extends LocalizedStatefulWidget { final List? selectedFilters; diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 7b1a05011..74c6979f2 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -398,28 +398,28 @@ packages: path: "../digit_components" relative: true source: path - version: "1.0.1+1" + version: "1.0.2" digit_data_model: dependency: "direct main" description: path: "../digit_data_model" relative: true source: path - version: "1.0.3+1" + version: "1.0.4" digit_scanner: dependency: "direct main" description: path: "../digit_scanner" relative: true source: path - version: "1.0.3+1" + version: "1.0.4" digit_showcase: dependency: "direct main" description: path: "../digit_showcase" relative: true source: path - version: "1.0.0" + version: "1.0.1" dio: dependency: "direct main" description: diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index a958b4cc5..3ec486d9f 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -1,6 +1,6 @@ name: registration_delivery description: This package enables health facility workers to register a household and individual members and deliver the resources. -version: 1.0.3+1 +version: 1.0.4 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/registration_delivery repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/sync_service/CHANGELOG.md b/packages/sync_service/CHANGELOG.md index 41cc7d819..6fe28a462 100644 --- a/packages/sync_service/CHANGELOG.md +++ b/packages/sync_service/CHANGELOG.md @@ -1,3 +1,3 @@ -## 0.0.1 +## 0.0.1-dev.1 -* TODO: Describe initial release. +* Init release diff --git a/packages/sync_service/pubspec.yaml b/packages/sync_service/pubspec.yaml index d4dc167ac..00cff4c02 100644 --- a/packages/sync_service/pubspec.yaml +++ b/packages/sync_service/pubspec.yaml @@ -1,7 +1,8 @@ name: sync_service description: "A new Flutter package project." -version: 0.0.1 -homepage: +version: 0.0.1-dev.1 +homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/sync_service +repository: https://github.com/egovernments/health-campaign-field-worker-app environment: sdk: '>=3.4.1 <4.0.0' diff --git a/packages/sync_service/test/sync_service_test.dart b/packages/sync_service/test/sync_service_test.dart index 436611c68..153f05566 100644 --- a/packages/sync_service/test/sync_service_test.dart +++ b/packages/sync_service/test/sync_service_test.dart @@ -1,7 +1,3 @@ -import 'package:flutter_test/flutter_test.dart'; - -import 'package:sync_service/sync_service_lib.dart'; - void main() { } From fdf239e1710093b9cb9419c27c72e75ea7ad69a6 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Mon, 9 Sep 2024 10:46:53 +0530 Subject: [PATCH 098/241] updated melos yaml - deleted generate-flutter --- melos.yaml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/melos.yaml b/melos.yaml index 99ae6a26a..be0361a91 100644 --- a/melos.yaml +++ b/melos.yaml @@ -22,16 +22,6 @@ scripts: exec: concurrency: 2 - generate-flutter: - description: Generate code for all Flutter packages. - run: flutter packages run build_runner build --delete-conflicting-outputs - exec: - concurrency: 1 - packageFilters: - flutter: true - dependsOn: - - build_runner - generate-dart: description: Generate code for all Dart packages. run: dart run build_runner build --delete-conflicting-outputs From 3b021552e47dfb6b3b18a0fe6f53761175590b22 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Mon, 9 Sep 2024 10:59:38 +0530 Subject: [PATCH 099/241] updated dart.yml to remove caching --- .github/workflows/dart.yml | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/.github/workflows/dart.yml b/.github/workflows/dart.yml index bf200da80..0d45fc254 100644 --- a/.github/workflows/dart.yml +++ b/.github/workflows/dart.yml @@ -19,18 +19,6 @@ jobs: with: flutter-version: "3.22.1" - - name: Restore cache - id: cache - uses: actions/cache@v3 - with: - path: | - .pub-cache - apps/**/.dart_tool - packages/**/.dart_tool - key: ${{ runner.os }}-flutter-${{ hashFiles('**/pubspec.lock') }} - restore-keys: | - ${{ runner.os }}-flutter- - - name: Clean previous builds run: flutter clean @@ -42,12 +30,3 @@ jobs: - name: Analyze code run: melos run analyze - - - name: Save cache - uses: actions/cache@v3 - with: - path: | - .pub-cache - apps/**/.dart_tool - packages/**/.dart_tool - key: ${{ runner.os }}-flutter-${{ hashFiles('**/pubspec.lock') }} From 22928491970e30ee07647e43a1de4ef22e650717 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Mon, 9 Sep 2024 13:02:33 +0530 Subject: [PATCH 100/241] updated dart.yml - reverted generate-flutter and removed dart --- melos.yaml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/melos.yaml b/melos.yaml index be0361a91..b2010b918 100644 --- a/melos.yaml +++ b/melos.yaml @@ -18,18 +18,16 @@ scripts: description: Generate code for all packages (Flutter and Dart). run: | melos run generate-flutter --no-select & - melos run generate-dart --no-select exec: concurrency: 2 - generate-dart: - description: Generate code for all Dart packages. - run: dart run build_runner build --delete-conflicting-outputs + generate-flutter: + description: Generate code for all Flutter packages. + run: flutter packages run build_runner build --delete-conflicting-outputs exec: concurrency: 1 packageFilters: - dart: true - flutter: false + flutter: true dependsOn: - build_runner From 4fc693a55c95d67ec74e2a91f9bfa9a70e8486d2 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Mon, 9 Sep 2024 16:36:50 +0530 Subject: [PATCH 101/241] updated data_model and components versions --- packages/sync_service/pubspec.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/sync_service/pubspec.yaml b/packages/sync_service/pubspec.yaml index 00cff4c02..7239977b7 100644 --- a/packages/sync_service/pubspec.yaml +++ b/packages/sync_service/pubspec.yaml @@ -28,8 +28,8 @@ dependencies: flutter_background_service: ^5.0.5 provider: ^6.1.2 flutter_secure_storage: ^9.2.2 - digit_data_model: ^1.0.1 - digit_components: ^1.0.1 + digit_data_model: ^1.0.4 + digit_components: ^1.0.2 dev_dependencies: flutter_test: From b9b65bbaa624ef54c6f358df0799247085bd4a48 Mon Sep 17 00:00:00 2001 From: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Date: Tue, 10 Sep 2024 13:58:09 +0530 Subject: [PATCH 102/241] Removed privacy policy from main app to digit component (#569) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Updated the integer form picker and added a new text block component (#441) * updated the integer picker and added a new text block component * added a field to change the width of button * modified text block component to conditionally render children --------- Co-authored-by: rachana-egov * updated description for household location and details page (#443) Co-authored-by: rachana-egov * replaced product variant dropdown to selection card (#445) Co-authored-by: rachana-egov * HLM-6283:: IRS- Household Details Fields added (#444) * Updated checklist for a new type boolean (#446) * updated checklist for a new type boolean * added To Do to fix hard code options --------- Co-authored-by: rachana-egov * HLM-6282 and HLM-6283:: House Structure Details Page added (#447) * HLM-6283:: IRS- Household Details Fields added * HLM-6283:: House Structure Details Page * integrated checklist inside the beneficiary flow and updated gender field to selection card (#450) Co-authored-by: rachana-egov * HLM-6371:: Beneficiary Registration Summary Page (#452) * HLM-6283:: IRS- Household Details Fields added * HLM-6283:: House Structure Details Page * HLM-6371:: Beneficiary Registration Summary Page * Updated registration_delivery script * Added refused delivery page (#451) * integrated checklist inside the beneficiary flow and updated gender field to selection card * fetching refusal reasons * added refused delivery page * added refused delivery page --------- Co-authored-by: rachana-egov Co-authored-by: Naveen J <83631045+naveen-egov@users.noreply.github.com> * No delivery flow page (#453) Co-authored-by: rachana-egov * HLM-6367:: Auto Create project beneficiary (#454) * added translator for administration area * Fixed Facility search based on tenant ID * Added disable battery optimization permission for background service * Added disable battery optimization ask permission on App start and background service start * HLM-5984:: Get Precise location on Submitting latitude longitude details * Reverted install_bricks.sh * added new status REGISTERED, NOT_REGISTERED updated conditional check for status by project beneficiaries * added static status_filter.dart integration in search_beneficiary.dart * TODO for selected_filters display condition * integrated household search filters with mdms implemented search based on filters with pagination for Registered and NotRegistered * updated status filter component merge with develop * Auto Create Project Beneficiary on Edit Household, and disable record delivery if no project beneficiary present * Conflicts resolved --------- Co-authored-by: Naveen Renati * Hlm 6414 - MDMS StatusFilter, Filter search (#448) * added translator for administration area * Fixed Facility search based on tenant ID * Added disable battery optimization permission for background service * Added disable battery optimization ask permission on App start and background service start * HLM-5984:: Get Precise location on Submitting latitude longitude details * Reverted install_bricks.sh * added new status REGISTERED, NOT_REGISTERED updated conditional check for status by project beneficiaries * added static status_filter.dart integration in search_beneficiary.dart * TODO for selected_filters display condition * integrated household search filters with mdms implemented search based on filters with pagination for Registered and NotRegistered * updated status filter component merge with develop * create individual_global_search and implemented search * Auto Create Project Beneficiary on Edit Household, and disable record delivery if no project beneficiary present * Conflicts resolved * implemented household_global_search.dart fixed individual_global_search.dart * updated proximity search for household_global_search.dart * Pop State recapture during registration flow, Disable delivery flow for individual based campaign if project beneficiaries is empty (#456) --------- Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * HCMPRE-98 Filter search pagination, Removed private PageState (#457) * added translator for administration area * Fixed Facility search based on tenant ID * Added disable battery optimization permission for background service * Added disable battery optimization ask permission on App start and background service start * HLM-5984:: Get Precise location on Submitting latitude longitude details * Reverted install_bricks.sh * added new status REGISTERED, NOT_REGISTERED updated conditional check for status by project beneficiaries * added static status_filter.dart integration in search_beneficiary.dart * TODO for selected_filters display condition * integrated household search filters with mdms implemented search based on filters with pagination for Registered and NotRegistered * updated status filter component merge with develop * create individual_global_search and implemented search * Auto Create Project Beneficiary on Edit Household, and disable record delivery if no project beneficiary present * Conflicts resolved * implemented household_global_search.dart fixed individual_global_search.dart * updated proximity search for household_global_search.dart * Pop State recapture during registration flow, Disable delivery flow for individual based campaign if project beneficiaries is empty (#456) * updated class state from private for customization override in registration_delivery and inventory added pagination for filter search TODO: combination search for registered and not registered needs fix which return only last selected results * adding missed changes for last commit * displaying selected filter value for applied filters in search_beneficiary.dart * updated changelog for inventory and registration_delivery for new dev versions * updated pubspec lock of registration_delivery --------- Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * Created a new package for marking closed household (#459) * Created a new package for marking closed household * fixed build issues * updated the name to userAction --------- Co-authored-by: rachana-egov * HCMPRE-98 - Inventory TeamCode fixes, Filter search fixes (#460) * added translator for administration area * Fixed Facility search based on tenant ID * Added disable battery optimization permission for background service * Added disable battery optimization ask permission on App start and background service start * HLM-5984:: Get Precise location on Submitting latitude longitude details * Reverted install_bricks.sh * added new status REGISTERED, NOT_REGISTERED updated conditional check for status by project beneficiaries * added static status_filter.dart integration in search_beneficiary.dart * TODO for selected_filters display condition * integrated household search filters with mdms implemented search based on filters with pagination for Registered and NotRegistered * updated status filter component merge with develop * create individual_global_search and implemented search * Auto Create Project Beneficiary on Edit Household, and disable record delivery if no project beneficiary present * Conflicts resolved * implemented household_global_search.dart fixed individual_global_search.dart * updated proximity search for household_global_search.dart * Pop State recapture during registration flow, Disable delivery flow for individual based campaign if project beneficiaries is empty (#456) * updated class state from private for customization override in registration_delivery and inventory added pagination for filter search TODO: combination search for registered and not registered needs fix which return only last selected results * adding missed changes for last commit * displaying selected filter value for applied filters in search_beneficiary.dart * updated changelog for inventory and registration_delivery for new dev versions * updated pubspec lock of registration_delivery * removed multiple filter selection modified filter search * fixed delivery team scanner issues in stock_details.dart * Fixed - missing addition of scanned resources to additional fields filter search bug fixes * HCMPRE-74, HCMPRE-82, HCMPRE-83:: Household Reload Fix, Validations for Household details added (#458) * updated individual global search added beneficiary type check in view_beneficiary_card.dart removed commented code in household_overview.dart * Added null check for beneficiaryTag in closed_household_summary.dart --------- Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * Hcmpre 118 - Closed Household, Filter improvements, Bug fixes (#467) * added translator for administration area * Fixed Facility search based on tenant ID * Added disable battery optimization permission for background service * Added disable battery optimization ask permission on App start and background service start * HLM-5984:: Get Precise location on Submitting latitude longitude details * Reverted install_bricks.sh * added new status REGISTERED, NOT_REGISTERED updated conditional check for status by project beneficiaries * added static status_filter.dart integration in search_beneficiary.dart * TODO for selected_filters display condition * integrated household search filters with mdms implemented search based on filters with pagination for Registered and NotRegistered * updated status filter component merge with develop * create individual_global_search and implemented search * Auto Create Project Beneficiary on Edit Household, and disable record delivery if no project beneficiary present * Conflicts resolved * implemented household_global_search.dart fixed individual_global_search.dart * updated proximity search for household_global_search.dart * Pop State recapture during registration flow, Disable delivery flow for individual based campaign if project beneficiaries is empty (#456) * updated class state from private for customization override in registration_delivery and inventory added pagination for filter search TODO: combination search for registered and not registered needs fix which return only last selected results * adding missed changes for last commit * displaying selected filter value for applied filters in search_beneficiary.dart * updated changelog for inventory and registration_delivery for new dev versions * updated pubspec lock of registration_delivery * removed multiple filter selection modified filter search * fixed delivery team scanner issues in stock_details.dart * Fixed - missing addition of scanned resources to additional fields filter search bug fixes * HCMPRE-74, HCMPRE-82, HCMPRE-83:: Household Reload Fix, Validations for Household details added (#458) * updated individual global search added beneficiary type check in view_beneficiary_card.dart removed commented code in household_overview.dart * Added null check for beneficiaryTag in closed_household_summary.dart * Exposed Registration delivery pages * updated remote repository and some miner fixes (#461) Co-authored-by: rachana-egov * HCMPRE-82:: Validations and Bug Fixes * small css fixes (#462) Co-authored-by: rachana-egov Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> * merge fix * added closed household search * status model fix * Closed-household-registration (#464) * closed-household-registration * closed-household-registration * updated pub file --------- Co-authored-by: rachana-egov * added closed household init file modified user_action.dart model and db corrected modified closed household status * updated registration for closed household * added closed_household search and updating closed household status * clearing search before navigating to registration flow * getting last tasks in household_overview.dart * HCMPRE-107:: Summary page added for Delivery Flow, HCMPRE-111:: Disable Delete household if beneficiary not present (#463) * Validation and gps fixes * fixed closed household count clearing closedhould results for clear * pagination fix for closed household * sync down for closed household, updated scan voucher button, and remove the tag when we navigate to a different page (#465) Co-authored-by: rachana-egov * DeliverySummary Route added to main app * seperated closedhousehold search Bug fixes - HCMPRE-112, 110, 113 * updated all the points of this ticket HCMPRE-120 (#466) Co-authored-by: rachana-egov * Bug Fixes, dev version release of packages * HCMPRE-119:: IRS Demo fixes (#468) * HCMPRE-119:: IRS Demo fixes * Removed unused code * updated closed button action to push closedhousehold tasks filter with last fix * updated validation for closed household name and fix error message size (#470) Co-authored-by: rachana-egov * Irs demo fix patch (#469) * HCMPRE-119:: IRS Demo fixes * Removed unused code * Edit Household if no project beneficiary fix * reverted hiding of digit search bar when closed filter is applied * status update based on last task status in household_overview.dart mapped administered success in beneficiary_card.dart moved getstatus to utils.dart * fixed offset increasing twice * HCMPRE-121:: Enter manual code fix and Search Beneficiary fixes (#471) * HCMPRE-121:: Enter manual code fix and Search Beneficiary fixes * Added date formats to constants * fixed offset increasing twice closed household distance fix emitting scanner state loading * dev version bump-up for registration and scanner * version updates for packages --------- Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: rachana-egov * Hcmpre 155 - ClosedHousehold flow change (#478) * added translator for administration area * Fixed Facility search based on tenant ID * Added disable battery optimization permission for background service * Added disable battery optimization ask permission on App start and background service start * HLM-5984:: Get Precise location on Submitting latitude longitude details * Reverted install_bricks.sh * added new status REGISTERED, NOT_REGISTERED updated conditional check for status by project beneficiaries * added static status_filter.dart integration in search_beneficiary.dart * TODO for selected_filters display condition * integrated household search filters with mdms implemented search based on filters with pagination for Registered and NotRegistered * updated status filter component merge with develop * create individual_global_search and implemented search * Auto Create Project Beneficiary on Edit Household, and disable record delivery if no project beneficiary present * Conflicts resolved * implemented household_global_search.dart fixed individual_global_search.dart * updated proximity search for household_global_search.dart * Pop State recapture during registration flow, Disable delivery flow for individual based campaign if project beneficiaries is empty (#456) * updated class state from private for customization override in registration_delivery and inventory added pagination for filter search TODO: combination search for registered and not registered needs fix which return only last selected results * adding missed changes for last commit * displaying selected filter value for applied filters in search_beneficiary.dart * updated changelog for inventory and registration_delivery for new dev versions * updated pubspec lock of registration_delivery * removed multiple filter selection modified filter search * fixed delivery team scanner issues in stock_details.dart * Fixed - missing addition of scanned resources to additional fields filter search bug fixes * HCMPRE-74, HCMPRE-82, HCMPRE-83:: Household Reload Fix, Validations for Household details added (#458) * updated individual global search added beneficiary type check in view_beneficiary_card.dart removed commented code in household_overview.dart * Added null check for beneficiaryTag in closed_household_summary.dart * Exposed Registration delivery pages * updated remote repository and some miner fixes (#461) Co-authored-by: rachana-egov * HCMPRE-82:: Validations and Bug Fixes * small css fixes (#462) Co-authored-by: rachana-egov Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> * merge fix * added closed household search * status model fix * Closed-household-registration (#464) * closed-household-registration * closed-household-registration * updated pub file --------- Co-authored-by: rachana-egov * added closed household init file modified user_action.dart model and db corrected modified closed household status * updated registration for closed household * added closed_household search and updating closed household status * clearing search before navigating to registration flow * getting last tasks in household_overview.dart * HCMPRE-107:: Summary page added for Delivery Flow, HCMPRE-111:: Disable Delete household if beneficiary not present (#463) * Validation and gps fixes * fixed closed household count clearing closedhould results for clear * pagination fix for closed household * sync down for closed household, updated scan voucher button, and remove the tag when we navigate to a different page (#465) Co-authored-by: rachana-egov * DeliverySummary Route added to main app * seperated closedhousehold search Bug fixes - HCMPRE-112, 110, 113 * updated all the points of this ticket HCMPRE-120 (#466) Co-authored-by: rachana-egov * Bug Fixes, dev version release of packages * HCMPRE-119:: IRS Demo fixes (#468) * HCMPRE-119:: IRS Demo fixes * Removed unused code * updated closed button action to push closedhousehold tasks filter with last fix * updated validation for closed household name and fix error message size (#470) Co-authored-by: rachana-egov * Irs demo fix patch (#469) * HCMPRE-119:: IRS Demo fixes * Removed unused code * Edit Household if no project beneficiary fix * reverted hiding of digit search bar when closed filter is applied * status update based on last task status in household_overview.dart mapped administered success in beneficiary_card.dart moved getstatus to utils.dart * fixed offset increasing twice * HCMPRE-121:: Enter manual code fix and Search Beneficiary fixes (#471) * HCMPRE-121:: Enter manual code fix and Search Beneficiary fixes * Added date formats to constants * fixed offset increasing twice closed household distance fix emitting scanner state loading * dev version bump-up for registration and scanner * version updates for packages * View Household button added in delete individual success page, Search project beneficiary fix * added close button to close the filter and disabled the clear button … (#475) * added close button to close the filter and disabled the clear button unless something is selected * added validation for closed household head name same as individual * updated the condition for validation of closehousehold head --------- Co-authored-by: rachana-egov * View Household button added in delete individual success page, Search project beneficiary fix (#474) * Search beneficiary fix * Search beneficiary fix * Bloc dispose fix * Bloc dispose fix * Updated task based search for household * Modified closed household package to use registration flow for creating a household and related data along with task as closed deleted user_action from data_model package Updating closed_household to not_delivered status after closed household registration * version updates of closed_household, digit_components, digit_data_model, registration_delivery * version upgrade for registration_delivery --------- Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: rachana-egov * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * Hcmpre 164, 165 - Count implementation for filter search (#485) * Update closed_household_details.dart (#482) * Fixed pagination refresh issue (#481) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments --------- Co-authored-by: rachana-egov * implemented count for filter search, added todo for combination search count * Fixed count TODO: search with task status filter * Fixed search with task status filter Removed delay in delivery_summary_page.dart * added code comments * HCMPRE-165 issues (#484) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments * HCMPRE-162:: Reload issue fix for closed household and not registered * HCMPRE-165: issues fixes * updated reasons for refusals --------- Co-authored-by: rachana-egov Co-authored-by: Ramkrishna-egov * Updated publock * Added a check to avoid multiple leftJoin for projectBeneficiary - fix for multiple left join error * Resolved code comments --------- Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: rachana-egov Co-authored-by: Ramkrishna-egov * fixed reports are not getting refreshed after updating facility (#486) Co-authored-by: rachana-egov * Delivery summary page Resources and quantity added (#473) * Delivery summary page Resources and quantity added * fix for offset increment twice * Delivery summary page Resources and quantity added --------- Co-authored-by: Naveen Renati Co-authored-by: Naveen J <83631045+naveen-egov@users.noreply.github.com> * updated script for closed household (#489) Co-authored-by: rachana-egov * Hcmpre 166 - Moved Localization from ISAR To SQL (#488) * Update closed_household_details.dart (#482) * Fixed pagination refresh issue (#481) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments --------- Co-authored-by: rachana-egov * implemented count for filter search, added todo for combination search count * Fixed count TODO: search with task status filter * Fixed search with task status filter Removed delay in delivery_summary_page.dart * added code comments * HCMPRE-165 issues (#484) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments * HCMPRE-162:: Reload issue fix for closed household and not registered * HCMPRE-165: issues fixes * updated reasons for refusals --------- Co-authored-by: rachana-egov Co-authored-by: Ramkrishna-egov * Updated publock * Added a check to avoid multiple leftJoin for projectBeneficiary - fix for multiple left join error * created new table for localization TODO: separate packages localization delegates to individual package and move the localization model to data_model package for common usage Delete localization related isar files once tested * init Boundary code wise localization.dart * create localization local repo modified module separation from query to exclude and include specified module * modified module exclude in boundary page * modified localization call for boundary selection bug where first value is localized in dropdown * removed un-required localization bloc calls * updated index value to selected language on home * removed login cred --------- Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: rachana-egov Co-authored-by: Ramkrishna-egov * Removed null condition, fixed double is not a subtype of string issue and added null check for table (#490) * HCMPRE-156 : type 'double' is not a subtype of type 'String' * added check if the first table row is null --------- Co-authored-by: rachana-egov Co-authored-by: Naveen J <83631045+naveen-egov@users.noreply.github.com> * HCMPRE-177:: Metric and Table Charts Integration in Mobile dashboard and digit_dss package initial release (#480) * added translator for administration area * Fixed Facility search based on tenant ID * Added disable battery optimization permission for background service * Added disable battery optimization ask permission on App start and background service start * HLM-5984:: Get Precise location on Submitting latitude longitude details * Reverted install_bricks.sh * added new status REGISTERED, NOT_REGISTERED updated conditional check for status by project beneficiaries * added static status_filter.dart integration in search_beneficiary.dart * TODO for selected_filters display condition * integrated household search filters with mdms implemented search based on filters with pagination for Registered and NotRegistered * updated status filter component merge with develop * create individual_global_search and implemented search * Auto Create Project Beneficiary on Edit Household, and disable record delivery if no project beneficiary present * Conflicts resolved * Pop State recapture during registration flow, Disable delivery flow for individual based campaign if project beneficiaries is empty * implemented household_global_search.dart fixed individual_global_search.dart * updated proximity search for household_global_search.dart * Pop State recapture during registration flow, Disable delivery flow for individual based campaign if project beneficiaries is empty (#456) * updated class state from private for customization override in registration_delivery and inventory added pagination for filter search TODO: combination search for registered and not registered needs fix which return only last selected results * adding missed changes for last commit * HCMPRE-55 Dashboard Static Screen added * displaying selected filter value for applied filters in search_beneficiary.dart * updated changelog for inventory and registration_delivery for new dev versions * updated pubspec lock of registration_delivery * removed multiple filter selection modified filter search * fixed delivery team scanner issues in stock_details.dart * Fixed - missing addition of scanned resources to additional fields filter search bug fixes * HCMPRE-74, HCMPRE-82, HCMPRE-83:: Household Reload Fix, Validations for Household details added (#458) * updated individual global search added beneficiary type check in view_beneficiary_card.dart removed commented code in household_overview.dart * Added null check for beneficiaryTag in closed_household_summary.dart * Exposed Registration delivery pages * updated remote repository and some miner fixes (#461) Co-authored-by: rachana-egov * HCMPRE-82:: Validations and Bug Fixes * small css fixes (#462) Co-authored-by: rachana-egov Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> * merge fix * added closed household search * status model fix * Closed-household-registration (#464) * closed-household-registration * closed-household-registration * updated pub file --------- Co-authored-by: rachana-egov * added closed household init file modified user_action.dart model and db corrected modified closed household status * updated registration for closed household * added closed_household search and updating closed household status * clearing search before navigating to registration flow * getting last tasks in household_overview.dart * HCMPRE-107:: Summary page added for Delivery Flow, HCMPRE-111:: Disable Delete household if beneficiary not present (#463) * Validation and gps fixes * fixed closed household count clearing closedhould results for clear * pagination fix for closed household * sync down for closed household, updated scan voucher button, and remove the tag when we navigate to a different page (#465) Co-authored-by: rachana-egov * DeliverySummary Route added to main app * seperated closedhousehold search Bug fixes - HCMPRE-112, 110, 113 * updated all the points of this ticket HCMPRE-120 (#466) Co-authored-by: rachana-egov * Bug Fixes, dev version release of packages * HCMPRE-119:: IRS Demo fixes (#468) * HCMPRE-119:: IRS Demo fixes * Removed unused code * updated closed button action to push closedhousehold tasks filter with last fix * updated validation for closed household name and fix error message size (#470) Co-authored-by: rachana-egov * Irs demo fix patch (#469) * HCMPRE-119:: IRS Demo fixes * Removed unused code * Edit Household if no project beneficiary fix * reverted hiding of digit search bar when closed filter is applied * status update based on last task status in household_overview.dart mapped administered success in beneficiary_card.dart moved getstatus to utils.dart * fixed offset increasing twice * HCMPRE-121:: Enter manual code fix and Search Beneficiary fixes (#471) * HCMPRE-121:: Enter manual code fix and Search Beneficiary fixes * Added date formats to constants * fixed offset increasing twice closed household distance fix emitting scanner state loading * dev version bump-up for registration and scanner * version updates for packages * View Household button added in delete individual success page, Search project beneficiary fix * added close button to close the filter and disabled the clear button … (#475) * added close button to close the filter and disabled the clear button unless something is selected * added validation for closed household head name same as individual * updated the condition for validation of closehousehold head --------- Co-authored-by: rachana-egov * View Household button added in delete individual success page, Search project beneficiary fix (#474) * Search beneficiary fix * Search beneficiary fix * Bloc dispose fix * Bloc dispose fix * Updated task based search for household * HCMPRE-177:: Metric Chart Integration and digit_dss package setup * HCMPRE-177:: Added Refresh Indicator for refreshing the dashboard * HCMPRE-177:: Table chart integration and Refresh logic update * Added code comments for digit_dss package * Added enums and constants * Resolved code comments and updated versions for packages * HCMPRE177:: Moved dashboard UI Config to MDMS * HCMPRE177:: Added dss_import script for digit_dss package * Resolved code comments * Updated dashboard Config * Added dashboard config search to try catch block * Resolved conflicts * published data_model and registration_delivery * Added Read me file and updated pubspec.yaml --------- Co-authored-by: Naveen Renati Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: rachana-egov Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> * HCMPRE-177:: Fetch and send attendees uuids of registers to dss filters (#491) * added translator for administration area * Fixed Facility search based on tenant ID * Added disable battery optimization permission for background service * Added disable battery optimization ask permission on App start and background service start * HLM-5984:: Get Precise location on Submitting latitude longitude details * Reverted install_bricks.sh * added new status REGISTERED, NOT_REGISTERED updated conditional check for status by project beneficiaries * added static status_filter.dart integration in search_beneficiary.dart * TODO for selected_filters display condition * integrated household search filters with mdms implemented search based on filters with pagination for Registered and NotRegistered * updated status filter component merge with develop * create individual_global_search and implemented search * Auto Create Project Beneficiary on Edit Household, and disable record delivery if no project beneficiary present * Conflicts resolved * Pop State recapture during registration flow, Disable delivery flow for individual based campaign if project beneficiaries is empty * implemented household_global_search.dart fixed individual_global_search.dart * updated proximity search for household_global_search.dart * Pop State recapture during registration flow, Disable delivery flow for individual based campaign if project beneficiaries is empty (#456) * updated class state from private for customization override in registration_delivery and inventory added pagination for filter search TODO: combination search for registered and not registered needs fix which return only last selected results * adding missed changes for last commit * HCMPRE-55 Dashboard Static Screen added * displaying selected filter value for applied filters in search_beneficiary.dart * updated changelog for inventory and registration_delivery for new dev versions * updated pubspec lock of registration_delivery * removed multiple filter selection modified filter search * fixed delivery team scanner issues in stock_details.dart * Fixed - missing addition of scanned resources to additional fields filter search bug fixes * HCMPRE-74, HCMPRE-82, HCMPRE-83:: Household Reload Fix, Validations for Household details added (#458) * updated individual global search added beneficiary type check in view_beneficiary_card.dart removed commented code in household_overview.dart * Added null check for beneficiaryTag in closed_household_summary.dart * Exposed Registration delivery pages * updated remote repository and some miner fixes (#461) Co-authored-by: rachana-egov * HCMPRE-82:: Validations and Bug Fixes * small css fixes (#462) Co-authored-by: rachana-egov Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> * merge fix * added closed household search * status model fix * Closed-household-registration (#464) * closed-household-registration * closed-household-registration * updated pub file --------- Co-authored-by: rachana-egov * added closed household init file modified user_action.dart model and db corrected modified closed household status * updated registration for closed household * added closed_household search and updating closed household status * clearing search before navigating to registration flow * getting last tasks in household_overview.dart * HCMPRE-107:: Summary page added for Delivery Flow, HCMPRE-111:: Disable Delete household if beneficiary not present (#463) * Validation and gps fixes * fixed closed household count clearing closedhould results for clear * pagination fix for closed household * sync down for closed household, updated scan voucher button, and remove the tag when we navigate to a different page (#465) Co-authored-by: rachana-egov * DeliverySummary Route added to main app * seperated closedhousehold search Bug fixes - HCMPRE-112, 110, 113 * updated all the points of this ticket HCMPRE-120 (#466) Co-authored-by: rachana-egov * Bug Fixes, dev version release of packages * HCMPRE-119:: IRS Demo fixes (#468) * HCMPRE-119:: IRS Demo fixes * Removed unused code * updated closed button action to push closedhousehold tasks filter with last fix * updated validation for closed household name and fix error message size (#470) Co-authored-by: rachana-egov * Irs demo fix patch (#469) * HCMPRE-119:: IRS Demo fixes * Removed unused code * Edit Household if no project beneficiary fix * reverted hiding of digit search bar when closed filter is applied * status update based on last task status in household_overview.dart mapped administered success in beneficiary_card.dart moved getstatus to utils.dart * fixed offset increasing twice * HCMPRE-121:: Enter manual code fix and Search Beneficiary fixes (#471) * HCMPRE-121:: Enter manual code fix and Search Beneficiary fixes * Added date formats to constants * fixed offset increasing twice closed household distance fix emitting scanner state loading * dev version bump-up for registration and scanner * version updates for packages * View Household button added in delete individual success page, Search project beneficiary fix * added close button to close the filter and disabled the clear button … (#475) * added close button to close the filter and disabled the clear button unless something is selected * added validation for closed household head name same as individual * updated the condition for validation of closehousehold head --------- Co-authored-by: rachana-egov * View Household button added in delete individual success page, Search project beneficiary fix (#474) * Search beneficiary fix * Search beneficiary fix * Bloc dispose fix * Bloc dispose fix * Updated task based search for household * HCMPRE-177:: Metric Chart Integration and digit_dss package setup * HCMPRE-177:: Added Refresh Indicator for refreshing the dashboard * HCMPRE-177:: Table chart integration and Refresh logic update * Added code comments for digit_dss package * Added enums and constants * Resolved code comments and updated versions for packages * HCMPRE177:: Moved dashboard UI Config to MDMS * HCMPRE177:: Added dss_import script for digit_dss package * Resolved code comments * Updated dashboard Config * Added dashboard config search to try catch block * Resolved conflicts * published data_model and registration_delivery * Added Read me file and updated pubspec.yaml * Fetch and send attendees uuids of registers to dss filters * Added dss filters --------- Co-authored-by: Naveen Renati Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: rachana-egov Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> * Task update rather than creating new, updated filter popup loading (#493) * Update closed_household_details.dart (#482) * Fixed pagination refresh issue (#481) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments --------- Co-authored-by: rachana-egov * implemented count for filter search, added todo for combination search count * Fixed count TODO: search with task status filter * Fixed search with task status filter Removed delay in delivery_summary_page.dart * added code comments * HCMPRE-165 issues (#484) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments * HCMPRE-162:: Reload issue fix for closed household and not registered * HCMPRE-165: issues fixes * updated reasons for refusals --------- Co-authored-by: rachana-egov Co-authored-by: Ramkrishna-egov * Updated publock * Added a check to avoid multiple leftJoin for projectBeneficiary - fix for multiple left join error * Resolved code comments * HCMPRE220:: Household overview state update on pushing to Registration Wrapper * update task state if task is already present * updated selection box to update on initial selection change and updated delivery comment code * remove changes from beneficiary * task update * HCMPRE-220:: SMC Not registered flow reload fix,and closed household Not delivered status fix * added loader for filter search * Added name of user to additional details in stock and delivery record * updated delivery intervention * check summary page condition for edit flow * fixed task update for delivery intervention * fixed household detail page --------- Co-authored-by: rachana-egov Co-authored-by: Naveen Renati Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * updated status and registration_delivery_enums.dart (#494) * updated status and registration_delivery_enums.dart updated check for check-list check in household_overview.dart * Todo for individual check in beneficiary_registration.dart * Uploaded pre release for inventory-management and digit-dss (#495) * removed the page count from filter, updated status filter pop up (#496) Co-authored-by: rachana-egov * updated demo changes (#498) Co-authored-by: rachana-egov * added lat and long inside additional field when user submit the checklist (#526) Co-authored-by: rachana-egov * HCMPRE-221 data segration (#501) * Update closed_household_details.dart (#482) * Fixed pagination refresh issue (#481) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments --------- Co-authored-by: rachana-egov * implemented count for filter search, added todo for combination search count * Fixed count TODO: search with task status filter * Fixed search with task status filter Removed delay in delivery_summary_page.dart * added code comments * HCMPRE-165 issues (#484) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments * HCMPRE-162:: Reload issue fix for closed household and not registered * HCMPRE-165: issues fixes * updated reasons for refusals --------- Co-authored-by: rachana-egov Co-authored-by: Ramkrishna-egov * Updated publock * Added a check to avoid multiple leftJoin for projectBeneficiary - fix for multiple left join error * created new table for localization TODO: separate packages localization delegates to individual package and move the localization model to data_model package for common usage Delete localization related isar files once tested * init Boundary code wise localization.dart * create localization local repo modified module separation from query to exclude and include specified module * modified module exclude in boundary page * modified localization call for boundary selection bug where first value is localized in dropdown * removed un-required localization bloc calls * updated index value to selected language on home * Uploaded pre release for inventory-management and digit-dss * Updated delivery enums for Not delivered status * Updated status model in task to taskStatus * Updated registration delivery package * Reverted Task Model status key change * Update pubspec with latest version of packages * Summary page Type of resource locale key updated * Resolved comments * Resolved comments and unused variables * Resolved comments and unused variables * Updated version * Updated individual_global_search.dart for search * added data segration * check to enable edit delivery * added project filter * Registration delivery- Attendance management fixes (#497) * Removed captured location dialog on attendance submit * Removed stpper if deliveries length is greater than 1 * Updated digit_components and digit_data_model packages in attendance management * Updated digit_components and digit_data_model packages in attendance management * Localization loader and dialog localization fix (#505) * added dialog till localization is not loaded * fixed localization not coming issue * added a util funtion to show language loading --------- Co-authored-by: rachana-egov * updated search added project id in beneficiary search removed commented code * User uuids filter fixes for attendees local search in an attendance register (#512) * User uuids filters fixes for attendees search in a register * Removed default dashboard card from home * Sync fix --------- Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> * Added Task address mapping on refused delivery (#514) * replace and push homepage from boundary page sync dialog * updated register search query to exclude attendee and staff in limit query updated attendance and registration_delivery package * registration_delivery package update * * Added error toast for network failure (#525) * No result card added if no charts available * Updated end date for dss charts to 23:59 instead of 11:59 (#527) * task create fix - removed condition check of resources during create updated changelog of registration, closed, digit_data_model, inventory, registration_delivery --dry-run fixes * Updated stable packages for scanner, attendance and dss (#528) * updated packages to latest version digit_components version update --------- Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: rachana-egov Co-authored-by: Naveen Renati Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> * Added Privacy Policy (#499) * added data privacy component * added privacy component * updated localization * updated the dialog to use localized value * updated privacy config inside mdms * updated privacy model * removed local privacy config now coming from mdms * Delete packages/digit_components/lib/widgets/atoms/privacy_component.dart as component is part of main application * fixed github build issue * added a configuration to enable or disable this privacy policy component * fix the issue when privacy policy component is not there * fix the issue when privacy policy component is not there * fixed github comments --------- Co-authored-by: rachana-egov * HCMPRE-332:: Mobile dashboard added check for lastSyncTime to convert to date format (#540) * HCMPRE-332:: Mobile dashboard added check for lastSyncTime to convert to date format * added a enum for lastSyncedTime --------- Co-authored-by: rachana-egov * Hcmpre 263 - Sync write transaction for ISAR - fix, Localization fall back (#538) * Update closed_household_details.dart (#482) * Fixed pagination refresh issue (#481) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments --------- Co-authored-by: rachana-egov * implemented count for filter search, added todo for combination search count * Fixed count TODO: search with task status filter * Fixed search with task status filter Removed delay in delivery_summary_page.dart * added code comments * HCMPRE-165 issues (#484) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments * HCMPRE-162:: Reload issue fix for closed household and not registered * HCMPRE-165: issues fixes * updated reasons for refusals --------- Co-authored-by: rachana-egov Co-authored-by: Ramkrishna-egov * Updated publock * Added a check to avoid multiple leftJoin for projectBeneficiary - fix for multiple left join error * created new table for localization TODO: separate packages localization delegates to individual package and move the localization model to data_model package for common usage Delete localization related isar files once tested * init Boundary code wise localization.dart * create localization local repo modified module separation from query to exclude and include specified module * modified module exclude in boundary page * modified localization call for boundary selection bug where first value is localized in dropdown * removed un-required localization bloc calls * updated index value to selected language on home * Uploaded pre release for inventory-management and digit-dss * Updated delivery enums for Not delivered status * Updated status model in task to taskStatus * Updated registration delivery package * Reverted Task Model status key change * Update pubspec with latest version of packages * Summary page Type of resource locale key updated * Resolved comments * Resolved comments and unused variables * Resolved comments and unused variables * Updated version * Updated individual_global_search.dart for search * added data segration * check to enable edit delivery * added project filter * Registration delivery- Attendance management fixes (#497) * Removed captured location dialog on attendance submit * Removed stpper if deliveries length is greater than 1 * Updated digit_components and digit_data_model packages in attendance management * Updated digit_components and digit_data_model packages in attendance management * Localization loader and dialog localization fix (#505) * added dialog till localization is not loaded * fixed localization not coming issue * added a util funtion to show language loading --------- Co-authored-by: rachana-egov * updated search added project id in beneficiary search removed commented code * User uuids filter fixes for attendees local search in an attendance register (#512) * User uuids filters fixes for attendees search in a register * Removed default dashboard card from home * Sync fix --------- Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> * Added Task address mapping on refused delivery (#514) * replace and push homepage from boundary page sync dialog * updated register search query to exclude attendee and staff in limit query updated attendance and registration_delivery package * registration_delivery package update * * Added error toast for network failure (#525) * No result card added if no charts available * Updated end date for dss charts to 23:59 instead of 11:59 (#527) * task create fix - removed condition check of resources during create updated changelog of registration, closed, digit_data_model, inventory, registration_delivery --dry-run fixes * Updated stable packages for scanner, attendance and dss (#528) * updated packages to latest version digit_components version update * added fallback ui dialog when localization call fails. * added localization code * merge from dev * fix for isar transaction lock issue * moved boundary localization path to constants. Updated dialog in language_selection.dart page * isar lock fix * updated data_model version for isar fix. updated a check in language_selection.dart for dialog --------- Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: rachana-egov Co-authored-by: Ramkrishna-egov Co-authored-by: naveen-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * Impel changes - background-services, beneficiary_checklist (#548) * Update closed_household_details.dart (#482) * Fixed pagination refresh issue (#481) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments --------- Co-authored-by: rachana-egov * implemented count for filter search, added todo for combination search count * Fixed count TODO: search with task status filter * Fixed search with task status filter Removed delay in delivery_summary_page.dart * added code comments * HCMPRE-165 issues (#484) * Implement search pagination (#476) * implemented pagination for search * added one more check to check if last response is equal to current response then also break the loop * removed changes from data repository and added pagination only project facility and facility --------- Co-authored-by: rachana-egov * localization update, input validation for numeric, disabled delivery intervention for closed household task (#479) Co-authored-by: rachana-egov * fixed pagination refresh issue * resolved the comments * HCMPRE-162:: Reload issue fix for closed household and not registered * HCMPRE-165: issues fixes * updated reasons for refusals --------- Co-authored-by: rachana-egov Co-authored-by: Ramkrishna-egov * Updated publock * Added a check to avoid multiple leftJoin for projectBeneficiary - fix for multiple left join error * created new table for localization TODO: separate packages localization delegates to individual package and move the localization model to data_model package for common usage Delete localization related isar files once tested * init Boundary code wise localization.dart * create localization local repo modified module separation from query to exclude and include specified module * modified module exclude in boundary page * modified localization call for boundary selection bug where first value is localized in dropdown * removed un-required localization bloc calls * updated index value to selected language on home * Uploaded pre release for inventory-management and digit-dss * Updated delivery enums for Not delivered status * Updated status model in task to taskStatus * Updated registration delivery package * Reverted Task Model status key change * Update pubspec with latest version of packages * Summary page Type of resource locale key updated * Resolved comments * Resolved comments and unused variables * Resolved comments and unused variables * Updated version * Updated individual_global_search.dart for search * added data segration * check to enable edit delivery * added project filter * Registration delivery- Attendance management fixes (#497) * Removed captured location dialog on attendance submit * Removed stpper if deliveries length is greater than 1 * Updated digit_components and digit_data_model packages in attendance management * Updated digit_components and digit_data_model packages in attendance management * Localization loader and dialog localization fix (#505) * added dialog till localization is not loaded * fixed localization not coming issue * added a util funtion to show language loading --------- Co-authored-by: rachana-egov * updated search added project id in beneficiary search removed commented code * User uuids filter fixes for attendees local search in an attendance register (#512) * User uuids filters fixes for attendees search in a register * Removed default dashboard card from home * Sync fix --------- Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> * Added Task address mapping on refused delivery (#514) * replace and push homepage from boundary page sync dialog * updated register search query to exclude attendee and staff in limit query updated attendance and registration_delivery package * registration_delivery package update * * Added error toast for network failure (#525) * No result card added if no charts available * Updated end date for dss charts to 23:59 instead of 11:59 (#527) * task create fix - removed condition check of resources during create updated changelog of registration, closed, digit_data_model, inventory, registration_delivery --dry-run fixes * Updated stable packages for scanner, attendance and dss (#528) * updated packages to latest version digit_components version update * added fallback ui dialog when localization call fails. * added localization code * merge from dev * fix for isar transaction lock issue * moved boundary localization path to constants. Updated dialog in language_selection.dart page * isar lock fix * pulled changes from impel related to background service added missing audit details and client audit details for beneficiary_checklist.dart --------- Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: rachana-egov Co-authored-by: Ramkrishna-egov Co-authored-by: naveen-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * resolved code rabbit comments (#549) * privacy policy config issue fix (#550) Co-authored-by: rachana-egov * fixed text ellipse issue (#553) Co-authored-by: rachana-egov * Resource validation added (#555) * added project valid check, fixed house type selection issue, added resource duplicate check * removed split code for boundary * fixed pop up not closing issue * removed credentials --------- Co-authored-by: rachana-egov * UAT fixes, HCMPRE-412 (#556) * added project valid check, fixed house type selection issue, added resource duplicate check * removed split code for boundary * fixed pop up not closing issue * removed credentials * HCMPRE-412 - creating beneficiary for all individuals if not registered, reload event fix, removed dialog for loader of localization.dart * added check condition to show status and updated selection card * beneficiary_checklist.dart code compare with enum * fix state not getting updated issue (#557) Co-authored-by: rachana-egov * Fixed dashboard chart delete fixes in isar (#558) * Resource validation added (#555) * added project valid check, fixed house type selection issue, added resource duplicate check * removed split code for boundary * fixed pop up not closing issue * removed credentials --------- Co-authored-by: rachana-egov * Fixed dashboard chart delete fixes in isar * Update language_selection.dart --------- Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: rachana-egov Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> * updated packages version and published --------- Co-authored-by: rachana-egov Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * removed dialog closing function from language page (#560) Co-authored-by: rachana-egov * remved privacy policy from main app to digit component --------- Co-authored-by: rachana-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Co-authored-by: Naveen J <83631045+naveen-egov@users.noreply.github.com> Co-authored-by: Naveen Renati Co-authored-by: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: naveen-egov --- .../lib/pages/login.dart | 30 +- .../lib/utils/localization_delegates.dart | 7 +- .../pubspec.lock | 7 +- .../lib/blocs/localization.dart | 52 ++ .../lib/blocs/localization_delegates.dart | 33 + .../privacy_notice/privacy_notice_model.dart | 50 ++ .../privacy_notice_model.freezed.dart | 808 ++++++++++++++++++ .../privacy_notice_model.g.dart | 83 ++ .../lib/models/privacy_policy_model.dart | 95 ++ .../lib/utils/i18_key_constants.dart | 20 + .../lib/widgets/localized.dart | 33 + .../privacy_notice/privacy_component.dart | 9 +- .../privacy_notice/privacy_notice_dialog.dart | 11 +- .../privacy_notice_expand_component.dart | 13 +- 14 files changed, 1229 insertions(+), 22 deletions(-) create mode 100644 packages/digit_components/lib/blocs/localization.dart create mode 100644 packages/digit_components/lib/blocs/localization_delegates.dart create mode 100644 packages/digit_components/lib/models/privacy_notice/privacy_notice_model.dart create mode 100644 packages/digit_components/lib/models/privacy_notice/privacy_notice_model.freezed.dart create mode 100644 packages/digit_components/lib/models/privacy_notice/privacy_notice_model.g.dart create mode 100644 packages/digit_components/lib/models/privacy_policy_model.dart create mode 100644 packages/digit_components/lib/utils/i18_key_constants.dart create mode 100644 packages/digit_components/lib/widgets/localized.dart rename {apps/health_campaign_field_worker_app => packages/digit_components}/lib/widgets/privacy_notice/privacy_component.dart (96%) rename {apps/health_campaign_field_worker_app => packages/digit_components}/lib/widgets/privacy_notice/privacy_notice_dialog.dart (95%) rename {apps/health_campaign_field_worker_app => packages/digit_components}/lib/widgets/privacy_notice/privacy_notice_expand_component.dart (96%) diff --git a/apps/health_campaign_field_worker_app/lib/pages/login.dart b/apps/health_campaign_field_worker_app/lib/pages/login.dart index f0912efb5..1a3fdd019 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/login.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/login.dart @@ -1,5 +1,7 @@ import 'package:digit_components/digit_components.dart'; +import 'package:digit_components/models/privacy_notice/privacy_notice_model.dart'; import 'package:digit_components/widgets/atoms/digit_toaster.dart'; +import 'package:digit_components/widgets/privacy_notice/privacy_component.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; @@ -11,7 +13,7 @@ import '../router/app_router.dart'; import '../utils/environment_config.dart'; import '../utils/i18_key_constants.dart' as i18; import '../widgets/localized.dart'; -import '../widgets/privacy_notice/privacy_component.dart'; + @RoutePage() class LoginPage extends LocalizedStatefulWidget { @@ -140,7 +142,7 @@ class _LoginPageState extends LocalizedState { form.control(_privacyCheck).setValidators([Validators.requiredTrue]); form.control(_privacyCheck).updateValueAndValidity(); return PrivacyComponent( - privacyPolicy: privacyPolicyJson, + privacyPolicy: convertToPrivacyPolicyModel(privacyPolicyJson), formControlName: _privacyCheck, text: localizations .translate(i18.privacyPolicy.privacyNoticeText), @@ -237,3 +239,27 @@ class _LoginPageState extends LocalizedState { ) }); } + + +// convert to privacy notice model +PrivacyNoticeModel? convertToPrivacyPolicyModel(PrivacyPolicy? privacyPolicy) { + return PrivacyNoticeModel( + header: privacyPolicy?.header ?? '', + module: privacyPolicy?.module ?? '', + active: privacyPolicy?.active, + contents: privacyPolicy?.contents?.map((content) => ContentNoticeModel( + header: content.header, + descriptions: content.descriptions?.map((description) => DescriptionNoticeModel( + text: description.text, + type: description.type, + isBold: description.isBold, + subDescriptions: description.subDescriptions?.map((subDescription) => SubDescriptionNoticeModel( + text: subDescription.text, + type: subDescription.type, + isBold: subDescription.isBold, + isSpaceRequired: subDescription.isSpaceRequired, + )).toList(), + )).toList(), + )).toList(), + ); +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart b/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart index 6e62855fe..700760a8e 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart @@ -16,6 +16,7 @@ import 'package:referral_reconciliation/blocs/app_localization.dart' as referral_reconciliation_localization; import 'package:registration_delivery/blocs/app_localization.dart' as registration_delivery_localization; +import 'package:digit_components/blocs/localization.dart' as component_localization; import '../blocs/localization/app_localization.dart'; import '../data/local_store/no_sql/schema/app_configuration.dart'; @@ -59,6 +60,10 @@ getAppLocalizationDelegates({ digit_dss_localization.DashboardLocalization.getDelegate( LocalizationLocalRepository().returnLocalizationFromSQL(sql) as Future, appConfig.languages!, - ) + ), + component_localization.ComponentLocalization.getDelegate( + LocalizationLocalRepository().returnLocalizationFromSQL(sql) as Future, + appConfig.languages!, + ), ]; } diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index c96f0b5fd..371a1a8d1 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -493,10 +493,9 @@ packages: digit_components: dependency: "direct main" description: - name: digit_components - sha256: "9cca4d9a546037080afe02b6ade82fdf01574e11f5656ad12120fd6966578616" - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_components" + relative: true + source: path version: "1.0.1+1" digit_data_model: dependency: "direct main" diff --git a/packages/digit_components/lib/blocs/localization.dart b/packages/digit_components/lib/blocs/localization.dart new file mode 100644 index 000000000..d393cfefa --- /dev/null +++ b/packages/digit_components/lib/blocs/localization.dart @@ -0,0 +1,52 @@ +import 'package:flutter/material.dart'; + +import 'localization_delegates.dart'; + + +// Class responsible for handling component localization +class ComponentLocalization { + final Locale locale; + final Future localizedStrings; + final List languages; + + ComponentLocalization(this.locale, this.localizedStrings, this.languages); + + // Method to get the current localization instance from context + static ComponentLocalization of(BuildContext context) { + return Localizations.of(context, ComponentLocalization)!; + } + + static final List _localizedStrings = []; + + // Method to get the delegate for localization + static LocalizationsDelegate getDelegate( + Future localizedStrings, List languages) => + ComponentLocalizationDelegate(localizedStrings, languages); + + // Method to load localized strings + Future load() async { + _localizedStrings.clear(); + // Iterate over localized strings and filter based on locale + for (var element in await localizedStrings) { + if (element.locale == '${locale.languageCode}_${locale.countryCode}') { + _localizedStrings.add(element); + } + } + + return true; + } + + // Method to translate a given localized value + String translate(String localizedValues) { + + if (_localizedStrings.isEmpty) { + return localizedValues; + } else { + final index = _localizedStrings.indexWhere( + (medium) => medium.code == localizedValues, + ); + + return index != -1 ? _localizedStrings[index].message : localizedValues; + } + } +} \ No newline at end of file diff --git a/packages/digit_components/lib/blocs/localization_delegates.dart b/packages/digit_components/lib/blocs/localization_delegates.dart new file mode 100644 index 000000000..3d2e2dd16 --- /dev/null +++ b/packages/digit_components/lib/blocs/localization_delegates.dart @@ -0,0 +1,33 @@ +import 'package:flutter/material.dart'; + +import 'localization.dart'; + + +class ComponentLocalizationDelegate + extends LocalizationsDelegate { + final Future localizedStrings; + final List languages; + + const ComponentLocalizationDelegate(this.localizedStrings, this.languages); + + @override + bool isSupported(Locale locale) { + return languages.map((e) { + final results = e.value.split('_'); + if (results.isNotEmpty) return results.first; + }).contains(locale.languageCode); + } + + @override + Future load(Locale locale) async { + ComponentLocalization localization = + ComponentLocalization(locale, localizedStrings, languages); + await localization.load(); + return localization; + } + + @override + bool shouldReload(covariant LocalizationsDelegate old) { + return true; + } +} \ No newline at end of file diff --git a/packages/digit_components/lib/models/privacy_notice/privacy_notice_model.dart b/packages/digit_components/lib/models/privacy_notice/privacy_notice_model.dart new file mode 100644 index 000000000..f2d1f896c --- /dev/null +++ b/packages/digit_components/lib/models/privacy_notice/privacy_notice_model.dart @@ -0,0 +1,50 @@ +import 'package:freezed_annotation/freezed_annotation.dart'; + +part 'privacy_notice_model.freezed.dart'; +part 'privacy_notice_model.g.dart'; + +@freezed +class PrivacyNoticeModel with _$PrivacyNoticeModel { + const factory PrivacyNoticeModel({ + required String header, + required String module, + bool? active, + List? contents, + }) = _PrivacyNoticeModel; + + factory PrivacyNoticeModel.fromJson(Map json) => _$PrivacyNoticeModelFromJson(json); +} + +@freezed +class ContentNoticeModel with _$ContentNoticeModel { + const factory ContentNoticeModel({ + String? header, + List? descriptions, + }) = _ContentNoticeModel; + + factory ContentNoticeModel.fromJson(Map json) => _$ContentNoticeModelFromJson(json); +} + +@freezed +class DescriptionNoticeModel with _$DescriptionNoticeModel { + const factory DescriptionNoticeModel({ + String? text, + String? type, + bool? isBold, + List? subDescriptions, + }) = _DescriptionNoticeModel; + + factory DescriptionNoticeModel.fromJson(Map json) => _$DescriptionNoticeModelFromJson(json); +} + +@freezed +class SubDescriptionNoticeModel with _$SubDescriptionNoticeModel { + const factory SubDescriptionNoticeModel({ + String? text, + String? type, + bool? isBold, + bool? isSpaceRequired, + }) = _SubDescriptionNoticeModel; + + factory SubDescriptionNoticeModel.fromJson(Map json) => _$SubDescriptionNoticeModelFromJson(json); +} diff --git a/packages/digit_components/lib/models/privacy_notice/privacy_notice_model.freezed.dart b/packages/digit_components/lib/models/privacy_notice/privacy_notice_model.freezed.dart new file mode 100644 index 000000000..2090ee866 --- /dev/null +++ b/packages/digit_components/lib/models/privacy_notice/privacy_notice_model.freezed.dart @@ -0,0 +1,808 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'privacy_notice_model.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + +PrivacyNoticeModel _$PrivacyNoticeModelFromJson(Map json) { + return _PrivacyNoticeModel.fromJson(json); +} + +/// @nodoc +mixin _$PrivacyNoticeModel { + String get header => throw _privateConstructorUsedError; + String get module => throw _privateConstructorUsedError; + bool? get active => throw _privateConstructorUsedError; + List? get contents => throw _privateConstructorUsedError; + + Map toJson() => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + $PrivacyNoticeModelCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $PrivacyNoticeModelCopyWith<$Res> { + factory $PrivacyNoticeModelCopyWith( + PrivacyNoticeModel value, $Res Function(PrivacyNoticeModel) then) = + _$PrivacyNoticeModelCopyWithImpl<$Res, PrivacyNoticeModel>; + @useResult + $Res call( + {String header, + String module, + bool? active, + List? contents}); +} + +/// @nodoc +class _$PrivacyNoticeModelCopyWithImpl<$Res, $Val extends PrivacyNoticeModel> + implements $PrivacyNoticeModelCopyWith<$Res> { + _$PrivacyNoticeModelCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? header = null, + Object? module = null, + Object? active = freezed, + Object? contents = freezed, + }) { + return _then(_value.copyWith( + header: null == header + ? _value.header + : header // ignore: cast_nullable_to_non_nullable + as String, + module: null == module + ? _value.module + : module // ignore: cast_nullable_to_non_nullable + as String, + active: freezed == active + ? _value.active + : active // ignore: cast_nullable_to_non_nullable + as bool?, + contents: freezed == contents + ? _value.contents + : contents // ignore: cast_nullable_to_non_nullable + as List?, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$PrivacyNoticeModelImplCopyWith<$Res> + implements $PrivacyNoticeModelCopyWith<$Res> { + factory _$$PrivacyNoticeModelImplCopyWith(_$PrivacyNoticeModelImpl value, + $Res Function(_$PrivacyNoticeModelImpl) then) = + __$$PrivacyNoticeModelImplCopyWithImpl<$Res>; + @override + @useResult + $Res call( + {String header, + String module, + bool? active, + List? contents}); +} + +/// @nodoc +class __$$PrivacyNoticeModelImplCopyWithImpl<$Res> + extends _$PrivacyNoticeModelCopyWithImpl<$Res, _$PrivacyNoticeModelImpl> + implements _$$PrivacyNoticeModelImplCopyWith<$Res> { + __$$PrivacyNoticeModelImplCopyWithImpl(_$PrivacyNoticeModelImpl _value, + $Res Function(_$PrivacyNoticeModelImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? header = null, + Object? module = null, + Object? active = freezed, + Object? contents = freezed, + }) { + return _then(_$PrivacyNoticeModelImpl( + header: null == header + ? _value.header + : header // ignore: cast_nullable_to_non_nullable + as String, + module: null == module + ? _value.module + : module // ignore: cast_nullable_to_non_nullable + as String, + active: freezed == active + ? _value.active + : active // ignore: cast_nullable_to_non_nullable + as bool?, + contents: freezed == contents + ? _value._contents + : contents // ignore: cast_nullable_to_non_nullable + as List?, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$PrivacyNoticeModelImpl implements _PrivacyNoticeModel { + const _$PrivacyNoticeModelImpl( + {required this.header, + required this.module, + this.active, + final List? contents}) + : _contents = contents; + + factory _$PrivacyNoticeModelImpl.fromJson(Map json) => + _$$PrivacyNoticeModelImplFromJson(json); + + @override + final String header; + @override + final String module; + @override + final bool? active; + final List? _contents; + @override + List? get contents { + final value = _contents; + if (value == null) return null; + if (_contents is EqualUnmodifiableListView) return _contents; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); + } + + @override + String toString() { + return 'PrivacyNoticeModel(header: $header, module: $module, active: $active, contents: $contents)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$PrivacyNoticeModelImpl && + (identical(other.header, header) || other.header == header) && + (identical(other.module, module) || other.module == module) && + (identical(other.active, active) || other.active == active) && + const DeepCollectionEquality().equals(other._contents, _contents)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => Object.hash(runtimeType, header, module, active, + const DeepCollectionEquality().hash(_contents)); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$PrivacyNoticeModelImplCopyWith<_$PrivacyNoticeModelImpl> get copyWith => + __$$PrivacyNoticeModelImplCopyWithImpl<_$PrivacyNoticeModelImpl>( + this, _$identity); + + @override + Map toJson() { + return _$$PrivacyNoticeModelImplToJson( + this, + ); + } +} + +abstract class _PrivacyNoticeModel implements PrivacyNoticeModel { + const factory _PrivacyNoticeModel( + {required final String header, + required final String module, + final bool? active, + final List? contents}) = _$PrivacyNoticeModelImpl; + + factory _PrivacyNoticeModel.fromJson(Map json) = + _$PrivacyNoticeModelImpl.fromJson; + + @override + String get header; + @override + String get module; + @override + bool? get active; + @override + List? get contents; + @override + @JsonKey(ignore: true) + _$$PrivacyNoticeModelImplCopyWith<_$PrivacyNoticeModelImpl> get copyWith => + throw _privateConstructorUsedError; +} + +ContentNoticeModel _$ContentNoticeModelFromJson(Map json) { + return _ContentNoticeModel.fromJson(json); +} + +/// @nodoc +mixin _$ContentNoticeModel { + String? get header => throw _privateConstructorUsedError; + List? get descriptions => + throw _privateConstructorUsedError; + + Map toJson() => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + $ContentNoticeModelCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $ContentNoticeModelCopyWith<$Res> { + factory $ContentNoticeModelCopyWith( + ContentNoticeModel value, $Res Function(ContentNoticeModel) then) = + _$ContentNoticeModelCopyWithImpl<$Res, ContentNoticeModel>; + @useResult + $Res call({String? header, List? descriptions}); +} + +/// @nodoc +class _$ContentNoticeModelCopyWithImpl<$Res, $Val extends ContentNoticeModel> + implements $ContentNoticeModelCopyWith<$Res> { + _$ContentNoticeModelCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? header = freezed, + Object? descriptions = freezed, + }) { + return _then(_value.copyWith( + header: freezed == header + ? _value.header + : header // ignore: cast_nullable_to_non_nullable + as String?, + descriptions: freezed == descriptions + ? _value.descriptions + : descriptions // ignore: cast_nullable_to_non_nullable + as List?, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$ContentNoticeModelImplCopyWith<$Res> + implements $ContentNoticeModelCopyWith<$Res> { + factory _$$ContentNoticeModelImplCopyWith(_$ContentNoticeModelImpl value, + $Res Function(_$ContentNoticeModelImpl) then) = + __$$ContentNoticeModelImplCopyWithImpl<$Res>; + @override + @useResult + $Res call({String? header, List? descriptions}); +} + +/// @nodoc +class __$$ContentNoticeModelImplCopyWithImpl<$Res> + extends _$ContentNoticeModelCopyWithImpl<$Res, _$ContentNoticeModelImpl> + implements _$$ContentNoticeModelImplCopyWith<$Res> { + __$$ContentNoticeModelImplCopyWithImpl(_$ContentNoticeModelImpl _value, + $Res Function(_$ContentNoticeModelImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? header = freezed, + Object? descriptions = freezed, + }) { + return _then(_$ContentNoticeModelImpl( + header: freezed == header + ? _value.header + : header // ignore: cast_nullable_to_non_nullable + as String?, + descriptions: freezed == descriptions + ? _value._descriptions + : descriptions // ignore: cast_nullable_to_non_nullable + as List?, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$ContentNoticeModelImpl implements _ContentNoticeModel { + const _$ContentNoticeModelImpl( + {this.header, final List? descriptions}) + : _descriptions = descriptions; + + factory _$ContentNoticeModelImpl.fromJson(Map json) => + _$$ContentNoticeModelImplFromJson(json); + + @override + final String? header; + final List? _descriptions; + @override + List? get descriptions { + final value = _descriptions; + if (value == null) return null; + if (_descriptions is EqualUnmodifiableListView) return _descriptions; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); + } + + @override + String toString() { + return 'ContentNoticeModel(header: $header, descriptions: $descriptions)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$ContentNoticeModelImpl && + (identical(other.header, header) || other.header == header) && + const DeepCollectionEquality() + .equals(other._descriptions, _descriptions)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => Object.hash( + runtimeType, header, const DeepCollectionEquality().hash(_descriptions)); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$ContentNoticeModelImplCopyWith<_$ContentNoticeModelImpl> get copyWith => + __$$ContentNoticeModelImplCopyWithImpl<_$ContentNoticeModelImpl>( + this, _$identity); + + @override + Map toJson() { + return _$$ContentNoticeModelImplToJson( + this, + ); + } +} + +abstract class _ContentNoticeModel implements ContentNoticeModel { + const factory _ContentNoticeModel( + {final String? header, + final List? descriptions}) = + _$ContentNoticeModelImpl; + + factory _ContentNoticeModel.fromJson(Map json) = + _$ContentNoticeModelImpl.fromJson; + + @override + String? get header; + @override + List? get descriptions; + @override + @JsonKey(ignore: true) + _$$ContentNoticeModelImplCopyWith<_$ContentNoticeModelImpl> get copyWith => + throw _privateConstructorUsedError; +} + +DescriptionNoticeModel _$DescriptionNoticeModelFromJson( + Map json) { + return _DescriptionNoticeModel.fromJson(json); +} + +/// @nodoc +mixin _$DescriptionNoticeModel { + String? get text => throw _privateConstructorUsedError; + String? get type => throw _privateConstructorUsedError; + bool? get isBold => throw _privateConstructorUsedError; + List? get subDescriptions => + throw _privateConstructorUsedError; + + Map toJson() => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + $DescriptionNoticeModelCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $DescriptionNoticeModelCopyWith<$Res> { + factory $DescriptionNoticeModelCopyWith(DescriptionNoticeModel value, + $Res Function(DescriptionNoticeModel) then) = + _$DescriptionNoticeModelCopyWithImpl<$Res, DescriptionNoticeModel>; + @useResult + $Res call( + {String? text, + String? type, + bool? isBold, + List? subDescriptions}); +} + +/// @nodoc +class _$DescriptionNoticeModelCopyWithImpl<$Res, + $Val extends DescriptionNoticeModel> + implements $DescriptionNoticeModelCopyWith<$Res> { + _$DescriptionNoticeModelCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? text = freezed, + Object? type = freezed, + Object? isBold = freezed, + Object? subDescriptions = freezed, + }) { + return _then(_value.copyWith( + text: freezed == text + ? _value.text + : text // ignore: cast_nullable_to_non_nullable + as String?, + type: freezed == type + ? _value.type + : type // ignore: cast_nullable_to_non_nullable + as String?, + isBold: freezed == isBold + ? _value.isBold + : isBold // ignore: cast_nullable_to_non_nullable + as bool?, + subDescriptions: freezed == subDescriptions + ? _value.subDescriptions + : subDescriptions // ignore: cast_nullable_to_non_nullable + as List?, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$DescriptionNoticeModelImplCopyWith<$Res> + implements $DescriptionNoticeModelCopyWith<$Res> { + factory _$$DescriptionNoticeModelImplCopyWith( + _$DescriptionNoticeModelImpl value, + $Res Function(_$DescriptionNoticeModelImpl) then) = + __$$DescriptionNoticeModelImplCopyWithImpl<$Res>; + @override + @useResult + $Res call( + {String? text, + String? type, + bool? isBold, + List? subDescriptions}); +} + +/// @nodoc +class __$$DescriptionNoticeModelImplCopyWithImpl<$Res> + extends _$DescriptionNoticeModelCopyWithImpl<$Res, + _$DescriptionNoticeModelImpl> + implements _$$DescriptionNoticeModelImplCopyWith<$Res> { + __$$DescriptionNoticeModelImplCopyWithImpl( + _$DescriptionNoticeModelImpl _value, + $Res Function(_$DescriptionNoticeModelImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? text = freezed, + Object? type = freezed, + Object? isBold = freezed, + Object? subDescriptions = freezed, + }) { + return _then(_$DescriptionNoticeModelImpl( + text: freezed == text + ? _value.text + : text // ignore: cast_nullable_to_non_nullable + as String?, + type: freezed == type + ? _value.type + : type // ignore: cast_nullable_to_non_nullable + as String?, + isBold: freezed == isBold + ? _value.isBold + : isBold // ignore: cast_nullable_to_non_nullable + as bool?, + subDescriptions: freezed == subDescriptions + ? _value._subDescriptions + : subDescriptions // ignore: cast_nullable_to_non_nullable + as List?, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$DescriptionNoticeModelImpl implements _DescriptionNoticeModel { + const _$DescriptionNoticeModelImpl( + {this.text, + this.type, + this.isBold, + final List? subDescriptions}) + : _subDescriptions = subDescriptions; + + factory _$DescriptionNoticeModelImpl.fromJson(Map json) => + _$$DescriptionNoticeModelImplFromJson(json); + + @override + final String? text; + @override + final String? type; + @override + final bool? isBold; + final List? _subDescriptions; + @override + List? get subDescriptions { + final value = _subDescriptions; + if (value == null) return null; + if (_subDescriptions is EqualUnmodifiableListView) return _subDescriptions; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); + } + + @override + String toString() { + return 'DescriptionNoticeModel(text: $text, type: $type, isBold: $isBold, subDescriptions: $subDescriptions)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$DescriptionNoticeModelImpl && + (identical(other.text, text) || other.text == text) && + (identical(other.type, type) || other.type == type) && + (identical(other.isBold, isBold) || other.isBold == isBold) && + const DeepCollectionEquality() + .equals(other._subDescriptions, _subDescriptions)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => Object.hash(runtimeType, text, type, isBold, + const DeepCollectionEquality().hash(_subDescriptions)); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$DescriptionNoticeModelImplCopyWith<_$DescriptionNoticeModelImpl> + get copyWith => __$$DescriptionNoticeModelImplCopyWithImpl< + _$DescriptionNoticeModelImpl>(this, _$identity); + + @override + Map toJson() { + return _$$DescriptionNoticeModelImplToJson( + this, + ); + } +} + +abstract class _DescriptionNoticeModel implements DescriptionNoticeModel { + const factory _DescriptionNoticeModel( + {final String? text, + final String? type, + final bool? isBold, + final List? subDescriptions}) = + _$DescriptionNoticeModelImpl; + + factory _DescriptionNoticeModel.fromJson(Map json) = + _$DescriptionNoticeModelImpl.fromJson; + + @override + String? get text; + @override + String? get type; + @override + bool? get isBold; + @override + List? get subDescriptions; + @override + @JsonKey(ignore: true) + _$$DescriptionNoticeModelImplCopyWith<_$DescriptionNoticeModelImpl> + get copyWith => throw _privateConstructorUsedError; +} + +SubDescriptionNoticeModel _$SubDescriptionNoticeModelFromJson( + Map json) { + return _SubDescriptionNoticeModel.fromJson(json); +} + +/// @nodoc +mixin _$SubDescriptionNoticeModel { + String? get text => throw _privateConstructorUsedError; + String? get type => throw _privateConstructorUsedError; + bool? get isBold => throw _privateConstructorUsedError; + bool? get isSpaceRequired => throw _privateConstructorUsedError; + + Map toJson() => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + $SubDescriptionNoticeModelCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $SubDescriptionNoticeModelCopyWith<$Res> { + factory $SubDescriptionNoticeModelCopyWith(SubDescriptionNoticeModel value, + $Res Function(SubDescriptionNoticeModel) then) = + _$SubDescriptionNoticeModelCopyWithImpl<$Res, SubDescriptionNoticeModel>; + @useResult + $Res call({String? text, String? type, bool? isBold, bool? isSpaceRequired}); +} + +/// @nodoc +class _$SubDescriptionNoticeModelCopyWithImpl<$Res, + $Val extends SubDescriptionNoticeModel> + implements $SubDescriptionNoticeModelCopyWith<$Res> { + _$SubDescriptionNoticeModelCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? text = freezed, + Object? type = freezed, + Object? isBold = freezed, + Object? isSpaceRequired = freezed, + }) { + return _then(_value.copyWith( + text: freezed == text + ? _value.text + : text // ignore: cast_nullable_to_non_nullable + as String?, + type: freezed == type + ? _value.type + : type // ignore: cast_nullable_to_non_nullable + as String?, + isBold: freezed == isBold + ? _value.isBold + : isBold // ignore: cast_nullable_to_non_nullable + as bool?, + isSpaceRequired: freezed == isSpaceRequired + ? _value.isSpaceRequired + : isSpaceRequired // ignore: cast_nullable_to_non_nullable + as bool?, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$SubDescriptionNoticeModelImplCopyWith<$Res> + implements $SubDescriptionNoticeModelCopyWith<$Res> { + factory _$$SubDescriptionNoticeModelImplCopyWith( + _$SubDescriptionNoticeModelImpl value, + $Res Function(_$SubDescriptionNoticeModelImpl) then) = + __$$SubDescriptionNoticeModelImplCopyWithImpl<$Res>; + @override + @useResult + $Res call({String? text, String? type, bool? isBold, bool? isSpaceRequired}); +} + +/// @nodoc +class __$$SubDescriptionNoticeModelImplCopyWithImpl<$Res> + extends _$SubDescriptionNoticeModelCopyWithImpl<$Res, + _$SubDescriptionNoticeModelImpl> + implements _$$SubDescriptionNoticeModelImplCopyWith<$Res> { + __$$SubDescriptionNoticeModelImplCopyWithImpl( + _$SubDescriptionNoticeModelImpl _value, + $Res Function(_$SubDescriptionNoticeModelImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? text = freezed, + Object? type = freezed, + Object? isBold = freezed, + Object? isSpaceRequired = freezed, + }) { + return _then(_$SubDescriptionNoticeModelImpl( + text: freezed == text + ? _value.text + : text // ignore: cast_nullable_to_non_nullable + as String?, + type: freezed == type + ? _value.type + : type // ignore: cast_nullable_to_non_nullable + as String?, + isBold: freezed == isBold + ? _value.isBold + : isBold // ignore: cast_nullable_to_non_nullable + as bool?, + isSpaceRequired: freezed == isSpaceRequired + ? _value.isSpaceRequired + : isSpaceRequired // ignore: cast_nullable_to_non_nullable + as bool?, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$SubDescriptionNoticeModelImpl implements _SubDescriptionNoticeModel { + const _$SubDescriptionNoticeModelImpl( + {this.text, this.type, this.isBold, this.isSpaceRequired}); + + factory _$SubDescriptionNoticeModelImpl.fromJson(Map json) => + _$$SubDescriptionNoticeModelImplFromJson(json); + + @override + final String? text; + @override + final String? type; + @override + final bool? isBold; + @override + final bool? isSpaceRequired; + + @override + String toString() { + return 'SubDescriptionNoticeModel(text: $text, type: $type, isBold: $isBold, isSpaceRequired: $isSpaceRequired)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$SubDescriptionNoticeModelImpl && + (identical(other.text, text) || other.text == text) && + (identical(other.type, type) || other.type == type) && + (identical(other.isBold, isBold) || other.isBold == isBold) && + (identical(other.isSpaceRequired, isSpaceRequired) || + other.isSpaceRequired == isSpaceRequired)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => + Object.hash(runtimeType, text, type, isBold, isSpaceRequired); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$SubDescriptionNoticeModelImplCopyWith<_$SubDescriptionNoticeModelImpl> + get copyWith => __$$SubDescriptionNoticeModelImplCopyWithImpl< + _$SubDescriptionNoticeModelImpl>(this, _$identity); + + @override + Map toJson() { + return _$$SubDescriptionNoticeModelImplToJson( + this, + ); + } +} + +abstract class _SubDescriptionNoticeModel implements SubDescriptionNoticeModel { + const factory _SubDescriptionNoticeModel( + {final String? text, + final String? type, + final bool? isBold, + final bool? isSpaceRequired}) = _$SubDescriptionNoticeModelImpl; + + factory _SubDescriptionNoticeModel.fromJson(Map json) = + _$SubDescriptionNoticeModelImpl.fromJson; + + @override + String? get text; + @override + String? get type; + @override + bool? get isBold; + @override + bool? get isSpaceRequired; + @override + @JsonKey(ignore: true) + _$$SubDescriptionNoticeModelImplCopyWith<_$SubDescriptionNoticeModelImpl> + get copyWith => throw _privateConstructorUsedError; +} diff --git a/packages/digit_components/lib/models/privacy_notice/privacy_notice_model.g.dart b/packages/digit_components/lib/models/privacy_notice/privacy_notice_model.g.dart new file mode 100644 index 000000000..2e10758a5 --- /dev/null +++ b/packages/digit_components/lib/models/privacy_notice/privacy_notice_model.g.dart @@ -0,0 +1,83 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'privacy_notice_model.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +_$PrivacyNoticeModelImpl _$$PrivacyNoticeModelImplFromJson( + Map json) => + _$PrivacyNoticeModelImpl( + header: json['header'] as String, + module: json['module'] as String, + active: json['active'] as bool?, + contents: (json['contents'] as List?) + ?.map((e) => ContentNoticeModel.fromJson(e as Map)) + .toList(), + ); + +Map _$$PrivacyNoticeModelImplToJson( + _$PrivacyNoticeModelImpl instance) => + { + 'header': instance.header, + 'module': instance.module, + 'active': instance.active, + 'contents': instance.contents, + }; + +_$ContentNoticeModelImpl _$$ContentNoticeModelImplFromJson( + Map json) => + _$ContentNoticeModelImpl( + header: json['header'] as String?, + descriptions: (json['descriptions'] as List?) + ?.map( + (e) => DescriptionNoticeModel.fromJson(e as Map)) + .toList(), + ); + +Map _$$ContentNoticeModelImplToJson( + _$ContentNoticeModelImpl instance) => + { + 'header': instance.header, + 'descriptions': instance.descriptions, + }; + +_$DescriptionNoticeModelImpl _$$DescriptionNoticeModelImplFromJson( + Map json) => + _$DescriptionNoticeModelImpl( + text: json['text'] as String?, + type: json['type'] as String?, + isBold: json['isBold'] as bool?, + subDescriptions: (json['subDescriptions'] as List?) + ?.map((e) => + SubDescriptionNoticeModel.fromJson(e as Map)) + .toList(), + ); + +Map _$$DescriptionNoticeModelImplToJson( + _$DescriptionNoticeModelImpl instance) => + { + 'text': instance.text, + 'type': instance.type, + 'isBold': instance.isBold, + 'subDescriptions': instance.subDescriptions, + }; + +_$SubDescriptionNoticeModelImpl _$$SubDescriptionNoticeModelImplFromJson( + Map json) => + _$SubDescriptionNoticeModelImpl( + text: json['text'] as String?, + type: json['type'] as String?, + isBold: json['isBold'] as bool?, + isSpaceRequired: json['isSpaceRequired'] as bool?, + ); + +Map _$$SubDescriptionNoticeModelImplToJson( + _$SubDescriptionNoticeModelImpl instance) => + { + 'text': instance.text, + 'type': instance.type, + 'isBold': instance.isBold, + 'isSpaceRequired': instance.isSpaceRequired, + }; diff --git a/packages/digit_components/lib/models/privacy_policy_model.dart b/packages/digit_components/lib/models/privacy_policy_model.dart new file mode 100644 index 000000000..834e44c60 --- /dev/null +++ b/packages/digit_components/lib/models/privacy_policy_model.dart @@ -0,0 +1,95 @@ +class PrivacyPolicy { + final String? header; // Changed to nullable + final String? module; // Changed to nullable + final bool? active; + final List? contents; + + PrivacyPolicy({ + this.header, + this.module, + this.active, + this.contents, + }); + + // Factory constructor to create PrivacyPolicy from JSON + factory PrivacyPolicy.fromJson(Map json) { + return PrivacyPolicy( + header: json['header'] as String?, + module: json['module'] as String?, + active: json['active'] as bool?, + contents: (json['contents'] as List?) + ?.map((item) => Content.fromJson(item as Map)) + .toList(), + ); + } +} + +class Content { + final String? header; // Changed to nullable + final List? descriptions; + + Content({ + this.header, + this.descriptions, + }); + + // Factory constructor to create Content from JSON + factory Content.fromJson(Map json) { + return Content( + header: json['header'] as String?, + descriptions: (json['descriptions'] as List?) + ?.map((item) => Description.fromJson(item as Map)) + .toList(), + ); + } +} + +class Description { + final String? text; // Changed to nullable + final String? type; // Changed to nullable + final bool? isBold; + final List? subDescriptions; + + Description({ + this.text, + this.type, + this.isBold, + this.subDescriptions, + }); + + // Factory constructor to create Description from JSON + factory Description.fromJson(Map json) { + return Description( + text: json['text'] as String?, + type: json['type'] as String?, + isBold: json['isBold'] as bool?, + subDescriptions: (json['subDescriptions'] as List?) + ?.map((item) => SubDescription.fromJson(item as Map)) + .toList(), + ); + } +} + +class SubDescription { + final String? text; // Changed to nullable + final String? type; // Changed to nullable + final bool? isBold; + final bool? isSpaceRequired; + + SubDescription({ + this.text, + this.type, + this.isBold, + this.isSpaceRequired, + }); + + // Factory constructor to create SubDescription from JSON + factory SubDescription.fromJson(Map json) { + return SubDescription( + text: json['text'] as String?, + type: json['type'] as String?, + isBold: json['isBold'] as bool?, + isSpaceRequired: json['isSpaceRequired'] as bool?, + ); + } +} diff --git a/packages/digit_components/lib/utils/i18_key_constants.dart b/packages/digit_components/lib/utils/i18_key_constants.dart new file mode 100644 index 000000000..1d7e1fcca --- /dev/null +++ b/packages/digit_components/lib/utils/i18_key_constants.dart @@ -0,0 +1,20 @@ +library i18; + +const privacyPolicy = PrivacyPolicy(); + +class PrivacyPolicy { + const PrivacyPolicy(); + + String get acceptText { + return 'PRIVACY_POLICY_ACCEPT_TEXT'; + } + + String get declineText { + return 'PRIVACY_POLICY_DECLINE_TEXT'; + } + + String get privacyNoticeText => 'PRIVACY_POLICY_TEXT'; + String get privacyPolicyLinkText => 'PRIVACY_POLICY_LINK_TEXT'; + String get privacyPolicyValidationText => 'PRIVACY_POLICY_VALIDATION_TEXT'; + +} \ No newline at end of file diff --git a/packages/digit_components/lib/widgets/localized.dart b/packages/digit_components/lib/widgets/localized.dart new file mode 100644 index 000000000..2d3d6a479 --- /dev/null +++ b/packages/digit_components/lib/widgets/localized.dart @@ -0,0 +1,33 @@ +import 'package:flutter/material.dart'; +import '../blocs/localization.dart'; + +abstract class LocalizedStatefulWidget extends StatefulWidget { + final ComponentLocalization? appLocalizations; + + const LocalizedStatefulWidget({ + super.key, + this.appLocalizations, + }); +} + +abstract class LocalizedState + extends State { + late ComponentLocalization _localizations; + + ComponentLocalization get localizations => _localizations; + + set localizations(ComponentLocalization localizations) { + if (mounted) { + setState(() { + _localizations = localizations; + }); + } + } + + @override + @mustCallSuper + void didChangeDependencies() { + _localizations = widget.appLocalizations ?? ComponentLocalization.of(context); + super.didChangeDependencies(); + } +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_component.dart b/packages/digit_components/lib/widgets/privacy_notice/privacy_component.dart similarity index 96% rename from apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_component.dart rename to packages/digit_components/lib/widgets/privacy_notice/privacy_component.dart index e246dc30a..f2d9aa0f0 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_component.dart +++ b/packages/digit_components/lib/widgets/privacy_notice/privacy_component.dart @@ -1,7 +1,7 @@ import 'package:digit_components/digit_components.dart'; +import 'package:digit_components/models/privacy_notice/privacy_notice_model.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; -import '../../data/local_store/no_sql/schema/app_configuration.dart'; import '../localized.dart'; import 'privacy_notice_dialog.dart'; import 'package:reactive_forms/reactive_forms.dart'; @@ -10,7 +10,7 @@ class PrivacyComponent extends LocalizedStatefulWidget { final String formControlName; final String text; final String linkText; - final PrivacyPolicy? privacyPolicy; + final PrivacyNoticeModel? privacyPolicy; final String? trailingText; final String validationMessage; @@ -21,7 +21,7 @@ class PrivacyComponent extends LocalizedStatefulWidget { required this.text, required this.linkText, this.trailingText, - this.privacyPolicy, + this.privacyPolicy, required this.validationMessage, }); @@ -54,6 +54,7 @@ class _PrivacyComponentState extends LocalizedState { return ValueListenableBuilder( valueListenable: checkboxStateNotifier, builder: (context, value, child) { + return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -120,7 +121,7 @@ class _PrivacyComponentState extends LocalizedState { builder: (context) { return FullPageDialog( - privacyPolicy: widget.privacyPolicy ?? PrivacyPolicy(), + privacyPolicy: widget.privacyPolicy ?? const PrivacyNoticeModel(header: '', module: ''), onAccept: () { checkboxStateNotifier.value = true; field.didChange(true); diff --git a/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_notice_dialog.dart b/packages/digit_components/lib/widgets/privacy_notice/privacy_notice_dialog.dart similarity index 95% rename from apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_notice_dialog.dart rename to packages/digit_components/lib/widgets/privacy_notice/privacy_notice_dialog.dart index 55421cfc2..d6d85db70 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_notice_dialog.dart +++ b/packages/digit_components/lib/widgets/privacy_notice/privacy_notice_dialog.dart @@ -1,17 +1,18 @@ +import 'package:digit_components/models/privacy_notice/privacy_notice_model.dart'; import 'package:digit_components/theme/colors.dart'; import 'package:digit_components/widgets/digit_card.dart'; import 'package:digit_components/widgets/digit_elevated_button.dart'; import 'package:digit_components/widgets/digit_outline_button.dart'; import 'package:flutter/material.dart'; -import '../../data/local_store/no_sql/schema/app_configuration.dart'; +import '../../models/privacy_policy_model.dart'; +import '../../theme/digit_theme.dart'; import '../localized.dart'; import 'privacy_notice_expand_component.dart'; import '../../utils/i18_key_constants.dart' as i18; -import '../../models/privacy_notice/privacy_notice_model.dart'; -import '../showcase/showcase_wrappers.dart'; + class FullPageDialog extends LocalizedStatefulWidget { - final PrivacyPolicy privacyPolicy; + final PrivacyNoticeModel privacyPolicy; final VoidCallback onAccept; final VoidCallback onDecline; @@ -49,7 +50,7 @@ class _FullPageDialogState extends LocalizedState { Padding( padding: const EdgeInsets.only(top: kPadding*3, left: 0), child: Text( - localizations.translate(widget.privacyPolicy.header), + localizations.translate(widget.privacyPolicy.header ?? ''), maxLines: 3, style: Theme.of(context).textTheme.displayMedium?.copyWith( color: const DigitColors().woodsmokeBlack, diff --git a/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_notice_expand_component.dart b/packages/digit_components/lib/widgets/privacy_notice/privacy_notice_expand_component.dart similarity index 96% rename from apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_notice_expand_component.dart rename to packages/digit_components/lib/widgets/privacy_notice/privacy_notice_expand_component.dart index 6f3f6006a..8f95d491a 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/privacy_notice/privacy_notice_expand_component.dart +++ b/packages/digit_components/lib/widgets/privacy_notice/privacy_notice_expand_component.dart @@ -1,11 +1,12 @@ -import 'package:closed_household/widgets/showcase/showcase_wrappers.dart'; import 'package:digit_components/theme/colors.dart'; import 'package:flutter/material.dart'; -import '../../data/local_store/no_sql/schema/app_configuration.dart'; +import '../../models/privacy_notice/privacy_notice_model.dart'; +import '../../models/privacy_policy_model.dart'; +import '../../theme/digit_theme.dart'; import '../localized.dart'; class ExpandableSection extends LocalizedStatefulWidget { - final Content content; + final ContentNoticeModel content; const ExpandableSection({ super.key, @@ -75,7 +76,7 @@ class _ExpandableSectionState extends LocalizedState { children: widget.content.descriptions!.asMap().entries.map((entry) { int index = entry.key; - Description desc = entry.value; + DescriptionNoticeModel desc = entry.value; int? stepNumber = desc.type == 'step' ? index + 1 : null; return DescriptionWidget( description: desc, @@ -91,7 +92,7 @@ class _ExpandableSectionState extends LocalizedState { } class DescriptionWidget extends LocalizedStatefulWidget { - final Description description; + final DescriptionNoticeModel description; final int? stepNumber; const DescriptionWidget({ @@ -201,7 +202,7 @@ class _DescriptionWidgetState extends LocalizedState { } class SubDescriptionWidget extends LocalizedStatefulWidget { - final SubDescription subDescription; + final SubDescriptionNoticeModel subDescription; final int? stepNumber; const SubDescriptionWidget({ From 7fd8359eef832a97395e4ce44eca17f4dfa90cd0 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Tue, 10 Sep 2024 18:03:42 +0530 Subject: [PATCH 103/241] created custom annotation in sync package to create generated file with implementation --- .../build.yaml | 5 +- .../lib/app.dart | 2 + .../lib/sync_annotation_module.dart | 25 +++ .../pubspec.lock | 8 + .../pubspec.yaml | 1 + packages/inventory_management/pubspec.lock | 95 ++++++++++++ packages/inventory_management/pubspec.yaml | 2 + packages/sync_service/build.yaml | 6 +- .../lib/data/sync_service_annotation.dart | 143 ++++++++++++++++++ .../sync_service/lib/sync_service_lib.dart | 3 +- packages/sync_service/pubspec.yaml | 1 + 11 files changed, 288 insertions(+), 3 deletions(-) create mode 100644 apps/health_campaign_field_worker_app/lib/sync_annotation_module.dart create mode 100644 packages/sync_service/lib/data/sync_service_annotation.dart diff --git a/apps/health_campaign_field_worker_app/build.yaml b/apps/health_campaign_field_worker_app/build.yaml index 27c12a092..c0579ceef 100644 --- a/apps/health_campaign_field_worker_app/build.yaml +++ b/apps/health_campaign_field_worker_app/build.yaml @@ -7,4 +7,7 @@ targets: - lib/pages/**.dart auto_route_generator:auto_router_generator: generate_for: - - lib/router/**router.dart \ No newline at end of file + - lib/router/**router.dart + super_annotations: + options: + targets: [ sync ] \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/lib/app.dart b/apps/health_campaign_field_worker_app/lib/app.dart index 7d90ae5da..459bbd994 100644 --- a/apps/health_campaign_field_worker_app/lib/app.dart +++ b/apps/health_campaign_field_worker_app/lib/app.dart @@ -18,6 +18,8 @@ import 'package:registration_delivery/models/entities/household.dart'; import 'package:registration_delivery/models/entities/household_member.dart'; import 'package:registration_delivery/models/entities/project_beneficiary.dart'; import 'package:registration_delivery/models/entities/task.dart'; +import 'package:sync_service/data/sync_service.dart'; +import 'package:sync_service/data/sync_service_annotation.dart'; import 'blocs/app_initialization/app_initialization.dart'; import 'blocs/auth/auth.dart'; diff --git a/apps/health_campaign_field_worker_app/lib/sync_annotation_module.dart b/apps/health_campaign_field_worker_app/lib/sync_annotation_module.dart new file mode 100644 index 000000000..ea6b275fa --- /dev/null +++ b/apps/health_campaign_field_worker_app/lib/sync_annotation_module.dart @@ -0,0 +1,25 @@ +@CodeGen(runAfter: [], targets: ['sync']) +library sync_annotation_module; + +import 'package:super_annotations/super_annotations.dart'; +import 'package:sync_service/data/sync_service_annotation.dart'; + +// @SyncServiceAnnotation() +// class SyncModule { +// +// final StockModel stockModel; +// +// SyncModule(this.stockModel); +// } + +@SyncEnumAnnotation() +enum DataModelType { + projectBeneficiary, + householdMember, + stock, + stockReconciliation, + task, + sideEffect, + referral, + hFReferral, +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index fef6a1bb5..b262e66d0 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -1765,6 +1765,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" + super_annotations: + dependency: "direct main" + description: + name: super_annotations + sha256: "6ccb4a2066de1ae3d1869184350b641b0b66fa6b98e158abeffdc9c47a3bf49c" + url: "https://pub.dev" + source: hosted + version: "0.8.1" sync_http: dependency: transitive description: diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index d405730f5..c3dddc09a 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -66,6 +66,7 @@ dependencies: disable_battery_optimization: ^1.1.1 digit_dss: ^1.0.1 closed_household: ^1.0.1+1 + super_annotations: ^0.8.1 dev_dependencies: flutter_test: diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index b30e317a7..63daa0208 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -490,6 +490,38 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_background_service: + dependency: transitive + description: + name: flutter_background_service + sha256: d32f078ec57647c9cfd6e1a8da9297f7d8f021d4dcc204a35aaad2cdbfe255f0 + url: "https://pub.dev" + source: hosted + version: "5.0.10" + flutter_background_service_android: + dependency: transitive + description: + name: flutter_background_service_android + sha256: "39da42dddf877beeef82bc2583130d8bedb4d0765e99ca9e7b4a32e8c6abd239" + url: "https://pub.dev" + source: hosted + version: "6.2.7" + flutter_background_service_ios: + dependency: transitive + description: + name: flutter_background_service_ios + sha256: "6037ffd45c4d019dab0975c7feb1d31012dd697e25edc05505a4a9b0c7dc9fba" + url: "https://pub.dev" + source: hosted + version: "5.0.3" + flutter_background_service_platform_interface: + dependency: transitive + description: + name: flutter_background_service_platform_interface + sha256: ca74aa95789a8304f4d3f57f07ba404faa86bed6e415f83e8edea6ad8b904a41 + url: "https://pub.dev" + source: hosted + version: "5.1.2" flutter_bloc: dependency: "direct main" description: @@ -575,6 +607,54 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.19" + flutter_secure_storage: + dependency: transitive + description: + name: flutter_secure_storage + sha256: "165164745e6afb5c0e3e3fcc72a012fb9e58496fb26ffb92cf22e16a821e85d0" + url: "https://pub.dev" + source: hosted + version: "9.2.2" + flutter_secure_storage_linux: + dependency: transitive + description: + name: flutter_secure_storage_linux + sha256: "4d91bfc23047422cbcd73ac684bc169859ee766482517c22172c86596bf1464b" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + flutter_secure_storage_macos: + dependency: transitive + description: + name: flutter_secure_storage_macos + sha256: "1693ab11121a5f925bbea0be725abfcfbbcf36c1e29e571f84a0c0f436147a81" + url: "https://pub.dev" + source: hosted + version: "3.1.2" + flutter_secure_storage_platform_interface: + dependency: transitive + description: + name: flutter_secure_storage_platform_interface + sha256: cf91ad32ce5adef6fba4d736a542baca9daf3beac4db2d04be350b87f69ac4a8 + url: "https://pub.dev" + source: hosted + version: "1.1.2" + flutter_secure_storage_web: + dependency: transitive + description: + name: flutter_secure_storage_web + sha256: f4ebff989b4f07b2656fb16b47852c0aab9fed9b4ec1c70103368337bc1886a9 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + flutter_secure_storage_windows: + dependency: transitive + description: + name: flutter_secure_storage_windows + sha256: b20b07cb5ed4ed74fc567b78a72936203f587eba460af1df11281c9326cd3709 + url: "https://pub.dev" + source: hosted + version: "3.1.2" flutter_spinkit: dependency: transitive description: @@ -1254,6 +1334,21 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" + super_annotations: + dependency: "direct main" + description: + name: super_annotations + sha256: "36129e9bdbb098e3d162b88cffdf384960869346cce2ee682e95e5138d3f7beb" + url: "https://pub.dev" + source: hosted + version: "0.8.2" + sync_service: + dependency: "direct main" + description: + path: "../sync_service" + relative: true + source: path + version: "0.0.1-dev.1" synchronized: dependency: transitive description: diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index c9dc3b8b1..e2398b4d0 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -35,6 +35,8 @@ dependencies: recase: ^4.1.0 digit_scanner: ^1.0.3+1 pluto_grid: ^8.0.0 + super_annotations: ^0.8.1 + sync_service: ^0.0.1-dev.1 dev_dependencies: flutter_test: diff --git a/packages/sync_service/build.yaml b/packages/sync_service/build.yaml index 05310222d..631c73b2f 100644 --- a/packages/sync_service/build.yaml +++ b/packages/sync_service/build.yaml @@ -2,4 +2,8 @@ targets: $default: builders: dart_mappable_builder: - generate_for: \ No newline at end of file + generate_for: + super_annotations: + options: + generate_for: + - lib/data/ \ No newline at end of file diff --git a/packages/sync_service/lib/data/sync_service_annotation.dart b/packages/sync_service/lib/data/sync_service_annotation.dart new file mode 100644 index 000000000..0dc3a23cf --- /dev/null +++ b/packages/sync_service/lib/data/sync_service_annotation.dart @@ -0,0 +1,143 @@ +import 'package:recase/recase.dart'; +import 'package:super_annotations/super_annotations.dart'; + +class SyncServiceAnnotation extends ClassAnnotation { + const SyncServiceAnnotation(); + + @override + void apply(Class element, LibraryBuilder output) { + output.body.add(Code( + '//case DataModelType.${element.fields.map((f) => f.type!.symbol)}: \n var responseEntities = await remote.search(${element.name}(clientReferenceId:entities.whereType<${element.name}>().map((e)=>e.clientReferenceId).whereNotNull().toList(),),);')); + } +} + +class SyncEnumAnnotation extends EnumAnnotation { + const SyncEnumAnnotation(); + + @override + void apply(Enum target, LibraryBuilder output) { + // Define the method that will contain the generated cases + final StringBuffer methodBuffer = StringBuffer() + ..writeln('class syncDownEntity {') + ..writeln('void syncEntities(') + ..writeln( + ' MapEntry>> typeGroupedEntity,') + ..writeln( + ' MapEntry>> operationGroupedEntity,') + ..writeln(' List entities,') + ..writeln(' List responseEntities,') + ..writeln(' RemoteRepository remote,') + ..writeln( + ' LocalRepository local) async {') + ..writeln(' const taskResourceIdKey = "taskResourceId";') + ..writeln(' const individualIdentifierIdKey = "individualIdentifierId";') + ..writeln(' const householdAddressIdKey = "householdAddressId";') + ..writeln(' const individualAddressIdKey = "individualAddressId";') + ..writeln(' switch (typeGroupedEntity.key) {'); + + // Generate case statements for each enum value + for (var entity in target.values.map((v) => v.name)) { + final entityPascalCase = entity.pascalCase; // Convert to PascalCase + final entityCamelCase = entity.camelCase; // Convert to camelCase + + methodBuffer + ..writeln(' case DataModelType.${entity}:') + ..writeln( + ' responseEntities = await remote.search(${entityPascalCase}SearchModel(') + ..writeln( + ' clientReferenceId: entities.whereType<${entityPascalCase}Model>()') + ..writeln(' .map((e) => e.clientReferenceId)') + ..writeln(' .whereNotNull()') + ..writeln(' .toList(),') + ..writeln(' isDeleted: true,') + ..writeln(' ));') + ..writeln(' for (var element in operationGroupedEntity.value) {') + ..writeln(' if (element.id == null) continue;') + ..writeln( + ' final entity = element.entity as ${entityPascalCase}Model;') + ..writeln( + ' final responseEntity = responseEntities.whereType<${entityPascalCase}Model>()') + ..writeln( + ' .firstWhereOrNull((e) => e.clientReferenceId == entity.clientReferenceId);') + ..writeln(' final serverGeneratedId = responseEntity?.id;') + ..writeln(' final rowVersion = responseEntity?.rowVersion;') + ..writeln(' if (serverGeneratedId != null) {') + ..writeln( + ' await local.opLogManager.updateServerGeneratedIds(') + ..writeln(' model: UpdateServerGeneratedIdModel(') + ..writeln(' clientReferenceId: entity.clientReferenceId,') + ..writeln(' serverGeneratedId: serverGeneratedId,') + ..writeln(' dataOperation: element.operation,') + ..writeln(' rowVersion: rowVersion,') + ..writeln(' ),') + ..writeln(' );') + ..writeln(' } else {') + ..writeln( + ' final bool markAsNonRecoverable = await local.opLogManager.updateSyncDownRetry(entity.clientReferenceId);') + ..writeln(' if (markAsNonRecoverable) {') + ..writeln( + ' await local.update(entity.copyWith(nonRecoverableError: true), createOpLog: false);') + ..writeln(' }') + ..writeln(' }') + ..writeln(' }') + ..writeln(' break;'); + } + + // Close the switch and method + methodBuffer + ..writeln(' }') + ..writeln(' }') + ..writeln('}'); + + // Add the generated method to the output + output.body.add(Code(methodBuffer.toString())); + } +} + +// case DataModelType.stock: +// responseEntities = await remote.search( +// StockSearchModel( +// clientReferenceId: entities +// .whereType() +// .map((e) => e.clientReferenceId) +// .whereNotNull() +// .toList(), +// ), +// ); + +// for (var element in operationGroupedEntity.value) { +// if (element.id == null) return; +// final entity = element.entity as StockModel; +// final responseEntity = +// responseEntities.whereType().firstWhereOrNull( +// (e) => e.clientReferenceId == entity.clientReferenceId, +// ); + +// final serverGeneratedId = responseEntity?.id; +// final rowVersion = responseEntity?.rowVersion; + +// if (serverGeneratedId != null) { +// await local.opLogManager.updateServerGeneratedIds( +// model: UpdateServerGeneratedIdModel( +// clientReferenceId: entity.clientReferenceId!, +// serverGeneratedId: serverGeneratedId, +// dataOperation: element.operation, +// rowVersion: rowVersion, +// ), +// ); +// } else { +// final bool markAsNonRecoverable = await local.opLogManager +// .updateSyncDownRetry(entity.clientReferenceId); + +// if (markAsNonRecoverable) { +// await local.update( +// entity.copyWith( +// nonRecoverableError: true, +// ), +// createOpLog: false, +// ); +// } +// } +// } + +// break; diff --git a/packages/sync_service/lib/sync_service_lib.dart b/packages/sync_service/lib/sync_service_lib.dart index af8e0319b..ed3473ad8 100644 --- a/packages/sync_service/lib/sync_service_lib.dart +++ b/packages/sync_service/lib/sync_service_lib.dart @@ -7,4 +7,5 @@ export 'data/repositories/sync/sync_down.dart'; export 'data/repositories/sync/sync_up.dart'; export 'models/bandwidth/bandwidth_model.dart'; export 'blocs/sync/sync.dart'; -export 'utils/utils.dart'; \ No newline at end of file +export 'utils/utils.dart'; +export 'data/sync_service_annotation.dart'; \ No newline at end of file diff --git a/packages/sync_service/pubspec.yaml b/packages/sync_service/pubspec.yaml index 7239977b7..b2e23550f 100644 --- a/packages/sync_service/pubspec.yaml +++ b/packages/sync_service/pubspec.yaml @@ -30,6 +30,7 @@ dependencies: flutter_secure_storage: ^9.2.2 digit_data_model: ^1.0.4 digit_components: ^1.0.2 + super_annotations: ^0.8.1 dev_dependencies: flutter_test: From f7dd2b72512194b5979844c667b1bed0a7c68db2 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Wed, 11 Sep 2024 10:58:39 +0530 Subject: [PATCH 104/241] updated className and added return to sync_service_annotation.dart added generated sync.dart file --- .../lib/sync_annotation_module.sync.dart | 328 ++++++++++++++++++ .../lib/data/sync_service_annotation.dart | 6 +- 2 files changed, 331 insertions(+), 3 deletions(-) create mode 100644 apps/health_campaign_field_worker_app/lib/sync_annotation_module.sync.dart diff --git a/apps/health_campaign_field_worker_app/lib/sync_annotation_module.sync.dart b/apps/health_campaign_field_worker_app/lib/sync_annotation_module.sync.dart new file mode 100644 index 000000000..6666f4702 --- /dev/null +++ b/apps/health_campaign_field_worker_app/lib/sync_annotation_module.sync.dart @@ -0,0 +1,328 @@ +import 'package:collection/collection.dart'; +import 'package:digit_data_model/data_model.dart' hide DataModelType; + +import 'package:inventory_management/models/entities/stock.dart'; +import 'package:inventory_management/models/entities/stock_reconciliation.dart'; +import 'package:referral_reconciliation/models/entities/hf_referral.dart'; +import 'package:registration_delivery/models/entities/household_member.dart'; +import 'package:registration_delivery/models/entities/project_beneficiary.dart'; +import 'package:registration_delivery/models/entities/referral.dart'; +import 'package:registration_delivery/models/entities/side_effect.dart'; +import 'package:registration_delivery/models/entities/task.dart'; + +import 'sync_annotation_module.dart'; + +class SyncDownEntity { + Future> syncEntities( + MapEntry>> typeGroupedEntity, + MapEntry>> + operationGroupedEntity, + List entities, + List responseEntities, + RemoteRepository remote, + LocalRepository local) async { + const taskResourceIdKey = "taskResourceId"; + const individualIdentifierIdKey = "individualIdentifierId"; + const householdAddressIdKey = "householdAddressId"; + const individualAddressIdKey = "individualAddressId"; + switch (typeGroupedEntity.key) { + case DataModelType.projectBeneficiary: + responseEntities = await remote.search(ProjectBeneficiarySearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as ProjectBeneficiaryModel; + final responseEntity = responseEntities + .whereType() + .firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId); + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + if (markAsNonRecoverable) { + await local.update(entity.copyWith(nonRecoverableError: true), + createOpLog: false); + } + } + } + break; + case DataModelType.householdMember: + responseEntities = await remote.search(HouseholdMemberSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as HouseholdMemberModel; + final responseEntity = responseEntities + .whereType() + .firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId); + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + if (markAsNonRecoverable) { + await local.update(entity.copyWith(nonRecoverableError: true), + createOpLog: false); + } + } + } + break; + case DataModelType.stock: + responseEntities = await remote.search(StockSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as StockModel; + final responseEntity = responseEntities + .whereType() + .firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId); + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + if (markAsNonRecoverable) { + await local.update(entity.copyWith(nonRecoverableError: true), + createOpLog: false); + } + } + } + break; + case DataModelType.stockReconciliation: + responseEntities = await remote.search(StockReconciliationSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as StockReconciliationModel; + final responseEntity = responseEntities + .whereType() + .firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId); + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + if (markAsNonRecoverable) { + await local.update(entity.copyWith(nonRecoverableError: true), + createOpLog: false); + } + } + } + break; + case DataModelType.task: + responseEntities = await remote.search(TaskSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as TaskModel; + final responseEntity = responseEntities + .whereType() + .firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId); + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + if (markAsNonRecoverable) { + await local.update(entity.copyWith(nonRecoverableError: true), + createOpLog: false); + } + } + } + break; + case DataModelType.sideEffect: + responseEntities = await remote.search(SideEffectSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as SideEffectModel; + final responseEntity = responseEntities + .whereType() + .firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId); + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + if (markAsNonRecoverable) { + await local.update(entity.copyWith(nonRecoverableError: true), + createOpLog: false); + } + } + } + break; + case DataModelType.referral: + responseEntities = await remote.search(ReferralSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as ReferralModel; + final responseEntity = responseEntities + .whereType() + .firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId); + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + if (markAsNonRecoverable) { + await local.update(entity.copyWith(nonRecoverableError: true), + createOpLog: false); + } + } + } + break; + case DataModelType.hFReferral: + responseEntities = await remote.search(HFReferralSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as HFReferralModel; + final responseEntity = responseEntities + .whereType() + .firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId); + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + if (markAsNonRecoverable) { + await local.update(entity.copyWith(nonRecoverableError: true), + createOpLog: false); + } + } + } + break; + } + return responseEntities; + } +} diff --git a/packages/sync_service/lib/data/sync_service_annotation.dart b/packages/sync_service/lib/data/sync_service_annotation.dart index 0dc3a23cf..b4b7714ef 100644 --- a/packages/sync_service/lib/data/sync_service_annotation.dart +++ b/packages/sync_service/lib/data/sync_service_annotation.dart @@ -18,8 +18,8 @@ class SyncEnumAnnotation extends EnumAnnotation { void apply(Enum target, LibraryBuilder output) { // Define the method that will contain the generated cases final StringBuffer methodBuffer = StringBuffer() - ..writeln('class syncDownEntity {') - ..writeln('void syncEntities(') + ..writeln('class SyncDownEntity {') + ..writeln('syncEntities(') ..writeln( ' MapEntry>> typeGroupedEntity,') ..writeln( @@ -86,7 +86,7 @@ class SyncEnumAnnotation extends EnumAnnotation { // Close the switch and method methodBuffer ..writeln(' }') - ..writeln(' }') + ..writeln(' return responseEntities;}') ..writeln('}'); // Add the generated method to the output From 36641eb21bf0078e7d03d84d2307aa97675deb59 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Thu, 12 Sep 2024 11:55:11 +0530 Subject: [PATCH 105/241] updated sync_service_annotation.dart added usage documentation --- .../lib/data/sync_service_mapper.dart | 645 +----------------- .../lib/sync_annotation_module.dart | 33 +- .../lib/sync_annotation_module.sync.dart | 187 ++++- .../lib/data/sync_service_annotation.dart | 180 +++-- 4 files changed, 286 insertions(+), 759 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart b/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart index 903bebc8f..fd75729bb 100644 --- a/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart +++ b/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart @@ -10,6 +10,7 @@ import 'package:registration_delivery/registration_delivery.dart'; import 'package:sync_service/data/sync_entity_mapper_listener.dart'; import 'package:sync_service/data/repositories/sync/remote_type.dart'; +import '../sync_annotation_module.sync.dart'; import '../utils/environment_config.dart'; class SyncServiceMapper extends SyncEntityMapperListener { @@ -139,649 +140,9 @@ class SyncServiceMapper extends SyncEntityMapperListener { RemoteRepository remote, LocalRepository local) async { List responseEntities = []; - const taskResourceIdKey = 'taskResourceId'; - const individualIdentifierIdKey = 'individualIdentifierId'; - const householdAddressIdKey = 'householdAddressId'; - const individualAddressIdKey = 'individualAddressId'; - - switch (typeGroupedEntity.key) { - case DataModelType.individual: - responseEntities = await remote.search(IndividualSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - - for (var element in operationGroupedEntity.value) { - if (element.id == null) continue; - final entity = element.entity as IndividualModel; - final responseEntity = - responseEntities.whereType().firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId, - ); - - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - final identifierAdditionalIds = responseEntity?.identifiers - ?.map((e) { - final id = e.id; - - if (id == null) return null; - - return AdditionalId( - idType: individualIdentifierIdKey, - id: id, - ); - }) - .whereNotNull() - .toList(); - - final addressAdditionalIds = responseEntity?.address - ?.map((e) { - final id = e.id; - - if (id == null) return null; - - return AdditionalId( - idType: individualAddressIdKey, - id: id, - ); - }) - .whereNotNull() - .toList(); - - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - nonRecoverableError: entity.nonRecoverableError, - additionalIds: [ - if (identifierAdditionalIds != null) - ...identifierAdditionalIds, - if (addressAdditionalIds != null) ...addressAdditionalIds, - ], - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - - if (markAsNonRecoverable) { - await local.update( - entity.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - break; - - case DataModelType.household: - responseEntities = await remote.search(HouseholdSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - - for (var element in operationGroupedEntity.value) { - if (element.id == null) continue; - final entity = element.entity as HouseholdModel; - final responseEntity = - responseEntities.whereType().firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId, - ); - - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - final addressAdditionalId = responseEntity?.address?.id == null - ? null - : AdditionalId( - idType: householdAddressIdKey, - id: responseEntity!.address!.id!, - ); - - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - additionalIds: [ - if (addressAdditionalId != null) addressAdditionalId, - ], - dataOperation: element.operation, - rowVersion: rowVersion, - nonRecoverableError: element.nonRecoverableError, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - - if (markAsNonRecoverable) { - await local.update( - entity.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - break; - - case DataModelType.householdMember: - responseEntities = await remote.search(HouseholdMemberSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - - for (var element in operationGroupedEntity.value) { - if (element.id == null) continue; - final entity = element.entity as HouseholdMemberModel; - final responseEntity = responseEntities - .whereType() - .firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId, - ); - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - - if (markAsNonRecoverable) { - await local.update( - entity.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - break; - - case DataModelType.sideEffect: - responseEntities = await remote.search(SideEffectSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - - for (var element in typeGroupedEntity.value) { - if (element.id == null) continue; - final entity = element.entity as SideEffectModel; - var responseEntity = - responseEntities.whereType().firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId, - ); - - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - - if (markAsNonRecoverable) { - await local.update( - entity.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - case DataModelType.referral: - responseEntities = await remote.search(ReferralSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - - for (var element in typeGroupedEntity.value) { - if (element.id == null) continue; - final entity = element.entity as ReferralModel; - var responseEntity = - responseEntities.whereType().firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId, - ); - - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - - if (markAsNonRecoverable) { - await local.update( - entity.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - case DataModelType.projectBeneficiary: - responseEntities = await remote.search(ProjectBeneficiarySearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - - for (var element in operationGroupedEntity.value) { - if (element.id == null) continue; - final entity = element.entity as ProjectBeneficiaryModel; - final responseEntity = responseEntities - .whereType() - .firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId, - ); - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - if (markAsNonRecoverable) { - await local.update( - entity.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - break; - case DataModelType.task: - responseEntities = await remote.search(TaskSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - - for (var element in operationGroupedEntity.value) { - if (element.id == null) continue; - final taskModel = element.entity as TaskModel; - var responseEntity = - responseEntities.whereType().firstWhereOrNull( - (e) => e.clientReferenceId == taskModel.clientReferenceId, - ); - - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - - if (serverGeneratedId != null) { - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: taskModel.clientReferenceId, - serverGeneratedId: serverGeneratedId, - additionalIds: responseEntity?.resources - ?.map((e) { - final id = e.id; - if (id == null) return null; - - return AdditionalId( - idType: taskResourceIdKey, - id: id, - ); - }) - .whereNotNull() - .toList(), - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(taskModel.clientReferenceId); - - if (markAsNonRecoverable) { - await local.update( - taskModel.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - break; - case DataModelType.hFReferral: - responseEntities = await remote.search( - HFReferralSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - ), - ); - - for (var element in operationGroupedEntity.value) { - if (element.id == null) continue; - final entity = element.entity as HFReferralModel; - final responseEntity = - responseEntities.whereType().firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId, - ); - - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - nonRecoverableError: entity.nonRecoverableError, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - - if (markAsNonRecoverable) { - await local.update( - entity.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - break; - - case DataModelType.attendance: - responseEntities = await remote.search(AttendanceLogSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId!) - .whereNotNull() - .toList(), - tenantId: envConfig.variables.tenantId, - )); - - for (var element in operationGroupedEntity.value) { - if (element.id == null) continue; - final entity = element.entity as AttendanceLogModel; - final responseEntity = - responseEntities.whereType().firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId, - ); - - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId.toString(), - serverGeneratedId: serverGeneratedId, - nonRecoverableError: entity.nonRecoverableError, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = - await local.opLogManager.updateSyncDownRetry( - entity.clientReferenceId.toString(), - ); - - if (markAsNonRecoverable) { - await local.update( - entity.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - break; - - case DataModelType.stock: - responseEntities = await remote.search( - StockSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - ), - ); - - for (var element in operationGroupedEntity.value) { - if (element.id == null) continue; - final entity = element.entity as StockModel; - final responseEntity = - responseEntities.whereType().firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId, - ); - - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - - if (serverGeneratedId != null) { - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - - if (markAsNonRecoverable) { - await local.update( - entity.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - break; - - case DataModelType.stockReconciliation: - responseEntities = await remote.search(StockReconciliationSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - )); - - for (var element in operationGroupedEntity.value) { - if (element.id == null) continue; - final entity = element.entity as StockReconciliationModel; - final responseEntity = responseEntities - .whereType() - .firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId, - ); - - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - - if (serverGeneratedId != null) { - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - - if (markAsNonRecoverable) { - await local.update( - entity.copyWith( - nonRecoverableError: true, - ), - createOpLog: false, - ); - } - } - } - - break; - - // Note: Uncomment the following code block to enable complaints sync down - - // case DataModelType.complaints: - // if (remote is! PgrServiceRemoteRepository) break; - // - // final futures = entities - // .whereType() - // .map((e) => e.serviceRequestId) - // .whereNotNull() - // .map( - // (e) { - // final future = remote.searchWithoutClientReferenceId( - // PgrServiceSearchModel( - // serviceRequestId: e, - // ), - // ); - // - // return Future.sync(() => future); - // }, - // ); - // - // final resolvedFutures = await Future.wait(futures); - // - // responseEntities = resolvedFutures - // .expand((element) => element) - // .whereType() - // // We only need serviceRequestId and application status - // .map((e) => PgrServiceModel( - // clientReferenceId: '', - // tenantId: e.tenantId ?? '', - // serviceCode: e.serviceCode ?? '', - // description: e.description ?? '', - // serviceRequestId: e.serviceRequestId, - // applicationStatus: e.applicationStatus ?? - // PgrServiceApplicationStatus.pendingAssignment, - // user: PgrComplainantModel( - // clientReferenceId: '', - // tenantId: '', - // complaintClientReferenceId: e.serviceRequestId ?? '', - // ), - // address: PgrAddressModel(), - // )) - // .toList(); - // - // for (var element in operationGroupedEntity.value) { - // if (element.id == null) continue; - // final entity = element.entity as PgrServiceModel; - // final responseEntity = - // responseEntities.whereType().firstWhereOrNull( - // (e) => e.clientReferenceId == entity.clientReferenceId, - // ); - // - // final serverGeneratedId = responseEntity?.serviceRequestId; - // final rowVersion = responseEntity?.rowVersion; - // - // if (serverGeneratedId != null) { - // await local.opLogManager.updateServerGeneratedIds( - // model: UpdateServerGeneratedIdModel( - // clientReferenceId: entity.clientReferenceId, - // serverGeneratedId: serverGeneratedId, - // dataOperation: element.operation, - // rowVersion: rowVersion, - // ), - // ); - // } - // } - // break; - - default: - break; - } + responseEntities = await SyncDownEntity().syncEntities(typeGroupedEntity, + operationGroupedEntity, entities, responseEntities, remote, local); return responseEntities; } diff --git a/apps/health_campaign_field_worker_app/lib/sync_annotation_module.dart b/apps/health_campaign_field_worker_app/lib/sync_annotation_module.dart index ea6b275fa..156b65cf2 100644 --- a/apps/health_campaign_field_worker_app/lib/sync_annotation_module.dart +++ b/apps/health_campaign_field_worker_app/lib/sync_annotation_module.dart @@ -4,22 +4,17 @@ library sync_annotation_module; import 'package:super_annotations/super_annotations.dart'; import 'package:sync_service/data/sync_service_annotation.dart'; -// @SyncServiceAnnotation() -// class SyncModule { -// -// final StockModel stockModel; -// -// SyncModule(this.stockModel); -// } - -@SyncEnumAnnotation() -enum DataModelType { - projectBeneficiary, - householdMember, - stock, - stockReconciliation, - task, - sideEffect, - referral, - hFReferral, -} \ No newline at end of file +@SyncServiceAnnotation([ + 'individual.address_.identifier_s', + 'household.address', + 'projectBeneficiary', + 'householdMember', + 'stock', + 'stockReconciliation', + 'task.resource_s', + 'sideEffect', + 'referral', + 'hFReferral', +]) +class SyncModule { +} diff --git a/apps/health_campaign_field_worker_app/lib/sync_annotation_module.sync.dart b/apps/health_campaign_field_worker_app/lib/sync_annotation_module.sync.dart index 6666f4702..41539c23a 100644 --- a/apps/health_campaign_field_worker_app/lib/sync_annotation_module.sync.dart +++ b/apps/health_campaign_field_worker_app/lib/sync_annotation_module.sync.dart @@ -1,19 +1,11 @@ import 'package:collection/collection.dart'; -import 'package:digit_data_model/data_model.dart' hide DataModelType; - -import 'package:inventory_management/models/entities/stock.dart'; -import 'package:inventory_management/models/entities/stock_reconciliation.dart'; -import 'package:referral_reconciliation/models/entities/hf_referral.dart'; -import 'package:registration_delivery/models/entities/household_member.dart'; -import 'package:registration_delivery/models/entities/project_beneficiary.dart'; -import 'package:registration_delivery/models/entities/referral.dart'; -import 'package:registration_delivery/models/entities/side_effect.dart'; -import 'package:registration_delivery/models/entities/task.dart'; - -import 'sync_annotation_module.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:inventory_management/inventory_management.dart'; +import 'package:referral_reconciliation/referral_reconciliation.dart'; +import 'package:registration_delivery/registration_delivery.dart'; class SyncDownEntity { - Future> syncEntities( + syncEntities( MapEntry>> typeGroupedEntity, MapEntry>> operationGroupedEntity, @@ -21,12 +13,119 @@ class SyncDownEntity { List responseEntities, RemoteRepository remote, LocalRepository local) async { - const taskResourceIdKey = "taskResourceId"; - const individualIdentifierIdKey = "individualIdentifierId"; - const householdAddressIdKey = "householdAddressId"; - const individualAddressIdKey = "individualAddressId"; - switch (typeGroupedEntity.key) { - case DataModelType.projectBeneficiary: + switch (typeGroupedEntity.key.name) { + case "individual": + responseEntities = await remote.search(IndividualSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as IndividualModel; + final responseEntity = responseEntities + .whereType() + .firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId); + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + final additionalIds = []; + final addressAdditionalIds = responseEntity?.address + ?.map((e) { + final id = e.id; + if (id == null) return null; + return AdditionalId( + idType: "individualAddressId", + id: id, + ); + }) + .whereNotNull() + .toList(); + additionalIds.addAll(addressAdditionalIds ?? []); + final identifiersAdditionalIds = responseEntity?.identifiers + ?.map((e) { + final id = e.id; + if (id == null) return null; + return AdditionalId( + idType: "individualIdentifierSId", + id: id, + ); + }) + .whereNotNull() + .toList(); + additionalIds.addAll(identifiersAdditionalIds ?? []); + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + nonRecoverableError: entity.nonRecoverableError, + additionalIds: additionalIds, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + if (markAsNonRecoverable) { + await local.update(entity.copyWith(nonRecoverableError: true), + createOpLog: false); + } + } + } + break; + case "household": + responseEntities = await remote.search(HouseholdSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as HouseholdModel; + final responseEntity = responseEntities + .whereType() + .firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId); + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + final additionalIds = []; + final addressAdditionalIds = responseEntity?.address != null + ? null + : AdditionalId( + idType: "householdAddressId", + id: responseEntity!.address!.id!, + ); + additionalIds.addAll([addressAdditionalIds!] ?? []); + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + nonRecoverableError: entity.nonRecoverableError, + additionalIds: additionalIds, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + if (markAsNonRecoverable) { + await local.update(entity.copyWith(nonRecoverableError: true), + createOpLog: false); + } + } + } + break; + case "projectBeneficiary": responseEntities = await remote.search(ProjectBeneficiarySearchModel( clientReferenceId: entities .whereType() @@ -45,10 +144,13 @@ class SyncDownEntity { final serverGeneratedId = responseEntity?.id; final rowVersion = responseEntity?.rowVersion; if (serverGeneratedId != null) { + final additionalIds = []; await local.opLogManager.updateServerGeneratedIds( model: UpdateServerGeneratedIdModel( clientReferenceId: entity.clientReferenceId, serverGeneratedId: serverGeneratedId, + nonRecoverableError: entity.nonRecoverableError, + additionalIds: additionalIds, dataOperation: element.operation, rowVersion: rowVersion, ), @@ -63,7 +165,7 @@ class SyncDownEntity { } } break; - case DataModelType.householdMember: + case "householdMember": responseEntities = await remote.search(HouseholdMemberSearchModel( clientReferenceId: entities .whereType() @@ -82,10 +184,13 @@ class SyncDownEntity { final serverGeneratedId = responseEntity?.id; final rowVersion = responseEntity?.rowVersion; if (serverGeneratedId != null) { + final additionalIds = []; await local.opLogManager.updateServerGeneratedIds( model: UpdateServerGeneratedIdModel( clientReferenceId: entity.clientReferenceId, serverGeneratedId: serverGeneratedId, + nonRecoverableError: entity.nonRecoverableError, + additionalIds: additionalIds, dataOperation: element.operation, rowVersion: rowVersion, ), @@ -100,7 +205,7 @@ class SyncDownEntity { } } break; - case DataModelType.stock: + case "stock": responseEntities = await remote.search(StockSearchModel( clientReferenceId: entities .whereType() @@ -119,10 +224,13 @@ class SyncDownEntity { final serverGeneratedId = responseEntity?.id; final rowVersion = responseEntity?.rowVersion; if (serverGeneratedId != null) { + final additionalIds = []; await local.opLogManager.updateServerGeneratedIds( model: UpdateServerGeneratedIdModel( clientReferenceId: entity.clientReferenceId, serverGeneratedId: serverGeneratedId, + nonRecoverableError: entity.nonRecoverableError, + additionalIds: additionalIds, dataOperation: element.operation, rowVersion: rowVersion, ), @@ -137,7 +245,7 @@ class SyncDownEntity { } } break; - case DataModelType.stockReconciliation: + case "stockReconciliation": responseEntities = await remote.search(StockReconciliationSearchModel( clientReferenceId: entities .whereType() @@ -156,10 +264,13 @@ class SyncDownEntity { final serverGeneratedId = responseEntity?.id; final rowVersion = responseEntity?.rowVersion; if (serverGeneratedId != null) { + final additionalIds = []; await local.opLogManager.updateServerGeneratedIds( model: UpdateServerGeneratedIdModel( clientReferenceId: entity.clientReferenceId, serverGeneratedId: serverGeneratedId, + nonRecoverableError: entity.nonRecoverableError, + additionalIds: additionalIds, dataOperation: element.operation, rowVersion: rowVersion, ), @@ -174,7 +285,7 @@ class SyncDownEntity { } } break; - case DataModelType.task: + case "task": responseEntities = await remote.search(TaskSearchModel( clientReferenceId: entities .whereType() @@ -193,10 +304,25 @@ class SyncDownEntity { final serverGeneratedId = responseEntity?.id; final rowVersion = responseEntity?.rowVersion; if (serverGeneratedId != null) { + final additionalIds = []; + final resourcesAdditionalIds = responseEntity?.resources + ?.map((e) { + final id = e.id; + if (id == null) return null; + return AdditionalId( + idType: "taskResourceSId", + id: id, + ); + }) + .whereNotNull() + .toList(); + additionalIds.addAll(resourcesAdditionalIds ?? []); await local.opLogManager.updateServerGeneratedIds( model: UpdateServerGeneratedIdModel( clientReferenceId: entity.clientReferenceId, serverGeneratedId: serverGeneratedId, + nonRecoverableError: entity.nonRecoverableError, + additionalIds: additionalIds, dataOperation: element.operation, rowVersion: rowVersion, ), @@ -211,7 +337,7 @@ class SyncDownEntity { } } break; - case DataModelType.sideEffect: + case "sideEffect": responseEntities = await remote.search(SideEffectSearchModel( clientReferenceId: entities .whereType() @@ -230,10 +356,13 @@ class SyncDownEntity { final serverGeneratedId = responseEntity?.id; final rowVersion = responseEntity?.rowVersion; if (serverGeneratedId != null) { + final additionalIds = []; await local.opLogManager.updateServerGeneratedIds( model: UpdateServerGeneratedIdModel( clientReferenceId: entity.clientReferenceId, serverGeneratedId: serverGeneratedId, + nonRecoverableError: entity.nonRecoverableError, + additionalIds: additionalIds, dataOperation: element.operation, rowVersion: rowVersion, ), @@ -248,7 +377,7 @@ class SyncDownEntity { } } break; - case DataModelType.referral: + case "referral": responseEntities = await remote.search(ReferralSearchModel( clientReferenceId: entities .whereType() @@ -267,10 +396,13 @@ class SyncDownEntity { final serverGeneratedId = responseEntity?.id; final rowVersion = responseEntity?.rowVersion; if (serverGeneratedId != null) { + final additionalIds = []; await local.opLogManager.updateServerGeneratedIds( model: UpdateServerGeneratedIdModel( clientReferenceId: entity.clientReferenceId, serverGeneratedId: serverGeneratedId, + nonRecoverableError: entity.nonRecoverableError, + additionalIds: additionalIds, dataOperation: element.operation, rowVersion: rowVersion, ), @@ -285,7 +417,7 @@ class SyncDownEntity { } } break; - case DataModelType.hFReferral: + case "hFReferral": responseEntities = await remote.search(HFReferralSearchModel( clientReferenceId: entities .whereType() @@ -304,10 +436,13 @@ class SyncDownEntity { final serverGeneratedId = responseEntity?.id; final rowVersion = responseEntity?.rowVersion; if (serverGeneratedId != null) { + final additionalIds = []; await local.opLogManager.updateServerGeneratedIds( model: UpdateServerGeneratedIdModel( clientReferenceId: entity.clientReferenceId, serverGeneratedId: serverGeneratedId, + nonRecoverableError: entity.nonRecoverableError, + additionalIds: additionalIds, dataOperation: element.operation, rowVersion: rowVersion, ), diff --git a/packages/sync_service/lib/data/sync_service_annotation.dart b/packages/sync_service/lib/data/sync_service_annotation.dart index b4b7714ef..3f0f035eb 100644 --- a/packages/sync_service/lib/data/sync_service_annotation.dart +++ b/packages/sync_service/lib/data/sync_service_annotation.dart @@ -1,22 +1,50 @@ import 'package:recase/recase.dart'; import 'package:super_annotations/super_annotations.dart'; -class SyncServiceAnnotation extends ClassAnnotation { - const SyncServiceAnnotation(); +/// This class uses the [SyncServiceAnnotation] to define entities that require synchronization. +/// +/// The `SyncServiceAnnotation` is applied with a list of entity types that define which +/// entities should be synchronized down from a remote repository. +/// +/// ### Example Usage +/// +/// To add a new entity type to the synchronization list, modify the annotation as shown below: +/// +/// ```dart +/// @SyncServiceAnnotation([ +/// 'newEntityType', // Add your entity type here +/// 'individual.address_.identifier_s', +/// 'household.address', +/// 'projectBeneficiary', +/// // Other existing types... +/// ]) +/// class SyncModule { +/// // Your sync module implementation +/// } +/// ``` +/// +/// Additionally, ensure that the entity type follows the expected naming conventions: +/// +/// - Entity types can include nested entities separated by dots (`.`). +/// - If the entity type ends with a pluralized suffix (`_s` or `_`), the synchronization logic will treat it accordingly. +/// +/// For further details, see the [SyncServiceAnnotation] class and its documentation. +/// [@SyncServiceAnnotation([ +/// 'individual.address_.identifier_s', +/// 'household.address', +/// 'task.resource_s', +/// ])] +/// class Example { + // Class implementation +/// } - @override - void apply(Class element, LibraryBuilder output) { - output.body.add(Code( - '//case DataModelType.${element.fields.map((f) => f.type!.symbol)}: \n var responseEntities = await remote.search(${element.name}(clientReferenceId:entities.whereType<${element.name}>().map((e)=>e.clientReferenceId).whereNotNull().toList(),),);')); - } -} +class SyncServiceAnnotation extends ClassAnnotation { + final List types; -class SyncEnumAnnotation extends EnumAnnotation { - const SyncEnumAnnotation(); + const SyncServiceAnnotation(this.types); @override - void apply(Enum target, LibraryBuilder output) { - // Define the method that will contain the generated cases + void apply(Class target, LibraryBuilder output) { final StringBuffer methodBuffer = StringBuffer() ..writeln('class SyncDownEntity {') ..writeln('syncEntities(') @@ -29,19 +57,16 @@ class SyncEnumAnnotation extends EnumAnnotation { ..writeln(' RemoteRepository remote,') ..writeln( ' LocalRepository local) async {') - ..writeln(' const taskResourceIdKey = "taskResourceId";') - ..writeln(' const individualIdentifierIdKey = "individualIdentifierId";') - ..writeln(' const householdAddressIdKey = "householdAddressId";') - ..writeln(' const individualAddressIdKey = "individualAddressId";') - ..writeln(' switch (typeGroupedEntity.key) {'); + ..writeln(' switch (typeGroupedEntity.key.name) {'); - // Generate case statements for each enum value - for (var entity in target.values.map((v) => v.name)) { - final entityPascalCase = entity.pascalCase; // Convert to PascalCase - final entityCamelCase = entity.camelCase; // Convert to camelCase + for (var entity in types) { + final entityPascalCase = entity.contains('.') + ? entity.split('.')[0].pascalCase + : entity.pascalCase; methodBuffer - ..writeln(' case DataModelType.${entity}:') + ..writeln( + ' case "${entity.contains('.') ? entity.split('.')[0] : entity}":') ..writeln( ' responseEntities = await remote.search(${entityPascalCase}SearchModel(') ..writeln( @@ -60,18 +85,63 @@ class SyncEnumAnnotation extends EnumAnnotation { ..writeln( ' .firstWhereOrNull((e) => e.clientReferenceId == entity.clientReferenceId);') ..writeln(' final serverGeneratedId = responseEntity?.id;') - ..writeln(' final rowVersion = responseEntity?.rowVersion;') + ..writeln(' final rowVersion = responseEntity?.rowVersion;'); + + methodBuffer ..writeln(' if (serverGeneratedId != null) {') + ..writeln(' final additionalIds = [];'); + + // Check each part after the first dot + if (entity.contains('.')) { + final parts = entity.split('.'); + parts.removeAt(0); // Remove the first part + for (var part in parts) { + if (isPlural(part)) { + methodBuffer + ..writeln( + ' final ${removePluralSuffix(part)}AdditionalIds = responseEntity?.${removePluralSuffix(part)}?.map((e) {') + ..writeln(' final id = e.id;') + ..writeln(' if (id == null) return null;') + ..writeln(' return AdditionalId(') + ..writeln( + ' idType: "${entity.contains('.') ? entity.split('.')[0] : entity}${isPlural(part.pascalCase) ? removePluralSuffix(part) : part.pascalCase}Id",') + ..writeln(' id: id,') + ..writeln(' );') + ..writeln(' }).whereNotNull().toList();') + ..writeln( + ' additionalIds.addAll(${removePluralSuffix(part)}AdditionalIds ?? []);'); + } else { + methodBuffer + ..writeln( + ' final ${part}AdditionalIds = responseEntity?.${part} != null') + ..writeln(' ? null') + ..writeln(' : AdditionalId(') + ..writeln( + ' idType: "${entity.contains('.') ? entity.split('.')[0] : entity}${part.pascalCase}Id",') + ..writeln(' id: responseEntity!.${part}!.id!,') + ..writeln(' );') + ..writeln( + ' additionalIds.addAll([${part}AdditionalIds!] ?? []);'); + } + } + } + + methodBuffer ..writeln( ' await local.opLogManager.updateServerGeneratedIds(') ..writeln(' model: UpdateServerGeneratedIdModel(') ..writeln(' clientReferenceId: entity.clientReferenceId,') ..writeln(' serverGeneratedId: serverGeneratedId,') + ..writeln( + ' nonRecoverableError: entity.nonRecoverableError,') + ..writeln(' additionalIds: additionalIds,') ..writeln(' dataOperation: element.operation,') ..writeln(' rowVersion: rowVersion,') ..writeln(' ),') ..writeln(' );') - ..writeln(' } else {') + ..writeln(' } else {'); + + methodBuffer ..writeln( ' final bool markAsNonRecoverable = await local.opLogManager.updateSyncDownRetry(entity.clientReferenceId);') ..writeln(' if (markAsNonRecoverable) {') @@ -83,61 +153,27 @@ class SyncEnumAnnotation extends EnumAnnotation { ..writeln(' break;'); } - // Close the switch and method methodBuffer ..writeln(' }') ..writeln(' return responseEntities;}') ..writeln('}'); - // Add the generated method to the output output.body.add(Code(methodBuffer.toString())); } -} - -// case DataModelType.stock: -// responseEntities = await remote.search( -// StockSearchModel( -// clientReferenceId: entities -// .whereType() -// .map((e) => e.clientReferenceId) -// .whereNotNull() -// .toList(), -// ), -// ); - -// for (var element in operationGroupedEntity.value) { -// if (element.id == null) return; -// final entity = element.entity as StockModel; -// final responseEntity = -// responseEntities.whereType().firstWhereOrNull( -// (e) => e.clientReferenceId == entity.clientReferenceId, -// ); -// final serverGeneratedId = responseEntity?.id; -// final rowVersion = responseEntity?.rowVersion; - -// if (serverGeneratedId != null) { -// await local.opLogManager.updateServerGeneratedIds( -// model: UpdateServerGeneratedIdModel( -// clientReferenceId: entity.clientReferenceId!, -// serverGeneratedId: serverGeneratedId, -// dataOperation: element.operation, -// rowVersion: rowVersion, -// ), -// ); -// } else { -// final bool markAsNonRecoverable = await local.opLogManager -// .updateSyncDownRetry(entity.clientReferenceId); + bool isPlural(String word) { + var result = word.contains('_') ? true : false; + return result; + } -// if (markAsNonRecoverable) { -// await local.update( -// entity.copyWith( -// nonRecoverableError: true, -// ), -// createOpLog: false, -// ); -// } -// } -// } + String removePluralSuffix(String word) { + const pluralSuffixes = ['_']; -// break; + for (var suffix in pluralSuffixes) { + if (word.contains(suffix)) { + return word.replaceAll('_', ''); + } + } + return word; + } +} From 2c425a5dbf4e77bb2b1f630588d042cbf5a7e842 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Thu, 12 Sep 2024 13:20:52 +0530 Subject: [PATCH 106/241] wayBillNumber key change from waybillNumber return transaction type logic change in stock_details and report_details bloc --- .../pubspec.lock | 6 +- .../pubspec.yaml | 2 +- packages/inventory_management/CHANGELOG.md | 7 ++- .../lib/blocs/inventory_report.dart | 4 +- .../lib/data/repositories/local/stock.dart | 2 +- .../lib/models/entities/stock.dart | 6 +- .../lib/models/entities/stock.mapper.dart | 18 +++--- .../lib/pages/record_stock/stock_details.dart | 4 +- .../lib/pages/reports/report_details.dart | 4 +- packages/inventory_management/pubspec.lock | 60 +++++++++++++------ packages/inventory_management/pubspec.yaml | 2 +- 11 files changed, 72 insertions(+), 43 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index c96f0b5fd..74b2e38d4 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -430,7 +430,7 @@ packages: description: path: "packages/dart_mappable_builder" ref: master - resolved-ref: "9b887d24c05459c027a92391869d4c10b440e00f" + resolved-ref: e3d8ac43f70568b4a17c200cae5cde285050ef23 url: "https://github.com/egovernments/health-campaign-field-worker-app/" source: git version: "4.2.0" @@ -1120,10 +1120,10 @@ packages: dependency: "direct main" description: name: inventory_management - sha256: "1a5976ab807666629704f559730d5418e1c723fed898df2cc6e7d9807f813b6f" + sha256: "26b14fc7286af4961c41ec0e896ce16c7dc722608f6837deef9ece6e2688681d" url: "https://pub.dev" source: hosted - version: "1.0.3+2" + version: "1.0.3+3" io: dependency: transitive description: diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index c2d6d352d..703be643a 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -67,7 +67,7 @@ dependencies: camera: ^0.10.5+7 attendance_management: ^1.0.2+1 digit_scanner: ^1.0.3+1 - inventory_management: ^1.0.3+2 + inventory_management: ^1.0.3+3 referral_reconciliation: ^1.0.2+1 digit_data_model: ^1.0.3+1 registration_delivery: ^1.0.3+1 diff --git a/packages/inventory_management/CHANGELOG.md b/packages/inventory_management/CHANGELOG.md index 930c5526b..4a1dab360 100644 --- a/packages/inventory_management/CHANGELOG.md +++ b/packages/inventory_management/CHANGELOG.md @@ -1,4 +1,9 @@ -## 1.0.3+1 +## 1.0.3+3 + +* Updated key name of waybillNumber to wayBillNumber +* Return transaction type logic change in stock_details and report_details bloc + +## 1.0.3+2 * Updated digit_scanner package, digit_components, digit_data_model diff --git a/packages/inventory_management/lib/blocs/inventory_report.dart b/packages/inventory_management/lib/blocs/inventory_report.dart index 29c2bdf7f..9221d2c02 100644 --- a/packages/inventory_management/lib/blocs/inventory_report.dart +++ b/packages/inventory_management/lib/blocs/inventory_report.dart @@ -67,8 +67,8 @@ class InventoryReportBloc } else if (reportType == InventoryReportType.returned) { transactionType = [TransactionType.received.toValue()]; transactionReason = [TransactionReason.returned.toValue()]; - receiverId = null; - senderId = facilityId; + receiverId = facilityId; + senderId = null; } else if (reportType == InventoryReportType.damage) { transactionType = [TransactionType.dispatched.toValue()]; transactionReason = [ diff --git a/packages/inventory_management/lib/data/repositories/local/stock.dart b/packages/inventory_management/lib/data/repositories/local/stock.dart index b50043d79..7a04099fe 100644 --- a/packages/inventory_management/lib/data/repositories/local/stock.dart +++ b/packages/inventory_management/lib/data/repositories/local/stock.dart @@ -89,7 +89,7 @@ class StockLocalRepository transactingPartyId: data.transactingPartyId, transactingPartyType: data.transactingPartyType, quantity: data.quantity, - waybillNumber: data.waybillNumber, + wayBillNumber: data.waybillNumber, clientReferenceId: data.clientReferenceId, isDeleted: data.isDeleted, rowVersion: data.rowVersion, diff --git a/packages/inventory_management/lib/models/entities/stock.dart b/packages/inventory_management/lib/models/entities/stock.dart index ea66c3e19..66f9882b2 100644 --- a/packages/inventory_management/lib/models/entities/stock.dart +++ b/packages/inventory_management/lib/models/entities/stock.dart @@ -77,7 +77,7 @@ class StockModel extends EntityModel with StockModelMappable { final String? transactingPartyId; final String? transactingPartyType; final String? quantity; - final String? waybillNumber; + final String? wayBillNumber; final String? receiverId; final String? receiverType; final String? senderId; @@ -100,7 +100,7 @@ class StockModel extends EntityModel with StockModelMappable { this.transactingPartyId, this.transactingPartyType, this.quantity, - this.waybillNumber, + this.wayBillNumber, this.receiverId, this.receiverType, this.senderId, @@ -136,7 +136,7 @@ class StockModel extends EntityModel with StockModelMappable { transactingPartyId: Value(transactingPartyId), transactingPartyType: Value(transactingPartyType), quantity: Value(quantity), - waybillNumber: Value(waybillNumber), + waybillNumber: Value(wayBillNumber), receiverId: Value(receiverId), receiverType: Value(receiverType), senderId: Value(senderId), diff --git a/packages/inventory_management/lib/models/entities/stock.mapper.dart b/packages/inventory_management/lib/models/entities/stock.mapper.dart index c34205004..8c4738857 100644 --- a/packages/inventory_management/lib/models/entities/stock.mapper.dart +++ b/packages/inventory_management/lib/models/entities/stock.mapper.dart @@ -361,9 +361,9 @@ class StockModelMapper extends SubClassMapperBase { static String? _$quantity(StockModel v) => v.quantity; static const Field _f$quantity = Field('quantity', _$quantity, opt: true); - static String? _$waybillNumber(StockModel v) => v.waybillNumber; - static const Field _f$waybillNumber = - Field('waybillNumber', _$waybillNumber, opt: true); + static String? _$wayBillNumber(StockModel v) => v.wayBillNumber; + static const Field _f$wayBillNumber = + Field('wayBillNumber', _$wayBillNumber, opt: true); static String? _$receiverId(StockModel v) => v.receiverId; static const Field _f$receiverId = Field('receiverId', _$receiverId, opt: true); @@ -415,7 +415,7 @@ class StockModelMapper extends SubClassMapperBase { #transactingPartyId: _f$transactingPartyId, #transactingPartyType: _f$transactingPartyType, #quantity: _f$quantity, - #waybillNumber: _f$waybillNumber, + #wayBillNumber: _f$wayBillNumber, #receiverId: _f$receiverId, #receiverType: _f$receiverType, #senderId: _f$senderId, @@ -452,7 +452,7 @@ class StockModelMapper extends SubClassMapperBase { transactingPartyId: data.dec(_f$transactingPartyId), transactingPartyType: data.dec(_f$transactingPartyType), quantity: data.dec(_f$quantity), - waybillNumber: data.dec(_f$waybillNumber), + wayBillNumber: data.dec(_f$wayBillNumber), receiverId: data.dec(_f$receiverId), receiverType: data.dec(_f$receiverType), senderId: data.dec(_f$senderId), @@ -539,7 +539,7 @@ abstract class StockModelCopyWith<$R, $In extends StockModel, $Out> String? transactingPartyId, String? transactingPartyType, String? quantity, - String? waybillNumber, + String? wayBillNumber, String? receiverId, String? receiverType, String? senderId, @@ -587,7 +587,7 @@ class _StockModelCopyWithImpl<$R, $Out> Object? transactingPartyId = $none, Object? transactingPartyType = $none, Object? quantity = $none, - Object? waybillNumber = $none, + Object? wayBillNumber = $none, Object? receiverId = $none, Object? receiverType = $none, Object? senderId = $none, @@ -613,7 +613,7 @@ class _StockModelCopyWithImpl<$R, $Out> if (transactingPartyType != $none) #transactingPartyType: transactingPartyType, if (quantity != $none) #quantity: quantity, - if (waybillNumber != $none) #waybillNumber: waybillNumber, + if (wayBillNumber != $none) #wayBillNumber: wayBillNumber, if (receiverId != $none) #receiverId: receiverId, if (receiverType != $none) #receiverType: receiverType, if (senderId != $none) #senderId: senderId, @@ -645,7 +645,7 @@ class _StockModelCopyWithImpl<$R, $Out> transactingPartyType: data.get(#transactingPartyType, or: $value.transactingPartyType), quantity: data.get(#quantity, or: $value.quantity), - waybillNumber: data.get(#waybillNumber, or: $value.waybillNumber), + wayBillNumber: data.get(#wayBillNumber, or: $value.wayBillNumber), receiverId: data.get(#receiverId, or: $value.receiverId), receiverType: data.get(#receiverType, or: $value.receiverType), senderId: data.get(#senderId, or: $value.senderId), diff --git a/packages/inventory_management/lib/pages/record_stock/stock_details.dart b/packages/inventory_management/lib/pages/record_stock/stock_details.dart index ac1373925..fe25c4232 100644 --- a/packages/inventory_management/lib/pages/record_stock/stock_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/stock_details.dart @@ -385,6 +385,7 @@ class StockDetailsPageState extends LocalizedState { case StockRecordEntryType.receipt: case StockRecordEntryType.loss: case StockRecordEntryType.damaged: + case StockRecordEntryType.returned: if (deliveryTeamSelected) { senderId = deliveryTeamName; senderType = "STAFF"; @@ -397,7 +398,6 @@ class StockDetailsPageState extends LocalizedState { break; case StockRecordEntryType.dispatch: - case StockRecordEntryType.returned: if (deliveryTeamSelected) { receiverId = deliveryTeamName; receiverType = "STAFF"; @@ -420,7 +420,7 @@ class StockDetailsPageState extends LocalizedState { referenceId: stockState.projectId, referenceIdType: 'PROJECT', quantity: quantity.toString(), - waybillNumber: waybillNumber, + wayBillNumber: waybillNumber, receiverId: receiverId, receiverType: receiverType, senderId: senderId, diff --git a/packages/inventory_management/lib/pages/reports/report_details.dart b/packages/inventory_management/lib/pages/reports/report_details.dart index 19b1aef9d..1cefbb72c 100644 --- a/packages/inventory_management/lib/pages/reports/report_details.dart +++ b/packages/inventory_management/lib/pages/reports/report_details.dart @@ -458,9 +458,9 @@ class InventoryReportDetailsPageState DigitGridCell( key: waybillKey, value: model - .waybillNumber ?? + .wayBillNumber ?? model - .waybillNumber ?? + .wayBillNumber ?? '', ), DigitGridCell( diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index 8135fff11..a8ec36c59 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -809,6 +809,30 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -861,26 +885,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -949,10 +973,10 @@ packages: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_parsing: dependency: transitive description: @@ -1290,26 +1314,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" timing: dependency: transitive description: @@ -1378,10 +1402,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1447,5 +1471,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.3.0 <3.9.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index 29c0c7f95..ea4fb67da 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -1,6 +1,6 @@ name: inventory_management description: This package offers inventory management features, allowing users to view stock reports and perform inventory resource reconciliation. -version: 1.0.3+2 +version: 1.0.3+3 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/inventory_management repository: https://github.com/egovernments/health-campaign-field-worker-app From 9b14bfd959d38e25202637a63b6a2cc0f884c999 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Thu, 12 Sep 2024 16:08:23 +0530 Subject: [PATCH 107/241] validation for wayBillNumber --- .../pubspec.lock | 4 +- .../pubspec.yaml | 2 +- packages/inventory_management/CHANGELOG.md | 4 ++ .../lib/pages/record_stock/stock_details.dart | 33 ++++++---- packages/inventory_management/pubspec.lock | 60 ++++++------------- packages/inventory_management/pubspec.yaml | 2 +- 6 files changed, 48 insertions(+), 57 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 74b2e38d4..3612812d3 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -1120,10 +1120,10 @@ packages: dependency: "direct main" description: name: inventory_management - sha256: "26b14fc7286af4961c41ec0e896ce16c7dc722608f6837deef9ece6e2688681d" + sha256: "1d0dd4f7811941092653426a86548a31d475237d318eee71505b21a57ebc310b" url: "https://pub.dev" source: hosted - version: "1.0.3+3" + version: "1.0.3+4" io: dependency: transitive description: diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 703be643a..128c44780 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -67,7 +67,7 @@ dependencies: camera: ^0.10.5+7 attendance_management: ^1.0.2+1 digit_scanner: ^1.0.3+1 - inventory_management: ^1.0.3+3 + inventory_management: ^1.0.3+4 referral_reconciliation: ^1.0.2+1 digit_data_model: ^1.0.3+1 registration_delivery: ^1.0.3+1 diff --git a/packages/inventory_management/CHANGELOG.md b/packages/inventory_management/CHANGELOG.md index 4a1dab360..392d9a00c 100644 --- a/packages/inventory_management/CHANGELOG.md +++ b/packages/inventory_management/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.3+4 + +* Updated wayBillNumber validation + ## 1.0.3+3 * Updated key name of waybillNumber to wayBillNumber diff --git a/packages/inventory_management/lib/pages/record_stock/stock_details.dart b/packages/inventory_management/lib/pages/record_stock/stock_details.dart index fe25c4232..be040e8e4 100644 --- a/packages/inventory_management/lib/pages/record_stock/stock_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/stock_details.dart @@ -60,7 +60,9 @@ class StockDetailsPageState extends LocalizedState { Validators.max(10000), ]), _transactionReasonKey: FormControl(), - _waybillNumberKey: FormControl(), + _waybillNumberKey: FormControl( + validators: [Validators.minLength(2), Validators.maxLength(200)], + ), _waybillQuantityKey: FormControl(), _vehicleNumberKey: FormControl(), _typeOfTransportKey: FormControl(), @@ -834,16 +836,25 @@ class StockDetailsPageState extends LocalizedState { ), if (isWareHouseMgr) DigitTextFormField( - key: const Key(_waybillNumberKey), - label: localizations.translate( - i18.stockDetails.waybillNumberLabel, - ), - formControlName: _waybillNumberKey, - keyboardType: - const TextInputType.numberWithOptions( - decimal: true, - ), - ), + key: const Key(_waybillNumberKey), + label: localizations.translate( + i18.stockDetails.waybillNumberLabel, + ), + formControlName: _waybillNumberKey, + keyboardType: + const TextInputType.numberWithOptions( + decimal: true, + ), + validationMessages: { + 'maxLength': (object) => localizations + .translate( + i18.common.maxCharsRequired) + .replaceAll('{}', '200'), + 'minLength': (object) => localizations + .translate( + i18.common.min2CharsRequired) + .replaceAll('{}', ''), + }), if (isWareHouseMgr) DigitTextFormField( label: localizations.translate( diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index a8ec36c59..8135fff11 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -809,30 +809,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" - url: "https://pub.dev" - source: hosted - version: "10.0.4" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" - url: "https://pub.dev" - source: hosted - version: "3.0.3" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://pub.dev" - source: hosted - version: "3.0.1" lints: dependency: transitive description: @@ -885,26 +861,26 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.5.0" meta: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.10.0" mime: dependency: transitive description: @@ -973,10 +949,10 @@ packages: dependency: "direct main" description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.8.3" path_parsing: dependency: transitive description: @@ -1314,26 +1290,26 @@ packages: dependency: transitive description: name: test - sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" + sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f url: "https://pub.dev" source: hosted - version: "1.25.2" + version: "1.24.9" test_api: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.6.1" test_core: dependency: transitive description: name: test_core - sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" + sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.5.9" timing: dependency: transitive description: @@ -1402,10 +1378,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 url: "https://pub.dev" source: hosted - version: "14.2.1" + version: "13.0.0" watcher: dependency: transitive description: @@ -1471,5 +1447,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.3.0 <3.9.0" - flutter: ">=3.18.0-18.0.pre.54" + dart: ">=3.2.0 <3.9.0" + flutter: ">=3.16.0" diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index ea4fb67da..acb691200 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -1,6 +1,6 @@ name: inventory_management description: This package offers inventory management features, allowing users to view stock reports and perform inventory resource reconciliation. -version: 1.0.3+3 +version: 1.0.3+4 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/inventory_management repository: https://github.com/egovernments/health-campaign-field-worker-app From 242f374c33964b4504952a46bdf0818769002e2f Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Fri, 13 Sep 2024 12:27:10 +0530 Subject: [PATCH 108/241] changed the digit_component library to new digit_ui-component library --- .../pubspec.lock | 469 ++++++++++++++---- .../pubspec.yaml | 2 + packages/attendance_management/pubspec.lock | 68 ++- .../closed_household_acknowledgement.dart | 40 +- .../lib/pages/closed_household_details.dart | 172 +++++-- .../lib/pages/closed_household_summary.dart | 55 +- .../lib/pages/closed_household_wrapper.dart | 9 + .../widgets/back_navigation_help_header.dart | 6 +- .../lib/widgets/showcase/showcase_button.dart | 14 +- .../widgets/showcase/showcase_wrappers.dart | 25 +- packages/closed_household/pubspec.yaml | 6 +- .../digit_components/example/pubspec.lock | 60 ++- packages/digit_components/pubspec.lock | 91 +++- packages/digit_data_model/pubspec.lock | 76 +-- packages/digit_firebase_services/pubspec.lock | 215 +++++++- packages/digit_scanner/example/pubspec.lock | 56 ++- packages/digit_scanner/pubspec.lock | 168 ++----- packages/forms_engine/pubspec.lock | 60 ++- packages/inventory_management/pubspec.lock | 68 ++- packages/referral_reconciliation/pubspec.lock | 68 ++- packages/registration_delivery/pubspec.lock | 68 ++- 21 files changed, 1250 insertions(+), 546 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 371a1a8d1..6bf88dcc1 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -37,18 +37,18 @@ packages: dependency: transitive description: name: ansicolor - sha256: "8bf17a8ff6ea17499e40a2d2542c2f481cd7615760c6d34065cb22bfd22e6880" + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.0.3" archive: dependency: transitive description: name: archive - sha256: "6bd38d335f0954f5fad9c79e614604fbf03a0e5b975923dd001b6ea965ef5b4b" + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d url: "https://pub.dev" source: hosted - version: "3.6.0" + version: "3.6.1" args: dependency: transitive description: @@ -68,10 +68,9 @@ packages: attendance_management: dependency: "direct main" description: - name: attendance_management - sha256: f1b4373e8d0d9f8227ede0d25d4141f0d16d18ac2525c0347b844098cdab080f - url: "https://pub.dev" - source: hosted + path: "../../packages/attendance_management" + relative: true + source: path version: "1.0.2+1" audioplayers: dependency: "direct main" @@ -157,10 +156,10 @@ packages: dependency: transitive description: name: battery_plus_platform_interface - sha256: "942707f90e2f7481dcb178df02e22a9c6971b3562b848d6a1b8c7cff9f1a1fec" + sha256: e8342c0f32de4b1dfd0223114b6785e48e579bfc398da9471c9179b907fa4910 url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "2.0.1" bloc: dependency: transitive description: @@ -285,18 +284,18 @@ packages: dependency: transitive description: name: camera_platform_interface - sha256: a250314a48ea337b35909a4c9d5416a208d736dcb01d0b02c6af122be66660b0 + sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 url: "https://pub.dev" source: hosted - version: "2.7.4" + version: "2.8.0" camera_web: dependency: transitive description: name: camera_web - sha256: "9e9aba2fbab77ce2472924196ff8ac4dd8f9126c4f9a3096171cd1d870d6b26c" + sha256: b9235ec0a2ce949daec546f1f3d86f05c3921ed31c7d9ab6b7c03214d152fc2d url: "https://pub.dev" source: hosted - version: "0.3.3" + version: "0.3.4" characters: dependency: transitive description: @@ -340,10 +339,9 @@ packages: closed_household: dependency: "direct main" description: - name: closed_household - sha256: d216dbc8e263c9be576e3747ceee9715a6a96e6056a7a812847fb44589f515e8 - url: "https://pub.dev" - source: hosted + path: "../../packages/closed_household" + relative: true + source: path version: "1.0.1+1" code_builder: dependency: transitive @@ -409,6 +407,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" + url: "https://pub.dev" + source: hosted + version: "1.0.0" cupertino_icons: dependency: "direct main" description: @@ -428,11 +434,9 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "9b887d24c05459c027a92391869d4c10b440e00f" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git + path: "../../packages/dart_mappable_builder" + relative: true + source: path version: "4.2.0" dart_style: dependency: transitive @@ -478,10 +482,10 @@ packages: dependency: transitive description: name: device_info_plus_platform_interface - sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64 + sha256: "282d3cf731045a2feb66abfe61bbc40870ae50a3ed10a4d3d217556c35c8c2ba" url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "7.0.1" diff_match_patch: dependency: transitive description: @@ -500,33 +504,32 @@ packages: digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "0b81e96636496b56b4f9c5d918690a17d8985d6b131e0ab54968eb5471ee4f54" - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_data_model" + relative: true + source: path version: "1.0.3+1" digit_dss: dependency: "direct main" description: - name: digit_dss - sha256: "32e2173ae52e7fd9fb53fa435fb21466248029366584f44a0c0f2c6836267a98" - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_dss" + relative: true + source: path version: "1.0.1" digit_firebase_services: dependency: "direct main" description: - path: "../../packages/digit_firebase_services" - relative: true - source: path + path: "packages/digit_firebase_services" + ref: checklist-tanishi + resolved-ref: a4fd63e10e76cec82675332689e344e309246e65 + url: "https://github.com/egovernments/health-campaign-field-worker-app" + source: git version: "0.0.1" digit_scanner: dependency: "direct main" description: - name: digit_scanner - sha256: "9862c4885465bb1942e36dc9b42596c201648db9b0f5ffb8ad768e2409fc2742" - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_scanner" + relative: true + source: path version: "1.0.3+1" digit_showcase: dependency: "direct main" @@ -536,14 +539,31 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" + digit_ui_components: + dependency: "direct main" + description: + path: "flutter/digit-ui-components/digit_components" + ref: enhancement-branch-flutter + resolved-ref: "210999335d0bc7f6a76ef3839132efcaa7e9957a" + url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" + source: git + version: "0.0.1+6" dio: dependency: "direct main" description: name: dio - sha256: "11e40df547d418cc0c4900a9318b26304e665da6fa4755399a9ff9efd09034b5" + sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" url: "https://pub.dev" source: hosted - version: "5.4.3+1" + version: "5.7.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac" + url: "https://pub.dev" + source: hosted + version: "1.0.1" disable_battery_optimization: dependency: "direct main" description: @@ -560,6 +580,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.1" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" drift: dependency: "direct main" description: @@ -632,6 +660,46 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 + url: "https://pub.dev" + source: hosted + version: "8.0.0+1" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + url: "https://pub.dev" + source: hosted + version: "0.9.2+1" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 + url: "https://pub.dev" + source: hosted + version: "0.9.4" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" firebase_core: dependency: transitive description: @@ -644,10 +712,10 @@ packages: dependency: transitive description: name: firebase_core_platform_interface - sha256: c437ae5d17e6b5cc7981cf6fd458a5db4d12979905f9aafd1fea930428a9fe63 + sha256: f7d7180c7f99babd4b4c517754d41a09a4943a0f7a69b65c894ca5c68ba66315 url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.2.1" firebase_core_web: dependency: transitive description: @@ -689,42 +757,42 @@ packages: dependency: "direct main" description: name: flutter_background_service - sha256: "94d9a143852729140e17254a53769383b03738cd92b6e588a8762003e6cd9dd9" + sha256: d32f078ec57647c9cfd6e1a8da9297f7d8f021d4dcc204a35aaad2cdbfe255f0 url: "https://pub.dev" source: hosted - version: "5.0.5" + version: "5.0.10" flutter_background_service_android: dependency: transitive description: name: flutter_background_service_android - sha256: "30863ebafd8214b8e76d5e5c9f27887dc5cc303fcf3e89f71534f621fc486782" + sha256: "39da42dddf877beeef82bc2583130d8bedb4d0765e99ca9e7b4a32e8c6abd239" url: "https://pub.dev" source: hosted - version: "6.2.2" + version: "6.2.7" flutter_background_service_ios: dependency: transitive description: name: flutter_background_service_ios - sha256: ab73657535876e16abc89e40f924df3e92ad3dee83f64d187081417e824709ed + sha256: "6037ffd45c4d019dab0975c7feb1d31012dd697e25edc05505a4a9b0c7dc9fba" url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.0.3" flutter_background_service_platform_interface: dependency: transitive description: name: flutter_background_service_platform_interface - sha256: cd5720ff5b051d551a4734fae16683aace779bd0425e8d3f15d84a0cdcc2d8d9 + sha256: ca74aa95789a8304f4d3f57f07ba404faa86bed6e415f83e8edea6ad8b904a41 url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.1.2" flutter_bloc: dependency: "direct main" description: name: flutter_bloc - sha256: f0ecf6e6eb955193ca60af2d5ca39565a86b8a142452c5b24d96fb477428f4d2 + sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a url: "https://pub.dev" source: hosted - version: "8.1.5" + version: "8.1.6" flutter_dotenv: dependency: "direct main" description: @@ -738,6 +806,30 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: b4e2df75364bab2f4c3ca32b87193267d786b6e158c3f345c3a1daeb911d82b9 + url: "https://pub.dev" + source: hosted + version: "2.0.6" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" flutter_focus_watcher: dependency: transitive description: @@ -822,18 +914,18 @@ packages: dependency: transitive description: name: flutter_local_notifications_linux - sha256: "33f741ef47b5f63cc7f78fe75eeeac7e19f171ff3c3df054d84c1e38bedb6a03" + sha256: c49bd06165cad9beeb79090b18cd1eb0296f4bf4b23b84426e37dd7c027fc3af url: "https://pub.dev" source: hosted - version: "4.0.0+1" + version: "4.0.1" flutter_local_notifications_platform_interface: dependency: transitive description: name: flutter_local_notifications_platform_interface - sha256: "340abf67df238f7f0ef58f4a26d2a83e1ab74c77ab03cd2b2d5018ac64db30b7" + sha256: "85f8d07fe708c1bdcf45037f2c0109753b26ae077e9d9e899d55971711a4ea66" url: "https://pub.dev" source: hosted - version: "7.1.0" + version: "7.2.0" flutter_localizations: dependency: "direct main" description: flutter @@ -911,6 +1003,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" flutter_svg: dependency: "direct main" description: @@ -965,10 +1065,10 @@ packages: dependency: "direct main" description: name: freezed_annotation - sha256: c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d + sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.4" frontend_server_client: dependency: transitive description: @@ -982,6 +1082,54 @@ packages: description: flutter source: sdk version: "0.0.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + url: "https://pub.dev" + source: hosted + version: "4.3.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: bc2aca02423ad429cb0556121f56e60360a2b7d694c8570301d06ea0c00732fd + url: "https://pub.dev" + source: hosted + version: "2.3.7" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -1034,10 +1182,10 @@ packages: dependency: "direct main" description: name: gs1_barcode_parser - sha256: "9aaff47bdab7177deaf9248cc861ef41cf611d3f828498cb40b64bedcbf53391" + sha256: ff171bc40038de3f7178fbc32eaf9eebc3d35a3c4c00bb0281fe4a976d853a42 url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.1.0" horizontal_data_table: dependency: transitive description: @@ -1050,10 +1198,10 @@ packages: dependency: transitive description: name: hrk_batteries - sha256: "8ecfdee8268d480a700153a006f7c622c922fbfba4d8f576438c8c41ea9efdf2" + sha256: "437324250c9b157654c9bb6c374170b8fa940f0f11dd9d019833e2731689272b" url: "https://pub.dev" source: hosted - version: "0.9.2" + version: "2.0.0" hrk_flutter_test_batteries: dependency: "direct dev" description: @@ -1066,10 +1214,18 @@ packages: dependency: transitive description: name: hrk_logging - sha256: "7ea3d02ed46f19533a8cae075cafe636757548a300a0e404193f6dd142c024b5" + sha256: "2e6501f4b78439bec4c367a94b14f792fd17fe1c94f18d903086c7b8a48402f5" url: "https://pub.dev" source: hosted - version: "0.1.3" + version: "0.3.1" + html: + dependency: transitive + description: + name: html + sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" + url: "https://pub.dev" + source: hosted + version: "0.15.4" http: dependency: transitive description: @@ -1098,10 +1254,74 @@ packages: dependency: transitive description: name: image - sha256: "4c68bfd5ae83e700b5204c1e74451e7bf3cf750e6843c6e158289cf56bda018e" + sha256: "2237616a36c0d69aef7549ab439b833fb7f9fb9fc861af2cc9ac3eedddd69ca8" url: "https://pub.dev" source: hosted - version: "4.1.7" + version: "4.2.0" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" + url: "https://pub.dev" + source: hosted + version: "1.0.8" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" + url: "https://pub.dev" + source: hosted + version: "0.8.9+6" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 + url: "https://pub.dev" + source: hosted + version: "0.8.9+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b + url: "https://pub.dev" + source: hosted + version: "2.9.3" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" integration_test: dependency: "direct dev" description: flutter @@ -1119,10 +1339,10 @@ packages: dependency: "direct main" description: name: inventory_management - sha256: "1a5976ab807666629704f559730d5418e1c723fed898df2cc6e7d9807f813b6f" + sha256: "1d0dd4f7811941092653426a86548a31d475237d318eee71505b21a57ebc310b" url: "https://pub.dev" source: hosted - version: "1.0.3+2" + version: "1.0.3+4" io: dependency: transitive description: @@ -1263,18 +1483,18 @@ packages: dependency: transitive description: name: mime - sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.6" mocktail: dependency: "direct dev" description: name: mocktail - sha256: c4b5007d91ca4f67256e720cb1b6d704e79a510183a12fa551021f652577dce6 + sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" nested: dependency: "direct main" description: @@ -1339,6 +1559,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_parsing: dependency: transitive description: @@ -1351,10 +1579,10 @@ packages: dependency: "direct main" description: name: path_provider - sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" path_provider_android: dependency: transitive description: @@ -1391,10 +1619,10 @@ packages: dependency: transitive description: name: path_provider_windows - sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.3.0" pedantic: dependency: transitive description: @@ -1455,10 +1683,10 @@ packages: dependency: "direct main" description: name: pretty_dio_logger - sha256: "00b80053063935cf9a6190da344c5373b9d0e92da4c944c878ff2fbef0ef6dc2" + sha256: "36f2101299786d567869493e2f5731de61ce130faa14679473b26905a92b6407" url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.4.0" process: dependency: transitive description: @@ -1487,10 +1715,10 @@ packages: dependency: transitive description: name: pubspec_parse - sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 + sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 url: "https://pub.dev" source: hosted - version: "1.2.3" + version: "1.3.0" qr: dependency: transitive description: @@ -1534,18 +1762,16 @@ packages: referral_reconciliation: dependency: "direct main" description: - name: referral_reconciliation - sha256: "80d5b93164e4f8337fa757fcb75a1e85b88ffbb760e731ca24496a0cae2aef38" - url: "https://pub.dev" - source: hosted + path: "../../packages/referral_reconciliation" + relative: true + source: path version: "1.0.2+1" registration_delivery: dependency: "direct main" description: - name: registration_delivery - sha256: a6a88665bbf1fa5dce5b864d66992ff9c885b2a3cd898d37f349f1be03cf4086 - url: "https://pub.dev" - source: hosted + path: "../../packages/registration_delivery" + relative: true + source: path version: "1.0.3+1" remove_emoji_input_formatter: dependency: transitive @@ -1591,18 +1817,18 @@ packages: dependency: transitive description: name: shared_preferences_linux - sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" + sha256: "2ba0510d3017f91655b7543e9ee46d48619de2a2af38e5c790423f7007c7ccc1" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.0" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b" + sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.1" shared_preferences_web: dependency: transitive description: @@ -1615,10 +1841,10 @@ packages: dependency: transitive description: name: shared_preferences_windows - sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" + sha256: "398084b47b7f92110683cac45c6dc4aae853db47e470e5ddcd52cab7f7196ab2" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.0" shelf: dependency: transitive description: @@ -1732,10 +1958,10 @@ packages: dependency: "direct main" description: name: sqlite3_flutter_libs - sha256: fb2a106a2ea6042fe57de2c47074cc31539a941819c91e105b864744605da3f5 + sha256: "62bbb4073edbcdf53f40c80775f33eea01d301b7b81417e5b3fb7395416258c1" url: "https://pub.dev" source: hosted - version: "0.5.21" + version: "0.5.24" sqlparser: dependency: transitive description: @@ -1776,6 +2002,15 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" + survey_form: + dependency: "direct overridden" + description: + path: "packages/survey_form" + ref: checklist-package + resolved-ref: "990025a060809c5e07ee61df8d7042f29f786122" + url: "https://github.com/egovernments/health-campaign-field-worker-app" + source: git + version: "0.0.1-dev.1" sync_http: dependency: transitive description: @@ -1836,10 +2071,10 @@ packages: dependency: transitive description: name: timezone - sha256: a6ccda4a69a442098b602c44e61a1e2b4bf6f5516e875bbf0f427d5df14745d5 + sha256: "2236ec079a174ce07434e89fcd3fcda430025eb7692244139a9cf54fdcf1fc7d" url: "https://pub.dev" source: hosted - version: "0.9.3" + version: "0.9.4" timing: dependency: transitive description: @@ -1864,6 +2099,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" upower: dependency: transitive description: @@ -1876,10 +2127,10 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: "6ce1e04375be4eed30548f10a315826fd933c1e493206eab82eed01f438c8d2e" + sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" url: "https://pub.dev" source: hosted - version: "6.2.6" + version: "6.3.0" url_launcher_android: dependency: transitive description: @@ -1932,10 +2183,10 @@ packages: dependency: transitive description: name: url_launcher_windows - sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7 + sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" uuid: dependency: "direct main" description: @@ -1976,6 +2227,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" vm_service: dependency: transitive description: @@ -2081,5 +2340,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.3 <3.9.0" + dart: ">=3.2.0 <4.0.0" flutter: ">=3.16.0" diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index c2d6d352d..0e5a1ff51 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -19,6 +19,7 @@ dependencies: path_provider: ^2.0.11 path: ^1.8.2 digit_components: ^1.0.1+1 + digit_ui_components: 0.0.3-beta auto_route: ^7.8.4 flutter_bloc: ^8.1.1 collection: ^1.16.0 @@ -110,6 +111,7 @@ flutter: assets: - ./ - assets/icons/svg/ + - assets/animated_json/ fonts: - family: Roboto diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index 92c10cb88..634be0aea 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -276,11 +276,9 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "9b887d24c05459c027a92391869d4c10b440e00f" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git + path: "../dart_mappable_builder" + relative: true + source: path version: "4.2.0" dart_style: dependency: transitive @@ -657,6 +655,30 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -709,26 +731,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -805,10 +827,10 @@ packages: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_parsing: dependency: transitive description: @@ -1106,26 +1128,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" timing: dependency: transitive description: @@ -1194,10 +1216,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1263,5 +1285,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.3.0 <3.9.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/closed_household/lib/pages/closed_household_acknowledgement.dart b/packages/closed_household/lib/pages/closed_household_acknowledgement.dart index 8cdc00795..5167ac4a3 100644 --- a/packages/closed_household/lib/pages/closed_household_acknowledgement.dart +++ b/packages/closed_household/lib/pages/closed_household_acknowledgement.dart @@ -1,5 +1,7 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/enum/app_enums.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_button.dart'; +import 'package:digit_ui_components/widgets/molecules/panel_cards.dart'; import 'package:flutter/material.dart'; import '../../../utils/i18_key_constants.dart' as i18; @@ -25,22 +27,28 @@ class _ClosedHouseholdAcknowledgementPageState return PopScope( canPop: false, child: Scaffold( - body: DigitAcknowledgement.success( - action: () { - final parent = context.router.parent() as StackRouter; - // Pop twice to navigate back to the previous screen - parent.popUntilRoot(); - }, - enableViewHousehold: false, - actionLabel: localizations - .translate(i18.acknowledgementSuccess.actionLabelText), - description: localizations.translate( - i18.acknowledgementSuccess.acknowledgementDescriptionText, - ), - label: localizations.translate( - i18.acknowledgementSuccess.acknowledgementLabelText, - ), + body: PanelCard( + type: PanelType.success, + title: localizations.translate( + i18.acknowledgementSuccess.acknowledgementLabelText, ), + description: localizations.translate( + i18.acknowledgementSuccess.acknowledgementDescriptionText, + ), + actions: [ + Button( + label: localizations + .translate(i18.acknowledgementSuccess.actionLabelText), + onPressed: () { + context.router.popUntilRoot(); + context.router.maybePop(); + }, + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + ) + ] + ), ), ); } diff --git a/packages/closed_household/lib/pages/closed_household_details.dart b/packages/closed_household/lib/pages/closed_household_details.dart index 58f3454ff..503ab35ef 100644 --- a/packages/closed_household/lib/pages/closed_household_details.dart +++ b/packages/closed_household/lib/pages/closed_household_details.dart @@ -1,15 +1,17 @@ import 'package:auto_route/auto_route.dart'; import 'package:closed_household/closed_household.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/digit_sync_dialog.dart'; -import 'package:digit_components/widgets/atoms/text_block.dart'; +import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/utils/component_utils.dart'; +import 'package:digit_ui_components/widgets/atoms/text_chunk.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../router/closed_household_router.gm.dart'; -import '../utils/utils.dart'; import '../widgets/back_navigation_help_header.dart'; import '../widgets/localized.dart'; @@ -40,10 +42,10 @@ class ClosedHouseholdDetailsPageState WidgetsBinding.instance.addPostFrameCallback((_) { // Show the dialog after the first frame is built - DigitComponentsUtils().showLocationCapturingDialog( + DigitComponentsUtils.showDialog( context, localizations.translate(i18.common.locationCapturing), - DigitSyncDialogType.inProgress, + DialogType.inProgress, ); }); super.initState(); @@ -62,7 +64,7 @@ class ClosedHouseholdDetailsPageState if (locationState.accuracy != null) { //Hide the dialog after 1 seconds Future.delayed(const Duration(seconds: 1), () { - DigitComponentsUtils().hideDialog(context); + DigitComponentsUtils.hideDialog(context); }); } final lat = locationState.latitude; @@ -93,12 +95,21 @@ class ClosedHouseholdDetailsPageState ], ), footer: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: BlocBuilder( + padding: EdgeInsets.all(theme.spacerTheme.spacer2), + children: [ + BlocBuilder( builder: (context, locationState) { - return DigitElevatedButton( + return Button( + size: ButtonSize.large, + type: ButtonType.primary, + mainAxisSize: MainAxisSize.max, onPressed: () { + if(!form.valid && form + .control( + _householdHeadNameKey,) + .value.length>0) { + return; + } final String? householdHeadName = form .control(_householdHeadNameKey) .value as String?; @@ -117,62 +128,113 @@ class ClosedHouseholdDetailsPageState context.router.push(ClosedHouseholdSummaryRoute()); }, - child: Center( - child: Text( - localizations.translate( + label: localizations.translate( i18.common.coreCommonNext, - ), - ), ), ); }, - ), + ),] ), slivers: [ SliverToBoxAdapter( child: DigitCard( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - TextBlock( - heading: localizations.translate( - i18.closeHousehold.closeHouseHoldDetailLabel, - ), - headingStyle: theme.textTheme.displayMedium, - body: localizations.translate( - i18.closeHousehold.closeHouseHoldDetailDescLabel, - ), + children: [ + TextChunk( + heading: localizations.translate( + i18.closeHousehold.closeHouseHoldDetailLabel, ), - Column(children: [ - DigitTextFormField( - formControlName: _administrationAreaKey, - label: localizations.translate( - i18.closeHousehold.villageName, - ), - readOnly: true, - ), - DigitTextFormField( - readOnly: true, - formControlName: _accuracyKey, - label: localizations.translate( - i18.closeHousehold.accuracyLabel, - ), - ), - DigitTextFormField( - formControlName: _householdHeadNameKey, - label: localizations.translate( - i18.closeHousehold.headNameLabel, - ), + headingStyle: theme.textTheme.displayMedium, + body: localizations.translate( + i18.closeHousehold.closeHouseHoldDetailDescLabel, + ), + ), + DigitCard(children: [ + ReactiveWrapperField( + formControlName: + _administrationAreaKey, + showErrors: (control) => + control.invalid && + control.touched, + // Ensures error is shown if invalid and touched + builder: (field) { + return LabeledField( + label: localizations.translate( + i18.closeHousehold.villageName, + ), + child: DigitTextFormInput( + errorMessage: field.errorText, + readOnly: true, + initialValue: form + .control( + _administrationAreaKey) + .value, + ), + ); + }), + ReactiveWrapperField( + formControlName: + _accuracyKey, + showErrors: (control) => + control.invalid && + control.touched, + // Ensures error is shown if invalid and touched + builder: (field) { + return LabeledField( + label: localizations.translate( + i18.closeHousehold.accuracyLabel, + ), + child: DigitTextFormInput( + errorMessage: field.errorText, + readOnly: true, + initialValue: (form + .control( + _accuracyKey,) + .value).toString(), + ), + ); + }), + ReactiveWrapperField( validationMessages: { - 'maxLength': (object) => localizations + 'maxLength': (_) => localizations .translate(i18.common.maxCharsRequired) .replaceAll('{}', maxLength.toString()), + 'minLength': (_) => localizations + .translate(i18.common.min2CharsRequired) + .replaceAll('{}', '2'), }, - ), - ]), - ], - ), + formControlName: + _householdHeadNameKey, + showErrors: (control) => + control.invalid && + control.touched && control.value != '', + // Ensures error is shown if invalid and touched + builder: (field) { + return LabeledField( + label: localizations.translate( + i18.closeHousehold.headNameLabel, + ), + child: DigitTextFormInput( + maxLength: 64, + charCount: true, + onChange: (val) => { + form + .control( + _householdHeadNameKey,) + .markAsTouched(), + form + .control( + _householdHeadNameKey,) + .value = val, + }, + errorMessage: field.errorText, + initialValue: form + .control( + _householdHeadNameKey,) + .value, + ), + ); + }), + ]),] ), ), ], @@ -193,8 +255,8 @@ class ClosedHouseholdDetailsPageState _householdHeadNameKey: FormControl( value: null, validators: [ - CustomValidator.requiredMin, Validators.maxLength(200), + Validators.minLength(2), ], ), _latKey: FormControl(validators: []), diff --git a/packages/closed_household/lib/pages/closed_household_summary.dart b/packages/closed_household/lib/pages/closed_household_summary.dart index 826af79f4..5138de570 100644 --- a/packages/closed_household/lib/pages/closed_household_summary.dart +++ b/packages/closed_household/lib/pages/closed_household_summary.dart @@ -1,11 +1,13 @@ import 'package:auto_route/auto_route.dart'; import 'package:closed_household/blocs/closed_household.dart'; import 'package:closed_household/router/closed_household_router.gm.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/utils/date_utils.dart'; -import 'package:digit_components/widgets/atoms/details_card.dart'; import 'package:digit_scanner/blocs/scanner.dart'; import 'package:digit_scanner/pages/qr_scanner.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/utils/date_utils.dart'; +import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -43,6 +45,8 @@ class ClosedHouseholdSummaryPageState @override Widget build(BuildContext context) { + final theme = Theme.of(context); + return BlocBuilder( builder: (context, householdState) { return Scaffold( @@ -53,20 +57,19 @@ class ClosedHouseholdSummaryPageState showcaseButton: ShowcaseButton(), ), footer: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), + // margin: EdgeInsets.fromLTRB(0, theme.spacerTheme.spacer2, 0, 0), padding: - const EdgeInsets.fromLTRB(kPadding, kPadding, kPadding, 0), - child: BlocBuilder( + EdgeInsets.all(theme.spacerTheme.spacer2), + children: [ + BlocBuilder( builder: (context, scannerState) { return Column( mainAxisSize: MainAxisSize.min, children: [ - DigitOutlineIconButton( - buttonStyle: OutlinedButton.styleFrom( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.zero, - ), - ), + Button( + size: ButtonSize.large, + type: ButtonType.secondary, + mainAxisSize: MainAxisSize.max, onPressed: () { Navigator.of(context).push( // [TODO: Add the route to auto_route] @@ -81,11 +84,17 @@ class ClosedHouseholdSummaryPageState ), ); }, - icon: Icons.qr_code, + prefixIcon: Icons.qr_code, label: localizations.translate(i18 .closeHousehold.closeHouseholdVoucherScannerLabel), ), - DigitElevatedButton( + SizedBox( + height: theme.spacerTheme.spacer3, + ), + Button( + size: ButtonSize.large, + type: ButtonType.primary, + mainAxisSize: MainAxisSize.max, onPressed: () { context.read().add( ClosedHouseholdEvent.handleSubmit( @@ -104,23 +113,21 @@ class ClosedHouseholdSummaryPageState context.router .push(ClosedHouseholdAcknowledgementRoute()); }, - child: Center( - child: Text( - localizations + label: localizations .translate(i18.common.coreCommonSubmit), - ), - ), ), ], ); - }), + }),] ), slivers: [ SliverToBoxAdapter( child: Column( children: [ DigitCard( - child: LabelValueList( + children: [ + LabelValueList( + labelFlex: theme.spacerTheme.spacer2.toInt(), heading: localizations.translate( i18.closeHousehold.closeHouseholdSummaryLabel), withDivider: false, @@ -157,12 +164,14 @@ class ClosedHouseholdSummaryPageState .translate(i18.common.coreCommonNA), ), ]), + ] ), BlocBuilder( builder: (context, state) { if (state.qrCodes.isNotEmpty) { return DigitCard( - child: LabelValueList( + children: [LabelValueList( + labelFlex: theme.spacerTheme.spacer2.toInt(), heading: localizations.translate(i18.closeHousehold .closeHouseholdVoucherSummaryLabel), withDivider: false, @@ -173,7 +182,7 @@ class ClosedHouseholdSummaryPageState value: state.qrCodes.first, ), ], - ), + ),] ); } else { return const SizedBox(); diff --git a/packages/closed_household/lib/pages/closed_household_wrapper.dart b/packages/closed_household/lib/pages/closed_household_wrapper.dart index 3bcab0b3b..3f1e994e4 100644 --- a/packages/closed_household/lib/pages/closed_household_wrapper.dart +++ b/packages/closed_household/lib/pages/closed_household_wrapper.dart @@ -3,7 +3,9 @@ import 'package:closed_household/blocs/closed_household.dart'; import 'package:closed_household/closed_household.dart'; import 'package:closed_household/utils/extensions/extensions.dart'; import 'package:digit_data_model/models/entities/individual.dart'; +import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; import 'package:flutter/material.dart'; +import 'package:location/location.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:registration_delivery/models/entities/household.dart'; import 'package:registration_delivery/models/entities/household_member.dart'; @@ -20,6 +22,13 @@ class ClosedHouseholdWrapperPage extends StatelessWidget { Widget build(BuildContext context) { return MultiBlocProvider( providers: [ + BlocProvider( + create: (_) { + return LocationBloc(location: Location()) + ..add(const LoadLocationEvent()); + }, + lazy: false, + ), BlocProvider( create: (_) { return ClosedHouseholdBloc( diff --git a/packages/closed_household/lib/widgets/back_navigation_help_header.dart b/packages/closed_household/lib/widgets/back_navigation_help_header.dart index 251c8e6a3..5259147dc 100644 --- a/packages/closed_household/lib/widgets/back_navigation_help_header.dart +++ b/packages/closed_household/lib/widgets/back_navigation_help_header.dart @@ -1,7 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:closed_household/blocs/app_localization.dart'; import 'package:closed_household/widgets/showcase/showcase_button.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:flutter/material.dart'; import '../../utils/i18_key_constants.dart' as i18; @@ -29,7 +29,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { final theme = Theme.of(context); return Padding( - padding: const EdgeInsets.all(kPadding / 2), + padding: EdgeInsets.all( theme.spacerTheme.spacer2/ 2), child: Row( children: [ Expanded( @@ -58,7 +58,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { ], ), ), - SizedBox(width: showHelp ? kPadding * 2 : 0), + SizedBox(width: showHelp ? theme.spacerTheme.spacer2 * 2 : 0), if (showHelp) TextButton( style: TextButton.styleFrom(padding: EdgeInsets.zero), diff --git a/packages/closed_household/lib/widgets/showcase/showcase_button.dart b/packages/closed_household/lib/widgets/showcase/showcase_button.dart index 9e7b1f968..990367372 100644 --- a/packages/closed_household/lib/widgets/showcase/showcase_button.dart +++ b/packages/closed_household/lib/widgets/showcase/showcase_button.dart @@ -1,8 +1,8 @@ import 'package:auto_route/auto_route.dart'; import 'package:closed_household/blocs/app_localization.dart'; import 'package:closed_household/router/closed_household_router.gm.dart'; -import 'package:digit_components/theme/digit_theme.dart'; import 'package:digit_showcase/showcase_widget.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:flutter/material.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../localized.dart'; @@ -20,6 +20,8 @@ class ShowcaseButton extends LocalizedStatefulWidget { class _ShowcaseButtonState extends LocalizedState { @override Widget build(BuildContext context) { + final theme = Theme.of(context); + return TextButton( style: TextButton.styleFrom(padding: EdgeInsets.zero), onPressed: () { @@ -42,11 +44,11 @@ class _ShowcaseButtonState extends LocalizedState { child: Row( children: [ Padding( - padding: const EdgeInsets.fromLTRB( - kPadding, - kPadding, - kPadding / 2, - kPadding, + padding: EdgeInsets.fromLTRB( + theme.spacerTheme.spacer2, + theme.spacerTheme.spacer2, + theme.spacerTheme.spacer2 / 2, + theme.spacerTheme.spacer2, ), child: Text( ClosedHouseholdLocalization.of(context) diff --git a/packages/closed_household/lib/widgets/showcase/showcase_wrappers.dart b/packages/closed_household/lib/widgets/showcase/showcase_wrappers.dart index a2ac9e398..b4e19d8b5 100644 --- a/packages/closed_household/lib/widgets/showcase/showcase_wrappers.dart +++ b/packages/closed_household/lib/widgets/showcase/showcase_wrappers.dart @@ -1,10 +1,9 @@ import 'package:digit_showcase/showcase.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:flutter/material.dart'; import '../localized.dart'; -const kPadding = 8.0; - class ShowcaseItemBuilder { final GlobalKey showcaseKey; final String messageLocalizationKey; @@ -40,23 +39,25 @@ class _ShowcaseItemWrapperWidgetState extends LocalizedState { @override Widget build(BuildContext context) { + final theme = Theme.of(context); + return Showcase( key: widget.showcaseKey, disableMovingAnimation: true, disableScaleAnimation: true, description: localizations.translate(widget.messageLocalizationKey), - targetPadding: const EdgeInsets.fromLTRB( - kPadding / 2, - kPadding / 2, - kPadding / 2, - kPadding / 2, + targetPadding: EdgeInsets.fromLTRB( + theme.spacerTheme.spacer2 / 2, + theme.spacerTheme.spacer2 / 2, + theme.spacerTheme.spacer2 / 2, + theme.spacerTheme.spacer2 / 2, ), child: Container( - padding: const EdgeInsets.fromLTRB( - kPadding / 2, - kPadding / 2, - kPadding / 2, - kPadding / 2, + padding: EdgeInsets.fromLTRB( + theme.spacerTheme.spacer2 / 2, + theme.spacerTheme.spacer2 / 2, + theme.spacerTheme.spacer2 / 2, + theme.spacerTheme.spacer2 / 2, ), child: widget.child, ), diff --git a/packages/closed_household/pubspec.yaml b/packages/closed_household/pubspec.yaml index 6dccba824..328e094e3 100644 --- a/packages/closed_household/pubspec.yaml +++ b/packages/closed_household/pubspec.yaml @@ -12,6 +12,7 @@ dependencies: flutter: sdk: flutter digit_components: ^1.0.1+1 + digit_ui_components: 0.0.3-beta flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 @@ -41,13 +42,13 @@ dependencies: async: ^2.11.0 formula_parser: ^2.0.1 registration_delivery: ^1.0.3+1 + location: ^5.0.0 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^3.0.1 - dart_code_metrics: ^5.7.6 freezed: ^2.1.0+1 json_serializable: ^6.4.0 drift_dev: ^2.14.1 @@ -63,4 +64,5 @@ dev_dependencies: flutter: assets: - assets/images/ - - assets/icons/svg/ \ No newline at end of file + - assets/icons/svg/ + - assets/animated_json/ \ No newline at end of file diff --git a/packages/digit_components/example/pubspec.lock b/packages/digit_components/example/pubspec.lock index 5f036b9d0..e894ada52 100644 --- a/packages/digit_components/example/pubspec.lock +++ b/packages/digit_components/example/pubspec.lock @@ -519,6 +519,30 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -571,26 +595,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -659,10 +683,10 @@ packages: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_provider: dependency: transitive description: @@ -920,26 +944,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" timing: dependency: transitive description: @@ -968,10 +992,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1037,5 +1061,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.3.0 <3.9.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/digit_components/pubspec.lock b/packages/digit_components/pubspec.lock index 7c84c45c4..328678755 100644 --- a/packages/digit_components/pubspec.lock +++ b/packages/digit_components/pubspec.lock @@ -17,6 +17,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.2.0" + ansicolor: + dependency: transitive + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + url: "https://pub.dev" + source: hosted + version: "2.0.3" archive: dependency: transitive description: @@ -201,6 +209,21 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" + dart_mappable: + dependency: transitive + description: + name: dart_mappable + sha256: "47269caf2060533c29b823ff7fa9706502355ffcb61e7f2a374e3a0fb2f2c3f0" + url: "https://pub.dev" + source: hosted + version: "4.2.2" + dart_mappable_builder: + dependency: "direct overridden" + description: + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.0" dart_style: dependency: transitive description: @@ -488,6 +511,30 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -540,26 +587,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -628,10 +675,10 @@ packages: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_provider: dependency: transitive description: @@ -881,26 +928,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" timing: dependency: transitive description: @@ -909,6 +956,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + type_plus: + dependency: transitive + description: + name: type_plus + sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 + url: "https://pub.dev" + source: hosted + version: "2.1.1" typed_data: dependency: transitive description: @@ -929,10 +984,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -990,5 +1045,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.3.0 <3.9.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/digit_data_model/pubspec.lock b/packages/digit_data_model/pubspec.lock index a2f7c5b49..ba44496e5 100644 --- a/packages/digit_data_model/pubspec.lock +++ b/packages/digit_data_model/pubspec.lock @@ -252,11 +252,9 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "145091c3b5f05ccea22ec7520f5b9f4e50ff6106" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git + path: "../dart_mappable_builder" + relative: true + source: path version: "4.2.0" dart_style: dependency: transitive @@ -508,6 +506,30 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -528,26 +550,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -592,10 +614,10 @@ packages: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_provider: dependency: "direct main" description: @@ -869,26 +891,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" time: dependency: transitive description: @@ -941,10 +963,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -953,14 +975,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" - web: - dependency: transitive - description: - name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 - url: "https://pub.dev" - source: hosted - version: "0.3.0" web_socket_channel: dependency: transitive description: @@ -1018,5 +1032,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <4.0.0" - flutter: ">=3.16.0" + dart: ">=3.3.0 <4.0.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/digit_firebase_services/pubspec.lock b/packages/digit_firebase_services/pubspec.lock index 20c7bd06b..f254bf339 100644 --- a/packages/digit_firebase_services/pubspec.lock +++ b/packages/digit_firebase_services/pubspec.lock @@ -1,6 +1,14 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" + url: "https://pub.dev" + source: hosted + version: "67.0.0" _flutterfire_internals: dependency: transitive description: @@ -9,6 +17,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.25" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" + url: "https://pub.dev" + source: hosted + version: "6.4.1" + ansicolor: + dependency: transitive + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + url: "https://pub.dev" + source: hosted + version: "2.0.3" + args: + dependency: transitive + description: + name: args + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" + url: "https://pub.dev" + source: hosted + version: "2.5.0" async: dependency: transitive description: @@ -25,6 +57,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + build: + dependency: transitive + description: + name: build + sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" + url: "https://pub.dev" + source: hosted + version: "2.4.1" characters: dependency: transitive description: @@ -49,6 +89,45 @@ packages: url: "https://pub.dev" source: hosted version: "1.18.0" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + crypto: + dependency: transitive + description: + name: crypto + sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27 + url: "https://pub.dev" + source: hosted + version: "3.0.5" + dart_mappable: + dependency: transitive + description: + name: dart_mappable + sha256: "47269caf2060533c29b823ff7fa9706502355ffcb61e7f2a374e3a0fb2f2c3f0" + url: "https://pub.dev" + source: hosted + version: "4.2.2" + dart_mappable_builder: + dependency: "direct overridden" + description: + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.0" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" + url: "https://pub.dev" + source: hosted + version: "2.3.6" fake_async: dependency: transitive description: @@ -57,6 +136,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.1" + file: + dependency: transitive + description: + name: file + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + url: "https://pub.dev" + source: hosted + version: "7.0.0" firebase_core: dependency: "direct main" description: @@ -120,6 +207,14 @@ packages: description: flutter source: sdk version: "0.0.0" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" js: dependency: transitive description: @@ -128,6 +223,30 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.7" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -136,38 +255,54 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + logging: + dependency: transitive + description: + name: logging + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + url: "https://pub.dev" + source: hosted + version: "1.2.0" matcher: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" path: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" plugin_platform_interface: dependency: transitive description: @@ -176,11 +311,27 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + url: "https://pub.dev" + source: hosted + version: "2.1.4" sky_engine: dependency: transitive description: flutter source: sdk version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" + url: "https://pub.dev" + source: hosted + version: "1.5.0" source_span: dependency: transitive description: @@ -225,10 +376,26 @@ packages: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + url: "https://pub.dev" + source: hosted + version: "0.7.0" + type_plus: + dependency: transitive + description: + name: type_plus + sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 + url: "https://pub.dev" + source: hosted + version: "2.1.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "1.3.2" vector_math: dependency: transitive description: @@ -237,6 +404,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + url: "https://pub.dev" + source: hosted + version: "14.2.1" + watcher: + dependency: transitive + description: + name: watcher + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" web: dependency: transitive description: @@ -245,6 +428,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.3.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" sdks: - dart: ">=3.2.0 <4.0.0" - flutter: ">=3.3.0" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/digit_scanner/example/pubspec.lock b/packages/digit_scanner/example/pubspec.lock index 600e45214..5032afc21 100644 --- a/packages/digit_scanner/example/pubspec.lock +++ b/packages/digit_scanner/example/pubspec.lock @@ -615,6 +615,30 @@ packages: url: "https://pub.dev" source: hosted version: "4.9.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -667,26 +691,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -739,10 +763,10 @@ packages: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_parsing: dependency: transitive description: @@ -976,10 +1000,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" timing: dependency: transitive description: @@ -1036,6 +1060,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + url: "https://pub.dev" + source: hosted + version: "14.2.1" watcher: dependency: transitive description: @@ -1093,5 +1125,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.3 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.3.0 <3.9.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/digit_scanner/pubspec.lock b/packages/digit_scanner/pubspec.lock index 465d76a5f..0447062df 100644 --- a/packages/digit_scanner/pubspec.lock +++ b/packages/digit_scanner/pubspec.lock @@ -321,14 +321,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_mappable: - dependency: transitive - description: - name: dart_mappable - sha256: "47269caf2060533c29b823ff7fa9706502355ffcb61e7f2a374e3a0fb2f2c3f0" - url: "https://pub.dev" - source: hosted - version: "4.2.2" dart_style: dependency: transitive description: @@ -337,14 +329,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.6" - db_viewer: - dependency: transitive - description: - name: db_viewer - sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" - url: "https://pub.dev" - source: hosted - version: "1.1.0" diff_match_patch: dependency: transitive description: @@ -356,49 +340,11 @@ packages: digit_components: dependency: "direct main" description: - path: "../digit_components" - relative: true - source: path - version: "1.0.1+1" - digit_data_model: - dependency: "direct overridden" - description: - path: "../digit_data_model" - relative: true - source: path - version: "1.0.3+1" - dio: - dependency: transitive - description: - name: dio - sha256: "0dfb6b6a1979dac1c1245e17cef824d7b452ea29bd33d3467269f9bef3715fb0" - url: "https://pub.dev" - source: hosted - version: "5.6.0" - dio_web_adapter: - dependency: transitive - description: - name: dio_web_adapter - sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - drift: - dependency: transitive - description: - name: drift - sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + name: digit_components + sha256: "9cca4d9a546037080afe02b6ade82fdf01574e11f5656ad12120fd6966578616" url: "https://pub.dev" source: hosted - version: "2.15.0" - drift_db_viewer: - dependency: transitive - description: - name: drift_db_viewer - sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" + version: "1.0.1+1" easy_stepper: dependency: transitive description: @@ -686,22 +632,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" - isar: - dependency: transitive - description: - name: isar - sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - isar_flutter_libs: - dependency: transitive - description: - name: isar_flutter_libs - sha256: bc6768cc4b9c61aabff77152e7f33b4b17d2fc93134f7af1c3dd51500fe8d5e8 - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" js: dependency: transitive description: @@ -726,6 +656,30 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -778,26 +732,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -866,10 +820,10 @@ packages: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_parsing: dependency: transitive description: @@ -1006,14 +960,6 @@ packages: url: "https://pub.dev" source: hosted version: "14.3.0" - recase: - dependency: transitive - description: - name: recase - sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 - url: "https://pub.dev" - source: hosted - version: "4.1.0" remove_emoji_input_formatter: dependency: transitive description: @@ -1099,22 +1045,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" - sqlite3: - dependency: transitive - description: - name: sqlite3 - sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" - url: "https://pub.dev" - source: hosted - version: "2.4.0" - sqlite3_flutter_libs: - dependency: transitive - description: - name: sqlite3_flutter_libs - sha256: "62bbb4073edbcdf53f40c80775f33eea01d301b7b81417e5b3fb7395416258c1" - url: "https://pub.dev" - source: hosted - version: "0.5.24" stack_trace: dependency: transitive description: @@ -1167,26 +1097,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" timing: dependency: transitive description: @@ -1195,14 +1125,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" - type_plus: - dependency: transitive - description: - name: type_plus - sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 - url: "https://pub.dev" - source: hosted - version: "2.1.1" typed_data: dependency: transitive description: @@ -1255,10 +1177,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1324,5 +1246,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.3.0 <3.9.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/forms_engine/pubspec.lock b/packages/forms_engine/pubspec.lock index 1fbd7a910..a52776731 100644 --- a/packages/forms_engine/pubspec.lock +++ b/packages/forms_engine/pubspec.lock @@ -504,6 +504,30 @@ packages: url: "https://pub.dev" source: hosted version: "6.7.1" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -556,26 +580,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -644,10 +668,10 @@ packages: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_provider: dependency: transitive description: @@ -905,26 +929,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" timing: dependency: transitive description: @@ -953,10 +977,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1014,5 +1038,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.3.0 <3.9.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index 8135fff11..18ff6dab0 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -388,11 +388,9 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "9b887d24c05459c027a92391869d4c10b440e00f" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git + path: "../dart_mappable_builder" + relative: true + source: path version: "4.2.0" dart_style: dependency: transitive @@ -809,6 +807,30 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -861,26 +883,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -949,10 +971,10 @@ packages: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_parsing: dependency: transitive description: @@ -1290,26 +1312,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" timing: dependency: transitive description: @@ -1378,10 +1400,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1447,5 +1469,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.3.0 <3.9.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index 60830a342..27892bc2f 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -388,11 +388,9 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "9b887d24c05459c027a92391869d4c10b440e00f" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git + path: "../dart_mappable_builder" + relative: true + source: path version: "4.2.0" dart_style: dependency: transitive @@ -817,6 +815,30 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -869,26 +891,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -957,10 +979,10 @@ packages: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_parsing: dependency: transitive description: @@ -1298,26 +1320,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" timing: dependency: transitive description: @@ -1386,10 +1408,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1455,5 +1477,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.3.0 <3.9.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 95488a9b0..26a4e414f 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -388,11 +388,9 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "9b887d24c05459c027a92391869d4c10b440e00f" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git + path: "../dart_mappable_builder" + relative: true + source: path version: "4.2.0" dart_style: dependency: transitive @@ -833,6 +831,30 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -885,26 +907,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -973,10 +995,10 @@ packages: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_parsing: dependency: transitive description: @@ -1314,26 +1336,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" timing: dependency: transitive description: @@ -1402,10 +1424,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1471,5 +1493,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.3.0 <3.9.0" + flutter: ">=3.18.0-18.0.pre.54" From af196dc903e94389d8e1727e451a40e0f5ee03c7 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Fri, 13 Sep 2024 12:28:07 +0530 Subject: [PATCH 109/241] added assets for the acknowledgement page --- .../assets/animated_json/alert.json | 1127 +++++++++++++++++ .../assets/animated_json/error.json | 728 +++++++++++ .../assets/animated_json/success.json | 917 ++++++++++++++ .../assets/animated_json/alert.json | 1127 +++++++++++++++++ .../assets/animated_json/error.json | 728 +++++++++++ .../assets/animated_json/success.json | 917 ++++++++++++++ 6 files changed, 5544 insertions(+) create mode 100644 apps/health_campaign_field_worker_app/assets/animated_json/alert.json create mode 100644 apps/health_campaign_field_worker_app/assets/animated_json/error.json create mode 100644 apps/health_campaign_field_worker_app/assets/animated_json/success.json create mode 100644 packages/closed_household/assets/animated_json/alert.json create mode 100644 packages/closed_household/assets/animated_json/error.json create mode 100644 packages/closed_household/assets/animated_json/success.json diff --git a/apps/health_campaign_field_worker_app/assets/animated_json/alert.json b/apps/health_campaign_field_worker_app/assets/animated_json/alert.json new file mode 100644 index 000000000..171b416cd --- /dev/null +++ b/apps/health_campaign_field_worker_app/assets/animated_json/alert.json @@ -0,0 +1,1127 @@ +{ + "nm": "48 - Warning", + "ddd": 0, + "h": 500, + "w": 500, + "meta": { + "g": "LottieFiles AE " + }, + "layers": [ + { + "ty": 3, + "nm": "48 - Warning", + "sr": 1, + "st": 0, + "op": 144, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 60, + 60, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 180, + 180, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 250.045, + 290.339, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 0, + "ix": 11 + } + }, + "ef": [], + "ind": 1 + }, + { + "ty": 4, + "nm": "Line", + "sr": 1, + "st": 0, + "op": 144, + "ip": 12, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + -1, + 21.25, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 12 + }, + { + "s": [ + 55.556, + 55.556, + 100 + ], + "t": 32 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 85.533, + 85.887, + 0 + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 180 + ], + "t": 12 + }, + { + "s": [ + 0 + ], + "t": 32 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Shape 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1, + 80 + ], + [ + -1, + -37.5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 2, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 28, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 100, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 0 + ], + "t": 22 + }, + { + "s": [ + 40 + ], + "t": 42 + } + ], + "ix": 1 + }, + "m": 1 + } + ], + "ind": 2, + "parent": 5 + }, + { + "ty": 4, + "nm": "Dot", + "sr": 1, + "st": 0, + "op": 144, + "ip": 12, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Shape 1", + "ix": 1, + "cix": 2, + "np": 4, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1, + 80 + ], + [ + -1, + -37.5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 0.1, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 0, + "k": 0, + "ix": 1 + }, + "m": 1 + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 2, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 33, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 3, + "parent": 2 + }, + { + "ty": 4, + "nm": "Tri Outlines", + "sr": 1, + "st": 0, + "op": 144, + "ip": 10, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 85.513, + 72.848, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 10 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 15 + } + ], + "ix": 6, + "x": "var $bm_rt;\nvar amp, freq, decay, n, t, v;\ntry {\n amp = $bm_div(effect('Scale - Overshoot')('ADBE Slider Control-0001'), 2.5), freq = $bm_div(effect('Scale - Bounce')('ADBE Slider Control-0001'), 20), decay = $bm_div(effect('Scale - Friction')('ADBE Slider Control-0001'), 20), n = 0, 0 < numKeys && (n = nearestKey(time).index, key(n).time > time && n--), t = 0 === n ? 0 : $bm_sub(time, key(n).time), $bm_rt = 0 < n ? (v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10))), $bm_sum(value, $bm_div($bm_mul($bm_mul($bm_div(v, 100), amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))))) : value;\n} catch (e$$4) {\n $bm_rt = value = value;\n}" + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 59.955, + 37.467, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [ + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Overshoot", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 10, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Bounce", + "ix": 2, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 35, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Friction", + "ix": 3, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 65, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + } + ], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Group 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + -3.315, + 5.634 + ], + [ + 0, + 0 + ], + [ + -3.267, + -5.554 + ], + [ + 0, + 0 + ], + [ + 6.537, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 3.268, + -5.554 + ], + [ + 0, + 0 + ], + [ + 3.315, + 5.634 + ], + [ + 0, + 0 + ], + [ + -6.536, + 0 + ] + ], + "v": [ + [ + -81.948, + 59.861 + ], + [ + -7.284, + -67.044 + ], + [ + 7.284, + -67.044 + ], + [ + 81.948, + 59.861 + ], + [ + 74.664, + 72.598 + ], + [ + -74.664, + 72.598 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 0.7255, + 0.098, + 0 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 85.513, + 72.848 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 4, + "parent": 1 + }, + { + "ty": 3, + "nm": "Tri", + "sr": 1, + "st": 0, + "op": 144, + "ip": 10, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 85.513, + 72.848, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 10 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 15 + } + ], + "ix": 6, + "x": "var $bm_rt;\nvar amp, freq, decay, n, t, v;\ntry {\n amp = $bm_div(effect('Scale - Overshoot')('ADBE Slider Control-0001'), 2.5), freq = $bm_div(effect('Scale - Bounce')('ADBE Slider Control-0001'), 20), decay = $bm_div(effect('Scale - Friction')('ADBE Slider Control-0001'), 20), n = 0, 0 < numKeys && (n = nearestKey(time).index, key(n).time > time && n--), t = 0 === n ? 0 : $bm_sub(time, key(n).time), $bm_rt = 0 < n ? (v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10))), $bm_sum(value, $bm_div($bm_mul($bm_mul($bm_div(v, 100), amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))))) : value;\n} catch (e$$4) {\n $bm_rt = value = value;\n}" + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 59.955, + 37.467, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [ + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Overshoot", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 10, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Bounce", + "ix": 2, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 35, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Friction", + "ix": 3, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 65, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + } + ], + "ind": 5, + "parent": 1 + }, + { + "ty": 1, + "nm": "Plate_white", + "sr": 1, + "st": 0, + "op": 144, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 250, + 250, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 250, + 250, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "sc": "#ffffff", + "sh": 500, + "sw": 500, + "ind": 6 + } + ], + "v": "5.5.7", + "fr": 48, + "op": 144, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/assets/animated_json/error.json b/apps/health_campaign_field_worker_app/assets/animated_json/error.json new file mode 100644 index 000000000..96b4f9626 --- /dev/null +++ b/apps/health_campaign_field_worker_app/assets/animated_json/error.json @@ -0,0 +1,728 @@ +{ + "nm": "ckeck", + "ddd": 0, + "h": 50, + "w": 50, + "meta": { + "g": "@lottiefiles/toolkit-js 0.33.2" + }, + "layers": [ + { + "ty": 4, + "nm": "! Outlines", + "sr": 1, + "st": 0, + "op": 213, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 2, + 12, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.653, + "y": -0.834 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 60 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 73 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.127, + "y": 1.695 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 83 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 90 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 25, + 25, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Group 1", + "ix": 1, + "cix": 2, + "np": 4, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 1.104 + ], + [ + -1.104, + 0 + ], + [ + 0, + -1.104 + ], + [ + 1.104, + 0 + ] + ], + "o": [ + [ + 0, + -1.104 + ], + [ + 1.104, + 0 + ], + [ + 0, + 1.104 + ], + [ + -1.104, + 0 + ] + ], + "v": [ + [ + -2, + 10 + ], + [ + 0, + 8 + ], + [ + 2, + 10 + ], + [ + 0, + 12 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 2", + "ix": 2, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1.036, + 5 + ], + [ + -2, + -6.625 + ], + [ + -2, + -12 + ], + [ + 2, + -12 + ], + [ + 2, + -6.625 + ], + [ + 1.052, + 5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "mm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Merge", + "nm": "Merge Paths 1", + "mm": 1 + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0.099, + 9.982 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 2.099, + 21.982 + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 10 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 12 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 14 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 16 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 18 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 20 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 22 + }, + { + "s": [ + 0 + ], + "t": 24 + } + ], + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 1 + }, + { + "ty": 4, + "nm": "Shape Layer 1", + "sr": 1, + "st": 0, + "op": 193, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 10, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.41, + "y": -0.602 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 60 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.436, + "y": 1.492 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 83 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 90 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 25, + 35, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Ellipse 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "el", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Ellipse", + "nm": "Ellipse Path 1", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 3 + }, + "s": { + "a": 0, + "k": [ + 40, + 40 + ], + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 2, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 100, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 0, + "k": 0, + "ix": 1 + }, + "m": 1 + } + ], + "ind": 2 + } + ], + "v": "5.6.5", + "fr": 60, + "op": 180, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/assets/animated_json/success.json b/apps/health_campaign_field_worker_app/assets/animated_json/success.json new file mode 100644 index 000000000..43192f708 --- /dev/null +++ b/apps/health_campaign_field_worker_app/assets/animated_json/success.json @@ -0,0 +1,917 @@ +{ + "nm": "sucess", + "ddd": 0, + "h": 120, + "w": 120, + "meta": { + "g": "LottieFiles AE 0.1.21" + }, + "layers": [ + { + "ty": 3, + "nm": "scale up null", + "sr": 1, + "st": 0, + "op": 300.00001221925, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0 + }, + "i": { + "x": 0.833, + "y": 1 + }, + "s": [ + 111, + 111, + 100 + ], + "t": 27 + }, + { + "o": { + "x": 0.167, + "y": 0 + }, + "i": { + "x": 0.833, + "y": 1 + }, + "s": [ + 101, + 101, + 100 + ], + "t": 36 + }, + { + "s": [ + 121, + 121, + 100 + ], + "t": 42.0000017106951 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 60, + 60, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 0, + "ix": 11 + } + }, + "ef": [], + "ind": 1 + }, + { + "ty": 4, + "nm": "spark", + "sr": 1, + "st": 35.0000014255792, + "op": 335.00001364483, + "ip": 35.0000014255792, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0.5, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Rectangle 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 1", + "d": 1, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 0, + -21 + ], + "t": 35, + "ti": [ + 0, + 1.5 + ], + "to": [ + 0, + -1.5 + ] + }, + { + "s": [ + 0, + -30 + ], + "t": 53.0000021587343 + } + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 4 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.976, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 2, + 0 + ], + "t": 35 + }, + { + "o": { + "x": 0.33299999999999996, + "y": 0 + }, + "i": { + "x": 0.15355432054499818, + "y": 0.9999999999999999 + }, + "s": [ + 2, + 8 + ], + "t": 42 + }, + { + "s": [ + 1.633, + 0 + ], + "t": 53.0000021587343 + } + ], + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + -8 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "rp", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Repeater", + "nm": "Repeater 1", + "ix": 2, + "m": 1, + "c": { + "a": 0, + "k": 8, + "ix": 1 + }, + "o": { + "a": 0, + "k": 0, + "ix": 2 + }, + "tr": { + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 45, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0 + }, + "so": { + "a": 0, + "k": 100, + "ix": 5 + }, + "eo": { + "a": 0, + "k": 100, + "ix": 6 + } + } + } + ], + "ind": 2, + "parent": 1 + }, + { + "ty": 4, + "nm": "check", + "sr": 1, + "st": 10.0000004073083, + "op": 310.000012626559, + "ip": 22.0000008960784, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 3.5, + 3.75 + ], + [ + -12.973, + 5.349 + ], + [ + -6.124, + -9.992 + ], + [ + 12.125, + -7.431 + ], + [ + 7.431, + 12.125 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -3.5, + -3.75 + ], + [ + 10.764, + -2.941 + ], + [ + 7.431, + 12.125 + ], + [ + -12.125, + 7.431 + ], + [ + -7.431, + -12.125 + ] + ], + "v": [ + [ + 15.25, + -9.688 + ], + [ + -5.75, + 10.062 + ], + [ + -16, + 0.25 + ], + [ + -6.777, + -24.849 + ], + [ + 21.955, + -13.456 + ], + [ + 13.456, + 21.955 + ], + [ + -21.955, + 13.456 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 1, + "k": [ + { + "o": { + "x": 0.714, + "y": 0 + }, + "i": { + "x": 0.351, + "y": 1 + }, + "s": [ + 100 + ], + "t": 10 + }, + { + "s": [ + 23 + ], + "t": 40.0000016292334 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.742, + "y": 0 + }, + "i": { + "x": 0.363, + "y": 1 + }, + "s": [ + 100 + ], + "t": 17 + }, + { + "s": [ + 0 + ], + "t": 45.0000018328876 + } + ], + "ix": 1 + }, + "m": 1 + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 4, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 3 + } + } + ], + "ind": 3, + "parent": 1 + }, + { + "ty": 4, + "nm": "circle", + "sr": 1, + "st": 0, + "op": 300.00001221925, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + -14.221, + 0 + ], + [ + 0, + -14.221 + ], + [ + 14.221, + 0 + ], + [ + 0, + 14.221 + ] + ], + "o": [ + [ + 14.221, + 0 + ], + [ + 0, + 14.221 + ], + [ + -14.221, + 0 + ], + [ + 0, + -14.221 + ] + ], + "v": [ + [ + 0, + -25.75 + ], + [ + 25.75, + 0 + ], + [ + 0, + 25.75 + ], + [ + -25.75, + 0 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 2, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 3 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 3, + "e": { + "a": 1, + "k": [ + { + "o": { + "x": 0.714, + "y": 0 + }, + "i": { + "x": 0.351, + "y": 1 + }, + "s": [ + 100 + ], + "t": 0 + }, + { + "s": [ + 100 + ], + "t": 30.0000012219251 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.742, + "y": 0 + }, + "i": { + "x": 0.363, + "y": 1 + }, + "s": [ + 100 + ], + "t": 7 + }, + { + "s": [ + 0 + ], + "t": 33.0000013441176 + } + ], + "ix": 1 + }, + "m": 1 + } + ], + "ind": 4, + "parent": 1 + } + ], + "v": "5.5.7", + "fr": 29.9700012207031, + "op": 60.0000024438501, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/packages/closed_household/assets/animated_json/alert.json b/packages/closed_household/assets/animated_json/alert.json new file mode 100644 index 000000000..171b416cd --- /dev/null +++ b/packages/closed_household/assets/animated_json/alert.json @@ -0,0 +1,1127 @@ +{ + "nm": "48 - Warning", + "ddd": 0, + "h": 500, + "w": 500, + "meta": { + "g": "LottieFiles AE " + }, + "layers": [ + { + "ty": 3, + "nm": "48 - Warning", + "sr": 1, + "st": 0, + "op": 144, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 60, + 60, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 180, + 180, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 250.045, + 290.339, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 0, + "ix": 11 + } + }, + "ef": [], + "ind": 1 + }, + { + "ty": 4, + "nm": "Line", + "sr": 1, + "st": 0, + "op": 144, + "ip": 12, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + -1, + 21.25, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 12 + }, + { + "s": [ + 55.556, + 55.556, + 100 + ], + "t": 32 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 85.533, + 85.887, + 0 + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 180 + ], + "t": 12 + }, + { + "s": [ + 0 + ], + "t": 32 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Shape 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1, + 80 + ], + [ + -1, + -37.5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 2, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 28, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 100, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 0 + ], + "t": 22 + }, + { + "s": [ + 40 + ], + "t": 42 + } + ], + "ix": 1 + }, + "m": 1 + } + ], + "ind": 2, + "parent": 5 + }, + { + "ty": 4, + "nm": "Dot", + "sr": 1, + "st": 0, + "op": 144, + "ip": 12, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Shape 1", + "ix": 1, + "cix": 2, + "np": 4, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1, + 80 + ], + [ + -1, + -37.5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 0.1, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 0, + "k": 0, + "ix": 1 + }, + "m": 1 + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 2, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 33, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 3, + "parent": 2 + }, + { + "ty": 4, + "nm": "Tri Outlines", + "sr": 1, + "st": 0, + "op": 144, + "ip": 10, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 85.513, + 72.848, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 10 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 15 + } + ], + "ix": 6, + "x": "var $bm_rt;\nvar amp, freq, decay, n, t, v;\ntry {\n amp = $bm_div(effect('Scale - Overshoot')('ADBE Slider Control-0001'), 2.5), freq = $bm_div(effect('Scale - Bounce')('ADBE Slider Control-0001'), 20), decay = $bm_div(effect('Scale - Friction')('ADBE Slider Control-0001'), 20), n = 0, 0 < numKeys && (n = nearestKey(time).index, key(n).time > time && n--), t = 0 === n ? 0 : $bm_sub(time, key(n).time), $bm_rt = 0 < n ? (v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10))), $bm_sum(value, $bm_div($bm_mul($bm_mul($bm_div(v, 100), amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))))) : value;\n} catch (e$$4) {\n $bm_rt = value = value;\n}" + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 59.955, + 37.467, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [ + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Overshoot", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 10, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Bounce", + "ix": 2, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 35, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Friction", + "ix": 3, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 65, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + } + ], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Group 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + -3.315, + 5.634 + ], + [ + 0, + 0 + ], + [ + -3.267, + -5.554 + ], + [ + 0, + 0 + ], + [ + 6.537, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 3.268, + -5.554 + ], + [ + 0, + 0 + ], + [ + 3.315, + 5.634 + ], + [ + 0, + 0 + ], + [ + -6.536, + 0 + ] + ], + "v": [ + [ + -81.948, + 59.861 + ], + [ + -7.284, + -67.044 + ], + [ + 7.284, + -67.044 + ], + [ + 81.948, + 59.861 + ], + [ + 74.664, + 72.598 + ], + [ + -74.664, + 72.598 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 0.7255, + 0.098, + 0 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 85.513, + 72.848 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 4, + "parent": 1 + }, + { + "ty": 3, + "nm": "Tri", + "sr": 1, + "st": 0, + "op": 144, + "ip": 10, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 85.513, + 72.848, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 10 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 15 + } + ], + "ix": 6, + "x": "var $bm_rt;\nvar amp, freq, decay, n, t, v;\ntry {\n amp = $bm_div(effect('Scale - Overshoot')('ADBE Slider Control-0001'), 2.5), freq = $bm_div(effect('Scale - Bounce')('ADBE Slider Control-0001'), 20), decay = $bm_div(effect('Scale - Friction')('ADBE Slider Control-0001'), 20), n = 0, 0 < numKeys && (n = nearestKey(time).index, key(n).time > time && n--), t = 0 === n ? 0 : $bm_sub(time, key(n).time), $bm_rt = 0 < n ? (v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10))), $bm_sum(value, $bm_div($bm_mul($bm_mul($bm_div(v, 100), amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))))) : value;\n} catch (e$$4) {\n $bm_rt = value = value;\n}" + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 59.955, + 37.467, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [ + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Overshoot", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 10, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Bounce", + "ix": 2, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 35, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Friction", + "ix": 3, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 65, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + } + ], + "ind": 5, + "parent": 1 + }, + { + "ty": 1, + "nm": "Plate_white", + "sr": 1, + "st": 0, + "op": 144, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 250, + 250, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 250, + 250, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "sc": "#ffffff", + "sh": 500, + "sw": 500, + "ind": 6 + } + ], + "v": "5.5.7", + "fr": 48, + "op": 144, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/packages/closed_household/assets/animated_json/error.json b/packages/closed_household/assets/animated_json/error.json new file mode 100644 index 000000000..96b4f9626 --- /dev/null +++ b/packages/closed_household/assets/animated_json/error.json @@ -0,0 +1,728 @@ +{ + "nm": "ckeck", + "ddd": 0, + "h": 50, + "w": 50, + "meta": { + "g": "@lottiefiles/toolkit-js 0.33.2" + }, + "layers": [ + { + "ty": 4, + "nm": "! Outlines", + "sr": 1, + "st": 0, + "op": 213, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 2, + 12, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.653, + "y": -0.834 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 60 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 73 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.127, + "y": 1.695 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 83 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 90 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 25, + 25, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Group 1", + "ix": 1, + "cix": 2, + "np": 4, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 1.104 + ], + [ + -1.104, + 0 + ], + [ + 0, + -1.104 + ], + [ + 1.104, + 0 + ] + ], + "o": [ + [ + 0, + -1.104 + ], + [ + 1.104, + 0 + ], + [ + 0, + 1.104 + ], + [ + -1.104, + 0 + ] + ], + "v": [ + [ + -2, + 10 + ], + [ + 0, + 8 + ], + [ + 2, + 10 + ], + [ + 0, + 12 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 2", + "ix": 2, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1.036, + 5 + ], + [ + -2, + -6.625 + ], + [ + -2, + -12 + ], + [ + 2, + -12 + ], + [ + 2, + -6.625 + ], + [ + 1.052, + 5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "mm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Merge", + "nm": "Merge Paths 1", + "mm": 1 + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0.099, + 9.982 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 2.099, + 21.982 + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 10 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 12 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 14 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 16 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 18 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 20 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 22 + }, + { + "s": [ + 0 + ], + "t": 24 + } + ], + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 1 + }, + { + "ty": 4, + "nm": "Shape Layer 1", + "sr": 1, + "st": 0, + "op": 193, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 10, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.41, + "y": -0.602 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 60 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.436, + "y": 1.492 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 83 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 90 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 25, + 35, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Ellipse 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "el", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Ellipse", + "nm": "Ellipse Path 1", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 3 + }, + "s": { + "a": 0, + "k": [ + 40, + 40 + ], + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 2, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 100, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 0, + "k": 0, + "ix": 1 + }, + "m": 1 + } + ], + "ind": 2 + } + ], + "v": "5.6.5", + "fr": 60, + "op": 180, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/packages/closed_household/assets/animated_json/success.json b/packages/closed_household/assets/animated_json/success.json new file mode 100644 index 000000000..43192f708 --- /dev/null +++ b/packages/closed_household/assets/animated_json/success.json @@ -0,0 +1,917 @@ +{ + "nm": "sucess", + "ddd": 0, + "h": 120, + "w": 120, + "meta": { + "g": "LottieFiles AE 0.1.21" + }, + "layers": [ + { + "ty": 3, + "nm": "scale up null", + "sr": 1, + "st": 0, + "op": 300.00001221925, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0 + }, + "i": { + "x": 0.833, + "y": 1 + }, + "s": [ + 111, + 111, + 100 + ], + "t": 27 + }, + { + "o": { + "x": 0.167, + "y": 0 + }, + "i": { + "x": 0.833, + "y": 1 + }, + "s": [ + 101, + 101, + 100 + ], + "t": 36 + }, + { + "s": [ + 121, + 121, + 100 + ], + "t": 42.0000017106951 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 60, + 60, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 0, + "ix": 11 + } + }, + "ef": [], + "ind": 1 + }, + { + "ty": 4, + "nm": "spark", + "sr": 1, + "st": 35.0000014255792, + "op": 335.00001364483, + "ip": 35.0000014255792, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0.5, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Rectangle 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 1", + "d": 1, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 0, + -21 + ], + "t": 35, + "ti": [ + 0, + 1.5 + ], + "to": [ + 0, + -1.5 + ] + }, + { + "s": [ + 0, + -30 + ], + "t": 53.0000021587343 + } + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 4 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.976, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 2, + 0 + ], + "t": 35 + }, + { + "o": { + "x": 0.33299999999999996, + "y": 0 + }, + "i": { + "x": 0.15355432054499818, + "y": 0.9999999999999999 + }, + "s": [ + 2, + 8 + ], + "t": 42 + }, + { + "s": [ + 1.633, + 0 + ], + "t": 53.0000021587343 + } + ], + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + -8 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "rp", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Repeater", + "nm": "Repeater 1", + "ix": 2, + "m": 1, + "c": { + "a": 0, + "k": 8, + "ix": 1 + }, + "o": { + "a": 0, + "k": 0, + "ix": 2 + }, + "tr": { + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 45, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0 + }, + "so": { + "a": 0, + "k": 100, + "ix": 5 + }, + "eo": { + "a": 0, + "k": 100, + "ix": 6 + } + } + } + ], + "ind": 2, + "parent": 1 + }, + { + "ty": 4, + "nm": "check", + "sr": 1, + "st": 10.0000004073083, + "op": 310.000012626559, + "ip": 22.0000008960784, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 3.5, + 3.75 + ], + [ + -12.973, + 5.349 + ], + [ + -6.124, + -9.992 + ], + [ + 12.125, + -7.431 + ], + [ + 7.431, + 12.125 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -3.5, + -3.75 + ], + [ + 10.764, + -2.941 + ], + [ + 7.431, + 12.125 + ], + [ + -12.125, + 7.431 + ], + [ + -7.431, + -12.125 + ] + ], + "v": [ + [ + 15.25, + -9.688 + ], + [ + -5.75, + 10.062 + ], + [ + -16, + 0.25 + ], + [ + -6.777, + -24.849 + ], + [ + 21.955, + -13.456 + ], + [ + 13.456, + 21.955 + ], + [ + -21.955, + 13.456 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 1, + "k": [ + { + "o": { + "x": 0.714, + "y": 0 + }, + "i": { + "x": 0.351, + "y": 1 + }, + "s": [ + 100 + ], + "t": 10 + }, + { + "s": [ + 23 + ], + "t": 40.0000016292334 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.742, + "y": 0 + }, + "i": { + "x": 0.363, + "y": 1 + }, + "s": [ + 100 + ], + "t": 17 + }, + { + "s": [ + 0 + ], + "t": 45.0000018328876 + } + ], + "ix": 1 + }, + "m": 1 + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 4, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 3 + } + } + ], + "ind": 3, + "parent": 1 + }, + { + "ty": 4, + "nm": "circle", + "sr": 1, + "st": 0, + "op": 300.00001221925, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + -14.221, + 0 + ], + [ + 0, + -14.221 + ], + [ + 14.221, + 0 + ], + [ + 0, + 14.221 + ] + ], + "o": [ + [ + 14.221, + 0 + ], + [ + 0, + 14.221 + ], + [ + -14.221, + 0 + ], + [ + 0, + -14.221 + ] + ], + "v": [ + [ + 0, + -25.75 + ], + [ + 25.75, + 0 + ], + [ + 0, + 25.75 + ], + [ + -25.75, + 0 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 2, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 3 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 3, + "e": { + "a": 1, + "k": [ + { + "o": { + "x": 0.714, + "y": 0 + }, + "i": { + "x": 0.351, + "y": 1 + }, + "s": [ + 100 + ], + "t": 0 + }, + { + "s": [ + 100 + ], + "t": 30.0000012219251 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.742, + "y": 0 + }, + "i": { + "x": 0.363, + "y": 1 + }, + "s": [ + 100 + ], + "t": 7 + }, + { + "s": [ + 0 + ], + "t": 33.0000013441176 + } + ], + "ix": 1 + }, + "m": 1 + } + ], + "ind": 4, + "parent": 1 + } + ], + "v": "5.5.7", + "fr": 29.9700012207031, + "op": 60.0000024438501, + "ip": 0, + "assets": [] +} \ No newline at end of file From 8673a4828e3bc6820fdbadcba32bc53ef5d06fa2 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Fri, 13 Sep 2024 16:10:43 +0530 Subject: [PATCH 110/241] Delivery action label and administered_success status update based on the project --- packages/registration_delivery/CHANGELOG.md | 4 + .../pages/beneficiary/household_overview.dart | 107 ++++++++++-------- .../lib/pages/search_beneficiary.dart | 4 +- .../widgets/beneficiary/beneficiary_card.dart | 6 +- .../beneficiary/view_beneficiary_card.dart | 9 +- .../widgets/status_filter/status_filter.dart | 6 +- packages/registration_delivery/pubspec.yaml | 2 +- 7 files changed, 86 insertions(+), 52 deletions(-) diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration_delivery/CHANGELOG.md index 10e985d7e..47bcd4a5e 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration_delivery/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.3+2 + +* Delivery action label and administered_success status update based on the project + ## 1.0.3+1 * Bug Fixes - diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index 61ca961b9..47bd25432 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -64,14 +64,17 @@ class _HouseholdOverviewPageState body: state.loading ? const Center(child: CircularProgressIndicator()) : ScrollableContent( - header: BackNavigationHelpHeaderWidget( - handleBack: (){ - context.read().add(const SearchHouseholdsEvent.clear()); + header: BackNavigationHelpHeaderWidget( + handleBack: () { + context + .read() + .add(const SearchHouseholdsEvent.clear()); }, ), enableFixedButton: true, footer: Offstage( - offstage: beneficiaryType == BeneficiaryType.individual || isOutsideProjectDateRange(), + offstage: beneficiaryType == BeneficiaryType.individual || + isOutsideProjectDateRange(), child: BlocBuilder( builder: (context, serviceDefinitionState) => @@ -82,38 +85,43 @@ class _HouseholdOverviewPageState const EdgeInsets.fromLTRB(0, kPadding, 0, 0), padding: const EdgeInsets.fromLTRB( kPadding, 0, kPadding, 0), - child: state.householdMemberWrapper.tasks?.lastOrNull?.status == + child: state.householdMemberWrapper.tasks + ?.lastOrNull?.status == Status.administeredSuccess.toValue() ? Padding( padding: const EdgeInsets.symmetric( vertical: kPadding), child: DigitOutLineButton( label: localizations.translate( - i18.memberCard - .deliverDetailsUpdateLabel, + '${RegistrationDeliverySingleton().selectedProject!.name}_${i18.memberCard.deliverDetailsUpdateLabel}', ), - onPressed: state.householdMemberWrapper.tasks?.lastOrNull?.status == Status.administeredSuccess.toValue() ? null :() { - serviceDefinitionState.when( - empty: () {}, - isloading: () {}, - serviceDefinitionFetch: - (value, model) { - if (value - .where((element) => element - .code - .toString() - .contains( - '${RegistrationDeliverySingleton().selectedProject?.name}.${RegistrationDeliveryEnums.iec.toValue()}')) - .toList() - .isEmpty) { - context.router.push( - DeliverInterventionRoute(), - ); - } else { - navigateToChecklist(ctx); - } - }); - }, + onPressed: state.householdMemberWrapper + .tasks?.lastOrNull?.status == + Status.administeredSuccess + .toValue() + ? null + : () { + serviceDefinitionState.when( + empty: () {}, + isloading: () {}, + serviceDefinitionFetch: + (value, model) { + if (value + .where((element) => element + .code + .toString() + .contains( + '${RegistrationDeliverySingleton().selectedProject?.name}.${RegistrationDeliveryEnums.iec.toValue()}')) + .toList() + .isEmpty) { + context.router.push( + DeliverInterventionRoute(), + ); + } else { + navigateToChecklist(ctx); + } + }); + }, ), ) : DigitElevatedButton( @@ -165,8 +173,7 @@ class _HouseholdOverviewPageState child: Center( child: Text( localizations.translate( - i18.householdOverView - .householdOverViewActionText, + '${RegistrationDeliverySingleton().selectedProject!.name}_${i18.householdOverView.householdOverViewActionText}', ), ), ), @@ -327,8 +334,8 @@ class _HouseholdOverviewPageState child: BlocBuilder( builder: (ctx, deliverInterventionState) { - - bool shouldShowStatus = beneficiaryType == BeneficiaryType.household; + bool shouldShowStatus = beneficiaryType == + BeneficiaryType.household; return Column( children: [ @@ -347,20 +354,26 @@ class _HouseholdOverviewPageState localizations.translate( i18.householdLocation .administrationAreaFormLabel, - ): state.householdMemberWrapper.headOfHousehold?.address?.first.locality?.code, + ): state + .householdMemberWrapper + .headOfHousehold + ?.address + ?.first + .locality + ?.code, localizations.translate( i18.deliverIntervention .memberCountText, ): state.householdMemberWrapper .household?.memberCount, - if(shouldShowStatus) - localizations.translate(i18 - .beneficiaryDetails - .status): localizations.translate( - getStatusAttributes(state, - deliverInterventionState)[ - 'textLabel'], - ) + if (shouldShowStatus) + localizations.translate(i18 + .beneficiaryDetails.status): + localizations.translate( + getStatusAttributes(state, + deliverInterventionState)[ + 'textLabel'], + ) }, ), ], @@ -430,7 +443,8 @@ class _HouseholdOverviewPageState .householdMemberWrapper.sideEffects ?.where((element) => element.taskClientReferenceId == - taskData.lastOrNull?.clientReferenceId) + taskData.lastOrNull + ?.clientReferenceId) .toList() : null; final ageInYears = e.dateOfBirth != null @@ -760,7 +774,6 @@ class _HouseholdOverviewPageState return false; } - getStatusAttributes(HouseholdOverviewState state, DeliverInterventionState deliverInterventionState) { var textLabel = @@ -770,7 +783,11 @@ class _HouseholdOverviewPageState if ((state.householdMemberWrapper.projectBeneficiaries ?? []).isNotEmpty) { textLabel = state.householdMemberWrapper.tasks?.isNotEmpty ?? false - ? getTaskStatus(state.householdMemberWrapper.tasks ?? []).toValue() + ? getTaskStatus(state.householdMemberWrapper.tasks ?? []).toValue() == + Status.administeredSuccess.toValue() + ? '${RegistrationDeliverySingleton().selectedProject!.name}_${getTaskStatus(state.householdMemberWrapper.tasks ?? []).toValue()}' + : getTaskStatus(state.householdMemberWrapper.tasks ?? []) + .toValue() : Status.registered.toValue(); color = state.householdMemberWrapper.tasks?.isNotEmpty ?? false diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index 0cf5c4650..adac8b302 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -586,7 +586,9 @@ class _SearchBeneficiaryPageState .first .key; if (mappedStatus != null) { - return mappedStatus; + return mappedStatus == Status.administeredSuccess.toValue() + ? '${RegistrationDeliverySingleton().selectedProject!.name}_$mappedStatus' + : mappedStatus; } else { return selectedFilter; } diff --git a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart index 753cf2918..5c41200f6 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:registration_delivery/blocs/app_localization.dart'; import '../../models/entities/status.dart'; +import '../../utils/utils.dart'; class BeneficiaryCard extends StatelessWidget { final String title; @@ -43,7 +44,10 @@ class BeneficiaryCard extends StatelessWidget { ? DigitIconButton( icon: Icons.check_circle, iconText: RegistrationDeliveryLocalization.of(context) - .translate(status.toString()), + .translate(status.toString() == + Status.administeredSuccess.toValue() + ? '${RegistrationDeliverySingleton().selectedProject!.name}_${status.toString()}' + : status.toString()), iconTextColor: theme.colorScheme.onSurfaceVariant, iconColor: theme.colorScheme.onSurfaceVariant, ) diff --git a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart index 9f49dbbc4..022f6f116 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart @@ -167,7 +167,9 @@ class ViewBeneficiaryCardState extends LocalizedState { TableData( [ e.name?.givenName ?? '--', - (e.name?.familyName?.trim().isNotEmpty ?? false) ? e.name?.familyName : null, + (e.name?.familyName?.trim().isNotEmpty ?? false) + ? e.name?.familyName + : null, ].whereNotNull().join(' '), cellKey: 'beneficiary', ), @@ -210,7 +212,10 @@ class ViewBeneficiaryCardState extends LocalizedState { cellKey: 'age', ), TableData( - e.gender?.name == null ? '--' : localizations.translate('CORE_COMMON_${ e.gender?.name.toUpperCase()}'), + e.gender?.name == null + ? '--' + : localizations + .translate('CORE_COMMON_${e.gender?.name.toUpperCase()}'), cellKey: 'gender', ), ]; diff --git a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart index 90b0b2c44..42348cda6 100644 --- a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart +++ b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart @@ -102,8 +102,10 @@ class StatusFilterState extends LocalizedState { }); }, valueMapper: (value) { - return localizations - .translate(value.toValue().toString()); + return localizations.translate(value == + Status.administeredSuccess + ? '${RegistrationDeliverySingleton().selectedProject!.name}_${value.toValue().toString()}' + : value.toValue().toString()); }, ), ), diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index b88722f63..5eb874639 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -1,6 +1,6 @@ name: registration_delivery description: This package enables health facility workers to register a household and individual members and deliver the resources. -version: 1.0.3+1 +version: 1.0.3+2 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/registration_delivery repository: https://github.com/egovernments/health-campaign-field-worker-app From 1b0d44f877737369e964de885c120ef266b72cff Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Fri, 13 Sep 2024 16:11:49 +0530 Subject: [PATCH 111/241] Revert "Delivery action label and administered_success status update based on the project" This reverts commit 8673a4828e3bc6820fdbadcba32bc53ef5d06fa2. --- packages/registration_delivery/CHANGELOG.md | 4 - .../pages/beneficiary/household_overview.dart | 107 ++++++++---------- .../lib/pages/search_beneficiary.dart | 4 +- .../widgets/beneficiary/beneficiary_card.dart | 6 +- .../beneficiary/view_beneficiary_card.dart | 9 +- .../widgets/status_filter/status_filter.dart | 6 +- packages/registration_delivery/pubspec.yaml | 2 +- 7 files changed, 52 insertions(+), 86 deletions(-) diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration_delivery/CHANGELOG.md index 47bcd4a5e..10e985d7e 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration_delivery/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.0.3+2 - -* Delivery action label and administered_success status update based on the project - ## 1.0.3+1 * Bug Fixes - diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index 47bd25432..61ca961b9 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -64,17 +64,14 @@ class _HouseholdOverviewPageState body: state.loading ? const Center(child: CircularProgressIndicator()) : ScrollableContent( - header: BackNavigationHelpHeaderWidget( - handleBack: () { - context - .read() - .add(const SearchHouseholdsEvent.clear()); + header: BackNavigationHelpHeaderWidget( + handleBack: (){ + context.read().add(const SearchHouseholdsEvent.clear()); }, ), enableFixedButton: true, footer: Offstage( - offstage: beneficiaryType == BeneficiaryType.individual || - isOutsideProjectDateRange(), + offstage: beneficiaryType == BeneficiaryType.individual || isOutsideProjectDateRange(), child: BlocBuilder( builder: (context, serviceDefinitionState) => @@ -85,43 +82,38 @@ class _HouseholdOverviewPageState const EdgeInsets.fromLTRB(0, kPadding, 0, 0), padding: const EdgeInsets.fromLTRB( kPadding, 0, kPadding, 0), - child: state.householdMemberWrapper.tasks - ?.lastOrNull?.status == + child: state.householdMemberWrapper.tasks?.lastOrNull?.status == Status.administeredSuccess.toValue() ? Padding( padding: const EdgeInsets.symmetric( vertical: kPadding), child: DigitOutLineButton( label: localizations.translate( - '${RegistrationDeliverySingleton().selectedProject!.name}_${i18.memberCard.deliverDetailsUpdateLabel}', + i18.memberCard + .deliverDetailsUpdateLabel, ), - onPressed: state.householdMemberWrapper - .tasks?.lastOrNull?.status == - Status.administeredSuccess - .toValue() - ? null - : () { - serviceDefinitionState.when( - empty: () {}, - isloading: () {}, - serviceDefinitionFetch: - (value, model) { - if (value - .where((element) => element - .code - .toString() - .contains( - '${RegistrationDeliverySingleton().selectedProject?.name}.${RegistrationDeliveryEnums.iec.toValue()}')) - .toList() - .isEmpty) { - context.router.push( - DeliverInterventionRoute(), - ); - } else { - navigateToChecklist(ctx); - } - }); - }, + onPressed: state.householdMemberWrapper.tasks?.lastOrNull?.status == Status.administeredSuccess.toValue() ? null :() { + serviceDefinitionState.when( + empty: () {}, + isloading: () {}, + serviceDefinitionFetch: + (value, model) { + if (value + .where((element) => element + .code + .toString() + .contains( + '${RegistrationDeliverySingleton().selectedProject?.name}.${RegistrationDeliveryEnums.iec.toValue()}')) + .toList() + .isEmpty) { + context.router.push( + DeliverInterventionRoute(), + ); + } else { + navigateToChecklist(ctx); + } + }); + }, ), ) : DigitElevatedButton( @@ -173,7 +165,8 @@ class _HouseholdOverviewPageState child: Center( child: Text( localizations.translate( - '${RegistrationDeliverySingleton().selectedProject!.name}_${i18.householdOverView.householdOverViewActionText}', + i18.householdOverView + .householdOverViewActionText, ), ), ), @@ -334,8 +327,8 @@ class _HouseholdOverviewPageState child: BlocBuilder( builder: (ctx, deliverInterventionState) { - bool shouldShowStatus = beneficiaryType == - BeneficiaryType.household; + + bool shouldShowStatus = beneficiaryType == BeneficiaryType.household; return Column( children: [ @@ -354,26 +347,20 @@ class _HouseholdOverviewPageState localizations.translate( i18.householdLocation .administrationAreaFormLabel, - ): state - .householdMemberWrapper - .headOfHousehold - ?.address - ?.first - .locality - ?.code, + ): state.householdMemberWrapper.headOfHousehold?.address?.first.locality?.code, localizations.translate( i18.deliverIntervention .memberCountText, ): state.householdMemberWrapper .household?.memberCount, - if (shouldShowStatus) - localizations.translate(i18 - .beneficiaryDetails.status): - localizations.translate( - getStatusAttributes(state, - deliverInterventionState)[ - 'textLabel'], - ) + if(shouldShowStatus) + localizations.translate(i18 + .beneficiaryDetails + .status): localizations.translate( + getStatusAttributes(state, + deliverInterventionState)[ + 'textLabel'], + ) }, ), ], @@ -443,8 +430,7 @@ class _HouseholdOverviewPageState .householdMemberWrapper.sideEffects ?.where((element) => element.taskClientReferenceId == - taskData.lastOrNull - ?.clientReferenceId) + taskData.lastOrNull?.clientReferenceId) .toList() : null; final ageInYears = e.dateOfBirth != null @@ -774,6 +760,7 @@ class _HouseholdOverviewPageState return false; } + getStatusAttributes(HouseholdOverviewState state, DeliverInterventionState deliverInterventionState) { var textLabel = @@ -783,11 +770,7 @@ class _HouseholdOverviewPageState if ((state.householdMemberWrapper.projectBeneficiaries ?? []).isNotEmpty) { textLabel = state.householdMemberWrapper.tasks?.isNotEmpty ?? false - ? getTaskStatus(state.householdMemberWrapper.tasks ?? []).toValue() == - Status.administeredSuccess.toValue() - ? '${RegistrationDeliverySingleton().selectedProject!.name}_${getTaskStatus(state.householdMemberWrapper.tasks ?? []).toValue()}' - : getTaskStatus(state.householdMemberWrapper.tasks ?? []) - .toValue() + ? getTaskStatus(state.householdMemberWrapper.tasks ?? []).toValue() : Status.registered.toValue(); color = state.householdMemberWrapper.tasks?.isNotEmpty ?? false diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index adac8b302..0cf5c4650 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -586,9 +586,7 @@ class _SearchBeneficiaryPageState .first .key; if (mappedStatus != null) { - return mappedStatus == Status.administeredSuccess.toValue() - ? '${RegistrationDeliverySingleton().selectedProject!.name}_$mappedStatus' - : mappedStatus; + return mappedStatus; } else { return selectedFilter; } diff --git a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart index 5c41200f6..753cf2918 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart @@ -3,7 +3,6 @@ import 'package:flutter/material.dart'; import 'package:registration_delivery/blocs/app_localization.dart'; import '../../models/entities/status.dart'; -import '../../utils/utils.dart'; class BeneficiaryCard extends StatelessWidget { final String title; @@ -44,10 +43,7 @@ class BeneficiaryCard extends StatelessWidget { ? DigitIconButton( icon: Icons.check_circle, iconText: RegistrationDeliveryLocalization.of(context) - .translate(status.toString() == - Status.administeredSuccess.toValue() - ? '${RegistrationDeliverySingleton().selectedProject!.name}_${status.toString()}' - : status.toString()), + .translate(status.toString()), iconTextColor: theme.colorScheme.onSurfaceVariant, iconColor: theme.colorScheme.onSurfaceVariant, ) diff --git a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart index 022f6f116..9f49dbbc4 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart @@ -167,9 +167,7 @@ class ViewBeneficiaryCardState extends LocalizedState { TableData( [ e.name?.givenName ?? '--', - (e.name?.familyName?.trim().isNotEmpty ?? false) - ? e.name?.familyName - : null, + (e.name?.familyName?.trim().isNotEmpty ?? false) ? e.name?.familyName : null, ].whereNotNull().join(' '), cellKey: 'beneficiary', ), @@ -212,10 +210,7 @@ class ViewBeneficiaryCardState extends LocalizedState { cellKey: 'age', ), TableData( - e.gender?.name == null - ? '--' - : localizations - .translate('CORE_COMMON_${e.gender?.name.toUpperCase()}'), + e.gender?.name == null ? '--' : localizations.translate('CORE_COMMON_${ e.gender?.name.toUpperCase()}'), cellKey: 'gender', ), ]; diff --git a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart index 42348cda6..90b0b2c44 100644 --- a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart +++ b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart @@ -102,10 +102,8 @@ class StatusFilterState extends LocalizedState { }); }, valueMapper: (value) { - return localizations.translate(value == - Status.administeredSuccess - ? '${RegistrationDeliverySingleton().selectedProject!.name}_${value.toValue().toString()}' - : value.toValue().toString()); + return localizations + .translate(value.toValue().toString()); }, ), ), diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index 5eb874639..b88722f63 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -1,6 +1,6 @@ name: registration_delivery description: This package enables health facility workers to register a household and individual members and deliver the resources. -version: 1.0.3+2 +version: 1.0.3+1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/registration_delivery repository: https://github.com/egovernments/health-campaign-field-worker-app From 9368c07eb37ad96e5067d9784255e4128c36224e Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Fri, 13 Sep 2024 16:16:26 +0530 Subject: [PATCH 112/241] Reapply "Delivery action label and administered_success status update based on the project" This reverts commit 1b0d44f877737369e964de885c120ef266b72cff. --- packages/registration_delivery/CHANGELOG.md | 4 + .../pages/beneficiary/household_overview.dart | 107 ++++++++++-------- .../lib/pages/search_beneficiary.dart | 4 +- .../widgets/beneficiary/beneficiary_card.dart | 6 +- .../beneficiary/view_beneficiary_card.dart | 9 +- .../widgets/status_filter/status_filter.dart | 6 +- packages/registration_delivery/pubspec.yaml | 2 +- 7 files changed, 86 insertions(+), 52 deletions(-) diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration_delivery/CHANGELOG.md index 10e985d7e..47bcd4a5e 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration_delivery/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.3+2 + +* Delivery action label and administered_success status update based on the project + ## 1.0.3+1 * Bug Fixes - diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index 61ca961b9..47bd25432 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -64,14 +64,17 @@ class _HouseholdOverviewPageState body: state.loading ? const Center(child: CircularProgressIndicator()) : ScrollableContent( - header: BackNavigationHelpHeaderWidget( - handleBack: (){ - context.read().add(const SearchHouseholdsEvent.clear()); + header: BackNavigationHelpHeaderWidget( + handleBack: () { + context + .read() + .add(const SearchHouseholdsEvent.clear()); }, ), enableFixedButton: true, footer: Offstage( - offstage: beneficiaryType == BeneficiaryType.individual || isOutsideProjectDateRange(), + offstage: beneficiaryType == BeneficiaryType.individual || + isOutsideProjectDateRange(), child: BlocBuilder( builder: (context, serviceDefinitionState) => @@ -82,38 +85,43 @@ class _HouseholdOverviewPageState const EdgeInsets.fromLTRB(0, kPadding, 0, 0), padding: const EdgeInsets.fromLTRB( kPadding, 0, kPadding, 0), - child: state.householdMemberWrapper.tasks?.lastOrNull?.status == + child: state.householdMemberWrapper.tasks + ?.lastOrNull?.status == Status.administeredSuccess.toValue() ? Padding( padding: const EdgeInsets.symmetric( vertical: kPadding), child: DigitOutLineButton( label: localizations.translate( - i18.memberCard - .deliverDetailsUpdateLabel, + '${RegistrationDeliverySingleton().selectedProject!.name}_${i18.memberCard.deliverDetailsUpdateLabel}', ), - onPressed: state.householdMemberWrapper.tasks?.lastOrNull?.status == Status.administeredSuccess.toValue() ? null :() { - serviceDefinitionState.when( - empty: () {}, - isloading: () {}, - serviceDefinitionFetch: - (value, model) { - if (value - .where((element) => element - .code - .toString() - .contains( - '${RegistrationDeliverySingleton().selectedProject?.name}.${RegistrationDeliveryEnums.iec.toValue()}')) - .toList() - .isEmpty) { - context.router.push( - DeliverInterventionRoute(), - ); - } else { - navigateToChecklist(ctx); - } - }); - }, + onPressed: state.householdMemberWrapper + .tasks?.lastOrNull?.status == + Status.administeredSuccess + .toValue() + ? null + : () { + serviceDefinitionState.when( + empty: () {}, + isloading: () {}, + serviceDefinitionFetch: + (value, model) { + if (value + .where((element) => element + .code + .toString() + .contains( + '${RegistrationDeliverySingleton().selectedProject?.name}.${RegistrationDeliveryEnums.iec.toValue()}')) + .toList() + .isEmpty) { + context.router.push( + DeliverInterventionRoute(), + ); + } else { + navigateToChecklist(ctx); + } + }); + }, ), ) : DigitElevatedButton( @@ -165,8 +173,7 @@ class _HouseholdOverviewPageState child: Center( child: Text( localizations.translate( - i18.householdOverView - .householdOverViewActionText, + '${RegistrationDeliverySingleton().selectedProject!.name}_${i18.householdOverView.householdOverViewActionText}', ), ), ), @@ -327,8 +334,8 @@ class _HouseholdOverviewPageState child: BlocBuilder( builder: (ctx, deliverInterventionState) { - - bool shouldShowStatus = beneficiaryType == BeneficiaryType.household; + bool shouldShowStatus = beneficiaryType == + BeneficiaryType.household; return Column( children: [ @@ -347,20 +354,26 @@ class _HouseholdOverviewPageState localizations.translate( i18.householdLocation .administrationAreaFormLabel, - ): state.householdMemberWrapper.headOfHousehold?.address?.first.locality?.code, + ): state + .householdMemberWrapper + .headOfHousehold + ?.address + ?.first + .locality + ?.code, localizations.translate( i18.deliverIntervention .memberCountText, ): state.householdMemberWrapper .household?.memberCount, - if(shouldShowStatus) - localizations.translate(i18 - .beneficiaryDetails - .status): localizations.translate( - getStatusAttributes(state, - deliverInterventionState)[ - 'textLabel'], - ) + if (shouldShowStatus) + localizations.translate(i18 + .beneficiaryDetails.status): + localizations.translate( + getStatusAttributes(state, + deliverInterventionState)[ + 'textLabel'], + ) }, ), ], @@ -430,7 +443,8 @@ class _HouseholdOverviewPageState .householdMemberWrapper.sideEffects ?.where((element) => element.taskClientReferenceId == - taskData.lastOrNull?.clientReferenceId) + taskData.lastOrNull + ?.clientReferenceId) .toList() : null; final ageInYears = e.dateOfBirth != null @@ -760,7 +774,6 @@ class _HouseholdOverviewPageState return false; } - getStatusAttributes(HouseholdOverviewState state, DeliverInterventionState deliverInterventionState) { var textLabel = @@ -770,7 +783,11 @@ class _HouseholdOverviewPageState if ((state.householdMemberWrapper.projectBeneficiaries ?? []).isNotEmpty) { textLabel = state.householdMemberWrapper.tasks?.isNotEmpty ?? false - ? getTaskStatus(state.householdMemberWrapper.tasks ?? []).toValue() + ? getTaskStatus(state.householdMemberWrapper.tasks ?? []).toValue() == + Status.administeredSuccess.toValue() + ? '${RegistrationDeliverySingleton().selectedProject!.name}_${getTaskStatus(state.householdMemberWrapper.tasks ?? []).toValue()}' + : getTaskStatus(state.householdMemberWrapper.tasks ?? []) + .toValue() : Status.registered.toValue(); color = state.householdMemberWrapper.tasks?.isNotEmpty ?? false diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index 0cf5c4650..adac8b302 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -586,7 +586,9 @@ class _SearchBeneficiaryPageState .first .key; if (mappedStatus != null) { - return mappedStatus; + return mappedStatus == Status.administeredSuccess.toValue() + ? '${RegistrationDeliverySingleton().selectedProject!.name}_$mappedStatus' + : mappedStatus; } else { return selectedFilter; } diff --git a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart index 753cf2918..5c41200f6 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:registration_delivery/blocs/app_localization.dart'; import '../../models/entities/status.dart'; +import '../../utils/utils.dart'; class BeneficiaryCard extends StatelessWidget { final String title; @@ -43,7 +44,10 @@ class BeneficiaryCard extends StatelessWidget { ? DigitIconButton( icon: Icons.check_circle, iconText: RegistrationDeliveryLocalization.of(context) - .translate(status.toString()), + .translate(status.toString() == + Status.administeredSuccess.toValue() + ? '${RegistrationDeliverySingleton().selectedProject!.name}_${status.toString()}' + : status.toString()), iconTextColor: theme.colorScheme.onSurfaceVariant, iconColor: theme.colorScheme.onSurfaceVariant, ) diff --git a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart index 9f49dbbc4..022f6f116 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart @@ -167,7 +167,9 @@ class ViewBeneficiaryCardState extends LocalizedState { TableData( [ e.name?.givenName ?? '--', - (e.name?.familyName?.trim().isNotEmpty ?? false) ? e.name?.familyName : null, + (e.name?.familyName?.trim().isNotEmpty ?? false) + ? e.name?.familyName + : null, ].whereNotNull().join(' '), cellKey: 'beneficiary', ), @@ -210,7 +212,10 @@ class ViewBeneficiaryCardState extends LocalizedState { cellKey: 'age', ), TableData( - e.gender?.name == null ? '--' : localizations.translate('CORE_COMMON_${ e.gender?.name.toUpperCase()}'), + e.gender?.name == null + ? '--' + : localizations + .translate('CORE_COMMON_${e.gender?.name.toUpperCase()}'), cellKey: 'gender', ), ]; diff --git a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart index 90b0b2c44..42348cda6 100644 --- a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart +++ b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart @@ -102,8 +102,10 @@ class StatusFilterState extends LocalizedState { }); }, valueMapper: (value) { - return localizations - .translate(value.toValue().toString()); + return localizations.translate(value == + Status.administeredSuccess + ? '${RegistrationDeliverySingleton().selectedProject!.name}_${value.toValue().toString()}' + : value.toValue().toString()); }, ), ), diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index b88722f63..5eb874639 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -1,6 +1,6 @@ name: registration_delivery description: This package enables health facility workers to register a household and individual members and deliver the resources. -version: 1.0.3+1 +version: 1.0.3+2 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/registration_delivery repository: https://github.com/egovernments/health-campaign-field-worker-app From d951368c863cdf37cded1ceebb1804cd0dc0317b Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Wed, 18 Sep 2024 12:52:26 +0530 Subject: [PATCH 113/241] beneficiary-registartion component updated --- .../beneficiary_acknowledgement.dart | 50 +- .../house_details.dart | 171 +-- .../household_details.dart | 287 ++--- .../household_location.dart | 305 +++--- .../individual_details.dart | 978 +++++++++--------- .../pages/registration_delivery_wrapper.dart | 5 + 6 files changed, 936 insertions(+), 860 deletions(-) diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart index 10b7e82b8..b0802ed80 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart @@ -1,5 +1,6 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/molecules/panel_cards.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -28,30 +29,37 @@ class BeneficiaryAcknowledgementPageState @override Widget build(BuildContext context) { return Scaffold( - body: DigitAcknowledgement.success( - action: () { - context.router.maybePop(); - }, - secondaryAction: () { - final bloc = context.read(); + body: PanelCard( + type: PanelType.success, + title: localizations + .translate(i18.acknowledgementSuccess.acknowledgementLabelText), + actions: [ + Button( + label: localizations.translate( + i18.householdDetails.viewHouseHoldDetailsAction, + ), + onPressed: (){ + final bloc = context.read(); - context.router.popAndPush( - BeneficiaryWrapperRoute( - wrapper: bloc.state.householdMembers.first, - ), - ); - }, - enableViewHousehold: widget.enableViewHousehold ?? false, - secondaryLabel: localizations.translate( - i18.householdDetails.viewHouseHoldDetailsAction, - ), - actionLabel: - localizations.translate(i18.acknowledgementSuccess.actionLabelText), + context.router.popAndPush( + BeneficiaryWrapperRoute( + wrapper: bloc.state.householdMembers.first, + ), + ); + }, + type: ButtonType.primary, + size: ButtonSize.large + ), + Button( + label: localizations.translate(i18.acknowledgementSuccess.actionLabelText), + onPressed: ()=>context.router.maybePop(), + type: ButtonType.secondary, + size: ButtonSize.large + ), + ], description: localizations.translate( i18.acknowledgementSuccess.acknowledgementDescriptionText, ), - label: localizations - .translate(i18.acknowledgementSuccess.acknowledgementLabelText), ), ); } diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart index 55d762731..e27689640 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart @@ -1,7 +1,9 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/atoms/selection_card.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/atoms/selection_card.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; @@ -44,6 +46,7 @@ class HouseDetailsPageState extends LocalizedState { final theme = Theme.of(context); final bloc = context.read(); final router = context.router; + final textTheme = theme.digitTextTheme(context); return Scaffold( body: ReactiveFormBuilder( @@ -62,10 +65,10 @@ class HouseDetailsPageState extends LocalizedState { ], ), footer: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), + margin: const EdgeInsets.only(top: spacer2), padding: - const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: DigitElevatedButton( + const EdgeInsets.all(spacer2), + children: [Button( onPressed: () { form.markAllAsTouched(); if (form.control(_householdStructureKey).value == @@ -201,96 +204,94 @@ class HouseDetailsPageState extends LocalizedState { }, ); }, - child: Center( - child: Text( - localizations.translate( - i18.householdLocation.actionLabel, - ), - ), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + label: localizations.translate( + i18.householdLocation.actionLabel, ), - ), + ),] ), slivers: [ SliverToBoxAdapter( child: DigitCard( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: const EdgeInsets.fromLTRB( - 0, 0, 0, kPadding), - child: Text( - localizations.translate( - i18.householdDetails.houseDetailsLabel, - ), - style: theme.textTheme.displayMedium, - ), + children: [ + Padding( + padding: const EdgeInsets.all(spacer2), + child: Text( + localizations.translate( + i18.householdDetails.houseDetailsLabel, ), - Column(children: [ - houseShowcaseData.typeOfStructure.buildWith( - child: SelectionBox( - isRequired: true, - title: localizations.translate( - i18.householdDetails.typeOfStructure), - equalWidthOptions: true, - allowMultipleSelection: false, - options: RegistrationDeliverySingleton() - .houseStructureTypes ?? - [], - initialSelection: form.control(_householdStructureKey).value!= null ? [...form.control(_householdStructureKey).value ] : [], - onSelectionChanged: (values) { + style: textTheme.headingXl, + ), + ), + houseShowcaseData.typeOfStructure.buildWith( + child: SelectionCard( + isRequired: true, + title: localizations.translate( + i18.householdDetails.typeOfStructure), + equalWidthOptions: true, + allowMultipleSelection: false, + options: RegistrationDeliverySingleton() + .houseStructureTypes ?? + [], + initialSelection: form.control(_householdStructureKey).value!= null ? [...form.control(_householdStructureKey).value ] : [], + onSelectionChanged: (values) { + form + .control(_householdStructureKey) + .markAsTouched(); + if (values.isEmpty) { + form + .control(_householdStructureKey) + .value = null; + setState(() { + form + .control(_householdStructureKey) + .setErrors({'': true}); + }); + } else { + setState(() { + form + .control(_householdStructureKey) + .value = values; + }); + } + }, + valueMapper: (value) { + return localizations + .translate(value.toString()); + }, + errorMessage: form + .control(_householdStructureKey) + .hasErrors && form .control(_householdStructureKey) - .markAsTouched(); - if (values.isEmpty) { - form - .control(_householdStructureKey) - .value = null; - setState(() { - form - .control(_householdStructureKey) - .setErrors({'': true}); - }); - } else { - setState(() { - form - .control(_householdStructureKey) - .value = values; - }); - } - }, - valueMapper: (value) { - return localizations - .translate(value.toString()); - }, - errorMessage: form - .control(_householdStructureKey) - .hasErrors && - form - .control(_householdStructureKey) - .touched - ? localizations.translate(i18 - .householdDetails - .selectStructureTypeError) - : null, - ), + .touched + ? localizations.translate(i18 + .householdDetails + .selectStructureTypeError) + : null, + ), + ), + houseShowcaseData.noOfRooms.buildWith( + child: ReactiveWrapperField( + formControlName: _noOfRoomsKey, + builder:(field)=> LabeledField( + label: localizations.translate( + i18.householdDetails.noOfRoomsLabel, ), - houseShowcaseData.noOfRooms.buildWith( - child: DigitIntegerFormPicker( - minimum: 1, - maximum: 20, - form: form, - formControlName: _noOfRoomsKey, - label: localizations.translate( - i18.householdDetails.noOfRoomsLabel, - ), - incrementer: true, - ), + child: DigitNumericFormInput( + minValue: 1, + maxValue: 20, + initialValue: form.control(_noOfRoomsKey).value.toString(), + step: 1, + onChange: (value){ + form.control(_noOfRoomsKey).value=int.parse(value); + }, ), - ]), - ], - ), + ), + ), + ),] ), ), ], diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart index 8d0f29b23..c4946bafe 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart @@ -1,10 +1,12 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/atoms/digit_toaster.dart'; -import 'package:digit_components/widgets/atoms/text_block.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/atoms/text_block.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:intl/intl.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:registration_delivery/blocs/household_overview/household_overview.dart'; import 'package:registration_delivery/blocs/search_households/search_households.dart'; @@ -14,6 +16,7 @@ import 'package:registration_delivery/utils/extensions/extensions.dart'; import '../../blocs/beneficiary_registration/beneficiary_registration.dart'; import '../../models/entities/household.dart'; import '../../router/registration_delivery_router.gm.dart'; +import '../../utils/constants.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; @@ -43,6 +46,7 @@ class HouseHoldDetailsPageState extends LocalizedState { final theme = Theme.of(context); final bloc = context.read(); final router = context.router; + final textTheme = theme.digitTextTheme(context); return Scaffold( body: ReactiveFormBuilder( @@ -88,9 +92,18 @@ class HouseHoldDetailsPageState extends LocalizedState { ]), enableFixedButton: true, footer: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: DigitElevatedButton( + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [Button( + label: registrationState.mapOrNull( + editHousehold: (value) => localizations + .translate(i18.common.coreCommonSave), + ) ?? + localizations + .translate(i18.householdDetails.actionLabel), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, onPressed: () { form.markAllAsTouched(); if (!form.valid) return; @@ -108,12 +121,12 @@ class HouseHoldDetailsPageState extends LocalizedState { form.control(_childrenCountKey).value as int; if (memberCount < (pregnantWomen + children)) { - DigitToast.show(context, - options: DigitToastOptions( - localizations.translate( + Toast.showToast( + context, + message: localizations.translate( i18.householdDetails.memberCountError), - true, - theme)); + type: ToastType.error + ); } else { registrationState.maybeWhen( orElse: () { @@ -335,143 +348,145 @@ class HouseHoldDetailsPageState extends LocalizedState { ); } }, - child: Center( - child: Text( - registrationState.mapOrNull( - editHousehold: (value) => localizations - .translate(i18.common.coreCommonSave), - ) ?? - localizations - .translate(i18.householdDetails.actionLabel), - ), - ), - ), + ),] ), slivers: [ SliverToBoxAdapter( child: DigitCard( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - TextBlock( - padding: const EdgeInsets.only(top: kPadding), - heading: localizations.translate( - i18.householdDetails.householdDetailsLabel, + children: [ + DigitTextBlock( + padding: const EdgeInsets.all(spacer2), + heading: localizations.translate( + i18.householdDetails.householdDetailsLabel, + ), + description: localizations.translate( + i18.householdDetails.householdDetailsDescription, + ), + ), + householdDetailsShowcaseData.dateOfRegistration + .buildWith( + child: ReactiveWrapperField( + formControlName: _dateOfRegistrationKey, + builder: (field)=> LabeledField( + label: localizations.translate( + i18.householdDetails.dateOfRegistrationLabel, ), - headingStyle: theme.textTheme.displayMedium, - body: localizations.translate( - i18.householdDetails.householdDetailsDescription, + child: DigitDateFormInput( + readOnly: true, + confirmText: localizations.translate( + i18.common.coreCommonOk, + ), + cancelText: localizations.translate( + i18.common.coreCommonCancel, + ), + initialValue: DateFormat(Constants().dateMonthYearFormat) + .format(form.control(_dateOfRegistrationKey).value).toString(), ), ), - Column(children: [ - householdDetailsShowcaseData.dateOfRegistration - .buildWith( - child: DigitDateFormPicker( - isEnabled: false, - formControlName: _dateOfRegistrationKey, - label: localizations.translate( - i18.householdDetails.dateOfRegistrationLabel, - ), - isRequired: false, - confirmText: localizations.translate( - i18.common.coreCommonOk, - ), - cancelText: localizations.translate( - i18.common.coreCommonCancel, - ), - ), + ), + ), + //[TODO: Use pregnant women form value based on project config + householdDetailsShowcaseData + .numberOfPregnantWomenInHousehold + .buildWith( + child: ReactiveWrapperField( + formControlName: _pregnantWomenCountKey, + builder: (field)=> LabeledField( + label: localizations.translate( + i18.householdDetails + .noOfPregnantWomenCountLabel, ), - //[TODO: Use pregnant women form value based on project config - householdDetailsShowcaseData - .numberOfPregnantWomenInHousehold - .buildWith( - child: DigitIntegerFormPicker( - minimum: 0, - maximum: 10, - onChange: () { - int pregnantWomen = form - .control(_pregnantWomenCountKey) - .value; - int children = - form.control(_childrenCountKey).value; - int memberCount = - form.control(_memberCountKey).value; - form.control(_memberCountKey).value = - memberCount < (children + pregnantWomen) - ? children + pregnantWomen - : memberCount; - }, - form: form, - formControlName: _pregnantWomenCountKey, - label: localizations.translate( - i18.householdDetails - .noOfPregnantWomenCountLabel, - ), - incrementer: true, - ), + child: DigitNumericFormInput( + minValue: 0, + maxValue: 10, + step: 1, + initialValue: form.control(_pregnantWomenCountKey).value.toString(), + onChange: (value) { + form.control(_pregnantWomenCountKey).value=int.parse(value); + int pregnantWomen = form + .control(_pregnantWomenCountKey) + .value; + int children = + form.control(_childrenCountKey).value; + int memberCount = + form.control(_memberCountKey).value; + form.control(_memberCountKey).value = + memberCount < (children + pregnantWomen) + ? children + pregnantWomen + : memberCount; + }, ), - householdDetailsShowcaseData - .numberOfChildrenBelow5InHousehold - .buildWith( - child: DigitIntegerFormPicker( - minimum: 0, - maximum: 20, - onChange: () { - int pregnantWomen = form - .control(_pregnantWomenCountKey) - .value; - int children = - form.control(_childrenCountKey).value; - int memberCount = - form.control(_memberCountKey).value; - form.control(_memberCountKey).value = - memberCount <= (children + pregnantWomen) - ? children + pregnantWomen - : memberCount; - }, - form: form, - formControlName: _childrenCountKey, - label: localizations.translate( - i18.householdDetails - .noOfChildrenBelow5YearsLabel, - ), - incrementer: true, - ), + ), + ), + ), + householdDetailsShowcaseData + .numberOfChildrenBelow5InHousehold + .buildWith( + child: ReactiveWrapperField( + formControlName: _childrenCountKey, + builder: (field)=>LabeledField( + label: localizations.translate( + i18.householdDetails + .noOfChildrenBelow5YearsLabel, ), - householdDetailsShowcaseData - .numberOfMembersLivingInHousehold - .buildWith( - child: DigitIntegerFormPicker( - minimum: children + pregnantWomen != 0 - ? children + pregnantWomen - : 1, - maximum: 30, - onChange: () { - int pregnantWomen = form - .control(_pregnantWomenCountKey) - .value; - int children = - form.control(_childrenCountKey).value; - int memberCount = - form.control(_memberCountKey).value; - if (memberCount <= pregnantWomen + children) { - form.control(_memberCountKey).value = - (children + pregnantWomen); - } - }, - form: form, - formControlName: _memberCountKey, - label: localizations.translate( - i18.householdDetails.noOfMembersCountLabel, - ), - incrementer: true, - ), + child: DigitNumericFormInput( + minValue: 0, + maxValue: 20, + step: 1, + initialValue: form.control(_childrenCountKey).value.toString(), + onChange: (value) { + form.control(_childrenCountKey).value=int.parse(value); + int pregnantWomen = form + .control(_pregnantWomenCountKey) + .value; + int children = + form.control(_childrenCountKey).value; + int memberCount = + form.control(_memberCountKey).value; + form.control(_memberCountKey).value = + memberCount <= (children + pregnantWomen) + ? children + pregnantWomen + : memberCount; + }, + ), + ), + ), + ), + householdDetailsShowcaseData + .numberOfMembersLivingInHousehold + .buildWith( + child: ReactiveWrapperField( + formControlName: _memberCountKey, + builder: (field)=> LabeledField( + label: localizations.translate( + i18.householdDetails.noOfMembersCountLabel, ), - ]), - const SizedBox(height: 16), - ], + child: DigitNumericFormInput( + minValue: children + pregnantWomen != 0 + ? children + pregnantWomen + : 1, + maxValue: 30, + step: 1, + initialValue: form.control(_memberCountKey).value.toString(), + onChange: (value) { + form.control(_memberCountKey).value=int.parse(value); + int pregnantWomen = form + .control(_pregnantWomenCountKey) + .value; + int children = + form.control(_childrenCountKey).value; + int memberCount = + form.control(_memberCountKey).value; + if (memberCount <= pregnantWomen + children) { + form.control(_memberCountKey).value = + (children + pregnantWomen); + } + }, + ), + ), + ), ), + const SizedBox(height: 16),] ), ), ], diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index 59a3eb206..ab80f99dc 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -1,9 +1,11 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/atoms/text_block.dart'; -import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/models/entities/address_type.dart'; +import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/utils/component_utils.dart'; +import 'package:digit_ui_components/widgets/atoms/text_block.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -51,10 +53,10 @@ class HouseholdLocationPageState extends LocalizedState { create: (value) { WidgetsBinding.instance.addPostFrameCallback((_) { // Show the dialog after the first frame is built - DigitComponentsUtils().showLocationCapturingDialog( + DigitComponentsUtils.showDialog( context, localizations.translate(i18.common.locationCapturing), - DigitSyncDialogType.inProgress, + DialogType.inProgress, ); }); return true; @@ -81,7 +83,7 @@ class HouseholdLocationPageState extends LocalizedState { if (locationState.accuracy != null) { //Hide the dialog after 1 seconds Future.delayed(const Duration(seconds: 1), () { - DigitComponentsUtils().hideDialog(context); + DigitComponentsUtils.hideDialog(context); }); } }); @@ -115,11 +117,17 @@ class HouseholdLocationPageState extends LocalizedState { ], ), footer: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: BlocBuilder( + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [BlocBuilder( builder: (context, locationState) { - return DigitElevatedButton( + return Button( + label: localizations.translate( + i18.householdLocation.actionLabel, + ), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, onPressed: () { form.markAllAsTouched(); if (!form.valid) return; @@ -249,139 +257,176 @@ class HouseholdLocationPageState extends LocalizedState { }, ); }, - child: Center( - child: Text( - localizations.translate( - i18.householdLocation.actionLabel, - ), - ), - ), ); }, - ), + ),] ), slivers: [ SliverToBoxAdapter( child: DigitCard( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - TextBlock( - padding: const EdgeInsets.only(top: kPadding), - heading: localizations.translate( - i18.householdLocation.householdLocationLabelText, - ), - headingStyle: theme.textTheme.displayMedium, - body: localizations.translate( - i18.householdLocation - .householdLocationDescriptionText, - )), - Column(children: [ - householdLocationShowcaseData.administrativeArea - .buildWith( - child: DigitTextFormField( - formControlName: _administrationAreaKey, - label: localizations.translate( - i18.householdLocation - .administrationAreaFormLabel, - ), - readOnly: true, - validationMessages: { - 'required': (_) => localizations.translate( - i18.householdLocation - .administrationAreaRequiredValidation, - ), - }, - ), + children: [ + DigitTextBlock( + padding: const EdgeInsets.only(top: spacer2), + heading: localizations.translate( + i18.householdLocation.householdLocationLabelText, + ), + description: localizations.translate( + i18.householdLocation + .householdLocationDescriptionText, + )), + householdLocationShowcaseData.administrativeArea + .buildWith( + child: ReactiveWrapperField( + formControlName: _administrationAreaKey, + validationMessages: { + 'required': (_) => localizations.translate( + i18.householdLocation + .administrationAreaRequiredValidation, ), - householdLocationShowcaseData.gpsAccuracy.buildWith( - child: DigitTextFormField( - formControlName: _accuracyKey, - label: localizations.translate( - i18.householdLocation.gpsAccuracyLabel, - ), - readOnly: true, - validationMessages: { - 'required': (_) => localizations.translate( - i18.common.corecommonRequired, - ), - }, - ), + }, + builder: (field)=> LabeledField( + label: localizations.translate( + i18.householdLocation + .administrationAreaFormLabel, ), - householdLocationShowcaseData.addressLine1.buildWith( - child: DigitTextFormField( - formControlName: _addressLine1Key, - label: localizations.translate( - i18.householdLocation - .householdAddressLine1LabelText, - ), - validationMessages: { - 'required': (_) => localizations.translate( - i18.common.min2CharsRequired, - ), - 'maxLength': (object) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', maxLength.toString()), - }, - ), + child: DigitTextFormInput( + readOnly: true, + errorMessage: field.errorText, + initialValue: form.control(_administrationAreaKey).value, + onChange: (value){ + form.control(_administrationAreaKey).value=value; + }, ), - householdLocationShowcaseData.addressLine2.buildWith( - child: DigitTextFormField( - formControlName: _addressLine2Key, - label: localizations.translate( - i18.householdLocation - .householdAddressLine2LabelText, - ), - validationMessages: { - 'required': (_) => localizations.translate( - i18.common.min2CharsRequired, - ), - 'maxLength': (object) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', maxLength.toString()), - }, - ), + ), + ), + ), + householdLocationShowcaseData.gpsAccuracy.buildWith( + child: ReactiveWrapperField( + formControlName: _accuracyKey, + validationMessages: { + 'required': (_) => localizations.translate( + i18.common.corecommonRequired, ), - householdLocationShowcaseData.landmark.buildWith( - child: DigitTextFormField( - formControlName: _landmarkKey, - label: localizations.translate( - i18.householdLocation.landmarkFormLabel, - ), - validationMessages: { - 'required': (_) => localizations.translate( - i18.common.min2CharsRequired, - ), - 'maxLength': (object) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', maxLength.toString()), - }, - ), + }, + builder: (field)=>LabeledField( + label: localizations.translate( + i18.householdLocation.gpsAccuracyLabel, ), - householdLocationShowcaseData.postalCode.buildWith( - child: DigitTextFormField( - keyboardType: TextInputType.text, - formControlName: _postalCodeKey, - label: localizations.translate( - i18.householdLocation.postalCodeFormLabel, - ), - validationMessages: { - 'required': (_) => localizations.translate( - i18.common.min2CharsRequired, - ), - 'maxLength': (object) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', '6'), - }, - inputFormatters: [ - FilteringTextInputFormatter.digitsOnly, - ], - ), + child: DigitTextFormInput( + readOnly: true, + errorMessage: field.errorText, + initialValue: form.control(_accuracyKey).value.toString(), + ), + ), + ), + ), + householdLocationShowcaseData.addressLine1.buildWith( + child: ReactiveWrapperField( + formControlName: _addressLine1Key, + validationMessages: { + 'required': (_) => localizations.translate( + i18.common.min2CharsRequired, + ), + 'maxLength': (object) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', maxLength.toString()), + }, + builder: (field)=> LabeledField( + label: localizations.translate( + i18.householdLocation + .householdAddressLine1LabelText, ), - ]), - ], + child: DigitTextFormInput( + errorMessage: field.errorText, + onChange: (value){ + form.control(_addressLine1Key).value=value; + }, + initialValue: form.control(_addressLine1Key).value, + ), + ), + ), + ), + householdLocationShowcaseData.addressLine2.buildWith( + child: ReactiveWrapperField( + formControlName: _addressLine2Key, + validationMessages: { + 'required': (_) => localizations.translate( + i18.common.min2CharsRequired, + ), + 'maxLength': (object) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', maxLength.toString()), + }, + builder: (field)=> LabeledField( + label: localizations.translate( + i18.householdLocation + .householdAddressLine2LabelText, + ), + child: DigitTextFormInput( + errorMessage: field.errorText, + onChange: (value){ + form.control(_addressLine2Key).value=value; + }, + initialValue: form.control(_addressLine2Key).value, + ), + ), + ), + ), + householdLocationShowcaseData.landmark.buildWith( + child: ReactiveWrapperField( + formControlName: _landmarkKey, + validationMessages: { + 'required': (_) => localizations.translate( + i18.common.min2CharsRequired, + ), + 'maxLength': (object) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', maxLength.toString()), + }, + builder: (field)=> LabeledField( + label: localizations.translate( + i18.householdLocation.landmarkFormLabel, + ), + child: DigitTextFormInput( + errorMessage: field.errorText, + onChange: (value){ + form.control(_landmarkKey).value=value; + }, + initialValue: form.control(_landmarkKey).value, + ), + ), + ), ), + householdLocationShowcaseData.postalCode.buildWith( + child: ReactiveWrapperField( + formControlName: _postalCodeKey, + validationMessages: { + 'required': (_) => localizations.translate( + i18.common.min2CharsRequired, + ), + 'maxLength': (object) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', '6'), + }, + builder: (field)=> LabeledField( + label: localizations.translate( + i18.householdLocation.postalCodeFormLabel, + ), + child: DigitTextFormInput( + keyboardType: TextInputType.text, + inputFormatters: [ + FilteringTextInputFormatter.digitsOnly, + ], + errorMessage: field.errorText, + onChange: (value){ + form.control(_postalCodeKey).value=value; + }, + maxLength: 6, + initialValue: form.control(_postalCodeKey).value, + ), + ), + ), + ),] ), ), ], diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index 34ea6c862..21ebae9bc 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -1,14 +1,14 @@ import 'package:auto_route/auto_route.dart'; import 'package:collection/collection.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/utils/date_utils.dart'; -import 'package:digit_components/widgets/atoms/digit_checkbox.dart'; -import 'package:digit_components/widgets/atoms/digit_toaster.dart'; -import 'package:digit_components/widgets/atoms/selection_card.dart'; -import 'package:digit_components/widgets/digit_dob_picker.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_scanner/blocs/scanner.dart'; import 'package:digit_scanner/pages/qr_scanner.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/utils/date_utils.dart'; +import 'package:digit_ui_components/widgets/atoms/dob_picker.dart'; +import 'package:digit_ui_components/widgets/atoms/selection_card.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -60,6 +60,7 @@ class IndividualDetailsPageState extends LocalizedState { final router = context.router; final theme = Theme.of(context); DateTime before150Years = DateTime(now.year - 150, now.month, now.day); + final textTheme = theme.digitTextTheme(context); return Scaffold( body: ReactiveFormBuilder( @@ -75,15 +76,15 @@ class IndividualDetailsPageState extends LocalizedState { overviewBloc.add( HouseholdOverviewReloadEvent( projectId: - RegistrationDeliverySingleton().projectId.toString(), + RegistrationDeliverySingleton().projectId.toString(), projectBeneficiaryType: - RegistrationDeliverySingleton().beneficiaryType ?? - BeneficiaryType.household, + RegistrationDeliverySingleton().beneficiaryType ?? + BeneficiaryType.household, ), ); await overviewBloc.stream.firstWhere((element) => - element.loading == false && + element.loading == false && element.householdMemberWrapper.household != null); HouseholdMemberWrapper memberWrapper = overviewBloc.state.householdMemberWrapper; @@ -105,289 +106,290 @@ class IndividualDetailsPageState extends LocalizedState { ), ]), footer: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: ValueListenableBuilder( - valueListenable: clickedStatus, - builder: (context, bool isClicked, _) { - return DigitElevatedButton( - onPressed: () async { - final age = DigitDateUtils.calculateAge( - form.control(_dobKey).value as DateTime?, - ); - if ((age.years == 0 && age.months == 0) || - age.years >= 150 && age.months > 0) { - form.control(_dobKey).setErrors({'': true}); - } - if (form.control(_idTypeKey).value == null) { - form.control(_idTypeKey).setErrors({'': true}); - } - if (form.control(_genderKey).value == null) { - setState(() { - form.control(_genderKey).setErrors({'': true}); - }); - } - final userId = - RegistrationDeliverySingleton().loggedInUserUuid; - final projectId = - RegistrationDeliverySingleton().projectId; - form.markAllAsTouched(); - if (!form.valid) return; - FocusManager.instance.primaryFocus?.unfocus(); - - state.maybeWhen( - orElse: () { - return; - }, - create: ( - addressModel, - householdModel, - individualModel, - projectBeneficiaryModel, - registrationDate, - searchQuery, - loading, - isHeadOfHousehold, - ) async { - final individual = _getIndividualModel( - context, - form: form, - oldIndividual: null, - ); + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [ValueListenableBuilder( + valueListenable: clickedStatus, + builder: (context, bool isClicked, _) { + return Button( + label: state.mapOrNull( + editIndividual: (value) => localizations + .translate(i18.common.coreCommonSave), + ) ?? + localizations + .translate(i18.common.coreCommonSubmit), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () async { + if(form.control(_dobKey).value==null){ + form.control(_dobKey).setErrors({'':true}); + } + if (form.control(_idTypeKey).value == null) { + form.control(_idTypeKey).setErrors({'': true}); + } + if (form.control(_genderKey).value == null) { + setState(() { + form.control(_genderKey).setErrors({'': true}); + }); + } + final userId = + RegistrationDeliverySingleton().loggedInUserUuid; + final projectId = + RegistrationDeliverySingleton().projectId; + form.markAllAsTouched(); + if (!form.valid) return; + FocusManager.instance.primaryFocus?.unfocus(); - final boundary = - RegistrationDeliverySingleton().boundary; - - bloc.add( - BeneficiaryRegistrationSaveIndividualDetailsEvent( - model: individual, - isHeadOfHousehold: widget.isHeadOfHousehold, - ), - ); - final scannerBloc = - context.read(); - - if (scannerBloc.state.duplicate) { - DigitToast.show( + state.maybeWhen( + orElse: () { + return; + }, + create: ( + addressModel, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + searchQuery, + loading, + isHeadOfHousehold, + ) async { + final individual = _getIndividualModel( context, - options: DigitToastOptions( - localizations.translate( - i18.deliverIntervention - .resourceAlreadyScanned, - ), - true, - theme, - ), + form: form, + oldIndividual: null, ); - } else { - clickedStatus.value = true; - final scannerBloc = - context.read(); - bloc.add( - BeneficiaryRegistrationSummaryEvent( - projectId: projectId!, - userUuid: userId!, - boundary: boundary!, - tag: scannerBloc.state.qrCodes.isNotEmpty - ? scannerBloc.state.qrCodes.first - : null, - ), - ); - router.push(SummaryRoute()); - } - }, - editIndividual: ( - householdModel, - individualModel, - addressModel, - projectBeneficiaryModel, - loading, - ) { - final scannerBloc = - context.read(); - final individual = _getIndividualModel( - context, - form: form, - oldIndividual: individualModel, - ); - final tag = scannerBloc.state.qrCodes.isNotEmpty - ? scannerBloc.state.qrCodes.first - : null; - if (tag != null && - tag != projectBeneficiaryModel?.tag && - scannerBloc.state.duplicate) { - DigitToast.show( - context, - options: DigitToastOptions( - localizations.translate( - i18.deliverIntervention - .resourceAlreadyScanned, - ), - true, - theme, - ), - ); - } else { + final boundary = + RegistrationDeliverySingleton().boundary; + bloc.add( - BeneficiaryRegistrationUpdateIndividualDetailsEvent( - addressModel: addressModel, - householdModel: householdModel, - model: individual.copyWith( - clientAuditDetails: (individual - .clientAuditDetails - ?.createdBy != - null && - individual.clientAuditDetails - ?.createdTime != - null) - ? ClientAuditDetails( - createdBy: individual - .clientAuditDetails!.createdBy, - createdTime: individual - .clientAuditDetails! - .createdTime, - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: context - .millisecondsSinceEpoch(), - ) - : null, - ), - tag: scannerBloc.state.qrCodes.isNotEmpty - ? scannerBloc.state.qrCodes.first - : null, + BeneficiaryRegistrationSaveIndividualDetailsEvent( + model: individual, + isHeadOfHousehold: widget.isHeadOfHousehold, ), ); - } - }, - addMember: ( - addressModel, - householdModel, - loading, - ) { - final individual = _getIndividualModel( - context, - form: form, - ); - - if (context.mounted) { final scannerBloc = - context.read(); + context.read(); if (scannerBloc.state.duplicate) { - DigitToast.show( - context, - options: DigitToastOptions( - localizations.translate( + Toast.showToast( + context, + message: localizations.translate( i18.deliverIntervention .resourceAlreadyScanned, ), - true, - theme, + type: ToastType.error + ); + } else { + clickedStatus.value = true; + final scannerBloc = + context.read(); + bloc.add( + BeneficiaryRegistrationSummaryEvent( + projectId: projectId!, + userUuid: userId!, + boundary: boundary!, + tag: scannerBloc.state.qrCodes.isNotEmpty + ? scannerBloc.state.qrCodes.first + : null, ), ); + router.push(SummaryRoute()); + } + }, + editIndividual: ( + householdModel, + individualModel, + addressModel, + projectBeneficiaryModel, + loading, + ) { + final scannerBloc = + context.read(); + final individual = _getIndividualModel( + context, + form: form, + oldIndividual: individualModel, + ); + final tag = scannerBloc.state.qrCodes.isNotEmpty + ? scannerBloc.state.qrCodes.first + : null; + + if (tag != null && + tag != projectBeneficiaryModel?.tag && + scannerBloc.state.duplicate) { + Toast.showToast( + context, + message: localizations.translate( + i18.deliverIntervention + .resourceAlreadyScanned, + ), + type: ToastType.error + ); } else { bloc.add( - BeneficiaryRegistrationAddMemberEvent( - beneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, - householdModel: householdModel, - individualModel: individual, + BeneficiaryRegistrationUpdateIndividualDetailsEvent( addressModel: addressModel, - userUuid: RegistrationDeliverySingleton() - .loggedInUserUuid!, - projectId: RegistrationDeliverySingleton() - .projectId!, + householdModel: householdModel, + model: individual.copyWith( + clientAuditDetails: (individual + .clientAuditDetails + ?.createdBy != + null && + individual.clientAuditDetails + ?.createdTime != + null) + ? ClientAuditDetails( + createdBy: individual + .clientAuditDetails!.createdBy, + createdTime: individual + .clientAuditDetails! + .createdTime, + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: context + .millisecondsSinceEpoch(), + ) + : null, + ), tag: scannerBloc.state.qrCodes.isNotEmpty ? scannerBloc.state.qrCodes.first : null, ), ); } - } - }, - ); - }, - child: Center( - child: Text( - state.mapOrNull( - editIndividual: (value) => localizations - .translate(i18.common.coreCommonSave), - ) ?? - localizations - .translate(i18.common.coreCommonSubmit), - ), - ), - ); - }, - ), + }, + addMember: ( + addressModel, + householdModel, + loading, + ) { + final individual = _getIndividualModel( + context, + form: form, + ); + + if (context.mounted) { + final scannerBloc = + context.read(); + + if (scannerBloc.state.duplicate) { + Toast.showToast( + context, + message: localizations.translate( + i18.deliverIntervention + .resourceAlreadyScanned, + ), + type: ToastType.error, + ); + } else { + bloc.add( + BeneficiaryRegistrationAddMemberEvent( + beneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType!, + householdModel: householdModel, + individualModel: individual, + addressModel: addressModel, + userUuid: RegistrationDeliverySingleton() + .loggedInUserUuid!, + projectId: RegistrationDeliverySingleton() + .projectId!, + tag: scannerBloc.state.qrCodes.isNotEmpty + ? scannerBloc.state.qrCodes.first + : null, + ), + ); + } + } + }, + ); + }, + ); + }, + ),] ), slivers: [ SliverToBoxAdapter( child: DigitCard( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, children: [ Padding( - padding: const EdgeInsets.only(bottom: kPadding), - child: Text( - localizations.translate( - i18.individualDetails.individualsDetailsLabelText, - ), - style: theme.textTheme.displayMedium, + padding: const EdgeInsets.only(bottom: spacer2), + child: Text( + localizations.translate( + i18.individualDetails.individualsDetailsLabelText, ), + style: textTheme.headingXl, ), - Column(children: [ - individualDetailsShowcaseData.nameOfIndividual - .buildWith( - child: DigitTextFormField( - formControlName: _individualNameKey, - label: localizations.translate( - i18.individualDetails.nameLabelText, - ), - isRequired: true, - validationMessages: { - 'required': (object) => localizations.translate( - '${i18.individualDetails.nameLabelText}_IS_REQUIRED', - ), - 'maxLength': (object) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', maxLength.toString()), + ), + individualDetailsShowcaseData.nameOfIndividual + .buildWith( + child: ReactiveWrapperField( + formControlName: _individualNameKey, + validationMessages: { + 'required': (object) => localizations.translate( + '${i18.individualDetails.nameLabelText}_IS_REQUIRED', + ), + 'maxLength': (object) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', maxLength.toString()), + }, + builder: (field)=> LabeledField( + label: localizations.translate( + i18.individualDetails.nameLabelText, + ), + isRequired: true, + child: DigitTextFormInput( + initialValue: form.control(_individualNameKey).value, + onChange: (value){ + form.control(_individualNameKey).value=value; }, + errorMessage: field.errorText, ), ), - Offstage( - offstage: !widget.isHeadOfHousehold, - child: DigitCheckbox( - label: localizations.translate( - i18.individualDetails.checkboxLabelText, - ), - value: widget.isHeadOfHousehold, - ), + ), + ), + Offstage( + offstage: !widget.isHeadOfHousehold, + child: DigitCheckbox( + label: localizations.translate( + i18.individualDetails.checkboxLabelText, ), - DigitReactiveSearchDropdown( - label: localizations.translate( - i18.individualDetails.idTypeLabelText, - ), - form: form, - menuItems: RegistrationDeliverySingleton() + value: widget.isHeadOfHousehold, + isDisabled: true, + onChanged: (_){ + + }, + ), + ), + ReactiveWrapperField( + formControlName: _idTypeKey, + validationMessages: { + 'required': (_)=> localizations.translate( + i18.common.corecommonRequired, + ), + }, + builder: (field)=> LabeledField( + label: localizations.translate( + i18.individualDetails.idTypeLabelText, + ), + isRequired: true, + child: DigitDropdown( + items: RegistrationDeliverySingleton() .idTypeOptions! .map( - (e) { - return e; - }, + (e) => DropdownItem( + name: localizations.translate(e), + code: e + ), ).toList(), - formControlName: _idTypeKey, - valueMapper: (value) { - return localizations.translate(value); - }, - onSelected: (value) { + onSelect: (value) { + form.control(_idTypeKey).value=value.code; setState(() { - if (value == 'DEFAULT') { + if (value.code == 'DEFAULT') { form.control(_idNumberKey).value = IdGen.i.identifier.toString(); } else { @@ -395,251 +397,251 @@ class IndividualDetailsPageState extends LocalizedState { } }); }, - isRequired: true, - validationMessage: localizations.translate( - i18.common.corecommonRequired, - ), - emptyText: localizations + emptyItemText: localizations .translate(i18.common.noMatchFound), + errorMessage: form.control(_idTypeKey).hasErrors + ? localizations.translate( + i18.common.corecommonRequired, + ):null, ), - if (form.control(_idTypeKey).value != 'DEFAULT') - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ReactiveFormConsumer( - builder: (context, formGroup, child) { - return DigitTextFormField( + ), + ), + if (form.control(_idTypeKey).value != 'DEFAULT') + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ReactiveFormConsumer( + builder: (context, formGroup, child) { + return ReactiveWrapperField( + formControlName: _idNumberKey, + validationMessages: { + 'required': (object) => + localizations.translate( + '${i18.individualDetails.idNumberLabelText}_IS_REQUIRED', + ), + }, + builder: (field)=> LabeledField( + label: localizations.translate( + i18.individualDetails.idNumberLabelText, + ), + isRequired: form.control(_idNumberKey).validators.isNotEmpty, + child: DigitTextFormInput( readOnly: - form.control(_idTypeKey).value == - 'DEFAULT', - isRequired: form - .control(_idNumberKey) - .validators - .isNotEmpty, - formControlName: _idNumberKey, - label: localizations.translate( - i18.individualDetails.idNumberLabelText, - ), - validationMessages: { - 'required': (object) => - localizations.translate( - '${i18.individualDetails.idNumberLabelText}_IS_REQUIRED', - ), + form.control(_idTypeKey).value == + 'DEFAULT', + initialValue: form.control(_idTypeKey).value, + onChange: (value){ + form.control(_idTypeKey).value=value; }, - padding: const EdgeInsets.only( - top: kPadding * 2, - left: kPadding / 2, - right: kPadding / 2, - ), - ); - }, - ), - const SizedBox(height: 4), - ], - ), - if (form.control(_idTypeKey).value == 'DEFAULT') - const SizedBox( - height: kPadding, - ), - individualDetailsShowcaseData.dateOfBirth.buildWith( - child: DigitDobPicker( - datePickerFormControl: _dobKey, - datePickerLabel: localizations.translate( - i18.individualDetails.dobLabelText, - ), - ageFieldLabel: localizations.translate( - i18.individualDetails.ageLabelText, - ), - yearsHintLabel: localizations.translate( - i18.individualDetails.yearsHintText, - ), - monthsHintLabel: localizations.translate( - i18.individualDetails.monthsHintText, - ), - separatorLabel: localizations.translate( - i18.individualDetails.separatorLabelText, - ), - yearsAndMonthsErrMsg: localizations.translate( - i18.individualDetails.yearsAndMonthsErrorText, - ), - initialDate: before150Years, - onChangeOfFormControl: (formControl) { - // Handle changes to the control's value here - final value = formControl.value; - if (value == null) { - formControl.setErrors({'': true}); - } else { - DigitDOBAge age = - DigitDateUtils.calculateAge(value); - if ((age.years == 0 && age.months == 0) || - age.months > 11 || - (age.years >= 150 && age.months >= 0)) { - formControl.setErrors({'': true}); - } else { - formControl.removeError(''); - } - } + errorMessage: field.errorText, + ), + ), + ); }, - cancelText: localizations - .translate(i18.common.coreCommonCancel), - confirmText: localizations - .translate(i18.common.coreCommonOk), ), + const SizedBox(height: 4), + ], + ), + if (form.control(_idTypeKey).value == 'DEFAULT') + const SizedBox( + height: spacer2, + ), + individualDetailsShowcaseData.dateOfBirth.buildWith( + child: DigitDobPicker( + datePickerFormControl: _dobKey, + datePickerLabel: localizations.translate( + i18.individualDetails.dobLabelText, ), - SelectionBox( - isRequired: true, - title: localizations.translate( - i18.individualDetails.genderLabelText, - ), - allowMultipleSelection: false, - width: 126, - initialSelection: - form.control(_genderKey).value != null - ? [form.control(_genderKey).value] - : [], - options: RegistrationDeliverySingleton() - .genderOptions! - .map( - (e) => e, - ) - .toList(), - onSelectionChanged: (value) { + ageFieldLabel: localizations.translate( + i18.individualDetails.ageLabelText, + ), + yearsHintLabel: localizations.translate( + i18.individualDetails.yearsHintText, + ), + monthsHintLabel: localizations.translate( + i18.individualDetails.monthsHintText, + ), + separatorLabel: localizations.translate( + i18.individualDetails.separatorLabelText, + ), + yearsAndMonthsErrMsg: localizations.translate( + i18.individualDetails.yearsAndMonthsErrorText, + ), + errorMessage: form.control(_dobKey).hasErrors? + localizations.translate(i18.common.corecommonRequired):null, + initialDate: before150Years, + onChangeOfFormControl: (value) { + if(value!=null){ setState(() { - if (value.isNotEmpty) { - form.control(_genderKey).value = value.first; - } else { - form.control(_genderKey).value = null; - setState(() { - form - .control(_genderKey) - .setErrors({'': true}); - }); - } + form.control(_dobKey).setErrors({'' : false}); }); - }, - valueMapper: (value) { - return localizations.translate(value); - }, - errorMessage: form.control(_genderKey).hasErrors - ? localizations - .translate(i18.common.corecommonRequired) - : null, - ), - ]), - individualDetailsShowcaseData.mobile.buildWith( - child: DigitTextFormField( - keyboardType: TextInputType.number, - formControlName: _mobileNumberKey, - maxLength: 10, + } + // Handle changes to the control's value here + form.control(_dobKey).value=value; + }, + cancelText: localizations + .translate(i18.common.coreCommonCancel), + confirmText: localizations + .translate(i18.common.coreCommonOk), + ), + ), + SelectionCard( + isRequired: true, + title: localizations.translate( + i18.individualDetails.genderLabelText, + ), + allowMultipleSelection: false, + width: 126, + initialSelection: + form.control(_genderKey).value != null + ? [form.control(_genderKey).value] + : [], + options: RegistrationDeliverySingleton() + .genderOptions! + .map( + (e) => e, + ) + .toList(), + onSelectionChanged: (value) { + setState(() { + if (value.isNotEmpty) { + form.control(_genderKey).value = value.first; + } else { + form.control(_genderKey).value = null; + setState(() { + form + .control(_genderKey) + .setErrors({'': true}); + }); + } + }); + }, + valueMapper: (value) { + return localizations.translate(value); + }, + errorMessage: form.control(_genderKey).hasErrors + ? localizations + .translate(i18.common.corecommonRequired) + : null, + ), + individualDetailsShowcaseData.mobile.buildWith( + child: ReactiveWrapperField( + formControlName: _mobileNumberKey, + validationMessages: { + 'maxLength': (object) => localizations.translate( + i18.individualDetails + .mobileNumberLengthValidationMessage), + 'minLength': (object) => localizations.translate( + i18.individualDetails + .mobileNumberLengthValidationMessage), + }, + builder: (field)=> LabeledField( label: localizations.translate( i18.individualDetails.mobileNumberLabelText, ), - validationMessages: { - 'maxLength': (object) => localizations.translate( - i18.individualDetails - .mobileNumberLengthValidationMessage), - 'minLength': (object) => localizations.translate( - i18.individualDetails - .mobileNumberLengthValidationMessage), - }, - inputFormatters: [ - FilteringTextInputFormatter.digitsOnly, - ], + child: DigitTextFormInput( + keyboardType: TextInputType.number, + maxLength: 10, + inputFormatters: [ + FilteringTextInputFormatter.digitsOnly, + ], + initialValue: form.control(_mobileNumberKey).value, + onChange: (value){ + form.control(_mobileNumberKey).value=value; + }, + ), ), ), - const SizedBox(height: 16), - if ((RegistrationDeliverySingleton().beneficiaryType == - BeneficiaryType.household && - widget.isHeadOfHousehold) || - (RegistrationDeliverySingleton().beneficiaryType == - BeneficiaryType.individual)) - BlocBuilder( - buildWhen: (p, c) { - return true; - }, - builder: (context, state) => state - .qrCodes.isNotEmpty - ? Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - SizedBox( - width: - MediaQuery.of(context).size.width / - 3, - child: Text( - localizations.translate( - i18.deliverIntervention.voucherCode, - ), - style: theme.textTheme.headlineSmall, - ), - ), - Flexible( - child: Text( - overflow: TextOverflow.ellipsis, - localizations - .translate(state.qrCodes.last), - ), - ), - Padding( - padding: const EdgeInsets.only( - bottom: kPadding * 2, - ), - child: IconButton( - color: theme.colorScheme.secondary, - icon: const Icon(Icons.edit), - onPressed: () { - Navigator.of(context).push( - //[TODO: Add the route to auto_route] - MaterialPageRoute( - builder: (context) => - const DigitScannerPage( - quantity: 1, - isGS1code: false, - singleValue: true, - isEditEnabled: true, - ), - settings: const RouteSettings( - name: '/qr-scanner'), - ), - ); - }, + ), + const SizedBox(height: 16), + if ((RegistrationDeliverySingleton().beneficiaryType == + BeneficiaryType.household && + widget.isHeadOfHousehold) || + (RegistrationDeliverySingleton().beneficiaryType == + BeneficiaryType.individual)) + BlocBuilder( + buildWhen: (p, c) { + return true; + }, + builder: (context, state) => state + .qrCodes.isNotEmpty + ? Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + SizedBox( + width: + MediaQuery.of(context).size.width / + 3, + child: Text( + localizations.translate( + i18.deliverIntervention.voucherCode, + ), + style: theme.textTheme.headlineSmall, + ), + ), + Flexible( + child: Text( + overflow: TextOverflow.ellipsis, + localizations + .translate(state.qrCodes.last), + ), + ), + Padding( + padding: const EdgeInsets.only( + bottom: spacer2 * 2, + ), + child: IconButton( + color: theme.colorScheme.secondary, + icon: const Icon(Icons.edit), + onPressed: () { + Navigator.of(context).push( + //[TODO: Add the route to auto_route] + MaterialPageRoute( + builder: (context) => + const DigitScannerPage( + quantity: 1, + isGS1code: false, + singleValue: true, + isEditEnabled: true, ), + settings: const RouteSettings( + name: '/qr-scanner'), ), - ], + ); + }, + ), + ), + ], - // ignore: no-empty-block - ) - : DigitOutlineIconButton( - buttonStyle: OutlinedButton.styleFrom( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.zero, - ), - ), - onPressed: () { - Navigator.of(context).push( - // [TODO: Add the route to auto_route] - MaterialPageRoute( - builder: (context) => - const DigitScannerPage( - quantity: 1, - isGS1code: false, - singleValue: true, - ), - settings: const RouteSettings( - name: '/qr-scanner'), - ), - ); - }, - icon: Icons.qr_code, - label: localizations.translate( - i18.individualDetails - .linkVoucherToIndividual, - ), + // ignore: no-empty-block + ) + : Button( + type: ButtonType.secondary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () { + Navigator.of(context).push( + // [TODO: Add the route to auto_route] + MaterialPageRoute( + builder: (context) => + const DigitScannerPage( + quantity: 1, + isGS1code: false, + singleValue: true, ), + settings: const RouteSettings( + name: '/qr-scanner'), + ), + ); + }, + prefixIcon: Icons.qr_code, + label: localizations.translate( + i18.individualDetails + .linkVoucherToIndividual, + ), ), - ], - ), + ),] ), ), ], @@ -651,10 +653,10 @@ class IndividualDetailsPageState extends LocalizedState { } IndividualModel _getIndividualModel( - BuildContext context, { - required FormGroup form, - IndividualModel? oldIndividual, - }) { + BuildContext context, { + required FormGroup form, + IndividualModel? oldIndividual, + }) { final dob = form.control(_dobKey).value as DateTime?; String? dobString; if (dob != null) { @@ -729,7 +731,7 @@ class IndividualDetailsPageState extends LocalizedState { gender: form.control(_genderKey).value == null ? null : Gender.values - .byName(form.control(_genderKey).value.toString().toLowerCase()), + .byName(form.control(_genderKey).value.toString().toLowerCase()), mobileNumber: form.control(_mobileNumberKey).value, dateOfBirth: dobString, identifiers: [ @@ -786,13 +788,13 @@ class IndividualDetailsPageState extends LocalizedState { _dobKey: FormControl( value: individual?.dateOfBirth != null ? DateFormat(Constants().dateFormat).parse( - individual!.dateOfBirth!, - ) + individual!.dateOfBirth!, + ) : null, ), _genderKey: FormControl(value: getGenderOptions(individual)), _mobileNumberKey: - FormControl(value: individual?.mobileNumber, validators: [ + FormControl(value: individual?.mobileNumber, validators: [ CustomValidator.validMobileNumber, CustomValidator.minPhoneNumValidation, Validators.maxLength(10) @@ -805,6 +807,6 @@ class IndividualDetailsPageState extends LocalizedState { return options?.map((e) => e).firstWhereOrNull( (element) => element.toLowerCase() == individual?.gender?.name, - ); + ); } } diff --git a/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart b/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart index 45a6b8e05..4a424945d 100644 --- a/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart +++ b/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart @@ -1,11 +1,13 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_data_model/models/entities/individual.dart'; +import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:registration_delivery/blocs/search_households/household_global_seach.dart'; import 'package:registration_delivery/blocs/search_households/individual_global_search.dart'; import 'package:registration_delivery/data/repositories/local/individual_global_search.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; +import 'package:location/location.dart'; import '../blocs/household_details/household_details.dart'; import '../blocs/search_households/search_bloc_common_wrapper.dart'; @@ -160,6 +162,9 @@ class RegistrationDeliveryWrapperPage extends StatelessWidget { BlocProvider( create: (_) => HouseholdDetailsBloc(const HouseholdDetailsState()), ), + BlocProvider( + create: (_)=>LocationBloc(location: Location()), + ), ], child: const AutoRouter(), ), From 0b7c5701759652d93e1a2165139b2c3b75778635 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Thu, 19 Sep 2024 10:34:39 +0530 Subject: [PATCH 114/241] Changed textchunk component to digittextblock --- .../pubspec.lock | 10 +- .../lib/pages/closed_household_details.dart | 6 +- packages/closed_household/pubspec.yaml | 1 - pubspec.lock | 107 +++++++++++------- 4 files changed, 72 insertions(+), 52 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 6bf88dcc1..135941228 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -544,7 +544,7 @@ packages: description: path: "flutter/digit-ui-components/digit_components" ref: enhancement-branch-flutter - resolved-ref: "210999335d0bc7f6a76ef3839132efcaa7e9957a" + resolved-ref: f2dc7a513fb8d58353dba027d017d054ffa41113 url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+6" @@ -712,10 +712,10 @@ packages: dependency: transitive description: name: firebase_core_platform_interface - sha256: f7d7180c7f99babd4b4c517754d41a09a4943a0f7a69b65c894ca5c68ba66315 + sha256: e30da58198a6d4b49d5bce4e852f985c32cb10db329ebef9473db2b9f09ce810 url: "https://pub.dev" source: hosted - version: "5.2.1" + version: "5.3.0" firebase_core_web: dependency: transitive description: @@ -1198,10 +1198,10 @@ packages: dependency: transitive description: name: hrk_batteries - sha256: "437324250c9b157654c9bb6c374170b8fa940f0f11dd9d019833e2731689272b" + sha256: "35bc2be10bb64284b04d3cd944c24eecf304747fc64b34e2d27ef1a3ac75ab49" url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "2.2.0" hrk_flutter_test_batteries: dependency: "direct dev" description: diff --git a/packages/closed_household/lib/pages/closed_household_details.dart b/packages/closed_household/lib/pages/closed_household_details.dart index 503ab35ef..c9e8809b0 100644 --- a/packages/closed_household/lib/pages/closed_household_details.dart +++ b/packages/closed_household/lib/pages/closed_household_details.dart @@ -4,7 +4,7 @@ import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/utils/component_utils.dart'; -import 'package:digit_ui_components/widgets/atoms/text_chunk.dart'; +import 'package:digit_ui_components/widgets/atoms/text_block.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -139,12 +139,12 @@ class ClosedHouseholdDetailsPageState SliverToBoxAdapter( child: DigitCard( children: [ - TextChunk( + DigitTextBlock( heading: localizations.translate( i18.closeHousehold.closeHouseHoldDetailLabel, ), headingStyle: theme.textTheme.displayMedium, - body: localizations.translate( + description: localizations.translate( i18.closeHousehold.closeHouseHoldDetailDescLabel, ), ), diff --git a/packages/closed_household/pubspec.yaml b/packages/closed_household/pubspec.yaml index 328e094e3..35f9d2b61 100644 --- a/packages/closed_household/pubspec.yaml +++ b/packages/closed_household/pubspec.yaml @@ -11,7 +11,6 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.1+1 digit_ui_components: 0.0.3-beta flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 diff --git a/pubspec.lock b/pubspec.lock index ca5589ec2..c7db529eb 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,18 +5,23 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" + sha256: "5aaf60d96c4cd00fe7f21594b5ad6a1b699c80a27420f8a837f4d68473ef09e3" url: "https://pub.dev" source: hosted - version: "67.0.0" + version: "68.0.0" + _macros: + dependency: transitive + description: dart + source: sdk + version: "0.1.0" analyzer: dependency: transitive description: name: analyzer - sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" + sha256: "21f1d3720fd1c70316399d5e2bccaebb415c434592d778cce8acb967b8578808" url: "https://pub.dev" source: hosted - version: "6.4.1" + version: "6.5.0" ansi_styles: dependency: transitive description: @@ -69,10 +74,10 @@ packages: dependency: transitive description: name: build_daemon - sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" + sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9" url: "https://pub.dev" source: hosted - version: "4.0.1" + version: "4.0.2" build_resolvers: dependency: transitive description: @@ -85,18 +90,18 @@ packages: dependency: "direct dev" description: name: build_runner - sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" url: "https://pub.dev" source: hosted - version: "2.4.9" + version: "2.4.11" build_runner_core: dependency: transitive description: name: build_runner_core - sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" + sha256: e3c79f69a64bdfcd8a776a3c28db4eb6e3fb5356d013ae5eb2e52007706d5dbe url: "https://pub.dev" source: hosted - version: "7.3.0" + version: "7.3.1" built_collection: dependency: transitive description: @@ -157,10 +162,10 @@ packages: dependency: transitive description: name: collection - sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf url: "https://pub.dev" source: hosted - version: "1.18.0" + version: "1.19.0" conventional_commit: dependency: transitive description: @@ -181,10 +186,10 @@ packages: dependency: transitive description: name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27 url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.5" dart_mappable: dependency: "direct main" description: @@ -197,10 +202,10 @@ packages: dependency: transitive description: name: dart_style - sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" + sha256: "7856d364b589d1f08986e140938578ed36ed948581fbc3bc9aef1805039ac5ab" url: "https://pub.dev" source: hosted - version: "2.3.6" + version: "2.3.7" file: dependency: transitive description: @@ -237,18 +242,18 @@ packages: dependency: transitive description: name: graphs - sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 + sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" http: dependency: transitive description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -261,10 +266,10 @@ packages: dependency: transitive description: name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + sha256: "40f592dd352890c3b60fec1b68e786cefb9603e05ff303dbc4dda49b304ecdf4" url: "https://pub.dev" source: hosted - version: "4.0.2" + version: "4.1.0" io: dependency: transitive description: @@ -297,6 +302,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" + macros: + dependency: transitive + description: + name: macros + sha256: "12e8a9842b5a7390de7a781ec63d793527582398d16ea26c60fed58833c9ae79" + url: "https://pub.dev" + source: hosted + version: "0.1.0-main.0" matcher: dependency: transitive description: @@ -325,10 +338,10 @@ packages: dependency: transitive description: name: mime - sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.6" mustache_template: dependency: transitive description: @@ -357,10 +370,10 @@ packages: dependency: transitive description: name: platform - sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" + sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" url: "https://pub.dev" source: hosted - version: "3.1.4" + version: "3.1.5" pool: dependency: transitive description: @@ -413,34 +426,34 @@ packages: dependency: transitive description: name: pubspec_parse - sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 + sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 url: "https://pub.dev" source: hosted - version: "1.2.3" + version: "1.3.0" quiver: dependency: transitive description: name: quiver - sha256: b1c1ac5ce6688d77f65f3375a9abb9319b3cb32486bdc7a1e0fdf004d7ba4e47 + sha256: ea0b925899e64ecdfbf9c7becb60d5b50e706ade44a85b2363be2a22d88117d2 url: "https://pub.dev" source: hosted - version: "3.2.1" + version: "3.2.2" shelf: dependency: transitive description: name: shelf - sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 + sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 url: "https://pub.dev" source: hosted - version: "1.4.1" + version: "1.4.2" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" + sha256: "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "2.0.0" source_span: dependency: transitive description: @@ -477,10 +490,10 @@ packages: dependency: transitive description: name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.3.0" term_glyph: dependency: transitive description: @@ -493,10 +506,10 @@ packages: dependency: transitive description: name: test_api - sha256: "2419f20b0c8677b2d67c8ac4d1ac7372d862dc6c460cdbb052b40155408cd794" + sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c" url: "https://pub.dev" source: hosted - version: "0.7.1" + version: "0.7.3" timing: dependency: transitive description: @@ -541,18 +554,26 @@ packages: dependency: transitive description: name: web - sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05" + sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + web_socket: + dependency: transitive + description: + name: web_socket + sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83" url: "https://pub.dev" source: hosted - version: "0.4.2" + version: "0.1.6" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: "939ab60734a4f8fa95feacb55804fa278de28bdeef38e616dc08e44a84adea23" + sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f" url: "https://pub.dev" source: hosted - version: "2.4.3" + version: "3.0.1" yaml: dependency: transitive description: @@ -570,4 +591,4 @@ packages: source: hosted version: "2.2.1" sdks: - dart: ">=3.2.0 <4.0.0" + dart: ">=3.4.0 <4.0.0" From 81d7eade1d843ff189027e7a69b2db71849ff03e Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Thu, 19 Sep 2024 14:24:08 +0530 Subject: [PATCH 115/241] beneficiary pages component updated --- .../beneficiary/beneficiary_checklist.dart | 229 ++-- .../beneficiary/beneficiary_details.dart | 393 ++++--- .../beneficiary/deliver_intervention.dart | 1022 ++++++++--------- .../beneficiary/delivery_summary_page.dart | 614 +++++----- .../pages/beneficiary/dose_administered.dart | 146 ++- .../pages/beneficiary/facility_selection.dart | 45 +- .../pages/beneficiary/household_overview.dart | 216 ++-- .../record_past_delivery_details.dart | 341 +++--- .../pages/beneficiary/refer_beneficiary.dart | 275 +++-- .../pages/beneficiary/refused_delivery.dart | 204 ++-- .../lib/pages/beneficiary/side_effects.dart | 487 ++++---- .../beneficiary_acknowledgement.dart | 11 +- .../individual_details.dart | 7 +- .../lib/pages/reason_for_deletion.dart | 107 +- .../lib/pages/search_beneficiary.dart | 391 +++---- .../lib/pages/summary_page.dart | 225 ++-- 16 files changed, 2337 insertions(+), 2376 deletions(-) diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart index 8a1980d7a..6bc734bb9 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart @@ -1,11 +1,13 @@ import 'dart:math'; import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/utils/date_utils.dart'; -import 'package:digit_components/widgets/atoms/digit_toaster.dart'; -import 'package:digit_components/widgets/atoms/selection_card.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/utils/date_utils.dart'; +import 'package:digit_ui_components/widgets/atoms/selection_card.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -60,6 +62,7 @@ class _BeneficiaryChecklistPageState @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); return PopScope( canPop: false, @@ -101,11 +104,16 @@ class _BeneficiaryChecklistPageState ]), enableFixedButton: true, footer: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), + margin: const EdgeInsets.only(top: spacer2), padding: - const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: DigitElevatedButton( - onPressed: () async { + const EdgeInsets.all(spacer2), + children: [ + Button( + label: localizations.translate(i18.common.coreCommonSubmit), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () async { // TODO: Submit checklist final router = context.router; submitTriggered = true; @@ -208,58 +216,58 @@ class _BeneficiaryChecklistPageState ), ); - DigitDialog.show( - context, - options: DigitDialogOptions( - titleText: localizations.translate(i18 + showPopup( + context: context, + title: localizations.translate(i18 .deliverIntervention .beneficiaryChecklistDialogTitle), - titlePadding: const EdgeInsets.only(top: kPadding), - barrierDismissible: false, - enableRecordPast: true, - dialogPadding: const EdgeInsets.fromLTRB( - kPadding, - kPadding, - kPadding, - 0, - ), - contentPadding: EdgeInsets.zero, - primaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonYes, - ), - action: (ctx) { - Navigator.of(ctx).pop(); - ctx.router.push( - DeliverInterventionRoute(), - ); - }, - ), - secondaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonNo, - ), - action: (ctx) { - Navigator.of(ctx).pop(); - ctx.router.push( - RefusedDeliveryRoute(), - ); - }, + type: PopUpType.simple, + actions: [ + Button( + label: localizations.translate( + i18.common.coreCommonYes, + ), + onPressed: () { + context.router.push( + DeliverInterventionRoute(), + ); + Navigator.of( + context, + rootNavigator: true + ).pop(); + }, + type: ButtonType.primary, + size: ButtonSize.large ), - ), + Button( + label: localizations.translate( + i18.common.coreCommonNo, + ), + onPressed: () { + context.router.push( + RefusedDeliveryRoute(), + ); + Navigator.of( + context, + rootNavigator: true, + ).pop(); + }, + type: ButtonType.secondary, + size: ButtonSize.large + ) + ] ); + }, - child: Text( - localizations.translate(i18.common.coreCommonSubmit), - ), ), + ] ), children: [ Form( key: checklistFormKey, //assigning key to form child: DigitCard( padding: EdgeInsets.zero, - child: Column(children: [ + children: [ ...initialAttributes!.map(( e, ) { @@ -268,17 +276,8 @@ class _BeneficiaryChecklistPageState return Column(children: [ if (e.dataType == 'String' && !(e.code ?? '').contains('.')) ...[ - DigitTextField( - onChange: (value) { - checklistFormKey.currentState?.validate(); - }, - isRequired: false, - controller: controller[index], - inputFormatter: [ - FilteringTextInputFormatter.allow(RegExp( - "[a-zA-Z0-9]", - )), - ], + FormField( + autovalidateMode: AutovalidateMode.onUserInteraction, validator: (value) { if (((value == null || value == '') && e.required == true)) { @@ -289,28 +288,36 @@ class _BeneficiaryChecklistPageState return (RegExp(e.regex!).hasMatch(value!)) ? null : localizations - .translate("${e.code}_REGEX"); + .translate("${e.code}_REGEX"); } return null; }, - label: localizations.translate( - '${selectedServiceDefinition?.code}.${e.code}', + builder: (field)=> LabeledField( + label: localizations.translate( + '${selectedServiceDefinition?.code}.${e.code}', + ), + isRequired: e.required??false, + child: DigitTextFormInput( + onChange: (value) { + field.didChange(value); + controller[index].text=value; + checklistFormKey.currentState?.validate(); + }, + isRequired: e.required ?? false, + controller: controller[index], + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp( + "[a-zA-Z0-9]", + )), + ], + ), ), ), ] else if (e.dataType == 'Number' && !(e.code ?? '').contains('.')) ...[ - DigitTextField( - onChange: (value) { - checklistFormKey.currentState?.validate(); - }, - textStyle: theme.textTheme.headlineMedium, - textInputType: TextInputType.number, - inputFormatter: [ - FilteringTextInputFormatter.allow(RegExp( - "[0-9]", - )), - ], + FormField( + autovalidateMode: AutovalidateMode.onUserInteraction, validator: (value) { if (((value == null || value == '') && e.required == true)) { @@ -322,15 +329,31 @@ class _BeneficiaryChecklistPageState return (RegExp(e.regex!).hasMatch(value!)) ? null : localizations - .translate("${e.code}_REGEX"); + .translate("${e.code}_REGEX"); } return null; }, - controller: controller[index], - label: '${localizations.translate( - '${value.selectedServiceDefinition?.code}.${e.code}', - ).trim()} ${e.required == true ? '*' : ''}', + builder: (field)=> LabeledField( + label: localizations.translate( + '${value.selectedServiceDefinition?.code}.${e.code}', + ).trim(), + isRequired: e.required??false, + child: DigitTextFormInput( + onChange: (value) { + field.didChange(value); + controller[index].text=value; + checklistFormKey.currentState?.validate(); + }, + keyboardType: TextInputType.number, + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp( + "[0-9]", + )), + ], + controller: controller[index], + ), + ), ), ] else if (e.dataType == 'MultiValueList' && !(e.code ?? '').contains('.')) ...[ @@ -344,7 +367,7 @@ class _BeneficiaryChecklistPageState '${localizations.translate( '${selectedServiceDefinition?.code}.${e.code}', )} ${e.required == true ? '*' : ''}', - style: theme.textTheme.headlineSmall, + style: textTheme.headingM, ), ], ), @@ -354,7 +377,7 @@ class _BeneficiaryChecklistPageState builder: (context, state) { return Column( children: e.values! - .map((e) => DigitCheckboxTile( + .map((e) => DigitCheckbox( label: e, value: controller[index] .text @@ -397,29 +420,17 @@ class _BeneficiaryChecklistPageState ] else if (e.dataType == 'Boolean') ...[ if (!(e.code ?? '').contains('.')) DigitCard( - child: Column( - children: [ - Align( - alignment: Alignment.topLeft, - child: Padding( - padding: EdgeInsets.zero, - child: Column( - children: [ - Text( - '${localizations.translate( - '${selectedServiceDefinition?.code}.${e.code}', - )} ${e.required == true ? '*' : ''}', - style: theme - .textTheme.headlineSmall, - ), - ], - ), - ), - ), - BlocBuilder( - builder: (context, state) { - return SelectionBox( - //label: e, + children: [ + BlocBuilder( + builder: (context, state) { + return Align( + alignment: Alignment.topLeft, + child: SelectionCard( + // label: e, + title: localizations.translate( + '${selectedServiceDefinition?.code}.${e.code}', + ), + isRequired: e.required??false, allowMultipleSelection: false, width: 110, valueMapper: (value) { @@ -475,11 +486,11 @@ class _BeneficiaryChecklistPageState ); } }, - ); - }, - ), - ], - ), + ), + ); + }, + ), + ] ), ], ]); @@ -487,7 +498,7 @@ class _BeneficiaryChecklistPageState const SizedBox( height: 15, ), - ]), + ] ), ), ], diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart index e0543da70..dc73803aa 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart @@ -1,8 +1,11 @@ import 'package:auto_route/auto_route.dart'; import 'package:collection/collection.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/utils/date_utils.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/utils/date_utils.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:intl/intl.dart'; @@ -19,6 +22,7 @@ import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; import '../../widgets/component_wrapper/product_variant_bloc_wrapper.dart'; import '../../widgets/localized.dart'; +import '../../widgets/table_card/table_card.dart'; import 'widgets/record_delivery_cycle.dart'; @RoutePage() @@ -45,6 +49,7 @@ class BeneficiaryDetailsPageState final theme = Theme.of(context); final localizations = RegistrationDeliveryLocalization.of(context); final router = context.router; + final textTheme = theme.digitTextTheme(context); return ProductVariantBlocWrapper( child: BlocBuilder( @@ -141,11 +146,17 @@ class BeneficiaryDetailsPageState return cycles != null && cycles.isNotEmpty ? deliverState.hasCycleArrived ? DigitCard( - margin: const EdgeInsets.fromLTRB( - 0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB( - kPadding, 0, kPadding, 0), - child: DigitElevatedButton( + margin: const EdgeInsets.only( + top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [Button( + label: '${localizations.translate(i18.beneficiaryDetails.recordCycle)} ' + '${(deliverState.cycle == 0 ? (deliverState.cycle + 1) + : deliverState.cycle).toString()} ${localizations.translate(i18.deliverIntervention.dose)} ' + '${(deliverState.dose).toString()}', + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, onPressed: () async { final selectedCycle = cycles.firstWhereOrNull((c) => @@ -167,222 +178,203 @@ class BeneficiaryDetailsPageState state.selectedIndividual, ), ); - await DigitDialog.show( - context, - options: DigitDialogOptions( - titlePadding: - const EdgeInsets.fromLTRB( - kPadding, - 0, - kPadding, - 0, - ), - titleText: localizations - .translate(i18 - .beneficiaryDetails - .resourcesTobeDelivered), - content: buildTableContent( - deliverState, - context, - variant, - state.selectedIndividual, - state.householdMemberWrapper.household - ), - barrierDismissible: true, - primaryAction: - DigitDialogActions( - label: localizations - .translate(i18 - .beneficiaryDetails - .ctaProceed), - action: (ctx) { - Navigator.of(ctx).pop(); - router.push( - DeliverInterventionRoute(), - ); - }, + showPopup( + context: context, + title: localizations.translate(i18.beneficiaryDetails.resourcesTobeDelivered), + type: PopUpType.simple, + additionalWidgets: [ + buildTableContent( + deliverState, + context, + variant, + state.selectedIndividual, + state.householdMemberWrapper.household + ), + ], + actions: [ + Button( + label: localizations.translate(i18.beneficiaryDetails.ctaProceed), + onPressed: () { + Navigator.of( + context, + rootNavigator: true, + ).pop(); + router.push( + DeliverInterventionRoute(), + ); + }, + type: ButtonType.primary, + size: ButtonSize.large ), - ), + ] ); } }, - child: Center( - child: Text( - '${localizations.translate(i18.beneficiaryDetails.recordCycle)} ${(deliverState.cycle == 0 ? (deliverState.cycle + 1) : deliverState.cycle).toString()} ${localizations.translate(i18.deliverIntervention.dose)} ${(deliverState.dose).toString()}', - ), - ), - ), + ),] ) : const SizedBox.shrink() : DigitCard( margin: - const EdgeInsets.only(top: kPadding), - padding: const EdgeInsets.fromLTRB( - kPadding, 0, kPadding, 0), - child: DigitElevatedButton( - child: Center( - child: Text(localizations.translate(i18 - .householdOverView - .householdOverViewActionText)), - ), + const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all( + spacer2), + children: [Button( + label: localizations.translate(i18.householdOverView + .householdOverViewActionText), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, onPressed: () { context.router .push(DeliverInterventionRoute()); }, - ), + ),] ); }, ), children: [ DigitCard( - child: Column( - children: [ - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Flexible( - child: Text( - localizations.translate(i18 - .beneficiaryDetails - .beneficiarysDetailsLabelText), - style: theme.textTheme.displayMedium, - ), - ), - ], - ), - DigitTableCard( - element: { - localizations.translate( + margin: const EdgeInsets.only( + top: spacer2,bottom: spacer2 + ), + children: [ + Text( + localizations.translate(i18 + .beneficiaryDetails + .beneficiarysDetailsLabelText), + style: textTheme.headingXl, + ), + DigitTableCard( + element: { + localizations.translate( + RegistrationDeliverySingleton() + .beneficiaryType != + BeneficiaryType.individual + ? i18.householdOverView + .householdOverViewHouseholdHeadLabel + : i18.common.coreCommonName, + ): RegistrationDeliverySingleton() + .beneficiaryType != + BeneficiaryType.individual + ? householdMemberWrapper + .headOfHousehold?.name?.givenName + : state.selectedIndividual?.name + ?.givenName ?? + '--', + localizations.translate( + i18.deliverIntervention.idTypeText, + ): () { + final identifiers = RegistrationDeliverySingleton() .beneficiaryType != BeneficiaryType.individual - ? i18.householdOverView - .householdOverViewHouseholdHeadLabel - : i18.common.coreCommonName, - ): RegistrationDeliverySingleton() - .beneficiaryType != - BeneficiaryType.individual - ? householdMemberWrapper - .headOfHousehold?.name?.givenName - : state.selectedIndividual?.name - ?.givenName ?? - '--', - localizations.translate( - i18.deliverIntervention.idTypeText, - ): () { - final identifiers = - RegistrationDeliverySingleton() - .beneficiaryType != - BeneficiaryType.individual - ? householdMemberWrapper - .headOfHousehold?.identifiers - : state.selectedIndividual - ?.identifiers; - if (identifiers == null || - identifiers.isEmpty) { - return '--'; - } + ? householdMemberWrapper + .headOfHousehold?.identifiers + : state.selectedIndividual + ?.identifiers; + if (identifiers == null || + identifiers.isEmpty) { + return '--'; + } - return localizations.translate( - identifiers.first.identifierType ?? - '--'); - }(), - localizations.translate( - i18.deliverIntervention.idNumberText, - ): () { - final identifiers = - RegistrationDeliverySingleton() - .beneficiaryType != - BeneficiaryType.individual - ? householdMemberWrapper - .headOfHousehold?.identifiers - : state.selectedIndividual - ?.identifiers; - if (identifiers == null || - identifiers.isEmpty) { - return '--'; - } + return localizations.translate( + identifiers.first.identifierType ?? + '--'); + }(), + localizations.translate( + i18.deliverIntervention.idNumberText, + ): () { + final identifiers = + RegistrationDeliverySingleton() + .beneficiaryType != + BeneficiaryType.individual + ? householdMemberWrapper + .headOfHousehold?.identifiers + : state.selectedIndividual + ?.identifiers; + if (identifiers == null || + identifiers.isEmpty) { + return '--'; + } - return maskString(identifiers - .first.identifierId - .toString()) ?? - '--'; - }(), - localizations.translate( - i18.common.coreCommonAge, - ): () { - final dob = - RegistrationDeliverySingleton() - .beneficiaryType != - BeneficiaryType.individual - ? householdMemberWrapper - .headOfHousehold?.dateOfBirth - : state.selectedIndividual - ?.dateOfBirth; - if (dob == null || dob.isEmpty) { - return '--'; - } + return maskString(identifiers + .first.identifierId + .toString()) ?? + '--'; + }(), + localizations.translate( + i18.common.coreCommonAge, + ): () { + final dob = + RegistrationDeliverySingleton() + .beneficiaryType != + BeneficiaryType.individual + ? householdMemberWrapper + .headOfHousehold?.dateOfBirth + : state.selectedIndividual + ?.dateOfBirth; + if (dob == null || dob.isEmpty) { + return '--'; + } - final int years = - DigitDateUtils.calculateAge( - DigitDateUtils - .getFormattedDateToDateTime( - dob, - ) ?? - DateTime.now(), - ).years; - final int months = - DigitDateUtils.calculateAge( - DigitDateUtils - .getFormattedDateToDateTime( - dob, - ) ?? - DateTime.now(), - ).months; + final int years = + DigitDateUtils.calculateAge( + DigitDateUtils + .getFormattedDateToDateTime( + dob, + ) ?? + DateTime.now(), + ).years; + final int months = + DigitDateUtils.calculateAge( + DigitDateUtils + .getFormattedDateToDateTime( + dob, + ) ?? + DateTime.now(), + ).months; - return "$years ${localizations.translate(i18.memberCard.deliverDetailsYearText)} ${localizations.translate(months.toString().toUpperCase())} ${localizations.translate(i18.memberCard.deliverDetailsMonthsText)}"; - }(), - localizations.translate( - i18.common.coreCommonGender, - ): RegistrationDeliverySingleton() - .beneficiaryType != - BeneficiaryType.individual - ? householdMemberWrapper.headOfHousehold - ?.gender?.name.sentenceCase - : state.selectedIndividual?.gender?.name - .sentenceCase ?? - '--', - localizations.translate( - i18.common.coreCommonMobileNumber, - ): RegistrationDeliverySingleton() - .beneficiaryType != - BeneficiaryType.individual - ? householdMemberWrapper - .headOfHousehold?.mobileNumber - : state.selectedIndividual - ?.mobileNumber ?? - '--', - localizations.translate(i18 - .deliverIntervention - .dateOfRegistrationLabel): () { - final date = projectBeneficiary - ?.first?.dateOfRegistration; + return "$years ${localizations.translate(i18.memberCard.deliverDetailsYearText)} ${localizations.translate(months.toString().toUpperCase())} ${localizations.translate(i18.memberCard.deliverDetailsMonthsText)}"; + }(), + localizations.translate( + i18.common.coreCommonGender, + ): RegistrationDeliverySingleton() + .beneficiaryType != + BeneficiaryType.individual + ? householdMemberWrapper.headOfHousehold + ?.gender?.name.sentenceCase + : state.selectedIndividual?.gender?.name + .sentenceCase ?? + '--', + localizations.translate( + i18.common.coreCommonMobileNumber, + ): RegistrationDeliverySingleton() + .beneficiaryType != + BeneficiaryType.individual + ? householdMemberWrapper + .headOfHousehold?.mobileNumber + : state.selectedIndividual + ?.mobileNumber ?? + '--', + localizations.translate(i18 + .deliverIntervention + .dateOfRegistrationLabel): () { + final date = projectBeneficiary + ?.first?.dateOfRegistration; - final registrationDate = - DateTime.fromMillisecondsSinceEpoch( - date ?? - DateTime.now() - .millisecondsSinceEpoch, - ); + final registrationDate = + DateTime.fromMillisecondsSinceEpoch( + date ?? + DateTime.now() + .millisecondsSinceEpoch, + ); - return DateFormat('dd MMMM yyyy') - .format(registrationDate); - }(), - }, - ), - ], + return DateFormat('dd MMMM yyyy') + .format(registrationDate); + }(), + }, ), + ] ), if ((RegistrationDeliverySingleton() .projectType @@ -390,9 +382,11 @@ class BeneficiaryDetailsPageState []) .isNotEmpty) DigitCard( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, + margin: const EdgeInsets.only( + top: spacer2,bottom: spacer2 + ), + children: [ + Column( children: RegistrationDeliverySingleton() .projectType ?.cycles != @@ -427,6 +421,7 @@ class BeneficiaryDetailsPageState ] : [], ), + ] ) ], ), diff --git a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart index a8f8f6bd6..c066ce8bd 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart @@ -1,13 +1,16 @@ import 'package:auto_route/auto_route.dart'; import 'package:collection/collection.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/atoms/digit_stepper.dart'; -import 'package:digit_components/widgets/atoms/digit_toaster.dart'; -import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/utils/component_utils.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_stepper.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:intl/intl.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:registration_delivery/models/entities/deliver_strategy_type.dart'; import 'package:registration_delivery/registration_delivery.dart'; @@ -74,32 +77,32 @@ class DeliverInterventionPageState final lat = locationState.latitude; final long = locationState.longitude; context.read().add( - DeliverInterventionSubmitEvent( - task: _getTaskModel( - context, - form: form, - oldTask: RegistrationDeliverySingleton().beneficiaryType == - BeneficiaryType.household - ? deliverInterventionState.tasks?.last - : null, - projectBeneficiaryClientReferenceId: - projectBeneficiary.clientReferenceId, - dose: deliverInterventionState.dose, - cycle: deliverInterventionState.cycle, - deliveryStrategy: DeliverStrategyType.direct.toValue(), - address: householdMember.members?.first.address?.first, - latitude: lat, - longitude: long, - ), - isEditing: (deliverInterventionState.tasks ?? []).isNotEmpty && - RegistrationDeliverySingleton().beneficiaryType == - BeneficiaryType.household - ? true - : false, - boundaryModel: RegistrationDeliverySingleton().boundary!, - navigateToSummary: true, - householdMemberWrapper: householdMember), - ); + DeliverInterventionSubmitEvent( + task: _getTaskModel( + context, + form: form, + oldTask: RegistrationDeliverySingleton().beneficiaryType == + BeneficiaryType.household + ? deliverInterventionState.tasks?.last + : null, + projectBeneficiaryClientReferenceId: + projectBeneficiary.clientReferenceId, + dose: deliverInterventionState.dose, + cycle: deliverInterventionState.cycle, + deliveryStrategy: DeliverStrategyType.direct.toValue(), + address: householdMember.members?.first.address?.first, + latitude: lat, + longitude: long, + ), + isEditing: (deliverInterventionState.tasks ?? []).isNotEmpty && + RegistrationDeliverySingleton().beneficiaryType == + BeneficiaryType.household + ? true + : false, + boundaryModel: RegistrationDeliverySingleton().boundary!, + navigateToSummary: true, + householdMemberWrapper: householdMember), + ); context.router.push(DeliverySummaryRoute()); } @@ -111,14 +114,15 @@ class DeliverInterventionPageState HouseholdMemberWrapper householdMember, ProjectBeneficiaryModel projectBeneficiary) { if (context.mounted) { - DigitComponentsUtils().showLocationCapturingDialog( - context, - localizations.translate(i18.common.locationCapturing), - DigitSyncDialogType.inProgress); + DigitComponentsUtils.showDialog( + context, + localizations.translate(i18.common.locationCapturing), + DialogType.inProgress, + ); Future.delayed(const Duration(seconds: 2), () { // After delay, hide the initial dialog - DigitComponentsUtils().hideDialog(context); + DigitComponentsUtils.hideDialog(context); handleCapturedLocationState( locationState, context, @@ -133,13 +137,13 @@ class DeliverInterventionPageState @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); - List generateSteps(int numberOfDoses) { + List generateSteps(int numberOfDoses) { return List.generate(numberOfDoses, (index) { - return StepsModel( + return StepperData( title: - '${localizations.translate(i18.deliverIntervention.dose)}${index + 1}', - number: (index + 1).toString(), + '${localizations.translate(i18.deliverIntervention.dose)}${index + 1}', ); }); } @@ -150,447 +154,373 @@ class DeliverInterventionPageState final householdMemberWrapper = state.householdMemberWrapper; final projectBeneficiary = - RegistrationDeliverySingleton().beneficiaryType != - BeneficiaryType.individual - ? [householdMemberWrapper.projectBeneficiaries!.first] - : householdMemberWrapper.projectBeneficiaries - ?.where( - (element) => - element.beneficiaryClientReferenceId == - state.selectedIndividual?.clientReferenceId, - ) - .toList(); + RegistrationDeliverySingleton().beneficiaryType != + BeneficiaryType.individual + ? [householdMemberWrapper.projectBeneficiaries!.first] + : householdMemberWrapper.projectBeneficiaries + ?.where( + (element) => + element.beneficiaryClientReferenceId == + state.selectedIndividual?.clientReferenceId, + ) + .toList(); return Scaffold( body: state.loading ? const Center(child: CircularProgressIndicator()) : BlocBuilder( - builder: (context, deliveryInterventionState) { - List? productVariants = - RegistrationDeliverySingleton() - .selectedProject - ?.additionalDetails - ?.projectType - ?.cycles - ?.isNotEmpty == - true - ? (fetchProductVariant( - RegistrationDeliverySingleton() - .selectedProject - ?.additionalDetails - ?.projectType - ?.cycles![ - deliveryInterventionState - .cycle - - 1] - .deliveries?[ - deliveryInterventionState.dose - 1], - state.selectedIndividual, - state.householdMemberWrapper.household) - ?.productVariants) - : RegistrationDeliverySingleton() - .selectedProject - ?.additionalDetails - ?.projectType - ?.resources - ?.map((r) => DeliveryProductVariant( - productVariantId: r.productVariantId)) - .toList(); - - final int numberOfDoses = (RegistrationDeliverySingleton() - .projectType - ?.cycles - ?.isNotEmpty == - true) - ? (RegistrationDeliverySingleton() - .projectType - ?.cycles?[deliveryInterventionState.cycle - 1] - .deliveries - ?.length) ?? - 0 - : 0; - - final steps = generateSteps(numberOfDoses); - if ((productVariants ?? []).isEmpty && context.mounted) { - SchedulerBinding.instance.addPostFrameCallback((_) { - DigitToast.show( + DeliverInterventionState>( + builder: (context, deliveryInterventionState) { + List? productVariants = + RegistrationDeliverySingleton() + .selectedProject + ?.additionalDetails + ?.projectType + ?.cycles + ?.isNotEmpty == + true + ? (fetchProductVariant( + RegistrationDeliverySingleton() + .selectedProject + ?.additionalDetails + ?.projectType + ?.cycles![ + deliveryInterventionState + .cycle - + 1] + .deliveries?[ + deliveryInterventionState.dose - 1], + state.selectedIndividual, + state.householdMemberWrapper.household) + ?.productVariants) + : RegistrationDeliverySingleton() + .selectedProject + ?.additionalDetails + ?.projectType + ?.resources + ?.map((r) => DeliveryProductVariant( + productVariantId: r.productVariantId)) + .toList(); + + final int numberOfDoses = (RegistrationDeliverySingleton() + .projectType + ?.cycles + ?.isNotEmpty == + true) + ? (RegistrationDeliverySingleton() + .projectType + ?.cycles?[deliveryInterventionState.cycle - 1] + .deliveries + ?.length) ?? + 0 + : 0; + + final steps = generateSteps(numberOfDoses); + if ((productVariants ?? []).isEmpty && context.mounted) { + SchedulerBinding.instance.addPostFrameCallback((_) { + Toast.showToast( + context, + message: localizations.translate( + i18.deliverIntervention + .checkForProductVariantsConfig, + ), + type: ToastType.error + ); + }); + } + + return BlocBuilder( + builder: (context, productState) { + return productState.maybeWhen( + orElse: () => const Offstage(), + fetched: (productVariantsValue) { + final variant = productState.whenOrNull( + fetched: (productVariants) { + return productVariants; + }, + ); + + return ReactiveFormBuilder( + form: () => buildForm( context, - options: DigitToastOptions( - localizations.translate( - i18.deliverIntervention - .checkForProductVariantsConfig, - ), - true, - theme, - ), - ); - }); - } - - return BlocBuilder( - builder: (context, productState) { - return productState.maybeWhen( - orElse: () => const Offstage(), - fetched: (productVariantsValue) { - final variant = productState.whenOrNull( - fetched: (productVariants) { - return productVariants; + productVariants, + variant, + ), + builder: (context, form, child) { + return ScrollableContent( + enableFixedButton: true, + footer: BlocBuilder( + builder: (context, state) { + return DigitCard( + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [ + ValueListenableBuilder( + valueListenable: clickedStatus, + builder: + (context, bool isClicked, _) { + return BlocBuilder( + builder: + (context, locationState) { + return Button( + label: localizations.translate( + i18.common + .coreCommonSubmit, + ), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + isDisabled: isClicked, + onPressed: () async { + final deliveredProducts = + ((form.control(_resourceDeliveredKey) + as FormArray) + .value + as List< + ProductVariantModel?>); + final hasEmptyResources = + hasEmptyOrNullResources( + deliveredProducts); + final hasZeroQuantity = + hasEmptyOrZeroQuantity( + form); + final hasDuplicates = + hasDuplicateResources( + deliveredProducts, + form); + + if (hasEmptyResources) { + Toast.showToast( + context, + message: localizations + .translate(i18 + .deliverIntervention + .resourceDeliveredValidation), + type: ToastType.error + ); + } else if (hasDuplicates) { + Toast.showToast( + context, + message: localizations + .translate(i18 + .deliverIntervention + .resourceDuplicateValidation), + type: ToastType.error + ); + } else if (hasZeroQuantity) { + Toast.showToast( + context, + message: localizations + .translate(i18 + .deliverIntervention + .resourceCannotBeZero), + type: ToastType.error + ); + } else { + context + .read< + LocationBloc>() + .add( + const LoadLocationEvent()); + handleLocationState( + locationState, + context, + deliveryInterventionState, + form, + householdMemberWrapper, + projectBeneficiary! + .first, + ); + } + }, + ); + }); + }, + ), + ] + ); }, - ); - - return ReactiveFormBuilder( - form: () => buildForm( - context, - productVariants, - variant, + ), + header: const Column(children: [ + BackNavigationHelpHeaderWidget( + showHelp: false, ), - builder: (context, form, child) { - return ScrollableContent( - enableFixedButton: true, - footer: BlocBuilder( - builder: (context, state) { - return DigitCard( - margin: const EdgeInsets.fromLTRB( - 0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB( - kPadding, 0, kPadding, 0), - child: ValueListenableBuilder( - valueListenable: clickedStatus, - builder: - (context, bool isClicked, _) { - return BlocBuilder( - builder: - (context, locationState) { - return DigitElevatedButton( - onPressed: isClicked - ? null - : () async { - final deliveredProducts = - ((form.control(_resourceDeliveredKey) - as FormArray) - .value - as List< - ProductVariantModel?>); - final hasEmptyResources = - hasEmptyOrNullResources( - deliveredProducts); - final hasZeroQuantity = - hasEmptyOrZeroQuantity( - form); - final hasDuplicates = - hasDuplicateResources( - deliveredProducts, - form); - - if (hasEmptyResources) { - await DigitToast - .show( - context, - options: - DigitToastOptions( - localizations - .translate(i18 - .deliverIntervention - .resourceDeliveredValidation), - true, - theme, - ), - ); - } else if (hasDuplicates) { - await DigitToast - .show( - context, - options: - DigitToastOptions( - localizations - .translate(i18 - .deliverIntervention - .resourceDuplicateValidation), - true, - theme, - ), - ); - } else if (hasZeroQuantity) { - await DigitToast - .show( - context, - options: - DigitToastOptions( - localizations - .translate(i18 - .deliverIntervention - .resourceCannotBeZero), - true, - theme, - ), - ); - } else { - context - .read< - LocationBloc>() - .add( - const LoadLocationEvent()); - handleLocationState( - locationState, - context, - deliveryInterventionState, - form, - householdMemberWrapper, - projectBeneficiary! - .first, - ); - } - }, - child: Center( - child: Text( - localizations.translate( - i18.common - .coreCommonSubmit, - ), - ), - ), - ); - }); - }, + ]), + children: [ + Column( + children: [ + DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [Text( + localizations.translate( + i18.deliverIntervention + .deliverInterventionLabel, ), - ); - }, - ), - header: const Column(children: [ - BackNavigationHelpHeaderWidget( - showHelp: false, - ), - ]), - children: [ - Column( - children: [ - DigitCard( - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - localizations.translate( - i18.deliverIntervention - .deliverInterventionLabel, - ), - style: theme - .textTheme.displayMedium, + style: textTheme.headingXl, + ), + if (RegistrationDeliverySingleton() + .beneficiaryType == + BeneficiaryType.individual) + ReactiveWrapperField( + formControlName: + _doseAdministrationKey, + builder: (field)=> LabeledField( + label: localizations + .translate(i18 + .deliverIntervention + .currentCycle), + child: DigitTextFormInput( + readOnly: true, + keyboardType: + TextInputType.number, + initialValue: form.control(_doseAdministrationKey).value, ), - if (RegistrationDeliverySingleton() - .beneficiaryType == - BeneficiaryType.individual) - DigitTextFormField( - readOnly: true, - formControlName: - _doseAdministrationKey, - keyboardType: - TextInputType.number, - label: localizations - .translate(i18 - .deliverIntervention - .currentCycle), - ), - if (numberOfDoses > 1) - DigitStepper( - activeStep: - deliveryInterventionState - .dose - - 1, - stepRadius: 12.5, - steps: steps, - maxStepReached: 3, - lineLength: (MediaQuery.of( - context) - .size - .width - - 12.5 * - 2 * - steps.length - - 50) / - (steps.length - 1), - ), - DigitDateFormPicker( - isEnabled: false, - formControlName: - _dateOfAdministrationKey, - label: - localizations.translate( - i18.householdDetails - .dateOfRegistrationLabel, - ), + ), + ), + if (numberOfDoses > 1) + DigitStepper( + activeIndex: deliveryInterventionState.dose - 1, + stepperList: steps, + inverted: true, + ), + + ReactiveWrapperField( + formControlName: + _dateOfAdministrationKey, + builder: (field)=> LabeledField( + label: + localizations.translate( + i18.householdDetails + .dateOfRegistrationLabel, + ), + child: DigitDateFormInput( + readOnly: true, + initialValue: DateFormat('dd MMM yyyy') + .format(form.control(_dateOfAdministrationKey).value).toString(), confirmText: - localizations.translate( + localizations.translate( i18.common.coreCommonOk, ), cancelText: - localizations.translate( + localizations.translate( i18.common.coreCommonCancel, ), - isRequired: false, - padding: - const EdgeInsets.only( - top: kPadding, - ), ), - ], - ), + ), + ),] + ), + DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [Text( + localizations.translate( + i18.deliverIntervention + .deliverInterventionResourceLabel, ), - DigitCard( - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - localizations.translate( - i18.deliverIntervention - .deliverInterventionResourceLabel, - ), - style: theme - .textTheme.headlineLarge, - ), - ..._controllers.map((e) => - ResourceBeneficiaryCard( - form: form, - cardIndex: _controllers - .indexOf(e), - totalItems: - _controllers.length, - onDelete: (index) { - (form.control( - _resourceDeliveredKey, - ) as FormArray) - .removeAt( - index, - ); - (form.control( - _quantityDistributedKey, - ) as FormArray) - .removeAt( - index, - ); - _controllers.removeAt( - index, - ); - setState(() { - _controllers; - }); - }, - )), - Center( - child: DigitIconButton( - onPressed: ((form.control(_resourceDeliveredKey) - as FormArray) - .value ?? - []) - .length < - (productVariants ?? - []) - .length - ? () async { - addController(form); - setState(() { - _controllers.add( - _controllers - .length, - ); - }); - } - : null, - icon: Icons.add_circle, - iconColor: ((form.control(_resourceDeliveredKey) - as FormArray) - .value ?? - []) - .length < - (productVariants ?? - []) - .length - ? theme.colorScheme - .secondary - : theme.colorScheme - .outline, - iconTextColor: ((form.control(_resourceDeliveredKey) - as FormArray) - .value ?? - []) - .length < - (productVariants ?? - []) - .length - ? theme.colorScheme - .secondary - : theme.colorScheme - .outline, - iconText: - localizations.translate( - i18.deliverIntervention - .resourceAddBeneficiary, - ), - ), - ), - ], + style: textTheme.headingXl, + ), + ..._controllers.map((e) => + ResourceBeneficiaryCard( + form: form, + cardIndex: _controllers + .indexOf(e), + totalItems: + _controllers.length, + onDelete: (index) { + (form.control( + _resourceDeliveredKey, + ) as FormArray) + .removeAt( + index, + ); + (form.control( + _quantityDistributedKey, + ) as FormArray) + .removeAt( + index, + ); + _controllers.removeAt( + index, + ); + setState(() { + _controllers; + }); + }, + )), + Center( + child: Button( + label: localizations.translate( + i18.deliverIntervention + .resourceAddBeneficiary, + ), + type: ButtonType.tertiary, + size: ButtonSize.medium, + isDisabled: ((form.control(_resourceDeliveredKey)as FormArray).value ?? + []).length <(productVariants ??[]).length ? false : true, + onPressed: () async { + addController(form); + setState(() { + _controllers.add( + _controllers + .length, + ); + }); + }, + prefixIcon: Icons.add_circle, ), + ),] + ), + DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ + Text( + localizations.translate( + i18.deliverIntervention + .deliveryCommentHeading, ), - DigitCard( - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - localizations.translate( - i18.deliverIntervention - .deliveryCommentHeading, - ), - style: theme - .textTheme.headlineLarge, - ), - DigitReactiveSearchDropdown< - String>( - label: - localizations.translate( - i18.deliverIntervention - .deliveryCommentLabel, - ), - form: form, - menuItems: - RegistrationDeliverySingleton() - .deliveryCommentOptions! - .map((e) { - return localizations - .translate(e); - }).toList() - ..sort((a, b) => - a.compareTo(b)), - formControlName: - _deliveryCommentKey, - valueMapper: (value) => value, - emptyText: localizations - .translate(i18 - .common.noMatchFound), - ) - ], + style: textTheme.headingXl, + ), + ReactiveWrapperField( + formControlName: _deliveryCommentKey, + builder: (field)=> LabeledField( + label: localizations.translate( + i18.deliverIntervention + .deliveryCommentLabel, + ), + child: DigitDropdown( + items: + RegistrationDeliverySingleton() + .deliveryCommentOptions! + .map((e) => + DropdownItem( + name: localizations + .translate(e), + code: e, + ) + ).toList() + ..sort((a, b) => a.code.compareTo(b.code)), + emptyItemText: localizations.translate(i18.common.noMatchFound), + onChange: (value){ + form.control(_deliveryCommentKey).value=value; + }, + ), ), - ), - ], - ), - ], - ); - }, - ); - }, - ); - }, - ); - }, - ), + ),] + ), + ], + ), + ], + ); + }, + ); + }, + ); + }, + ); + }, + ), ); }, ), @@ -606,7 +536,7 @@ class DeliverInterventionPageState bool hasEmptyOrZeroQuantity(FormGroup form) { final quantityDistributedArray = - form.control(_quantityDistributedKey) as FormArray; + form.control(_quantityDistributedKey) as FormArray; // Check if any quantity is zero or null return quantityDistributedArray.value?.any((e) => e == 0 || e == null) ?? @@ -635,7 +565,7 @@ class DeliverInterventionPageState bool hasDuplicateResources( List deliveredProducts, FormGroup form) { final resourceDeliveredArray = - form.control(_resourceDeliveredKey) as FormArray; + form.control(_resourceDeliveredKey) as FormArray; final Set uniqueProductIds = {}; for (int i = 0; i < resourceDeliveredArray.value!.length; i++) { @@ -654,17 +584,17 @@ class DeliverInterventionPageState // ignore: long-parameter-list TaskModel _getTaskModel( - BuildContext context, { - required FormGroup form, - TaskModel? oldTask, - int? cycle, - int? dose, - String? deliveryStrategy, - String? projectBeneficiaryClientReferenceId, - AddressModel? address, - double? latitude, - double? longitude, - }) { + BuildContext context, { + required FormGroup form, + TaskModel? oldTask, + int? cycle, + int? dose, + String? deliveryStrategy, + String? projectBeneficiaryClientReferenceId, + AddressModel? address, + double? latitude, + double? longitude, + }) { // Initialize task with oldTask if available, or create a new one var task = oldTask; var clientReferenceId = task?.clientReferenceId ?? IdGen.i.identifier; @@ -688,33 +618,33 @@ class DeliverInterventionPageState // Extract productvariantList from the form final productvariantList = - ((form.control(_resourceDeliveredKey) as FormArray).value - as List); + ((form.control(_resourceDeliveredKey) as FormArray).value + as List); final deliveryComment = form.control(_deliveryCommentKey).value as String?; // Update the task with information from the form and other context task = task.copyWith( projectId: RegistrationDeliverySingleton().projectId, resources: productvariantList .map((e) => TaskResourceModel( - taskclientReferenceId: clientReferenceId, - clientReferenceId: IdGen.i.identifier, - productVariantId: e?.id, - isDelivered: true, - taskId: task?.id, - tenantId: RegistrationDeliverySingleton().tenantId, - rowVersion: oldTask?.rowVersion ?? 1, - quantity: (((form.control(_quantityDistributedKey) as FormArray) - .value)?[productvariantList.indexOf(e)]) - .toString(), - clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton().loggedInUserUuid!, - createdTime: context.millisecondsSinceEpoch(), - ), - auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton().loggedInUserUuid!, - createdTime: context.millisecondsSinceEpoch(), - ), - )) + taskclientReferenceId: clientReferenceId, + clientReferenceId: IdGen.i.identifier, + productVariantId: e?.id, + isDelivered: true, + taskId: task?.id, + tenantId: RegistrationDeliverySingleton().tenantId, + rowVersion: oldTask?.rowVersion ?? 1, + quantity: (((form.control(_quantityDistributedKey) as FormArray) + .value)?[productvariantList.indexOf(e)]) + .toString(), + clientAuditDetails: ClientAuditDetails( + createdBy: RegistrationDeliverySingleton().loggedInUserUuid!, + createdTime: context.millisecondsSinceEpoch(), + ), + auditDetails: AuditDetails( + createdBy: RegistrationDeliverySingleton().loggedInUserUuid!, + createdTime: context.millisecondsSinceEpoch(), + ), + )) .toList(), address: address?.copyWith( relatedClientReferenceId: clientReferenceId, @@ -778,10 +708,10 @@ class DeliverInterventionPageState // This method builds a form used for delivering interventions. FormGroup buildForm( - BuildContext context, - List? productVariants, - List? variants, - ) { + BuildContext context, + List? productVariants, + List? variants, + ) { final bloc = context.read().state; final overViewbloc = context.read().state; _controllers.forEachIndexed((index, element) { @@ -791,24 +721,24 @@ class DeliverInterventionPageState // Add controllers for each product variant to the _controllers list. if (_controllers.isEmpty) { final int r = RegistrationDeliverySingleton() - .selectedProject - ?.additionalDetails - ?.projectType - ?.cycles == - null + .selectedProject + ?.additionalDetails + ?.projectType + ?.cycles == + null ? 1 : fetchProductVariant( - RegistrationDeliverySingleton() - .selectedProject - ?.additionalDetails - ?.projectType - ?.cycles![bloc.cycle - 1] - .deliveries?[bloc.dose - 1], - overViewbloc.selectedIndividual, - overViewbloc.householdMemberWrapper.household)! - .productVariants - ?.length ?? - 0; + RegistrationDeliverySingleton() + .selectedProject + ?.additionalDetails + ?.projectType + ?.cycles![bloc.cycle - 1] + .deliveries?[bloc.dose - 1], + overViewbloc.selectedIndividual, + overViewbloc.householdMemberWrapper.household)! + .productVariants + ?.length ?? + 0; _controllers.addAll(List.generate(r, (index) => index) .mapIndexed((index, element) => index)); @@ -817,57 +747,57 @@ class DeliverInterventionPageState return fb.group({ _doseAdministrationKey: FormControl( value: - '${localizations.translate(i18.deliverIntervention.cycle)} ${bloc.cycle == 0 ? (bloc.cycle + 1) : bloc.cycle}' - .toString(), + '${localizations.translate(i18.deliverIntervention.cycle)} ${bloc.cycle == 0 ? (bloc.cycle + 1) : bloc.cycle}' + .toString(), validators: [], ), _deliveryCommentKey: FormControl( value: RegistrationDeliverySingleton().beneficiaryType != - BeneficiaryType.individual + BeneficiaryType.individual ? (bloc.tasks?.last.additionalFields?.fields - .where((a) => - a.key == - AdditionalFieldsType.deliveryComment.toValue()) - .toList() ?? - []) - .isNotEmpty - ? bloc.tasks?.last.additionalFields?.fields - .where((a) => - a.key == AdditionalFieldsType.deliveryComment.toValue()) - .first - .value - : '' + .where((a) => + a.key == + AdditionalFieldsType.deliveryComment.toValue()) + .toList() ?? + []) + .isNotEmpty + ? bloc.tasks?.last.additionalFields?.fields + .where((a) => + a.key == AdditionalFieldsType.deliveryComment.toValue()) + .first + .value + : '' : null, validators: [], ), _dateOfAdministrationKey: - FormControl(value: DateTime.now(), validators: []), + FormControl(value: DateTime.now(), validators: []), _resourceDeliveredKey: FormArray( [ ..._controllers.map((e) => FormControl( - value: variants != null && variants.length < _controllers.length - ? variants.last - : (variants != null && - _controllers.indexOf(e) < variants.length - ? variants.firstWhereOrNull( - (element) => - element.id == - productVariants - ?.elementAt(_controllers.indexOf(e)) - .productVariantId, - ) - : null), - )), + value: variants != null && variants.length < _controllers.length + ? variants.last + : (variants != null && + _controllers.indexOf(e) < variants.length + ? variants.firstWhereOrNull( + (element) => + element.id == + productVariants + ?.elementAt(_controllers.indexOf(e)) + .productVariantId, + ) + : null), + )), ], ), _quantityDistributedKey: FormArray([ ..._controllers.mapIndexed( - (i, e) => FormControl( + (i, e) => FormControl( value: RegistrationDeliverySingleton().beneficiaryType != - BeneficiaryType.individual + BeneficiaryType.individual ? int.tryParse( - bloc.tasks?.last.resources?.elementAt(i).quantity ?? '0', - ) + bloc.tasks?.last.resources?.elementAt(i).quantity ?? '0', + ) : 0, validators: [Validators.min(1)], ), diff --git a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart index 3d06173d8..77f8d1c92 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart @@ -1,7 +1,9 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/atoms/details_card.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; +import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:recase/recase.dart'; @@ -42,329 +44,351 @@ class DeliverySummaryPageState extends LocalizedState { return ProductVariantBlocWrapper( child: Scaffold( body: BlocConsumer( - listener: (context, deliverState) { - final router = context.router; - }, - builder: (context, deliverState) { - return ScrollableContent( - enableFixedButton: true, - header: Column(children: [ - const BackNavigationHelpHeaderWidget( - showHelp: false, - showcaseButton: ShowcaseButton(), - ), - Padding( - padding: - const EdgeInsets.only(bottom: kPadding, left: kPadding), - child: Align( - alignment: Alignment.centerLeft, - child: Text( - localizations.translate( - i18.common.coreCommonSummaryDetails, + listener: (context, deliverState) { + final router = context.router; + }, + builder: (context, deliverState) { + return ScrollableContent( + enableFixedButton: true, + header: Column(children: [ + const BackNavigationHelpHeaderWidget( + showHelp: false, + showcaseButton: ShowcaseButton(), + ), + Padding( + padding: + const EdgeInsets.all(spacer2), + child: Align( + alignment: Alignment.centerLeft, + child: Text( + localizations.translate( + i18.common.coreCommonSummaryDetails, + ), + style: DigitTheme + .instance.mobileTheme.textTheme.displayMedium, + ), ), - style: DigitTheme - .instance.mobileTheme.textTheme.displayMedium, ), - ), - ), - ]), - footer: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: ValueListenableBuilder( - valueListenable: clickedStatus, - builder: (context, bool isClicked, _) { - return DigitElevatedButton( - onPressed: isClicked - ? null - : () async { - final submit = await DigitDialog.show( - context, - options: DigitDialogOptions( - titleText: localizations.translate( - i18.deliverIntervention.dialogTitle), - contentText: localizations.translate( - i18.deliverIntervention.dialogContent), - primaryAction: DigitDialogActions( - label: localizations - .translate(i18.common.coreCommonSubmit), - action: (ctx) { - clickedStatus.value = true; - Navigator.of(context, rootNavigator: true) - .pop(true); - }, - ), - secondaryAction: DigitDialogActions( - label: localizations - .translate(i18.common.coreCommonCancel), - action: (context) => Navigator.of(context, - rootNavigator: true) - .pop(false), - ), - ), - ); - if (submit ?? false) { - if (context.mounted) { - context.read().add( - DeliverInterventionSubmitEvent( - task: deliverState.oldTask!, - isEditing: (deliverState.tasks ?? []) - .isNotEmpty && - RegistrationDeliverySingleton() - .beneficiaryType == - BeneficiaryType.household - ? true - : false, - boundaryModel: - RegistrationDeliverySingleton() - .boundary!, - ), - ); - - if (deliverState.futureDeliveries != null && - deliverState - .futureDeliveries!.isNotEmpty && - RegistrationDeliverySingleton() - .projectType - ?.cycles - ?.isNotEmpty == - true) { - context.router.popUntilRouteWithName( - BeneficiaryWrapperRoute.name, - ); - context.router.push( - SplashAcknowledgementRoute( - enableBackToSearch: false, + ]), + footer: DigitCard( + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [ + ValueListenableBuilder( + valueListenable: clickedStatus, + builder: (context, bool isClicked, _) { + return Button( + label: localizations.translate(i18.common.coreCommonNext), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + isDisabled: isClicked?true:false, + onPressed: () async { + final submit = await showDialog( + context: context, + builder: (ctx)=> Popup( + title: localizations.translate( + i18.deliverIntervention.dialogTitle), + description: localizations.translate( + i18.deliverIntervention.dialogContent), + actions: [ + Button( + label: localizations + .translate(i18.common.coreCommonSubmit), + onPressed: () { + clickedStatus.value = true; + Navigator.of(context, rootNavigator: true) + .pop(true); + }, + type: ButtonType.primary, + size: ButtonSize.large ), - ); - } else { - final reloadState = - context.read(); - - reloadState.add( - HouseholdOverviewReloadEvent( - projectId: - RegistrationDeliverySingleton() - .projectId!, - projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, + Button( + label: localizations + .translate(i18.common.coreCommonCancel), + onPressed:() => Navigator.of(context, + rootNavigator: true) + .pop(false), + type: ButtonType.secondary, + size: ButtonSize.large ), - ); - context.router.popAndPush( - HouseholdAcknowledgementRoute( - enableViewHousehold: true, + ], + ), + ); + if (submit ?? false) { + if (context.mounted) { + context.read().add( + DeliverInterventionSubmitEvent( + task: deliverState.oldTask!, + isEditing: (deliverState.tasks ?? []) + .isNotEmpty && + RegistrationDeliverySingleton() + .beneficiaryType == + BeneficiaryType.household + ? true + : false, + boundaryModel: + RegistrationDeliverySingleton() + .boundary!, ), ); + + if (deliverState.futureDeliveries != null && + deliverState + .futureDeliveries!.isNotEmpty && + RegistrationDeliverySingleton() + .projectType + ?.cycles + ?.isNotEmpty == + true) { + context.router.popUntilRouteWithName( + BeneficiaryWrapperRoute.name, + ); + context.router.push( + SplashAcknowledgementRoute( + enableBackToSearch: false, + ), + ); + } else { + final reloadState = + context.read(); + + reloadState.add( + HouseholdOverviewReloadEvent( + projectId: + RegistrationDeliverySingleton() + .projectId!, + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType!, + ), + ); + context.router.popAndPush( + HouseholdAcknowledgementRoute( + enableViewHousehold: true, + ), + ); + } } } - } - }, - child: Center( - child: Text( - localizations.translate(i18.common.coreCommonNext), + }, + ); + }, ), - ), - ); - }, - ), - ), - slivers: [ - SliverToBoxAdapter( - child: Column( - children: [ - DigitCard( - child: LabelValueList( - heading: localizations.translate(i18 - .householdLocation.householdLocationLabelText), - withDivider: true, - items: [ - LabelValuePair( - label: localizations.translate( - i18.householdLocation.villageLabel), - value: deliverState.householdMemberWrapper - ?.household?.address?.locality?.code - .split('_') - .last - .titleCase ?? - localizations - .translate(i18.common.coreCommonNA), - isInline: true), - LabelValuePair( - label: localizations.translate( - i18.householdLocation.landmarkFormLabel), - value: deliverState.householdMemberWrapper - ?.household?.address?.landmark ?? - localizations - .translate(i18.common.coreCommonNA), - isInline: true), - ]), - ), - DigitCard( - child: LabelValueList( - heading: localizations.translate( - i18.householdDetails.householdDetailsLabel), - withDivider: true, - items: [ - LabelValuePair( - label: localizations.translate( - i18.beneficiaryDetails.totalMembers), - value: deliverState.householdMemberWrapper - ?.household?.memberCount - .toString() ?? - '0', - isInline: true), - LabelValuePair( - label: localizations.translate(i18 - .householdDetails - .noOfPregnantWomenCountLabel), - value: deliverState.householdMemberWrapper - ?.household?.additionalFields?.fields - .where((h) => - h.key == + ] + ), + slivers: [ + SliverToBoxAdapter( + child: Column( + children: [ + DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ + LabelValueList( + heading: localizations.translate(i18 + .householdLocation.householdLocationLabelText), + withDivider: true, + labelFlex: 6, + items: [ + LabelValuePair( + label: localizations.translate( + i18.householdLocation.villageLabel), + value: deliverState.householdMemberWrapper + ?.household?.address?.locality?.code + .split('_') + .last + .titleCase ?? + localizations + .translate(i18.common.coreCommonNA), + isInline: true), + LabelValuePair( + label: localizations.translate( + i18.householdLocation.landmarkFormLabel), + value: deliverState.householdMemberWrapper + ?.household?.address?.landmark ?? + localizations + .translate(i18.common.coreCommonNA), + isInline: true), + ]), + ] + ), + DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ + LabelValueList( + heading: localizations.translate( + i18.householdDetails.householdDetailsLabel), + withDivider: true, + labelFlex: 6, + items: [ + LabelValuePair( + label: localizations.translate( + i18.beneficiaryDetails.totalMembers), + value: deliverState.householdMemberWrapper + ?.household?.memberCount + .toString() ?? + '0', + isInline: true), + LabelValuePair( + label: localizations.translate(i18 + .householdDetails + .noOfPregnantWomenCountLabel), + value: deliverState.householdMemberWrapper + ?.household?.additionalFields?.fields + .where((h) => + h.key == AdditionalFieldsType.pregnantWomen .toValue()) - .firstOrNull - ?.value - .toString() ?? - '0', - isInline: true), - LabelValuePair( - label: localizations.translate(i18 - .householdDetails - .noOfChildrenBelow5YearsLabel), - value: deliverState.householdMemberWrapper - ?.household?.additionalFields?.fields - .where((h) => - h.key == + .firstOrNull + ?.value + .toString() ?? + '0', + isInline: true), + LabelValuePair( + label: localizations.translate(i18 + .householdDetails + .noOfChildrenBelow5YearsLabel), + value: deliverState.householdMemberWrapper + ?.household?.additionalFields?.fields + .where((h) => + h.key == AdditionalFieldsType.children .toValue()) - .firstOrNull - ?.value - .toString() ?? - '0', - isInline: true), - ]), - ), - DigitCard( - child: LabelValueList( - heading: localizations.translate( - i18.householdDetails.houseDetailsLabel), - withDivider: true, - items: [ - LabelValuePair( - label: localizations.translate( - i18.householdDetails.noOfRoomsLabel), - value: deliverState.householdMemberWrapper - ?.household?.additionalFields?.fields - .where((h) => - h.key == + .firstOrNull + ?.value + .toString() ?? + '0', + isInline: true), + ]), + ] + ), + DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ + LabelValueList( + heading: localizations.translate( + i18.householdDetails.houseDetailsLabel), + withDivider: true, + labelFlex: 6, + items: [ + LabelValuePair( + label: localizations.translate( + i18.householdDetails.noOfRoomsLabel), + value: deliverState.householdMemberWrapper + ?.household?.additionalFields?.fields + .where((h) => + h.key == AdditionalFieldsType.noOfRooms .toValue()) - .firstOrNull - ?.value - .toString() ?? - '0', - isInline: true), - LabelValuePair( - label: localizations.translate( - i18.householdDetails.typeOfStructure), - value: (deliverState + .firstOrNull + ?.value + .toString() ?? + '0', + isInline: true), + LabelValuePair( + label: localizations.translate( + i18.householdDetails.typeOfStructure), + value: (deliverState .householdMemberWrapper ?.household ?.additionalFields ?.fields .where((h) => - h.key == - AdditionalFieldsType - .houseStructureTypes - .toValue()) + h.key == + AdditionalFieldsType + .houseStructureTypes + .toValue()) .firstOrNull ?.value ?? - []) - .toString() - .split('|') - .map((item) => getLocalizedMessage(item)) - .toList() - .join(', '), - isInline: true), - ]), - ), - BlocBuilder( - builder: (context, productState) { - final variants = productState.whenOrNull( - fetched: (productVariants) { - final resourcesDelivered = deliverState - .oldTask?.resources - ?.map((e) => TaskResourceInfo( - productVariants - .where((p) => - p.id == e.productVariantId) - .firstOrNull - ?.sku ?? + []) + .toString() + .split('|') + .map((item) => getLocalizedMessage(item)) + .toList() + .join(', '), + isInline: true), + ]), + ] + ), + BlocBuilder( + builder: (context, productState) { + final variants = productState.whenOrNull( + fetched: (productVariants) { + final resourcesDelivered = deliverState + .oldTask?.resources + ?.map((e) => TaskResourceInfo( productVariants .where((p) => - p.id == e.productVariantId) + p.id == e.productVariantId) .firstOrNull - ?.variation ?? - i18.common.coreCommonNA, - e.quantity ?? '0')) - .toList(); - return resourcesDelivered; - }, - ); - return DigitCard( - child: LabelValueList( - heading: localizations.translate( - '${RegistrationDeliverySingleton().selectedProject?.name.toUpperCase()}_${i18.deliverIntervention.deliveryDetailsLabel}_${deliverState.oldTask?.status}'), - withDivider: true, - items: [ - LabelValuePair( - label: localizations.translate(deliverState + ?.sku ?? + productVariants + .where((p) => + p.id == e.productVariantId) + .firstOrNull + ?.variation ?? + i18.common.coreCommonNA, + e.quantity ?? '0')) + .toList(); + return resourcesDelivered; + }, + ); + return DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ + LabelValueList( + heading: localizations.translate( + '${RegistrationDeliverySingleton().selectedProject?.name.toUpperCase()}_${i18.deliverIntervention.deliveryDetailsLabel}_${deliverState.oldTask?.status}'), + withDivider: true, + labelFlex: 6, + items: [ + LabelValuePair( + label: localizations.translate(deliverState .oldTask?.status == - Status.administeredFailed - .toValue() || - deliverState.oldTask?.status == - Status.beneficiaryRefused - .toValue() - ? i18.deliverIntervention - .reasonForRefusalLabel - : '${RegistrationDeliverySingleton().selectedProject?.name.toUpperCase()}_${i18.deliverIntervention.typeOfResourceUsed}'), - value: deliverState.oldTask?.status == - Status.administeredFailed - .toValue() || - deliverState.oldTask?.status == - Status.beneficiaryRefused - .toValue() - ? getLocalizedMessage(deliverState - .oldTask?.additionalFields?.fields - .where( - (d) => - d.key == + Status.administeredFailed + .toValue() || + deliverState.oldTask?.status == + Status.beneficiaryRefused + .toValue() + ? i18.deliverIntervention + .reasonForRefusalLabel + : '${RegistrationDeliverySingleton().selectedProject?.name.toUpperCase()}_${i18.deliverIntervention.typeOfResourceUsed}'), + value: deliverState.oldTask?.status == + Status.administeredFailed + .toValue() || + deliverState.oldTask?.status == + Status.beneficiaryRefused + .toValue() + ? getLocalizedMessage(deliverState + .oldTask?.additionalFields?.fields + .where( + (d) => + d.key == AdditionalFieldsType .reasonOfRefusal .toValue(), ) - .firstOrNull - ?.value ?? - i18.common.coreCommonNA) - : variants - ?.map((e) => - '${getLocalizedMessage(e.productName)} : ${e.quantityDelivered}') - .toList() - .join('\n') ?? - localizations.translate( - i18.common.coreCommonNA), - ), - ]), - ); - }), - ], - ), - ) - ]); - }, - )), + .firstOrNull + ?.value ?? + i18.common.coreCommonNA) + : variants + ?.map((e) => + '${getLocalizedMessage(e.productName)} : ${e.quantityDelivered}') + .toList() + .join('\n') ?? + localizations.translate( + i18.common.coreCommonNA), + ), + ]), + ] + ); + }), + ], + ), + ) + ]); + }, + )), ); } } diff --git a/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart b/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart index 74cb1f27a..59240b617 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart @@ -1,14 +1,10 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/blocs/location/location.dart'; -import 'package:digit_components/models/digit_table_model.dart'; -import 'package:digit_components/theme/digit_theme.dart'; -import 'package:digit_components/widgets/atoms/digit_radio_button_list.dart'; -import 'package:digit_components/widgets/digit_card.dart'; -import 'package:digit_components/widgets/digit_elevated_button.dart'; -import 'package:digit_components/widgets/molecules/digit_table.dart'; -import 'package:digit_components/widgets/molecules/digit_table_card.dart'; -import 'package:digit_components/widgets/scrollable_content.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/atoms/table_cell.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_table.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; @@ -28,6 +24,7 @@ import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; import '../../widgets/component_wrapper/product_variant_bloc_wrapper.dart'; import '../../widgets/localized.dart'; +import '../../widgets/table_card/table_card.dart'; @RoutePage() class DoseAdministeredPage extends LocalizedStatefulWidget { @@ -60,13 +57,13 @@ class DoseAdministeredPageState extends LocalizedState { final overViewBloc = context.read().state; // Define a list of TableHeader objects for the header of a table final headerListResource = [ - TableHeader( - localizations.translate(i18.beneficiaryDetails.beneficiaryDose), - cellKey: 'dose', + DigitTableColumn( + header: localizations.translate(i18.beneficiaryDetails.beneficiaryDose), + cellValue: 'dose', ), - TableHeader( - localizations.translate(i18.beneficiaryDetails.beneficiaryResources), - cellKey: 'resources', + DigitTableColumn( + header: localizations.translate(i18.beneficiaryDetails.beneficiaryResources), + cellValue: 'resources', ), ]; @@ -87,16 +84,20 @@ class DoseAdministeredPageState extends LocalizedState { ), ]), footer: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), + margin: const EdgeInsets.only(top: spacer2), padding: - const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: ValueListenableBuilder( + const EdgeInsets.all(spacer2), + children: [ValueListenableBuilder( valueListenable: clickedStatus, builder: (context, bool isClicked, _) { - return DigitElevatedButton( - onPressed: isClicked - ? null - : () { + return Button( + label: localizations + .translate(i18.common.coreCommonNext), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + isDisabled: isClicked, + onPressed: () { if (form .control(_doseAdministeredKey) .value == @@ -113,7 +114,7 @@ class DoseAdministeredPageState extends LocalizedState { } else { final doseAdministered = form .control(_doseAdministeredKey) - .value as KeyValue; + .value as bool; final lat = locationState.latitude; final long = locationState.longitude; clickedStatus.value = true; @@ -123,7 +124,7 @@ class DoseAdministeredPageState extends LocalizedState { final event = context.read(); - if (doseAdministered.key == true && + if (doseAdministered == true && context.mounted) { // Iterate through future deliveries @@ -302,47 +303,38 @@ class DoseAdministeredPageState extends LocalizedState { )); } }, - child: Center( - child: Text( - localizations - .translate(i18.common.coreCommonNext), - ), - ), ); }, - ), + ),] ), children: [ DigitCard( - child: Column( - children: [ - Text( - localizations.translate( - i18.deliverIntervention.wasTheDoseAdministered, - ), - style: theme.textTheme.displayMedium, - ), - DigitRadioButtonList( - contentPadding: EdgeInsets.zero, - labelStyle: DigitTheme - .instance.mobileTheme.textTheme.headlineSmall, - formControlName: _doseAdministeredKey, - valueMapper: (val) => - localizations.translate(val.label), - options: Constants.yesNo, - isRequired: true, - errorMessage: localizations.translate( - i18.common.corecommonRequired, - ), - onValueChange: (val) { - setState(() { - doseAdministered = val - .key; // Update doseAdministered with setState - }); - }, - ), - ], + margin: const EdgeInsets.only( + top: spacer2, bottom: spacer2), + children: [Text( + localizations.translate( + i18.deliverIntervention.wasTheDoseAdministered, + ), + style: theme.textTheme.displayMedium, ), + ReactiveWrapperField( + formControlName: _doseAdministeredKey, + builder: (field)=> RadioList( + radioButtons: Constants.yesNo + .map((e) => RadioButtonModel( + code: e.key.toString(), + name: localizations.translate(e.label), + )).toList(), + errorMessage: form.control(_doseAdministeredKey).hasErrors? + localizations.translate( + i18.common.corecommonRequired, + ):null, + groupValue: form.control(_doseAdministeredKey).value.toString()??'', + onChanged: (val) { + form.control(_doseAdministeredKey).value=val.code=='true'?true:false; + }, + ), + ),] ), BlocBuilder( builder: (context, productState) { @@ -356,10 +348,12 @@ class DoseAdministeredPageState extends LocalizedState { ); return DigitCard( - child: BlocBuilder( builder: (context, deliveryState) { - List tableDataRows = + List tableDataRows = deliveryState.futureDeliveries!.map((e) { int doseIndex = deliveryState .futureDeliveries! @@ -381,12 +375,12 @@ class DoseAdministeredPageState extends LocalizedState { return '${ele.quantity} - ${pv.sku.toString()}'; }).toList(); - return TableDataRow([ - TableData( + return DigitTableRow(tableRow: [ + DigitTableData( 'Dose $doseIndex', cellKey: 'dose', ), - TableData( + DigitTableData( skus.join(' + '), cellKey: 'resources', ), @@ -399,7 +393,7 @@ class DoseAdministeredPageState extends LocalizedState { alignment: Alignment.centerLeft, child: Padding( padding: const EdgeInsets.only( - bottom: kPadding * 2, + bottom: spacer2 * 2, ), child: Text( localizations.translate( @@ -412,10 +406,6 @@ class DoseAdministeredPageState extends LocalizedState { ), ), DigitTableCard( - padding: - const EdgeInsets.only(bottom: 4.0), - topPadding: - const EdgeInsets.only(top: 4.0), element: { localizations.translate( i18.beneficiaryDetails @@ -437,18 +427,18 @@ class DoseAdministeredPageState extends LocalizedState { thickness: 2.0, ), DigitTable( - headerList: headerListResource, - tableData: tableDataRows, - columnWidth: - MediaQuery.of(context).size.width / - 2.18, - height: - (tableDataRows.length + 1) * 57.5, + columns: headerListResource, + rows: tableDataRows, + // columnWidth: + // MediaQuery.of(context).size.width / + // 2.18, + // height: + // (tableDataRows.length + 1) * 57.5, ), ], ); }, - ), + ),] ); }, ); @@ -466,7 +456,7 @@ class DoseAdministeredPageState extends LocalizedState { FormGroup buildForm(BuildContext context) { return fb.group({ - _doseAdministeredKey: FormControl( + _doseAdministeredKey: FormControl( value: null, ), }); diff --git a/packages/registration_delivery/lib/pages/beneficiary/facility_selection.dart b/packages/registration_delivery/lib/pages/beneficiary/facility_selection.dart index 6ca094d1e..90840c919 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/facility_selection.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/facility_selection.dart @@ -1,7 +1,8 @@ import 'package:auto_route/auto_route.dart'; import 'package:collection/collection.dart'; -import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:flutter/material.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:registration_delivery/blocs/app_localization.dart'; @@ -24,12 +25,13 @@ class FacilitySelectionPage extends StatelessWidget { @override Widget build(BuildContext context) { RegistrationDeliveryLocalization localizations = - RegistrationDeliveryLocalization.of(context); + RegistrationDeliveryLocalization.of(context); final theme = Theme.of(context); final BorderSide borderSide = BorderSide( color: theme.colorScheme.outline, width: 1.0, ); + final textTheme = theme.digitTextTheme(context); return SafeArea( child: ReactiveFormBuilder( @@ -61,29 +63,33 @@ class FacilitySelectionPage extends StatelessWidget { color: Colors.white, child: Padding( padding: const EdgeInsets.symmetric( - horizontal: kPadding * 2), + horizontal: spacer2*2, + ), child: Column( children: [ Padding( - padding: const EdgeInsets.all(kPadding), + padding: const EdgeInsets.all(spacer2), child: Align( alignment: Alignment.topLeft, child: Text( localizations.translate( i18.common.facilitySearchHeaderLabel, ), - style: theme.textTheme.displayMedium, + style: textTheme.headingXl, textAlign: TextAlign.left, ), ), ), - const DigitTextFormField( - suffix: Padding( - padding: EdgeInsets.all(8.0), - child: Icon(Icons.search), + Padding( + padding: const EdgeInsets.all(spacer2), + child: ReactiveWrapperField( + formControlName: _facilityName, + builder: (field)=> DigitSearchFormInput( + onChange: (value){ + form.control(_facilityName).value=value; + }, + ), ), - label: '', - formControlName: _facilityName, ), ], ), @@ -92,22 +98,23 @@ class FacilitySelectionPage extends StatelessWidget { ), SliverList( delegate: SliverChildBuilderDelegate( - (context, index) { + (context, index) { final facility = filteredFacilities[index]; return Container( color: Colors.white, padding: const EdgeInsets.symmetric( - horizontal: kPadding), + horizontal: spacer2 + ), child: Container( margin: const EdgeInsets.symmetric( - horizontal: kPadding), + horizontal: spacer2), decoration: BoxDecoration( color: - DigitTheme.instance.colors.alabasterWhite, + DigitTheme.instance.colors.light.paperPrimary, border: Border( top: - index == 0 ? borderSide : BorderSide.none, + index == 0 ? borderSide : BorderSide.none, bottom: index == filteredFacilities.length - 1 ? borderSide : BorderSide.none, @@ -120,10 +127,10 @@ class FacilitySelectionPage extends StatelessWidget { Navigator.of(context).pop(facility); }, child: Container( - margin: const EdgeInsets.all(kPadding), + margin: const EdgeInsets.all(spacer2), decoration: BoxDecoration( color: DigitTheme - .instance.colors.alabasterWhite, + .instance.colors.light.paperPrimary, border: Border( bottom: BorderSide( color: theme.colorScheme.outline, @@ -132,7 +139,7 @@ class FacilitySelectionPage extends StatelessWidget { ), ), child: Padding( - padding: const EdgeInsets.all(kPadding * 2), + padding: const EdgeInsets.all(spacer2 * 2), child: Text( localizations .translate('FAC_${facility.id}'), diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index 61ca961b9..05e4cb645 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -1,8 +1,16 @@ import 'package:auto_route/auto_route.dart'; import 'package:collection/collection.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/utils/date_utils.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/enum/app_enums.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/theme/digit_theme.dart'; +import 'package:digit_ui_components/theme/spacers.dart'; +import 'package:digit_ui_components/utils/date_utils.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_action_card.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_button.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; +import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -17,10 +25,10 @@ import '../../models/entities/status.dart'; import '../../router/registration_delivery_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; -import '../../widgets/action_card/action_card.dart'; import '../../widgets/back_navigation_help_header.dart'; import '../../widgets/localized.dart'; import '../../widgets/member_card/member_card.dart'; +import '../../widgets/table_card/table_card.dart'; @RoutePage() class HouseholdOverviewPage extends LocalizedStatefulWidget { @@ -49,6 +57,7 @@ class _HouseholdOverviewPageState Widget build(BuildContext context) { final theme = Theme.of(context); final beneficiaryType = RegistrationDeliverySingleton().beneficiaryType!; + final textTheme = theme.digitTextTheme(context); return PopScope( onPopInvoked: (didPop) async { @@ -79,20 +88,24 @@ class _HouseholdOverviewPageState DeliverInterventionState>( builder: (ctx, deliverInterventionState) => DigitCard( margin: - const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB( - kPadding, 0, kPadding, 0), - child: state.householdMemberWrapper.tasks?.lastOrNull?.status == + const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [state.householdMemberWrapper.tasks?.lastOrNull?.status == Status.administeredSuccess.toValue() ? Padding( padding: const EdgeInsets.symmetric( - vertical: kPadding), - child: DigitOutLineButton( + vertical: spacer2), + child: Button( label: localizations.translate( i18.memberCard .deliverDetailsUpdateLabel, ), - onPressed: state.householdMemberWrapper.tasks?.lastOrNull?.status == Status.administeredSuccess.toValue() ? null :() { + isDisabled: state.householdMemberWrapper.tasks?.lastOrNull?.status == Status.administeredSuccess.toValue() + ? true : false, + type: ButtonType.secondary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () { serviceDefinitionState.when( empty: () {}, isloading: () {}, @@ -116,16 +129,23 @@ class _HouseholdOverviewPageState }, ), ) - : DigitElevatedButton( - onPressed: (state.householdMemberWrapper - .projectBeneficiaries ?? - []) - .isEmpty || - state.householdMemberWrapper.tasks - ?.lastOrNull?.status == - Status.closeHousehold.toValue() - ? null - : () async { + : Button( + label: localizations.translate( + i18.householdOverView + .householdOverViewActionText, + ), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + isDisabled: (state.householdMemberWrapper + .projectBeneficiaries ?? + []) + .isEmpty || + state.householdMemberWrapper.tasks + ?.lastOrNull?.status == + Status.closeHousehold.toValue() + ? true : false, + onPressed: () async { final bloc = ctx .read(); @@ -162,15 +182,7 @@ class _HouseholdOverviewPageState } }); }, - child: Center( - child: Text( - localizations.translate( - i18.householdOverView - .householdOverViewActionText, - ), - ), - ), - ), + ),] ), ), ), @@ -178,7 +190,7 @@ class _HouseholdOverviewPageState slivers: [ SliverToBoxAdapter( child: DigitCard( - child: Column( + children: [Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.max, children: [ @@ -188,7 +200,7 @@ class _HouseholdOverviewPageState .isNotEmpty) Align( alignment: Alignment.centerLeft, - child: DigitIconButton( + child: Button( onPressed: () { final projectId = RegistrationDeliverySingleton() @@ -203,17 +215,19 @@ class _HouseholdOverviewPageState beneficiaryType, ), ); - DigitActionDialog.show( - context, - widget: ActionCard( - items: [ - ActionCardModel( - icon: Icons.edit, + showDialog( + context: context, + builder: (ctx)=> ActionCard( + actions: [ + Button( + prefixIcon: Icons.edit, label: localizations.translate( i18.householdOverView .householdOverViewEditLabel, ), - action: () async { + type: ButtonType.secondary, + size: ButtonSize.large, + onPressed: () async { Navigator.of( context, rootNavigator: true, @@ -277,11 +291,13 @@ class _HouseholdOverviewPageState ), ); }, - iconText: localizations.translate( + label: localizations.translate( i18.householdOverView .householdOverViewEditIconText, ), - icon: Icons.edit, + type: ButtonType.tertiary, + size: ButtonSize.medium, + prefixIcon: Icons.edit, ), ), // BlocBuilder( @@ -564,58 +579,54 @@ class _HouseholdOverviewPageState ).pop(); }, deleteMemberAction: () { - DigitDialog.show( - context, - options: DigitDialogOptions( - titlePadding: - const EdgeInsets.fromLTRB( - kPadding * 2, - kPadding * 2, - kPadding * 2, - kPadding / 2, - ), - titleText: localizations.translate(i18 + showPopup( + context: context, + title: localizations.translate(i18 .householdOverView .householdOverViewActionCardTitle), - primaryAction: DigitDialogActions( - label: localizations.translate(i18 - .householdOverView - .householdOverViewPrimaryActionLabel), - action: (ctx) { - Navigator.of( - context, - rootNavigator: true, - ) - ..pop() - ..pop(); - context - .read< + type: PopUpType.simple, + actions: [ + Button( + label: localizations.translate(i18.householdOverView + .householdOverViewPrimaryActionLabel), + onPressed: () { + Navigator.of( + context, + rootNavigator: true, + ) + ..pop() + ..pop(); + context + .read< HouseholdOverviewBloc>() - .add( + .add( HouseholdOverviewEvent .selectedIndividual( individualModel: e, ), ); - context.router.push( - ReasonForDeletionRoute( - isHousholdDelete: false, - ), - ); - }, - ), - secondaryAction: DigitDialogActions( - label: localizations.translate(i18 - .householdOverView - .householdOverViewSecondaryActionLabel), - action: (context) { - Navigator.of( - context, - rootNavigator: true, - ).pop(); - }, - ), - ), + context.router.push( + ReasonForDeletionRoute( + isHousholdDelete: false, + ), + ); + }, + type: ButtonType.primary, + size: ButtonSize.large + ), + Button( + label: localizations.translate(i18.householdOverView + .householdOverViewSecondaryActionLabel), + onPressed: () { + Navigator.of( + context, + rootNavigator: true, + ).pop(); + }, + type: ButtonType.tertiary, + size: ButtonSize.large + ) + ] ); }, isNotEligible: RegistrationDeliverySingleton() @@ -623,7 +634,7 @@ class _HouseholdOverviewPageState ?.cycles != null ? !checkEligibilityForAgeAndSideEffect( - DigitDOBAge( + DigitDOBAgeConvertor( years: ageInYears, months: ageInMonths, ), @@ -680,36 +691,33 @@ class _HouseholdOverviewPageState ).toList(), ), const SizedBox( - height: kPadding, + height: spacer2, ), Center( - child: DigitIconButton( - buttonDisabled: (state.householdMemberWrapper + child: Button( + isDisabled: (state.householdMemberWrapper .projectBeneficiaries ?? []) .isEmpty, - onPressed: (state.householdMemberWrapper - .projectBeneficiaries ?? - []) - .isEmpty - ? null - : () => addIndividual( + onPressed: () => addIndividual( context, state.householdMemberWrapper .household!, ), - iconText: localizations.translate( + label: localizations.translate( i18.householdOverView .householdOverViewAddActionText, ), - icon: Icons.add_circle, + prefixIcon: Icons.add_circle, + type: ButtonType.tertiary, + size: ButtonSize.medium, ), ), const SizedBox( - height: kPadding, + height: spacer2, ), ], - ), + ),] ), ), ], diff --git a/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart b/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart index 2199df0d0..e69fb904d 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart @@ -1,7 +1,8 @@ import 'package:auto_route/auto_route.dart'; import 'package:collection/collection.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/atoms/digit_radio_button_list.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; @@ -59,9 +60,13 @@ class RecordPastDeliveryDetailsPageState ), ]), footer: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: DigitElevatedButton( + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [Button( + label: localizations.translate(i18.common.coreCommonNext), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, onPressed: () { for (int i = 0; i < (futureTaskList ?? []).length; i++) { if (form @@ -78,176 +83,172 @@ class RecordPastDeliveryDetailsPageState if (!form.valid) return; - DigitDialog.show( - context, - options: DigitDialogOptions( - titleText: localizations.translate(i18 + showDialog( + context: context, + barrierDismissible: false, + builder: (ctx)=> Popup( + title: localizations.translate(i18 .deliverIntervention .didYouObservePreviousAdvEventsTitle), - barrierDismissible: false, - enableRecordPast: true, - dialogPadding: const EdgeInsets.fromLTRB( - kPadding, - kPadding, - kPadding, - 0, - ), - primaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonNo, - ), - action: (ctx) { - router.maybePop(); - final event = + inlineActions: true, + actions: [ + Button( + label: localizations.translate( + i18.common.coreCommonYes, + ), + onPressed: () async { + router.maybePop(); + final event = context.read(); + final bloc = context.read(); - for (int i = 0; + for (int i = 0; i < (futureTaskList ?? []).length; i++) { - // Get the value of the form control for each task + // Get the value of the form control for each task - final formControllValue = (form + final formControlValue = (form .control( - "$_recordDoseAdministeredKey.$i", - ) - .value as KeyValue) - .key; + "$_recordDoseAdministeredKey.$i", + ) + .value as bool); - // Determine the status based on the form control value - final status = formControllValue - ? Status.administeredSuccess.toValue() - : Status.administeredFailed.toValue(); + // Determine the status based on the form control value + final status = formControlValue + ? Status.administeredSuccess.toValue() + : Status.administeredFailed.toValue(); - // Create a new task with the updated status - final result = + // Create a new task with the updated status + final result = futureTaskList![i].copyWith(status: status); - // Add the updated task to the event - event.add(DeliverInterventionSubmitEvent( - task: result, - isEditing: true, - boundaryModel: + // Add the updated task to the event + event.add(DeliverInterventionSubmitEvent( + task: result, + isEditing: true, + boundaryModel: RegistrationDeliverySingleton().boundary!, - )); - } - final bloc = context.read(); - - bloc.add(HouseholdOverviewReloadEvent( - projectId: - RegistrationDeliverySingleton().projectId!, - projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, - )); - - event.add(DeliverInterventionSearchEvent( - taskSearch: TaskSearchModel( - projectBeneficiaryClientReferenceId: bloc.state - .householdMemberWrapper.projectBeneficiaries - ?.map((e) => e.clientReferenceId) - .toList(), - ), - )); - context.router.popUntilRouteWithName( - SearchBeneficiaryRoute.name, - ); - bloc.add(HouseholdOverviewReloadEvent( - projectId: - RegistrationDeliverySingleton().projectId!, - projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, - )); - Navigator.of(ctx).pop(); - - router.push( - BeneficiaryDetailsRoute(), - ); - }, - ), - secondaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonYes, + )); + } + context.router.popUntilRouteWithName( + HouseholdOverviewRoute.name, + ); + Navigator.of(ctx).pop(); + final response = await router.push( + SideEffectsRoute( + tasks: [(futureTaskList ?? []).last], + ), + ); + if (response == null) { + bloc.add(HouseholdOverviewReloadEvent( + projectId: + RegistrationDeliverySingleton().projectId!, + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType!, + )); + } + }, + type: ButtonType.secondary, + size: ButtonSize.medium ), - action: (ctx) async { - router.maybePop(); - final event = + Button( + label: localizations.translate( + i18.common.coreCommonNo, + ), + onPressed: () { + router.maybePop(); + final event = context.read(); - final bloc = context.read(); - for (int i = 0; + for (int i = 0; i < (futureTaskList ?? []).length; i++) { - // Get the value of the form control for each task + // Get the value of the form control for each task - final formControlValue = (form + final formControllValue = (form .control( - "$_recordDoseAdministeredKey.$i", - ) - .value as KeyValue) - .key; + "$_recordDoseAdministeredKey.$i", + ) + .value as bool); - // Determine the status based on the form control value - final status = formControlValue - ? Status.administeredSuccess.toValue() - : Status.administeredFailed.toValue(); + // Determine the status based on the form control value + final status = formControllValue + ? Status.administeredSuccess.toValue() + : Status.administeredFailed.toValue(); - // Create a new task with the updated status - final result = + // Create a new task with the updated status + final result = futureTaskList![i].copyWith(status: status); - // Add the updated task to the event - event.add(DeliverInterventionSubmitEvent( - task: result, - isEditing: true, - boundaryModel: + // Add the updated task to the event + event.add(DeliverInterventionSubmitEvent( + task: result, + isEditing: true, + boundaryModel: RegistrationDeliverySingleton().boundary!, - )); - } - context.router.popUntilRouteWithName( - HouseholdOverviewRoute.name, - ); - Navigator.of(ctx).pop(); - final response = await router.push( - SideEffectsRoute( - tasks: [(futureTaskList ?? []).last], - ), - ); - if (response == null) { - bloc.add(HouseholdOverviewReloadEvent( - projectId: - RegistrationDeliverySingleton().projectId!, - projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, - )); - } - }, - ), + )); + } + final bloc = context.read(); + + bloc.add(HouseholdOverviewReloadEvent( + projectId: + RegistrationDeliverySingleton().projectId!, + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType!, + )); + + event.add(DeliverInterventionSearchEvent( + taskSearch: TaskSearchModel( + projectBeneficiaryClientReferenceId: bloc.state + .householdMemberWrapper.projectBeneficiaries + ?.map((e) => e.clientReferenceId) + .toList(), + ), + )); + context.router.popUntilRouteWithName( + SearchBeneficiaryRoute.name, + ); + bloc.add(HouseholdOverviewReloadEvent( + projectId: + RegistrationDeliverySingleton().projectId!, + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType!, + )); + Navigator.of(ctx).pop(); + + router.push( + BeneficiaryDetailsRoute(), + ); + }, + type: ButtonType.primary, + size: ButtonSize.medium + ), + ], ), ); }, - child: Center( - child: Text( - localizations.translate(i18.common.coreCommonNext), - ), - ), - ), + ),] ), children: [ DigitCard( - child: Padding( + children: [Padding( padding: const EdgeInsets.symmetric( - horizontal: kPadding, - vertical: kPadding, + horizontal: spacer2, + vertical: spacer2, ), child: Column( children: [ - Text( - localizations.translate( - i18.deliverIntervention.recordPastDeliveryDeatils, + Padding( + padding: const EdgeInsets.all(spacer2), + child: Text( + localizations.translate( + i18.deliverIntervention.recordPastDeliveryDeatils, + ), + style: theme.textTheme.displayMedium, ), - style: theme.textTheme.displayMedium, ), ...(futureTaskList?.asMap().entries.map((entry) { final int doseNumber = int.parse( @@ -265,31 +266,39 @@ class RecordPastDeliveryDetailsPageState builder: (context, setState) { return Column( children: [ - DigitRadioButtonList( - labelText: - "${localizations.translate(i18.deliverIntervention.wasDosePastDeliveryDetails)} $doseNumber ${localizations.translate(i18.deliverIntervention.wasDosePastRecordDeliveryDetails)} ${localizations.translate(i18.beneficiaryDetails.beneficiaryDose)} ${doseNumber - 1} ? *", - labelStyle: DigitTheme - .instance - .mobileTheme - .textTheme - .headlineSmall, + ReactiveWrapperField( formControlName: - "$_recordDoseAdministeredKey.${futureTaskList.indexOf(entry.value)}", - valueMapper: (val) => - localizations.translate(val.label), - options: Constants.yesNo, - onValueChange: (val) { - form - .control( - "$_recordDoseAdministeredKey.${futureTaskList.indexOf(entry.value)}", - ) - .value = val; - }, - errorMessage: localizations.translate( - i18.common.corecommonRequired, - ), - labelPadding: const EdgeInsets.only( - top: kPadding, + "$_recordDoseAdministeredKey.${futureTaskList.indexOf(entry.value)}", + builder: (field)=> LabeledField( + label: + "${localizations.translate(i18.deliverIntervention.wasDosePastDeliveryDetails)} $doseNumber ${localizations.translate(i18.deliverIntervention.wasDosePastRecordDeliveryDetails)} ${localizations.translate(i18.beneficiaryDetails.beneficiaryDose)} ${doseNumber - 1} ?", + isRequired: true, + labelStyle: DigitTheme + .instance + .mobileTheme + .textTheme + .headlineSmall, + padding: const EdgeInsets.only( + top: spacer2, + ), + child: RadioList( + radioButtons: Constants.yesNo + .map((e) => RadioButtonModel( + code: e.key.toString(), + name: localizations.translate(e.label), + )).toList(), + groupValue: form.control("$_recordDoseAdministeredKey.${futureTaskList.indexOf(entry.value)}") + .value.toString()??'', + onChanged: (val) { + form.control("$_recordDoseAdministeredKey.${futureTaskList.indexOf(entry.value)}") + .value=val.code=='true'?true:false; + }, + errorMessage: form.control("$_recordDoseAdministeredKey.${futureTaskList.indexOf(entry.value)}") + .hasErrors? localizations.translate( + i18.common.corecommonRequired, + ):null, + + ), ), ), if (entry.key != @@ -305,7 +314,7 @@ class RecordPastDeliveryDetailsPageState []), ], ), - ), + ),] ), ], ), @@ -325,9 +334,9 @@ class RecordPastDeliveryDetailsPageState // Create a form group with a FormArray of KeyValue form controls return fb.group( { - _recordDoseAdministeredKey: FormArray([ + _recordDoseAdministeredKey: FormArray([ ...futureTaskList?.map( - (e) => FormControl(), + (e) => FormControl(), ) ?? [], ]), diff --git a/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart b/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart index 256fb74ef..beb6657cb 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart @@ -1,9 +1,11 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/atoms/digit_radio_button_list.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:intl/intl.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; @@ -62,6 +64,7 @@ class ReferBeneficiaryPageState extends LocalizedState { @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); return BlocConsumer( listener: (context, state) { @@ -98,20 +101,21 @@ class ReferBeneficiaryPageState extends LocalizedState { BackNavigationHelpHeaderWidget(), ]), footer: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: ValueListenableBuilder( + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [ + ValueListenableBuilder( valueListenable: clickedStatus, builder: (context, bool isClicked, _) { - return DigitElevatedButton( - onPressed: isClicked - ? null - : () { + return Button( + label: localizations.translate(i18.common.coreCommonSubmit), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + isDisabled: isClicked?true:false, + onPressed: () { if (form.control(_referralReason).value == null) { clickedStatus.value = false; - form - .control(_referralReason) - .setErrors({'': true}); } form.markAllAsTouched(); @@ -121,7 +125,7 @@ class ReferBeneficiaryPageState extends LocalizedState { clickedStatus.value = true; final reason = form .control(_referralReason) - .value as KeyValue; + .value as String; final recipientType = selectedProjectFacilityId == 'Community Health Worker' @@ -147,7 +151,7 @@ class ReferBeneficiaryPageState extends LocalizedState { .loggedInUserUuid, recipientId: recipientId, recipientType: recipientType, - reasons: [reason.key], + reasons: [reason], tenantId: RegistrationDeliverySingleton() .tenantId, rowVersion: 1, @@ -215,108 +219,111 @@ class ReferBeneficiaryPageState extends LocalizedState { )); } }, - child: Center( - child: Text( - localizations.translate(i18.common.coreCommonSubmit), - ), - ), ); }, ), + ] ), slivers: [ SliverToBoxAdapter( child: DigitCard( - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Expanded( - child: Text( - localizations.translate( - i18.referBeneficiary.referralDetails, - ), - style: theme.textTheme.displayMedium, - ), - ), - ], + children: [ + Text( + localizations.translate( + i18.referBeneficiary.referralDetails, ), - Column(children: [ - DigitDateFormPicker( - isEnabled: false, - formControlName: _dateOfReferralKey, - label: localizations.translate( - i18.referBeneficiary.dateOfReferralLabel, - ), + style: textTheme.headingXl, + ), + ReactiveWrapperField( + formControlName: _dateOfReferralKey, + builder: (field)=> LabeledField( + label: localizations.translate( + i18.referBeneficiary.dateOfReferralLabel, + ), + child: DigitDateFormInput( + readOnly: true, isRequired: false, + initialValue: DateFormat('dd MMM yyyy') + .format(form.control(_dateOfReferralKey).value).toString(), initialDate: DateTime.now(), cancelText: localizations .translate(i18.common.coreCommonCancel), confirmText: localizations .translate(i18.common.coreCommonOk), - padding: const EdgeInsets.only( - bottom: kPadding, - top: kPadding, - ), ), - DigitTextFormField( - formControlName: _administrativeUnitKey, - label: localizations.translate( - i18.referBeneficiary.administrationUnitFormLabel, - ), - isRequired: true, + ), + ), + ReactiveWrapperField( + formControlName: _administrativeUnitKey, + builder: (field)=> LabeledField( + label: localizations.translate( + i18.referBeneficiary.administrationUnitFormLabel, + ), + isRequired: true, + child: DigitTextFormInput( readOnly: true, + initialValue: form.control(_administrativeUnitKey).value, ), - DigitTextFormField( - formControlName: _referredByKey, - label: localizations.translate( - i18.referBeneficiary.referredByLabel, - ), - validationMessages: { - 'required': (_) => localizations.translate( - i18.common.corecommonRequired, - ), + ), + ), + ReactiveWrapperField( + formControlName: _referredByKey, + validationMessages: { + 'required': (_) => localizations.translate( + i18.common.corecommonRequired, + ), + }, + builder: (field)=> LabeledField( + label: localizations.translate( + i18.referBeneficiary.referredByLabel, + ), + isRequired: true, + child: DigitTextFormInput( + errorMessage: field.errorText, + onChange: (value){ + form.control(_referredByKey).value=value; }, - isRequired: true, + initialValue: form.control(_referredByKey).value, ), - InkWell( - onTap: () async { - final parent = - context.router.parent() as StackRouter; - final facility = await parent.push( - FacilitySelectionRoute( - facilities: facilities, - ), - ) as FacilityModel?; + ), + ), + InkWell( + onTap: () async { + final parent = + context.router.parent() as StackRouter; + final facility = await parent.push( + FacilitySelectionRoute( + facilities: facilities, + ), + ) as FacilityModel?; - if (facility == null) return; - form.control(_referredToKey).value = - localizations.translate('FAC_${facility.id}'); - setState(() { - selectedProjectFacilityId = facility.id; - }); + if (facility == null) return; + form.control(_referredToKey).value = + localizations.translate('FAC_${facility.id}'); + setState(() { + selectedProjectFacilityId = facility.id; + }); + }, + child: IgnorePointer( + child: ReactiveWrapperField( + formControlName: _referredToKey, + validationMessages: { + 'required': (_) => localizations.translate( + i18.referBeneficiary + .facilityValidationMessage, + ), }, - child: IgnorePointer( - child: DigitTextFormField( - hideKeyboard: true, - label: localizations.translate( - i18.referBeneficiary.referredToLabel, - ), - isRequired: true, - suffix: const Padding( - padding: EdgeInsets.all(8.0), - child: Icon(Icons.search), - ), - formControlName: _referredToKey, - readOnly: true, - validationMessages: { - 'required': (_) => localizations.translate( - i18.referBeneficiary - .facilityValidationMessage, - ), - }, - onTap: () async { + builder: (field)=> LabeledField( + label: localizations.translate( + i18.referBeneficiary.referredToLabel, + ), + isRequired: true, + child: DigitSearchFormInput( + // hideKeyboard: true, + // readOnly: true,r + errorMessage: field.errorText, + initialValue: form.control(_referredToKey).value, + onSuffixTap: (value) async { final parent = context.router.parent() as StackRouter; final facility = await parent.push( @@ -337,35 +344,56 @@ class ReferBeneficiaryPageState extends LocalizedState { ), ), ), - DigitRadioButtonList( - labelStyle: DigitTheme - .instance.mobileTheme.textTheme.bodyLarge, - formControlName: _referralReason, - valueMapper: (val) => - localizations.translate(val.label), - options: reasons, - labelText: localizations.translate( - i18.referBeneficiary.reasonForReferral, - ), - isRequired: true, - errorMessage: localizations.translate( - i18.common.corecommonRequired, - ), - onValueChange: (val) { - form.control(_referralReason).value = val; - }, + ), + ), + ReactiveWrapperField( + formControlName: _referralReason, + validationMessages: { + 'required': (_) => localizations.translate( + i18.common.corecommonRequired, + ), + }, + + builder: (field)=> LabeledField( + label: localizations.translate( + i18.referBeneficiary.reasonForReferral, ), - DigitTextFormField( - formControlName: _referralComments, - label: localizations.translate( - i18.referBeneficiary.referralComments, + isRequired: true, + child: Align( + alignment: Alignment.topLeft, + child: RadioList( + radioButtons: reasons + .map((e)=> + RadioButtonModel( + code: e.key.toString(), + name: localizations.translate(e.label) + ) + ).toList(), + errorMessage: field.errorText, + groupValue: form.control(_referralReason).value??'', + onChanged: (val) { + form.control(_referralReason).value = val.code; + }, ), - minLines: 3, - maxLines: 3, ), - ]), - ], - ), + ), + ), + ReactiveWrapperField( + formControlName: _referralComments, + builder: (field)=> LabeledField( + label: localizations.translate( + i18.referBeneficiary.referralComments, + ), + child: DigitTextAreaFormInput( + maxLine: 3, + initialValue: form.control(_referralComments).value, + onChange: (value){ + form.control(_referralComments).value=value; + }, + ), + ), + ), + ] ), ), ], @@ -387,7 +415,10 @@ class ReferBeneficiaryPageState extends LocalizedState { validators: [Validators.required], ), _referredToKey: FormControl(validators: [Validators.required]), - _referralReason: FormControl(value: null), + _referralReason: FormControl( + value: null, + validators: [Validators.required], + ), _referralComments: FormControl(value: null), }); } diff --git a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart index 033d184ac..c6f74d7d0 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart @@ -1,9 +1,12 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/atoms/selection_card.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/atoms/selection_card.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:intl/intl.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:registration_delivery/models/entities/additional_fields_type.dart'; import 'package:registration_delivery/registration_delivery.dart'; @@ -45,6 +48,7 @@ class RefusedDeliveryPageState extends LocalizedState { final theme = Theme.of(context); final bloc = context.read(); final router = context.router; + final textTheme = theme.digitTextTheme(context); return Scaffold( body: ReactiveFormBuilder( @@ -63,11 +67,18 @@ class RefusedDeliveryPageState extends LocalizedState { ], ), footer: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), + margin: const EdgeInsets.only(top: spacer2), padding: - const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: DigitElevatedButton( - onPressed: () { + const EdgeInsets.all(spacer2), + children: [ + Button( + label: localizations.translate( + i18.householdLocation.actionLabel, + ), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () { form.markAllAsTouched(); if (form.control(_reasonOfRefusal).value == null) { @@ -140,121 +151,112 @@ class RefusedDeliveryPageState extends LocalizedState { ); context.router.push(DeliverySummaryRoute()); }, - child: Center( - child: Text( - localizations.translate( - i18.householdLocation.actionLabel, - ), - ), - ), ), + ] ), slivers: [ SliverToBoxAdapter( child: DigitCard( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: const EdgeInsets.fromLTRB( - 0, 0, 0, kPadding), - child: Text( - localizations.translate( - i18.deliverIntervention - .refusedDeliveryLabel, - ), - style: theme.textTheme.displayMedium, + children: [ + Padding( + padding: const EdgeInsets.all(spacer2), + child: Text( + localizations.translate( + i18.deliverIntervention + .refusedDeliveryLabel, ), + style: textTheme.headingXl, ), - Column(children: [ - refusedDeliveryShowcaseData.dateOfVisit - .buildWith( - child: DigitDateFormPicker( - isEnabled: false, - formControlName: _dataOfRefusalKey, - label: localizations.translate( - i18.deliverIntervention - .refusedDeliveryVisitDateLabel, - ), + ), + refusedDeliveryShowcaseData.dateOfVisit + .buildWith( + child: ReactiveWrapperField( + formControlName: _dataOfRefusalKey, + builder: (field)=> LabeledField( + label: localizations.translate( + i18.deliverIntervention + .refusedDeliveryVisitDateLabel, + ), + child: DigitDateFormInput( + readOnly: true, confirmText: localizations.translate( i18.common.coreCommonOk, ), cancelText: localizations.translate( i18.common.coreCommonCancel, ), - isRequired: false, - padding: const EdgeInsets.only( - top: kPadding, - ), + initialValue: DateFormat('dd MMM yyyy') + .format(form.control(_dataOfRefusalKey).value), ), ), - const SizedBox( - height: kPadding, + ), + ), + refusedDeliveryShowcaseData.reasonOfRefusal + .buildWith( + child: SelectionCard( + title: localizations.translate( + i18.deliverIntervention + .reasonForRefusalLabel, ), - refusedDeliveryShowcaseData.reasonOfRefusal - .buildWith( - child: LabeledField( - label: localizations.translate( - i18.deliverIntervention - .reasonForRefusalLabel, - ), - isRequired: true, - child: SelectionBox( - width: MediaQuery.of(context).size.width * - .36, - allowMultipleSelection: false, - options: RegistrationDeliverySingleton() - .refusalReasons ?? - [], - onSelectionChanged: (value) { + isRequired: true, + width: MediaQuery.of(context).size.width * + .36, + allowMultipleSelection: false, + options: RegistrationDeliverySingleton() + .refusalReasons ?? + [], + onSelectionChanged: (value) { + form + .control(_reasonOfRefusal) + .markAsTouched(); + setState(() { + if (value.isNotEmpty) { + form + .control(_reasonOfRefusal) + .value = value.first; + } else { + form + .control(_reasonOfRefusal) + .value = null; + setState(() { form .control(_reasonOfRefusal) - .markAsTouched(); - setState(() { - if (value.isNotEmpty) { - form - .control(_reasonOfRefusal) - .value = value.first; - } else { - form - .control(_reasonOfRefusal) - .value = null; - setState(() { - form - .control(_reasonOfRefusal) - .setErrors({'': true}); - }); - } - }); - }, - valueMapper: (value) { - return localizations.translate( - 'REASON_${value.toString()}'); - }, - errorMessage: form - .control(_reasonOfRefusal) - .hasErrors && - form - .control(_reasonOfRefusal) - .touched - ? localizations.translate( - i18.common.corecommonRequired) - : null, - ), - ), - ), - refusedDeliveryShowcaseData.comments.buildWith( - child: DigitTextFormField( - formControlName: _deliveryCommentKey, - label: localizations.translate(i18 - .deliverIntervention - .reasonForRefusalCommentLabel), + .setErrors({'': true}); + }); + } + }); + }, + valueMapper: (value) { + return localizations.translate( + 'REASON_${value.toString()}'); + }, + errorMessage: form + .control(_reasonOfRefusal) + .hasErrors && + form + .control(_reasonOfRefusal) + .touched + ? localizations.translate( + i18.common.corecommonRequired) + : null, + ), + ), + refusedDeliveryShowcaseData.comments.buildWith( + child: ReactiveWrapperField( + formControlName: _deliveryCommentKey, + builder: (field)=> LabeledField( + label: localizations.translate(i18 + .deliverIntervention + .reasonForRefusalCommentLabel), + child: DigitTextFormInput( + onChange: (value){ + form.control(_deliveryCommentKey).value=value; + }, ), ), - ]), - ], - ), + ), + ), + ] ), ), ], diff --git a/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart b/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart index 3f479f68c..20cd59839 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart @@ -1,7 +1,10 @@ import 'package:auto_route/auto_route.dart'; import 'package:collection/collection.dart'; -import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; @@ -58,6 +61,7 @@ class SideEffectsPageState extends LocalizedState { @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); return ProductVariantBlocWrapper( child: BlocBuilder( @@ -78,272 +82,255 @@ class SideEffectsPageState extends LocalizedState { showHelp: false, ), footer: DigitCard( - margin: const EdgeInsets.fromLTRB( - 0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB( - kPadding, 0, kPadding, 0), - child: DigitElevatedButton( - onPressed: () async { - if (symptomsValues.any((e) => e)) { - setState(() { - symptomsSelected = true; - }); + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [ + Button( + label: localizations.translate( + i18.common.coreCommonNext, + ), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () async { + if (symptomsValues.any((e) => e)) { + setState(() { + symptomsSelected = true; + }); - final shouldSubmit = - await DigitDialog.show( - context, - options: DigitDialogOptions( - titleText: localizations.translate( - i18.deliverIntervention - .dialogTitle, - ), - contentText: - localizations.translate( - i18.deliverIntervention - .dialogContent, - ), - primaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonSubmit, - ), - action: (ctx) { - final List symptoms = - []; + final shouldSubmit = + await showDialog( + context: context, + builder: (ctx) => Popup( + title: localizations.translate( + i18.deliverIntervention + .dialogTitle, + ), + description: + localizations.translate( + i18.deliverIntervention + .dialogContent, + ), + actions: [ + Button( + label: localizations + .translate( + i18.common + .coreCommonSubmit, + ), + onPressed: () { + final List + symptoms = []; - for (int i = 0; - i < symptomsValues.length; - i++) { - if (symptomsValues[i]) { - symptoms.add( - symptomsTypes[i], - ); - } - } + for (int i = 0; + i < + symptomsValues + .length; + i++) { + if (symptomsValues[ + i]) { + symptoms.add( + symptomsTypes[i], + ); + } + } - final clientReferenceId = - IdGen.i.identifier; - context - .read() - .add( - SideEffectsSubmitEvent( - SideEffectModel( - id: null, - taskClientReferenceId: - widget.tasks.last - .clientReferenceId, - projectId: - RegistrationDeliverySingleton() - .projectId, - symptoms: symptoms, - clientReferenceId: - clientReferenceId, - tenantId: - RegistrationDeliverySingleton() - .tenantId, - rowVersion: 1, - auditDetails: - AuditDetails( - createdBy: - RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: - context - .millisecondsSinceEpoch(), - ), - clientAuditDetails: - ClientAuditDetails( - createdBy: - RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: - context - .millisecondsSinceEpoch(), - ), - ), - false, + final clientReferenceId = + IdGen.i.identifier; + context + .read< + SideEffectsBloc>() + .add( + SideEffectsSubmitEvent( + SideEffectModel( + id: null, + taskClientReferenceId: + widget + .tasks + .last + .clientReferenceId, + projectId: + RegistrationDeliverySingleton() + .projectId, + symptoms: + symptoms, + clientReferenceId: + clientReferenceId, + tenantId: + RegistrationDeliverySingleton() + .tenantId, + rowVersion: 1, + auditDetails: + AuditDetails( + createdBy: + RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: + context + .millisecondsSinceEpoch(), + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: + context + .millisecondsSinceEpoch(), + ), + clientAuditDetails: + ClientAuditDetails( + createdBy: + RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: + context + .millisecondsSinceEpoch(), + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: + context + .millisecondsSinceEpoch(), + ), + ), + false, + ), + ); + Navigator.of( + context, + rootNavigator: true, + ).pop(true); + }, + type: ButtonType.primary, + size: ButtonSize.large), + Button( + label: localizations + .translate( + i18.common + .coreCommonCancel, ), - ); - Navigator.of( - context, - rootNavigator: true, - ).pop(true); - }, - ), - secondaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonCancel, + onPressed: () => + Navigator.of( + context, + rootNavigator: true, + ).pop(false), + type: + ButtonType.secondary, + size: ButtonSize.large) + ], ), - action: (context) => Navigator.of( - context, - rootNavigator: true, - ).pop(false), - ), - ), - ); + ); - if (shouldSubmit ?? false) { - final reloadState = context - .read(); + if (shouldSubmit ?? false) { + final reloadState = context.read< + HouseholdOverviewBloc>(); - Future.delayed( - const Duration(milliseconds: 500), - () { - reloadState.add( - HouseholdOverviewReloadEvent( - projectId: - RegistrationDeliverySingleton() - .projectId!, - projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, - ), - ); - }, - ).then((value) => context.router.push( - HouseholdAcknowledgementRoute( - enableViewHousehold: true, - ), - )); - } - } else { - setState(() { - symptomsSelected = false; - }); - } - }, - child: Center( - child: Text( - localizations.translate( - i18.common.coreCommonNext, - ), + Future.delayed( + const Duration( + milliseconds: 500), + () { + reloadState.add( + HouseholdOverviewReloadEvent( + projectId: + RegistrationDeliverySingleton() + .projectId!, + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType!, + ), + ); + }, + ).then((value) => + context.router.push( + HouseholdAcknowledgementRoute( + enableViewHousehold: true, + ), + )); + } + } else { + setState(() { + symptomsSelected = false; + }); + } + }, ), - ), - ), - ), + ]), slivers: [ SliverToBoxAdapter( - child: DigitCard( - padding: const EdgeInsets.only( - left: kPadding * 2, - right: kPadding * 2, - top: kPadding * 2, - bottom: kPadding * 2, + child: DigitCard(children: [ + Text( + localizations.translate( + i18.adverseEvents.sideEffectsLabel, + ), + style: textTheme.headingXl, + ), + Text( + '${localizations.translate( + i18.adverseEvents.selectSymptomsLabel, + )}*', + style: textTheme.headingS, ), - child: Column( - children: [ - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, + StatefulBuilder( + builder: ( + BuildContext context, + StateSetter stateSetter, + ) { + return Column( children: [ - Expanded( - child: Text( - localizations.translate( - i18.adverseEvents - .sideEffectsLabel, - ), - style: theme - .textTheme.displayMedium, - ), - ), - ], - ), - Align( - alignment: Alignment.topLeft, - child: Padding( - padding: const EdgeInsets.only( - right: kPadding * 2, - top: kPadding * 2, - bottom: kPadding * 2, - ), - child: Text( - '${localizations.translate( - i18.adverseEvents - .selectSymptomsLabel, - )}*', - style: theme - .textTheme.headlineSmall, - ), - ), - ), - StatefulBuilder( - builder: ( - BuildContext context, - StateSetter stateSetter, - ) { - return Column( - children: [ - Column( - children: - symptomTypesOptions - .mapIndexed( - (i, e) => - DigitCheckboxTile( - padding: - EdgeInsets - .zero, - label: localizations - .translate( - e.key, - ), - value: - symptomsValues[ - i], - onChanged: - (value) { - stateSetter( - () { - symptomsValues[ - i] = - !symptomsValues[ - i]; - symptomsSelected = - symptomsValues - .any( - (e) => - e, - ); - }, - ); - }, - ), - ) - .toList(), - ), - Visibility( - visible: !symptomsSelected, - child: Align( - alignment: - Alignment.centerLeft, - child: Text( - localizations.translate( - i18.common - .coreCommonRequiredItems, - ), - style: TextStyle( - color: theme - .colorScheme - .error, + Column( + children: symptomTypesOptions + .mapIndexed( + (i, e) => DigitCheckbox( + label: localizations + .translate( + e.key, ), + value: + symptomsValues[i], + onChanged: (value) { + stateSetter( + () { + symptomsValues[ + i] = + !symptomsValues[ + i]; + symptomsSelected = + symptomsValues + .any( + (e) => e, + ); + }, + ); + }, + ), + ) + .toList(), + ), + Visibility( + visible: !symptomsSelected, + child: Padding( + padding: + const EdgeInsets.only( + top: spacer2), + child: Align( + alignment: + Alignment.centerLeft, + child: Text( + localizations.translate( + i18.common + .coreCommonRequiredItems, + ), + style: TextStyle( + color: theme.colorTheme + .alert.error, ), ), ), - ], - ); - }, - ), - ], + ), + ), + ], + ); + }, ), - ), + ]), ), ], ), diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart index b0802ed80..5d1375c32 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart @@ -8,6 +8,7 @@ import '../../../utils/i18_key_constants.dart' as i18; import '../../../widgets/localized.dart'; import '../../blocs/search_households/search_bloc_common_wrapper.dart'; import '../../router/registration_delivery_router.gm.dart'; +import '../../utils/utils.dart'; @RoutePage() class BeneficiaryAcknowledgementPage extends LocalizedStatefulWidget { @@ -26,6 +27,11 @@ class BeneficiaryAcknowledgementPage extends LocalizedStatefulWidget { class BeneficiaryAcknowledgementPageState extends LocalizedState { + + final canProceed = (RegistrationDeliverySingleton().projectType!.validMinAge!=null + && RegistrationDeliverySingleton().projectType!.validMaxAge!=null + )?true:false; + @override Widget build(BuildContext context) { return Scaffold( @@ -34,7 +40,8 @@ class BeneficiaryAcknowledgementPageState title: localizations .translate(i18.acknowledgementSuccess.acknowledgementLabelText), actions: [ - Button( + if(canProceed) + Button( label: localizations.translate( i18.householdDetails.viewHouseHoldDetailsAction, ), @@ -53,7 +60,7 @@ class BeneficiaryAcknowledgementPageState Button( label: localizations.translate(i18.acknowledgementSuccess.actionLabelText), onPressed: ()=>context.router.maybePop(), - type: ButtonType.secondary, + type: (canProceed)?ButtonType.secondary:ButtonType.primary, size: ButtonSize.large ), ], diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index 21ebae9bc..25194d3bd 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -5,7 +5,6 @@ import 'package:digit_scanner/blocs/scanner.dart'; import 'package:digit_scanner/pages/qr_scanner.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; -import 'package:digit_ui_components/utils/date_utils.dart'; import 'package:digit_ui_components/widgets/atoms/dob_picker.dart'; import 'package:digit_ui_components/widgets/atoms/selection_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; @@ -359,7 +358,7 @@ class IndividualDetailsPageState extends LocalizedState { i18.individualDetails.checkboxLabelText, ), value: widget.isHeadOfHousehold, - isDisabled: true, + isDisabled: widget.isHeadOfHousehold, onChanged: (_){ }, @@ -429,9 +428,9 @@ class IndividualDetailsPageState extends LocalizedState { readOnly: form.control(_idTypeKey).value == 'DEFAULT', - initialValue: form.control(_idTypeKey).value, + initialValue: form.control(_idNumberKey).value, onChange: (value){ - form.control(_idTypeKey).value=value; + form.control(_idNumberKey).value=value; }, errorMessage: field.errorText, ), diff --git a/packages/registration_delivery/lib/pages/reason_for_deletion.dart b/packages/registration_delivery/lib/pages/reason_for_deletion.dart index e001b3627..c4d38dc12 100644 --- a/packages/registration_delivery/lib/pages/reason_for_deletion.dart +++ b/packages/registration_delivery/lib/pages/reason_for_deletion.dart @@ -1,6 +1,7 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/atoms/digit_toaster.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; @@ -31,6 +32,7 @@ class ReasonForDeletionPageState extends LocalizedState { @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); return Scaffold( body: ReactiveFormBuilder( @@ -38,8 +40,10 @@ class ReasonForDeletionPageState extends LocalizedState { builder: (context, form, child) { return ScrollableContent( footer: DigitCard( - margin: const EdgeInsets.only(left: 0, right: 0, top: 10), - child: BlocBuilder( + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [ + BlocBuilder( builder: (ctx, state) { if (state.loading) { return const Center( @@ -47,7 +51,12 @@ class ReasonForDeletionPageState extends LocalizedState { ); } - return DigitElevatedButton( + return Button( + label: localizations + .translate(i18.householdLocation.actionLabel), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, onPressed: () { if (form.valid) { !widget.isHousholdDelete @@ -115,68 +124,58 @@ class ReasonForDeletionPageState extends LocalizedState { // context.router.push(HouseholdAcknowledgementRoute( // enableViewHousehold: true)); } else { - DigitToast.show(context, - options: DigitToastOptions( - localizations - .translate(i18.common.corecommonRequired), - true, - theme)); + Toast.showToast( + context, + message: localizations + .translate(i18.common.corecommonRequired), + type: ToastType.error + ); } }, - child: Center( - child: Text( - localizations - .translate(i18.householdLocation.actionLabel), - ), - ), ); }, ), + ] ), header: const Column(children: [ BackNavigationHelpHeaderWidget(), ]), children: [ DigitCard( - child: Column( - children: [ - Align( - alignment: Alignment.topLeft, - child: Text( - localizations.translate( - i18.reasonForDeletion.reasonForDeletionLabel, - ), - style: theme.textTheme.displayMedium, + children: [ + Align( + alignment: Alignment.topLeft, + child: Text( + localizations.translate( + i18.reasonForDeletion.reasonForDeletionLabel, ), + style: textTheme.headingXl, ), - Padding( - padding: const EdgeInsets.only(bottom: 10.0), - child: Column( - children: widget.isHousholdDelete - ? RegistrationDeliverySingleton() - .householdDeletionReasonOptions! - .map((e) => ReactiveRadioListTile( - title: Text( - localizations.translate(e), - ), - value: e, - formControlName: _reasonForDeletionKey, - )) - .toList() - : RegistrationDeliverySingleton() - .householdMemberDeletionReasonOptions! - .map((e) => ReactiveRadioListTile( - title: Text( - localizations.translate(e), - ), - value: e, - formControlName: _reasonForDeletionKey, - )) - .toList(), - ), - ), - ], - ), + ), + Column( + children: widget.isHousholdDelete + ? RegistrationDeliverySingleton() + .householdDeletionReasonOptions! + .map((e) => ReactiveRadioListTile( + title: Text( + localizations.translate(e), + ), + value: e, + formControlName: _reasonForDeletionKey, + )) + .toList() + : RegistrationDeliverySingleton() + .householdMemberDeletionReasonOptions! + .map((e) => ReactiveRadioListTile( + title: Text( + localizations.translate(e), + ), + value: e, + formControlName: _reasonForDeletionKey, + )) + .toList(), + ), + ] ), ], ); diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index 0cf5c4650..c8ae6f89b 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -1,8 +1,15 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_scanner/blocs/scanner.dart'; import 'package:digit_scanner/pages/qr_scanner.dart'; +import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_chip.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_search_bar.dart'; +import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; +import 'package:digit_ui_components/widgets/atoms/switch.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart'; @@ -72,6 +79,7 @@ class _SearchBeneficiaryPageState @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); return KeyboardVisibilityBuilder( builder: (context, isKeyboardVisible) => Scaffold( @@ -92,11 +100,11 @@ class _SearchBeneficiaryPageState slivers: [ SliverToBoxAdapter( child: Padding( - padding: const EdgeInsets.all(kPadding), + padding: const EdgeInsets.all(spacer2), child: Column( children: [ Padding( - padding: const EdgeInsets.all(kPadding), + padding: const EdgeInsets.all(spacer2), child: Align( alignment: Alignment.topLeft, child: Text( @@ -107,7 +115,7 @@ class _SearchBeneficiaryPageState : i18.searchBeneficiary .searchIndividualLabelText, ), - style: theme.textTheme.displayMedium, + style: textTheme.headingXl, textAlign: TextAlign.left, ), ), @@ -117,57 +125,55 @@ class _SearchBeneficiaryPageState return Column( children: [ locationState.latitude != null - ? Row( - children: [ - Switch( - value: isProximityEnabled, - onChanged: (value) { - searchController.clear(); - setState(() { - isProximityEnabled = value; - lat = locationState.latitude!; - long = locationState.longitude!; - }); + ? Padding( + padding: const EdgeInsets.all(spacer2), + child: CustomSwitch( + mainAxisAlignment: MainAxisAlignment.start, + label: localizations.translate(i18.searchBeneficiary.proximityLabel,), + value: isProximityEnabled, + onChanged: (value) { + searchController.clear(); + setState(() { + isProximityEnabled = value; + lat = locationState.latitude!; + long = locationState.longitude!; + }); - if (locationState.hasPermissions && - value && - locationState.latitude != - null && - locationState.longitude != - null && - RegistrationDeliverySingleton() - .maxRadius != - null && - isProximityEnabled) { - triggerGlobalSearchEvent(); - } else { - blocWrapper.clearEvent(); - triggerGlobalSearchEvent(); - } - }, - ), - Text( - localizations.translate( - i18.searchBeneficiary - .proximityLabel, - ), - ), - ], - ) + if (locationState.hasPermissions && + value && + locationState.latitude != + null && + locationState.longitude != + null && + RegistrationDeliverySingleton() + .maxRadius != + null && + isProximityEnabled) { + triggerGlobalSearchEvent(); + } else { + blocWrapper.clearEvent(); + triggerGlobalSearchEvent(); + } + }, + ), + ) : const Offstage(), - DigitSearchBar( - controller: searchController, - hintText: localizations.translate( - i18.searchBeneficiary - .beneficiarySearchHintText, + Padding( + padding: const EdgeInsets.all(spacer2), + child: DigitSearchBar( + controller: searchController, + hintText: localizations.translate( + i18.searchBeneficiary + .beneficiarySearchHintText, + ), + textCapitalization: TextCapitalization.words, + onChanged: (value) { + if (value.isEmpty || + value.trim().length > 2) { + triggerGlobalSearchEvent(); + } + }, ), - textCapitalization: TextCapitalization.words, - onChanged: (value) { - if (value.isEmpty || - value.trim().length > 2) { - triggerGlobalSearchEvent(); - } - }, ), RegistrationDeliverySingleton() .searchHouseHoldFilter != @@ -178,13 +184,12 @@ class _SearchBeneficiaryPageState ? Align( alignment: Alignment.topLeft, child: Padding( - padding: const EdgeInsets.only( - left: kPadding), - child: DigitIconButton( - textDirection: TextDirection.rtl, - iconText: - getFilterIconNLabel()['label'], - icon: getFilterIconNLabel()['icon'], + padding: const EdgeInsets.all(spacer2), + child: Button( + label: getFilterIconNLabel()['label'], + size: ButtonSize.medium, + type: ButtonType.tertiary, + suffixIcon: getFilterIconNLabel()['icon'], onPressed: () => showFilterDialog(), ), ), @@ -193,83 +198,31 @@ class _SearchBeneficiaryPageState selectedFilters.isNotEmpty ? Align( alignment: Alignment.topLeft, - child: SizedBox( - height: - MediaQuery.of(context).size.height * - 0.06, + child : SizedBox( + height: MediaQuery.of(context).size.height * 0.06, child: ListView.builder( shrinkWrap: true, scrollDirection: Axis.horizontal, itemCount: selectedFilters.length, itemBuilder: (context, index) { return Padding( - padding: const EdgeInsets.all( - kPadding / 2), - child: Container( - padding: - const EdgeInsets.all( - kPadding / 2), - decoration: BoxDecoration( - border: Border.all( - color: - const DigitColors() - .cloudGray), - borderRadius: - BorderRadius.circular( - kPadding / 2), - ), - child: Row( - children: [ - Text( - localizations.translate( - getStatus( - selectedFilters[ - index])), - style: TextStyle( - color: const DigitColors() - .davyGray)), - Text( - ' (${searchHouseholdsState.totalResults})', - style: TextStyle( - color: const DigitColors() - .davyGray)), - const SizedBox( - width: kPadding), - GestureDetector( - onTap: () { - setState(() { - selectedFilters.remove( - selectedFilters[ - index]); - }); - blocWrapper - .clearEvent(); - triggerGlobalSearchEvent(); - }, - child: Container( - decoration: - BoxDecoration( - color: - const DigitColors() - .davyGray, - borderRadius: - BorderRadius - .circular( - kPadding / - 2), - ), - child: Icon( - Icons.close, - color: - const DigitColors() - .white, - ), - ), - ) - ], - ), - )); - }), + padding: const EdgeInsets.all(spacer1), + child: DigitChip( + label: '${localizations.translate(getStatus(selectedFilters[index]))}' + ' (${searchHouseholdsState.totalResults})', + onItemDelete: (){ + setState(() { + selectedFilters.remove( + selectedFilters[index] + ); + }); + blocWrapper.clearEvent(); + triggerGlobalSearchEvent(); + }, + ), + ); + } + ), ), ) : const Offstage(), @@ -277,10 +230,11 @@ class _SearchBeneficiaryPageState ); }, ), - const SizedBox(height: kPadding * 2), + if (searchHouseholdsState.resultsNotFound && !searchHouseholdsState.loading) - DigitInfoCard( + InfoCard( + type: InfoType.info, description: localizations.translate( i18.searchBeneficiary.beneficiaryInfoDescription, ), @@ -331,22 +285,22 @@ class _SearchBeneficiaryPageState ); return Container( - margin: const EdgeInsets.only(bottom: kPadding), + margin: const EdgeInsets.only(bottom: spacer2), child: ViewBeneficiaryCard( distance: isProximityEnabled ? distance : null, householdMember: i, onOpenPressed: () async { final scannerBloc = - context.read(); + context.read(); scannerBloc.add( const DigitScannerEvent.handleScanner(), ); if ((i.tasks != null && - i.tasks?.last.status == - Status.closeHousehold.toValue() && - (i.tasks ?? []).isNotEmpty) || + i.tasks?.last.status == + Status.closeHousehold.toValue() && + (i.tasks ?? []).isNotEmpty) || (i.projectBeneficiaries ?? []).isEmpty) { setState(() { selectedFilters = []; @@ -356,19 +310,19 @@ class _SearchBeneficiaryPageState BeneficiaryRegistrationWrapperRoute( initialState: BeneficiaryRegistrationState .editHousehold( - householdModel: i.household!, - individualModel: i.members!, - registrationDate: DateTime.now(), - projectBeneficiaryModel: - (i.projectBeneficiaries ?? []) - .isNotEmpty - ? i.projectBeneficiaries - ?.last - : null, - addressModel: i.headOfHousehold! - .address!.last, - headOfHousehold: - i.headOfHousehold), + householdModel: i.household!, + individualModel: i.members!, + registrationDate: DateTime.now(), + projectBeneficiaryModel: + (i.projectBeneficiaries ?? []) + .isNotEmpty + ? i.projectBeneficiaries + ?.last + : null, + addressModel: i.headOfHousehold! + .address!.last, + headOfHousehold: + i.headOfHousehold), ), ); } else { @@ -398,69 +352,58 @@ class _SearchBeneficiaryPageState ], ), ), - bottomNavigationBar: SizedBox( - height: 150, - child: Card( - margin: const EdgeInsets.all(0), - child: Container( - padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: Column( - children: [ - DigitElevatedButton( - onPressed: searchHouseholdsState.searchQuery != null && - searchHouseholdsState.searchQuery!.isNotEmpty - ? () { - FocusManager.instance.primaryFocus?.unfocus(); - context.read().add( - const DigitScannerEvent.handleScanner(), - ); - context.router - .push(BeneficiaryRegistrationWrapperRoute( - initialState: BeneficiaryRegistrationCreateState( - searchQuery: searchHouseholdsState.searchQuery, - ), - )); - searchController.clear(); - selectedFilters = []; - blocWrapper.clearEvent(); - } - : null, - child: Center( - child: Text(localizations.translate( - i18.searchBeneficiary.beneficiaryAddActionLabel, - )), - ), - ), - DigitOutlineIconButton( - buttonStyle: OutlinedButton.styleFrom( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.zero, + bottomNavigationBar: DigitCard( + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [Button( + label: localizations.translate( + i18.searchBeneficiary.beneficiaryAddActionLabel, + ), + mainAxisSize: MainAxisSize.max, + type: ButtonType.primary, + size: ButtonSize.large, + isDisabled: searchHouseholdsState.searchQuery != null && + searchHouseholdsState.searchQuery!.isNotEmpty?false:true, + onPressed: () { + FocusManager.instance.primaryFocus?.unfocus(); + context.read().add( + const DigitScannerEvent.handleScanner(), + ); + context.router + .push(BeneficiaryRegistrationWrapperRoute( + initialState: BeneficiaryRegistrationCreateState( + searchQuery: searchHouseholdsState.searchQuery, ), - ), - onPressed: () { - blocWrapper.clearEvent(); - selectedFilters = []; - searchController.clear(); - Navigator.of(context).push( - MaterialPageRoute( - builder: (context) => const DigitScannerPage( - quantity: 1, - isGS1code: false, - singleValue: true, - ), - settings: const RouteSettings(name: '/qr-scanner'), - ), - ); - }, - icon: Icons.qr_code, - label: localizations.translate( - i18.deliverIntervention.scannerLabel, - ), + )); + searchController.clear(); + selectedFilters = []; + blocWrapper.clearEvent(); + }, + ), + Button( + type: ButtonType.secondary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () { + blocWrapper.clearEvent(); + selectedFilters = []; + searchController.clear(); + Navigator.of(context).push( + MaterialPageRoute( + builder: (context) => const DigitScannerPage( + quantity: 1, + isGS1code: false, + singleValue: true, ), - ], - ), + settings: const RouteSettings(name: '/qr-scanner'), + ), + ); + }, + prefixIcon: Icons.qr_code, + label: localizations.translate( + i18.deliverIntervention.scannerLabel, ), - ), + ),] ), ), ); @@ -476,19 +419,23 @@ class _SearchBeneficiaryPageState } showFilterDialog() async { - var filters = await DigitDialog.show(context, - options: DigitDialogOptions( - titlePadding: EdgeInsets.zero, - dialogPadding: EdgeInsets.zero, - contentPadding: EdgeInsets.zero, - barrierDismissible: true, - content: StatusFilter( - selectedFilters: selectedFilters, - titleIcon: Icon(getFilterIconNLabel()['icon'], - color: const DigitColors().burningOrange), - titleText: getFilterIconNLabel()['label'], - isCloseIcon: true, + var filters = await showDialog( + context: context, + builder: (ctx)=> Popup( + title: getFilterIconNLabel()['label'], + titleIcon: Icon(getFilterIconNLabel()['icon'], + color: DigitTheme.instance.colorScheme.primary, ), + onCrossTap: (){ + Navigator.of( + context, + rootNavigator: true, + ).pop(); + }, + additionalWidgets: [ + StatusFilter( + selectedFilters: selectedFilters, + ),] )); if (filters != null && filters.isNotEmpty) { diff --git a/packages/registration_delivery/lib/pages/summary_page.dart b/packages/registration_delivery/lib/pages/summary_page.dart index 873e85f30..0b37f644f 100644 --- a/packages/registration_delivery/lib/pages/summary_page.dart +++ b/packages/registration_delivery/lib/pages/summary_page.dart @@ -1,7 +1,9 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/utils/date_utils.dart'; -import 'package:digit_components/widgets/atoms/details_card.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/utils/date_utils.dart'; +import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; +import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:recase/recase.dart'; @@ -84,7 +86,7 @@ class SummaryPageState extends LocalizedState { ), Padding( padding: - const EdgeInsets.only(bottom: kPadding, left: kPadding), + const EdgeInsets.only(bottom: spacer2, left: spacer2), child: Align( alignment: Alignment.centerLeft, child: Text( @@ -98,109 +100,116 @@ class SummaryPageState extends LocalizedState { ), ]), footer: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: ValueListenableBuilder( - valueListenable: clickedStatus, - builder: (context, bool isClicked, _) { - return DigitElevatedButton( - onPressed: isClicked - ? null - : () async { - final bloc = - context.read(); - final userId = RegistrationDeliverySingleton() - .loggedInUserUuid; - final projectId = - RegistrationDeliverySingleton().projectId; - - householdState.maybeWhen( - orElse: () { - return; - }, - summary: ( - navigateToRoot, - householdModel, - individualModel, - projectBeneficiaryModel, - registrationDate, - addressModel, - loading, - isHeadOfHousehold, - ) async { - final submit = await DigitDialog.show( - context, - options: DigitDialogOptions( - titleText: localizations.translate( - i18.deliverIntervention.dialogTitle, - ), - contentText: localizations.translate( - i18.deliverIntervention.dialogContent, - ), - primaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonSubmit, - ), - action: (context) { - clickedStatus.value = true; - Navigator.of( - context, - rootNavigator: true, - ).pop(true); - }, - ), - secondaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonCancel, - ), - action: (context) => Navigator.of( - context, - rootNavigator: true, - ).pop(false), - ), - ), - ); - - if (submit ?? false) { - if (context.mounted) { - bloc.add( - BeneficiaryRegistrationCreateEvent( - projectId: projectId!, - userUuid: userId!, - boundary: - RegistrationDeliverySingleton() - .boundary!, - tag: projectBeneficiaryModel?.tag, - navigateToSummary: false), - ); - } - } - }, - ); - }, - child: Center( - child: Text( - householdState.mapOrNull( + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [ + ValueListenableBuilder( + valueListenable: clickedStatus, + builder: (context, bool isClicked, _) { + return Button( + label: householdState.mapOrNull( editIndividual: (value) => localizations .translate(i18.common.coreCommonSave), ) ?? localizations .translate(i18.common.coreCommonSubmit), - ), - ), - ); - }, - ), - ), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + isDisabled: isClicked ? true : false, + onPressed: () async { + final bloc = + context.read(); + final userId = RegistrationDeliverySingleton() + .loggedInUserUuid; + final projectId = + RegistrationDeliverySingleton().projectId; + + householdState.maybeWhen( + orElse: () { + return; + }, + summary: ( + navigateToRoot, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + addressModel, + loading, + isHeadOfHousehold, + ) async { + final submit = await showDialog( + context: context, + builder: (ctx) => Popup( + title: localizations.translate( + i18.deliverIntervention.dialogTitle, + ), + description: localizations.translate( + i18.deliverIntervention.dialogContent, + ), + actions: [ + Button( + label: localizations.translate( + i18.common.coreCommonSubmit, + ), + onPressed: () { + clickedStatus.value = true; + Navigator.of( + context, + rootNavigator: true, + ).pop(true); + }, + type: ButtonType.primary, + size: ButtonSize.large), + Button( + label: localizations.translate( + i18.common.coreCommonCancel, + ), + onPressed: () => Navigator.of( + context, + rootNavigator: true, + ).pop(false), + type: ButtonType.secondary, + size: ButtonSize.large) + ], + ), + ); + + if (submit ?? false) { + if (context.mounted) { + bloc.add( + BeneficiaryRegistrationCreateEvent( + projectId: projectId!, + userUuid: userId!, + boundary: + RegistrationDeliverySingleton() + .boundary!, + tag: projectBeneficiaryModel?.tag, + navigateToSummary: false), + ); + } + } + }, + ); + }, + ); + }, + ), + ]), slivers: [ SliverToBoxAdapter( child: Column( children: [ DigitCard( - child: LabelValueList( + margin: const EdgeInsets.all(spacer2), + children: [ + LabelValueList( heading: localizations.translate(i18 .householdLocation.householdLocationLabelText), - withDivider: true, + + labelFlex: 6, + maxLines: 2, items: [ LabelValuePair( label: localizations.translate( @@ -219,12 +228,14 @@ class SummaryPageState extends LocalizedState { .translate(i18.common.coreCommonNA), isInline: true), ]), - ), + ]), DigitCard( - child: LabelValueList( + margin: const EdgeInsets.all(spacer2), + children: [ + LabelValueList( heading: localizations.translate( i18.householdDetails.householdDetailsLabel), - withDivider: true, + labelFlex: 6, items: [ LabelValuePair( label: localizations.translate( @@ -265,12 +276,14 @@ class SummaryPageState extends LocalizedState { '0', isInline: true), ]), - ), + ]), DigitCard( - child: LabelValueList( + margin: const EdgeInsets.all(spacer2), + children: [ + LabelValueList( heading: localizations.translate( i18.householdDetails.houseDetailsLabel), - withDivider: true, + labelFlex: 6, items: [ LabelValuePair( label: localizations.translate( @@ -306,12 +319,14 @@ class SummaryPageState extends LocalizedState { .join(', '), isInline: true), ]), - ), + ]), DigitCard( - child: LabelValueList( + margin: const EdgeInsets.all(spacer2), + children: [ + LabelValueList( heading: localizations.translate(i18 .individualDetails.individualsDetailsLabelText), - withDivider: true, + labelFlex: 6, items: [ LabelValuePair( label: localizations.translate( @@ -388,7 +403,7 @@ class SummaryPageState extends LocalizedState { i18.common.coreCommonNA)), ), ]), - ), + ]), ], ), ) From 5a6300510ca4d6c6f290b81030b5b582b1f009c5 Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Thu, 19 Sep 2024 14:26:53 +0530 Subject: [PATCH 116/241] widgets updated --- .../widgets/household_acknowledgement.dart | 64 +- .../beneficiary/widgets/past_delivery.dart | 137 ++- .../widgets/record_delivery_cycle.dart | 267 +++--- .../widgets/splash_acknowledgement.dart | 25 +- .../lib/widgets/action_card/action_card.dart | 57 -- .../widgets/back_navigation_help_header.dart | 6 +- .../widgets/beneficiary/beneficiary_card.dart | 28 +- .../beneficiary_statistics_card.dart | 6 +- .../resource_beneficiary_card.dart | 202 +++-- .../beneficiary/view_beneficiary_card.dart | 347 ++++---- .../no_facilities_assigned_dialog.dart | 35 +- .../lib/widgets/member_card/member_card.dart | 825 +++++++++--------- .../progress_bar/beneficiary_progress.dart | 8 +- .../progress_indicator.dart | 8 +- .../lib/widgets/showcase/showcase_button.dart | 10 +- .../widgets/status_filter/status_filter.dart | 103 +-- .../lib/widgets/table_card/table_card.dart | 42 + 17 files changed, 1085 insertions(+), 1085 deletions(-) delete mode 100644 packages/registration_delivery/lib/widgets/action_card/action_card.dart create mode 100644 packages/registration_delivery/lib/widgets/table_card/table_card.dart diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart index 8ff5bcfc5..3674a9fb7 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart @@ -1,5 +1,6 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/molecules/panel_cards.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:registration_delivery/registration_delivery.dart'; @@ -32,36 +33,47 @@ class HouseholdAcknowledgementPageState child: Scaffold( body: BlocBuilder( builder: (context, householdState) { - return DigitAcknowledgement.success( - action: () { - context - .read().add(const SearchHouseholdsEvent.clear()); - final parent = context.router.parent() as StackRouter; - // Pop twice to navigate back to the previous screen - parent.popUntilRoot(); - }, - secondaryAction: () { - final wrapper = context - .read() - .state - .householdMemberWrapper; - - context.router.popAndPush( - BeneficiaryWrapperRoute(wrapper: wrapper), - ); - }, - enableViewHousehold: widget.enableViewHousehold ?? false, - secondaryLabel: localizations.translate( - i18.householdDetails.viewHouseHoldDetailsAction, - ), - actionLabel: localizations - .translate(i18.acknowledgementSuccess.actionLabelText), + return PanelCard( + type: PanelType.success, description: localizations.translate( i18.acknowledgementSuccess.acknowledgementDescriptionText, ), - label: localizations.translate( + title: localizations.translate( i18.acknowledgementSuccess.acknowledgementLabelText, ), + actions: [ + Button( + label: localizations.translate( + i18.householdDetails.viewHouseHoldDetailsAction, + ), + isDisabled: (widget.enableViewHousehold==true)?false:true, + onPressed: () { + final wrapper = context + .read() + .state + .householdMemberWrapper; + + context.router.popAndPush( + BeneficiaryWrapperRoute(wrapper: wrapper), + ); + }, + type: ButtonType.primary, + size: ButtonSize.large + ), + Button( + label: localizations + .translate(i18.acknowledgementSuccess.actionLabelText), + onPressed: () { + context + .read().add(const SearchHouseholdsEvent.clear()); + final parent = context.router.parent() as StackRouter; + // Pop twice to navigate back to the previous screen + parent.popUntilRoot(); + }, + type: ButtonType.secondary, + size: ButtonSize.large + ), + ], ); }, ), diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart index ba7118d19..a024ddc25 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart @@ -1,64 +1,66 @@ import 'package:collection/collection.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/models/digit_table_model.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_divider.dart'; +import 'package:digit_ui_components/widgets/atoms/table_cell.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_table.dart'; import 'package:flutter/material.dart'; import 'package:registration_delivery/blocs/app_localization.dart'; import 'package:registration_delivery/registration_delivery.dart'; -import '../../../blocs/delivery_intervention/deliver_intervention.dart'; import '../../../utils/i18_key_constants.dart' as i18; import '../../../utils/utils.dart'; +import '../../../widgets/table_card/table_card.dart'; // This function builds a table with the given data and headers Widget buildTableContent( - DeliverInterventionState deliverInterventionState, - BuildContext context, - List? variant, - IndividualModel? individualModel, - HouseholdModel? householdModel, -) { + DeliverInterventionState deliverInterventionState, + BuildContext context, + List? variant, + IndividualModel? individualModel, + HouseholdModel? householdModel, + ) { // Calculate the current cycle. If deliverInterventionState.cycle is negative, set it to 0. final currentCycle = - deliverInterventionState.cycle >= 0 ? deliverInterventionState.cycle : 0; + deliverInterventionState.cycle >= 0 ? deliverInterventionState.cycle : 0; // Calculate the current dose. If deliverInterventionState.dose is negative, set it to 0. final currentDose = - deliverInterventionState.dose >= 0 ? deliverInterventionState.dose : 0; + deliverInterventionState.dose >= 0 ? deliverInterventionState.dose : 0; final localizations = RegistrationDeliveryLocalization.of(context); // Defining a list of table headers for resource popup - final headerListResource = [ - TableHeader( - localizations.translate(i18.beneficiaryDetails.beneficiaryDose), - cellKey: 'dose', + final columnListResource = [ + DigitTableColumn( + header: localizations.translate(i18.beneficiaryDetails.beneficiaryDose), + cellValue: 'dose', ), - TableHeader( - localizations.translate(i18.beneficiaryDetails.beneficiaryResources), - cellKey: 'resources', + DigitTableColumn( + header: localizations.translate(i18.beneficiaryDetails.beneficiaryResources), + cellValue: 'resources', ), ]; // Calculate the height of the container based on the number of items in the table final ProjectTypeModel projectType = - RegistrationDeliverySingleton().projectType!; + RegistrationDeliverySingleton().projectType!; final item = - projectType.cycles?[currentCycle - 1].deliveries?[currentDose - 1]; + projectType.cycles?[currentCycle - 1].deliveries?[currentDose - 1]; final productVariants = fetchProductVariant(item, individualModel, householdModel)?.productVariants; final numRows = productVariants?.length ?? 0; const rowHeight = 84; - const paddingHeight = (kPadding * 2); + const paddingHeight = (spacer2 * 2); final containerHeight = (numRows + 1) * rowHeight + (paddingHeight * 2); const columnWidth = 150.0; const cellHeight = 59.5; return Container( padding: const EdgeInsets.only( - left: kPadding, + left: spacer2, bottom: 0, - right: kPadding, + right: spacer2, top: 0, ), height: containerHeight, @@ -69,67 +71,62 @@ Widget buildTableContent( children: [ DigitTableCard( topPadding: const EdgeInsets.only(top: 0.0), - padding: const EdgeInsets.only(bottom: kPadding / 2), + padding: const EdgeInsets.only(bottom: spacer2 / 2), fraction: 2.5, element: { localizations.translate( i18.beneficiaryDetails.beneficiaryAge, ): fetchProductVariant(item, individualModel, householdModel)?.condition != null ? localizations.translate( - fetchProductVariant(item, individualModel, householdModel)!.condition!) + fetchProductVariant(item, individualModel, householdModel)!.condition!) : null, }, ), - const Divider( - thickness: 1.0, - ), + const DigitDivider(), // Build the DigitTable with the data fetchProductVariant(item, individualModel, householdModel)?.productVariants != null ? DigitTable( - headerList: headerListResource, - tableData: [ - ...fetchProductVariant(item, individualModel, householdModel )! - .productVariants! - .map( - (e) { - // Retrieve the SKU value for the product variant. - final value = variant - ?.firstWhereOrNull( - (element) => element.id == e.productVariantId, - ) - ?.sku; - final quantity = e.quantity; + enableBorder: true, + showSelectedState: false, + showPagination: false, + columns: columnListResource, + rows: [ + ...fetchProductVariant(item, individualModel, householdModel )! + .productVariants! + .map( + (e) { + // Retrieve the SKU value for the product variant. + final value = variant + ?.firstWhereOrNull( + (element) => element.id == e.productVariantId, + ) + ?.sku; + final quantity = e.quantity; - return TableDataRow([ - // Display the dose information in the first column if it's the first row, - // otherwise, display an empty cell. + return DigitTableRow( + tableRow: [ + // Display the dose information in the first column if it's the first row, + // otherwise, display an empty cell. - fetchProductVariant(item, individualModel, householdModel) - ?.productVariants - ?.indexOf(e) == - 0 - ? TableData( - '${localizations.translate(i18.deliverIntervention.dose)} ${deliverInterventionState.dose}', - cellKey: 'dose', - ) - : TableData(''), - // Display the SKU value in the second column. - TableData( - '$quantity - ${localizations.translate(value.toString())}', - cellKey: 'resources', - ), - ]); - }, - ), - ], - columnWidth: columnWidth, - height: ((fetchProductVariant(item, individualModel, householdModel) - ?.productVariants ?? - []) - .length + - 1) * - cellHeight, - ) + fetchProductVariant(item, individualModel, householdModel) + ?.productVariants + ?.indexOf(e) == + 0 + ? DigitTableData( + '${localizations.translate(i18.deliverIntervention.dose)} ${deliverInterventionState.dose}', + cellKey: 'dose', + ) + : DigitTableData('',cellKey: ''), + // Display the SKU value in the second column. + DigitTableData( + '$quantity - ${localizations.translate(value.toString())}', + cellKey: 'resources', + ), + ]); + }, + ), + ], + ) : Text(localizations.translate(i18.common.noProjectSelected)) ], ), diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart index ca9a04d45..a50be3b28 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart @@ -1,7 +1,9 @@ import 'package:collection/collection.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/models/digit_table_model.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/atoms/table_cell.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_table.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:registration_delivery/blocs/app_localization.dart'; @@ -40,17 +42,17 @@ class RecordDeliveryCycleState extends LocalizedState { final localizations = RegistrationDeliveryLocalization.of(context); final headerList = [ - TableHeader( - localizations.translate(i18.beneficiaryDetails.beneficiaryDoseNo), - cellKey: 'dose', + DigitTableColumn( + header: localizations.translate(i18.beneficiaryDetails.beneficiaryDoseNo), + cellValue: 'dose', ), - TableHeader( - localizations.translate(i18.beneficiaryDetails.beneficiaryStatus), - cellKey: 'status', + DigitTableColumn( + header: localizations.translate(i18.beneficiaryDetails.beneficiaryStatus), + cellValue: 'status', ), - TableHeader( - localizations.translate(i18.beneficiaryDetails.beneficiaryCompletedOn), - cellKey: 'completedOn', + DigitTableColumn( + header: localizations.translate(i18.beneficiaryDetails.beneficiaryCompletedOn), + cellValue: 'completedOn', ), ]; // List of table headers for displaying cycle and dose information @@ -72,15 +74,15 @@ class RecordDeliveryCycleState extends LocalizedState { return Column(children: [ deliverState.hasCycleArrived ? buildCycleAndDoseTable( - widget.projectCycles - .where( - (e) => e.id == deliverState.cycle, - ) - .toList(), - headerList, - deliverState.dose - 1, - true, - ) + widget.projectCycles + .where( + (e) => e.id == deliverState.cycle, + ) + .toList(), + headerList, + deliverState.dose - 1, + true, + ) : const SizedBox.shrink(), if ((pastCycles ?? []).isNotEmpty) Column( @@ -91,11 +93,11 @@ class RecordDeliveryCycleState extends LocalizedState { return Column(children: [ isExpanded ? buildCycleAndDoseTable( - pastCycles ?? [], - headerList, - null, - false, - ) + pastCycles ?? [], + headerList, + null, + false, + ) : const Offstage(), SizedBox( width: MediaQuery.of(context).size.width, @@ -109,13 +111,13 @@ class RecordDeliveryCycleState extends LocalizedState { }, child: Row( mainAxisAlignment: - MainAxisAlignment.center, + MainAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ Padding( padding: - const EdgeInsets.symmetric( - horizontal: kPadding / 2, + const EdgeInsets.symmetric( + horizontal: spacer2 / 2, ), child: TextButton( style: TextButton.styleFrom( @@ -126,40 +128,38 @@ class RecordDeliveryCycleState extends LocalizedState { onPressed: null, child: Text( style: TextStyle( - fontSize: kPadding * 2, - decoration: TextDecoration - .underline, + fontSize: spacer2 * 2, color: Theme.of(context) - .colorScheme - .secondary, + .colorTheme + .primary.primary1, ), isExpanded ? localizations.translate( - i18.deliverIntervention - .hidePastCycles, - ) + i18.deliverIntervention + .hidePastCycles, + ) : localizations.translate( - i18.deliverIntervention - .viewPastCycles, - ), + i18.deliverIntervention + .viewPastCycles, + ), ), ), ), !isExpanded ? Icon( - color: Theme.of(context) - .colorScheme - .secondary, - Icons.keyboard_arrow_down, - size: 24, - ) + color: Theme.of(context) + .colorTheme + .primary.primary1, + Icons.keyboard_arrow_down, + size: 24, + ) : Icon( - color: Theme.of(context) - .colorScheme - .secondary, - Icons.keyboard_arrow_up, - size: 24, - ), + color: Theme.of(context) + .colorTheme + .primary.primary1, + Icons.keyboard_arrow_up, + size: 24, + ), ], ), ), @@ -182,11 +182,11 @@ class RecordDeliveryCycleState extends LocalizedState { } Widget buildCycleAndDoseTable( - List cycles, - List headerList, - int? selectedIndex, - bool isCurrentCycle, - ) { + List cycles, + List headerList, + int? selectedIndex, + bool isCurrentCycle, + ) { final theme = DigitTheme.instance.mobileTheme; final widgetList = []; @@ -196,98 +196,103 @@ class RecordDeliveryCycleState extends LocalizedState { final e = cycles[i]; widgetList.add( Column( + mainAxisSize: MainAxisSize.min, children: [ Padding( padding: isCurrentCycle - ? EdgeInsets.zero - : const EdgeInsets.only( - top: kPadding + 2, - bottom: 0, - ), + ? const EdgeInsets.all(spacer2) + : const EdgeInsets.all( + spacer2 + ), child: Align( alignment: Alignment.centerLeft, child: Text( isCurrentCycle ? localizations - .translate(i18.beneficiaryDetails.currentCycleLabel) + .translate(i18.beneficiaryDetails.currentCycleLabel) : '${localizations.translate(i18.beneficiaryDetails.beneficiaryCycle)} ${e.id}', style: theme.textTheme.headlineLarge, textAlign: TextAlign.left, ), ), ), - DigitTable( - selectedIndex: selectedIndex, - headerList: headerList, - tableData: e.deliveries!.mapIndexed( - (index, item) { - final tasks = widget.taskData - ?.where((element) => - element.additionalFields?.fields - .firstWhereOrNull( - (f) => - f.key == - AdditionalFieldsType.doseIndex - .toValue(), - ) - ?.value == - '0${item.id}' && - element.additionalFields?.fields - .firstWhereOrNull( - (c) => - c.key == - AdditionalFieldsType.cycleIndex - .toValue(), - ) - ?.value == - '0${e.id}') - .lastOrNull; + SizedBox( + width: MediaQuery.of(context).size.width, + height: ((e.deliveries?.length ?? 0) + 1) * 57.5, + child: DigitTable( + enableBorder: true, + showSelectedState: false, + showPagination: false, + highlightedRows: (selectedIndex!=null)?[selectedIndex]:[], + columns: headerList, + rows: e.deliveries!.mapIndexed( + (index, item) { + final tasks = widget.taskData + ?.where((element) => + element.additionalFields?.fields + .firstWhereOrNull( + (f) => + f.key == + AdditionalFieldsType.doseIndex + .toValue(), + ) + ?.value == + '0${item.id}' && + element.additionalFields?.fields + .firstWhereOrNull( + (c) => + c.key == + AdditionalFieldsType.cycleIndex + .toValue(), + ) + ?.value == + '0${e.id}') + .lastOrNull; - return TableDataRow([ - TableData( - '${localizations.translate(i18.deliverIntervention.dose)} ${e.deliveries!.indexOf(item) + 1}', - cellKey: 'dose', - ), - TableData( - localizations.translate( - index == selectedIndex - ? Status.toAdminister.toValue() - : tasks?.status ?? Status.inComplete.toValue(), + return DigitTableRow(tableRow: [ + DigitTableData( + '${localizations.translate(i18.deliverIntervention.dose)} ${e.deliveries!.indexOf(item) + 1}', + cellKey: 'dose', + ), + DigitTableData( + localizations.translate( + index == selectedIndex + ? Status.toAdminister.toValue() + : tasks?.status ?? Status.inComplete.toValue(), + ), + cellKey: 'status', + style: TextStyle( + color: index == selectedIndex + ? null + : tasks?.status == + Status.administeredSuccess.toValue() + ? DigitTheme + .instance.colorScheme.onSurfaceVariant + : DigitTheme.instance.colorScheme.error, + fontWeight: + index == selectedIndex ? FontWeight.w700 : null, + ), ), - cellKey: 'status', - style: TextStyle( - color: index == selectedIndex - ? null - : tasks?.status == - Status.administeredSuccess.toValue() - ? DigitTheme - .instance.colorScheme.onSurfaceVariant - : DigitTheme.instance.colorScheme.error, - fontWeight: - index == selectedIndex ? FontWeight.w700 : null, + DigitTableData( + tasks?.status == Status.administeredFailed.toValue() || + (tasks?.additionalFields?.fields + .where((e) => + e.key == + AdditionalFieldsType.deliveryStrategy + .toValue()) + .firstOrNull + ?.value == + DeliverStrategyType.indirect.toValue()) + ? ' -- ' + : tasks?.clientAuditDetails?.createdTime.toDateTime + .getFormattedDate() ?? + ' -- ', + cellKey: 'completedOn', ), - ), - TableData( - tasks?.status == Status.administeredFailed.toValue() || - (tasks?.additionalFields?.fields - .where((e) => - e.key == - AdditionalFieldsType.deliveryStrategy - .toValue()) - .firstOrNull - ?.value == - DeliverStrategyType.indirect.toValue()) - ? ' -- ' - : tasks?.clientAuditDetails?.createdTime.toDateTime - .getFormattedDate() ?? - ' -- ', - cellKey: 'completedOn', - ), - ]); - }, - ).toList(), - columnWidth: 130, - height: ((e.deliveries?.length ?? 0) + 1) * 57.5, + ]); + }, + ).toList(), + ), ), const SizedBox( height: 16, diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart index e1b7e02a0..2b04ce656 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart @@ -1,7 +1,9 @@ import 'dart:async'; import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/enum/app_enums.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_button.dart'; +import 'package:digit_ui_components/widgets/molecules/panel_cards.dart'; import 'package:flutter/material.dart'; import '../../../router/registration_delivery_router.gm.dart'; @@ -43,17 +45,22 @@ class SplashAcknowledgementPageState @override Widget build(BuildContext context) { return Scaffold( - body: DigitAcknowledgement.success( - action: () { - context.router.maybePop(); - }, - enableBackToSearch: widget.enableBackToSearch ?? true, - actionLabel: - localizations.translate(i18.acknowledgementSuccess.actionLabelText), + body: PanelCard( + type: PanelType.success, + actions: [ + Button( + label: localizations.translate(i18.acknowledgementSuccess.actionLabelText), + type: ButtonType.primary, + size: ButtonSize.large, + onPressed: (){ + context.router.maybePop(); + }, + ), + ], description: localizations.translate( i18.acknowledgementSuccess.acknowledgementDescriptionText, ), - label: localizations + title: localizations .translate(i18.acknowledgementSuccess.acknowledgementLabelText), ), ); diff --git a/packages/registration_delivery/lib/widgets/action_card/action_card.dart b/packages/registration_delivery/lib/widgets/action_card/action_card.dart deleted file mode 100644 index c5468f7bf..000000000 --- a/packages/registration_delivery/lib/widgets/action_card/action_card.dart +++ /dev/null @@ -1,57 +0,0 @@ -import 'package:digit_components/digit_components.dart'; -import 'package:flutter/material.dart'; - -class ActionCard extends StatelessWidget { - final List items; - - const ActionCard({super.key, required this.items}); - - @override - Widget build(BuildContext context) { - final theme = Theme.of(context); - - return Column( - mainAxisSize: MainAxisSize.min, - children: items - .map( - (e) => Padding( - padding: const EdgeInsets.all(kPadding / 2), - child: DigitOutlineIconButton( - buttonStyle: OutlinedButton.styleFrom( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.zero, - ), - backgroundColor: Colors.white, - side: BorderSide( - width: 1.0, - color: e.action != null - ? theme.colorScheme.secondary - : theme.colorScheme.outline, - ), - minimumSize: Size( - MediaQuery.of(context).size.width / 1.25, - 50, - ), - ), - icon: e.icon, - label: e.label, - onPressed: e.action, - ), - ), - ) - .toList(), - ); - } -} - -class ActionCardModel { - final IconData icon; - final String label; - final VoidCallback? action; - - const ActionCardModel({ - required this.icon, - required this.label, - required this.action, - }); -} diff --git a/packages/registration_delivery/lib/widgets/back_navigation_help_header.dart b/packages/registration_delivery/lib/widgets/back_navigation_help_header.dart index 46b9de3fe..db4d02cc1 100644 --- a/packages/registration_delivery/lib/widgets/back_navigation_help_header.dart +++ b/packages/registration_delivery/lib/widgets/back_navigation_help_header.dart @@ -1,5 +1,5 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/digit_components.dart'; import 'package:flutter/material.dart'; import 'package:registration_delivery/blocs/app_localization.dart'; import 'package:registration_delivery/widgets/showcase/showcase_button.dart'; @@ -29,7 +29,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { final theme = Theme.of(context); return Padding( - padding: const EdgeInsets.all(kPadding / 2), + padding: const EdgeInsets.all(spacer2 / 2), child: Row( children: [ Expanded( @@ -58,7 +58,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { ], ), ), - SizedBox(width: showHelp ? kPadding * 2 : 0), + SizedBox(width: showHelp ? spacer2 * 2 : 0), if (showHelp) TextButton( style: TextButton.styleFrom(padding: EdgeInsets.zero), diff --git a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart index 753cf2918..0363bfa46 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart @@ -1,4 +1,4 @@ -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/digit_components.dart'; import 'package:flutter/material.dart'; import 'package:registration_delivery/blocs/app_localization.dart'; @@ -29,7 +29,7 @@ class BeneficiaryCard extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: const EdgeInsets.all(4), + padding: const EdgeInsets.all(spacer1), child: Text( title, style: theme.textTheme.headlineSmall, @@ -40,19 +40,27 @@ class BeneficiaryCard extends StatelessWidget { child: status == Status.visited.toValue() || status == Status.registered.toValue() || status == Status.administeredSuccess.toValue() - ? DigitIconButton( - icon: Icons.check_circle, - iconText: RegistrationDeliveryLocalization.of(context) + ? Button( + prefixIcon: Icons.check_circle, + label: RegistrationDeliveryLocalization.of(context) .translate(status.toString()), - iconTextColor: theme.colorScheme.onSurfaceVariant, + textColor: theme.colorScheme.onSurfaceVariant, iconColor: theme.colorScheme.onSurfaceVariant, + isDisabled: true, + onPressed: (){}, + type: ButtonType.tertiary, + size: ButtonSize.medium, ) - : DigitIconButton( - icon: Icons.info_rounded, - iconText: RegistrationDeliveryLocalization.of(context) + : Button( + prefixIcon: Icons.info_rounded, + label: RegistrationDeliveryLocalization.of(context) .translate(status.toString()), - iconTextColor: theme.colorScheme.error, + textColor: theme.colorScheme.error, iconColor: theme.colorScheme.error, + type: ButtonType.tertiary, + size: ButtonSize.medium, + isDisabled: true, + onPressed: (){}, ), ), if (subtitle != null) diff --git a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_statistics_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_statistics_card.dart index d162b7105..11729ee6d 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_statistics_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_statistics_card.dart @@ -1,4 +1,4 @@ -import 'package:digit_components/widgets/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import '../../models/beneficiary_statistics/beneficiary_statistics_model.dart'; @@ -16,7 +16,7 @@ class BeneficiaryStatisticsCard extends StatelessWidget { final theme = Theme.of(context); return DigitCard( - child: Row( + children: [Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ SizedBox( @@ -56,7 +56,7 @@ class BeneficiaryStatisticsCard extends StatelessWidget { ), ), ], - ), + ),] ); } } diff --git a/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart index aa2a84f2a..58bfa3070 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart @@ -1,5 +1,7 @@ -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/atoms/selection_card.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; +import 'package:digit_ui_components/widgets/atoms/selection_card.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; @@ -32,116 +34,110 @@ class ResourceBeneficiaryCardState extends LocalizedState { @override Widget build(BuildContext context) { - return Container( - decoration: BoxDecoration( - color: DigitTheme.instance.colorScheme.surface, - border: Border.all( - color: DigitTheme.instance.colorScheme.outline, - width: 1, - ), - borderRadius: const BorderRadius.all( - Radius.circular(4.0), - ), - ), - margin: const EdgeInsets.only( - top: kPadding, - bottom: kPadding, - ), - padding: const EdgeInsets.all(kPadding), - child: Column( - children: [ - BlocBuilder( - builder: (context, productState) { - return productState.maybeWhen( - orElse: () => const Offstage(), - fetched: (productVariants) { - return - SelectionBox( - equalWidthOptions: true, - options: productVariants, - onSelectionChanged: (selectedOptions) { - if (selectedOptions.isNotEmpty) { - var selectedOption = selectedOptions.first; - widget.form.control('resourceDelivered.${widget.cardIndex}').value = selectedOption; - }else{ - widget.form.control('resourceDelivered.${widget.cardIndex}').value = null; - } - }, - initialSelection: widget.form.control('resourceDelivered.${widget.cardIndex}').value != null ? [ - widget.form.control('resourceDelivered.${widget.cardIndex}').value - ] : [], - valueMapper: (value) { - return localizations.translate( - value.sku ?? value.id, - ); - }, - allowMultipleSelection: false, + return DigitCard( + cardType: CardType.secondary, + children: [BlocBuilder( + builder: (context, productState) { + return productState.maybeWhen( + orElse: () => const Offstage(), + fetched: (productVariants) { + return + SelectionCard( + equalWidthOptions: true, + options: productVariants, + onSelectionChanged: (selectedOptions) { + if (selectedOptions.isNotEmpty) { + var selectedOption = selectedOptions.first; + widget.form.control('resourceDelivered.${widget.cardIndex}').value = selectedOption; + }else{ + widget.form.control('resourceDelivered.${widget.cardIndex}').value = null; + } + }, + initialSelection: widget.form.control('resourceDelivered.${widget.cardIndex}').value != null ? [ + widget.form.control('resourceDelivered.${widget.cardIndex}').value + ] : [], + valueMapper: (value) { + return localizations.translate( + value.sku ?? value.id, ); - }, - ); + }, + allowMultipleSelection: false, + ); }, + ); + }, + ), + ReactiveWrapperField( + formControlName: 'quantityDistributed.${widget.cardIndex}', + builder: (field)=> LabeledField( + label: localizations.translate( + i18.deliverIntervention.quantityDistributedLabel, ), - DigitIntegerFormPicker( - incrementer: true, - formControlName: 'quantityDistributed.${widget.cardIndex}', - form: widget.form, - label: localizations.translate( - i18.deliverIntervention.quantityDistributedLabel, - ), - minimum: 1, - + child: DigitNumericFormInput( + minValue: 1, + step: 1, + initialValue: "0", + onChange: (value){ + widget.form.control('quantityDistributed.${widget.cardIndex}').value=int.parse(value); + }, ), - SizedBox( - child: Align( - alignment: Alignment.centerLeft, - child: (widget.cardIndex == widget.totalItems - 1 && - widget.totalItems > 1) - ? DigitIconButton( - onPressed: () async { - final submit = await DigitDialog.show( - context, - options: DigitDialogOptions( - titleText: localizations.translate( + ), + ), + Align( + alignment: Alignment.centerLeft, + child: (widget.cardIndex == widget.totalItems - 1 && + widget.totalItems > 1) + ? Button( + onPressed: () async { + final submit = await showDialog( + context: context, + builder: (ctx)=> Popup( + title: localizations.translate( + i18.deliverIntervention + .resourceDeleteBeneficiaryDialogTitle, + ), + actions: [ + Button( + label: localizations.translate( i18.deliverIntervention - .resourceDeleteBeneficiaryDialogTitle, - ), - primaryAction: DigitDialogActions( - label: localizations.translate( - i18.deliverIntervention - .resourceDeleteBeneficiaryPrimaryActionLabel, - ), - action: (context) { - Navigator.of( - context, - rootNavigator: true, - ).pop(true); - }, + .resourceDeleteBeneficiaryPrimaryActionLabel, ), - secondaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonCancel, - ), - action: (context) => Navigator.of( + onPressed: () { + Navigator.of( context, rootNavigator: true, - ).pop(false), + ).pop(true); + }, + type: ButtonType.primary, + size: ButtonSize.large + ), + Button( + label: localizations.translate( + i18.common.coreCommonCancel, ), - ), - ); - if (submit == true) { - widget.onDelete(widget.cardIndex); - } - }, - iconText: localizations.translate( - i18.deliverIntervention.resourceDeleteBeneficiary, - ), - icon: Icons.delete, - ) - : const Offstage(), - ), - ), - ], - ), + onPressed: () => Navigator.of( + context, + rootNavigator: true, + ).pop(false), + type: ButtonType.secondary, + size: ButtonSize.large + ), + ], + ), + ); + if (submit == true) { + widget.onDelete(widget.cardIndex); + } + }, + label: localizations.translate( + i18.deliverIntervention.resourceDeleteBeneficiary, + ), + prefixIcon: Icons.delete, + type: ButtonType.tertiary, + size: ButtonSize.medium, + ) + : const Offstage(), + ),] ); } } diff --git a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart index 9f49dbbc4..c4058275e 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart @@ -1,8 +1,12 @@ import 'package:collection/collection.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/models/digit_table_model.dart'; -import 'package:digit_components/utils/date_utils.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/utils/date_utils.dart'; +import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; +import 'package:digit_ui_components/widgets/atoms/table_cell.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_table.dart'; +import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; import 'package:flutter/material.dart'; import 'package:registration_delivery/models/entities/project_beneficiary.dart'; @@ -17,14 +21,14 @@ import 'beneficiary_card.dart'; class ViewBeneficiaryCard extends LocalizedStatefulWidget { final HouseholdMemberWrapper householdMember; - final VoidCallback? onOpenPressed; + final VoidCallback onOpenPressed; final double? distance; const ViewBeneficiaryCard({ super.key, super.appLocalizations, required this.householdMember, - this.onOpenPressed, + required this.onOpenPressed, this.distance, }); @@ -58,40 +62,41 @@ class ViewBeneficiaryCardState extends LocalizedState { final theme = Theme.of(context); final headerList = [ - TableHeader( - localizations.translate(i18.beneficiaryDetails.beneficiaryHeader), - cellKey: 'beneficiary', + DigitTableColumn( + header: localizations.translate(i18.beneficiaryDetails.beneficiaryHeader), + cellValue: 'beneficiary', + isFrozen: true, ), - TableHeader( - localizations.translate(i18.beneficiaryDetails.deliveryHeader), - cellKey: 'delivery', + DigitTableColumn( + header: localizations.translate(i18.beneficiaryDetails.deliveryHeader), + cellValue: 'delivery', ), - TableHeader( - localizations.translate(i18.individualDetails.ageLabelText), - cellKey: 'age', + DigitTableColumn( + header: localizations.translate(i18.individualDetails.ageLabelText), + cellValue: 'age', ), - TableHeader( - localizations.translate(i18.common.coreCommonGender), - cellKey: 'gender', + DigitTableColumn( + header: localizations.translate(i18.common.coreCommonGender), + cellValue: 'gender', ), ]; final filteredHeaderList = RegistrationDeliverySingleton() - .beneficiaryType != - BeneficiaryType.individual - ? headerList.where((element) => element.cellKey != 'delivery').toList() + .beneficiaryType != + BeneficiaryType.individual + ? headerList.where((element) => element.cellValue != 'delivery').toList() : headerList; final currentCycle = - RegistrationDeliverySingleton().projectType?.cycles?.firstWhereOrNull( - (e) => - (e.startDate) < DateTime.now().millisecondsSinceEpoch && - (e.endDate) > DateTime.now().millisecondsSinceEpoch, - // Return null when no matching cycle is found - ); + RegistrationDeliverySingleton().projectType?.cycles?.firstWhereOrNull( + (e) => + (e.startDate) < DateTime.now().millisecondsSinceEpoch && + (e.endDate) > DateTime.now().millisecondsSinceEpoch, + // Return null when no matching cycle is found + ); final tableData = householdMember.members?.map( - (e) { + (e) { final projectBeneficiary = - householdMember.projectBeneficiaries?.where((element) { + householdMember.projectBeneficiaries?.where((element) { if (RegistrationDeliverySingleton().beneficiaryType == BeneficiaryType.individual) { return element.beneficiaryClientReferenceId == e.clientReferenceId; @@ -102,54 +107,58 @@ class ViewBeneficiaryCardState extends LocalizedState { }).toList(); final taskData = (projectBeneficiary ?? []).isNotEmpty && - householdMember.tasks != null + householdMember.tasks != null ? householdMember.tasks - ?.where((element) => - element.projectBeneficiaryClientReferenceId == - projectBeneficiary?.first.clientReferenceId) - .toList() + ?.where((element) => + element.projectBeneficiaryClientReferenceId == + projectBeneficiary?.first.clientReferenceId) + .toList() : null; final referralData = (projectBeneficiary ?? []).isNotEmpty ? householdMember.referrals - ?.where((element) => - element.projectBeneficiaryClientReferenceId == - projectBeneficiary?.first.clientReferenceId) - .toList() + ?.where((element) => + element.projectBeneficiaryClientReferenceId == + projectBeneficiary?.first.clientReferenceId) + .toList() : null; final sideEffects = taskData != null && taskData.isNotEmpty ? householdMember.sideEffects - ?.where((element) => - element.taskClientReferenceId == - taskData.last.clientReferenceId) - .toList() + ?.where((element) => + element.taskClientReferenceId == + taskData.last.clientReferenceId) + .toList() : null; final ageInYears = DigitDateUtils.calculateAge( e.dateOfBirth != null ? DigitDateUtils.getFormattedDateToDateTime( - e.dateOfBirth!, - ) ?? - DateTime.now() + e.dateOfBirth!, + ) ?? + DateTime.now() : DateTime.now(), ).years; final ageInMonths = DigitDateUtils.calculateAge( e.dateOfBirth != null ? DigitDateUtils.getFormattedDateToDateTime( - e.dateOfBirth!, - ) ?? - DateTime.now() + e.dateOfBirth!, + ) ?? + DateTime.now() : DateTime.now(), ).months; - final isNotEligible = !checkEligibilityForAgeAndSideEffect( - DigitDOBAge( + final canProceed = (RegistrationDeliverySingleton().projectType!.validMinAge!=null + && RegistrationDeliverySingleton().projectType!.validMaxAge!=null + )?true:false; + + final isNotEligible = (canProceed)?!checkEligibilityForAgeAndSideEffect( + DigitDOBAgeConvertor( years: ageInYears, months: ageInMonths, ), RegistrationDeliverySingleton().projectType, (taskData ?? []).isNotEmpty ? taskData?.last : null, sideEffects, - ); + ):false; final isSideEffectRecorded = recordedSideEffect( currentCycle, (taskData ?? []).isNotEmpty ? taskData?.last : null, @@ -164,14 +173,14 @@ class ViewBeneficiaryCardState extends LocalizedState { final isStatusReset = checkStatus(taskData, currentCycle); final rowTableData = [ - TableData( + DigitTableData( [ e.name?.givenName ?? '--', (e.name?.familyName?.trim().isNotEmpty ?? false) ? e.name?.familyName : null, ].whereNotNull().join(' '), cellKey: 'beneficiary', ), - TableData( + DigitTableData( getTableCellText( StatusKeys( isNotEligible, @@ -187,41 +196,41 @@ class ViewBeneficiaryCardState extends LocalizedState { isNotEligible: isNotEligible, taskdata: taskData, isBeneficiaryRefused: - isBeneficiaryRefused || isBeneficiaryReferred, + isBeneficiaryRefused || isBeneficiaryReferred, isStatusReset: isStatusReset, theme: theme, ), ), ), - TableData( + DigitTableData( e.dateOfBirth == null ? '--' : '${DigitDateUtils.calculateAge( - DigitDateUtils.getFormattedDateToDateTime( - e.dateOfBirth!, - ) ?? - DateTime.now(), - ).years} ${localizations.translate(i18.searchBeneficiary.yearsAbbr)} ${DigitDateUtils.calculateAge( - DigitDateUtils.getFormattedDateToDateTime( - e.dateOfBirth!, - ) ?? - DateTime.now(), - ).months} ${localizations.translate(i18.searchBeneficiary.monthsAbbr)}', + DigitDateUtils.getFormattedDateToDateTime( + e.dateOfBirth!, + ) ?? + DateTime.now(), + ).years} ${localizations.translate(i18.searchBeneficiary.yearsAbbr)} ${DigitDateUtils.calculateAge( + DigitDateUtils.getFormattedDateToDateTime( + e.dateOfBirth!, + ) ?? + DateTime.now(), + ).months} ${localizations.translate(i18.searchBeneficiary.monthsAbbr)}', cellKey: 'age', ), - TableData( + DigitTableData( e.gender?.name == null ? '--' : localizations.translate('CORE_COMMON_${ e.gender?.name.toUpperCase()}'), cellKey: 'gender', ), ]; - return TableDataRow( - RegistrationDeliverySingleton().beneficiaryType != - BeneficiaryType.individual - ? rowTableData - .where((element) => element.cellKey != 'delivery') - .toList() - : rowTableData, + return DigitTableRow(tableRow: + RegistrationDeliverySingleton().beneficiaryType != + BeneficiaryType.individual + ? rowTableData + .where((element) => element.cellKey != 'delivery') + .toList() + : rowTableData, ); // rowTableData }, @@ -230,22 +239,26 @@ class ViewBeneficiaryCardState extends LocalizedState { final ageInYears = DigitDateUtils.calculateAge( householdMember.headOfHousehold?.dateOfBirth != null ? DigitDateUtils.getFormattedDateToDateTime( - householdMember.headOfHousehold!.dateOfBirth!, - ) ?? - DateTime.now() + householdMember.headOfHousehold!.dateOfBirth!, + ) ?? + DateTime.now() : DateTime.now(), ).years; final ageInMonths = DigitDateUtils.calculateAge( householdMember.headOfHousehold?.dateOfBirth != null ? DigitDateUtils.getFormattedDateToDateTime( - householdMember.headOfHousehold!.dateOfBirth!, - ) ?? - DateTime.now() + householdMember.headOfHousehold!.dateOfBirth!, + ) ?? + DateTime.now() : DateTime.now(), ).months; - final isNotEligible = !checkEligibilityForAgeAndSideEffect( - DigitDOBAge( + final canProceed = (RegistrationDeliverySingleton().projectType!.validMinAge!=null + && RegistrationDeliverySingleton().projectType!.validMaxAge!=null + )?true:false; + + final isNotEligible = (canProceed)?!checkEligibilityForAgeAndSideEffect( + DigitDOBAgeConvertor( years: ageInYears, months: ageInMonths, ), @@ -256,10 +269,11 @@ class ViewBeneficiaryCardState extends LocalizedState { (householdMember.sideEffects ?? []).isNotEmpty ? householdMember.sideEffects : null, - ); + ):false; + final isBeneficiaryRefused = - checkIfBeneficiaryRefused(householdMember.tasks); + checkIfBeneficiaryRefused(householdMember.tasks); final projectBeneficiary = householdMember.projectBeneficiaries?.where((p) { if (RegistrationDeliverySingleton().beneficiaryType == BeneficiaryType.individual) { @@ -272,99 +286,112 @@ class ViewBeneficiaryCardState extends LocalizedState { }).firstOrNull; final tasks = householdMember.tasks?.where((t) => - t.projectBeneficiaryClientReferenceId == + t.projectBeneficiaryClientReferenceId == projectBeneficiary?.clientReferenceId); return DigitCard( - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - width: MediaQuery.of(context).size.width / 1.8, - child: BeneficiaryCard( - description: [ - householdMember.household?.address?.doorNo, - householdMember.household?.address?.addressLine1, - householdMember.household?.address?.addressLine2, - householdMember.household?.address?.landmark, - householdMember.household?.address?.city, - householdMember.household?.address?.pincode, - ].whereNotNull().take(2).join(' '), - subtitle: widget.distance != null - ? '${householdMember.members?.length ?? 1} ${householdMember.members?.length == 1 ? localizations.translate(i18.beneficiaryDetails.householdMemberSingular) : localizations.translate(i18.beneficiaryDetails.householdMemberPlural)}\n${((widget.distance!) * 1000).round() > 999 ? '(${((widget.distance!).round())} km)' : '(${((widget.distance!) * 1000).round()} mts) ${localizations.translate(i18.beneficiaryDetails.fromCurrentLocation)}'}' - : '${householdMember.members?.length ?? 1} ${householdMember.members?.length == 1 ? localizations.translate(i18.beneficiaryDetails.householdMemberSingular) : localizations.translate(i18.beneficiaryDetails.householdMemberPlural)}', - status: getStatus( - tasks ?? [], - householdMember.projectBeneficiaries ?? [], - RegistrationDeliverySingleton().beneficiaryType == - BeneficiaryType.individual - ? isNotEligible - : false, - isBeneficiaryRefused), - title: [ - householdMember.headOfHousehold?.name?.givenName ?? - localizations.translate(i18.common.coreCommonNA), - householdMember.headOfHousehold?.name?.familyName, - ].whereNotNull().join(''), - ), + margin: const EdgeInsets.only( + top: spacer2, bottom: spacer2 + ), + children: [Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + width: MediaQuery.of(context).size.width / 1.8, + child: BeneficiaryCard( + description: [ + householdMember.household?.address?.doorNo, + householdMember.household?.address?.addressLine1, + householdMember.household?.address?.addressLine2, + householdMember.household?.address?.landmark, + householdMember.household?.address?.city, + householdMember.household?.address?.pincode, + ].whereNotNull().take(2).join(' '), + subtitle: widget.distance != null + ? '${householdMember.members?.length ?? 1} ${householdMember.members?.length == 1 ? localizations.translate(i18.beneficiaryDetails.householdMemberSingular) : localizations.translate(i18.beneficiaryDetails.householdMemberPlural)}\n${((widget.distance!) * 1000).round() > 999 ? '(${((widget.distance!).round())} km)' : '(${((widget.distance!) * 1000).round()} mts) ${localizations.translate(i18.beneficiaryDetails.fromCurrentLocation)}'}' + : '${householdMember.members?.length ?? 1} ${householdMember.members?.length == 1 ? localizations.translate(i18.beneficiaryDetails.householdMemberSingular) : localizations.translate(i18.beneficiaryDetails.householdMemberPlural)}', + status: getStatus( + tasks ?? [], + householdMember.projectBeneficiaries ?? [], + RegistrationDeliverySingleton().beneficiaryType == + BeneficiaryType.individual + ? isNotEligible + : false, + isBeneficiaryRefused), + title: [ + householdMember.headOfHousehold?.name?.givenName ?? + localizations.translate(i18.common.coreCommonNA), + householdMember.headOfHousehold?.name?.familyName, + ].whereNotNull().join(''), ), - Flexible( - child: DigitOutLineButton( - buttonStyle: OutlinedButton.styleFrom( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.zero, - ), - ), - label: - localizations.translate(i18.searchBeneficiary.iconLabel), - onPressed: widget.onOpenPressed, - ), + ), + Flexible( + child: Button( + label: + localizations.translate(i18.searchBeneficiary.iconLabel), + onPressed: (canProceed) + ?widget.onOpenPressed + :(){ + showDialog( + context: context, + builder: (ctx)=>Popup( + title: localizations.translate(i18.common.coreCommonCanNotProceed), + type: PopUpType.alert, + description: localizations.translate(i18.common.coreCommonCanNotProceedDescription), + actions: [ + Button( + label: localizations.translate(i18.common.coreCommonGoback), + onPressed: (){ + Navigator.of(context, + rootNavigator: true + ).pop(); + }, + type: ButtonType.primary, + size: ButtonSize.large + ), + ], + ) + ); + }, + type: ButtonType.secondary, + size: ButtonSize.medium, ), - ], - ), + ), + ], + ), Offstage( offstage: !isCardExpanded, child: DigitTable( - headerList: filteredHeaderList, - tableData: tableData ?? [], - columnWidth: 130, - columnRowFixedHeight: 65, - height: householdMember.members?.length == 1 - ? 65 * 2 - : (householdMember.members?.length ?? 0) <= 4 - ? ((householdMember.members?.length ?? 0) + 1) * 65 - : 5 * 68, - scrollPhysics: (householdMember.members?.length ?? 0) <= 4 - ? const NeverScrollableScrollPhysics() - : const ClampingScrollPhysics(), + enableBorder: true, + showPagination: false, + columns: filteredHeaderList, + rows: tableData ?? [], ), ), Container( height: 24, margin: const EdgeInsets.all(4), - child: IconButton( - padding: EdgeInsets.zero, - icon: Icon( - isCardExpanded - ? Icons.keyboard_arrow_up - : Icons.keyboard_arrow_down, - size: 24, + child: Center( + child: IconButton( + padding: EdgeInsets.zero, + icon: Icon( + isCardExpanded + ? Icons.keyboard_arrow_up + : Icons.keyboard_arrow_down, + size: 24, + ), + onPressed: () => isCardExpanded = !isCardExpanded, ), - onPressed: () => isCardExpanded = !isCardExpanded, ), - ), - ], - ), + ),] ); } String getTableCellText( - StatusKeys statusKeys, - List? taskData, - ) { + StatusKeys statusKeys, + List? taskData, + ) { if (statusKeys.isNotEligible) { return localizations.translate( i18.householdOverView.householdOverViewNotEligibleIconLabel); @@ -394,10 +421,10 @@ class ViewBeneficiaryCardState extends LocalizedState { required ThemeData theme, }) { return taskdata != null && - taskdata.isNotEmpty && - !isBeneficiaryRefused && - !isNotEligible && - !isStatusReset + taskdata.isNotEmpty && + !isBeneficiaryRefused && + !isNotEligible && + !isStatusReset ? theme.colorScheme.onSurfaceVariant : theme.colorScheme.error; } diff --git a/packages/registration_delivery/lib/widgets/inventory/no_facilities_assigned_dialog.dart b/packages/registration_delivery/lib/widgets/inventory/no_facilities_assigned_dialog.dart index d66ccd130..a078d5f96 100644 --- a/packages/registration_delivery/lib/widgets/inventory/no_facilities_assigned_dialog.dart +++ b/packages/registration_delivery/lib/widgets/inventory/no_facilities_assigned_dialog.dart @@ -1,27 +1,34 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/enum/app_enums.dart'; +import 'package:digit_ui_components/theme/digit_theme.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_button.dart'; +import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:flutter/material.dart'; class NoFacilitiesAssignedDialog { static Future show(BuildContext context) { - return DigitDialog.show( - context, - options: DigitDialogOptions( + return showDialog( + context: context, + builder: (ctx)=> Popup( titleIcon: Icon( Icons.warning, - color: Theme.of(context).colorScheme.error, + color: DigitTheme.instance.colors.light.alertError, ), - titleText: 'No facilities assigned', - contentText: 'Please select another boundary or ' + title: 'No facilities assigned', + description: 'Please select another boundary or ' 'contact the system administrator to assign ' 'a facility.', - primaryAction: DigitDialogActions( - label: 'Close', - action: (dialogContext) { - Navigator.of(context, rootNavigator: true).pop(); - context.router.maybePop(); - }, - ), + actions: [ + Button( + label: 'Close', + type: ButtonType.primary, + size: ButtonSize.large, + onPressed: (){ + Navigator.of(context, rootNavigator: true).pop(); + context.router.maybePop(); + }, + ), + ], ), ); } diff --git a/packages/registration_delivery/lib/widgets/member_card/member_card.dart b/packages/registration_delivery/lib/widgets/member_card/member_card.dart index 014dab8dc..f3334c9e8 100644 --- a/packages/registration_delivery/lib/widgets/member_card/member_card.dart +++ b/packages/registration_delivery/lib/widgets/member_card/member_card.dart @@ -1,6 +1,8 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_action_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:registration_delivery/models/entities/project_beneficiary.dart'; @@ -15,7 +17,6 @@ import '../../models/entities/task.dart'; import '../../router/registration_delivery_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; -import '../action_card/action_card.dart'; class MemberCard extends StatelessWidget { final String name; @@ -64,216 +65,197 @@ class MemberCard extends StatelessWidget { Widget build(BuildContext context) { final theme = Theme.of(context); final beneficiaryType = RegistrationDeliverySingleton().beneficiaryType; + final textTheme = theme.digitTextTheme(context); return Container( - decoration: BoxDecoration( - color: DigitTheme.instance.colorScheme.background, - border: Border.all( - color: DigitTheme.instance.colorScheme.outline, - width: 1, - ), - borderRadius: const BorderRadius.all( - Radius.circular(4.0), - ), - ), - margin: DigitTheme.instance.containerMargin, - padding: const EdgeInsets.only(left: 8.0, right: 8.0, bottom: 4.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Stack( + decoration: BoxDecoration( + color: theme.colorTheme.generic.background, + border: Border.all( + color: DigitTheme.instance.colorScheme.outline, + width: 0.5, + ), + borderRadius: const BorderRadius.all( + Radius.circular(spacer1), + )), + margin: DigitTheme.instance.containerMargin, + padding: const EdgeInsets.only( + left: spacer2, right: spacer2, bottom: spacer2), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, + Stack( children: [ - SizedBox( - width: MediaQuery.of(context).size.width / 1.8, - child: Padding( - padding: - const EdgeInsets.only(left: kPadding, top: kPadding), - child: Text( - name, - style: theme.textTheme.headlineMedium, + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox( + width: MediaQuery.of(context).size.width / 1.8, + child: Padding( + padding: const EdgeInsets.all(spacer2), + child: Text( + name, + style: textTheme.headingM, + ), + ), + ), + ], + ), + Positioned( + child: Align( + alignment: Alignment.topRight, + child: Button( + isDisabled: (projectBeneficiaries ?? []).isEmpty, + onPressed: () => showDialog( + context: context, + builder: (ctx) => ActionCard( + onOutsideTap: () { + Navigator.of(context, rootNavigator: true).pop(); + }, + actions: [ + Button( + prefixIcon: Icons.person, + label: localizations.translate( + i18.memberCard.assignAsHouseholdhead, + ), + isDisabled: isHead ? true : false, + onPressed: setAsHeadAction, + type: ButtonType.secondary, + size: ButtonSize.large, + ), + Button( + prefixIcon: Icons.edit, + label: localizations.translate( + i18.memberCard.editIndividualDetails, + ), + onPressed: editMemberAction, + type: ButtonType.secondary, + size: ButtonSize.large, + ), + Button( + prefixIcon: Icons.delete, + label: localizations.translate( + i18.memberCard.deleteIndividualActionText, + ), + isDisabled: isHead ? true : false, + onPressed: deleteMemberAction, + type: ButtonType.secondary, + size: ButtonSize.large, + ), + ], + ), + ), + label: localizations.translate( + i18.memberCard.editDetails, + ), + prefixIcon: Icons.edit, + type: ButtonType.tertiary, + size: ButtonSize.medium, ), ), ), ], ), - Positioned( - child: Align( - alignment: Alignment.topRight, - child: DigitIconButton( - buttonDisabled: (projectBeneficiaries ?? []).isEmpty, - onPressed: (projectBeneficiaries ?? []).isEmpty - ? null - : () => DigitActionDialog.show( - context, - widget: ActionCard( - items: [ - ActionCardModel( - icon: Icons.person, - label: localizations.translate( - i18.memberCard.assignAsHouseholdhead, - ), - action: isHead ? null : setAsHeadAction, - ), - ActionCardModel( - icon: Icons.edit, - label: localizations.translate( - i18.memberCard.editIndividualDetails, - ), - action: editMemberAction, - ), - ActionCardModel( - icon: Icons.delete, - label: localizations.translate( - i18.memberCard.deleteIndividualActionText, - ), - action: isHead ? null : deleteMemberAction, - ), - ], - ), - ), - iconText: localizations.translate( - i18.memberCard.editDetails, + Padding( + padding: const EdgeInsets.all(spacer2), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + gender != null + ? localizations + .translate('CORE_COMMON_${gender?.toUpperCase()}') + : ' -- ', + style: textTheme.bodyS, ), - icon: Icons.edit, - ), + Expanded( + child: Text( + years != null && months != null + ? " | $years ${localizations.translate(i18.memberCard.deliverDetailsYearText)} $months ${localizations.translate(i18.memberCard.deliverDetailsMonthsText)}" + : "| --", + style: textTheme.bodyS, + ), + ), + ], ), ), - ], - ), - SizedBox( - width: MediaQuery.of(context).size.width / 1.8, - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Container( - margin: DigitTheme.instance.containerMargin, - child: Text( - gender != null - ? localizations - .translate('CORE_COMMON_${gender?.toUpperCase()}') - : ' -- ', - style: theme.textTheme.bodyMedium, - ), - ), - Expanded( - child: Text( - years != null && months != null - ? " | $years ${localizations.translate(i18.memberCard.deliverDetailsYearText)} $months ${localizations.translate(i18.memberCard.deliverDetailsMonthsText)}" - : "| --", - style: theme.textTheme.bodyMedium, - ), - ), - ], - ), - ), - Padding( - padding: const EdgeInsets.only( - left: kPadding / 2, - ), - child: Offstage( - offstage: beneficiaryType != BeneficiaryType.individual, - child: !isDelivered || - isNotEligible || - isBeneficiaryRefused || - isBeneficiaryReferred - ? Align( - alignment: Alignment.centerLeft, - child: DigitIconButton( - icon: Icons.info_rounded, - iconSize: 20, - iconText: localizations.translate( - isNotEligible - ? i18.householdOverView - .householdOverViewNotEligibleIconLabel - : isBeneficiaryReferred + Padding( + padding: + const EdgeInsets.only(left: spacer1, bottom: spacer2), + child: Offstage( + offstage: beneficiaryType != BeneficiaryType.individual, + child: !isDelivered || + isNotEligible || + isBeneficiaryRefused || + isBeneficiaryReferred + ? Align( + alignment: Alignment.centerLeft, + child: Button( + prefixIcon: Icons.info_rounded, + label: localizations.translate( + isNotEligible ? i18.householdOverView - .householdOverViewBeneficiaryReferredLabel - : isBeneficiaryRefused - ? Status.beneficiaryRefused.toValue() - : i18.householdOverView - .householdOverViewNotDeliveredIconLabel, - ), - iconTextColor: theme.colorScheme.error, - iconColor: theme.colorScheme.error, - ), - ) - : Align( - alignment: Alignment.centerLeft, - child: DigitIconButton( - icon: Icons.check_circle, - iconText: localizations.translate( - i18.householdOverView - .householdOverViewDeliveredIconLabel, + .householdOverViewNotEligibleIconLabel + : isBeneficiaryReferred + ? i18.householdOverView + .householdOverViewBeneficiaryReferredLabel + : isBeneficiaryRefused + ? Status.beneficiaryRefused.toValue() + : i18.householdOverView + .householdOverViewNotDeliveredIconLabel, + ), + textColor: DigitTheme.instance.colorScheme.error, + iconColor: DigitTheme.instance.colorScheme.error, + type: ButtonType.tertiary, + size: ButtonSize.medium, + isDisabled: true, + onPressed: () {}, + ), + ) + : Align( + alignment: Alignment.centerLeft, + child: Button( + prefixIcon: Icons.check_circle, + label: localizations.translate( + i18.householdOverView + .householdOverViewDeliveredIconLabel, + ), + isDisabled: true, + textColor: DigitTheme + .instance.colorScheme.onSurfaceVariant, + iconColor: DigitTheme + .instance.colorScheme.onSurfaceVariant, + type: ButtonType.tertiary, + size: ButtonSize.medium, + onPressed: () {}, + ), ), - iconSize: 20, - iconTextColor: - DigitTheme.instance.colorScheme.onSurfaceVariant, - iconColor: - DigitTheme.instance.colorScheme.onSurfaceVariant, - ), - ), - ), - ), - Offstage( - offstage: beneficiaryType != BeneficiaryType.individual || - isNotEligible || - isBeneficiaryRefused || - isBeneficiaryReferred, - child: Padding( - padding: const EdgeInsets.all(4.0), - child: Column( - children: [ - isNotEligible || isBeneficiaryRefused || isBeneficiaryReferred - ? const Offstage() - : !isNotEligible - ? DigitElevatedButton( - onPressed: (projectBeneficiaries ?? []).isEmpty - ? null - : () { - final bloc = - context.read(); - - bloc.add( - HouseholdOverviewEvent - .selectedIndividual( - individualModel: individual, - ), - ); - bloc.add(HouseholdOverviewReloadEvent( - projectId: - RegistrationDeliverySingleton() - .projectId!, - projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType ?? - BeneficiaryType.individual, - )); - - final futureTaskList = tasks - ?.where((task) => - task.status == - Status.delivered.toValue()) - .toList(); - - if ((futureTaskList ?? []).isNotEmpty) { - context.router.push( - RecordPastDeliveryDetailsRoute( - tasks: tasks, - ), - ); - } else { - context.router - .push(BeneficiaryDetailsRoute()); - } - }, - child: Center( - child: Text( - allDosesDelivered( + ), + ), + Offstage( + offstage: beneficiaryType != BeneficiaryType.individual || + isNotEligible || + isBeneficiaryRefused || + isBeneficiaryReferred, + child: Padding( + padding: const EdgeInsets.all(spacer1), + child: Column( + children: [ + isNotEligible || + isBeneficiaryRefused || + isBeneficiaryReferred + ? const Offstage() + : !isNotEligible + ? Button( + mainAxisSize: MainAxisSize.max, + isDisabled: + (projectBeneficiaries ?? []).isEmpty + ? true + : false, + type: ButtonType.primary, + size: ButtonSize.large, + label: allDosesDelivered( tasks, context.selectedCycle, sideEffects, @@ -291,256 +273,227 @@ class MemberCard extends StatelessWidget { i18.householdOverView .householdOverViewActionText, ), - ), + onPressed: () { + final bloc = + context.read(); + + bloc.add( + HouseholdOverviewEvent.selectedIndividual( + individualModel: individual, + ), + ); + bloc.add(HouseholdOverviewReloadEvent( + projectId: RegistrationDeliverySingleton() + .projectId!, + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType ?? + BeneficiaryType.individual, + )); + + final futureTaskList = tasks + ?.where((task) => + task.status == + Status.delivered.toValue()) + .toList(); + + if ((futureTaskList ?? []).isNotEmpty) { + context.router.push( + RecordPastDeliveryDetailsRoute( + tasks: tasks, + ), + ); + } else { + context.router + .push(BeneficiaryDetailsRoute()); + } + }, + ) + : const Offstage(), + const SizedBox( + height: 10, + ), + (isNotEligible || + isBeneficiaryRefused || + isBeneficiaryReferred || + (allDosesDelivered( + tasks, + context.selectedCycle, + sideEffects, + individual, + ) && + !checkStatus(tasks, context.selectedCycle))) + ? const Offstage() + : Button( + label: localizations.translate( + i18.memberCard.unableToDeliverLabel, ), - ) - : const Offstage(), - const SizedBox( - height: 10, - ), - (isNotEligible || - isBeneficiaryRefused || - isBeneficiaryReferred || - (allDosesDelivered( - tasks, - context.selectedCycle, - sideEffects, - individual, - ) && - !checkStatus(tasks, context.selectedCycle))) - ? const Offstage() - : DigitOutLineButton( - label: localizations.translate( - i18.memberCard.unableToDeliverLabel, - ), - buttonStyle: OutlinedButton.styleFrom( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.zero, - ), - backgroundColor: Colors.white, - side: BorderSide( - width: 1.0, - color: theme.colorScheme.secondary, - ), - minimumSize: Size( - MediaQuery.of(context).size.width / 1.15, - 50, - ), - ), - onPressed: (projectBeneficiaries ?? []).isEmpty - ? null - : () async { - await DigitActionDialog.show( - context, - widget: Column( - children: [ - DigitOutLineButton( - label: localizations.translate( - i18.memberCard - .beneficiaryRefusedLabel, - ), - buttonStyle: OutlinedButton.styleFrom( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.zero, - ), - backgroundColor: Colors.white, - side: BorderSide( - width: 1.0, - color: - theme.colorScheme.secondary, - ), - minimumSize: Size( - MediaQuery.of(context) - .size - .width / - 1.25, - 50, - ), - ), - onPressed: () { - Navigator.of(context, - rootNavigator: true) - .pop(); - context - .read() - .add( - DeliverInterventionSubmitEvent( - task: TaskModel( - projectBeneficiaryClientReferenceId: - projectBeneficiaryClientReferenceId, - clientReferenceId: - IdGen.i.identifier, - tenantId: - RegistrationDeliverySingleton() - .tenantId, - rowVersion: 1, - auditDetails: - AuditDetails( - createdBy: - RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context - .millisecondsSinceEpoch(), - ), - projectId: + isDisabled: (projectBeneficiaries ?? []).isEmpty + ? true + : false, + type: ButtonType.secondary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () async { + await showDialog( + context: context, + builder: (ctx) => ActionCard( + onOutsideTap: () { + Navigator.of( + context, + rootNavigator: true, + ).pop(); + }, + actions: [ + Button( + label: localizations.translate( + i18.memberCard + .beneficiaryRefusedLabel, + ), + type: ButtonType.secondary, + size: ButtonSize.large, + onPressed: () { + Navigator.of(context, + rootNavigator: true) + .pop(); + context + .read() + .add( + DeliverInterventionSubmitEvent( + task: TaskModel( + projectBeneficiaryClientReferenceId: + projectBeneficiaryClientReferenceId, + clientReferenceId: + IdGen.i.identifier, + tenantId: + RegistrationDeliverySingleton() + .tenantId, + rowVersion: 1, + auditDetails: AuditDetails( + createdBy: RegistrationDeliverySingleton() - .projectId, - status: Status - .beneficiaryRefused - .toValue(), - clientAuditDetails: - ClientAuditDetails( - createdBy: - RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: context - .millisecondsSinceEpoch(), - ), - additionalFields: - TaskAdditionalFields( - version: 1, - fields: [ - AdditionalField( - 'taskStatus', - Status - .beneficiaryRefused - .toValue(), - ), - ], - ), - address: individual - .address?.first, + .loggedInUserUuid!, + createdTime: context + .millisecondsSinceEpoch(), ), - isEditing: false, - boundaryModel: - RegistrationDeliverySingleton() - .boundary!, - ), - ); - final reloadState = context - .read(); - Future.delayed( - const Duration(milliseconds: 500), - () { - reloadState.add( - HouseholdOverviewReloadEvent( projectId: RegistrationDeliverySingleton() - .projectId!, - projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, + .projectId, + status: Status + .beneficiaryRefused + .toValue(), + clientAuditDetails: + ClientAuditDetails( + createdBy: + RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: context + .millisecondsSinceEpoch(), + ), + additionalFields: + TaskAdditionalFields( + version: 1, + fields: [ + AdditionalField( + 'taskStatus', + Status + .beneficiaryRefused + .toValue(), + ), + ], + ), + address: individual + .address?.first, ), - ); - }, - ).then( - (value) => context.router.push( - HouseholdAcknowledgementRoute( - enableViewHousehold: true, + isEditing: false, + boundaryModel: + RegistrationDeliverySingleton() + .boundary!, ), + ); + final reloadState = context + .read(); + Future.delayed( + const Duration(milliseconds: 500), + () { + reloadState.add( + HouseholdOverviewReloadEvent( + projectId: + RegistrationDeliverySingleton() + .projectId!, + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType!, + ), + ); + }, + ).then( + (value) => context.router.push( + HouseholdAcknowledgementRoute( + enableViewHousehold: true, ), - ); - }, - ), - const SizedBox( - height: kPadding * 2, - ), - DigitOutLineButton( - label: localizations.translate( - i18.memberCard - .referBeneficiaryLabel, - ), - buttonStyle: OutlinedButton.styleFrom( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.zero, ), - backgroundColor: Colors.white, - side: BorderSide( - width: 1.0, - color: - theme.colorScheme.secondary, - ), - minimumSize: Size( - MediaQuery.of(context) - .size - .width / - 1.25, - 50, - ), - ), - onPressed: () async { - Navigator.of( - context, - rootNavigator: true, - ).pop(); - await context.router.push( - ReferBeneficiaryRoute( - projectBeneficiaryClientRefId: - projectBeneficiaryClientReferenceId ?? - '', - ), - ); - }, + ); + }, + ), + Button( + label: localizations.translate( + i18.memberCard.referBeneficiaryLabel, ), - const SizedBox( - height: kPadding * 2, - ), - DigitOutLineButton( - label: localizations.translate( - i18.memberCard - .recordAdverseEventsLabel, - ), - buttonStyle: OutlinedButton.styleFrom( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.zero, - ), - backgroundColor: Colors.white, - side: BorderSide( - width: 1.0, - color: tasks != null && - (tasks ?? []).isNotEmpty - ? theme.colorScheme.secondary - : theme.colorScheme.outline, - ), - minimumSize: Size( - MediaQuery.of(context) - .size - .width / - 1.25, - 50, + type: ButtonType.secondary, + size: ButtonSize.large, + onPressed: () async { + Navigator.of( + context, + rootNavigator: true, + ).pop(); + await context.router.push( + ReferBeneficiaryRoute( + projectBeneficiaryClientRefId: + projectBeneficiaryClientReferenceId ?? + '', ), - ), - onPressed: tasks != null && - (tasks ?? []).isNotEmpty - ? () async { - Navigator.of( - context, - rootNavigator: true, - ).pop(); - await context.router.push( - SideEffectsRoute( - tasks: tasks!, - ), - ); - } - : null, + ); + }, + ), + Button( + label: localizations.translate( + i18.memberCard + .recordAdverseEventsLabel, ), - ], - ), - ); - }, - ), - ], + isDisabled: tasks != null && + (tasks ?? []).isNotEmpty + ? false + : true, + type: ButtonType.secondary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () async { + Navigator.of( + context, + rootNavigator: true, + ).pop(); + await context.router.push( + SideEffectsRoute( + tasks: tasks!, + ), + ); + }, + ), + ], + ), + ); + }, + ), + ], + ), + ), ), - ), - ), - ], - ), - ); + ])); } } diff --git a/packages/registration_delivery/lib/widgets/progress_bar/beneficiary_progress.dart b/packages/registration_delivery/lib/widgets/progress_bar/beneficiary_progress.dart index 5ae9047bd..eff24ef84 100644 --- a/packages/registration_delivery/lib/widgets/progress_bar/beneficiary_progress.dart +++ b/packages/registration_delivery/lib/widgets/progress_bar/beneficiary_progress.dart @@ -1,8 +1,9 @@ import 'dart:math'; import 'package:collection/collection.dart'; -import 'package:digit_components/widgets/digit_card.dart'; import 'package:digit_data_model/data/data_repository.dart'; +import 'package:digit_ui_components/theme/spacers.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -84,12 +85,13 @@ class BeneficiaryProgressBarState extends State { final target = targetModel?.targetNo ?? 0.0; return DigitCard( - child: ProgressIndicatorContainer( + margin: const EdgeInsets.all(spacer2), + children: [ProgressIndicatorContainer( label: '${max(target - current, 0).round()} ${widget.label}', prefixLabel: '$current ${widget.prefixLabel}', suffixLabel: target.toStringAsFixed(0), value: target == 0 ? 0 : min(current / target, 1), - ), + ),] ); } } diff --git a/packages/registration_delivery/lib/widgets/progress_indicator/progress_indicator.dart b/packages/registration_delivery/lib/widgets/progress_indicator/progress_indicator.dart index 0ff61f7ff..3c228f3e2 100644 --- a/packages/registration_delivery/lib/widgets/progress_indicator/progress_indicator.dart +++ b/packages/registration_delivery/lib/widgets/progress_indicator/progress_indicator.dart @@ -1,4 +1,4 @@ -import 'package:digit_components/theme/digit_theme.dart'; +import 'package:digit_ui_components/theme/spacers.dart'; import 'package:flutter/material.dart'; class ProgressIndicatorContainer extends StatelessWidget { @@ -32,7 +32,7 @@ class ProgressIndicatorContainer extends StatelessWidget { textAlign: TextAlign.center, ), Padding( - padding: const EdgeInsets.all(kPadding * 2), + padding: const EdgeInsets.all(spacer2 * 2), child: Column( children: [ LinearProgressIndicator( @@ -44,7 +44,7 @@ class ProgressIndicatorContainer extends StatelessWidget { minHeight: 7.0, ), Padding( - padding: const EdgeInsets.only(top: kPadding + 4), + padding: const EdgeInsets.only(top: spacer2 + 4), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -67,7 +67,7 @@ class ProgressIndicatorContainer extends StatelessWidget { if (subLabel != null) Center( child: Padding( - padding: const EdgeInsets.all(kPadding), + padding: const EdgeInsets.all(spacer2), child: Text( subLabel ?? '', style: TextStyle( diff --git a/packages/registration_delivery/lib/widgets/showcase/showcase_button.dart b/packages/registration_delivery/lib/widgets/showcase/showcase_button.dart index 32f0e5f1b..f54468e06 100644 --- a/packages/registration_delivery/lib/widgets/showcase/showcase_button.dart +++ b/packages/registration_delivery/lib/widgets/showcase/showcase_button.dart @@ -1,6 +1,6 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/theme/digit_theme.dart'; import 'package:digit_showcase/showcase_widget.dart'; +import 'package:digit_ui_components/theme/spacers.dart'; import 'package:flutter/material.dart'; import 'package:registration_delivery/blocs/app_localization.dart'; @@ -44,10 +44,10 @@ class ShowcaseButtonState extends LocalizedState { children: [ Padding( padding: const EdgeInsets.fromLTRB( - kPadding, - kPadding, - kPadding / 2, - kPadding, + spacer2, + spacer2, + spacer2 / 2, + spacer2, ), child: Text( RegistrationDeliveryLocalization.of(context) diff --git a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart index 90b0b2c44..870639f6e 100644 --- a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart +++ b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart @@ -1,6 +1,6 @@ -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/atoms/selection_card.dart'; import 'package:digit_scanner/widgets/localized.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/atoms/selection_card.dart'; import 'package:flutter/material.dart'; import 'package:registration_delivery/registration_delivery.dart'; import '../../utils/i18_key_constants.dart' as i18; @@ -46,19 +46,19 @@ class StatusFilterState extends LocalizedState { children: isLoading ? [ Padding( - padding: const EdgeInsets.only(top: kPadding * 2), + padding: const EdgeInsets.only(top: spacer2 * 2), child: Icon( Icons.autorenew, - color: const DigitColors().burningOrange, - size: kPadding * 4, + color: DigitTheme.instance.colorScheme.primary, + size: spacer2 * 4, ), ), - const SizedBox(height: kPadding * 2), + const SizedBox(height: spacer2 * 2), Center( child: Text( localizations.translate(i18.common.coreCommonLoadingText), - style: theme.textTheme.headlineSmall - ?.copyWith(color: const DigitColors().burningOrange), + style: theme.textTheme.headlineSmall?.copyWith( + color: DigitTheme.instance.colorScheme.primary), ), ) ] @@ -67,21 +67,23 @@ class StatusFilterState extends LocalizedState { children: [ if (widget.titleIcon != null) ...[ Padding( - padding: const EdgeInsets.all(kPadding), + padding: const EdgeInsets.all(spacer2), child: widget.titleIcon!, ), ], - Expanded( - child: Padding( - padding: const EdgeInsets.symmetric(vertical: kPadding), - child: Text( - widget.titleText!, - textAlign: TextAlign.left, - style: DigitTheme - .instance.mobileTheme.textTheme.headlineMedium, + if (widget.titleText != null) + Expanded( + child: Padding( + padding: + const EdgeInsets.symmetric(vertical: spacer2), + child: Text( + widget.titleText!, + textAlign: TextAlign.left, + style: DigitTheme + .instance.mobileTheme.textTheme.headlineMedium, + ), ), ), - ), if (widget.isCloseIcon) InkWell( onTap: () => Navigator.of(context).pop(), @@ -90,8 +92,8 @@ class StatusFilterState extends LocalizedState { ], ), Padding( - padding: const EdgeInsets.all(kPadding), - child: SelectionBox( + padding: const EdgeInsets.all(spacer2), + child: SelectionCard( options: getFilters() ?? [], allowMultipleSelection: false, equalWidthOptions: true, @@ -108,52 +110,51 @@ class StatusFilterState extends LocalizedState { ), ), const SizedBox( - height: kPadding, + height: spacer2, ), Padding( - padding: const EdgeInsets.symmetric(horizontal: kPadding), + padding: const EdgeInsets.symmetric(horizontal: spacer2), child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, // Adjust button spacing children: [ Expanded( - child: DigitOutLineButton( + child: Button( label: localizations.translate( i18.searchBeneficiary.clearFilter, ), - onPressed: selectedButtons.isEmpty - ? null - : () { - setState(() { - selectedButtons.clear(); - }); - }), + isDisabled: selectedButtons.isEmpty, + type: ButtonType.secondary, + size: ButtonSize.medium, + onPressed: () { + setState(() { + selectedButtons.clear(); + }); + }), ), const SizedBox( - width: kPadding, + width: spacer2, ), Expanded( - child: DigitElevatedButton( - onPressed: selectedButtons.isEmpty - ? null - : () { - setState(() { - isLoading = true; - }); - var selected = selectedButtons - .map((e) => e.name) - .toList(); + child: Button( + label: localizations.translate( + i18.searchBeneficiary.applyFilter, + ), + isDisabled: selectedButtons.isEmpty, + type: ButtonType.primary, + size: ButtonSize.medium, + onPressed: () { + setState(() { + isLoading = true; + }); + var selected = + selectedButtons.map((e) => e.name).toList(); - Future.delayed(const Duration(seconds: 1), - () { - Navigator.pop(context, selected); - }); - }, - child: Text( - localizations.translate( - i18.searchBeneficiary.applyFilter, - ), - )), + Future.delayed(const Duration(seconds: 1), () { + Navigator.pop(context, selected); + }); + }, + ), ), ], ), diff --git a/packages/registration_delivery/lib/widgets/table_card/table_card.dart b/packages/registration_delivery/lib/widgets/table_card/table_card.dart new file mode 100644 index 000000000..55abdf3fa --- /dev/null +++ b/packages/registration_delivery/lib/widgets/table_card/table_card.dart @@ -0,0 +1,42 @@ +import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; +import 'package:flutter/material.dart'; + +class DigitTableCard extends StatelessWidget { + final Map element; + final Border? border; + final Color? color; + final EdgeInsetsGeometry? padding; + final double gap; + final num fraction; + final EdgeInsetsGeometry? topPadding; + final TextStyle? labelStyle; + final TextStyle? descriptionStyle; + + const DigitTableCard({ + super.key, + required this.element, + this.border, + this.color, + this.padding, + this.gap = 0, + this.fraction = 1.8, + this.topPadding, + this.labelStyle, + this.descriptionStyle, + }); + + @override + Widget build(BuildContext context) { + return LabelValueList( + labelFlex: 6, + maxLines: 2, + items: element.keys + .map((e)=>LabelValuePair( + label: e, + value: element[e].toString(), + + ) + ).toList(), + ); + } +} From 4d8c157429f0501e4e74541b25df74837c997ebb Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Thu, 19 Sep 2024 17:53:21 +0530 Subject: [PATCH 117/241] fixed table issues --- .../widgets/record_delivery_cycle.dart | 1 + .../beneficiary_acknowledgement.dart | 9 +--- .../individual_details.dart | 10 +++-- .../lib/utils/utils.dart | 15 ++++--- .../beneficiary/view_beneficiary_card.dart | 41 +++---------------- 5 files changed, 23 insertions(+), 53 deletions(-) diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart index a50be3b28..c666f7fea 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart @@ -220,6 +220,7 @@ class RecordDeliveryCycleState extends LocalizedState { width: MediaQuery.of(context).size.width, height: ((e.deliveries?.length ?? 0) + 1) * 57.5, child: DigitTable( + tableHeight: ((e.deliveries?.length ?? 0) + 1) * 57.5, enableBorder: true, showSelectedState: false, showPagination: false, diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart index 5d1375c32..47f067cf4 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart @@ -28,10 +28,6 @@ class BeneficiaryAcknowledgementPage extends LocalizedStatefulWidget { class BeneficiaryAcknowledgementPageState extends LocalizedState { - final canProceed = (RegistrationDeliverySingleton().projectType!.validMinAge!=null - && RegistrationDeliverySingleton().projectType!.validMaxAge!=null - )?true:false; - @override Widget build(BuildContext context) { return Scaffold( @@ -40,8 +36,7 @@ class BeneficiaryAcknowledgementPageState title: localizations .translate(i18.acknowledgementSuccess.acknowledgementLabelText), actions: [ - if(canProceed) - Button( + Button( label: localizations.translate( i18.householdDetails.viewHouseHoldDetailsAction, ), @@ -60,7 +55,7 @@ class BeneficiaryAcknowledgementPageState Button( label: localizations.translate(i18.acknowledgementSuccess.actionLabelText), onPressed: ()=>context.router.maybePop(), - type: (canProceed)?ButtonType.secondary:ButtonType.primary, + type: ButtonType.secondary, size: ButtonSize.large ), ], diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index 25194d3bd..154e4a03e 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -358,10 +358,8 @@ class IndividualDetailsPageState extends LocalizedState { i18.individualDetails.checkboxLabelText, ), value: widget.isHeadOfHousehold, - isDisabled: widget.isHeadOfHousehold, - onChanged: (_){ - - }, + readOnly: widget.isHeadOfHousehold, + onChanged: (_){}, ), ), ReactiveWrapperField( @@ -377,6 +375,10 @@ class IndividualDetailsPageState extends LocalizedState { ), isRequired: true, child: DigitDropdown( + selectedOption: DropdownItem( + name: localizations.translate(form.control(_idTypeKey).value), + code: form.control(_idTypeKey).value + ), items: RegistrationDeliverySingleton() .idTypeOptions! .map( diff --git a/packages/registration_delivery/lib/utils/utils.dart b/packages/registration_delivery/lib/utils/utils.dart index 1b40a62af..5196f9b21 100644 --- a/packages/registration_delivery/lib/utils/utils.dart +++ b/packages/registration_delivery/lib/utils/utils.dart @@ -2,8 +2,8 @@ import 'dart:math'; import 'package:collection/collection.dart'; -import 'package:digit_components/utils/date_utils.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/utils/date_utils.dart'; import 'package:formula_parser/formula_parser.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:registration_delivery/models/entities/household.dart'; @@ -97,7 +97,7 @@ bool checkIfBeneficiaryRefused( /// * Returns [true] if the individual is in the same cycle and is eligible for the next dose, bool checkEligibilityForAgeAndSideEffect( - DigitDOBAge age, + DigitDOBAgeConvertor age, ProjectTypeModel? projectType, TaskModel? tasks, List? sideEffects, @@ -132,10 +132,13 @@ bool checkEligibilityForAgeAndSideEffect( : false : false; } else { - return totalAgeMonths >= projectType!.validMinAge! && - totalAgeMonths <= projectType.validMaxAge! - ? true - : false; + if(projectType?.validMaxAge!=null && projectType?.validMinAge!=null){ + return totalAgeMonths >= projectType!.validMinAge! && + totalAgeMonths <= projectType.validMaxAge! + ? true + : false; + } + return false; } } diff --git a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart index c4058275e..746779235 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart @@ -2,11 +2,9 @@ import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/utils/date_utils.dart'; -import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:digit_ui_components/widgets/atoms/table_cell.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_table.dart'; -import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; import 'package:flutter/material.dart'; import 'package:registration_delivery/models/entities/project_beneficiary.dart'; @@ -146,11 +144,8 @@ class ViewBeneficiaryCardState extends LocalizedState { : DateTime.now(), ).months; - final canProceed = (RegistrationDeliverySingleton().projectType!.validMinAge!=null - && RegistrationDeliverySingleton().projectType!.validMaxAge!=null - )?true:false; - final isNotEligible = (canProceed)?!checkEligibilityForAgeAndSideEffect( + final isNotEligible = !checkEligibilityForAgeAndSideEffect( DigitDOBAgeConvertor( years: ageInYears, months: ageInMonths, @@ -158,7 +153,7 @@ class ViewBeneficiaryCardState extends LocalizedState { RegistrationDeliverySingleton().projectType, (taskData ?? []).isNotEmpty ? taskData?.last : null, sideEffects, - ):false; + ); final isSideEffectRecorded = recordedSideEffect( currentCycle, (taskData ?? []).isNotEmpty ? taskData?.last : null, @@ -253,11 +248,8 @@ class ViewBeneficiaryCardState extends LocalizedState { : DateTime.now(), ).months; - final canProceed = (RegistrationDeliverySingleton().projectType!.validMinAge!=null - && RegistrationDeliverySingleton().projectType!.validMaxAge!=null - )?true:false; - final isNotEligible = (canProceed)?!checkEligibilityForAgeAndSideEffect( + final isNotEligible = !checkEligibilityForAgeAndSideEffect( DigitDOBAgeConvertor( years: ageInYears, months: ageInMonths, @@ -269,7 +261,7 @@ class ViewBeneficiaryCardState extends LocalizedState { (householdMember.sideEffects ?? []).isNotEmpty ? householdMember.sideEffects : null, - ):false; + ); final isBeneficiaryRefused = @@ -330,30 +322,7 @@ class ViewBeneficiaryCardState extends LocalizedState { child: Button( label: localizations.translate(i18.searchBeneficiary.iconLabel), - onPressed: (canProceed) - ?widget.onOpenPressed - :(){ - showDialog( - context: context, - builder: (ctx)=>Popup( - title: localizations.translate(i18.common.coreCommonCanNotProceed), - type: PopUpType.alert, - description: localizations.translate(i18.common.coreCommonCanNotProceedDescription), - actions: [ - Button( - label: localizations.translate(i18.common.coreCommonGoback), - onPressed: (){ - Navigator.of(context, - rootNavigator: true - ).pop(); - }, - type: ButtonType.primary, - size: ButtonSize.large - ), - ], - ) - ); - }, + onPressed: widget.onOpenPressed, type: ButtonType.secondary, size: ButtonSize.medium, ), From 48184ca05430fa94af362251a463560a0eee16ac Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Mon, 23 Sep 2024 10:46:08 +0530 Subject: [PATCH 118/241] digit ui library version updated --- .../assets/animated_json/alert.json | 1127 +++++++++++++++++ .../assets/animated_json/error.json | 728 +++++++++++ .../assets/animated_json/success.json | 917 ++++++++++++++ .../pubspec.lock | 459 +++++-- .../pubspec.yaml | 1 + .../beneficiary/deliver_intervention.dart | 11 +- .../pages/beneficiary/dose_administered.dart | 13 +- .../beneficiary/widgets/past_delivery.dart | 26 +- .../widgets/record_delivery_cycle.dart | 147 ++- .../individual_details.dart | 5 +- packages/registration_delivery/pubspec.lock | 405 +++++- packages/registration_delivery/pubspec.yaml | 4 +- 12 files changed, 3567 insertions(+), 276 deletions(-) create mode 100644 apps/health_campaign_field_worker_app/assets/animated_json/alert.json create mode 100644 apps/health_campaign_field_worker_app/assets/animated_json/error.json create mode 100644 apps/health_campaign_field_worker_app/assets/animated_json/success.json diff --git a/apps/health_campaign_field_worker_app/assets/animated_json/alert.json b/apps/health_campaign_field_worker_app/assets/animated_json/alert.json new file mode 100644 index 000000000..171b416cd --- /dev/null +++ b/apps/health_campaign_field_worker_app/assets/animated_json/alert.json @@ -0,0 +1,1127 @@ +{ + "nm": "48 - Warning", + "ddd": 0, + "h": 500, + "w": 500, + "meta": { + "g": "LottieFiles AE " + }, + "layers": [ + { + "ty": 3, + "nm": "48 - Warning", + "sr": 1, + "st": 0, + "op": 144, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 60, + 60, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 180, + 180, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 250.045, + 290.339, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 0, + "ix": 11 + } + }, + "ef": [], + "ind": 1 + }, + { + "ty": 4, + "nm": "Line", + "sr": 1, + "st": 0, + "op": 144, + "ip": 12, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + -1, + 21.25, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 12 + }, + { + "s": [ + 55.556, + 55.556, + 100 + ], + "t": 32 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 85.533, + 85.887, + 0 + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 180 + ], + "t": 12 + }, + { + "s": [ + 0 + ], + "t": 32 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Shape 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1, + 80 + ], + [ + -1, + -37.5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 2, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 28, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 100, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 0 + ], + "t": 22 + }, + { + "s": [ + 40 + ], + "t": 42 + } + ], + "ix": 1 + }, + "m": 1 + } + ], + "ind": 2, + "parent": 5 + }, + { + "ty": 4, + "nm": "Dot", + "sr": 1, + "st": 0, + "op": 144, + "ip": 12, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Shape 1", + "ix": 1, + "cix": 2, + "np": 4, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1, + 80 + ], + [ + -1, + -37.5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 0.1, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 0, + "k": 0, + "ix": 1 + }, + "m": 1 + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 2, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 33, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 3, + "parent": 2 + }, + { + "ty": 4, + "nm": "Tri Outlines", + "sr": 1, + "st": 0, + "op": 144, + "ip": 10, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 85.513, + 72.848, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 10 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 15 + } + ], + "ix": 6, + "x": "var $bm_rt;\nvar amp, freq, decay, n, t, v;\ntry {\n amp = $bm_div(effect('Scale - Overshoot')('ADBE Slider Control-0001'), 2.5), freq = $bm_div(effect('Scale - Bounce')('ADBE Slider Control-0001'), 20), decay = $bm_div(effect('Scale - Friction')('ADBE Slider Control-0001'), 20), n = 0, 0 < numKeys && (n = nearestKey(time).index, key(n).time > time && n--), t = 0 === n ? 0 : $bm_sub(time, key(n).time), $bm_rt = 0 < n ? (v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10))), $bm_sum(value, $bm_div($bm_mul($bm_mul($bm_div(v, 100), amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))))) : value;\n} catch (e$$4) {\n $bm_rt = value = value;\n}" + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 59.955, + 37.467, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [ + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Overshoot", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 10, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Bounce", + "ix": 2, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 35, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Friction", + "ix": 3, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 65, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + } + ], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Group 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + -3.315, + 5.634 + ], + [ + 0, + 0 + ], + [ + -3.267, + -5.554 + ], + [ + 0, + 0 + ], + [ + 6.537, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 3.268, + -5.554 + ], + [ + 0, + 0 + ], + [ + 3.315, + 5.634 + ], + [ + 0, + 0 + ], + [ + -6.536, + 0 + ] + ], + "v": [ + [ + -81.948, + 59.861 + ], + [ + -7.284, + -67.044 + ], + [ + 7.284, + -67.044 + ], + [ + 81.948, + 59.861 + ], + [ + 74.664, + 72.598 + ], + [ + -74.664, + 72.598 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 0.7255, + 0.098, + 0 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 85.513, + 72.848 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 4, + "parent": 1 + }, + { + "ty": 3, + "nm": "Tri", + "sr": 1, + "st": 0, + "op": 144, + "ip": 10, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 85.513, + 72.848, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 10 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 15 + } + ], + "ix": 6, + "x": "var $bm_rt;\nvar amp, freq, decay, n, t, v;\ntry {\n amp = $bm_div(effect('Scale - Overshoot')('ADBE Slider Control-0001'), 2.5), freq = $bm_div(effect('Scale - Bounce')('ADBE Slider Control-0001'), 20), decay = $bm_div(effect('Scale - Friction')('ADBE Slider Control-0001'), 20), n = 0, 0 < numKeys && (n = nearestKey(time).index, key(n).time > time && n--), t = 0 === n ? 0 : $bm_sub(time, key(n).time), $bm_rt = 0 < n ? (v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10))), $bm_sum(value, $bm_div($bm_mul($bm_mul($bm_div(v, 100), amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))))) : value;\n} catch (e$$4) {\n $bm_rt = value = value;\n}" + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 59.955, + 37.467, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [ + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Overshoot", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 10, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Bounce", + "ix": 2, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 35, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Friction", + "ix": 3, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 65, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + } + ], + "ind": 5, + "parent": 1 + }, + { + "ty": 1, + "nm": "Plate_white", + "sr": 1, + "st": 0, + "op": 144, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 250, + 250, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 250, + 250, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "sc": "#ffffff", + "sh": 500, + "sw": 500, + "ind": 6 + } + ], + "v": "5.5.7", + "fr": 48, + "op": 144, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/assets/animated_json/error.json b/apps/health_campaign_field_worker_app/assets/animated_json/error.json new file mode 100644 index 000000000..96b4f9626 --- /dev/null +++ b/apps/health_campaign_field_worker_app/assets/animated_json/error.json @@ -0,0 +1,728 @@ +{ + "nm": "ckeck", + "ddd": 0, + "h": 50, + "w": 50, + "meta": { + "g": "@lottiefiles/toolkit-js 0.33.2" + }, + "layers": [ + { + "ty": 4, + "nm": "! Outlines", + "sr": 1, + "st": 0, + "op": 213, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 2, + 12, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.653, + "y": -0.834 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 60 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 73 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.127, + "y": 1.695 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 83 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 90 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 25, + 25, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Group 1", + "ix": 1, + "cix": 2, + "np": 4, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 1.104 + ], + [ + -1.104, + 0 + ], + [ + 0, + -1.104 + ], + [ + 1.104, + 0 + ] + ], + "o": [ + [ + 0, + -1.104 + ], + [ + 1.104, + 0 + ], + [ + 0, + 1.104 + ], + [ + -1.104, + 0 + ] + ], + "v": [ + [ + -2, + 10 + ], + [ + 0, + 8 + ], + [ + 2, + 10 + ], + [ + 0, + 12 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 2", + "ix": 2, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1.036, + 5 + ], + [ + -2, + -6.625 + ], + [ + -2, + -12 + ], + [ + 2, + -12 + ], + [ + 2, + -6.625 + ], + [ + 1.052, + 5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "mm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Merge", + "nm": "Merge Paths 1", + "mm": 1 + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0.099, + 9.982 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 2.099, + 21.982 + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 10 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 12 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 14 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 16 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 18 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 20 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 22 + }, + { + "s": [ + 0 + ], + "t": 24 + } + ], + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 1 + }, + { + "ty": 4, + "nm": "Shape Layer 1", + "sr": 1, + "st": 0, + "op": 193, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 10, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.41, + "y": -0.602 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 60 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.436, + "y": 1.492 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 83 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 90 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 25, + 35, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Ellipse 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "el", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Ellipse", + "nm": "Ellipse Path 1", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 3 + }, + "s": { + "a": 0, + "k": [ + 40, + 40 + ], + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 2, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 100, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 0, + "k": 0, + "ix": 1 + }, + "m": 1 + } + ], + "ind": 2 + } + ], + "v": "5.6.5", + "fr": 60, + "op": 180, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/assets/animated_json/success.json b/apps/health_campaign_field_worker_app/assets/animated_json/success.json new file mode 100644 index 000000000..43192f708 --- /dev/null +++ b/apps/health_campaign_field_worker_app/assets/animated_json/success.json @@ -0,0 +1,917 @@ +{ + "nm": "sucess", + "ddd": 0, + "h": 120, + "w": 120, + "meta": { + "g": "LottieFiles AE 0.1.21" + }, + "layers": [ + { + "ty": 3, + "nm": "scale up null", + "sr": 1, + "st": 0, + "op": 300.00001221925, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0 + }, + "i": { + "x": 0.833, + "y": 1 + }, + "s": [ + 111, + 111, + 100 + ], + "t": 27 + }, + { + "o": { + "x": 0.167, + "y": 0 + }, + "i": { + "x": 0.833, + "y": 1 + }, + "s": [ + 101, + 101, + 100 + ], + "t": 36 + }, + { + "s": [ + 121, + 121, + 100 + ], + "t": 42.0000017106951 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 60, + 60, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 0, + "ix": 11 + } + }, + "ef": [], + "ind": 1 + }, + { + "ty": 4, + "nm": "spark", + "sr": 1, + "st": 35.0000014255792, + "op": 335.00001364483, + "ip": 35.0000014255792, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0.5, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Rectangle 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 1", + "d": 1, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 0, + -21 + ], + "t": 35, + "ti": [ + 0, + 1.5 + ], + "to": [ + 0, + -1.5 + ] + }, + { + "s": [ + 0, + -30 + ], + "t": 53.0000021587343 + } + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 4 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.976, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 2, + 0 + ], + "t": 35 + }, + { + "o": { + "x": 0.33299999999999996, + "y": 0 + }, + "i": { + "x": 0.15355432054499818, + "y": 0.9999999999999999 + }, + "s": [ + 2, + 8 + ], + "t": 42 + }, + { + "s": [ + 1.633, + 0 + ], + "t": 53.0000021587343 + } + ], + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + -8 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "rp", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Repeater", + "nm": "Repeater 1", + "ix": 2, + "m": 1, + "c": { + "a": 0, + "k": 8, + "ix": 1 + }, + "o": { + "a": 0, + "k": 0, + "ix": 2 + }, + "tr": { + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 45, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0 + }, + "so": { + "a": 0, + "k": 100, + "ix": 5 + }, + "eo": { + "a": 0, + "k": 100, + "ix": 6 + } + } + } + ], + "ind": 2, + "parent": 1 + }, + { + "ty": 4, + "nm": "check", + "sr": 1, + "st": 10.0000004073083, + "op": 310.000012626559, + "ip": 22.0000008960784, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 3.5, + 3.75 + ], + [ + -12.973, + 5.349 + ], + [ + -6.124, + -9.992 + ], + [ + 12.125, + -7.431 + ], + [ + 7.431, + 12.125 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -3.5, + -3.75 + ], + [ + 10.764, + -2.941 + ], + [ + 7.431, + 12.125 + ], + [ + -12.125, + 7.431 + ], + [ + -7.431, + -12.125 + ] + ], + "v": [ + [ + 15.25, + -9.688 + ], + [ + -5.75, + 10.062 + ], + [ + -16, + 0.25 + ], + [ + -6.777, + -24.849 + ], + [ + 21.955, + -13.456 + ], + [ + 13.456, + 21.955 + ], + [ + -21.955, + 13.456 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 1, + "k": [ + { + "o": { + "x": 0.714, + "y": 0 + }, + "i": { + "x": 0.351, + "y": 1 + }, + "s": [ + 100 + ], + "t": 10 + }, + { + "s": [ + 23 + ], + "t": 40.0000016292334 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.742, + "y": 0 + }, + "i": { + "x": 0.363, + "y": 1 + }, + "s": [ + 100 + ], + "t": 17 + }, + { + "s": [ + 0 + ], + "t": 45.0000018328876 + } + ], + "ix": 1 + }, + "m": 1 + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 4, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 3 + } + } + ], + "ind": 3, + "parent": 1 + }, + { + "ty": 4, + "nm": "circle", + "sr": 1, + "st": 0, + "op": 300.00001221925, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + -14.221, + 0 + ], + [ + 0, + -14.221 + ], + [ + 14.221, + 0 + ], + [ + 0, + 14.221 + ] + ], + "o": [ + [ + 14.221, + 0 + ], + [ + 0, + 14.221 + ], + [ + -14.221, + 0 + ], + [ + 0, + -14.221 + ] + ], + "v": [ + [ + 0, + -25.75 + ], + [ + 25.75, + 0 + ], + [ + 0, + 25.75 + ], + [ + -25.75, + 0 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 2, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 3 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 3, + "e": { + "a": 1, + "k": [ + { + "o": { + "x": 0.714, + "y": 0 + }, + "i": { + "x": 0.351, + "y": 1 + }, + "s": [ + 100 + ], + "t": 0 + }, + { + "s": [ + 100 + ], + "t": 30.0000012219251 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.742, + "y": 0 + }, + "i": { + "x": 0.363, + "y": 1 + }, + "s": [ + 100 + ], + "t": 7 + }, + { + "s": [ + 0 + ], + "t": 33.0000013441176 + } + ], + "ix": 1 + }, + "m": 1 + } + ], + "ind": 4, + "parent": 1 + } + ], + "v": "5.5.7", + "fr": 29.9700012207031, + "op": 60.0000024438501, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index c96f0b5fd..21824fc23 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -37,18 +37,18 @@ packages: dependency: transitive description: name: ansicolor - sha256: "8bf17a8ff6ea17499e40a2d2542c2f481cd7615760c6d34065cb22bfd22e6880" + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.0.3" archive: dependency: transitive description: name: archive - sha256: "6bd38d335f0954f5fad9c79e614604fbf03a0e5b975923dd001b6ea965ef5b4b" + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d url: "https://pub.dev" source: hosted - version: "3.6.0" + version: "3.6.1" args: dependency: transitive description: @@ -68,10 +68,9 @@ packages: attendance_management: dependency: "direct main" description: - name: attendance_management - sha256: f1b4373e8d0d9f8227ede0d25d4141f0d16d18ac2525c0347b844098cdab080f - url: "https://pub.dev" - source: hosted + path: "../../packages/attendance_management" + relative: true + source: path version: "1.0.2+1" audioplayers: dependency: "direct main" @@ -157,10 +156,10 @@ packages: dependency: transitive description: name: battery_plus_platform_interface - sha256: "942707f90e2f7481dcb178df02e22a9c6971b3562b848d6a1b8c7cff9f1a1fec" + sha256: e8342c0f32de4b1dfd0223114b6785e48e579bfc398da9471c9179b907fa4910 url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "2.0.1" bloc: dependency: transitive description: @@ -285,18 +284,18 @@ packages: dependency: transitive description: name: camera_platform_interface - sha256: a250314a48ea337b35909a4c9d5416a208d736dcb01d0b02c6af122be66660b0 + sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 url: "https://pub.dev" source: hosted - version: "2.7.4" + version: "2.8.0" camera_web: dependency: transitive description: name: camera_web - sha256: "9e9aba2fbab77ce2472924196ff8ac4dd8f9126c4f9a3096171cd1d870d6b26c" + sha256: b9235ec0a2ce949daec546f1f3d86f05c3921ed31c7d9ab6b7c03214d152fc2d url: "https://pub.dev" source: hosted - version: "0.3.3" + version: "0.3.4" characters: dependency: transitive description: @@ -340,10 +339,9 @@ packages: closed_household: dependency: "direct main" description: - name: closed_household - sha256: d216dbc8e263c9be576e3747ceee9715a6a96e6056a7a812847fb44589f515e8 - url: "https://pub.dev" - source: hosted + path: "../../packages/closed_household" + relative: true + source: path version: "1.0.1+1" code_builder: dependency: transitive @@ -409,6 +407,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" + url: "https://pub.dev" + source: hosted + version: "1.0.0" cupertino_icons: dependency: "direct main" description: @@ -428,11 +434,9 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "9b887d24c05459c027a92391869d4c10b440e00f" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git + path: "../../packages/dart_mappable_builder" + relative: true + source: path version: "4.2.0" dart_style: dependency: transitive @@ -478,10 +482,10 @@ packages: dependency: transitive description: name: device_info_plus_platform_interface - sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64 + sha256: "282d3cf731045a2feb66abfe61bbc40870ae50a3ed10a4d3d217556c35c8c2ba" url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "7.0.1" diff_match_patch: dependency: transitive description: @@ -493,18 +497,16 @@ packages: digit_components: dependency: "direct main" description: - name: digit_components - sha256: "9cca4d9a546037080afe02b6ade82fdf01574e11f5656ad12120fd6966578616" - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_components" + relative: true + source: path version: "1.0.1+1" digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "0b81e96636496b56b4f9c5d918690a17d8985d6b131e0ab54968eb5471ee4f54" - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_data_model" + relative: true + source: path version: "1.0.3+1" digit_dss: dependency: "direct main" @@ -524,27 +526,41 @@ packages: digit_scanner: dependency: "direct main" description: - name: digit_scanner - sha256: "9862c4885465bb1942e36dc9b42596c201648db9b0f5ffb8ad768e2409fc2742" - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_scanner" + relative: true + source: path version: "1.0.3+1" digit_showcase: dependency: "direct main" description: - name: digit_showcase - sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" + path: "../../packages/digit_showcase" + relative: true + source: path + version: "1.0.0" + digit_ui_components: + dependency: transitive + description: + name: digit_ui_components + sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "0.0.1+7" dio: dependency: "direct main" description: name: dio - sha256: "11e40df547d418cc0c4900a9318b26304e665da6fa4755399a9ff9efd09034b5" + sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" url: "https://pub.dev" source: hosted - version: "5.4.3+1" + version: "5.7.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac" + url: "https://pub.dev" + source: hosted + version: "1.0.1" disable_battery_optimization: dependency: "direct main" description: @@ -561,6 +577,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.1" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" drift: dependency: "direct main" description: @@ -633,6 +657,46 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 + url: "https://pub.dev" + source: hosted + version: "8.0.0+1" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + url: "https://pub.dev" + source: hosted + version: "0.9.2+1" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 + url: "https://pub.dev" + source: hosted + version: "0.9.4" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" firebase_core: dependency: transitive description: @@ -645,10 +709,10 @@ packages: dependency: transitive description: name: firebase_core_platform_interface - sha256: c437ae5d17e6b5cc7981cf6fd458a5db4d12979905f9aafd1fea930428a9fe63 + sha256: e30da58198a6d4b49d5bce4e852f985c32cb10db329ebef9473db2b9f09ce810 url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.3.0" firebase_core_web: dependency: transitive description: @@ -690,42 +754,42 @@ packages: dependency: "direct main" description: name: flutter_background_service - sha256: "94d9a143852729140e17254a53769383b03738cd92b6e588a8762003e6cd9dd9" + sha256: d32f078ec57647c9cfd6e1a8da9297f7d8f021d4dcc204a35aaad2cdbfe255f0 url: "https://pub.dev" source: hosted - version: "5.0.5" + version: "5.0.10" flutter_background_service_android: dependency: transitive description: name: flutter_background_service_android - sha256: "30863ebafd8214b8e76d5e5c9f27887dc5cc303fcf3e89f71534f621fc486782" + sha256: "39da42dddf877beeef82bc2583130d8bedb4d0765e99ca9e7b4a32e8c6abd239" url: "https://pub.dev" source: hosted - version: "6.2.2" + version: "6.2.7" flutter_background_service_ios: dependency: transitive description: name: flutter_background_service_ios - sha256: ab73657535876e16abc89e40f924df3e92ad3dee83f64d187081417e824709ed + sha256: "6037ffd45c4d019dab0975c7feb1d31012dd697e25edc05505a4a9b0c7dc9fba" url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.0.3" flutter_background_service_platform_interface: dependency: transitive description: name: flutter_background_service_platform_interface - sha256: cd5720ff5b051d551a4734fae16683aace779bd0425e8d3f15d84a0cdcc2d8d9 + sha256: ca74aa95789a8304f4d3f57f07ba404faa86bed6e415f83e8edea6ad8b904a41 url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.1.2" flutter_bloc: dependency: "direct main" description: name: flutter_bloc - sha256: f0ecf6e6eb955193ca60af2d5ca39565a86b8a142452c5b24d96fb477428f4d2 + sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a url: "https://pub.dev" source: hosted - version: "8.1.5" + version: "8.1.6" flutter_dotenv: dependency: "direct main" description: @@ -739,6 +803,30 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: b4e2df75364bab2f4c3ca32b87193267d786b6e158c3f345c3a1daeb911d82b9 + url: "https://pub.dev" + source: hosted + version: "2.0.6" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" flutter_focus_watcher: dependency: transitive description: @@ -823,18 +911,18 @@ packages: dependency: transitive description: name: flutter_local_notifications_linux - sha256: "33f741ef47b5f63cc7f78fe75eeeac7e19f171ff3c3df054d84c1e38bedb6a03" + sha256: c49bd06165cad9beeb79090b18cd1eb0296f4bf4b23b84426e37dd7c027fc3af url: "https://pub.dev" source: hosted - version: "4.0.0+1" + version: "4.0.1" flutter_local_notifications_platform_interface: dependency: transitive description: name: flutter_local_notifications_platform_interface - sha256: "340abf67df238f7f0ef58f4a26d2a83e1ab74c77ab03cd2b2d5018ac64db30b7" + sha256: "85f8d07fe708c1bdcf45037f2c0109753b26ae077e9d9e899d55971711a4ea66" url: "https://pub.dev" source: hosted - version: "7.1.0" + version: "7.2.0" flutter_localizations: dependency: "direct main" description: flutter @@ -912,6 +1000,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" flutter_svg: dependency: "direct main" description: @@ -966,10 +1062,10 @@ packages: dependency: "direct main" description: name: freezed_annotation - sha256: c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d + sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.4" frontend_server_client: dependency: transitive description: @@ -983,6 +1079,54 @@ packages: description: flutter source: sdk version: "0.0.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + url: "https://pub.dev" + source: hosted + version: "4.3.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: bc2aca02423ad429cb0556121f56e60360a2b7d694c8570301d06ea0c00732fd + url: "https://pub.dev" + source: hosted + version: "2.3.7" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -1035,10 +1179,10 @@ packages: dependency: "direct main" description: name: gs1_barcode_parser - sha256: "9aaff47bdab7177deaf9248cc861ef41cf611d3f828498cb40b64bedcbf53391" + sha256: ff171bc40038de3f7178fbc32eaf9eebc3d35a3c4c00bb0281fe4a976d853a42 url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.1.0" horizontal_data_table: dependency: transitive description: @@ -1051,10 +1195,10 @@ packages: dependency: transitive description: name: hrk_batteries - sha256: "8ecfdee8268d480a700153a006f7c622c922fbfba4d8f576438c8c41ea9efdf2" + sha256: "35bc2be10bb64284b04d3cd944c24eecf304747fc64b34e2d27ef1a3ac75ab49" url: "https://pub.dev" source: hosted - version: "0.9.2" + version: "2.2.0" hrk_flutter_test_batteries: dependency: "direct dev" description: @@ -1067,10 +1211,18 @@ packages: dependency: transitive description: name: hrk_logging - sha256: "7ea3d02ed46f19533a8cae075cafe636757548a300a0e404193f6dd142c024b5" + sha256: "2e6501f4b78439bec4c367a94b14f792fd17fe1c94f18d903086c7b8a48402f5" url: "https://pub.dev" source: hosted - version: "0.1.3" + version: "0.3.1" + html: + dependency: transitive + description: + name: html + sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" + url: "https://pub.dev" + source: hosted + version: "0.15.4" http: dependency: transitive description: @@ -1099,10 +1251,74 @@ packages: dependency: transitive description: name: image - sha256: "4c68bfd5ae83e700b5204c1e74451e7bf3cf750e6843c6e158289cf56bda018e" + sha256: "2237616a36c0d69aef7549ab439b833fb7f9fb9fc861af2cc9ac3eedddd69ca8" + url: "https://pub.dev" + source: hosted + version: "4.2.0" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" url: "https://pub.dev" source: hosted - version: "4.1.7" + version: "1.0.8" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" + url: "https://pub.dev" + source: hosted + version: "0.8.9+6" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 + url: "https://pub.dev" + source: hosted + version: "0.8.9+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b + url: "https://pub.dev" + source: hosted + version: "2.9.3" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" integration_test: dependency: "direct dev" description: flutter @@ -1119,10 +1335,9 @@ packages: inventory_management: dependency: "direct main" description: - name: inventory_management - sha256: "1a5976ab807666629704f559730d5418e1c723fed898df2cc6e7d9807f813b6f" - url: "https://pub.dev" - source: hosted + path: "../../packages/inventory_management" + relative: true + source: path version: "1.0.3+2" io: dependency: transitive @@ -1264,18 +1479,18 @@ packages: dependency: transitive description: name: mime - sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.6" mocktail: dependency: "direct dev" description: name: mocktail - sha256: c4b5007d91ca4f67256e720cb1b6d704e79a510183a12fa551021f652577dce6 + sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" nested: dependency: "direct main" description: @@ -1340,6 +1555,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_parsing: dependency: transitive description: @@ -1352,10 +1575,10 @@ packages: dependency: "direct main" description: name: path_provider - sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" path_provider_android: dependency: transitive description: @@ -1392,10 +1615,10 @@ packages: dependency: transitive description: name: path_provider_windows - sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.3.0" pedantic: dependency: transitive description: @@ -1456,10 +1679,10 @@ packages: dependency: "direct main" description: name: pretty_dio_logger - sha256: "00b80053063935cf9a6190da344c5373b9d0e92da4c944c878ff2fbef0ef6dc2" + sha256: "36f2101299786d567869493e2f5731de61ce130faa14679473b26905a92b6407" url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.4.0" process: dependency: transitive description: @@ -1488,10 +1711,10 @@ packages: dependency: transitive description: name: pubspec_parse - sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 + sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 url: "https://pub.dev" source: hosted - version: "1.2.3" + version: "1.3.0" qr: dependency: transitive description: @@ -1535,18 +1758,16 @@ packages: referral_reconciliation: dependency: "direct main" description: - name: referral_reconciliation - sha256: "80d5b93164e4f8337fa757fcb75a1e85b88ffbb760e731ca24496a0cae2aef38" - url: "https://pub.dev" - source: hosted + path: "../../packages/referral_reconciliation" + relative: true + source: path version: "1.0.2+1" registration_delivery: dependency: "direct main" description: - name: registration_delivery - sha256: a6a88665bbf1fa5dce5b864d66992ff9c885b2a3cd898d37f349f1be03cf4086 - url: "https://pub.dev" - source: hosted + path: "../../packages/registration_delivery" + relative: true + source: path version: "1.0.3+1" remove_emoji_input_formatter: dependency: transitive @@ -1592,18 +1813,18 @@ packages: dependency: transitive description: name: shared_preferences_linux - sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" + sha256: "2ba0510d3017f91655b7543e9ee46d48619de2a2af38e5c790423f7007c7ccc1" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.0" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b" + sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.1" shared_preferences_web: dependency: transitive description: @@ -1616,10 +1837,10 @@ packages: dependency: transitive description: name: shared_preferences_windows - sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" + sha256: "398084b47b7f92110683cac45c6dc4aae853db47e470e5ddcd52cab7f7196ab2" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.0" shelf: dependency: transitive description: @@ -1733,10 +1954,10 @@ packages: dependency: "direct main" description: name: sqlite3_flutter_libs - sha256: fb2a106a2ea6042fe57de2c47074cc31539a941819c91e105b864744605da3f5 + sha256: "62bbb4073edbcdf53f40c80775f33eea01d301b7b81417e5b3fb7395416258c1" url: "https://pub.dev" source: hosted - version: "0.5.21" + version: "0.5.24" sqlparser: dependency: transitive description: @@ -1837,10 +2058,10 @@ packages: dependency: transitive description: name: timezone - sha256: a6ccda4a69a442098b602c44e61a1e2b4bf6f5516e875bbf0f427d5df14745d5 + sha256: "2236ec079a174ce07434e89fcd3fcda430025eb7692244139a9cf54fdcf1fc7d" url: "https://pub.dev" source: hosted - version: "0.9.3" + version: "0.9.4" timing: dependency: transitive description: @@ -1865,6 +2086,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" upower: dependency: transitive description: @@ -1877,10 +2114,10 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: "6ce1e04375be4eed30548f10a315826fd933c1e493206eab82eed01f438c8d2e" + sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" url: "https://pub.dev" source: hosted - version: "6.2.6" + version: "6.3.0" url_launcher_android: dependency: transitive description: @@ -1933,10 +2170,10 @@ packages: dependency: transitive description: name: url_launcher_windows - sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7 + sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" uuid: dependency: "direct main" description: @@ -1977,6 +2214,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" vm_service: dependency: transitive description: @@ -2082,5 +2327,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.3 <3.9.0" + dart: ">=3.2.3 <=3.9.0" flutter: ">=3.16.0" diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index c2d6d352d..a9db1c02b 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -110,6 +110,7 @@ flutter: assets: - ./ - assets/icons/svg/ + - assets/animated_json/ fonts: - family: Roboto diff --git a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart index c066ce8bd..8a67c7355 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart @@ -381,10 +381,13 @@ class DeliverInterventionPageState ), ), if (numberOfDoses > 1) - DigitStepper( - activeIndex: deliveryInterventionState.dose - 1, - stepperList: steps, - inverted: true, + SizedBox( + height: MediaQuery.sizeOf(context).height*0.08, + child: DigitStepper( + activeIndex: deliveryInterventionState.dose - 1, + stepperList: steps, + inverted: true, + ), ), ReactiveWrapperField( diff --git a/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart b/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart index 59240b617..82b0af10e 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart @@ -60,10 +60,14 @@ class DoseAdministeredPageState extends LocalizedState { DigitTableColumn( header: localizations.translate(i18.beneficiaryDetails.beneficiaryDose), cellValue: 'dose', + width: MediaQuery.of(context).size.width / + 2.18, ), DigitTableColumn( header: localizations.translate(i18.beneficiaryDetails.beneficiaryResources), cellValue: 'resources', + width: MediaQuery.of(context).size.width / + 2.18, ), ]; @@ -427,13 +431,12 @@ class DoseAdministeredPageState extends LocalizedState { thickness: 2.0, ), DigitTable( + enableBorder: true, + showPagination: false, columns: headerListResource, rows: tableDataRows, - // columnWidth: - // MediaQuery.of(context).size.width / - // 2.18, - // height: - // (tableDataRows.length + 1) * 57.5, + tableHeight: + (tableDataRows.length + 1) * 57.5, ), ], ); diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart index a024ddc25..e91f7a386 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart @@ -67,20 +67,20 @@ Widget buildTableContent( width: MediaQuery.of(context).size.width / 1.25, child: Column( crossAxisAlignment: CrossAxisAlignment.start, - // mainAxisSize: MainAxisSize.min, + mainAxisSize: MainAxisSize.min, children: [ - DigitTableCard( - topPadding: const EdgeInsets.only(top: 0.0), - padding: const EdgeInsets.only(bottom: spacer2 / 2), - fraction: 2.5, - element: { - localizations.translate( - i18.beneficiaryDetails.beneficiaryAge, - ): fetchProductVariant(item, individualModel, householdModel)?.condition != null - ? localizations.translate( - fetchProductVariant(item, individualModel, householdModel)!.condition!) - : null, - }, + Padding( + padding: const EdgeInsets.only(bottom: spacer1), + child: DigitTableCard( + element: { + localizations.translate( + i18.beneficiaryDetails.beneficiaryAge, + ): fetchProductVariant(item, individualModel, householdModel)?.condition != null + ? localizations.translate( + fetchProductVariant(item, individualModel, householdModel)!.condition!) + : null, + }, + ), ), const DigitDivider(), // Build the DigitTable with the data diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart index c666f7fea..1bb3edf52 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart @@ -216,84 +216,81 @@ class RecordDeliveryCycleState extends LocalizedState { ), ), ), - SizedBox( - width: MediaQuery.of(context).size.width, - height: ((e.deliveries?.length ?? 0) + 1) * 57.5, - child: DigitTable( - tableHeight: ((e.deliveries?.length ?? 0) + 1) * 57.5, - enableBorder: true, - showSelectedState: false, - showPagination: false, - highlightedRows: (selectedIndex!=null)?[selectedIndex]:[], - columns: headerList, - rows: e.deliveries!.mapIndexed( - (index, item) { - final tasks = widget.taskData - ?.where((element) => - element.additionalFields?.fields - .firstWhereOrNull( - (f) => - f.key == - AdditionalFieldsType.doseIndex - .toValue(), - ) - ?.value == - '0${item.id}' && - element.additionalFields?.fields - .firstWhereOrNull( - (c) => - c.key == - AdditionalFieldsType.cycleIndex - .toValue(), - ) - ?.value == - '0${e.id}') - .lastOrNull; + DigitTable( + tableHeight: ((e.deliveries?.length ?? 0) + 1) * 57.5, + tableWidth: MediaQuery.of(context).size.width, + enableBorder: true, + showSelectedState: false, + showPagination: false, + highlightedRows: (selectedIndex!=null)?[selectedIndex]:[], + columns: headerList, + rows: e.deliveries!.mapIndexed( + (index, item) { + final tasks = widget.taskData + ?.where((element) => + element.additionalFields?.fields + .firstWhereOrNull( + (f) => + f.key == + AdditionalFieldsType.doseIndex + .toValue(), + ) + ?.value == + '0${item.id}' && + element.additionalFields?.fields + .firstWhereOrNull( + (c) => + c.key == + AdditionalFieldsType.cycleIndex + .toValue(), + ) + ?.value == + '0${e.id}') + .lastOrNull; - return DigitTableRow(tableRow: [ - DigitTableData( - '${localizations.translate(i18.deliverIntervention.dose)} ${e.deliveries!.indexOf(item) + 1}', - cellKey: 'dose', - ), - DigitTableData( - localizations.translate( - index == selectedIndex - ? Status.toAdminister.toValue() - : tasks?.status ?? Status.inComplete.toValue(), - ), - cellKey: 'status', - style: TextStyle( - color: index == selectedIndex - ? null - : tasks?.status == - Status.administeredSuccess.toValue() - ? DigitTheme - .instance.colorScheme.onSurfaceVariant - : DigitTheme.instance.colorScheme.error, - fontWeight: - index == selectedIndex ? FontWeight.w700 : null, - ), + return DigitTableRow(tableRow: [ + DigitTableData( + '${localizations.translate(i18.deliverIntervention.dose)} ${e.deliveries!.indexOf(item) + 1}', + cellKey: 'dose', + ), + DigitTableData( + localizations.translate( + index == selectedIndex + ? Status.toAdminister.toValue() + : tasks?.status ?? Status.inComplete.toValue(), ), - DigitTableData( - tasks?.status == Status.administeredFailed.toValue() || - (tasks?.additionalFields?.fields - .where((e) => - e.key == - AdditionalFieldsType.deliveryStrategy - .toValue()) - .firstOrNull - ?.value == - DeliverStrategyType.indirect.toValue()) - ? ' -- ' - : tasks?.clientAuditDetails?.createdTime.toDateTime - .getFormattedDate() ?? - ' -- ', - cellKey: 'completedOn', + cellKey: 'status', + style: TextStyle( + color: index == selectedIndex + ? null + : tasks?.status == + Status.administeredSuccess.toValue() + ? DigitTheme + .instance.colorScheme.onSurfaceVariant + : DigitTheme.instance.colorScheme.error, + fontWeight: + index == selectedIndex ? FontWeight.w700 : null, ), - ]); - }, - ).toList(), - ), + ), + DigitTableData( + tasks?.status == Status.administeredFailed.toValue() || + (tasks?.additionalFields?.fields + .where((e) => + e.key == + AdditionalFieldsType.deliveryStrategy + .toValue()) + .firstOrNull + ?.value == + DeliverStrategyType.indirect.toValue()) + ? ' -- ' + : tasks?.clientAuditDetails?.createdTime.toDateTime + .getFormattedDate() ?? + ' -- ', + cellKey: 'completedOn', + ), + ]); + }, + ).toList(), ), const SizedBox( height: 16, diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index 154e4a03e..a34bfac74 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -375,10 +375,11 @@ class IndividualDetailsPageState extends LocalizedState { ), isRequired: true, child: DigitDropdown( - selectedOption: DropdownItem( + selectedOption: (form.control(_idTypeKey).value!=null)? + DropdownItem( name: localizations.translate(form.control(_idTypeKey).value), code: form.control(_idTypeKey).value - ), + ):const DropdownItem(name: '', code: ''), items: RegistrationDeliverySingleton() .idTypeOptions! .map( diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 95488a9b0..4c4bbde51 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -5,34 +5,34 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a + sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 url: "https://pub.dev" source: hosted - version: "61.0.0" + version: "64.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 + sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" url: "https://pub.dev" source: hosted - version: "5.13.0" + version: "6.2.0" analyzer_plugin: dependency: transitive description: name: analyzer_plugin - sha256: c1d5f167683de03d5ab6c3b53fc9aeefc5d59476e7810ba7bbddff50c6f4392d + sha256: "9661b30b13a685efaee9f02e5d01ed9f2b423bd889d28a304d02d704aee69161" url: "https://pub.dev" source: hosted - version: "0.11.2" + version: "0.11.3" ansicolor: dependency: transitive description: name: ansicolor - sha256: "8bf17a8ff6ea17499e40a2d2542c2f481cd7615760c6d34065cb22bfd22e6880" + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.0.3" archive: dependency: transitive description: @@ -361,22 +361,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_code_metrics: - dependency: "direct dev" - description: - name: dart_code_metrics - sha256: "3dede3f7abc077a4181ec7445448a289a9ce08e2981e6a4d49a3fb5099d47e1f" - url: "https://pub.dev" - source: hosted - version: "5.7.6" - dart_code_metrics_presets: - dependency: transitive - description: - name: dart_code_metrics_presets - sha256: b71eadf02a3787ebd5c887623f83f6fdc204d45c75a081bd636c4104b3fd8b73 - url: "https://pub.dev" - source: hosted - version: "1.8.0" dart_mappable: dependency: "direct main" description: @@ -390,7 +374,7 @@ packages: description: path: "packages/dart_mappable_builder" ref: master - resolved-ref: "9b887d24c05459c027a92391869d4c10b440e00f" + resolved-ref: e3d8ac43f70568b4a17c200cae5cde285050ef23 url: "https://github.com/egovernments/health-campaign-field-worker-app/" source: git version: "4.2.0" @@ -398,10 +382,10 @@ packages: dependency: transitive description: name: dart_style - sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55" + sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.3.6" db_viewer: dependency: transitive description: @@ -419,13 +403,13 @@ packages: source: hosted version: "0.4.1" digit_components: - dependency: "direct main" + dependency: transitive description: name: digit_components - sha256: "9cca4d9a546037080afe02b6ade82fdf01574e11f5656ad12120fd6966578616" + sha256: dcdab9542149022cb66241c3c379ca96916f8b6116e585f4799748d859a2ca49 url: "https://pub.dev" source: hosted - version: "1.0.1+1" + version: "1.0.2" digit_data_model: dependency: "direct main" description: @@ -450,14 +434,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" + digit_ui_components: + dependency: "direct main" + description: + name: digit_ui_components + sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae + url: "https://pub.dev" + source: hosted + version: "0.0.1+7" dio: dependency: transitive description: name: dio - sha256: e17f6b3097b8c51b72c74c9f071a605c47bcc8893839bd66732457a5ebe73714 + sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" url: "https://pub.dev" source: hosted - version: "5.5.0+1" + version: "5.7.0" dio_web_adapter: dependency: transitive description: @@ -466,6 +458,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" drift: dependency: "direct main" description: @@ -518,10 +518,50 @@ packages: dependency: transitive description: name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "7.0.0" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 + url: "https://pub.dev" + source: hosted + version: "8.0.0+1" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + url: "https://pub.dev" + source: hosted + version: "0.9.2+1" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 + url: "https://pub.dev" + source: hosted + version: "0.9.4" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" fixnum: dependency: transitive description: @@ -543,6 +583,30 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.6" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: b4e2df75364bab2f4c3ca32b87193267d786b6e158c3f345c3a1daeb911d82b9 + url: "https://pub.dev" + source: hosted + version: "2.0.6" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" flutter_focus_watcher: dependency: transitive description: @@ -607,6 +671,11 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.2" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -623,14 +692,22 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" flutter_svg: dependency: "direct main" description: name: flutter_svg - sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c + sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" url: "https://pub.dev" source: hosted - version: "2.0.9" + version: "2.0.10+1" flutter_test: dependency: "direct dev" description: flutter @@ -689,6 +766,54 @@ packages: url: "https://pub.dev" source: hosted version: "3.2.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + url: "https://pub.dev" + source: hosted + version: "4.3.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: bc2aca02423ad429cb0556121f56e60360a2b7d694c8570301d06ea0c00732fd + url: "https://pub.dev" + source: hosted + version: "2.3.7" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -701,10 +826,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: "6b6f10f0ce3c42f6552d1c70d2c28d764cf22bb487f50f66cca31dcd5194f4d6" + sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" url: "https://pub.dev" source: hosted - version: "4.0.4" + version: "4.0.5" google_mlkit_barcode_scanning: dependency: transitive description: @@ -733,10 +858,10 @@ packages: dependency: "direct main" description: name: gs1_barcode_parser - sha256: fbbabda525e35dc1e998f22584178174a39cfc86ea691e3ac8dfb29e767cf7c1 + sha256: ff171bc40038de3f7178fbc32eaf9eebc3d35a3c4c00bb0281fe4a976d853a42 url: "https://pub.dev" source: hosted - version: "1.0.6" + version: "1.1.0" horizontal_data_table: dependency: transitive description: @@ -757,10 +882,10 @@ packages: dependency: transitive description: name: http - sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba url: "https://pub.dev" source: hosted - version: "0.13.6" + version: "1.2.0" http_multi_server: dependency: transitive description: @@ -777,6 +902,70 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" + url: "https://pub.dev" + source: hosted + version: "1.0.8" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" + url: "https://pub.dev" + source: hosted + version: "0.8.9+6" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 + url: "https://pub.dev" + source: hosted + version: "0.8.9+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b + url: "https://pub.dev" + source: hosted + version: "2.9.3" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" intl: dependency: "direct main" description: @@ -909,10 +1098,10 @@ packages: dependency: transitive description: name: mime - sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.6" mocktail: dependency: "direct dev" description: @@ -977,6 +1166,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_parsing: dependency: transitive description: @@ -989,10 +1186,10 @@ packages: dependency: "direct main" description: name: path_provider - sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" path_provider_android: dependency: transitive description: @@ -1081,14 +1278,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.1" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" provider: dependency: transitive description: @@ -1105,14 +1294,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - pub_updater: - dependency: transitive - description: - name: pub_updater - sha256: "05ae70703e06f7fdeb05f7f02dd680b8aad810e87c756a618f33e1794635115c" - url: "https://pub.dev" - source: hosted - version: "0.3.0" pubspec_parse: dependency: transitive description: @@ -1358,6 +1539,86 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + url_launcher: + dependency: transitive + description: + name: url_launcher + sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" + url: "https://pub.dev" + source: hosted + version: "6.3.0" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "17cd5e205ea615e2c6ea7a77323a11712dffa0720a8a90540db57a01347f9ad9" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" + url: "https://pub.dev" + source: hosted + version: "6.2.4" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 + url: "https://pub.dev" + source: hosted + version: "3.1.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + url: "https://pub.dev" + source: hosted + version: "2.2.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" + url: "https://pub.dev" + source: hosted + version: "3.1.2" uuid: dependency: "direct main" description: @@ -1370,26 +1631,26 @@ packages: dependency: transitive description: name: vector_graphics - sha256: "4ac59808bbfca6da38c99f415ff2d3a5d7ca0a6b4809c71d9cf30fba5daf9752" + sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: f3247e7ab0ec77dc759263e68394990edc608fb2b480b80db8aa86ed09279e33 + sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "18489bdd8850de3dd7ca8a34e0c446f719ec63e2bab2e7a8cc66a9028dd76c5a" + sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_math: dependency: transitive description: @@ -1398,6 +1659,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" vm_service: dependency: transitive description: diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index b88722f63..3fdf1370a 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.1+1 + digit_ui_components: ^0.0.1+7 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 @@ -45,7 +45,7 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^3.0.1 - dart_code_metrics: ^5.7.6 +# dart_code_metrics: ^5.7.6 ToDo: needs to be replaced freezed: ^2.1.0+1 json_serializable: ^6.4.0 drift_dev: ^2.14.1 From 837d359f3954bf67bf1542ec8f7ccbcaeeea51cb Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Mon, 23 Sep 2024 10:58:40 +0530 Subject: [PATCH 119/241] Using digit_ui library from the published page --- .../pubspec.lock | 2344 ----------------- .../pubspec.yaml | 2 +- packages/closed_household/pubspec.yaml | 2 +- 3 files changed, 2 insertions(+), 2346 deletions(-) delete mode 100644 apps/health_campaign_field_worker_app/pubspec.lock diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock deleted file mode 100644 index 135941228..000000000 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ /dev/null @@ -1,2344 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a - url: "https://pub.dev" - source: hosted - version: "61.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "4eec93681221723a686ad580c2e7d960e1017cf1a4e0a263c2573c2c6b0bf5cd" - url: "https://pub.dev" - source: hosted - version: "1.3.25" - analyzer: - dependency: transitive - description: - name: analyzer - sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 - url: "https://pub.dev" - source: hosted - version: "5.13.0" - analyzer_plugin: - dependency: transitive - description: - name: analyzer_plugin - sha256: c1d5f167683de03d5ab6c3b53fc9aeefc5d59476e7810ba7bbddff50c6f4392d - url: "https://pub.dev" - source: hosted - version: "0.11.2" - ansicolor: - dependency: transitive - description: - name: ansicolor - sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" - url: "https://pub.dev" - source: hosted - version: "2.0.3" - archive: - dependency: transitive - description: - name: archive - sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d - url: "https://pub.dev" - source: hosted - version: "3.6.1" - args: - dependency: transitive - description: - name: args - sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" - url: "https://pub.dev" - source: hosted - version: "2.5.0" - async: - dependency: transitive - description: - name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" - url: "https://pub.dev" - source: hosted - version: "2.11.0" - attendance_management: - dependency: "direct main" - description: - path: "../../packages/attendance_management" - relative: true - source: path - version: "1.0.2+1" - audioplayers: - dependency: "direct main" - description: - name: audioplayers - sha256: c05c6147124cd63e725e861335a8b4d57300b80e6e92cea7c145c739223bbaef - url: "https://pub.dev" - source: hosted - version: "5.2.1" - audioplayers_android: - dependency: transitive - description: - name: audioplayers_android - sha256: b00e1a0e11365d88576320ec2d8c192bc21f1afb6c0e5995d1c57ae63156acb5 - url: "https://pub.dev" - source: hosted - version: "4.0.3" - audioplayers_darwin: - dependency: transitive - description: - name: audioplayers_darwin - sha256: "3034e99a6df8d101da0f5082dcca0a2a99db62ab1d4ddb3277bed3f6f81afe08" - url: "https://pub.dev" - source: hosted - version: "5.0.2" - audioplayers_linux: - dependency: transitive - description: - name: audioplayers_linux - sha256: "60787e73fefc4d2e0b9c02c69885402177e818e4e27ef087074cf27c02246c9e" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - audioplayers_platform_interface: - dependency: transitive - description: - name: audioplayers_platform_interface - sha256: "365c547f1bb9e77d94dd1687903a668d8f7ac3409e48e6e6a3668a1ac2982adb" - url: "https://pub.dev" - source: hosted - version: "6.1.0" - audioplayers_web: - dependency: transitive - description: - name: audioplayers_web - sha256: "22cd0173e54d92bd9b2c80b1204eb1eb159ece87475ab58c9788a70ec43c2a62" - url: "https://pub.dev" - source: hosted - version: "4.1.0" - audioplayers_windows: - dependency: transitive - description: - name: audioplayers_windows - sha256: "9536812c9103563644ada2ef45ae523806b0745f7a78e89d1b5fb1951de90e1a" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - auto_route: - dependency: "direct main" - description: - name: auto_route - sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 - url: "https://pub.dev" - source: hosted - version: "7.9.2" - auto_route_generator: - dependency: "direct dev" - description: - name: auto_route_generator - sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" - url: "https://pub.dev" - source: hosted - version: "7.3.2" - battery_plus: - dependency: "direct main" - description: - name: battery_plus - sha256: ba605aeafd6609cb5f8020c609a51941803a5fb2b6a7576f7c7eeeb52d29e750 - url: "https://pub.dev" - source: hosted - version: "5.0.3" - battery_plus_platform_interface: - dependency: transitive - description: - name: battery_plus_platform_interface - sha256: e8342c0f32de4b1dfd0223114b6785e48e579bfc398da9471c9179b907fa4910 - url: "https://pub.dev" - source: hosted - version: "2.0.1" - bloc: - dependency: transitive - description: - name: bloc - sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e" - url: "https://pub.dev" - source: hosted - version: "8.1.4" - bloc_concurrency: - dependency: "direct main" - description: - name: bloc_concurrency - sha256: "456b7a3616a7c1ceb975c14441b3f198bf57d81cb95b7c6de5cb0c60201afcd8" - url: "https://pub.dev" - source: hosted - version: "0.2.5" - bloc_test: - dependency: "direct dev" - description: - name: bloc_test - sha256: "165a6ec950d9252ebe36dc5335f2e6eb13055f33d56db0eeb7642768849b43d2" - url: "https://pub.dev" - source: hosted - version: "9.1.7" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - build: - dependency: transitive - description: - name: build - sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" - url: "https://pub.dev" - source: hosted - version: "2.4.1" - build_config: - dependency: transitive - description: - name: build_config - sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 - url: "https://pub.dev" - source: hosted - version: "1.1.1" - build_daemon: - dependency: transitive - description: - name: build_daemon - sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" - url: "https://pub.dev" - source: hosted - version: "4.0.1" - build_resolvers: - dependency: transitive - description: - name: build_resolvers - sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" - url: "https://pub.dev" - source: hosted - version: "2.4.2" - build_runner: - dependency: "direct dev" - description: - name: build_runner - sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" - url: "https://pub.dev" - source: hosted - version: "2.4.9" - build_runner_core: - dependency: transitive - description: - name: build_runner_core - sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" - url: "https://pub.dev" - source: hosted - version: "7.3.0" - built_collection: - dependency: transitive - description: - name: built_collection - sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" - url: "https://pub.dev" - source: hosted - version: "5.1.1" - built_value: - dependency: transitive - description: - name: built_value - sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb - url: "https://pub.dev" - source: hosted - version: "8.9.2" - camera: - dependency: "direct main" - description: - name: camera - sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" - url: "https://pub.dev" - source: hosted - version: "0.10.5+9" - camera_android: - dependency: transitive - description: - name: camera_android - sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 - url: "https://pub.dev" - source: hosted - version: "0.10.9+2" - camera_avfoundation: - dependency: transitive - description: - name: camera_avfoundation - sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" - url: "https://pub.dev" - source: hosted - version: "0.9.13+10" - camera_platform_interface: - dependency: transitive - description: - name: camera_platform_interface - sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 - url: "https://pub.dev" - source: hosted - version: "2.8.0" - camera_web: - dependency: transitive - description: - name: camera_web - sha256: b9235ec0a2ce949daec546f1f3d86f05c3921ed31c7d9ab6b7c03214d152fc2d - url: "https://pub.dev" - source: hosted - version: "0.3.4" - characters: - dependency: transitive - description: - name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - charcode: - dependency: transitive - description: - name: charcode - sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 - url: "https://pub.dev" - source: hosted - version: "1.3.1" - checked_yaml: - dependency: transitive - description: - name: checked_yaml - sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff - url: "https://pub.dev" - source: hosted - version: "2.0.3" - cli_util: - dependency: transitive - description: - name: cli_util - sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 - url: "https://pub.dev" - source: hosted - version: "0.4.1" - clock: - dependency: transitive - description: - name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.dev" - source: hosted - version: "1.1.1" - closed_household: - dependency: "direct main" - description: - path: "../../packages/closed_household" - relative: true - source: path - version: "1.0.1+1" - code_builder: - dependency: transitive - description: - name: code_builder - sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 - url: "https://pub.dev" - source: hosted - version: "4.10.0" - collection: - dependency: "direct main" - description: - name: collection - sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a - url: "https://pub.dev" - source: hosted - version: "1.18.0" - connectivity_plus: - dependency: "direct main" - description: - name: connectivity_plus - sha256: "224a77051d52a11fbad53dd57827594d3bd24f945af28bd70bab376d68d437f0" - url: "https://pub.dev" - source: hosted - version: "5.0.2" - connectivity_plus_platform_interface: - dependency: transitive - description: - name: connectivity_plus_platform_interface - sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a - url: "https://pub.dev" - source: hosted - version: "1.2.4" - convert: - dependency: transitive - description: - name: convert - sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" - url: "https://pub.dev" - source: hosted - version: "3.1.1" - coverage: - dependency: transitive - description: - name: coverage - sha256: "595a29b55ce82d53398e1bcc2cba525d7bd7c59faeb2d2540e9d42c390cfeeeb" - url: "https://pub.dev" - source: hosted - version: "1.6.4" - cross_file: - dependency: transitive - description: - name: cross_file - sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e - url: "https://pub.dev" - source: hosted - version: "0.3.3+8" - crypto: - dependency: transitive - description: - name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab - url: "https://pub.dev" - source: hosted - version: "3.0.3" - csslib: - dependency: transitive - description: - name: csslib - sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - cupertino_icons: - dependency: "direct main" - description: - name: cupertino_icons - sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 - url: "https://pub.dev" - source: hosted - version: "1.0.8" - dart_mappable: - dependency: "direct main" - description: - name: dart_mappable - sha256: "47269caf2060533c29b823ff7fa9706502355ffcb61e7f2a374e3a0fb2f2c3f0" - url: "https://pub.dev" - source: hosted - version: "4.2.2" - dart_mappable_builder: - dependency: "direct dev" - description: - path: "../../packages/dart_mappable_builder" - relative: true - source: path - version: "4.2.0" - dart_style: - dependency: transitive - description: - name: dart_style - sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - dartx: - dependency: transitive - description: - name: dartx - sha256: "8b25435617027257d43e6508b5fe061012880ddfdaa75a71d607c3de2a13d244" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - db_viewer: - dependency: transitive - description: - name: db_viewer - sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - dbus: - dependency: transitive - description: - name: dbus - sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac" - url: "https://pub.dev" - source: hosted - version: "0.7.10" - device_info_plus: - dependency: "direct main" - description: - name: device_info_plus - sha256: "77f757b789ff68e4eaf9c56d1752309bd9f7ad557cb105b938a7f8eb89e59110" - url: "https://pub.dev" - source: hosted - version: "9.1.2" - device_info_plus_platform_interface: - dependency: transitive - description: - name: device_info_plus_platform_interface - sha256: "282d3cf731045a2feb66abfe61bbc40870ae50a3ed10a4d3d217556c35c8c2ba" - url: "https://pub.dev" - source: hosted - version: "7.0.1" - diff_match_patch: - dependency: transitive - description: - name: diff_match_patch - sha256: "2efc9e6e8f449d0abe15be240e2c2a3bcd977c8d126cfd70598aee60af35c0a4" - url: "https://pub.dev" - source: hosted - version: "0.4.1" - digit_components: - dependency: "direct main" - description: - path: "../../packages/digit_components" - relative: true - source: path - version: "1.0.1+1" - digit_data_model: - dependency: "direct main" - description: - path: "../../packages/digit_data_model" - relative: true - source: path - version: "1.0.3+1" - digit_dss: - dependency: "direct main" - description: - path: "../../packages/digit_dss" - relative: true - source: path - version: "1.0.1" - digit_firebase_services: - dependency: "direct main" - description: - path: "packages/digit_firebase_services" - ref: checklist-tanishi - resolved-ref: a4fd63e10e76cec82675332689e344e309246e65 - url: "https://github.com/egovernments/health-campaign-field-worker-app" - source: git - version: "0.0.1" - digit_scanner: - dependency: "direct main" - description: - path: "../../packages/digit_scanner" - relative: true - source: path - version: "1.0.3+1" - digit_showcase: - dependency: "direct main" - description: - name: digit_showcase - sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - digit_ui_components: - dependency: "direct main" - description: - path: "flutter/digit-ui-components/digit_components" - ref: enhancement-branch-flutter - resolved-ref: f2dc7a513fb8d58353dba027d017d054ffa41113 - url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" - source: git - version: "0.0.1+6" - dio: - dependency: "direct main" - description: - name: dio - sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" - url: "https://pub.dev" - source: hosted - version: "5.7.0" - dio_web_adapter: - dependency: transitive - description: - name: dio_web_adapter - sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - disable_battery_optimization: - dependency: "direct main" - description: - name: disable_battery_optimization - sha256: "6b2ba802f984af141faf1b6b5fb956d5ef01f9cd555597c35b9cc335a03185ba" - url: "https://pub.dev" - source: hosted - version: "1.1.1" - disk_space: - dependency: "direct main" - description: - name: disk_space - sha256: fb27eb2d09ac04784f45b95b1355538b2355c76a081eeaa8439d1a5cfa263888 - url: "https://pub.dev" - source: hosted - version: "0.2.1" - dotted_border: - dependency: transitive - description: - name: dotted_border - sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - drift: - dependency: "direct main" - description: - name: drift - sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 - url: "https://pub.dev" - source: hosted - version: "2.15.0" - drift_db_viewer: - dependency: "direct main" - description: - name: drift_db_viewer - sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - drift_dev: - dependency: "direct dev" - description: - name: drift_dev - sha256: c037d9431b6f8dc633652b1469e5f53aaec6e4eb405ed29dd232fa888ef10d88 - url: "https://pub.dev" - source: hosted - version: "2.15.0" - easy_stepper: - dependency: transitive - description: - name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" - url: "https://pub.dev" - source: hosted - version: "0.5.2+1" - equatable: - dependency: transitive - description: - name: equatable - sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2 - url: "https://pub.dev" - source: hosted - version: "2.0.5" - expandable: - dependency: "direct main" - description: - name: expandable - sha256: "9604d612d4d1146dafa96c6d8eec9c2ff0994658d6d09fed720ab788c7f5afc2" - url: "https://pub.dev" - source: hosted - version: "5.0.1" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - ffi: - dependency: transitive - description: - name: ffi - sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - file: - dependency: transitive - description: - name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" - url: "https://pub.dev" - source: hosted - version: "6.1.4" - file_picker: - dependency: transitive - description: - name: file_picker - sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 - url: "https://pub.dev" - source: hosted - version: "8.0.0+1" - file_selector_linux: - dependency: transitive - description: - name: file_selector_linux - sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" - url: "https://pub.dev" - source: hosted - version: "0.9.2+1" - file_selector_macos: - dependency: transitive - description: - name: file_selector_macos - sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 - url: "https://pub.dev" - source: hosted - version: "0.9.4" - file_selector_platform_interface: - dependency: transitive - description: - name: file_selector_platform_interface - sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b - url: "https://pub.dev" - source: hosted - version: "2.6.2" - file_selector_windows: - dependency: transitive - description: - name: file_selector_windows - sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" - url: "https://pub.dev" - source: hosted - version: "0.9.3+2" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "53316975310c8af75a96e365f9fccb67d1c544ef0acdbf0d88bbe30eedd1c4f9" - url: "https://pub.dev" - source: hosted - version: "2.27.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: e30da58198a6d4b49d5bce4e852f985c32cb10db329ebef9473db2b9f09ce810 - url: "https://pub.dev" - source: hosted - version: "5.3.0" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: c8e1d59385eee98de63c92f961d2a7062c5d9a65e7f45bdc7f1b0b205aab2492 - url: "https://pub.dev" - source: hosted - version: "2.11.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: c4f1b723d417bc9c4774810e774ff91df8fb0032d33fb2888b2c887e865581b8 - url: "https://pub.dev" - source: hosted - version: "3.4.18" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: c5a11fca3df76a98e3fa68fde8b10a08aacb9a7639f619fbfd4dad6c67a08643 - url: "https://pub.dev" - source: hosted - version: "3.6.25" - fixnum: - dependency: transitive - description: - name: fixnum - sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_background_service: - dependency: "direct main" - description: - name: flutter_background_service - sha256: d32f078ec57647c9cfd6e1a8da9297f7d8f021d4dcc204a35aaad2cdbfe255f0 - url: "https://pub.dev" - source: hosted - version: "5.0.10" - flutter_background_service_android: - dependency: transitive - description: - name: flutter_background_service_android - sha256: "39da42dddf877beeef82bc2583130d8bedb4d0765e99ca9e7b4a32e8c6abd239" - url: "https://pub.dev" - source: hosted - version: "6.2.7" - flutter_background_service_ios: - dependency: transitive - description: - name: flutter_background_service_ios - sha256: "6037ffd45c4d019dab0975c7feb1d31012dd697e25edc05505a4a9b0c7dc9fba" - url: "https://pub.dev" - source: hosted - version: "5.0.3" - flutter_background_service_platform_interface: - dependency: transitive - description: - name: flutter_background_service_platform_interface - sha256: ca74aa95789a8304f4d3f57f07ba404faa86bed6e415f83e8edea6ad8b904a41 - url: "https://pub.dev" - source: hosted - version: "5.1.2" - flutter_bloc: - dependency: "direct main" - description: - name: flutter_bloc - sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a - url: "https://pub.dev" - source: hosted - version: "8.1.6" - flutter_dotenv: - dependency: "direct main" - description: - name: flutter_dotenv - sha256: "9357883bdd153ab78cbf9ffa07656e336b8bbb2b5a3ca596b0b27e119f7c7d77" - url: "https://pub.dev" - source: hosted - version: "5.1.0" - flutter_driver: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - flutter_dropzone: - dependency: transitive - description: - name: flutter_dropzone - sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 - url: "https://pub.dev" - source: hosted - version: "3.0.7" - flutter_dropzone_platform_interface: - dependency: transitive - description: - name: flutter_dropzone_platform_interface - sha256: b4e2df75364bab2f4c3ca32b87193267d786b6e158c3f345c3a1daeb911d82b9 - url: "https://pub.dev" - source: hosted - version: "2.0.6" - flutter_dropzone_web: - dependency: transitive - description: - name: flutter_dropzone_web - sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 - url: "https://pub.dev" - source: hosted - version: "3.0.13" - flutter_focus_watcher: - dependency: transitive - description: - name: flutter_focus_watcher - sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility: - dependency: "direct main" - description: - name: flutter_keyboard_visibility - sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" - url: "https://pub.dev" - source: hosted - version: "5.4.1" - flutter_keyboard_visibility_linux: - dependency: transitive - description: - name: flutter_keyboard_visibility_linux - sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_macos: - dependency: transitive - description: - name: flutter_keyboard_visibility_macos - sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_platform_interface: - dependency: transitive - description: - name: flutter_keyboard_visibility_platform_interface - sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_web: - dependency: transitive - description: - name: flutter_keyboard_visibility_web - sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_windows: - dependency: transitive - description: - name: flutter_keyboard_visibility_windows - sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_launcher_icons: - dependency: "direct dev" - description: - name: flutter_launcher_icons - sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea" - url: "https://pub.dev" - source: hosted - version: "0.13.1" - flutter_lints: - dependency: "direct dev" - description: - name: flutter_lints - sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - flutter_local_notifications: - dependency: "direct main" - description: - name: flutter_local_notifications - sha256: "55b9b229307a10974b26296ff29f2e132256ba4bd74266939118eaefa941cb00" - url: "https://pub.dev" - source: hosted - version: "16.3.3" - flutter_local_notifications_linux: - dependency: transitive - description: - name: flutter_local_notifications_linux - sha256: c49bd06165cad9beeb79090b18cd1eb0296f4bf4b23b84426e37dd7c027fc3af - url: "https://pub.dev" - source: hosted - version: "4.0.1" - flutter_local_notifications_platform_interface: - dependency: transitive - description: - name: flutter_local_notifications_platform_interface - sha256: "85f8d07fe708c1bdcf45037f2c0109753b26ae077e9d9e899d55971711a4ea66" - url: "https://pub.dev" - source: hosted - version: "7.2.0" - flutter_localizations: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_plugin_android_lifecycle: - dependency: transitive - description: - name: flutter_plugin_android_lifecycle - sha256: "8cf40eebf5dec866a6d1956ad7b4f7016e6c0cc69847ab946833b7d43743809f" - url: "https://pub.dev" - source: hosted - version: "2.0.19" - flutter_portal: - dependency: "direct main" - description: - name: flutter_portal - sha256: "4601b3dc24f385b3761721bd852a3f6c09cddd4e943dd184ed58ee1f43006257" - url: "https://pub.dev" - source: hosted - version: "1.1.4" - flutter_secure_storage: - dependency: "direct main" - description: - name: flutter_secure_storage - sha256: "165164745e6afb5c0e3e3fcc72a012fb9e58496fb26ffb92cf22e16a821e85d0" - url: "https://pub.dev" - source: hosted - version: "9.2.2" - flutter_secure_storage_linux: - dependency: transitive - description: - name: flutter_secure_storage_linux - sha256: "4d91bfc23047422cbcd73ac684bc169859ee766482517c22172c86596bf1464b" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - flutter_secure_storage_macos: - dependency: transitive - description: - name: flutter_secure_storage_macos - sha256: "1693ab11121a5f925bbea0be725abfcfbbcf36c1e29e571f84a0c0f436147a81" - url: "https://pub.dev" - source: hosted - version: "3.1.2" - flutter_secure_storage_platform_interface: - dependency: transitive - description: - name: flutter_secure_storage_platform_interface - sha256: cf91ad32ce5adef6fba4d736a542baca9daf3beac4db2d04be350b87f69ac4a8 - url: "https://pub.dev" - source: hosted - version: "1.1.2" - flutter_secure_storage_web: - dependency: transitive - description: - name: flutter_secure_storage_web - sha256: f4ebff989b4f07b2656fb16b47852c0aab9fed9b4ec1c70103368337bc1886a9 - url: "https://pub.dev" - source: hosted - version: "1.2.1" - flutter_secure_storage_windows: - dependency: transitive - description: - name: flutter_secure_storage_windows - sha256: b20b07cb5ed4ed74fc567b78a72936203f587eba460af1df11281c9326cd3709 - url: "https://pub.dev" - source: hosted - version: "3.1.2" - flutter_spinkit: - dependency: transitive - description: - name: flutter_spinkit - sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 - url: "https://pub.dev" - source: hosted - version: "5.2.1" - flutter_styled_toast: - dependency: transitive - description: - name: flutter_styled_toast - sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 - url: "https://pub.dev" - source: hosted - version: "2.2.1" - flutter_svg: - dependency: "direct main" - description: - name: flutter_svg - sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" - url: "https://pub.dev" - source: hosted - version: "2.0.10+1" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" - flutter_web_plugins: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - fluttertoast: - dependency: "direct main" - description: - name: fluttertoast - sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" - url: "https://pub.dev" - source: hosted - version: "8.2.5" - formula_parser: - dependency: transitive - description: - name: formula_parser - sha256: af9e9ae2961ec1dab54c5de97d9a6bef0593ddb998720e3785bd91ef05353359 - url: "https://pub.dev" - source: hosted - version: "2.0.1" - freezed: - dependency: "direct dev" - description: - name: freezed - sha256: a434911f643466d78462625df76fd9eb13e57348ff43fe1f77bbe909522c67a1 - url: "https://pub.dev" - source: hosted - version: "2.5.2" - freezed_annotation: - dependency: "direct main" - description: - name: freezed_annotation - sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 - url: "https://pub.dev" - source: hosted - version: "2.4.4" - frontend_server_client: - dependency: transitive - description: - name: frontend_server_client - sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" - url: "https://pub.dev" - source: hosted - version: "3.2.0" - fuchsia_remote_debug_protocol: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - geolocator: - dependency: transitive - description: - name: geolocator - sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 - url: "https://pub.dev" - source: hosted - version: "10.1.1" - geolocator_android: - dependency: transitive - description: - name: geolocator_android - sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" - url: "https://pub.dev" - source: hosted - version: "4.3.1" - geolocator_apple: - dependency: transitive - description: - name: geolocator_apple - sha256: bc2aca02423ad429cb0556121f56e60360a2b7d694c8570301d06ea0c00732fd - url: "https://pub.dev" - source: hosted - version: "2.3.7" - geolocator_platform_interface: - dependency: transitive - description: - name: geolocator_platform_interface - sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" - url: "https://pub.dev" - source: hosted - version: "4.2.4" - geolocator_web: - dependency: transitive - description: - name: geolocator_web - sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" - url: "https://pub.dev" - source: hosted - version: "2.2.1" - geolocator_windows: - dependency: transitive - description: - name: geolocator_windows - sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" - url: "https://pub.dev" - source: hosted - version: "0.2.3" - glob: - dependency: transitive - description: - name: glob - sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - google_fonts: - dependency: transitive - description: - name: google_fonts - sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" - url: "https://pub.dev" - source: hosted - version: "4.0.5" - google_mlkit_barcode_scanning: - dependency: "direct main" - description: - name: google_mlkit_barcode_scanning - sha256: "965183a8cd5cef8477ceea5dbdf29c34a739cf0cfbf1bdad54cd3f9f1807afe5" - url: "https://pub.dev" - source: hosted - version: "0.10.0" - google_mlkit_commons: - dependency: transitive - description: - name: google_mlkit_commons - sha256: "046586b381cdd139f7f6a05ad6998f7e339d061bd70158249907358394b5f496" - url: "https://pub.dev" - source: hosted - version: "0.6.1" - graphs: - dependency: transitive - description: - name: graphs - sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 - url: "https://pub.dev" - source: hosted - version: "2.3.1" - group_radio_button: - dependency: "direct main" - description: - name: group_radio_button - sha256: "204de8d16b224be7fc72dade0c3afd410ff5a34417d89f74f0fd8be7a8c2b4d6" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - gs1_barcode_parser: - dependency: "direct main" - description: - name: gs1_barcode_parser - sha256: ff171bc40038de3f7178fbc32eaf9eebc3d35a3c4c00bb0281fe4a976d853a42 - url: "https://pub.dev" - source: hosted - version: "1.1.0" - horizontal_data_table: - dependency: transitive - description: - name: horizontal_data_table - sha256: c8ab5256bbced698a729f3e0ff2cb0e8e97416cdbb082860370eaf883badf722 - url: "https://pub.dev" - source: hosted - version: "4.3.1" - hrk_batteries: - dependency: transitive - description: - name: hrk_batteries - sha256: "35bc2be10bb64284b04d3cd944c24eecf304747fc64b34e2d27ef1a3ac75ab49" - url: "https://pub.dev" - source: hosted - version: "2.2.0" - hrk_flutter_test_batteries: - dependency: "direct dev" - description: - name: hrk_flutter_test_batteries - sha256: bfdaac0fc6aa1cd2aeffa7db9fc241d615ffdb1d667dd1be8b9a7ff5bc54d364 - url: "https://pub.dev" - source: hosted - version: "0.8.0" - hrk_logging: - dependency: transitive - description: - name: hrk_logging - sha256: "2e6501f4b78439bec4c367a94b14f792fd17fe1c94f18d903086c7b8a48402f5" - url: "https://pub.dev" - source: hosted - version: "0.3.1" - html: - dependency: transitive - description: - name: html - sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" - url: "https://pub.dev" - source: hosted - version: "0.15.4" - http: - dependency: transitive - description: - name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba - url: "https://pub.dev" - source: hosted - version: "1.2.0" - http_multi_server: - dependency: transitive - description: - name: http_multi_server - sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" - url: "https://pub.dev" - source: hosted - version: "3.2.1" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - image: - dependency: transitive - description: - name: image - sha256: "2237616a36c0d69aef7549ab439b833fb7f9fb9fc861af2cc9ac3eedddd69ca8" - url: "https://pub.dev" - source: hosted - version: "4.2.0" - image_picker: - dependency: transitive - description: - name: image_picker - sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" - url: "https://pub.dev" - source: hosted - version: "1.0.8" - image_picker_android: - dependency: transitive - description: - name: image_picker_android - sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" - url: "https://pub.dev" - source: hosted - version: "0.8.9+6" - image_picker_for_web: - dependency: transitive - description: - name: image_picker_for_web - sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 - url: "https://pub.dev" - source: hosted - version: "3.0.2" - image_picker_ios: - dependency: transitive - description: - name: image_picker_ios - sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 - url: "https://pub.dev" - source: hosted - version: "0.8.9+1" - image_picker_linux: - dependency: transitive - description: - name: image_picker_linux - sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" - url: "https://pub.dev" - source: hosted - version: "0.2.1+1" - image_picker_macos: - dependency: transitive - description: - name: image_picker_macos - sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" - url: "https://pub.dev" - source: hosted - version: "0.2.1+1" - image_picker_platform_interface: - dependency: transitive - description: - name: image_picker_platform_interface - sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b - url: "https://pub.dev" - source: hosted - version: "2.9.3" - image_picker_windows: - dependency: transitive - description: - name: image_picker_windows - sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" - url: "https://pub.dev" - source: hosted - version: "0.2.1+1" - integration_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - intl: - dependency: "direct main" - description: - name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" - url: "https://pub.dev" - source: hosted - version: "0.18.1" - inventory_management: - dependency: "direct main" - description: - name: inventory_management - sha256: "1d0dd4f7811941092653426a86548a31d475237d318eee71505b21a57ebc310b" - url: "https://pub.dev" - source: hosted - version: "1.0.3+4" - io: - dependency: transitive - description: - name: io - sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" - url: "https://pub.dev" - source: hosted - version: "1.0.4" - isar: - dependency: "direct main" - description: - name: isar - sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - isar_flutter_libs: - dependency: "direct main" - description: - name: isar_flutter_libs - sha256: bc6768cc4b9c61aabff77152e7f33b4b17d2fc93134f7af1c3dd51500fe8d5e8 - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - isar_generator: - dependency: "direct dev" - description: - name: isar_generator - sha256: "76c121e1295a30423604f2f819bc255bc79f852f3bc8743a24017df6068ad133" - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - js: - dependency: transitive - description: - name: js - sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 - url: "https://pub.dev" - source: hosted - version: "0.6.7" - json_annotation: - dependency: "direct main" - description: - name: json_annotation - sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" - url: "https://pub.dev" - source: hosted - version: "4.9.0" - json_serializable: - dependency: "direct dev" - description: - name: json_serializable - sha256: ea1432d167339ea9b5bb153f0571d0039607a873d6e04e0117af043f14a1fd4b - url: "https://pub.dev" - source: hosted - version: "6.8.0" - lints: - dependency: transitive - description: - name: lints - sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 - url: "https://pub.dev" - source: hosted - version: "3.0.0" - location: - dependency: "direct main" - description: - name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" - url: "https://pub.dev" - source: hosted - version: "5.0.3" - location_platform_interface: - dependency: transitive - description: - name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" - url: "https://pub.dev" - source: hosted - version: "3.1.2" - location_web: - dependency: transitive - description: - name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b - url: "https://pub.dev" - source: hosted - version: "4.2.0" - logging: - dependency: transitive - description: - name: logging - sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - lottie: - dependency: transitive - description: - name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 - url: "https://pub.dev" - source: hosted - version: "2.7.0" - matcher: - dependency: transitive - description: - name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" - url: "https://pub.dev" - source: hosted - version: "0.12.16" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" - url: "https://pub.dev" - source: hosted - version: "0.5.0" - material_design_icons_flutter: - dependency: "direct main" - description: - name: material_design_icons_flutter - sha256: "6f986b7a51f3ad4c00e33c5c84e8de1bdd140489bbcdc8b66fc1283dad4dea5a" - url: "https://pub.dev" - source: hosted - version: "7.0.7296" - meta: - dependency: transitive - description: - name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e - url: "https://pub.dev" - source: hosted - version: "1.10.0" - mime: - dependency: transitive - description: - name: mime - sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" - url: "https://pub.dev" - source: hosted - version: "1.0.6" - mocktail: - dependency: "direct dev" - description: - name: mocktail - sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8" - url: "https://pub.dev" - source: hosted - version: "1.0.4" - nested: - dependency: "direct main" - description: - name: nested - sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - nm: - dependency: transitive - description: - name: nm - sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" - url: "https://pub.dev" - source: hosted - version: "0.5.0" - node_preamble: - dependency: transitive - description: - name: node_preamble - sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" - url: "https://pub.dev" - source: hosted - version: "2.0.2" - overlay_builder: - dependency: transitive - description: - name: overlay_builder - sha256: "58b97bc5f67a2e2bb7006dd88e697ac757dfffc9dbd1e7dfc1917fb510a4b5c8" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - package_config: - dependency: transitive - description: - name: package_config - sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - package_info_plus: - dependency: "direct main" - description: - name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" - url: "https://pub.dev" - source: hosted - version: "5.0.1" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" - url: "https://pub.dev" - source: hosted - version: "2.0.1" - path: - dependency: "direct main" - description: - name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" - url: "https://pub.dev" - source: hosted - version: "1.8.3" - path_drawing: - dependency: transitive - description: - name: path_drawing - sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 - url: "https://pub.dev" - source: hosted - version: "1.0.1" - path_parsing: - dependency: transitive - description: - name: path_parsing - sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf - url: "https://pub.dev" - source: hosted - version: "1.0.1" - path_provider: - dependency: "direct main" - description: - name: path_provider - sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 - url: "https://pub.dev" - source: hosted - version: "2.1.4" - path_provider_android: - dependency: transitive - description: - name: path_provider_android - sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d - url: "https://pub.dev" - source: hosted - version: "2.2.4" - path_provider_foundation: - dependency: transitive - description: - name: path_provider_foundation - sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - path_provider_linux: - dependency: transitive - description: - name: path_provider_linux - sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 - url: "https://pub.dev" - source: hosted - version: "2.2.1" - path_provider_platform_interface: - dependency: transitive - description: - name: path_provider_platform_interface - sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - path_provider_windows: - dependency: transitive - description: - name: path_provider_windows - sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 - url: "https://pub.dev" - source: hosted - version: "2.3.0" - pedantic: - dependency: transitive - description: - name: pedantic - sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" - url: "https://pub.dev" - source: hosted - version: "1.11.1" - petitparser: - dependency: transitive - description: - name: petitparser - sha256: cb3798bef7fc021ac45b308f4b51208a152792445cce0448c9a4ba5879dd8750 - url: "https://pub.dev" - source: hosted - version: "5.4.0" - platform: - dependency: transitive - description: - name: platform - sha256: ae68c7bfcd7383af3629daafb32fb4e8681c7154428da4febcff06200585f102 - url: "https://pub.dev" - source: hosted - version: "3.1.2" - plugin_platform_interface: - dependency: transitive - description: - name: plugin_platform_interface - sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" - url: "https://pub.dev" - source: hosted - version: "2.1.8" - pluto_grid: - dependency: "direct main" - description: - name: pluto_grid - sha256: e77c34a33dd9d74abbe20ba1df96474dded150dd042c7f7495be1bc2c26bd37f - url: "https://pub.dev" - source: hosted - version: "7.0.2" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" - pool: - dependency: transitive - description: - name: pool - sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" - url: "https://pub.dev" - source: hosted - version: "1.5.1" - pretty_dio_logger: - dependency: "direct main" - description: - name: pretty_dio_logger - sha256: "36f2101299786d567869493e2f5731de61ce130faa14679473b26905a92b6407" - url: "https://pub.dev" - source: hosted - version: "1.4.0" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" - provider: - dependency: "direct main" - description: - name: provider - sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c - url: "https://pub.dev" - source: hosted - version: "6.1.2" - pub_semver: - dependency: transitive - description: - name: pub_semver - sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - pubspec_parse: - dependency: transitive - description: - name: pubspec_parse - sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 - url: "https://pub.dev" - source: hosted - version: "1.3.0" - qr: - dependency: transitive - description: - name: qr - sha256: "64957a3930367bf97cc211a5af99551d630f2f4625e38af10edd6b19131b64b3" - url: "https://pub.dev" - source: hosted - version: "3.0.1" - qr_flutter: - dependency: "direct main" - description: - name: qr_flutter - sha256: "5095f0fc6e3f71d08adef8feccc8cea4f12eec18a2e31c2e8d82cb6019f4b097" - url: "https://pub.dev" - source: hosted - version: "4.1.0" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 - url: "https://pub.dev" - source: hosted - version: "0.8.1" - reactive_forms: - dependency: "direct main" - description: - name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" - url: "https://pub.dev" - source: hosted - version: "14.3.0" - recase: - dependency: "direct main" - description: - name: recase - sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 - url: "https://pub.dev" - source: hosted - version: "4.1.0" - referral_reconciliation: - dependency: "direct main" - description: - path: "../../packages/referral_reconciliation" - relative: true - source: path - version: "1.0.2+1" - registration_delivery: - dependency: "direct main" - description: - path: "../../packages/registration_delivery" - relative: true - source: path - version: "1.0.3+1" - remove_emoji_input_formatter: - dependency: transitive - description: - name: remove_emoji_input_formatter - sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" - url: "https://pub.dev" - source: hosted - version: "0.0.1+1" - rxdart: - dependency: transitive - description: - name: rxdart - sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" - url: "https://pub.dev" - source: hosted - version: "0.27.7" - shared_preferences: - dependency: "direct main" - description: - name: shared_preferences - sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180 - url: "https://pub.dev" - source: hosted - version: "2.2.3" - shared_preferences_android: - dependency: transitive - description: - name: shared_preferences_android - sha256: "1ee8bf911094a1b592de7ab29add6f826a7331fb854273d55918693d5364a1f2" - url: "https://pub.dev" - source: hosted - version: "2.2.2" - shared_preferences_foundation: - dependency: transitive - description: - name: shared_preferences_foundation - sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c" - url: "https://pub.dev" - source: hosted - version: "2.3.5" - shared_preferences_linux: - dependency: transitive - description: - name: shared_preferences_linux - sha256: "2ba0510d3017f91655b7543e9ee46d48619de2a2af38e5c790423f7007c7ccc1" - url: "https://pub.dev" - source: hosted - version: "2.4.0" - shared_preferences_platform_interface: - dependency: transitive - description: - name: shared_preferences_platform_interface - sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" - url: "https://pub.dev" - source: hosted - version: "2.4.1" - shared_preferences_web: - dependency: transitive - description: - name: shared_preferences_web - sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21" - url: "https://pub.dev" - source: hosted - version: "2.2.2" - shared_preferences_windows: - dependency: transitive - description: - name: shared_preferences_windows - sha256: "398084b47b7f92110683cac45c6dc4aae853db47e470e5ddcd52cab7f7196ab2" - url: "https://pub.dev" - source: hosted - version: "2.4.0" - shelf: - dependency: transitive - description: - name: shelf - sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 - url: "https://pub.dev" - source: hosted - version: "1.4.1" - shelf_packages_handler: - dependency: transitive - description: - name: shelf_packages_handler - sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - shelf_static: - dependency: transitive - description: - name: shelf_static - sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e - url: "https://pub.dev" - source: hosted - version: "1.1.2" - shelf_web_socket: - dependency: transitive - description: - name: shelf_web_socket - sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" - url: "https://pub.dev" - source: hosted - version: "1.0.4" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.99" - source_gen: - dependency: transitive - description: - name: source_gen - sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" - url: "https://pub.dev" - source: hosted - version: "1.5.0" - source_helper: - dependency: transitive - description: - name: source_helper - sha256: "6adebc0006c37dd63fe05bca0a929b99f06402fc95aa35bf36d67f5c06de01fd" - url: "https://pub.dev" - source: hosted - version: "1.3.4" - source_map_stack_trace: - dependency: transitive - description: - name: source_map_stack_trace - sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - source_maps: - dependency: transitive - description: - name: source_maps - sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" - url: "https://pub.dev" - source: hosted - version: "0.10.12" - source_span: - dependency: transitive - description: - name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" - url: "https://pub.dev" - source: hosted - version: "1.10.0" - speech_to_text: - dependency: "direct main" - description: - name: speech_to_text - sha256: "57fef1d41bdebe298e84842c89bb4ac91f31cdbec7830c8cb1fc6b91d03abd42" - url: "https://pub.dev" - source: hosted - version: "6.6.0" - speech_to_text_macos: - dependency: transitive - description: - name: speech_to_text_macos - sha256: e685750f7542fcaa087a5396ee471e727ec648bf681f4da83c84d086322173f6 - url: "https://pub.dev" - source: hosted - version: "1.1.0" - speech_to_text_platform_interface: - dependency: transitive - description: - name: speech_to_text_platform_interface - sha256: a0df1a907091ea09880077dc25aae02af9f79811264e6e97ddb08639b7f771c2 - url: "https://pub.dev" - source: hosted - version: "2.2.0" - sqlite3: - dependency: transitive - description: - name: sqlite3 - sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" - url: "https://pub.dev" - source: hosted - version: "2.4.0" - sqlite3_flutter_libs: - dependency: "direct main" - description: - name: sqlite3_flutter_libs - sha256: "62bbb4073edbcdf53f40c80775f33eea01d301b7b81417e5b3fb7395416258c1" - url: "https://pub.dev" - source: hosted - version: "0.5.24" - sqlparser: - dependency: transitive - description: - name: sqlparser - sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" - url: "https://pub.dev" - source: hosted - version: "0.34.1" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" - url: "https://pub.dev" - source: hosted - version: "1.11.1" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 - url: "https://pub.dev" - source: hosted - version: "2.1.2" - stream_transform: - dependency: "direct main" - description: - name: stream_transform - sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - survey_form: - dependency: "direct overridden" - description: - path: "packages/survey_form" - ref: checklist-package - resolved-ref: "990025a060809c5e07ee61df8d7042f29f786122" - url: "https://github.com/egovernments/health-campaign-field-worker-app" - source: git - version: "0.0.1-dev.1" - sync_http: - dependency: transitive - description: - name: sync_http - sha256: "7f0cd72eca000d2e026bcd6f990b81d0ca06022ef4e32fb257b30d3d1014a961" - url: "https://pub.dev" - source: hosted - version: "0.3.1" - synchronized: - dependency: transitive - description: - name: synchronized - sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.dev" - source: hosted - version: "1.2.1" - test: - dependency: transitive - description: - name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f - url: "https://pub.dev" - source: hosted - version: "1.24.9" - test_api: - dependency: transitive - description: - name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" - url: "https://pub.dev" - source: hosted - version: "0.6.1" - test_core: - dependency: transitive - description: - name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a - url: "https://pub.dev" - source: hosted - version: "0.5.9" - time: - dependency: transitive - description: - name: time - sha256: ad8e018a6c9db36cb917a031853a1aae49467a93e0d464683e029537d848c221 - url: "https://pub.dev" - source: hosted - version: "2.1.4" - timezone: - dependency: transitive - description: - name: timezone - sha256: "2236ec079a174ce07434e89fcd3fcda430025eb7692244139a9cf54fdcf1fc7d" - url: "https://pub.dev" - source: hosted - version: "0.9.4" - timing: - dependency: transitive - description: - name: timing - sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - type_plus: - dependency: transitive - description: - name: type_plus - sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 - url: "https://pub.dev" - source: hosted - version: "2.1.1" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c - url: "https://pub.dev" - source: hosted - version: "1.3.2" - universal_html: - dependency: transitive - description: - name: universal_html - sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" - url: "https://pub.dev" - source: hosted - version: "2.2.4" - universal_io: - dependency: transitive - description: - name: universal_io - sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" - url: "https://pub.dev" - source: hosted - version: "2.2.2" - upower: - dependency: transitive - description: - name: upower - sha256: cf042403154751180affa1d15614db7fa50234bc2373cd21c3db666c38543ebf - url: "https://pub.dev" - source: hosted - version: "0.7.0" - url_launcher: - dependency: "direct main" - description: - name: url_launcher - sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" - url: "https://pub.dev" - source: hosted - version: "6.3.0" - url_launcher_android: - dependency: transitive - description: - name: url_launcher_android - sha256: "17cd5e205ea615e2c6ea7a77323a11712dffa0720a8a90540db57a01347f9ad9" - url: "https://pub.dev" - source: hosted - version: "6.3.2" - url_launcher_ios: - dependency: transitive - description: - name: url_launcher_ios - sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" - url: "https://pub.dev" - source: hosted - version: "6.2.4" - url_launcher_linux: - dependency: transitive - description: - name: url_launcher_linux - sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 - url: "https://pub.dev" - source: hosted - version: "3.1.1" - url_launcher_macos: - dependency: transitive - description: - name: url_launcher_macos - sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" - url: "https://pub.dev" - source: hosted - version: "3.2.0" - url_launcher_platform_interface: - dependency: transitive - description: - name: url_launcher_platform_interface - sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - url_launcher_web: - dependency: transitive - description: - name: url_launcher_web - sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b - url: "https://pub.dev" - source: hosted - version: "2.2.3" - url_launcher_windows: - dependency: transitive - description: - name: url_launcher_windows - sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" - url: "https://pub.dev" - source: hosted - version: "3.1.2" - uuid: - dependency: "direct main" - description: - name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" - url: "https://pub.dev" - source: hosted - version: "3.0.7" - vector_graphics: - dependency: transitive - description: - name: vector_graphics - sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" - url: "https://pub.dev" - source: hosted - version: "1.1.11+1" - vector_graphics_codec: - dependency: transitive - description: - name: vector_graphics_codec - sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da - url: "https://pub.dev" - source: hosted - version: "1.1.11+1" - vector_graphics_compiler: - dependency: transitive - description: - name: vector_graphics_compiler - sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" - url: "https://pub.dev" - source: hosted - version: "1.1.11+1" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - visibility_detector: - dependency: transitive - description: - name: visibility_detector - sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 - url: "https://pub.dev" - source: hosted - version: "0.4.0+2" - vm_service: - dependency: transitive - description: - name: vm_service - sha256: c538be99af830f478718b51630ec1b6bee5e74e52c8a802d328d9e71d35d2583 - url: "https://pub.dev" - source: hosted - version: "11.10.0" - watcher: - dependency: transitive - description: - name: watcher - sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - web: - dependency: transitive - description: - name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 - url: "https://pub.dev" - source: hosted - version: "0.3.0" - web_socket_channel: - dependency: transitive - description: - name: web_socket_channel - sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b - url: "https://pub.dev" - source: hosted - version: "2.4.0" - webdriver: - dependency: transitive - description: - name: webdriver - sha256: "3c923e918918feeb90c4c9fdf1fe39220fa4c0e8e2c0fffaded174498ef86c49" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - webkit_inspection_protocol: - dependency: transitive - description: - name: webkit_inspection_protocol - sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - win32: - dependency: transitive - description: - name: win32 - sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" - url: "https://pub.dev" - source: hosted - version: "5.2.0" - win32_registry: - dependency: transitive - description: - name: win32_registry - sha256: "41fd8a189940d8696b1b810efb9abcf60827b6cbfab90b0c43e8439e3a39d85a" - url: "https://pub.dev" - source: hosted - version: "1.1.2" - workmanager: - dependency: "direct main" - description: - name: workmanager - sha256: ed13530cccd28c5c9959ad42d657cd0666274ca74c56dea0ca183ddd527d3a00 - url: "https://pub.dev" - source: hosted - version: "0.5.2" - xdg_directories: - dependency: transitive - description: - name: xdg_directories - sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d - url: "https://pub.dev" - source: hosted - version: "1.0.4" - xml: - dependency: transitive - description: - name: xml - sha256: "5bc72e1e45e941d825fd7468b9b4cc3b9327942649aeb6fc5cdbf135f0a86e84" - url: "https://pub.dev" - source: hosted - version: "6.3.0" - xxh3: - dependency: transitive - description: - name: xxh3 - sha256: a92b30944a9aeb4e3d4f3c3d4ddb3c7816ca73475cd603682c4f8149690f56d7 - url: "https://pub.dev" - source: hosted - version: "1.0.1" - yaml: - dependency: transitive - description: - name: yaml - sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" - url: "https://pub.dev" - source: hosted - version: "3.1.2" -sdks: - dart: ">=3.2.0 <4.0.0" - flutter: ">=3.16.0" diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 0e5a1ff51..23fab67ed 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -19,7 +19,7 @@ dependencies: path_provider: ^2.0.11 path: ^1.8.2 digit_components: ^1.0.1+1 - digit_ui_components: 0.0.3-beta + digit_ui_components: 0.0.1+7 auto_route: ^7.8.4 flutter_bloc: ^8.1.1 collection: ^1.16.0 diff --git a/packages/closed_household/pubspec.yaml b/packages/closed_household/pubspec.yaml index 35f9d2b61..1ca6075f2 100644 --- a/packages/closed_household/pubspec.yaml +++ b/packages/closed_household/pubspec.yaml @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_ui_components: 0.0.3-beta + digit_ui_components: 0.0.1+7 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 From 88ef47b9b82604a3303e54d88f62cb3414d2dde1 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Tue, 24 Sep 2024 14:41:27 +0530 Subject: [PATCH 120/241] Changed the flutter version in lock files --- .../assets/animated_json/alert.json | 1127 ------------- .../assets/animated_json/error.json | 728 -------- .../assets/animated_json/success.json | 917 ---------- .../pubspec.yaml | 1 - packages/attendance_management/pubspec.lock | 1289 -------------- .../assets/animated_json/alert.json | 1127 ------------- .../assets/animated_json/error.json | 728 -------- .../assets/animated_json/success.json | 917 ---------- .../closed_household_acknowledgement.dart | 5 +- .../lib/pages/closed_household_summary.dart | 1 - packages/closed_household/pubspec.yaml | 3 +- .../digit_components/example/pubspec.lock | 60 +- packages/digit_components/pubspec.lock | 60 +- packages/digit_data_model/pubspec.lock | 68 +- packages/digit_dss/pubspec.yaml | 2 +- packages/digit_firebase_services/pubspec.lock | 68 +- packages/digit_scanner/pubspec.lock | 60 +- packages/forms_engine/pubspec.lock | 60 +- packages/inventory_management/pubspec.lock | 60 +- packages/referral_reconciliation/pubspec.lock | 1481 ----------------- packages/registration_delivery/pubspec.lock | 60 +- pubspec.lock | 87 +- 22 files changed, 190 insertions(+), 8719 deletions(-) delete mode 100644 apps/health_campaign_field_worker_app/assets/animated_json/alert.json delete mode 100644 apps/health_campaign_field_worker_app/assets/animated_json/error.json delete mode 100644 apps/health_campaign_field_worker_app/assets/animated_json/success.json delete mode 100644 packages/attendance_management/pubspec.lock delete mode 100644 packages/closed_household/assets/animated_json/alert.json delete mode 100644 packages/closed_household/assets/animated_json/error.json delete mode 100644 packages/closed_household/assets/animated_json/success.json delete mode 100644 packages/referral_reconciliation/pubspec.lock diff --git a/apps/health_campaign_field_worker_app/assets/animated_json/alert.json b/apps/health_campaign_field_worker_app/assets/animated_json/alert.json deleted file mode 100644 index 171b416cd..000000000 --- a/apps/health_campaign_field_worker_app/assets/animated_json/alert.json +++ /dev/null @@ -1,1127 +0,0 @@ -{ - "nm": "48 - Warning", - "ddd": 0, - "h": 500, - "w": 500, - "meta": { - "g": "LottieFiles AE " - }, - "layers": [ - { - "ty": 3, - "nm": "48 - Warning", - "sr": 1, - "st": 0, - "op": 144, - "ip": 0, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - 60, - 60, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 180, - 180, - 100 - ], - "ix": 6 - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 250.045, - 290.339, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 0, - "ix": 11 - } - }, - "ef": [], - "ind": 1 - }, - { - "ty": 4, - "nm": "Line", - "sr": 1, - "st": 0, - "op": 144, - "ip": 12, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - -1, - 21.25, - 0 - ], - "ix": 1 - }, - "s": { - "a": 1, - "k": [ - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0, - "y": 1 - }, - "s": [ - 0, - 0, - 100 - ], - "t": 12 - }, - { - "s": [ - 55.556, - 55.556, - 100 - ], - "t": 32 - } - ], - "ix": 6 - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 85.533, - 85.887, - 0 - ], - "ix": 2 - }, - "r": { - "a": 1, - "k": [ - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0, - "y": 1 - }, - "s": [ - 180 - ], - "t": 12 - }, - { - "s": [ - 0 - ], - "t": 32 - } - ], - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 100, - "ix": 11 - } - }, - "ef": [], - "shapes": [ - { - "ty": "gr", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Group", - "nm": "Shape 1", - "ix": 1, - "cix": 2, - "np": 3, - "it": [ - { - "ty": "sh", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Shape - Group", - "nm": "Path 1", - "ix": 1, - "d": 1, - "ks": { - "a": 0, - "k": { - "c": false, - "i": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "o": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "v": [ - [ - -1, - 80 - ], - [ - -1, - -37.5 - ] - ] - }, - "ix": 2 - } - }, - { - "ty": "st", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Graphic - Stroke", - "nm": "Stroke 1", - "lc": 2, - "lj": 1, - "ml": 4, - "o": { - "a": 0, - "k": 100, - "ix": 4 - }, - "w": { - "a": 0, - "k": 28, - "ix": 5 - }, - "c": { - "a": 0, - "k": [ - 1, - 1, - 1 - ], - "ix": 3 - } - }, - { - "ty": "tr", - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - } - } - ] - }, - { - "ty": "tm", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Filter - Trim", - "nm": "Trim Paths 1", - "ix": 2, - "e": { - "a": 0, - "k": 100, - "ix": 2 - }, - "o": { - "a": 0, - "k": 0, - "ix": 3 - }, - "s": { - "a": 1, - "k": [ - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0, - "y": 1 - }, - "s": [ - 0 - ], - "t": 22 - }, - { - "s": [ - 40 - ], - "t": 42 - } - ], - "ix": 1 - }, - "m": 1 - } - ], - "ind": 2, - "parent": 5 - }, - { - "ty": 4, - "nm": "Dot", - "sr": 1, - "st": 0, - "op": 144, - "ip": 12, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - 0, - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100, - 100 - ], - "ix": 6 - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 0, - 0, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 100, - "ix": 11 - } - }, - "ef": [], - "shapes": [ - { - "ty": "gr", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Group", - "nm": "Shape 1", - "ix": 1, - "cix": 2, - "np": 4, - "it": [ - { - "ty": "sh", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Shape - Group", - "nm": "Path 1", - "ix": 1, - "d": 1, - "ks": { - "a": 0, - "k": { - "c": false, - "i": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "o": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "v": [ - [ - -1, - 80 - ], - [ - -1, - -37.5 - ] - ] - }, - "ix": 2 - } - }, - { - "ty": "tm", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Filter - Trim", - "nm": "Trim Paths 1", - "ix": 2, - "e": { - "a": 0, - "k": 0.1, - "ix": 2 - }, - "o": { - "a": 0, - "k": 0, - "ix": 3 - }, - "s": { - "a": 0, - "k": 0, - "ix": 1 - }, - "m": 1 - }, - { - "ty": "st", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Graphic - Stroke", - "nm": "Stroke 1", - "lc": 2, - "lj": 1, - "ml": 4, - "o": { - "a": 0, - "k": 100, - "ix": 4 - }, - "w": { - "a": 0, - "k": 33, - "ix": 5 - }, - "c": { - "a": 0, - "k": [ - 1, - 1, - 1 - ], - "ix": 3 - } - }, - { - "ty": "tr", - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - } - } - ] - } - ], - "ind": 3, - "parent": 2 - }, - { - "ty": 4, - "nm": "Tri Outlines", - "sr": 1, - "st": 0, - "op": 144, - "ip": 10, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - 85.513, - 72.848, - 0 - ], - "ix": 1 - }, - "s": { - "a": 1, - "k": [ - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0.833, - "y": 0.833 - }, - "s": [ - 0, - 0, - 100 - ], - "t": 10 - }, - { - "s": [ - 100, - 100, - 100 - ], - "t": 15 - } - ], - "ix": 6, - "x": "var $bm_rt;\nvar amp, freq, decay, n, t, v;\ntry {\n amp = $bm_div(effect('Scale - Overshoot')('ADBE Slider Control-0001'), 2.5), freq = $bm_div(effect('Scale - Bounce')('ADBE Slider Control-0001'), 20), decay = $bm_div(effect('Scale - Friction')('ADBE Slider Control-0001'), 20), n = 0, 0 < numKeys && (n = nearestKey(time).index, key(n).time > time && n--), t = 0 === n ? 0 : $bm_sub(time, key(n).time), $bm_rt = 0 < n ? (v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10))), $bm_sum(value, $bm_div($bm_mul($bm_mul($bm_div(v, 100), amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))))) : value;\n} catch (e$$4) {\n $bm_rt = value = value;\n}" - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 59.955, - 37.467, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 100, - "ix": 11 - } - }, - "ef": [ - { - "ty": 5, - "mn": "ADBE Slider Control", - "nm": "Scale - Overshoot", - "ix": 1, - "en": 1, - "ef": [ - { - "ty": 0, - "mn": "ADBE Slider Control-0001", - "nm": "Slider", - "ix": 1, - "v": { - "a": 0, - "k": 10, - "ix": 1, - "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" - } - } - ] - }, - { - "ty": 5, - "mn": "ADBE Slider Control", - "nm": "Scale - Bounce", - "ix": 2, - "en": 1, - "ef": [ - { - "ty": 0, - "mn": "ADBE Slider Control-0001", - "nm": "Slider", - "ix": 1, - "v": { - "a": 0, - "k": 35, - "ix": 1, - "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" - } - } - ] - }, - { - "ty": 5, - "mn": "ADBE Slider Control", - "nm": "Scale - Friction", - "ix": 3, - "en": 1, - "ef": [ - { - "ty": 0, - "mn": "ADBE Slider Control-0001", - "nm": "Slider", - "ix": 1, - "v": { - "a": 0, - "k": 65, - "ix": 1, - "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" - } - } - ] - } - ], - "shapes": [ - { - "ty": "gr", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Group", - "nm": "Group 1", - "ix": 1, - "cix": 2, - "np": 2, - "it": [ - { - "ty": "sh", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Shape - Group", - "nm": "Path 1", - "ix": 1, - "d": 1, - "ks": { - "a": 0, - "k": { - "c": true, - "i": [ - [ - -3.315, - 5.634 - ], - [ - 0, - 0 - ], - [ - -3.267, - -5.554 - ], - [ - 0, - 0 - ], - [ - 6.537, - 0 - ], - [ - 0, - 0 - ] - ], - "o": [ - [ - 0, - 0 - ], - [ - 3.268, - -5.554 - ], - [ - 0, - 0 - ], - [ - 3.315, - 5.634 - ], - [ - 0, - 0 - ], - [ - -6.536, - 0 - ] - ], - "v": [ - [ - -81.948, - 59.861 - ], - [ - -7.284, - -67.044 - ], - [ - 7.284, - -67.044 - ], - [ - 81.948, - 59.861 - ], - [ - 74.664, - 72.598 - ], - [ - -74.664, - 72.598 - ] - ] - }, - "ix": 2 - } - }, - { - "ty": "fl", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Graphic - Fill", - "nm": "Fill 1", - "c": { - "a": 0, - "k": [ - 0.7255, - 0.098, - 0 - ], - "ix": 4 - }, - "r": 1, - "o": { - "a": 0, - "k": 100, - "ix": 5 - } - }, - { - "ty": "tr", - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "p": { - "a": 0, - "k": [ - 85.513, - 72.848 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - } - } - ] - } - ], - "ind": 4, - "parent": 1 - }, - { - "ty": 3, - "nm": "Tri", - "sr": 1, - "st": 0, - "op": 144, - "ip": 10, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - 85.513, - 72.848, - 0 - ], - "ix": 1 - }, - "s": { - "a": 1, - "k": [ - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0.833, - "y": 0.833 - }, - "s": [ - 0, - 0, - 100 - ], - "t": 10 - }, - { - "s": [ - 100, - 100, - 100 - ], - "t": 15 - } - ], - "ix": 6, - "x": "var $bm_rt;\nvar amp, freq, decay, n, t, v;\ntry {\n amp = $bm_div(effect('Scale - Overshoot')('ADBE Slider Control-0001'), 2.5), freq = $bm_div(effect('Scale - Bounce')('ADBE Slider Control-0001'), 20), decay = $bm_div(effect('Scale - Friction')('ADBE Slider Control-0001'), 20), n = 0, 0 < numKeys && (n = nearestKey(time).index, key(n).time > time && n--), t = 0 === n ? 0 : $bm_sub(time, key(n).time), $bm_rt = 0 < n ? (v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10))), $bm_sum(value, $bm_div($bm_mul($bm_mul($bm_div(v, 100), amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))))) : value;\n} catch (e$$4) {\n $bm_rt = value = value;\n}" - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 59.955, - 37.467, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 100, - "ix": 11 - } - }, - "ef": [ - { - "ty": 5, - "mn": "ADBE Slider Control", - "nm": "Scale - Overshoot", - "ix": 1, - "en": 1, - "ef": [ - { - "ty": 0, - "mn": "ADBE Slider Control-0001", - "nm": "Slider", - "ix": 1, - "v": { - "a": 0, - "k": 10, - "ix": 1, - "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" - } - } - ] - }, - { - "ty": 5, - "mn": "ADBE Slider Control", - "nm": "Scale - Bounce", - "ix": 2, - "en": 1, - "ef": [ - { - "ty": 0, - "mn": "ADBE Slider Control-0001", - "nm": "Slider", - "ix": 1, - "v": { - "a": 0, - "k": 35, - "ix": 1, - "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" - } - } - ] - }, - { - "ty": 5, - "mn": "ADBE Slider Control", - "nm": "Scale - Friction", - "ix": 3, - "en": 1, - "ef": [ - { - "ty": 0, - "mn": "ADBE Slider Control-0001", - "nm": "Slider", - "ix": 1, - "v": { - "a": 0, - "k": 65, - "ix": 1, - "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" - } - } - ] - } - ], - "ind": 5, - "parent": 1 - }, - { - "ty": 1, - "nm": "Plate_white", - "sr": 1, - "st": 0, - "op": 144, - "ip": 0, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - 250, - 250, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100, - 100 - ], - "ix": 6 - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 250, - 250, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 100, - "ix": 11 - } - }, - "ef": [], - "sc": "#ffffff", - "sh": 500, - "sw": 500, - "ind": 6 - } - ], - "v": "5.5.7", - "fr": 48, - "op": 144, - "ip": 0, - "assets": [] -} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/assets/animated_json/error.json b/apps/health_campaign_field_worker_app/assets/animated_json/error.json deleted file mode 100644 index 96b4f9626..000000000 --- a/apps/health_campaign_field_worker_app/assets/animated_json/error.json +++ /dev/null @@ -1,728 +0,0 @@ -{ - "nm": "ckeck", - "ddd": 0, - "h": 50, - "w": 50, - "meta": { - "g": "@lottiefiles/toolkit-js 0.33.2" - }, - "layers": [ - { - "ty": 4, - "nm": "! Outlines", - "sr": 1, - "st": 0, - "op": 213, - "ip": 0, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - 2, - 12, - 0 - ], - "ix": 1 - }, - "s": { - "a": 1, - "k": [ - { - "o": { - "x": 0.653, - "y": -0.834 - }, - "i": { - "x": 0.667, - "y": 1 - }, - "s": [ - 100, - 100, - 100 - ], - "t": 60 - }, - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0.833, - "y": 0.833 - }, - "s": [ - 115, - 115, - 100 - ], - "t": 73 - }, - { - "o": { - "x": 0.333, - "y": 0 - }, - "i": { - "x": 0.127, - "y": 1.695 - }, - "s": [ - 115, - 115, - 100 - ], - "t": 83 - }, - { - "s": [ - 100, - 100, - 100 - ], - "t": 90 - } - ], - "ix": 6 - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 25, - 25, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 100, - "ix": 11 - } - }, - "ef": [], - "shapes": [ - { - "ty": "gr", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Group", - "nm": "Group 1", - "ix": 1, - "cix": 2, - "np": 4, - "it": [ - { - "ty": "sh", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Shape - Group", - "nm": "Path 1", - "ix": 1, - "d": 1, - "ks": { - "a": 0, - "k": { - "c": true, - "i": [ - [ - 0, - 1.104 - ], - [ - -1.104, - 0 - ], - [ - 0, - -1.104 - ], - [ - 1.104, - 0 - ] - ], - "o": [ - [ - 0, - -1.104 - ], - [ - 1.104, - 0 - ], - [ - 0, - 1.104 - ], - [ - -1.104, - 0 - ] - ], - "v": [ - [ - -2, - 10 - ], - [ - 0, - 8 - ], - [ - 2, - 10 - ], - [ - 0, - 12 - ] - ] - }, - "ix": 2 - } - }, - { - "ty": "sh", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Shape - Group", - "nm": "Path 2", - "ix": 2, - "d": 1, - "ks": { - "a": 0, - "k": { - "c": true, - "i": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "o": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "v": [ - [ - -1.036, - 5 - ], - [ - -2, - -6.625 - ], - [ - -2, - -12 - ], - [ - 2, - -12 - ], - [ - 2, - -6.625 - ], - [ - 1.052, - 5 - ] - ] - }, - "ix": 2 - } - }, - { - "ty": "mm", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Filter - Merge", - "nm": "Merge Paths 1", - "mm": 1 - }, - { - "ty": "fl", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Graphic - Fill", - "nm": "Fill 1", - "c": { - "a": 0, - "k": [ - 1, - 1, - 1 - ], - "ix": 4 - }, - "r": 1, - "o": { - "a": 0, - "k": 100, - "ix": 5 - } - }, - { - "ty": "tr", - "a": { - "a": 0, - "k": [ - 0.099, - 9.982 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "p": { - "a": 0, - "k": [ - 2.099, - 21.982 - ], - "ix": 2 - }, - "r": { - "a": 1, - "k": [ - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0.833, - "y": 0.833 - }, - "s": [ - 0 - ], - "t": 10 - }, - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0.833, - "y": 0.833 - }, - "s": [ - 5 - ], - "t": 12 - }, - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0.833, - "y": 0.833 - }, - "s": [ - -5 - ], - "t": 14 - }, - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0.833, - "y": 0.833 - }, - "s": [ - 5 - ], - "t": 16 - }, - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0.833, - "y": 0.833 - }, - "s": [ - -5 - ], - "t": 18 - }, - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0.833, - "y": 0.833 - }, - "s": [ - 5 - ], - "t": 20 - }, - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0.833, - "y": 0.833 - }, - "s": [ - -5 - ], - "t": 22 - }, - { - "s": [ - 0 - ], - "t": 24 - } - ], - "ix": 6 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - } - } - ] - } - ], - "ind": 1 - }, - { - "ty": 4, - "nm": "Shape Layer 1", - "sr": 1, - "st": 0, - "op": 193, - "ip": 0, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - 0, - 10, - 0 - ], - "ix": 1 - }, - "s": { - "a": 1, - "k": [ - { - "o": { - "x": 0.41, - "y": -0.602 - }, - "i": { - "x": 0.667, - "y": 1 - }, - "s": [ - 100, - 100, - 100 - ], - "t": 60 - }, - { - "o": { - "x": 0.333, - "y": 0 - }, - "i": { - "x": 0.436, - "y": 1.492 - }, - "s": [ - 115, - 115, - 100 - ], - "t": 83 - }, - { - "s": [ - 100, - 100, - 100 - ], - "t": 90 - } - ], - "ix": 6 - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 25, - 35, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 100, - "ix": 11 - } - }, - "ef": [], - "shapes": [ - { - "ty": "gr", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Group", - "nm": "Ellipse 1", - "ix": 1, - "cix": 2, - "np": 3, - "it": [ - { - "ty": "el", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Shape - Ellipse", - "nm": "Ellipse Path 1", - "d": 1, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 3 - }, - "s": { - "a": 0, - "k": [ - 40, - 40 - ], - "ix": 2 - } - }, - { - "ty": "st", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Graphic - Stroke", - "nm": "Stroke 1", - "lc": 1, - "lj": 1, - "ml": 4, - "o": { - "a": 0, - "k": 100, - "ix": 4 - }, - "w": { - "a": 0, - "k": 2, - "ix": 5 - }, - "c": { - "a": 0, - "k": [ - 1, - 1, - 1 - ], - "ix": 3 - } - }, - { - "ty": "tr", - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - } - } - ] - }, - { - "ty": "tm", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Filter - Trim", - "nm": "Trim Paths 1", - "ix": 2, - "e": { - "a": 0, - "k": 100, - "ix": 2 - }, - "o": { - "a": 0, - "k": 0, - "ix": 3 - }, - "s": { - "a": 0, - "k": 0, - "ix": 1 - }, - "m": 1 - } - ], - "ind": 2 - } - ], - "v": "5.6.5", - "fr": 60, - "op": 180, - "ip": 0, - "assets": [] -} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/assets/animated_json/success.json b/apps/health_campaign_field_worker_app/assets/animated_json/success.json deleted file mode 100644 index 43192f708..000000000 --- a/apps/health_campaign_field_worker_app/assets/animated_json/success.json +++ /dev/null @@ -1,917 +0,0 @@ -{ - "nm": "sucess", - "ddd": 0, - "h": 120, - "w": 120, - "meta": { - "g": "LottieFiles AE 0.1.21" - }, - "layers": [ - { - "ty": 3, - "nm": "scale up null", - "sr": 1, - "st": 0, - "op": 300.00001221925, - "ip": 0, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - 0, - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 1, - "k": [ - { - "o": { - "x": 0.167, - "y": 0 - }, - "i": { - "x": 0.833, - "y": 1 - }, - "s": [ - 111, - 111, - 100 - ], - "t": 27 - }, - { - "o": { - "x": 0.167, - "y": 0 - }, - "i": { - "x": 0.833, - "y": 1 - }, - "s": [ - 101, - 101, - 100 - ], - "t": 36 - }, - { - "s": [ - 121, - 121, - 100 - ], - "t": 42.0000017106951 - } - ], - "ix": 6 - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 60, - 60, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 0, - "ix": 11 - } - }, - "ef": [], - "ind": 1 - }, - { - "ty": 4, - "nm": "spark", - "sr": 1, - "st": 35.0000014255792, - "op": 335.00001364483, - "ip": 35.0000014255792, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - 0, - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100, - 100 - ], - "ix": 6 - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 0, - 0.5, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 100, - "ix": 11 - } - }, - "ef": [], - "shapes": [ - { - "ty": "gr", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Group", - "nm": "Rectangle 1", - "ix": 1, - "cix": 2, - "np": 3, - "it": [ - { - "ty": "rc", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Shape - Rect", - "nm": "Rectangle Path 1", - "d": 1, - "p": { - "a": 1, - "k": [ - { - "o": { - "x": 0.333, - "y": 0 - }, - "i": { - "x": 0.667, - "y": 1 - }, - "s": [ - 0, - -21 - ], - "t": 35, - "ti": [ - 0, - 1.5 - ], - "to": [ - 0, - -1.5 - ] - }, - { - "s": [ - 0, - -30 - ], - "t": 53.0000021587343 - } - ], - "ix": 3 - }, - "r": { - "a": 0, - "k": 0, - "ix": 4 - }, - "s": { - "a": 1, - "k": [ - { - "o": { - "x": 0.976, - "y": 0 - }, - "i": { - "x": 0.667, - "y": 1 - }, - "s": [ - 2, - 0 - ], - "t": 35 - }, - { - "o": { - "x": 0.33299999999999996, - "y": 0 - }, - "i": { - "x": 0.15355432054499818, - "y": 0.9999999999999999 - }, - "s": [ - 2, - 8 - ], - "t": 42 - }, - { - "s": [ - 1.633, - 0 - ], - "t": 53.0000021587343 - } - ], - "ix": 2 - } - }, - { - "ty": "fl", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Graphic - Fill", - "nm": "Fill 1", - "c": { - "a": 0, - "k": [ - 0.9804, - 0.9804, - 0.9804 - ], - "ix": 4 - }, - "r": 1, - "o": { - "a": 0, - "k": 100, - "ix": 5 - } - }, - { - "ty": "tr", - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "p": { - "a": 0, - "k": [ - 0, - -8 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - } - } - ] - }, - { - "ty": "rp", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Filter - Repeater", - "nm": "Repeater 1", - "ix": 2, - "m": 1, - "c": { - "a": 0, - "k": 8, - "ix": 1 - }, - "o": { - "a": 0, - "k": 0, - "ix": 2 - }, - "tr": { - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 45, - "ix": 4 - }, - "sa": { - "a": 0, - "k": 0 - }, - "so": { - "a": 0, - "k": 100, - "ix": 5 - }, - "eo": { - "a": 0, - "k": 100, - "ix": 6 - } - } - } - ], - "ind": 2, - "parent": 1 - }, - { - "ty": 4, - "nm": "check", - "sr": 1, - "st": 10.0000004073083, - "op": 310.000012626559, - "ip": 22.0000008960784, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - 0, - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100, - 100 - ], - "ix": 6 - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 0, - 0, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 100, - "ix": 11 - } - }, - "ef": [], - "shapes": [ - { - "ty": "sh", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Shape - Group", - "nm": "Path 1", - "ix": 1, - "d": 1, - "ks": { - "a": 0, - "k": { - "c": false, - "i": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 3.5, - 3.75 - ], - [ - -12.973, - 5.349 - ], - [ - -6.124, - -9.992 - ], - [ - 12.125, - -7.431 - ], - [ - 7.431, - 12.125 - ] - ], - "o": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - -3.5, - -3.75 - ], - [ - 10.764, - -2.941 - ], - [ - 7.431, - 12.125 - ], - [ - -12.125, - 7.431 - ], - [ - -7.431, - -12.125 - ] - ], - "v": [ - [ - 15.25, - -9.688 - ], - [ - -5.75, - 10.062 - ], - [ - -16, - 0.25 - ], - [ - -6.777, - -24.849 - ], - [ - 21.955, - -13.456 - ], - [ - 13.456, - 21.955 - ], - [ - -21.955, - 13.456 - ] - ] - }, - "ix": 2 - } - }, - { - "ty": "tm", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Filter - Trim", - "nm": "Trim Paths 1", - "ix": 2, - "e": { - "a": 1, - "k": [ - { - "o": { - "x": 0.714, - "y": 0 - }, - "i": { - "x": 0.351, - "y": 1 - }, - "s": [ - 100 - ], - "t": 10 - }, - { - "s": [ - 23 - ], - "t": 40.0000016292334 - } - ], - "ix": 2 - }, - "o": { - "a": 0, - "k": 0, - "ix": 3 - }, - "s": { - "a": 1, - "k": [ - { - "o": { - "x": 0.742, - "y": 0 - }, - "i": { - "x": 0.363, - "y": 1 - }, - "s": [ - 100 - ], - "t": 17 - }, - { - "s": [ - 0 - ], - "t": 45.0000018328876 - } - ], - "ix": 1 - }, - "m": 1 - }, - { - "ty": "st", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Graphic - Stroke", - "nm": "Stroke 1", - "lc": 1, - "lj": 1, - "ml": 4, - "o": { - "a": 0, - "k": 100, - "ix": 4 - }, - "w": { - "a": 0, - "k": 4, - "ix": 5 - }, - "c": { - "a": 0, - "k": [ - 0.9804, - 0.9804, - 0.9804 - ], - "ix": 3 - } - } - ], - "ind": 3, - "parent": 1 - }, - { - "ty": 4, - "nm": "circle", - "sr": 1, - "st": 0, - "op": 300.00001221925, - "ip": 0, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - 0, - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100, - 100 - ], - "ix": 6 - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 0, - 0, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 100, - "ix": 11 - } - }, - "ef": [], - "shapes": [ - { - "ty": "sh", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Shape - Group", - "nm": "Path 1", - "ix": 1, - "d": 1, - "ks": { - "a": 0, - "k": { - "c": true, - "i": [ - [ - -14.221, - 0 - ], - [ - 0, - -14.221 - ], - [ - 14.221, - 0 - ], - [ - 0, - 14.221 - ] - ], - "o": [ - [ - 14.221, - 0 - ], - [ - 0, - 14.221 - ], - [ - -14.221, - 0 - ], - [ - 0, - -14.221 - ] - ], - "v": [ - [ - 0, - -25.75 - ], - [ - 25.75, - 0 - ], - [ - 0, - 25.75 - ], - [ - -25.75, - 0 - ] - ] - }, - "ix": 2 - } - }, - { - "ty": "st", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Graphic - Stroke", - "nm": "Stroke 1", - "lc": 1, - "lj": 1, - "ml": 4, - "o": { - "a": 0, - "k": 100, - "ix": 4 - }, - "w": { - "a": 0, - "k": 2, - "ix": 5 - }, - "c": { - "a": 0, - "k": [ - 0.9804, - 0.9804, - 0.9804 - ], - "ix": 3 - } - }, - { - "ty": "tm", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Filter - Trim", - "nm": "Trim Paths 1", - "ix": 3, - "e": { - "a": 1, - "k": [ - { - "o": { - "x": 0.714, - "y": 0 - }, - "i": { - "x": 0.351, - "y": 1 - }, - "s": [ - 100 - ], - "t": 0 - }, - { - "s": [ - 100 - ], - "t": 30.0000012219251 - } - ], - "ix": 2 - }, - "o": { - "a": 0, - "k": 0, - "ix": 3 - }, - "s": { - "a": 1, - "k": [ - { - "o": { - "x": 0.742, - "y": 0 - }, - "i": { - "x": 0.363, - "y": 1 - }, - "s": [ - 100 - ], - "t": 7 - }, - { - "s": [ - 0 - ], - "t": 33.0000013441176 - } - ], - "ix": 1 - }, - "m": 1 - } - ], - "ind": 4, - "parent": 1 - } - ], - "v": "5.5.7", - "fr": 29.9700012207031, - "op": 60.0000024438501, - "ip": 0, - "assets": [] -} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 23fab67ed..a9db1c02b 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -19,7 +19,6 @@ dependencies: path_provider: ^2.0.11 path: ^1.8.2 digit_components: ^1.0.1+1 - digit_ui_components: 0.0.1+7 auto_route: ^7.8.4 flutter_bloc: ^8.1.1 collection: ^1.16.0 diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock deleted file mode 100644 index 634be0aea..000000000 --- a/packages/attendance_management/pubspec.lock +++ /dev/null @@ -1,1289 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 - url: "https://pub.dev" - source: hosted - version: "64.0.0" - analyzer: - dependency: transitive - description: - name: analyzer - sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" - url: "https://pub.dev" - source: hosted - version: "6.2.0" - analyzer_plugin: - dependency: transitive - description: - name: analyzer_plugin - sha256: "9661b30b13a685efaee9f02e5d01ed9f2b423bd889d28a304d02d704aee69161" - url: "https://pub.dev" - source: hosted - version: "0.11.3" - ansicolor: - dependency: transitive - description: - name: ansicolor - sha256: "8bf17a8ff6ea17499e40a2d2542c2f481cd7615760c6d34065cb22bfd22e6880" - url: "https://pub.dev" - source: hosted - version: "2.0.2" - archive: - dependency: transitive - description: - name: archive - sha256: "6bd38d335f0954f5fad9c79e614604fbf03a0e5b975923dd001b6ea965ef5b4b" - url: "https://pub.dev" - source: hosted - version: "3.6.0" - args: - dependency: transitive - description: - name: args - sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" - url: "https://pub.dev" - source: hosted - version: "2.5.0" - async: - dependency: transitive - description: - name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" - url: "https://pub.dev" - source: hosted - version: "2.11.0" - auto_route: - dependency: "direct main" - description: - name: auto_route - sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 - url: "https://pub.dev" - source: hosted - version: "7.9.2" - auto_route_generator: - dependency: "direct dev" - description: - name: auto_route_generator - sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" - url: "https://pub.dev" - source: hosted - version: "7.3.2" - bloc: - dependency: transitive - description: - name: bloc - sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e" - url: "https://pub.dev" - source: hosted - version: "8.1.4" - bloc_test: - dependency: "direct dev" - description: - name: bloc_test - sha256: "165a6ec950d9252ebe36dc5335f2e6eb13055f33d56db0eeb7642768849b43d2" - url: "https://pub.dev" - source: hosted - version: "9.1.7" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - build: - dependency: transitive - description: - name: build - sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" - url: "https://pub.dev" - source: hosted - version: "2.4.1" - build_config: - dependency: transitive - description: - name: build_config - sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 - url: "https://pub.dev" - source: hosted - version: "1.1.1" - build_daemon: - dependency: transitive - description: - name: build_daemon - sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" - url: "https://pub.dev" - source: hosted - version: "4.0.1" - build_resolvers: - dependency: transitive - description: - name: build_resolvers - sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" - url: "https://pub.dev" - source: hosted - version: "2.4.2" - build_runner: - dependency: "direct main" - description: - name: build_runner - sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" - url: "https://pub.dev" - source: hosted - version: "2.4.9" - build_runner_core: - dependency: transitive - description: - name: build_runner_core - sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" - url: "https://pub.dev" - source: hosted - version: "7.3.0" - built_collection: - dependency: transitive - description: - name: built_collection - sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" - url: "https://pub.dev" - source: hosted - version: "5.1.1" - built_value: - dependency: transitive - description: - name: built_value - sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb - url: "https://pub.dev" - source: hosted - version: "8.9.2" - characters: - dependency: transitive - description: - name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - charcode: - dependency: transitive - description: - name: charcode - sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 - url: "https://pub.dev" - source: hosted - version: "1.3.1" - checked_yaml: - dependency: transitive - description: - name: checked_yaml - sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff - url: "https://pub.dev" - source: hosted - version: "2.0.3" - cli_util: - dependency: transitive - description: - name: cli_util - sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 - url: "https://pub.dev" - source: hosted - version: "0.4.1" - clock: - dependency: transitive - description: - name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.dev" - source: hosted - version: "1.1.1" - code_builder: - dependency: transitive - description: - name: code_builder - sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 - url: "https://pub.dev" - source: hosted - version: "4.10.0" - collection: - dependency: "direct main" - description: - name: collection - sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a - url: "https://pub.dev" - source: hosted - version: "1.18.0" - connectivity_plus: - dependency: "direct main" - description: - name: connectivity_plus - sha256: "224a77051d52a11fbad53dd57827594d3bd24f945af28bd70bab376d68d437f0" - url: "https://pub.dev" - source: hosted - version: "5.0.2" - connectivity_plus_platform_interface: - dependency: transitive - description: - name: connectivity_plus_platform_interface - sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a - url: "https://pub.dev" - source: hosted - version: "1.2.4" - convert: - dependency: transitive - description: - name: convert - sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" - url: "https://pub.dev" - source: hosted - version: "3.1.1" - coverage: - dependency: transitive - description: - name: coverage - sha256: "3945034e86ea203af7a056d98e98e42a5518fff200d6e8e6647e1886b07e936e" - url: "https://pub.dev" - source: hosted - version: "1.8.0" - crypto: - dependency: transitive - description: - name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab - url: "https://pub.dev" - source: hosted - version: "3.0.3" - cupertino_icons: - dependency: transitive - description: - name: cupertino_icons - sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 - url: "https://pub.dev" - source: hosted - version: "1.0.8" - dart_mappable: - dependency: "direct main" - description: - name: dart_mappable - sha256: "47269caf2060533c29b823ff7fa9706502355ffcb61e7f2a374e3a0fb2f2c3f0" - url: "https://pub.dev" - source: hosted - version: "4.2.2" - dart_mappable_builder: - dependency: "direct dev" - description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.0" - dart_style: - dependency: transitive - description: - name: dart_style - sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" - url: "https://pub.dev" - source: hosted - version: "2.3.6" - db_viewer: - dependency: transitive - description: - name: db_viewer - sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - dbus: - dependency: transitive - description: - name: dbus - sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac" - url: "https://pub.dev" - source: hosted - version: "0.7.10" - diff_match_patch: - dependency: transitive - description: - name: diff_match_patch - sha256: "2efc9e6e8f449d0abe15be240e2c2a3bcd977c8d126cfd70598aee60af35c0a4" - url: "https://pub.dev" - source: hosted - version: "0.4.1" - digit_components: - dependency: "direct main" - description: - name: digit_components - sha256: "9cca4d9a546037080afe02b6ade82fdf01574e11f5656ad12120fd6966578616" - url: "https://pub.dev" - source: hosted - version: "1.0.1+1" - digit_data_model: - dependency: "direct main" - description: - name: digit_data_model - sha256: "0b81e96636496b56b4f9c5d918690a17d8985d6b131e0ab54968eb5471ee4f54" - url: "https://pub.dev" - source: hosted - version: "1.0.3+1" - dio: - dependency: "direct main" - description: - name: dio - sha256: "11e40df547d418cc0c4900a9318b26304e665da6fa4755399a9ff9efd09034b5" - url: "https://pub.dev" - source: hosted - version: "5.4.3+1" - drift: - dependency: "direct main" - description: - name: drift - sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 - url: "https://pub.dev" - source: hosted - version: "2.15.0" - drift_db_viewer: - dependency: "direct main" - description: - name: drift_db_viewer - sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - drift_dev: - dependency: "direct dev" - description: - name: drift_dev - sha256: c037d9431b6f8dc633652b1469e5f53aaec6e4eb405ed29dd232fa888ef10d88 - url: "https://pub.dev" - source: hosted - version: "2.15.0" - easy_stepper: - dependency: transitive - description: - name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" - url: "https://pub.dev" - source: hosted - version: "0.5.2+1" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - ffi: - dependency: transitive - description: - name: ffi - sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - file: - dependency: transitive - description: - name: file - sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" - url: "https://pub.dev" - source: hosted - version: "7.0.0" - fixnum: - dependency: transitive - description: - name: fixnum - sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_bloc: - dependency: "direct main" - description: - name: flutter_bloc - sha256: f0ecf6e6eb955193ca60af2d5ca39565a86b8a142452c5b24d96fb477428f4d2 - url: "https://pub.dev" - source: hosted - version: "8.1.5" - flutter_focus_watcher: - dependency: transitive - description: - name: flutter_focus_watcher - sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility: - dependency: transitive - description: - name: flutter_keyboard_visibility - sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" - url: "https://pub.dev" - source: hosted - version: "5.4.1" - flutter_keyboard_visibility_linux: - dependency: transitive - description: - name: flutter_keyboard_visibility_linux - sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_macos: - dependency: transitive - description: - name: flutter_keyboard_visibility_macos - sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_platform_interface: - dependency: transitive - description: - name: flutter_keyboard_visibility_platform_interface - sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_web: - dependency: transitive - description: - name: flutter_keyboard_visibility_web - sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_windows: - dependency: transitive - description: - name: flutter_keyboard_visibility_windows - sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_lints: - dependency: "direct dev" - description: - name: flutter_lints - sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 - url: "https://pub.dev" - source: hosted - version: "2.0.3" - flutter_spinkit: - dependency: transitive - description: - name: flutter_spinkit - sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 - url: "https://pub.dev" - source: hosted - version: "5.2.1" - flutter_svg: - dependency: "direct main" - description: - name: flutter_svg - sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" - url: "https://pub.dev" - source: hosted - version: "2.0.10+1" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" - flutter_web_plugins: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - fluttertoast: - dependency: "direct main" - description: - name: fluttertoast - sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" - url: "https://pub.dev" - source: hosted - version: "8.2.5" - freezed: - dependency: "direct dev" - description: - name: freezed - sha256: a434911f643466d78462625df76fd9eb13e57348ff43fe1f77bbe909522c67a1 - url: "https://pub.dev" - source: hosted - version: "2.5.2" - freezed_annotation: - dependency: "direct main" - description: - name: freezed_annotation - sha256: c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d - url: "https://pub.dev" - source: hosted - version: "2.4.1" - frontend_server_client: - dependency: transitive - description: - name: frontend_server_client - sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" - url: "https://pub.dev" - source: hosted - version: "3.2.0" - glob: - dependency: transitive - description: - name: glob - sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - google_fonts: - dependency: transitive - description: - name: google_fonts - sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" - url: "https://pub.dev" - source: hosted - version: "4.0.5" - graphs: - dependency: transitive - description: - name: graphs - sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 - url: "https://pub.dev" - source: hosted - version: "2.3.1" - horizontal_data_table: - dependency: transitive - description: - name: horizontal_data_table - sha256: c8ab5256bbced698a729f3e0ff2cb0e8e97416cdbb082860370eaf883badf722 - url: "https://pub.dev" - source: hosted - version: "4.3.1" - http: - dependency: transitive - description: - name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba - url: "https://pub.dev" - source: hosted - version: "1.2.0" - http_multi_server: - dependency: transitive - description: - name: http_multi_server - sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" - url: "https://pub.dev" - source: hosted - version: "3.2.1" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - intl: - dependency: "direct main" - description: - name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" - url: "https://pub.dev" - source: hosted - version: "0.18.1" - io: - dependency: transitive - description: - name: io - sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" - url: "https://pub.dev" - source: hosted - version: "1.0.4" - isar: - dependency: transitive - description: - name: isar - sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - isar_flutter_libs: - dependency: transitive - description: - name: isar_flutter_libs - sha256: bc6768cc4b9c61aabff77152e7f33b4b17d2fc93134f7af1c3dd51500fe8d5e8 - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - js: - dependency: transitive - description: - name: js - sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 - url: "https://pub.dev" - source: hosted - version: "0.6.7" - json_annotation: - dependency: transitive - description: - name: json_annotation - sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" - url: "https://pub.dev" - source: hosted - version: "4.9.0" - json_serializable: - dependency: "direct dev" - description: - name: json_serializable - sha256: ea1432d167339ea9b5bb153f0571d0039607a873d6e04e0117af043f14a1fd4b - url: "https://pub.dev" - source: hosted - version: "6.8.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" - url: "https://pub.dev" - source: hosted - version: "10.0.4" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" - url: "https://pub.dev" - source: hosted - version: "3.0.3" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://pub.dev" - source: hosted - version: "3.0.1" - lints: - dependency: transitive - description: - name: lints - sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - location: - dependency: "direct main" - description: - name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" - url: "https://pub.dev" - source: hosted - version: "5.0.3" - location_platform_interface: - dependency: transitive - description: - name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" - url: "https://pub.dev" - source: hosted - version: "3.1.2" - location_web: - dependency: transitive - description: - name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b - url: "https://pub.dev" - source: hosted - version: "4.2.0" - logging: - dependency: transitive - description: - name: logging - sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - lottie: - dependency: transitive - description: - name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 - url: "https://pub.dev" - source: hosted - version: "2.7.0" - matcher: - dependency: transitive - description: - name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb - url: "https://pub.dev" - source: hosted - version: "0.12.16+1" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" - url: "https://pub.dev" - source: hosted - version: "0.8.0" - meta: - dependency: transitive - description: - name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" - url: "https://pub.dev" - source: hosted - version: "1.12.0" - mime: - dependency: transitive - description: - name: mime - sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" - url: "https://pub.dev" - source: hosted - version: "1.0.5" - mocktail: - dependency: "direct dev" - description: - name: mocktail - sha256: c4b5007d91ca4f67256e720cb1b6d704e79a510183a12fa551021f652577dce6 - url: "https://pub.dev" - source: hosted - version: "1.0.3" - nested: - dependency: transitive - description: - name: nested - sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - nm: - dependency: transitive - description: - name: nm - sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" - url: "https://pub.dev" - source: hosted - version: "0.5.0" - node_preamble: - dependency: transitive - description: - name: node_preamble - sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" - url: "https://pub.dev" - source: hosted - version: "2.0.2" - overlay_builder: - dependency: "direct main" - description: - name: overlay_builder - sha256: "58b97bc5f67a2e2bb7006dd88e697ac757dfffc9dbd1e7dfc1917fb510a4b5c8" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - package_config: - dependency: transitive - description: - name: package_config - sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - package_info_plus: - dependency: transitive - description: - name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" - url: "https://pub.dev" - source: hosted - version: "5.0.1" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" - url: "https://pub.dev" - source: hosted - version: "2.0.1" - path: - dependency: "direct main" - description: - name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" - url: "https://pub.dev" - source: hosted - version: "1.9.0" - path_parsing: - dependency: transitive - description: - name: path_parsing - sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf - url: "https://pub.dev" - source: hosted - version: "1.0.1" - path_provider: - dependency: "direct main" - description: - name: path_provider - sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 - url: "https://pub.dev" - source: hosted - version: "2.1.3" - path_provider_android: - dependency: transitive - description: - name: path_provider_android - sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d - url: "https://pub.dev" - source: hosted - version: "2.2.4" - path_provider_foundation: - dependency: transitive - description: - name: path_provider_foundation - sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - path_provider_linux: - dependency: transitive - description: - name: path_provider_linux - sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 - url: "https://pub.dev" - source: hosted - version: "2.2.1" - path_provider_platform_interface: - dependency: transitive - description: - name: path_provider_platform_interface - sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - path_provider_windows: - dependency: transitive - description: - name: path_provider_windows - sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" - url: "https://pub.dev" - source: hosted - version: "2.2.1" - petitparser: - dependency: transitive - description: - name: petitparser - sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 - url: "https://pub.dev" - source: hosted - version: "6.0.2" - platform: - dependency: transitive - description: - name: platform - sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" - url: "https://pub.dev" - source: hosted - version: "3.1.4" - plugin_platform_interface: - dependency: transitive - description: - name: plugin_platform_interface - sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" - url: "https://pub.dev" - source: hosted - version: "2.1.8" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" - pool: - dependency: transitive - description: - name: pool - sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" - url: "https://pub.dev" - source: hosted - version: "1.5.1" - provider: - dependency: transitive - description: - name: provider - sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c - url: "https://pub.dev" - source: hosted - version: "6.1.2" - pub_semver: - dependency: transitive - description: - name: pub_semver - sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - pubspec_parse: - dependency: transitive - description: - name: pubspec_parse - sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 - url: "https://pub.dev" - source: hosted - version: "1.2.3" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 - url: "https://pub.dev" - source: hosted - version: "0.8.1" - reactive_forms: - dependency: "direct main" - description: - name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" - url: "https://pub.dev" - source: hosted - version: "14.3.0" - recase: - dependency: transitive - description: - name: recase - sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 - url: "https://pub.dev" - source: hosted - version: "4.1.0" - remove_emoji_input_formatter: - dependency: transitive - description: - name: remove_emoji_input_formatter - sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" - url: "https://pub.dev" - source: hosted - version: "0.0.1+1" - shelf: - dependency: transitive - description: - name: shelf - sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 - url: "https://pub.dev" - source: hosted - version: "1.4.1" - shelf_packages_handler: - dependency: transitive - description: - name: shelf_packages_handler - sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - shelf_static: - dependency: transitive - description: - name: shelf_static - sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e - url: "https://pub.dev" - source: hosted - version: "1.1.2" - shelf_web_socket: - dependency: transitive - description: - name: shelf_web_socket - sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" - url: "https://pub.dev" - source: hosted - version: "1.0.4" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.99" - source_gen: - dependency: transitive - description: - name: source_gen - sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" - url: "https://pub.dev" - source: hosted - version: "1.5.0" - source_helper: - dependency: transitive - description: - name: source_helper - sha256: "6adebc0006c37dd63fe05bca0a929b99f06402fc95aa35bf36d67f5c06de01fd" - url: "https://pub.dev" - source: hosted - version: "1.3.4" - source_map_stack_trace: - dependency: transitive - description: - name: source_map_stack_trace - sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - source_maps: - dependency: transitive - description: - name: source_maps - sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" - url: "https://pub.dev" - source: hosted - version: "0.10.12" - source_span: - dependency: transitive - description: - name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" - url: "https://pub.dev" - source: hosted - version: "1.10.0" - sqlite3: - dependency: transitive - description: - name: sqlite3 - sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" - url: "https://pub.dev" - source: hosted - version: "2.4.0" - sqlite3_flutter_libs: - dependency: "direct main" - description: - name: sqlite3_flutter_libs - sha256: fb2a106a2ea6042fe57de2c47074cc31539a941819c91e105b864744605da3f5 - url: "https://pub.dev" - source: hosted - version: "0.5.21" - sqlparser: - dependency: transitive - description: - name: sqlparser - sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" - url: "https://pub.dev" - source: hosted - version: "0.34.1" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" - url: "https://pub.dev" - source: hosted - version: "1.11.1" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 - url: "https://pub.dev" - source: hosted - version: "2.1.2" - stream_transform: - dependency: transitive - description: - name: stream_transform - sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.dev" - source: hosted - version: "1.2.1" - test: - dependency: transitive - description: - name: test - sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" - url: "https://pub.dev" - source: hosted - version: "1.25.2" - test_api: - dependency: transitive - description: - name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" - url: "https://pub.dev" - source: hosted - version: "0.7.0" - test_core: - dependency: transitive - description: - name: test_core - sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" - url: "https://pub.dev" - source: hosted - version: "0.6.0" - timing: - dependency: transitive - description: - name: timing - sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - type_plus: - dependency: transitive - description: - name: type_plus - sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 - url: "https://pub.dev" - source: hosted - version: "2.1.1" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c - url: "https://pub.dev" - source: hosted - version: "1.3.2" - uuid: - dependency: transitive - description: - name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" - url: "https://pub.dev" - source: hosted - version: "3.0.7" - vector_graphics: - dependency: transitive - description: - name: vector_graphics - sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" - url: "https://pub.dev" - source: hosted - version: "1.1.11+1" - vector_graphics_codec: - dependency: transitive - description: - name: vector_graphics_codec - sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da - url: "https://pub.dev" - source: hosted - version: "1.1.11+1" - vector_graphics_compiler: - dependency: transitive - description: - name: vector_graphics_compiler - sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" - url: "https://pub.dev" - source: hosted - version: "1.1.11+1" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - vm_service: - dependency: transitive - description: - name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" - url: "https://pub.dev" - source: hosted - version: "14.2.1" - watcher: - dependency: transitive - description: - name: watcher - sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - web: - dependency: transitive - description: - name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 - url: "https://pub.dev" - source: hosted - version: "0.3.0" - web_socket_channel: - dependency: transitive - description: - name: web_socket_channel - sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b - url: "https://pub.dev" - source: hosted - version: "2.4.0" - webkit_inspection_protocol: - dependency: transitive - description: - name: webkit_inspection_protocol - sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - win32: - dependency: transitive - description: - name: win32 - sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" - url: "https://pub.dev" - source: hosted - version: "5.2.0" - xdg_directories: - dependency: transitive - description: - name: xdg_directories - sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d - url: "https://pub.dev" - source: hosted - version: "1.0.4" - xml: - dependency: transitive - description: - name: xml - sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 - url: "https://pub.dev" - source: hosted - version: "6.5.0" - yaml: - dependency: transitive - description: - name: yaml - sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" - url: "https://pub.dev" - source: hosted - version: "3.1.2" -sdks: - dart: ">=3.3.0 <3.9.0" - flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/closed_household/assets/animated_json/alert.json b/packages/closed_household/assets/animated_json/alert.json deleted file mode 100644 index 171b416cd..000000000 --- a/packages/closed_household/assets/animated_json/alert.json +++ /dev/null @@ -1,1127 +0,0 @@ -{ - "nm": "48 - Warning", - "ddd": 0, - "h": 500, - "w": 500, - "meta": { - "g": "LottieFiles AE " - }, - "layers": [ - { - "ty": 3, - "nm": "48 - Warning", - "sr": 1, - "st": 0, - "op": 144, - "ip": 0, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - 60, - 60, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 180, - 180, - 100 - ], - "ix": 6 - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 250.045, - 290.339, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 0, - "ix": 11 - } - }, - "ef": [], - "ind": 1 - }, - { - "ty": 4, - "nm": "Line", - "sr": 1, - "st": 0, - "op": 144, - "ip": 12, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - -1, - 21.25, - 0 - ], - "ix": 1 - }, - "s": { - "a": 1, - "k": [ - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0, - "y": 1 - }, - "s": [ - 0, - 0, - 100 - ], - "t": 12 - }, - { - "s": [ - 55.556, - 55.556, - 100 - ], - "t": 32 - } - ], - "ix": 6 - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 85.533, - 85.887, - 0 - ], - "ix": 2 - }, - "r": { - "a": 1, - "k": [ - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0, - "y": 1 - }, - "s": [ - 180 - ], - "t": 12 - }, - { - "s": [ - 0 - ], - "t": 32 - } - ], - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 100, - "ix": 11 - } - }, - "ef": [], - "shapes": [ - { - "ty": "gr", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Group", - "nm": "Shape 1", - "ix": 1, - "cix": 2, - "np": 3, - "it": [ - { - "ty": "sh", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Shape - Group", - "nm": "Path 1", - "ix": 1, - "d": 1, - "ks": { - "a": 0, - "k": { - "c": false, - "i": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "o": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "v": [ - [ - -1, - 80 - ], - [ - -1, - -37.5 - ] - ] - }, - "ix": 2 - } - }, - { - "ty": "st", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Graphic - Stroke", - "nm": "Stroke 1", - "lc": 2, - "lj": 1, - "ml": 4, - "o": { - "a": 0, - "k": 100, - "ix": 4 - }, - "w": { - "a": 0, - "k": 28, - "ix": 5 - }, - "c": { - "a": 0, - "k": [ - 1, - 1, - 1 - ], - "ix": 3 - } - }, - { - "ty": "tr", - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - } - } - ] - }, - { - "ty": "tm", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Filter - Trim", - "nm": "Trim Paths 1", - "ix": 2, - "e": { - "a": 0, - "k": 100, - "ix": 2 - }, - "o": { - "a": 0, - "k": 0, - "ix": 3 - }, - "s": { - "a": 1, - "k": [ - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0, - "y": 1 - }, - "s": [ - 0 - ], - "t": 22 - }, - { - "s": [ - 40 - ], - "t": 42 - } - ], - "ix": 1 - }, - "m": 1 - } - ], - "ind": 2, - "parent": 5 - }, - { - "ty": 4, - "nm": "Dot", - "sr": 1, - "st": 0, - "op": 144, - "ip": 12, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - 0, - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100, - 100 - ], - "ix": 6 - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 0, - 0, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 100, - "ix": 11 - } - }, - "ef": [], - "shapes": [ - { - "ty": "gr", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Group", - "nm": "Shape 1", - "ix": 1, - "cix": 2, - "np": 4, - "it": [ - { - "ty": "sh", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Shape - Group", - "nm": "Path 1", - "ix": 1, - "d": 1, - "ks": { - "a": 0, - "k": { - "c": false, - "i": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "o": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "v": [ - [ - -1, - 80 - ], - [ - -1, - -37.5 - ] - ] - }, - "ix": 2 - } - }, - { - "ty": "tm", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Filter - Trim", - "nm": "Trim Paths 1", - "ix": 2, - "e": { - "a": 0, - "k": 0.1, - "ix": 2 - }, - "o": { - "a": 0, - "k": 0, - "ix": 3 - }, - "s": { - "a": 0, - "k": 0, - "ix": 1 - }, - "m": 1 - }, - { - "ty": "st", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Graphic - Stroke", - "nm": "Stroke 1", - "lc": 2, - "lj": 1, - "ml": 4, - "o": { - "a": 0, - "k": 100, - "ix": 4 - }, - "w": { - "a": 0, - "k": 33, - "ix": 5 - }, - "c": { - "a": 0, - "k": [ - 1, - 1, - 1 - ], - "ix": 3 - } - }, - { - "ty": "tr", - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - } - } - ] - } - ], - "ind": 3, - "parent": 2 - }, - { - "ty": 4, - "nm": "Tri Outlines", - "sr": 1, - "st": 0, - "op": 144, - "ip": 10, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - 85.513, - 72.848, - 0 - ], - "ix": 1 - }, - "s": { - "a": 1, - "k": [ - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0.833, - "y": 0.833 - }, - "s": [ - 0, - 0, - 100 - ], - "t": 10 - }, - { - "s": [ - 100, - 100, - 100 - ], - "t": 15 - } - ], - "ix": 6, - "x": "var $bm_rt;\nvar amp, freq, decay, n, t, v;\ntry {\n amp = $bm_div(effect('Scale - Overshoot')('ADBE Slider Control-0001'), 2.5), freq = $bm_div(effect('Scale - Bounce')('ADBE Slider Control-0001'), 20), decay = $bm_div(effect('Scale - Friction')('ADBE Slider Control-0001'), 20), n = 0, 0 < numKeys && (n = nearestKey(time).index, key(n).time > time && n--), t = 0 === n ? 0 : $bm_sub(time, key(n).time), $bm_rt = 0 < n ? (v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10))), $bm_sum(value, $bm_div($bm_mul($bm_mul($bm_div(v, 100), amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))))) : value;\n} catch (e$$4) {\n $bm_rt = value = value;\n}" - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 59.955, - 37.467, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 100, - "ix": 11 - } - }, - "ef": [ - { - "ty": 5, - "mn": "ADBE Slider Control", - "nm": "Scale - Overshoot", - "ix": 1, - "en": 1, - "ef": [ - { - "ty": 0, - "mn": "ADBE Slider Control-0001", - "nm": "Slider", - "ix": 1, - "v": { - "a": 0, - "k": 10, - "ix": 1, - "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" - } - } - ] - }, - { - "ty": 5, - "mn": "ADBE Slider Control", - "nm": "Scale - Bounce", - "ix": 2, - "en": 1, - "ef": [ - { - "ty": 0, - "mn": "ADBE Slider Control-0001", - "nm": "Slider", - "ix": 1, - "v": { - "a": 0, - "k": 35, - "ix": 1, - "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" - } - } - ] - }, - { - "ty": 5, - "mn": "ADBE Slider Control", - "nm": "Scale - Friction", - "ix": 3, - "en": 1, - "ef": [ - { - "ty": 0, - "mn": "ADBE Slider Control-0001", - "nm": "Slider", - "ix": 1, - "v": { - "a": 0, - "k": 65, - "ix": 1, - "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" - } - } - ] - } - ], - "shapes": [ - { - "ty": "gr", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Group", - "nm": "Group 1", - "ix": 1, - "cix": 2, - "np": 2, - "it": [ - { - "ty": "sh", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Shape - Group", - "nm": "Path 1", - "ix": 1, - "d": 1, - "ks": { - "a": 0, - "k": { - "c": true, - "i": [ - [ - -3.315, - 5.634 - ], - [ - 0, - 0 - ], - [ - -3.267, - -5.554 - ], - [ - 0, - 0 - ], - [ - 6.537, - 0 - ], - [ - 0, - 0 - ] - ], - "o": [ - [ - 0, - 0 - ], - [ - 3.268, - -5.554 - ], - [ - 0, - 0 - ], - [ - 3.315, - 5.634 - ], - [ - 0, - 0 - ], - [ - -6.536, - 0 - ] - ], - "v": [ - [ - -81.948, - 59.861 - ], - [ - -7.284, - -67.044 - ], - [ - 7.284, - -67.044 - ], - [ - 81.948, - 59.861 - ], - [ - 74.664, - 72.598 - ], - [ - -74.664, - 72.598 - ] - ] - }, - "ix": 2 - } - }, - { - "ty": "fl", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Graphic - Fill", - "nm": "Fill 1", - "c": { - "a": 0, - "k": [ - 0.7255, - 0.098, - 0 - ], - "ix": 4 - }, - "r": 1, - "o": { - "a": 0, - "k": 100, - "ix": 5 - } - }, - { - "ty": "tr", - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "p": { - "a": 0, - "k": [ - 85.513, - 72.848 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - } - } - ] - } - ], - "ind": 4, - "parent": 1 - }, - { - "ty": 3, - "nm": "Tri", - "sr": 1, - "st": 0, - "op": 144, - "ip": 10, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - 85.513, - 72.848, - 0 - ], - "ix": 1 - }, - "s": { - "a": 1, - "k": [ - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0.833, - "y": 0.833 - }, - "s": [ - 0, - 0, - 100 - ], - "t": 10 - }, - { - "s": [ - 100, - 100, - 100 - ], - "t": 15 - } - ], - "ix": 6, - "x": "var $bm_rt;\nvar amp, freq, decay, n, t, v;\ntry {\n amp = $bm_div(effect('Scale - Overshoot')('ADBE Slider Control-0001'), 2.5), freq = $bm_div(effect('Scale - Bounce')('ADBE Slider Control-0001'), 20), decay = $bm_div(effect('Scale - Friction')('ADBE Slider Control-0001'), 20), n = 0, 0 < numKeys && (n = nearestKey(time).index, key(n).time > time && n--), t = 0 === n ? 0 : $bm_sub(time, key(n).time), $bm_rt = 0 < n ? (v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10))), $bm_sum(value, $bm_div($bm_mul($bm_mul($bm_div(v, 100), amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))))) : value;\n} catch (e$$4) {\n $bm_rt = value = value;\n}" - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 59.955, - 37.467, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 100, - "ix": 11 - } - }, - "ef": [ - { - "ty": 5, - "mn": "ADBE Slider Control", - "nm": "Scale - Overshoot", - "ix": 1, - "en": 1, - "ef": [ - { - "ty": 0, - "mn": "ADBE Slider Control-0001", - "nm": "Slider", - "ix": 1, - "v": { - "a": 0, - "k": 10, - "ix": 1, - "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" - } - } - ] - }, - { - "ty": 5, - "mn": "ADBE Slider Control", - "nm": "Scale - Bounce", - "ix": 2, - "en": 1, - "ef": [ - { - "ty": 0, - "mn": "ADBE Slider Control-0001", - "nm": "Slider", - "ix": 1, - "v": { - "a": 0, - "k": 35, - "ix": 1, - "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" - } - } - ] - }, - { - "ty": 5, - "mn": "ADBE Slider Control", - "nm": "Scale - Friction", - "ix": 3, - "en": 1, - "ef": [ - { - "ty": 0, - "mn": "ADBE Slider Control-0001", - "nm": "Slider", - "ix": 1, - "v": { - "a": 0, - "k": 65, - "ix": 1, - "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" - } - } - ] - } - ], - "ind": 5, - "parent": 1 - }, - { - "ty": 1, - "nm": "Plate_white", - "sr": 1, - "st": 0, - "op": 144, - "ip": 0, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - 250, - 250, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100, - 100 - ], - "ix": 6 - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 250, - 250, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 100, - "ix": 11 - } - }, - "ef": [], - "sc": "#ffffff", - "sh": 500, - "sw": 500, - "ind": 6 - } - ], - "v": "5.5.7", - "fr": 48, - "op": 144, - "ip": 0, - "assets": [] -} \ No newline at end of file diff --git a/packages/closed_household/assets/animated_json/error.json b/packages/closed_household/assets/animated_json/error.json deleted file mode 100644 index 96b4f9626..000000000 --- a/packages/closed_household/assets/animated_json/error.json +++ /dev/null @@ -1,728 +0,0 @@ -{ - "nm": "ckeck", - "ddd": 0, - "h": 50, - "w": 50, - "meta": { - "g": "@lottiefiles/toolkit-js 0.33.2" - }, - "layers": [ - { - "ty": 4, - "nm": "! Outlines", - "sr": 1, - "st": 0, - "op": 213, - "ip": 0, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - 2, - 12, - 0 - ], - "ix": 1 - }, - "s": { - "a": 1, - "k": [ - { - "o": { - "x": 0.653, - "y": -0.834 - }, - "i": { - "x": 0.667, - "y": 1 - }, - "s": [ - 100, - 100, - 100 - ], - "t": 60 - }, - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0.833, - "y": 0.833 - }, - "s": [ - 115, - 115, - 100 - ], - "t": 73 - }, - { - "o": { - "x": 0.333, - "y": 0 - }, - "i": { - "x": 0.127, - "y": 1.695 - }, - "s": [ - 115, - 115, - 100 - ], - "t": 83 - }, - { - "s": [ - 100, - 100, - 100 - ], - "t": 90 - } - ], - "ix": 6 - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 25, - 25, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 100, - "ix": 11 - } - }, - "ef": [], - "shapes": [ - { - "ty": "gr", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Group", - "nm": "Group 1", - "ix": 1, - "cix": 2, - "np": 4, - "it": [ - { - "ty": "sh", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Shape - Group", - "nm": "Path 1", - "ix": 1, - "d": 1, - "ks": { - "a": 0, - "k": { - "c": true, - "i": [ - [ - 0, - 1.104 - ], - [ - -1.104, - 0 - ], - [ - 0, - -1.104 - ], - [ - 1.104, - 0 - ] - ], - "o": [ - [ - 0, - -1.104 - ], - [ - 1.104, - 0 - ], - [ - 0, - 1.104 - ], - [ - -1.104, - 0 - ] - ], - "v": [ - [ - -2, - 10 - ], - [ - 0, - 8 - ], - [ - 2, - 10 - ], - [ - 0, - 12 - ] - ] - }, - "ix": 2 - } - }, - { - "ty": "sh", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Shape - Group", - "nm": "Path 2", - "ix": 2, - "d": 1, - "ks": { - "a": 0, - "k": { - "c": true, - "i": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "o": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "v": [ - [ - -1.036, - 5 - ], - [ - -2, - -6.625 - ], - [ - -2, - -12 - ], - [ - 2, - -12 - ], - [ - 2, - -6.625 - ], - [ - 1.052, - 5 - ] - ] - }, - "ix": 2 - } - }, - { - "ty": "mm", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Filter - Merge", - "nm": "Merge Paths 1", - "mm": 1 - }, - { - "ty": "fl", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Graphic - Fill", - "nm": "Fill 1", - "c": { - "a": 0, - "k": [ - 1, - 1, - 1 - ], - "ix": 4 - }, - "r": 1, - "o": { - "a": 0, - "k": 100, - "ix": 5 - } - }, - { - "ty": "tr", - "a": { - "a": 0, - "k": [ - 0.099, - 9.982 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "p": { - "a": 0, - "k": [ - 2.099, - 21.982 - ], - "ix": 2 - }, - "r": { - "a": 1, - "k": [ - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0.833, - "y": 0.833 - }, - "s": [ - 0 - ], - "t": 10 - }, - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0.833, - "y": 0.833 - }, - "s": [ - 5 - ], - "t": 12 - }, - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0.833, - "y": 0.833 - }, - "s": [ - -5 - ], - "t": 14 - }, - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0.833, - "y": 0.833 - }, - "s": [ - 5 - ], - "t": 16 - }, - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0.833, - "y": 0.833 - }, - "s": [ - -5 - ], - "t": 18 - }, - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0.833, - "y": 0.833 - }, - "s": [ - 5 - ], - "t": 20 - }, - { - "o": { - "x": 0.167, - "y": 0.167 - }, - "i": { - "x": 0.833, - "y": 0.833 - }, - "s": [ - -5 - ], - "t": 22 - }, - { - "s": [ - 0 - ], - "t": 24 - } - ], - "ix": 6 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - } - } - ] - } - ], - "ind": 1 - }, - { - "ty": 4, - "nm": "Shape Layer 1", - "sr": 1, - "st": 0, - "op": 193, - "ip": 0, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - 0, - 10, - 0 - ], - "ix": 1 - }, - "s": { - "a": 1, - "k": [ - { - "o": { - "x": 0.41, - "y": -0.602 - }, - "i": { - "x": 0.667, - "y": 1 - }, - "s": [ - 100, - 100, - 100 - ], - "t": 60 - }, - { - "o": { - "x": 0.333, - "y": 0 - }, - "i": { - "x": 0.436, - "y": 1.492 - }, - "s": [ - 115, - 115, - 100 - ], - "t": 83 - }, - { - "s": [ - 100, - 100, - 100 - ], - "t": 90 - } - ], - "ix": 6 - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 25, - 35, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 100, - "ix": 11 - } - }, - "ef": [], - "shapes": [ - { - "ty": "gr", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Group", - "nm": "Ellipse 1", - "ix": 1, - "cix": 2, - "np": 3, - "it": [ - { - "ty": "el", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Shape - Ellipse", - "nm": "Ellipse Path 1", - "d": 1, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 3 - }, - "s": { - "a": 0, - "k": [ - 40, - 40 - ], - "ix": 2 - } - }, - { - "ty": "st", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Graphic - Stroke", - "nm": "Stroke 1", - "lc": 1, - "lj": 1, - "ml": 4, - "o": { - "a": 0, - "k": 100, - "ix": 4 - }, - "w": { - "a": 0, - "k": 2, - "ix": 5 - }, - "c": { - "a": 0, - "k": [ - 1, - 1, - 1 - ], - "ix": 3 - } - }, - { - "ty": "tr", - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - } - } - ] - }, - { - "ty": "tm", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Filter - Trim", - "nm": "Trim Paths 1", - "ix": 2, - "e": { - "a": 0, - "k": 100, - "ix": 2 - }, - "o": { - "a": 0, - "k": 0, - "ix": 3 - }, - "s": { - "a": 0, - "k": 0, - "ix": 1 - }, - "m": 1 - } - ], - "ind": 2 - } - ], - "v": "5.6.5", - "fr": 60, - "op": 180, - "ip": 0, - "assets": [] -} \ No newline at end of file diff --git a/packages/closed_household/assets/animated_json/success.json b/packages/closed_household/assets/animated_json/success.json deleted file mode 100644 index 43192f708..000000000 --- a/packages/closed_household/assets/animated_json/success.json +++ /dev/null @@ -1,917 +0,0 @@ -{ - "nm": "sucess", - "ddd": 0, - "h": 120, - "w": 120, - "meta": { - "g": "LottieFiles AE 0.1.21" - }, - "layers": [ - { - "ty": 3, - "nm": "scale up null", - "sr": 1, - "st": 0, - "op": 300.00001221925, - "ip": 0, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - 0, - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 1, - "k": [ - { - "o": { - "x": 0.167, - "y": 0 - }, - "i": { - "x": 0.833, - "y": 1 - }, - "s": [ - 111, - 111, - 100 - ], - "t": 27 - }, - { - "o": { - "x": 0.167, - "y": 0 - }, - "i": { - "x": 0.833, - "y": 1 - }, - "s": [ - 101, - 101, - 100 - ], - "t": 36 - }, - { - "s": [ - 121, - 121, - 100 - ], - "t": 42.0000017106951 - } - ], - "ix": 6 - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 60, - 60, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 0, - "ix": 11 - } - }, - "ef": [], - "ind": 1 - }, - { - "ty": 4, - "nm": "spark", - "sr": 1, - "st": 35.0000014255792, - "op": 335.00001364483, - "ip": 35.0000014255792, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - 0, - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100, - 100 - ], - "ix": 6 - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 0, - 0.5, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 100, - "ix": 11 - } - }, - "ef": [], - "shapes": [ - { - "ty": "gr", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Group", - "nm": "Rectangle 1", - "ix": 1, - "cix": 2, - "np": 3, - "it": [ - { - "ty": "rc", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Shape - Rect", - "nm": "Rectangle Path 1", - "d": 1, - "p": { - "a": 1, - "k": [ - { - "o": { - "x": 0.333, - "y": 0 - }, - "i": { - "x": 0.667, - "y": 1 - }, - "s": [ - 0, - -21 - ], - "t": 35, - "ti": [ - 0, - 1.5 - ], - "to": [ - 0, - -1.5 - ] - }, - { - "s": [ - 0, - -30 - ], - "t": 53.0000021587343 - } - ], - "ix": 3 - }, - "r": { - "a": 0, - "k": 0, - "ix": 4 - }, - "s": { - "a": 1, - "k": [ - { - "o": { - "x": 0.976, - "y": 0 - }, - "i": { - "x": 0.667, - "y": 1 - }, - "s": [ - 2, - 0 - ], - "t": 35 - }, - { - "o": { - "x": 0.33299999999999996, - "y": 0 - }, - "i": { - "x": 0.15355432054499818, - "y": 0.9999999999999999 - }, - "s": [ - 2, - 8 - ], - "t": 42 - }, - { - "s": [ - 1.633, - 0 - ], - "t": 53.0000021587343 - } - ], - "ix": 2 - } - }, - { - "ty": "fl", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Graphic - Fill", - "nm": "Fill 1", - "c": { - "a": 0, - "k": [ - 0.9804, - 0.9804, - 0.9804 - ], - "ix": 4 - }, - "r": 1, - "o": { - "a": 0, - "k": 100, - "ix": 5 - } - }, - { - "ty": "tr", - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "p": { - "a": 0, - "k": [ - 0, - -8 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - } - } - ] - }, - { - "ty": "rp", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Filter - Repeater", - "nm": "Repeater 1", - "ix": 2, - "m": 1, - "c": { - "a": 0, - "k": 8, - "ix": 1 - }, - "o": { - "a": 0, - "k": 0, - "ix": 2 - }, - "tr": { - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 45, - "ix": 4 - }, - "sa": { - "a": 0, - "k": 0 - }, - "so": { - "a": 0, - "k": 100, - "ix": 5 - }, - "eo": { - "a": 0, - "k": 100, - "ix": 6 - } - } - } - ], - "ind": 2, - "parent": 1 - }, - { - "ty": 4, - "nm": "check", - "sr": 1, - "st": 10.0000004073083, - "op": 310.000012626559, - "ip": 22.0000008960784, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - 0, - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100, - 100 - ], - "ix": 6 - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 0, - 0, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 100, - "ix": 11 - } - }, - "ef": [], - "shapes": [ - { - "ty": "sh", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Shape - Group", - "nm": "Path 1", - "ix": 1, - "d": 1, - "ks": { - "a": 0, - "k": { - "c": false, - "i": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 3.5, - 3.75 - ], - [ - -12.973, - 5.349 - ], - [ - -6.124, - -9.992 - ], - [ - 12.125, - -7.431 - ], - [ - 7.431, - 12.125 - ] - ], - "o": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - -3.5, - -3.75 - ], - [ - 10.764, - -2.941 - ], - [ - 7.431, - 12.125 - ], - [ - -12.125, - 7.431 - ], - [ - -7.431, - -12.125 - ] - ], - "v": [ - [ - 15.25, - -9.688 - ], - [ - -5.75, - 10.062 - ], - [ - -16, - 0.25 - ], - [ - -6.777, - -24.849 - ], - [ - 21.955, - -13.456 - ], - [ - 13.456, - 21.955 - ], - [ - -21.955, - 13.456 - ] - ] - }, - "ix": 2 - } - }, - { - "ty": "tm", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Filter - Trim", - "nm": "Trim Paths 1", - "ix": 2, - "e": { - "a": 1, - "k": [ - { - "o": { - "x": 0.714, - "y": 0 - }, - "i": { - "x": 0.351, - "y": 1 - }, - "s": [ - 100 - ], - "t": 10 - }, - { - "s": [ - 23 - ], - "t": 40.0000016292334 - } - ], - "ix": 2 - }, - "o": { - "a": 0, - "k": 0, - "ix": 3 - }, - "s": { - "a": 1, - "k": [ - { - "o": { - "x": 0.742, - "y": 0 - }, - "i": { - "x": 0.363, - "y": 1 - }, - "s": [ - 100 - ], - "t": 17 - }, - { - "s": [ - 0 - ], - "t": 45.0000018328876 - } - ], - "ix": 1 - }, - "m": 1 - }, - { - "ty": "st", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Graphic - Stroke", - "nm": "Stroke 1", - "lc": 1, - "lj": 1, - "ml": 4, - "o": { - "a": 0, - "k": 100, - "ix": 4 - }, - "w": { - "a": 0, - "k": 4, - "ix": 5 - }, - "c": { - "a": 0, - "k": [ - 0.9804, - 0.9804, - 0.9804 - ], - "ix": 3 - } - } - ], - "ind": 3, - "parent": 1 - }, - { - "ty": 4, - "nm": "circle", - "sr": 1, - "st": 0, - "op": 300.00001221925, - "ip": 0, - "hd": false, - "ddd": 0, - "bm": 0, - "hasMask": false, - "ao": 0, - "ks": { - "a": { - "a": 0, - "k": [ - 0, - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100, - 100 - ], - "ix": 6 - }, - "sk": { - "a": 0, - "k": 0 - }, - "p": { - "a": 0, - "k": [ - 0, - 0, - 0 - ], - "ix": 2 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "sa": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 100, - "ix": 11 - } - }, - "ef": [], - "shapes": [ - { - "ty": "sh", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Shape - Group", - "nm": "Path 1", - "ix": 1, - "d": 1, - "ks": { - "a": 0, - "k": { - "c": true, - "i": [ - [ - -14.221, - 0 - ], - [ - 0, - -14.221 - ], - [ - 14.221, - 0 - ], - [ - 0, - 14.221 - ] - ], - "o": [ - [ - 14.221, - 0 - ], - [ - 0, - 14.221 - ], - [ - -14.221, - 0 - ], - [ - 0, - -14.221 - ] - ], - "v": [ - [ - 0, - -25.75 - ], - [ - 25.75, - 0 - ], - [ - 0, - 25.75 - ], - [ - -25.75, - 0 - ] - ] - }, - "ix": 2 - } - }, - { - "ty": "st", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Graphic - Stroke", - "nm": "Stroke 1", - "lc": 1, - "lj": 1, - "ml": 4, - "o": { - "a": 0, - "k": 100, - "ix": 4 - }, - "w": { - "a": 0, - "k": 2, - "ix": 5 - }, - "c": { - "a": 0, - "k": [ - 0.9804, - 0.9804, - 0.9804 - ], - "ix": 3 - } - }, - { - "ty": "tm", - "bm": 0, - "hd": false, - "mn": "ADBE Vector Filter - Trim", - "nm": "Trim Paths 1", - "ix": 3, - "e": { - "a": 1, - "k": [ - { - "o": { - "x": 0.714, - "y": 0 - }, - "i": { - "x": 0.351, - "y": 1 - }, - "s": [ - 100 - ], - "t": 0 - }, - { - "s": [ - 100 - ], - "t": 30.0000012219251 - } - ], - "ix": 2 - }, - "o": { - "a": 0, - "k": 0, - "ix": 3 - }, - "s": { - "a": 1, - "k": [ - { - "o": { - "x": 0.742, - "y": 0 - }, - "i": { - "x": 0.363, - "y": 1 - }, - "s": [ - 100 - ], - "t": 7 - }, - { - "s": [ - 0 - ], - "t": 33.0000013441176 - } - ], - "ix": 1 - }, - "m": 1 - } - ], - "ind": 4, - "parent": 1 - } - ], - "v": "5.5.7", - "fr": 29.9700012207031, - "op": 60.0000024438501, - "ip": 0, - "assets": [] -} \ No newline at end of file diff --git a/packages/closed_household/lib/pages/closed_household_acknowledgement.dart b/packages/closed_household/lib/pages/closed_household_acknowledgement.dart index 5167ac4a3..b4dd01487 100644 --- a/packages/closed_household/lib/pages/closed_household_acknowledgement.dart +++ b/packages/closed_household/lib/pages/closed_household_acknowledgement.dart @@ -40,8 +40,9 @@ class _ClosedHouseholdAcknowledgementPageState label: localizations .translate(i18.acknowledgementSuccess.actionLabelText), onPressed: () { - context.router.popUntilRoot(); - context.router.maybePop(); + final parent = context.router.parent() as StackRouter; + // Pop twice to navigate back to the previous screen + parent.popUntilRoot(); }, type: ButtonType.primary, size: ButtonSize.large, diff --git a/packages/closed_household/lib/pages/closed_household_summary.dart b/packages/closed_household/lib/pages/closed_household_summary.dart index 5138de570..ddae49932 100644 --- a/packages/closed_household/lib/pages/closed_household_summary.dart +++ b/packages/closed_household/lib/pages/closed_household_summary.dart @@ -57,7 +57,6 @@ class ClosedHouseholdSummaryPageState showcaseButton: ShowcaseButton(), ), footer: DigitCard( - // margin: EdgeInsets.fromLTRB(0, theme.spacerTheme.spacer2, 0, 0), padding: EdgeInsets.all(theme.spacerTheme.spacer2), children: [ diff --git a/packages/closed_household/pubspec.yaml b/packages/closed_household/pubspec.yaml index 1ca6075f2..1896165d3 100644 --- a/packages/closed_household/pubspec.yaml +++ b/packages/closed_household/pubspec.yaml @@ -63,5 +63,4 @@ dev_dependencies: flutter: assets: - assets/images/ - - assets/icons/svg/ - - assets/animated_json/ \ No newline at end of file + - assets/icons/svg/ \ No newline at end of file diff --git a/packages/digit_components/example/pubspec.lock b/packages/digit_components/example/pubspec.lock index e894ada52..5f036b9d0 100644 --- a/packages/digit_components/example/pubspec.lock +++ b/packages/digit_components/example/pubspec.lock @@ -519,30 +519,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" - url: "https://pub.dev" - source: hosted - version: "10.0.4" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" - url: "https://pub.dev" - source: hosted - version: "3.0.3" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://pub.dev" - source: hosted - version: "3.0.1" lints: dependency: transitive description: @@ -595,26 +571,26 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.5.0" meta: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.10.0" mime: dependency: transitive description: @@ -683,10 +659,10 @@ packages: dependency: transitive description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.8.3" path_provider: dependency: transitive description: @@ -944,26 +920,26 @@ packages: dependency: transitive description: name: test - sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" + sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f url: "https://pub.dev" source: hosted - version: "1.25.2" + version: "1.24.9" test_api: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.6.1" test_core: dependency: transitive description: name: test_core - sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" + sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.5.9" timing: dependency: transitive description: @@ -992,10 +968,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 url: "https://pub.dev" source: hosted - version: "14.2.1" + version: "13.0.0" watcher: dependency: transitive description: @@ -1061,5 +1037,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.3.0 <3.9.0" - flutter: ">=3.18.0-18.0.pre.54" + dart: ">=3.2.0 <3.9.0" + flutter: ">=3.16.0" diff --git a/packages/digit_components/pubspec.lock b/packages/digit_components/pubspec.lock index 328678755..e9d52e3a2 100644 --- a/packages/digit_components/pubspec.lock +++ b/packages/digit_components/pubspec.lock @@ -511,30 +511,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" - url: "https://pub.dev" - source: hosted - version: "10.0.4" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" - url: "https://pub.dev" - source: hosted - version: "3.0.3" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://pub.dev" - source: hosted - version: "3.0.1" lints: dependency: transitive description: @@ -587,26 +563,26 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.5.0" meta: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.10.0" mime: dependency: transitive description: @@ -675,10 +651,10 @@ packages: dependency: transitive description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.8.3" path_provider: dependency: transitive description: @@ -928,26 +904,26 @@ packages: dependency: transitive description: name: test - sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" + sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f url: "https://pub.dev" source: hosted - version: "1.25.2" + version: "1.24.9" test_api: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.6.1" test_core: dependency: transitive description: name: test_core - sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" + sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.5.9" timing: dependency: transitive description: @@ -984,10 +960,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 url: "https://pub.dev" source: hosted - version: "14.2.1" + version: "13.0.0" watcher: dependency: transitive description: @@ -1045,5 +1021,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.3.0 <3.9.0" - flutter: ">=3.18.0-18.0.pre.54" + dart: ">=3.2.0 <3.9.0" + flutter: ">=3.16.0" diff --git a/packages/digit_data_model/pubspec.lock b/packages/digit_data_model/pubspec.lock index ba44496e5..3f0249b33 100644 --- a/packages/digit_data_model/pubspec.lock +++ b/packages/digit_data_model/pubspec.lock @@ -506,30 +506,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" - url: "https://pub.dev" - source: hosted - version: "10.0.4" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" - url: "https://pub.dev" - source: hosted - version: "3.0.3" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://pub.dev" - source: hosted - version: "3.0.1" lints: dependency: transitive description: @@ -550,26 +526,26 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.5.0" meta: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.10.0" mime: dependency: transitive description: @@ -614,10 +590,10 @@ packages: dependency: "direct main" description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.8.3" path_provider: dependency: "direct main" description: @@ -891,26 +867,26 @@ packages: dependency: transitive description: name: test - sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" + sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f url: "https://pub.dev" source: hosted - version: "1.25.2" + version: "1.24.9" test_api: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.6.1" test_core: dependency: transitive description: name: test_core - sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" + sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.5.9" time: dependency: transitive description: @@ -963,10 +939,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 url: "https://pub.dev" source: hosted - version: "14.2.1" + version: "13.0.0" watcher: dependency: transitive description: @@ -975,6 +951,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" + web: + dependency: transitive + description: + name: web + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + url: "https://pub.dev" + source: hosted + version: "0.3.0" web_socket_channel: dependency: transitive description: @@ -1032,5 +1016,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.3.0 <4.0.0" - flutter: ">=3.18.0-18.0.pre.54" + dart: ">=3.2.0 <4.0.0" + flutter: ">=3.16.0" diff --git a/packages/digit_dss/pubspec.yaml b/packages/digit_dss/pubspec.yaml index a5496ae33..05d3d0979 100644 --- a/packages/digit_dss/pubspec.yaml +++ b/packages/digit_dss/pubspec.yaml @@ -5,7 +5,7 @@ homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/ repository: https://github.com/egovernments/health-campaign-field-worker-app environment: - sdk: '>=3.2.3 <4.0.0' + sdk: '>=3.2.0 <4.0.0' flutter: ">=1.17.0" dependencies: diff --git a/packages/digit_firebase_services/pubspec.lock b/packages/digit_firebase_services/pubspec.lock index f254bf339..671cb44d2 100644 --- a/packages/digit_firebase_services/pubspec.lock +++ b/packages/digit_firebase_services/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" + sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 url: "https://pub.dev" source: hosted - version: "67.0.0" + version: "64.0.0" _flutterfire_internals: dependency: transitive description: @@ -21,10 +21,10 @@ packages: dependency: transitive description: name: analyzer - sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" + sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" url: "https://pub.dev" source: hosted - version: "6.4.1" + version: "6.2.0" ansicolor: dependency: transitive description: @@ -101,10 +101,10 @@ packages: dependency: transitive description: name: crypto - sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27 + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab url: "https://pub.dev" source: hosted - version: "3.0.5" + version: "3.0.3" dart_mappable: dependency: transitive description: @@ -223,30 +223,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.7" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" - url: "https://pub.dev" - source: hosted - version: "10.0.4" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" - url: "https://pub.dev" - source: hosted - version: "3.0.3" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://pub.dev" - source: hosted - version: "3.0.1" lints: dependency: transitive description: @@ -267,26 +243,26 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.5.0" meta: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.10.0" package_config: dependency: transitive description: @@ -299,10 +275,10 @@ packages: dependency: transitive description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.8.3" plugin_platform_interface: dependency: transitive description: @@ -376,10 +352,10 @@ packages: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.6.1" type_plus: dependency: transitive description: @@ -404,14 +380,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - vm_service: - dependency: transitive - description: - name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" - url: "https://pub.dev" - source: hosted - version: "14.2.1" watcher: dependency: transitive description: @@ -437,5 +405,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <4.0.0" - flutter: ">=3.18.0-18.0.pre.54" + dart: ">=3.2.0 <4.0.0" + flutter: ">=3.3.0" diff --git a/packages/digit_scanner/pubspec.lock b/packages/digit_scanner/pubspec.lock index 0447062df..1a530682d 100644 --- a/packages/digit_scanner/pubspec.lock +++ b/packages/digit_scanner/pubspec.lock @@ -656,30 +656,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" - url: "https://pub.dev" - source: hosted - version: "10.0.4" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" - url: "https://pub.dev" - source: hosted - version: "3.0.3" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://pub.dev" - source: hosted - version: "3.0.1" lints: dependency: transitive description: @@ -732,26 +708,26 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.5.0" meta: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.10.0" mime: dependency: transitive description: @@ -820,10 +796,10 @@ packages: dependency: "direct main" description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.8.3" path_parsing: dependency: transitive description: @@ -1097,26 +1073,26 @@ packages: dependency: transitive description: name: test - sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" + sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f url: "https://pub.dev" source: hosted - version: "1.25.2" + version: "1.24.9" test_api: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.6.1" test_core: dependency: transitive description: name: test_core - sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" + sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.5.9" timing: dependency: transitive description: @@ -1177,10 +1153,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 url: "https://pub.dev" source: hosted - version: "14.2.1" + version: "13.0.0" watcher: dependency: transitive description: @@ -1246,5 +1222,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.3.0 <3.9.0" - flutter: ">=3.18.0-18.0.pre.54" + dart: ">=3.2.0 <3.9.0" + flutter: ">=3.16.0" diff --git a/packages/forms_engine/pubspec.lock b/packages/forms_engine/pubspec.lock index a52776731..1fbd7a910 100644 --- a/packages/forms_engine/pubspec.lock +++ b/packages/forms_engine/pubspec.lock @@ -504,30 +504,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.7.1" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" - url: "https://pub.dev" - source: hosted - version: "10.0.4" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" - url: "https://pub.dev" - source: hosted - version: "3.0.3" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://pub.dev" - source: hosted - version: "3.0.1" lints: dependency: transitive description: @@ -580,26 +556,26 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.5.0" meta: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.10.0" mime: dependency: transitive description: @@ -668,10 +644,10 @@ packages: dependency: transitive description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.8.3" path_provider: dependency: transitive description: @@ -929,26 +905,26 @@ packages: dependency: transitive description: name: test - sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" + sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f url: "https://pub.dev" source: hosted - version: "1.25.2" + version: "1.24.9" test_api: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.6.1" test_core: dependency: transitive description: name: test_core - sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" + sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.5.9" timing: dependency: transitive description: @@ -977,10 +953,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 url: "https://pub.dev" source: hosted - version: "14.2.1" + version: "13.0.0" watcher: dependency: transitive description: @@ -1038,5 +1014,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.3.0 <3.9.0" - flutter: ">=3.18.0-18.0.pre.54" + dart: ">=3.2.0 <3.9.0" + flutter: ">=3.16.0" diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index 18ff6dab0..a7dc9d34b 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -807,30 +807,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" - url: "https://pub.dev" - source: hosted - version: "10.0.4" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" - url: "https://pub.dev" - source: hosted - version: "3.0.3" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://pub.dev" - source: hosted - version: "3.0.1" lints: dependency: transitive description: @@ -883,26 +859,26 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.5.0" meta: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.10.0" mime: dependency: transitive description: @@ -971,10 +947,10 @@ packages: dependency: "direct main" description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.8.3" path_parsing: dependency: transitive description: @@ -1312,26 +1288,26 @@ packages: dependency: transitive description: name: test - sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" + sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f url: "https://pub.dev" source: hosted - version: "1.25.2" + version: "1.24.9" test_api: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.6.1" test_core: dependency: transitive description: name: test_core - sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" + sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.5.9" timing: dependency: transitive description: @@ -1400,10 +1376,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 url: "https://pub.dev" source: hosted - version: "14.2.1" + version: "13.0.0" watcher: dependency: transitive description: @@ -1469,5 +1445,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.3.0 <3.9.0" - flutter: ">=3.18.0-18.0.pre.54" + dart: ">=3.2.0 <3.9.0" + flutter: ">=3.16.0" diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock deleted file mode 100644 index 27892bc2f..000000000 --- a/packages/referral_reconciliation/pubspec.lock +++ /dev/null @@ -1,1481 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a - url: "https://pub.dev" - source: hosted - version: "61.0.0" - analyzer: - dependency: transitive - description: - name: analyzer - sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 - url: "https://pub.dev" - source: hosted - version: "5.13.0" - analyzer_plugin: - dependency: transitive - description: - name: analyzer_plugin - sha256: c1d5f167683de03d5ab6c3b53fc9aeefc5d59476e7810ba7bbddff50c6f4392d - url: "https://pub.dev" - source: hosted - version: "0.11.2" - ansicolor: - dependency: transitive - description: - name: ansicolor - sha256: "8bf17a8ff6ea17499e40a2d2542c2f481cd7615760c6d34065cb22bfd22e6880" - url: "https://pub.dev" - source: hosted - version: "2.0.2" - archive: - dependency: transitive - description: - name: archive - sha256: "6bd38d335f0954f5fad9c79e614604fbf03a0e5b975923dd001b6ea965ef5b4b" - url: "https://pub.dev" - source: hosted - version: "3.6.0" - args: - dependency: transitive - description: - name: args - sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" - url: "https://pub.dev" - source: hosted - version: "2.5.0" - async: - dependency: transitive - description: - name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" - url: "https://pub.dev" - source: hosted - version: "2.11.0" - audioplayers: - dependency: transitive - description: - name: audioplayers - sha256: c05c6147124cd63e725e861335a8b4d57300b80e6e92cea7c145c739223bbaef - url: "https://pub.dev" - source: hosted - version: "5.2.1" - audioplayers_android: - dependency: transitive - description: - name: audioplayers_android - sha256: b00e1a0e11365d88576320ec2d8c192bc21f1afb6c0e5995d1c57ae63156acb5 - url: "https://pub.dev" - source: hosted - version: "4.0.3" - audioplayers_darwin: - dependency: transitive - description: - name: audioplayers_darwin - sha256: "3034e99a6df8d101da0f5082dcca0a2a99db62ab1d4ddb3277bed3f6f81afe08" - url: "https://pub.dev" - source: hosted - version: "5.0.2" - audioplayers_linux: - dependency: transitive - description: - name: audioplayers_linux - sha256: "60787e73fefc4d2e0b9c02c69885402177e818e4e27ef087074cf27c02246c9e" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - audioplayers_platform_interface: - dependency: transitive - description: - name: audioplayers_platform_interface - sha256: "365c547f1bb9e77d94dd1687903a668d8f7ac3409e48e6e6a3668a1ac2982adb" - url: "https://pub.dev" - source: hosted - version: "6.1.0" - audioplayers_web: - dependency: transitive - description: - name: audioplayers_web - sha256: "22cd0173e54d92bd9b2c80b1204eb1eb159ece87475ab58c9788a70ec43c2a62" - url: "https://pub.dev" - source: hosted - version: "4.1.0" - audioplayers_windows: - dependency: transitive - description: - name: audioplayers_windows - sha256: "9536812c9103563644ada2ef45ae523806b0745f7a78e89d1b5fb1951de90e1a" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - auto_route: - dependency: "direct main" - description: - name: auto_route - sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 - url: "https://pub.dev" - source: hosted - version: "7.9.2" - auto_route_generator: - dependency: "direct dev" - description: - name: auto_route_generator - sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" - url: "https://pub.dev" - source: hosted - version: "7.3.2" - bloc: - dependency: transitive - description: - name: bloc - sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e" - url: "https://pub.dev" - source: hosted - version: "8.1.4" - bloc_test: - dependency: "direct dev" - description: - name: bloc_test - sha256: "165a6ec950d9252ebe36dc5335f2e6eb13055f33d56db0eeb7642768849b43d2" - url: "https://pub.dev" - source: hosted - version: "9.1.7" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - build: - dependency: transitive - description: - name: build - sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" - url: "https://pub.dev" - source: hosted - version: "2.4.1" - build_config: - dependency: transitive - description: - name: build_config - sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 - url: "https://pub.dev" - source: hosted - version: "1.1.1" - build_daemon: - dependency: transitive - description: - name: build_daemon - sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" - url: "https://pub.dev" - source: hosted - version: "4.0.1" - build_resolvers: - dependency: transitive - description: - name: build_resolvers - sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" - url: "https://pub.dev" - source: hosted - version: "2.4.2" - build_runner: - dependency: "direct dev" - description: - name: build_runner - sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" - url: "https://pub.dev" - source: hosted - version: "2.4.9" - build_runner_core: - dependency: transitive - description: - name: build_runner_core - sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" - url: "https://pub.dev" - source: hosted - version: "7.3.0" - built_collection: - dependency: transitive - description: - name: built_collection - sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" - url: "https://pub.dev" - source: hosted - version: "5.1.1" - built_value: - dependency: transitive - description: - name: built_value - sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb - url: "https://pub.dev" - source: hosted - version: "8.9.2" - camera: - dependency: transitive - description: - name: camera - sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" - url: "https://pub.dev" - source: hosted - version: "0.10.5+9" - camera_android: - dependency: transitive - description: - name: camera_android - sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 - url: "https://pub.dev" - source: hosted - version: "0.10.9+2" - camera_avfoundation: - dependency: transitive - description: - name: camera_avfoundation - sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" - url: "https://pub.dev" - source: hosted - version: "0.9.13+10" - camera_platform_interface: - dependency: transitive - description: - name: camera_platform_interface - sha256: a250314a48ea337b35909a4c9d5416a208d736dcb01d0b02c6af122be66660b0 - url: "https://pub.dev" - source: hosted - version: "2.7.4" - camera_web: - dependency: transitive - description: - name: camera_web - sha256: "9e9aba2fbab77ce2472924196ff8ac4dd8f9126c4f9a3096171cd1d870d6b26c" - url: "https://pub.dev" - source: hosted - version: "0.3.3" - characters: - dependency: transitive - description: - name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - charcode: - dependency: transitive - description: - name: charcode - sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 - url: "https://pub.dev" - source: hosted - version: "1.3.1" - checked_yaml: - dependency: transitive - description: - name: checked_yaml - sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff - url: "https://pub.dev" - source: hosted - version: "2.0.3" - cli_util: - dependency: transitive - description: - name: cli_util - sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 - url: "https://pub.dev" - source: hosted - version: "0.4.1" - clock: - dependency: transitive - description: - name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.dev" - source: hosted - version: "1.1.1" - code_builder: - dependency: transitive - description: - name: code_builder - sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 - url: "https://pub.dev" - source: hosted - version: "4.10.0" - collection: - dependency: "direct main" - description: - name: collection - sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a - url: "https://pub.dev" - source: hosted - version: "1.18.0" - convert: - dependency: transitive - description: - name: convert - sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" - url: "https://pub.dev" - source: hosted - version: "3.1.1" - coverage: - dependency: transitive - description: - name: coverage - sha256: "3945034e86ea203af7a056d98e98e42a5518fff200d6e8e6647e1886b07e936e" - url: "https://pub.dev" - source: hosted - version: "1.8.0" - cross_file: - dependency: transitive - description: - name: cross_file - sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e - url: "https://pub.dev" - source: hosted - version: "0.3.3+8" - crypto: - dependency: transitive - description: - name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab - url: "https://pub.dev" - source: hosted - version: "3.0.3" - csslib: - dependency: transitive - description: - name: csslib - sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - cupertino_icons: - dependency: transitive - description: - name: cupertino_icons - sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 - url: "https://pub.dev" - source: hosted - version: "1.0.8" - dart_code_metrics: - dependency: "direct dev" - description: - name: dart_code_metrics - sha256: "3dede3f7abc077a4181ec7445448a289a9ce08e2981e6a4d49a3fb5099d47e1f" - url: "https://pub.dev" - source: hosted - version: "5.7.6" - dart_code_metrics_presets: - dependency: transitive - description: - name: dart_code_metrics_presets - sha256: b71eadf02a3787ebd5c887623f83f6fdc204d45c75a081bd636c4104b3fd8b73 - url: "https://pub.dev" - source: hosted - version: "1.8.0" - dart_mappable: - dependency: "direct main" - description: - name: dart_mappable - sha256: "47269caf2060533c29b823ff7fa9706502355ffcb61e7f2a374e3a0fb2f2c3f0" - url: "https://pub.dev" - source: hosted - version: "4.2.2" - dart_mappable_builder: - dependency: "direct dev" - description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.0" - dart_style: - dependency: transitive - description: - name: dart_style - sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - db_viewer: - dependency: transitive - description: - name: db_viewer - sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - diff_match_patch: - dependency: transitive - description: - name: diff_match_patch - sha256: "2efc9e6e8f449d0abe15be240e2c2a3bcd977c8d126cfd70598aee60af35c0a4" - url: "https://pub.dev" - source: hosted - version: "0.4.1" - digit_components: - dependency: "direct main" - description: - name: digit_components - sha256: "9cca4d9a546037080afe02b6ade82fdf01574e11f5656ad12120fd6966578616" - url: "https://pub.dev" - source: hosted - version: "1.0.1+1" - digit_data_model: - dependency: "direct main" - description: - name: digit_data_model - sha256: "0b81e96636496b56b4f9c5d918690a17d8985d6b131e0ab54968eb5471ee4f54" - url: "https://pub.dev" - source: hosted - version: "1.0.3+1" - digit_scanner: - dependency: "direct main" - description: - name: digit_scanner - sha256: "9862c4885465bb1942e36dc9b42596c201648db9b0f5ffb8ad768e2409fc2742" - url: "https://pub.dev" - source: hosted - version: "1.0.3+1" - dio: - dependency: transitive - description: - name: dio - sha256: "11e40df547d418cc0c4900a9318b26304e665da6fa4755399a9ff9efd09034b5" - url: "https://pub.dev" - source: hosted - version: "5.4.3+1" - drift: - dependency: "direct main" - description: - name: drift - sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 - url: "https://pub.dev" - source: hosted - version: "2.15.0" - drift_db_viewer: - dependency: "direct main" - description: - name: drift_db_viewer - sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - drift_dev: - dependency: "direct dev" - description: - name: drift_dev - sha256: c037d9431b6f8dc633652b1469e5f53aaec6e4eb405ed29dd232fa888ef10d88 - url: "https://pub.dev" - source: hosted - version: "2.15.0" - easy_stepper: - dependency: transitive - description: - name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" - url: "https://pub.dev" - source: hosted - version: "0.5.2+1" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - ffi: - dependency: transitive - description: - name: ffi - sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - file: - dependency: transitive - description: - name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" - url: "https://pub.dev" - source: hosted - version: "6.1.4" - fixnum: - dependency: transitive - description: - name: fixnum - sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_bloc: - dependency: "direct main" - description: - name: flutter_bloc - sha256: f0ecf6e6eb955193ca60af2d5ca39565a86b8a142452c5b24d96fb477428f4d2 - url: "https://pub.dev" - source: hosted - version: "8.1.5" - flutter_focus_watcher: - dependency: transitive - description: - name: flutter_focus_watcher - sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility: - dependency: "direct main" - description: - name: flutter_keyboard_visibility - sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" - url: "https://pub.dev" - source: hosted - version: "5.4.1" - flutter_keyboard_visibility_linux: - dependency: transitive - description: - name: flutter_keyboard_visibility_linux - sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_macos: - dependency: transitive - description: - name: flutter_keyboard_visibility_macos - sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_platform_interface: - dependency: transitive - description: - name: flutter_keyboard_visibility_platform_interface - sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_web: - dependency: transitive - description: - name: flutter_keyboard_visibility_web - sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_windows: - dependency: transitive - description: - name: flutter_keyboard_visibility_windows - sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_lints: - dependency: "direct dev" - description: - name: flutter_lints - sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - flutter_plugin_android_lifecycle: - dependency: transitive - description: - name: flutter_plugin_android_lifecycle - sha256: "8cf40eebf5dec866a6d1956ad7b4f7016e6c0cc69847ab946833b7d43743809f" - url: "https://pub.dev" - source: hosted - version: "2.0.19" - flutter_spinkit: - dependency: transitive - description: - name: flutter_spinkit - sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 - url: "https://pub.dev" - source: hosted - version: "5.2.1" - flutter_svg: - dependency: "direct main" - description: - name: flutter_svg - sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c - url: "https://pub.dev" - source: hosted - version: "2.0.9" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" - flutter_web_plugins: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - fluttertoast: - dependency: "direct main" - description: - name: fluttertoast - sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" - url: "https://pub.dev" - source: hosted - version: "8.2.5" - freezed: - dependency: "direct dev" - description: - name: freezed - sha256: a434911f643466d78462625df76fd9eb13e57348ff43fe1f77bbe909522c67a1 - url: "https://pub.dev" - source: hosted - version: "2.5.2" - freezed_annotation: - dependency: "direct main" - description: - name: freezed_annotation - sha256: c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d - url: "https://pub.dev" - source: hosted - version: "2.4.1" - frontend_server_client: - dependency: transitive - description: - name: frontend_server_client - sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" - url: "https://pub.dev" - source: hosted - version: "3.2.0" - glob: - dependency: transitive - description: - name: glob - sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - google_fonts: - dependency: transitive - description: - name: google_fonts - sha256: "6b6f10f0ce3c42f6552d1c70d2c28d764cf22bb487f50f66cca31dcd5194f4d6" - url: "https://pub.dev" - source: hosted - version: "4.0.4" - google_mlkit_barcode_scanning: - dependency: transitive - description: - name: google_mlkit_barcode_scanning - sha256: "965183a8cd5cef8477ceea5dbdf29c34a739cf0cfbf1bdad54cd3f9f1807afe5" - url: "https://pub.dev" - source: hosted - version: "0.10.0" - google_mlkit_commons: - dependency: transitive - description: - name: google_mlkit_commons - sha256: "046586b381cdd139f7f6a05ad6998f7e339d061bd70158249907358394b5f496" - url: "https://pub.dev" - source: hosted - version: "0.6.1" - graphs: - dependency: transitive - description: - name: graphs - sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 - url: "https://pub.dev" - source: hosted - version: "2.3.1" - group_radio_button: - dependency: "direct main" - description: - name: group_radio_button - sha256: "204de8d16b224be7fc72dade0c3afd410ff5a34417d89f74f0fd8be7a8c2b4d6" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - gs1_barcode_parser: - dependency: transitive - description: - name: gs1_barcode_parser - sha256: "9aaff47bdab7177deaf9248cc861ef41cf611d3f828498cb40b64bedcbf53391" - url: "https://pub.dev" - source: hosted - version: "1.0.5" - horizontal_data_table: - dependency: transitive - description: - name: horizontal_data_table - sha256: c8ab5256bbced698a729f3e0ff2cb0e8e97416cdbb082860370eaf883badf722 - url: "https://pub.dev" - source: hosted - version: "4.3.1" - html: - dependency: transitive - description: - name: html - sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" - url: "https://pub.dev" - source: hosted - version: "0.15.4" - http: - dependency: transitive - description: - name: http - sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" - url: "https://pub.dev" - source: hosted - version: "0.13.6" - http_multi_server: - dependency: transitive - description: - name: http_multi_server - sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" - url: "https://pub.dev" - source: hosted - version: "3.2.1" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - intl: - dependency: "direct main" - description: - name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" - url: "https://pub.dev" - source: hosted - version: "0.18.1" - io: - dependency: transitive - description: - name: io - sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" - url: "https://pub.dev" - source: hosted - version: "1.0.4" - isar: - dependency: transitive - description: - name: isar - sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - isar_flutter_libs: - dependency: transitive - description: - name: isar_flutter_libs - sha256: bc6768cc4b9c61aabff77152e7f33b4b17d2fc93134f7af1c3dd51500fe8d5e8 - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - js: - dependency: transitive - description: - name: js - sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 - url: "https://pub.dev" - source: hosted - version: "0.6.7" - json_annotation: - dependency: transitive - description: - name: json_annotation - sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" - url: "https://pub.dev" - source: hosted - version: "4.9.0" - json_serializable: - dependency: "direct dev" - description: - name: json_serializable - sha256: ea1432d167339ea9b5bb153f0571d0039607a873d6e04e0117af043f14a1fd4b - url: "https://pub.dev" - source: hosted - version: "6.8.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" - url: "https://pub.dev" - source: hosted - version: "10.0.4" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" - url: "https://pub.dev" - source: hosted - version: "3.0.3" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://pub.dev" - source: hosted - version: "3.0.1" - lints: - dependency: transitive - description: - name: lints - sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 - url: "https://pub.dev" - source: hosted - version: "3.0.0" - location: - dependency: transitive - description: - name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" - url: "https://pub.dev" - source: hosted - version: "5.0.3" - location_platform_interface: - dependency: transitive - description: - name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" - url: "https://pub.dev" - source: hosted - version: "3.1.2" - location_web: - dependency: transitive - description: - name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b - url: "https://pub.dev" - source: hosted - version: "4.2.0" - logging: - dependency: transitive - description: - name: logging - sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - lottie: - dependency: transitive - description: - name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 - url: "https://pub.dev" - source: hosted - version: "2.7.0" - matcher: - dependency: transitive - description: - name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb - url: "https://pub.dev" - source: hosted - version: "0.12.16+1" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" - url: "https://pub.dev" - source: hosted - version: "0.8.0" - meta: - dependency: transitive - description: - name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" - url: "https://pub.dev" - source: hosted - version: "1.12.0" - mime: - dependency: transitive - description: - name: mime - sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" - url: "https://pub.dev" - source: hosted - version: "1.0.5" - mocktail: - dependency: "direct dev" - description: - name: mocktail - sha256: c4b5007d91ca4f67256e720cb1b6d704e79a510183a12fa551021f652577dce6 - url: "https://pub.dev" - source: hosted - version: "1.0.3" - nested: - dependency: transitive - description: - name: nested - sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - node_preamble: - dependency: transitive - description: - name: node_preamble - sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" - url: "https://pub.dev" - source: hosted - version: "2.0.2" - overlay_builder: - dependency: "direct main" - description: - name: overlay_builder - sha256: "58b97bc5f67a2e2bb7006dd88e697ac757dfffc9dbd1e7dfc1917fb510a4b5c8" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - package_config: - dependency: transitive - description: - name: package_config - sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - package_info_plus: - dependency: transitive - description: - name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" - url: "https://pub.dev" - source: hosted - version: "5.0.1" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" - url: "https://pub.dev" - source: hosted - version: "2.0.1" - path: - dependency: "direct main" - description: - name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" - url: "https://pub.dev" - source: hosted - version: "1.9.0" - path_parsing: - dependency: transitive - description: - name: path_parsing - sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf - url: "https://pub.dev" - source: hosted - version: "1.0.1" - path_provider: - dependency: "direct main" - description: - name: path_provider - sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 - url: "https://pub.dev" - source: hosted - version: "2.1.3" - path_provider_android: - dependency: transitive - description: - name: path_provider_android - sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d - url: "https://pub.dev" - source: hosted - version: "2.2.4" - path_provider_foundation: - dependency: transitive - description: - name: path_provider_foundation - sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - path_provider_linux: - dependency: transitive - description: - name: path_provider_linux - sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 - url: "https://pub.dev" - source: hosted - version: "2.2.1" - path_provider_platform_interface: - dependency: transitive - description: - name: path_provider_platform_interface - sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - path_provider_windows: - dependency: transitive - description: - name: path_provider_windows - sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" - url: "https://pub.dev" - source: hosted - version: "2.2.1" - petitparser: - dependency: transitive - description: - name: petitparser - sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 - url: "https://pub.dev" - source: hosted - version: "6.0.2" - platform: - dependency: transitive - description: - name: platform - sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" - url: "https://pub.dev" - source: hosted - version: "3.1.4" - plugin_platform_interface: - dependency: transitive - description: - name: plugin_platform_interface - sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" - url: "https://pub.dev" - source: hosted - version: "2.1.8" - pluto_grid: - dependency: "direct main" - description: - name: pluto_grid - sha256: e77c34a33dd9d74abbe20ba1df96474dded150dd042c7f7495be1bc2c26bd37f - url: "https://pub.dev" - source: hosted - version: "7.0.2" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" - pool: - dependency: transitive - description: - name: pool - sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" - url: "https://pub.dev" - source: hosted - version: "1.5.1" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" - provider: - dependency: transitive - description: - name: provider - sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c - url: "https://pub.dev" - source: hosted - version: "6.1.2" - pub_semver: - dependency: transitive - description: - name: pub_semver - sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - pub_updater: - dependency: transitive - description: - name: pub_updater - sha256: "05ae70703e06f7fdeb05f7f02dd680b8aad810e87c756a618f33e1794635115c" - url: "https://pub.dev" - source: hosted - version: "0.3.0" - pubspec_parse: - dependency: transitive - description: - name: pubspec_parse - sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 - url: "https://pub.dev" - source: hosted - version: "1.2.3" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 - url: "https://pub.dev" - source: hosted - version: "0.8.1" - reactive_forms: - dependency: "direct main" - description: - name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" - url: "https://pub.dev" - source: hosted - version: "14.3.0" - recase: - dependency: "direct main" - description: - name: recase - sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 - url: "https://pub.dev" - source: hosted - version: "4.1.0" - remove_emoji_input_formatter: - dependency: transitive - description: - name: remove_emoji_input_formatter - sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" - url: "https://pub.dev" - source: hosted - version: "0.0.1+1" - rxdart: - dependency: transitive - description: - name: rxdart - sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" - url: "https://pub.dev" - source: hosted - version: "0.27.7" - shelf: - dependency: transitive - description: - name: shelf - sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 - url: "https://pub.dev" - source: hosted - version: "1.4.1" - shelf_packages_handler: - dependency: transitive - description: - name: shelf_packages_handler - sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - shelf_static: - dependency: transitive - description: - name: shelf_static - sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e - url: "https://pub.dev" - source: hosted - version: "1.1.2" - shelf_web_socket: - dependency: transitive - description: - name: shelf_web_socket - sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" - url: "https://pub.dev" - source: hosted - version: "1.0.4" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.99" - source_gen: - dependency: transitive - description: - name: source_gen - sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" - url: "https://pub.dev" - source: hosted - version: "1.5.0" - source_helper: - dependency: transitive - description: - name: source_helper - sha256: "6adebc0006c37dd63fe05bca0a929b99f06402fc95aa35bf36d67f5c06de01fd" - url: "https://pub.dev" - source: hosted - version: "1.3.4" - source_map_stack_trace: - dependency: transitive - description: - name: source_map_stack_trace - sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - source_maps: - dependency: transitive - description: - name: source_maps - sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" - url: "https://pub.dev" - source: hosted - version: "0.10.12" - source_span: - dependency: transitive - description: - name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" - url: "https://pub.dev" - source: hosted - version: "1.10.0" - sqlite3: - dependency: transitive - description: - name: sqlite3 - sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" - url: "https://pub.dev" - source: hosted - version: "2.4.0" - sqlite3_flutter_libs: - dependency: "direct main" - description: - name: sqlite3_flutter_libs - sha256: fb2a106a2ea6042fe57de2c47074cc31539a941819c91e105b864744605da3f5 - url: "https://pub.dev" - source: hosted - version: "0.5.21" - sqlparser: - dependency: transitive - description: - name: sqlparser - sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" - url: "https://pub.dev" - source: hosted - version: "0.34.1" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" - url: "https://pub.dev" - source: hosted - version: "1.11.1" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 - url: "https://pub.dev" - source: hosted - version: "2.1.2" - stream_transform: - dependency: "direct main" - description: - name: stream_transform - sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - synchronized: - dependency: transitive - description: - name: synchronized - sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.dev" - source: hosted - version: "1.2.1" - test: - dependency: transitive - description: - name: test - sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" - url: "https://pub.dev" - source: hosted - version: "1.25.2" - test_api: - dependency: transitive - description: - name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" - url: "https://pub.dev" - source: hosted - version: "0.7.0" - test_core: - dependency: transitive - description: - name: test_core - sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" - url: "https://pub.dev" - source: hosted - version: "0.6.0" - timing: - dependency: transitive - description: - name: timing - sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - type_plus: - dependency: transitive - description: - name: type_plus - sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 - url: "https://pub.dev" - source: hosted - version: "2.1.1" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c - url: "https://pub.dev" - source: hosted - version: "1.3.2" - uuid: - dependency: "direct main" - description: - name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" - url: "https://pub.dev" - source: hosted - version: "3.0.7" - vector_graphics: - dependency: transitive - description: - name: vector_graphics - sha256: "4ac59808bbfca6da38c99f415ff2d3a5d7ca0a6b4809c71d9cf30fba5daf9752" - url: "https://pub.dev" - source: hosted - version: "1.1.10+1" - vector_graphics_codec: - dependency: transitive - description: - name: vector_graphics_codec - sha256: f3247e7ab0ec77dc759263e68394990edc608fb2b480b80db8aa86ed09279e33 - url: "https://pub.dev" - source: hosted - version: "1.1.10+1" - vector_graphics_compiler: - dependency: transitive - description: - name: vector_graphics_compiler - sha256: "18489bdd8850de3dd7ca8a34e0c446f719ec63e2bab2e7a8cc66a9028dd76c5a" - url: "https://pub.dev" - source: hosted - version: "1.1.10+1" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - vm_service: - dependency: transitive - description: - name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" - url: "https://pub.dev" - source: hosted - version: "14.2.1" - watcher: - dependency: transitive - description: - name: watcher - sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - web: - dependency: transitive - description: - name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 - url: "https://pub.dev" - source: hosted - version: "0.3.0" - web_socket_channel: - dependency: transitive - description: - name: web_socket_channel - sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b - url: "https://pub.dev" - source: hosted - version: "2.4.0" - webkit_inspection_protocol: - dependency: transitive - description: - name: webkit_inspection_protocol - sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - win32: - dependency: transitive - description: - name: win32 - sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" - url: "https://pub.dev" - source: hosted - version: "5.2.0" - xdg_directories: - dependency: transitive - description: - name: xdg_directories - sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d - url: "https://pub.dev" - source: hosted - version: "1.0.4" - xml: - dependency: transitive - description: - name: xml - sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 - url: "https://pub.dev" - source: hosted - version: "6.5.0" - yaml: - dependency: transitive - description: - name: yaml - sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" - url: "https://pub.dev" - source: hosted - version: "3.1.2" -sdks: - dart: ">=3.3.0 <3.9.0" - flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 26a4e414f..b1cdbce95 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -831,30 +831,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" - url: "https://pub.dev" - source: hosted - version: "10.0.4" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" - url: "https://pub.dev" - source: hosted - version: "3.0.3" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://pub.dev" - source: hosted - version: "3.0.1" lints: dependency: transitive description: @@ -907,26 +883,26 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.5.0" meta: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.10.0" mime: dependency: transitive description: @@ -995,10 +971,10 @@ packages: dependency: "direct main" description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.8.3" path_parsing: dependency: transitive description: @@ -1336,26 +1312,26 @@ packages: dependency: transitive description: name: test - sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" + sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f url: "https://pub.dev" source: hosted - version: "1.25.2" + version: "1.24.9" test_api: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.6.1" test_core: dependency: transitive description: name: test_core - sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" + sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.5.9" timing: dependency: transitive description: @@ -1424,10 +1400,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 url: "https://pub.dev" source: hosted - version: "14.2.1" + version: "13.0.0" watcher: dependency: transitive description: @@ -1493,5 +1469,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.3.0 <3.9.0" - flutter: ">=3.18.0-18.0.pre.54" + dart: ">=3.2.0 <3.9.0" + flutter: ">=3.16.0" diff --git a/pubspec.lock b/pubspec.lock index c7db529eb..971b6e21a 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,23 +5,18 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "5aaf60d96c4cd00fe7f21594b5ad6a1b699c80a27420f8a837f4d68473ef09e3" + sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" url: "https://pub.dev" source: hosted - version: "68.0.0" - _macros: - dependency: transitive - description: dart - source: sdk - version: "0.1.0" + version: "67.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: "21f1d3720fd1c70316399d5e2bccaebb415c434592d778cce8acb967b8578808" + sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" url: "https://pub.dev" source: hosted - version: "6.5.0" + version: "6.4.1" ansi_styles: dependency: transitive description: @@ -74,10 +69,10 @@ packages: dependency: transitive description: name: build_daemon - sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9" + sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" url: "https://pub.dev" source: hosted - version: "4.0.2" + version: "4.0.1" build_resolvers: dependency: transitive description: @@ -90,18 +85,18 @@ packages: dependency: "direct dev" description: name: build_runner - sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" + sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" url: "https://pub.dev" source: hosted - version: "2.4.11" + version: "2.4.9" build_runner_core: dependency: transitive description: name: build_runner_core - sha256: e3c79f69a64bdfcd8a776a3c28db4eb6e3fb5356d013ae5eb2e52007706d5dbe + sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" url: "https://pub.dev" source: hosted - version: "7.3.1" + version: "7.3.0" built_collection: dependency: transitive description: @@ -162,10 +157,10 @@ packages: dependency: transitive description: name: collection - sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.19.0" + version: "1.18.0" conventional_commit: dependency: transitive description: @@ -186,10 +181,10 @@ packages: dependency: transitive description: name: crypto - sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27 + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab url: "https://pub.dev" source: hosted - version: "3.0.5" + version: "3.0.3" dart_mappable: dependency: "direct main" description: @@ -202,10 +197,10 @@ packages: dependency: transitive description: name: dart_style - sha256: "7856d364b589d1f08986e140938578ed36ed948581fbc3bc9aef1805039ac5ab" + sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" url: "https://pub.dev" source: hosted - version: "2.3.7" + version: "2.3.6" file: dependency: transitive description: @@ -242,18 +237,18 @@ packages: dependency: transitive description: name: graphs - sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" + sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.3.1" http: dependency: transitive description: name: http - sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba url: "https://pub.dev" source: hosted - version: "1.2.2" + version: "1.2.0" http_multi_server: dependency: transitive description: @@ -266,10 +261,10 @@ packages: dependency: transitive description: name: http_parser - sha256: "40f592dd352890c3b60fec1b68e786cefb9603e05ff303dbc4dda49b304ecdf4" + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" url: "https://pub.dev" source: hosted - version: "4.1.0" + version: "4.0.2" io: dependency: transitive description: @@ -302,14 +297,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" - macros: - dependency: transitive - description: - name: macros - sha256: "12e8a9842b5a7390de7a781ec63d793527582398d16ea26c60fed58833c9ae79" - url: "https://pub.dev" - source: hosted - version: "0.1.0-main.0" matcher: dependency: transitive description: @@ -442,18 +429,18 @@ packages: dependency: transitive description: name: shelf - sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 url: "https://pub.dev" source: hosted - version: "1.4.2" + version: "1.4.1" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - sha256: "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611" + sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "1.0.4" source_span: dependency: transitive description: @@ -506,10 +493,10 @@ packages: dependency: transitive description: name: test_api - sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c" + sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" url: "https://pub.dev" source: hosted - version: "0.7.3" + version: "0.7.2" timing: dependency: transitive description: @@ -554,26 +541,18 @@ packages: dependency: transitive description: name: web - sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - web_socket: - dependency: transitive - description: - name: web_socket - sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83" + sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05" url: "https://pub.dev" source: hosted - version: "0.1.6" + version: "0.4.2" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f" + sha256: "939ab60734a4f8fa95feacb55804fa278de28bdeef38e616dc08e44a84adea23" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "2.4.3" yaml: dependency: transitive description: @@ -591,4 +570,4 @@ packages: source: hosted version: "2.2.1" sdks: - dart: ">=3.4.0 <4.0.0" + dart: ">=3.2.0 <4.0.0" From bb4a16286a76f5c412ff1ddd6f95923afcd8512d Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Tue, 24 Sep 2024 14:47:56 +0530 Subject: [PATCH 121/241] Changed the flutter version in lock files --- .../assets/animated_json/alert.json | 1127 ++++++++ .../assets/animated_json/error.json | 728 +++++ .../assets/animated_json/success.json | 917 +++++++ .../pubspec.lock | 2343 +++++++++++++++++ packages/attendance_management/pubspec.lock | 1273 +++++++++ packages/referral_reconciliation/pubspec.lock | 1465 +++++++++++ 6 files changed, 7853 insertions(+) create mode 100644 apps/health_campaign_field_worker_app/assets/animated_json/alert.json create mode 100644 apps/health_campaign_field_worker_app/assets/animated_json/error.json create mode 100644 apps/health_campaign_field_worker_app/assets/animated_json/success.json create mode 100644 apps/health_campaign_field_worker_app/pubspec.lock create mode 100644 packages/attendance_management/pubspec.lock create mode 100644 packages/referral_reconciliation/pubspec.lock diff --git a/apps/health_campaign_field_worker_app/assets/animated_json/alert.json b/apps/health_campaign_field_worker_app/assets/animated_json/alert.json new file mode 100644 index 000000000..171b416cd --- /dev/null +++ b/apps/health_campaign_field_worker_app/assets/animated_json/alert.json @@ -0,0 +1,1127 @@ +{ + "nm": "48 - Warning", + "ddd": 0, + "h": 500, + "w": 500, + "meta": { + "g": "LottieFiles AE " + }, + "layers": [ + { + "ty": 3, + "nm": "48 - Warning", + "sr": 1, + "st": 0, + "op": 144, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 60, + 60, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 180, + 180, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 250.045, + 290.339, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 0, + "ix": 11 + } + }, + "ef": [], + "ind": 1 + }, + { + "ty": 4, + "nm": "Line", + "sr": 1, + "st": 0, + "op": 144, + "ip": 12, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + -1, + 21.25, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 12 + }, + { + "s": [ + 55.556, + 55.556, + 100 + ], + "t": 32 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 85.533, + 85.887, + 0 + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 180 + ], + "t": 12 + }, + { + "s": [ + 0 + ], + "t": 32 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Shape 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1, + 80 + ], + [ + -1, + -37.5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 2, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 28, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 100, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 0 + ], + "t": 22 + }, + { + "s": [ + 40 + ], + "t": 42 + } + ], + "ix": 1 + }, + "m": 1 + } + ], + "ind": 2, + "parent": 5 + }, + { + "ty": 4, + "nm": "Dot", + "sr": 1, + "st": 0, + "op": 144, + "ip": 12, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Shape 1", + "ix": 1, + "cix": 2, + "np": 4, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1, + 80 + ], + [ + -1, + -37.5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 0.1, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 0, + "k": 0, + "ix": 1 + }, + "m": 1 + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 2, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 33, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 3, + "parent": 2 + }, + { + "ty": 4, + "nm": "Tri Outlines", + "sr": 1, + "st": 0, + "op": 144, + "ip": 10, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 85.513, + 72.848, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 10 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 15 + } + ], + "ix": 6, + "x": "var $bm_rt;\nvar amp, freq, decay, n, t, v;\ntry {\n amp = $bm_div(effect('Scale - Overshoot')('ADBE Slider Control-0001'), 2.5), freq = $bm_div(effect('Scale - Bounce')('ADBE Slider Control-0001'), 20), decay = $bm_div(effect('Scale - Friction')('ADBE Slider Control-0001'), 20), n = 0, 0 < numKeys && (n = nearestKey(time).index, key(n).time > time && n--), t = 0 === n ? 0 : $bm_sub(time, key(n).time), $bm_rt = 0 < n ? (v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10))), $bm_sum(value, $bm_div($bm_mul($bm_mul($bm_div(v, 100), amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))))) : value;\n} catch (e$$4) {\n $bm_rt = value = value;\n}" + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 59.955, + 37.467, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [ + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Overshoot", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 10, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Bounce", + "ix": 2, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 35, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Friction", + "ix": 3, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 65, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + } + ], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Group 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + -3.315, + 5.634 + ], + [ + 0, + 0 + ], + [ + -3.267, + -5.554 + ], + [ + 0, + 0 + ], + [ + 6.537, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 3.268, + -5.554 + ], + [ + 0, + 0 + ], + [ + 3.315, + 5.634 + ], + [ + 0, + 0 + ], + [ + -6.536, + 0 + ] + ], + "v": [ + [ + -81.948, + 59.861 + ], + [ + -7.284, + -67.044 + ], + [ + 7.284, + -67.044 + ], + [ + 81.948, + 59.861 + ], + [ + 74.664, + 72.598 + ], + [ + -74.664, + 72.598 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 0.7255, + 0.098, + 0 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 85.513, + 72.848 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 4, + "parent": 1 + }, + { + "ty": 3, + "nm": "Tri", + "sr": 1, + "st": 0, + "op": 144, + "ip": 10, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 85.513, + 72.848, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 10 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 15 + } + ], + "ix": 6, + "x": "var $bm_rt;\nvar amp, freq, decay, n, t, v;\ntry {\n amp = $bm_div(effect('Scale - Overshoot')('ADBE Slider Control-0001'), 2.5), freq = $bm_div(effect('Scale - Bounce')('ADBE Slider Control-0001'), 20), decay = $bm_div(effect('Scale - Friction')('ADBE Slider Control-0001'), 20), n = 0, 0 < numKeys && (n = nearestKey(time).index, key(n).time > time && n--), t = 0 === n ? 0 : $bm_sub(time, key(n).time), $bm_rt = 0 < n ? (v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10))), $bm_sum(value, $bm_div($bm_mul($bm_mul($bm_div(v, 100), amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))))) : value;\n} catch (e$$4) {\n $bm_rt = value = value;\n}" + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 59.955, + 37.467, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [ + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Overshoot", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 10, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Bounce", + "ix": 2, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 35, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Friction", + "ix": 3, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 65, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + } + ], + "ind": 5, + "parent": 1 + }, + { + "ty": 1, + "nm": "Plate_white", + "sr": 1, + "st": 0, + "op": 144, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 250, + 250, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 250, + 250, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "sc": "#ffffff", + "sh": 500, + "sw": 500, + "ind": 6 + } + ], + "v": "5.5.7", + "fr": 48, + "op": 144, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/assets/animated_json/error.json b/apps/health_campaign_field_worker_app/assets/animated_json/error.json new file mode 100644 index 000000000..96b4f9626 --- /dev/null +++ b/apps/health_campaign_field_worker_app/assets/animated_json/error.json @@ -0,0 +1,728 @@ +{ + "nm": "ckeck", + "ddd": 0, + "h": 50, + "w": 50, + "meta": { + "g": "@lottiefiles/toolkit-js 0.33.2" + }, + "layers": [ + { + "ty": 4, + "nm": "! Outlines", + "sr": 1, + "st": 0, + "op": 213, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 2, + 12, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.653, + "y": -0.834 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 60 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 73 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.127, + "y": 1.695 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 83 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 90 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 25, + 25, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Group 1", + "ix": 1, + "cix": 2, + "np": 4, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 1.104 + ], + [ + -1.104, + 0 + ], + [ + 0, + -1.104 + ], + [ + 1.104, + 0 + ] + ], + "o": [ + [ + 0, + -1.104 + ], + [ + 1.104, + 0 + ], + [ + 0, + 1.104 + ], + [ + -1.104, + 0 + ] + ], + "v": [ + [ + -2, + 10 + ], + [ + 0, + 8 + ], + [ + 2, + 10 + ], + [ + 0, + 12 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 2", + "ix": 2, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1.036, + 5 + ], + [ + -2, + -6.625 + ], + [ + -2, + -12 + ], + [ + 2, + -12 + ], + [ + 2, + -6.625 + ], + [ + 1.052, + 5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "mm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Merge", + "nm": "Merge Paths 1", + "mm": 1 + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0.099, + 9.982 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 2.099, + 21.982 + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 10 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 12 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 14 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 16 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 18 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 20 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 22 + }, + { + "s": [ + 0 + ], + "t": 24 + } + ], + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 1 + }, + { + "ty": 4, + "nm": "Shape Layer 1", + "sr": 1, + "st": 0, + "op": 193, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 10, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.41, + "y": -0.602 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 60 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.436, + "y": 1.492 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 83 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 90 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 25, + 35, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Ellipse 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "el", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Ellipse", + "nm": "Ellipse Path 1", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 3 + }, + "s": { + "a": 0, + "k": [ + 40, + 40 + ], + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 2, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 100, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 0, + "k": 0, + "ix": 1 + }, + "m": 1 + } + ], + "ind": 2 + } + ], + "v": "5.6.5", + "fr": 60, + "op": 180, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/assets/animated_json/success.json b/apps/health_campaign_field_worker_app/assets/animated_json/success.json new file mode 100644 index 000000000..43192f708 --- /dev/null +++ b/apps/health_campaign_field_worker_app/assets/animated_json/success.json @@ -0,0 +1,917 @@ +{ + "nm": "sucess", + "ddd": 0, + "h": 120, + "w": 120, + "meta": { + "g": "LottieFiles AE 0.1.21" + }, + "layers": [ + { + "ty": 3, + "nm": "scale up null", + "sr": 1, + "st": 0, + "op": 300.00001221925, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0 + }, + "i": { + "x": 0.833, + "y": 1 + }, + "s": [ + 111, + 111, + 100 + ], + "t": 27 + }, + { + "o": { + "x": 0.167, + "y": 0 + }, + "i": { + "x": 0.833, + "y": 1 + }, + "s": [ + 101, + 101, + 100 + ], + "t": 36 + }, + { + "s": [ + 121, + 121, + 100 + ], + "t": 42.0000017106951 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 60, + 60, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 0, + "ix": 11 + } + }, + "ef": [], + "ind": 1 + }, + { + "ty": 4, + "nm": "spark", + "sr": 1, + "st": 35.0000014255792, + "op": 335.00001364483, + "ip": 35.0000014255792, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0.5, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Rectangle 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 1", + "d": 1, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 0, + -21 + ], + "t": 35, + "ti": [ + 0, + 1.5 + ], + "to": [ + 0, + -1.5 + ] + }, + { + "s": [ + 0, + -30 + ], + "t": 53.0000021587343 + } + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 4 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.976, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 2, + 0 + ], + "t": 35 + }, + { + "o": { + "x": 0.33299999999999996, + "y": 0 + }, + "i": { + "x": 0.15355432054499818, + "y": 0.9999999999999999 + }, + "s": [ + 2, + 8 + ], + "t": 42 + }, + { + "s": [ + 1.633, + 0 + ], + "t": 53.0000021587343 + } + ], + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + -8 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "rp", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Repeater", + "nm": "Repeater 1", + "ix": 2, + "m": 1, + "c": { + "a": 0, + "k": 8, + "ix": 1 + }, + "o": { + "a": 0, + "k": 0, + "ix": 2 + }, + "tr": { + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 45, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0 + }, + "so": { + "a": 0, + "k": 100, + "ix": 5 + }, + "eo": { + "a": 0, + "k": 100, + "ix": 6 + } + } + } + ], + "ind": 2, + "parent": 1 + }, + { + "ty": 4, + "nm": "check", + "sr": 1, + "st": 10.0000004073083, + "op": 310.000012626559, + "ip": 22.0000008960784, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 3.5, + 3.75 + ], + [ + -12.973, + 5.349 + ], + [ + -6.124, + -9.992 + ], + [ + 12.125, + -7.431 + ], + [ + 7.431, + 12.125 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -3.5, + -3.75 + ], + [ + 10.764, + -2.941 + ], + [ + 7.431, + 12.125 + ], + [ + -12.125, + 7.431 + ], + [ + -7.431, + -12.125 + ] + ], + "v": [ + [ + 15.25, + -9.688 + ], + [ + -5.75, + 10.062 + ], + [ + -16, + 0.25 + ], + [ + -6.777, + -24.849 + ], + [ + 21.955, + -13.456 + ], + [ + 13.456, + 21.955 + ], + [ + -21.955, + 13.456 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 1, + "k": [ + { + "o": { + "x": 0.714, + "y": 0 + }, + "i": { + "x": 0.351, + "y": 1 + }, + "s": [ + 100 + ], + "t": 10 + }, + { + "s": [ + 23 + ], + "t": 40.0000016292334 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.742, + "y": 0 + }, + "i": { + "x": 0.363, + "y": 1 + }, + "s": [ + 100 + ], + "t": 17 + }, + { + "s": [ + 0 + ], + "t": 45.0000018328876 + } + ], + "ix": 1 + }, + "m": 1 + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 4, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 3 + } + } + ], + "ind": 3, + "parent": 1 + }, + { + "ty": 4, + "nm": "circle", + "sr": 1, + "st": 0, + "op": 300.00001221925, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + -14.221, + 0 + ], + [ + 0, + -14.221 + ], + [ + 14.221, + 0 + ], + [ + 0, + 14.221 + ] + ], + "o": [ + [ + 14.221, + 0 + ], + [ + 0, + 14.221 + ], + [ + -14.221, + 0 + ], + [ + 0, + -14.221 + ] + ], + "v": [ + [ + 0, + -25.75 + ], + [ + 25.75, + 0 + ], + [ + 0, + 25.75 + ], + [ + -25.75, + 0 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 2, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 3 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 3, + "e": { + "a": 1, + "k": [ + { + "o": { + "x": 0.714, + "y": 0 + }, + "i": { + "x": 0.351, + "y": 1 + }, + "s": [ + 100 + ], + "t": 0 + }, + { + "s": [ + 100 + ], + "t": 30.0000012219251 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.742, + "y": 0 + }, + "i": { + "x": 0.363, + "y": 1 + }, + "s": [ + 100 + ], + "t": 7 + }, + { + "s": [ + 0 + ], + "t": 33.0000013441176 + } + ], + "ix": 1 + }, + "m": 1 + } + ], + "ind": 4, + "parent": 1 + } + ], + "v": "5.5.7", + "fr": 29.9700012207031, + "op": 60.0000024438501, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock new file mode 100644 index 000000000..a4bb22219 --- /dev/null +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -0,0 +1,2343 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a + url: "https://pub.dev" + source: hosted + version: "61.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "4eec93681221723a686ad580c2e7d960e1017cf1a4e0a263c2573c2c6b0bf5cd" + url: "https://pub.dev" + source: hosted + version: "1.3.25" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 + url: "https://pub.dev" + source: hosted + version: "5.13.0" + analyzer_plugin: + dependency: transitive + description: + name: analyzer_plugin + sha256: c1d5f167683de03d5ab6c3b53fc9aeefc5d59476e7810ba7bbddff50c6f4392d + url: "https://pub.dev" + source: hosted + version: "0.11.2" + ansicolor: + dependency: transitive + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + url: "https://pub.dev" + source: hosted + version: "2.0.3" + archive: + dependency: transitive + description: + name: archive + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d + url: "https://pub.dev" + source: hosted + version: "3.6.1" + args: + dependency: transitive + description: + name: args + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" + url: "https://pub.dev" + source: hosted + version: "2.5.0" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + attendance_management: + dependency: "direct main" + description: + path: "../../packages/attendance_management" + relative: true + source: path + version: "1.0.2+1" + audioplayers: + dependency: "direct main" + description: + name: audioplayers + sha256: c05c6147124cd63e725e861335a8b4d57300b80e6e92cea7c145c739223bbaef + url: "https://pub.dev" + source: hosted + version: "5.2.1" + audioplayers_android: + dependency: transitive + description: + name: audioplayers_android + sha256: b00e1a0e11365d88576320ec2d8c192bc21f1afb6c0e5995d1c57ae63156acb5 + url: "https://pub.dev" + source: hosted + version: "4.0.3" + audioplayers_darwin: + dependency: transitive + description: + name: audioplayers_darwin + sha256: "3034e99a6df8d101da0f5082dcca0a2a99db62ab1d4ddb3277bed3f6f81afe08" + url: "https://pub.dev" + source: hosted + version: "5.0.2" + audioplayers_linux: + dependency: transitive + description: + name: audioplayers_linux + sha256: "60787e73fefc4d2e0b9c02c69885402177e818e4e27ef087074cf27c02246c9e" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + audioplayers_platform_interface: + dependency: transitive + description: + name: audioplayers_platform_interface + sha256: "365c547f1bb9e77d94dd1687903a668d8f7ac3409e48e6e6a3668a1ac2982adb" + url: "https://pub.dev" + source: hosted + version: "6.1.0" + audioplayers_web: + dependency: transitive + description: + name: audioplayers_web + sha256: "22cd0173e54d92bd9b2c80b1204eb1eb159ece87475ab58c9788a70ec43c2a62" + url: "https://pub.dev" + source: hosted + version: "4.1.0" + audioplayers_windows: + dependency: transitive + description: + name: audioplayers_windows + sha256: "9536812c9103563644ada2ef45ae523806b0745f7a78e89d1b5fb1951de90e1a" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + auto_route: + dependency: "direct main" + description: + name: auto_route + sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 + url: "https://pub.dev" + source: hosted + version: "7.9.2" + auto_route_generator: + dependency: "direct dev" + description: + name: auto_route_generator + sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" + url: "https://pub.dev" + source: hosted + version: "7.3.2" + battery_plus: + dependency: "direct main" + description: + name: battery_plus + sha256: ba605aeafd6609cb5f8020c609a51941803a5fb2b6a7576f7c7eeeb52d29e750 + url: "https://pub.dev" + source: hosted + version: "5.0.3" + battery_plus_platform_interface: + dependency: transitive + description: + name: battery_plus_platform_interface + sha256: e8342c0f32de4b1dfd0223114b6785e48e579bfc398da9471c9179b907fa4910 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + bloc: + dependency: transitive + description: + name: bloc + sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e" + url: "https://pub.dev" + source: hosted + version: "8.1.4" + bloc_concurrency: + dependency: "direct main" + description: + name: bloc_concurrency + sha256: "456b7a3616a7c1ceb975c14441b3f198bf57d81cb95b7c6de5cb0c60201afcd8" + url: "https://pub.dev" + source: hosted + version: "0.2.5" + bloc_test: + dependency: "direct dev" + description: + name: bloc_test + sha256: "165a6ec950d9252ebe36dc5335f2e6eb13055f33d56db0eeb7642768849b43d2" + url: "https://pub.dev" + source: hosted + version: "9.1.7" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + build: + dependency: transitive + description: + name: build + sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + build_config: + dependency: transitive + description: + name: build_config + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" + source: hosted + version: "1.1.1" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" + url: "https://pub.dev" + source: hosted + version: "4.0.1" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + build_runner: + dependency: "direct dev" + description: + name: build_runner + sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" + url: "https://pub.dev" + source: hosted + version: "2.4.9" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" + url: "https://pub.dev" + source: hosted + version: "7.3.0" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb + url: "https://pub.dev" + source: hosted + version: "8.9.2" + camera: + dependency: "direct main" + description: + name: camera + sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" + url: "https://pub.dev" + source: hosted + version: "0.10.5+9" + camera_android: + dependency: transitive + description: + name: camera_android + sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 + url: "https://pub.dev" + source: hosted + version: "0.10.9+2" + camera_avfoundation: + dependency: transitive + description: + name: camera_avfoundation + sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" + url: "https://pub.dev" + source: hosted + version: "0.9.13+10" + camera_platform_interface: + dependency: transitive + description: + name: camera_platform_interface + sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 + url: "https://pub.dev" + source: hosted + version: "2.8.0" + camera_web: + dependency: transitive + description: + name: camera_web + sha256: b9235ec0a2ce949daec546f1f3d86f05c3921ed31c7d9ab6b7c03214d152fc2d + url: "https://pub.dev" + source: hosted + version: "0.3.4" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + charcode: + dependency: transitive + description: + name: charcode + sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 + url: "https://pub.dev" + source: hosted + version: "1.3.1" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 + url: "https://pub.dev" + source: hosted + version: "0.4.1" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + closed_household: + dependency: "direct main" + description: + path: "../../packages/closed_household" + relative: true + source: path + version: "1.0.1+1" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 + url: "https://pub.dev" + source: hosted + version: "4.10.0" + collection: + dependency: "direct main" + description: + name: collection + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" + source: hosted + version: "1.18.0" + connectivity_plus: + dependency: "direct main" + description: + name: connectivity_plus + sha256: "224a77051d52a11fbad53dd57827594d3bd24f945af28bd70bab376d68d437f0" + url: "https://pub.dev" + source: hosted + version: "5.0.2" + connectivity_plus_platform_interface: + dependency: transitive + description: + name: connectivity_plus_platform_interface + sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a + url: "https://pub.dev" + source: hosted + version: "1.2.4" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + coverage: + dependency: transitive + description: + name: coverage + sha256: "595a29b55ce82d53398e1bcc2cba525d7bd7c59faeb2d2540e9d42c390cfeeeb" + url: "https://pub.dev" + source: hosted + version: "1.6.4" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e + url: "https://pub.dev" + source: hosted + version: "0.3.3+8" + crypto: + dependency: transitive + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://pub.dev" + source: hosted + version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 + url: "https://pub.dev" + source: hosted + version: "1.0.8" + dart_mappable: + dependency: "direct main" + description: + name: dart_mappable + sha256: "47269caf2060533c29b823ff7fa9706502355ffcb61e7f2a374e3a0fb2f2c3f0" + url: "https://pub.dev" + source: hosted + version: "4.2.2" + dart_mappable_builder: + dependency: "direct dev" + description: + path: "../../packages/dart_mappable_builder" + relative: true + source: path + version: "4.2.0" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + dartx: + dependency: transitive + description: + name: dartx + sha256: "8b25435617027257d43e6508b5fe061012880ddfdaa75a71d607c3de2a13d244" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + db_viewer: + dependency: transitive + description: + name: db_viewer + sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + dbus: + dependency: transitive + description: + name: dbus + sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac" + url: "https://pub.dev" + source: hosted + version: "0.7.10" + device_info_plus: + dependency: "direct main" + description: + name: device_info_plus + sha256: "77f757b789ff68e4eaf9c56d1752309bd9f7ad557cb105b938a7f8eb89e59110" + url: "https://pub.dev" + source: hosted + version: "9.1.2" + device_info_plus_platform_interface: + dependency: transitive + description: + name: device_info_plus_platform_interface + sha256: "282d3cf731045a2feb66abfe61bbc40870ae50a3ed10a4d3d217556c35c8c2ba" + url: "https://pub.dev" + source: hosted + version: "7.0.1" + diff_match_patch: + dependency: transitive + description: + name: diff_match_patch + sha256: "2efc9e6e8f449d0abe15be240e2c2a3bcd977c8d126cfd70598aee60af35c0a4" + url: "https://pub.dev" + source: hosted + version: "0.4.1" + digit_components: + dependency: "direct main" + description: + path: "../../packages/digit_components" + relative: true + source: path + version: "1.0.1+1" + digit_data_model: + dependency: "direct main" + description: + path: "../../packages/digit_data_model" + relative: true + source: path + version: "1.0.3+1" + digit_dss: + dependency: "direct main" + description: + path: "../../packages/digit_dss" + relative: true + source: path + version: "1.0.1" + digit_firebase_services: + dependency: "direct main" + description: + path: "packages/digit_firebase_services" + ref: checklist-tanishi + resolved-ref: a4fd63e10e76cec82675332689e344e309246e65 + url: "https://github.com/egovernments/health-campaign-field-worker-app" + source: git + version: "0.0.1" + digit_scanner: + dependency: "direct main" + description: + path: "../../packages/digit_scanner" + relative: true + source: path + version: "1.0.3+1" + digit_showcase: + dependency: "direct main" + description: + name: digit_showcase + sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + digit_ui_components: + dependency: transitive + description: + name: digit_ui_components + sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae + url: "https://pub.dev" + source: hosted + version: "0.0.1+7" + dio: + dependency: "direct main" + description: + name: dio + sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" + url: "https://pub.dev" + source: hosted + version: "5.7.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + disable_battery_optimization: + dependency: "direct main" + description: + name: disable_battery_optimization + sha256: "6b2ba802f984af141faf1b6b5fb956d5ef01f9cd555597c35b9cc335a03185ba" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + disk_space: + dependency: "direct main" + description: + name: disk_space + sha256: fb27eb2d09ac04784f45b95b1355538b2355c76a081eeaa8439d1a5cfa263888 + url: "https://pub.dev" + source: hosted + version: "0.2.1" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + drift: + dependency: "direct main" + description: + name: drift + sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + url: "https://pub.dev" + source: hosted + version: "2.15.0" + drift_db_viewer: + dependency: "direct main" + description: + name: drift_db_viewer + sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + drift_dev: + dependency: "direct dev" + description: + name: drift_dev + sha256: c037d9431b6f8dc633652b1469e5f53aaec6e4eb405ed29dd232fa888ef10d88 + url: "https://pub.dev" + source: hosted + version: "2.15.0" + easy_stepper: + dependency: transitive + description: + name: easy_stepper + sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + url: "https://pub.dev" + source: hosted + version: "0.5.2+1" + equatable: + dependency: transitive + description: + name: equatable + sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2 + url: "https://pub.dev" + source: hosted + version: "2.0.5" + expandable: + dependency: "direct main" + description: + name: expandable + sha256: "9604d612d4d1146dafa96c6d8eec9c2ff0994658d6d09fed720ab788c7f5afc2" + url: "https://pub.dev" + source: hosted + version: "5.0.1" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + file: + dependency: transitive + description: + name: file + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" + source: hosted + version: "6.1.4" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 + url: "https://pub.dev" + source: hosted + version: "8.0.0+1" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + url: "https://pub.dev" + source: hosted + version: "0.9.2+1" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 + url: "https://pub.dev" + source: hosted + version: "0.9.4" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "53316975310c8af75a96e365f9fccb67d1c544ef0acdbf0d88bbe30eedd1c4f9" + url: "https://pub.dev" + source: hosted + version: "2.27.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: e30da58198a6d4b49d5bce4e852f985c32cb10db329ebef9473db2b9f09ce810 + url: "https://pub.dev" + source: hosted + version: "5.3.0" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: c8e1d59385eee98de63c92f961d2a7062c5d9a65e7f45bdc7f1b0b205aab2492 + url: "https://pub.dev" + source: hosted + version: "2.11.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: c4f1b723d417bc9c4774810e774ff91df8fb0032d33fb2888b2c887e865581b8 + url: "https://pub.dev" + source: hosted + version: "3.4.18" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: c5a11fca3df76a98e3fa68fde8b10a08aacb9a7639f619fbfd4dad6c67a08643 + url: "https://pub.dev" + source: hosted + version: "3.6.25" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_background_service: + dependency: "direct main" + description: + name: flutter_background_service + sha256: d32f078ec57647c9cfd6e1a8da9297f7d8f021d4dcc204a35aaad2cdbfe255f0 + url: "https://pub.dev" + source: hosted + version: "5.0.10" + flutter_background_service_android: + dependency: transitive + description: + name: flutter_background_service_android + sha256: "39da42dddf877beeef82bc2583130d8bedb4d0765e99ca9e7b4a32e8c6abd239" + url: "https://pub.dev" + source: hosted + version: "6.2.7" + flutter_background_service_ios: + dependency: transitive + description: + name: flutter_background_service_ios + sha256: "6037ffd45c4d019dab0975c7feb1d31012dd697e25edc05505a4a9b0c7dc9fba" + url: "https://pub.dev" + source: hosted + version: "5.0.3" + flutter_background_service_platform_interface: + dependency: transitive + description: + name: flutter_background_service_platform_interface + sha256: ca74aa95789a8304f4d3f57f07ba404faa86bed6e415f83e8edea6ad8b904a41 + url: "https://pub.dev" + source: hosted + version: "5.1.2" + flutter_bloc: + dependency: "direct main" + description: + name: flutter_bloc + sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a + url: "https://pub.dev" + source: hosted + version: "8.1.6" + flutter_dotenv: + dependency: "direct main" + description: + name: flutter_dotenv + sha256: "9357883bdd153ab78cbf9ffa07656e336b8bbb2b5a3ca596b0b27e119f7c7d77" + url: "https://pub.dev" + source: hosted + version: "5.1.0" + flutter_driver: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: b4e2df75364bab2f4c3ca32b87193267d786b6e158c3f345c3a1daeb911d82b9 + url: "https://pub.dev" + source: hosted + version: "2.0.6" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" + flutter_focus_watcher: + dependency: transitive + description: + name: flutter_focus_watcher + sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility: + dependency: "direct main" + description: + name: flutter_keyboard_visibility + sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" + url: "https://pub.dev" + source: hosted + version: "5.4.1" + flutter_keyboard_visibility_linux: + dependency: transitive + description: + name: flutter_keyboard_visibility_linux + sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_macos: + dependency: transitive + description: + name: flutter_keyboard_visibility_macos + sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_platform_interface: + dependency: transitive + description: + name: flutter_keyboard_visibility_platform_interface + sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_web: + dependency: transitive + description: + name: flutter_keyboard_visibility_web + sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_windows: + dependency: transitive + description: + name: flutter_keyboard_visibility_windows + sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_launcher_icons: + dependency: "direct dev" + description: + name: flutter_launcher_icons + sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea" + url: "https://pub.dev" + source: hosted + version: "0.13.1" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + flutter_local_notifications: + dependency: "direct main" + description: + name: flutter_local_notifications + sha256: "55b9b229307a10974b26296ff29f2e132256ba4bd74266939118eaefa941cb00" + url: "https://pub.dev" + source: hosted + version: "16.3.3" + flutter_local_notifications_linux: + dependency: transitive + description: + name: flutter_local_notifications_linux + sha256: c49bd06165cad9beeb79090b18cd1eb0296f4bf4b23b84426e37dd7c027fc3af + url: "https://pub.dev" + source: hosted + version: "4.0.1" + flutter_local_notifications_platform_interface: + dependency: transitive + description: + name: flutter_local_notifications_platform_interface + sha256: "85f8d07fe708c1bdcf45037f2c0109753b26ae077e9d9e899d55971711a4ea66" + url: "https://pub.dev" + source: hosted + version: "7.2.0" + flutter_localizations: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: "8cf40eebf5dec866a6d1956ad7b4f7016e6c0cc69847ab946833b7d43743809f" + url: "https://pub.dev" + source: hosted + version: "2.0.19" + flutter_portal: + dependency: "direct main" + description: + name: flutter_portal + sha256: "4601b3dc24f385b3761721bd852a3f6c09cddd4e943dd184ed58ee1f43006257" + url: "https://pub.dev" + source: hosted + version: "1.1.4" + flutter_secure_storage: + dependency: "direct main" + description: + name: flutter_secure_storage + sha256: "165164745e6afb5c0e3e3fcc72a012fb9e58496fb26ffb92cf22e16a821e85d0" + url: "https://pub.dev" + source: hosted + version: "9.2.2" + flutter_secure_storage_linux: + dependency: transitive + description: + name: flutter_secure_storage_linux + sha256: "4d91bfc23047422cbcd73ac684bc169859ee766482517c22172c86596bf1464b" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + flutter_secure_storage_macos: + dependency: transitive + description: + name: flutter_secure_storage_macos + sha256: "1693ab11121a5f925bbea0be725abfcfbbcf36c1e29e571f84a0c0f436147a81" + url: "https://pub.dev" + source: hosted + version: "3.1.2" + flutter_secure_storage_platform_interface: + dependency: transitive + description: + name: flutter_secure_storage_platform_interface + sha256: cf91ad32ce5adef6fba4d736a542baca9daf3beac4db2d04be350b87f69ac4a8 + url: "https://pub.dev" + source: hosted + version: "1.1.2" + flutter_secure_storage_web: + dependency: transitive + description: + name: flutter_secure_storage_web + sha256: f4ebff989b4f07b2656fb16b47852c0aab9fed9b4ec1c70103368337bc1886a9 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + flutter_secure_storage_windows: + dependency: transitive + description: + name: flutter_secure_storage_windows + sha256: b20b07cb5ed4ed74fc567b78a72936203f587eba460af1df11281c9326cd3709 + url: "https://pub.dev" + source: hosted + version: "3.1.2" + flutter_spinkit: + dependency: transitive + description: + name: flutter_spinkit + sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 + url: "https://pub.dev" + source: hosted + version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + flutter_svg: + dependency: "direct main" + description: + name: flutter_svg + sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" + url: "https://pub.dev" + source: hosted + version: "2.0.10+1" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_typeahead: + dependency: transitive + description: + name: flutter_typeahead + sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 + url: "https://pub.dev" + source: hosted + version: "4.8.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + fluttertoast: + dependency: "direct main" + description: + name: fluttertoast + sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" + url: "https://pub.dev" + source: hosted + version: "8.2.5" + formula_parser: + dependency: transitive + description: + name: formula_parser + sha256: af9e9ae2961ec1dab54c5de97d9a6bef0593ddb998720e3785bd91ef05353359 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + freezed: + dependency: "direct dev" + description: + name: freezed + sha256: a434911f643466d78462625df76fd9eb13e57348ff43fe1f77bbe909522c67a1 + url: "https://pub.dev" + source: hosted + version: "2.5.2" + freezed_annotation: + dependency: "direct main" + description: + name: freezed_annotation + sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 + url: "https://pub.dev" + source: hosted + version: "2.4.4" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + fuchsia_remote_debug_protocol: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + url: "https://pub.dev" + source: hosted + version: "4.3.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: bc2aca02423ad429cb0556121f56e60360a2b7d694c8570301d06ea0c00732fd + url: "https://pub.dev" + source: hosted + version: "2.3.7" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + google_fonts: + dependency: transitive + description: + name: google_fonts + sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + url: "https://pub.dev" + source: hosted + version: "4.0.5" + google_mlkit_barcode_scanning: + dependency: "direct main" + description: + name: google_mlkit_barcode_scanning + sha256: "965183a8cd5cef8477ceea5dbdf29c34a739cf0cfbf1bdad54cd3f9f1807afe5" + url: "https://pub.dev" + source: hosted + version: "0.10.0" + google_mlkit_commons: + dependency: transitive + description: + name: google_mlkit_commons + sha256: "046586b381cdd139f7f6a05ad6998f7e339d061bd70158249907358394b5f496" + url: "https://pub.dev" + source: hosted + version: "0.6.1" + graphs: + dependency: transitive + description: + name: graphs + sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 + url: "https://pub.dev" + source: hosted + version: "2.3.1" + group_radio_button: + dependency: "direct main" + description: + name: group_radio_button + sha256: "204de8d16b224be7fc72dade0c3afd410ff5a34417d89f74f0fd8be7a8c2b4d6" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + gs1_barcode_parser: + dependency: "direct main" + description: + name: gs1_barcode_parser + sha256: ff171bc40038de3f7178fbc32eaf9eebc3d35a3c4c00bb0281fe4a976d853a42 + url: "https://pub.dev" + source: hosted + version: "1.1.0" + horizontal_data_table: + dependency: transitive + description: + name: horizontal_data_table + sha256: c8ab5256bbced698a729f3e0ff2cb0e8e97416cdbb082860370eaf883badf722 + url: "https://pub.dev" + source: hosted + version: "4.3.1" + hrk_batteries: + dependency: transitive + description: + name: hrk_batteries + sha256: "35bc2be10bb64284b04d3cd944c24eecf304747fc64b34e2d27ef1a3ac75ab49" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + hrk_flutter_test_batteries: + dependency: "direct dev" + description: + name: hrk_flutter_test_batteries + sha256: bfdaac0fc6aa1cd2aeffa7db9fc241d615ffdb1d667dd1be8b9a7ff5bc54d364 + url: "https://pub.dev" + source: hosted + version: "0.8.0" + hrk_logging: + dependency: transitive + description: + name: hrk_logging + sha256: "2e6501f4b78439bec4c367a94b14f792fd17fe1c94f18d903086c7b8a48402f5" + url: "https://pub.dev" + source: hosted + version: "0.3.1" + html: + dependency: transitive + description: + name: html + sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" + url: "https://pub.dev" + source: hosted + version: "0.15.4" + http: + dependency: transitive + description: + name: http + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + url: "https://pub.dev" + source: hosted + version: "1.2.0" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + image: + dependency: transitive + description: + name: image + sha256: "2237616a36c0d69aef7549ab439b833fb7f9fb9fc861af2cc9ac3eedddd69ca8" + url: "https://pub.dev" + source: hosted + version: "4.2.0" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" + url: "https://pub.dev" + source: hosted + version: "1.0.8" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" + url: "https://pub.dev" + source: hosted + version: "0.8.9+6" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 + url: "https://pub.dev" + source: hosted + version: "0.8.9+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b + url: "https://pub.dev" + source: hosted + version: "2.9.3" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + integration_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + intl: + dependency: "direct main" + description: + name: intl + sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + url: "https://pub.dev" + source: hosted + version: "0.18.1" + inventory_management: + dependency: "direct main" + description: + name: inventory_management + sha256: "1d0dd4f7811941092653426a86548a31d475237d318eee71505b21a57ebc310b" + url: "https://pub.dev" + source: hosted + version: "1.0.3+4" + io: + dependency: transitive + description: + name: io + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + isar: + dependency: "direct main" + description: + name: isar + sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" + isar_flutter_libs: + dependency: "direct main" + description: + name: isar_flutter_libs + sha256: bc6768cc4b9c61aabff77152e7f33b4b17d2fc93134f7af1c3dd51500fe8d5e8 + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" + isar_generator: + dependency: "direct dev" + description: + name: isar_generator + sha256: "76c121e1295a30423604f2f819bc255bc79f852f3bc8743a24017df6068ad133" + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" + js: + dependency: transitive + description: + name: js + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + url: "https://pub.dev" + source: hosted + version: "0.6.7" + json_annotation: + dependency: "direct main" + description: + name: json_annotation + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.dev" + source: hosted + version: "4.9.0" + json_serializable: + dependency: "direct dev" + description: + name: json_serializable + sha256: ea1432d167339ea9b5bb153f0571d0039607a873d6e04e0117af043f14a1fd4b + url: "https://pub.dev" + source: hosted + version: "6.8.0" + lints: + dependency: transitive + description: + name: lints + sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + url: "https://pub.dev" + source: hosted + version: "3.0.0" + location: + dependency: "direct main" + description: + name: location + sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + url: "https://pub.dev" + source: hosted + version: "5.0.3" + location_platform_interface: + dependency: transitive + description: + name: location_platform_interface + sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + url: "https://pub.dev" + source: hosted + version: "3.1.2" + location_web: + dependency: transitive + description: + name: location_web + sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + url: "https://pub.dev" + source: hosted + version: "4.2.0" + logging: + dependency: transitive + description: + name: logging + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + lottie: + dependency: transitive + description: + name: lottie + sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + url: "https://pub.dev" + source: hosted + version: "2.7.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + url: "https://pub.dev" + source: hosted + version: "0.12.16" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + url: "https://pub.dev" + source: hosted + version: "0.5.0" + material_design_icons_flutter: + dependency: "direct main" + description: + name: material_design_icons_flutter + sha256: "6f986b7a51f3ad4c00e33c5c84e8de1bdd140489bbcdc8b66fc1283dad4dea5a" + url: "https://pub.dev" + source: hosted + version: "7.0.7296" + meta: + dependency: transitive + description: + name: meta + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + url: "https://pub.dev" + source: hosted + version: "1.10.0" + mime: + dependency: transitive + description: + name: mime + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" + url: "https://pub.dev" + source: hosted + version: "1.0.6" + mocktail: + dependency: "direct dev" + description: + name: mocktail + sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + nested: + dependency: "direct main" + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + nm: + dependency: transitive + description: + name: nm + sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" + url: "https://pub.dev" + source: hosted + version: "0.5.0" + node_preamble: + dependency: transitive + description: + name: node_preamble + sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + overlay_builder: + dependency: transitive + description: + name: overlay_builder + sha256: "58b97bc5f67a2e2bb7006dd88e697ac757dfffc9dbd1e7dfc1917fb510a4b5c8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + package_info_plus: + dependency: "direct main" + description: + name: package_info_plus + sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + url: "https://pub.dev" + source: hosted + version: "5.0.1" + package_info_plus_platform_interface: + dependency: transitive + description: + name: package_info_plus_platform_interface + sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + path: + dependency: "direct main" + description: + name: path + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + url: "https://pub.dev" + source: hosted + version: "1.8.3" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + url: "https://pub.dev" + source: hosted + version: "1.0.1" + path_provider: + dependency: "direct main" + description: + name: path_provider + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 + url: "https://pub.dev" + source: hosted + version: "2.1.4" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d + url: "https://pub.dev" + source: hosted + version: "2.2.4" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 + url: "https://pub.dev" + source: hosted + version: "2.3.0" + pedantic: + dependency: transitive + description: + name: pedantic + sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" + url: "https://pub.dev" + source: hosted + version: "1.11.1" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: cb3798bef7fc021ac45b308f4b51208a152792445cce0448c9a4ba5879dd8750 + url: "https://pub.dev" + source: hosted + version: "5.4.0" + platform: + dependency: transitive + description: + name: platform + sha256: ae68c7bfcd7383af3629daafb32fb4e8681c7154428da4febcff06200585f102 + url: "https://pub.dev" + source: hosted + version: "3.1.2" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + pluto_grid: + dependency: "direct main" + description: + name: pluto_grid + sha256: e77c34a33dd9d74abbe20ba1df96474dded150dd042c7f7495be1bc2c26bd37f + url: "https://pub.dev" + source: hosted + version: "7.0.2" + pointer_interceptor: + dependency: transitive + description: + name: pointer_interceptor + sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 + url: "https://pub.dev" + source: hosted + version: "0.9.3+7" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" + pretty_dio_logger: + dependency: "direct main" + description: + name: pretty_dio_logger + sha256: "36f2101299786d567869493e2f5731de61ce130faa14679473b26905a92b6407" + url: "https://pub.dev" + source: hosted + version: "1.4.0" + process: + dependency: transitive + description: + name: process + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + provider: + dependency: "direct main" + description: + name: provider + sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c + url: "https://pub.dev" + source: hosted + version: "6.1.2" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 + url: "https://pub.dev" + source: hosted + version: "1.3.0" + qr: + dependency: transitive + description: + name: qr + sha256: "64957a3930367bf97cc211a5af99551d630f2f4625e38af10edd6b19131b64b3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + qr_flutter: + dependency: "direct main" + description: + name: qr_flutter + sha256: "5095f0fc6e3f71d08adef8feccc8cea4f12eec18a2e31c2e8d82cb6019f4b097" + url: "https://pub.dev" + source: hosted + version: "4.1.0" + reactive_flutter_typeahead: + dependency: transitive + description: + name: reactive_flutter_typeahead + sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 + url: "https://pub.dev" + source: hosted + version: "0.8.1" + reactive_forms: + dependency: "direct main" + description: + name: reactive_forms + sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + url: "https://pub.dev" + source: hosted + version: "14.3.0" + recase: + dependency: "direct main" + description: + name: recase + sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 + url: "https://pub.dev" + source: hosted + version: "4.1.0" + referral_reconciliation: + dependency: "direct main" + description: + path: "../../packages/referral_reconciliation" + relative: true + source: path + version: "1.0.2+1" + registration_delivery: + dependency: "direct main" + description: + path: "../../packages/registration_delivery" + relative: true + source: path + version: "1.0.3+1" + remove_emoji_input_formatter: + dependency: transitive + description: + name: remove_emoji_input_formatter + sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" + url: "https://pub.dev" + source: hosted + version: "0.0.1+1" + rxdart: + dependency: transitive + description: + name: rxdart + sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" + url: "https://pub.dev" + source: hosted + version: "0.27.7" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180 + url: "https://pub.dev" + source: hosted + version: "2.2.3" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + sha256: "1ee8bf911094a1b592de7ab29add6f826a7331fb854273d55918693d5364a1f2" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + shared_preferences_foundation: + dependency: transitive + description: + name: shared_preferences_foundation + sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c" + url: "https://pub.dev" + source: hosted + version: "2.3.5" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + sha256: "2ba0510d3017f91655b7543e9ee46d48619de2a2af38e5c790423f7007c7ccc1" + url: "https://pub.dev" + source: hosted + version: "2.4.0" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + sha256: "398084b47b7f92110683cac45c6dc4aae853db47e470e5ddcd52cab7f7196ab2" + url: "https://pub.dev" + source: hosted + version: "2.4.0" + shelf: + dependency: transitive + description: + name: shelf + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 + url: "https://pub.dev" + source: hosted + version: "1.4.1" + shelf_packages_handler: + dependency: transitive + description: + name: shelf_packages_handler + sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + shelf_static: + dependency: transitive + description: + name: shelf_static + sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e + url: "https://pub.dev" + source: hosted + version: "1.1.2" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" + url: "https://pub.dev" + source: hosted + version: "1.5.0" + source_helper: + dependency: transitive + description: + name: source_helper + sha256: "6adebc0006c37dd63fe05bca0a929b99f06402fc95aa35bf36d67f5c06de01fd" + url: "https://pub.dev" + source: hosted + version: "1.3.4" + source_map_stack_trace: + dependency: transitive + description: + name: source_map_stack_trace + sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + source_maps: + dependency: transitive + description: + name: source_maps + sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" + url: "https://pub.dev" + source: hosted + version: "0.10.12" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + speech_to_text: + dependency: "direct main" + description: + name: speech_to_text + sha256: "57fef1d41bdebe298e84842c89bb4ac91f31cdbec7830c8cb1fc6b91d03abd42" + url: "https://pub.dev" + source: hosted + version: "6.6.0" + speech_to_text_macos: + dependency: transitive + description: + name: speech_to_text_macos + sha256: e685750f7542fcaa087a5396ee471e727ec648bf681f4da83c84d086322173f6 + url: "https://pub.dev" + source: hosted + version: "1.1.0" + speech_to_text_platform_interface: + dependency: transitive + description: + name: speech_to_text_platform_interface + sha256: a0df1a907091ea09880077dc25aae02af9f79811264e6e97ddb08639b7f771c2 + url: "https://pub.dev" + source: hosted + version: "2.2.0" + sqlite3: + dependency: transitive + description: + name: sqlite3 + sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" + url: "https://pub.dev" + source: hosted + version: "2.4.0" + sqlite3_flutter_libs: + dependency: "direct main" + description: + name: sqlite3_flutter_libs + sha256: "62bbb4073edbcdf53f40c80775f33eea01d301b7b81417e5b3fb7395416258c1" + url: "https://pub.dev" + source: hosted + version: "0.5.24" + sqlparser: + dependency: transitive + description: + name: sqlparser + sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" + url: "https://pub.dev" + source: hosted + version: "0.34.1" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://pub.dev" + source: hosted + version: "1.11.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" + source: hosted + version: "2.1.2" + stream_transform: + dependency: "direct main" + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + survey_form: + dependency: "direct overridden" + description: + path: "packages/survey_form" + ref: checklist-package + resolved-ref: "990025a060809c5e07ee61df8d7042f29f786122" + url: "https://github.com/egovernments/health-campaign-field-worker-app" + source: git + version: "0.0.1-dev.1" + sync_http: + dependency: transitive + description: + name: sync_http + sha256: "7f0cd72eca000d2e026bcd6f990b81d0ca06022ef4e32fb257b30d3d1014a961" + url: "https://pub.dev" + source: hosted + version: "0.3.1" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test: + dependency: transitive + description: + name: test + sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + url: "https://pub.dev" + source: hosted + version: "1.24.9" + test_api: + dependency: transitive + description: + name: test_api + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + url: "https://pub.dev" + source: hosted + version: "0.6.1" + test_core: + dependency: transitive + description: + name: test_core + sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + url: "https://pub.dev" + source: hosted + version: "0.5.9" + time: + dependency: transitive + description: + name: time + sha256: ad8e018a6c9db36cb917a031853a1aae49467a93e0d464683e029537d848c221 + url: "https://pub.dev" + source: hosted + version: "2.1.4" + timezone: + dependency: transitive + description: + name: timezone + sha256: "2236ec079a174ce07434e89fcd3fcda430025eb7692244139a9cf54fdcf1fc7d" + url: "https://pub.dev" + source: hosted + version: "0.9.4" + timing: + dependency: transitive + description: + name: timing + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + type_plus: + dependency: transitive + description: + name: type_plus + sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 + url: "https://pub.dev" + source: hosted + version: "2.1.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + upower: + dependency: transitive + description: + name: upower + sha256: cf042403154751180affa1d15614db7fa50234bc2373cd21c3db666c38543ebf + url: "https://pub.dev" + source: hosted + version: "0.7.0" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" + url: "https://pub.dev" + source: hosted + version: "6.3.0" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "17cd5e205ea615e2c6ea7a77323a11712dffa0720a8a90540db57a01347f9ad9" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" + url: "https://pub.dev" + source: hosted + version: "6.2.4" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 + url: "https://pub.dev" + source: hosted + version: "3.1.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + url: "https://pub.dev" + source: hosted + version: "2.2.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" + url: "https://pub.dev" + source: hosted + version: "3.1.2" + uuid: + dependency: "direct main" + description: + name: uuid + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + url: "https://pub.dev" + source: hosted + version: "3.0.7" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: c538be99af830f478718b51630ec1b6bee5e74e52c8a802d328d9e71d35d2583 + url: "https://pub.dev" + source: hosted + version: "11.10.0" + watcher: + dependency: transitive + description: + name: watcher + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + web: + dependency: transitive + description: + name: web + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + url: "https://pub.dev" + source: hosted + version: "0.3.0" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + url: "https://pub.dev" + source: hosted + version: "2.4.0" + webdriver: + dependency: transitive + description: + name: webdriver + sha256: "3c923e918918feeb90c4c9fdf1fe39220fa4c0e8e2c0fffaded174498ef86c49" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + webkit_inspection_protocol: + dependency: transitive + description: + name: webkit_inspection_protocol + sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + win32: + dependency: transitive + description: + name: win32 + sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" + url: "https://pub.dev" + source: hosted + version: "5.2.0" + win32_registry: + dependency: transitive + description: + name: win32_registry + sha256: "41fd8a189940d8696b1b810efb9abcf60827b6cbfab90b0c43e8439e3a39d85a" + url: "https://pub.dev" + source: hosted + version: "1.1.2" + workmanager: + dependency: "direct main" + description: + name: workmanager + sha256: ed13530cccd28c5c9959ad42d657cd0666274ca74c56dea0ca183ddd527d3a00 + url: "https://pub.dev" + source: hosted + version: "0.5.2" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d + url: "https://pub.dev" + source: hosted + version: "1.0.4" + xml: + dependency: transitive + description: + name: xml + sha256: "5bc72e1e45e941d825fd7468b9b4cc3b9327942649aeb6fc5cdbf135f0a86e84" + url: "https://pub.dev" + source: hosted + version: "6.3.0" + xxh3: + dependency: transitive + description: + name: xxh3 + sha256: a92b30944a9aeb4e3d4f3c3d4ddb3c7816ca73475cd603682c4f8149690f56d7 + url: "https://pub.dev" + source: hosted + version: "1.0.1" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" +sdks: + dart: ">=3.2.0 <=3.9.0" + flutter: ">=3.16.0" diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock new file mode 100644 index 000000000..abba7781e --- /dev/null +++ b/packages/attendance_management/pubspec.lock @@ -0,0 +1,1273 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 + url: "https://pub.dev" + source: hosted + version: "64.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" + url: "https://pub.dev" + source: hosted + version: "6.2.0" + analyzer_plugin: + dependency: transitive + description: + name: analyzer_plugin + sha256: "9661b30b13a685efaee9f02e5d01ed9f2b423bd889d28a304d02d704aee69161" + url: "https://pub.dev" + source: hosted + version: "0.11.3" + ansicolor: + dependency: transitive + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + url: "https://pub.dev" + source: hosted + version: "2.0.3" + archive: + dependency: transitive + description: + name: archive + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d + url: "https://pub.dev" + source: hosted + version: "3.6.1" + args: + dependency: transitive + description: + name: args + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" + url: "https://pub.dev" + source: hosted + version: "2.5.0" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + auto_route: + dependency: "direct main" + description: + name: auto_route + sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 + url: "https://pub.dev" + source: hosted + version: "7.9.2" + auto_route_generator: + dependency: "direct dev" + description: + name: auto_route_generator + sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" + url: "https://pub.dev" + source: hosted + version: "7.3.2" + bloc: + dependency: transitive + description: + name: bloc + sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e" + url: "https://pub.dev" + source: hosted + version: "8.1.4" + bloc_test: + dependency: "direct dev" + description: + name: bloc_test + sha256: "165a6ec950d9252ebe36dc5335f2e6eb13055f33d56db0eeb7642768849b43d2" + url: "https://pub.dev" + source: hosted + version: "9.1.7" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + build: + dependency: transitive + description: + name: build + sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + build_config: + dependency: transitive + description: + name: build_config + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" + source: hosted + version: "1.1.1" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" + url: "https://pub.dev" + source: hosted + version: "4.0.1" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + build_runner: + dependency: "direct main" + description: + name: build_runner + sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" + url: "https://pub.dev" + source: hosted + version: "2.4.9" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" + url: "https://pub.dev" + source: hosted + version: "7.3.0" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb + url: "https://pub.dev" + source: hosted + version: "8.9.2" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + charcode: + dependency: transitive + description: + name: charcode + sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 + url: "https://pub.dev" + source: hosted + version: "1.3.1" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 + url: "https://pub.dev" + source: hosted + version: "0.4.1" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 + url: "https://pub.dev" + source: hosted + version: "4.10.0" + collection: + dependency: "direct main" + description: + name: collection + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" + source: hosted + version: "1.18.0" + connectivity_plus: + dependency: "direct main" + description: + name: connectivity_plus + sha256: "224a77051d52a11fbad53dd57827594d3bd24f945af28bd70bab376d68d437f0" + url: "https://pub.dev" + source: hosted + version: "5.0.2" + connectivity_plus_platform_interface: + dependency: transitive + description: + name: connectivity_plus_platform_interface + sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a + url: "https://pub.dev" + source: hosted + version: "1.2.4" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + coverage: + dependency: transitive + description: + name: coverage + sha256: "3945034e86ea203af7a056d98e98e42a5518fff200d6e8e6647e1886b07e936e" + url: "https://pub.dev" + source: hosted + version: "1.8.0" + crypto: + dependency: transitive + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://pub.dev" + source: hosted + version: "3.0.3" + cupertino_icons: + dependency: transitive + description: + name: cupertino_icons + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 + url: "https://pub.dev" + source: hosted + version: "1.0.8" + dart_mappable: + dependency: "direct main" + description: + name: dart_mappable + sha256: "47269caf2060533c29b823ff7fa9706502355ffcb61e7f2a374e3a0fb2f2c3f0" + url: "https://pub.dev" + source: hosted + version: "4.2.2" + dart_mappable_builder: + dependency: "direct dev" + description: + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.0" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" + url: "https://pub.dev" + source: hosted + version: "2.3.6" + db_viewer: + dependency: transitive + description: + name: db_viewer + sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + dbus: + dependency: transitive + description: + name: dbus + sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac" + url: "https://pub.dev" + source: hosted + version: "0.7.10" + diff_match_patch: + dependency: transitive + description: + name: diff_match_patch + sha256: "2efc9e6e8f449d0abe15be240e2c2a3bcd977c8d126cfd70598aee60af35c0a4" + url: "https://pub.dev" + source: hosted + version: "0.4.1" + digit_components: + dependency: "direct main" + description: + name: digit_components + sha256: dcdab9542149022cb66241c3c379ca96916f8b6116e585f4799748d859a2ca49 + url: "https://pub.dev" + source: hosted + version: "1.0.2" + digit_data_model: + dependency: "direct main" + description: + name: digit_data_model + sha256: "0b81e96636496b56b4f9c5d918690a17d8985d6b131e0ab54968eb5471ee4f54" + url: "https://pub.dev" + source: hosted + version: "1.0.3+1" + dio: + dependency: "direct main" + description: + name: dio + sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" + url: "https://pub.dev" + source: hosted + version: "5.7.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + drift: + dependency: "direct main" + description: + name: drift + sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + url: "https://pub.dev" + source: hosted + version: "2.15.0" + drift_db_viewer: + dependency: "direct main" + description: + name: drift_db_viewer + sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + drift_dev: + dependency: "direct dev" + description: + name: drift_dev + sha256: c037d9431b6f8dc633652b1469e5f53aaec6e4eb405ed29dd232fa888ef10d88 + url: "https://pub.dev" + source: hosted + version: "2.15.0" + easy_stepper: + dependency: transitive + description: + name: easy_stepper + sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + url: "https://pub.dev" + source: hosted + version: "0.5.2+1" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + file: + dependency: transitive + description: + name: file + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_bloc: + dependency: "direct main" + description: + name: flutter_bloc + sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a + url: "https://pub.dev" + source: hosted + version: "8.1.6" + flutter_focus_watcher: + dependency: transitive + description: + name: flutter_focus_watcher + sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility: + dependency: transitive + description: + name: flutter_keyboard_visibility + sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" + url: "https://pub.dev" + source: hosted + version: "5.4.1" + flutter_keyboard_visibility_linux: + dependency: transitive + description: + name: flutter_keyboard_visibility_linux + sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_macos: + dependency: transitive + description: + name: flutter_keyboard_visibility_macos + sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_platform_interface: + dependency: transitive + description: + name: flutter_keyboard_visibility_platform_interface + sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_web: + dependency: transitive + description: + name: flutter_keyboard_visibility_web + sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_windows: + dependency: transitive + description: + name: flutter_keyboard_visibility_windows + sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 + url: "https://pub.dev" + source: hosted + version: "2.0.3" + flutter_spinkit: + dependency: transitive + description: + name: flutter_spinkit + sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 + url: "https://pub.dev" + source: hosted + version: "5.2.1" + flutter_svg: + dependency: "direct main" + description: + name: flutter_svg + sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" + url: "https://pub.dev" + source: hosted + version: "2.0.10+1" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_typeahead: + dependency: transitive + description: + name: flutter_typeahead + sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 + url: "https://pub.dev" + source: hosted + version: "4.8.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + fluttertoast: + dependency: "direct main" + description: + name: fluttertoast + sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" + url: "https://pub.dev" + source: hosted + version: "8.2.5" + freezed: + dependency: "direct dev" + description: + name: freezed + sha256: a434911f643466d78462625df76fd9eb13e57348ff43fe1f77bbe909522c67a1 + url: "https://pub.dev" + source: hosted + version: "2.5.2" + freezed_annotation: + dependency: "direct main" + description: + name: freezed_annotation + sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 + url: "https://pub.dev" + source: hosted + version: "2.4.4" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + google_fonts: + dependency: transitive + description: + name: google_fonts + sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + url: "https://pub.dev" + source: hosted + version: "4.0.5" + graphs: + dependency: transitive + description: + name: graphs + sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 + url: "https://pub.dev" + source: hosted + version: "2.3.1" + horizontal_data_table: + dependency: transitive + description: + name: horizontal_data_table + sha256: c8ab5256bbced698a729f3e0ff2cb0e8e97416cdbb082860370eaf883badf722 + url: "https://pub.dev" + source: hosted + version: "4.3.1" + http: + dependency: transitive + description: + name: http + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + url: "https://pub.dev" + source: hosted + version: "1.2.0" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + intl: + dependency: "direct main" + description: + name: intl + sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + url: "https://pub.dev" + source: hosted + version: "0.18.1" + io: + dependency: transitive + description: + name: io + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + isar: + dependency: transitive + description: + name: isar + sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" + isar_flutter_libs: + dependency: transitive + description: + name: isar_flutter_libs + sha256: bc6768cc4b9c61aabff77152e7f33b4b17d2fc93134f7af1c3dd51500fe8d5e8 + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" + js: + dependency: transitive + description: + name: js + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + url: "https://pub.dev" + source: hosted + version: "0.6.7" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.dev" + source: hosted + version: "4.9.0" + json_serializable: + dependency: "direct dev" + description: + name: json_serializable + sha256: ea1432d167339ea9b5bb153f0571d0039607a873d6e04e0117af043f14a1fd4b + url: "https://pub.dev" + source: hosted + version: "6.8.0" + lints: + dependency: transitive + description: + name: lints + sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + location: + dependency: "direct main" + description: + name: location + sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + url: "https://pub.dev" + source: hosted + version: "5.0.3" + location_platform_interface: + dependency: transitive + description: + name: location_platform_interface + sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + url: "https://pub.dev" + source: hosted + version: "3.1.2" + location_web: + dependency: transitive + description: + name: location_web + sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + url: "https://pub.dev" + source: hosted + version: "4.2.0" + logging: + dependency: transitive + description: + name: logging + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + lottie: + dependency: transitive + description: + name: lottie + sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + url: "https://pub.dev" + source: hosted + version: "2.7.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + url: "https://pub.dev" + source: hosted + version: "0.12.16" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + url: "https://pub.dev" + source: hosted + version: "0.5.0" + meta: + dependency: transitive + description: + name: meta + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + url: "https://pub.dev" + source: hosted + version: "1.10.0" + mime: + dependency: transitive + description: + name: mime + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" + url: "https://pub.dev" + source: hosted + version: "1.0.6" + mocktail: + dependency: "direct dev" + description: + name: mocktail + sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + nested: + dependency: transitive + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + nm: + dependency: transitive + description: + name: nm + sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" + url: "https://pub.dev" + source: hosted + version: "0.5.0" + node_preamble: + dependency: transitive + description: + name: node_preamble + sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + overlay_builder: + dependency: "direct main" + description: + name: overlay_builder + sha256: "58b97bc5f67a2e2bb7006dd88e697ac757dfffc9dbd1e7dfc1917fb510a4b5c8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + package_info_plus: + dependency: transitive + description: + name: package_info_plus + sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + url: "https://pub.dev" + source: hosted + version: "5.0.1" + package_info_plus_platform_interface: + dependency: transitive + description: + name: package_info_plus_platform_interface + sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + path: + dependency: "direct main" + description: + name: path + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + url: "https://pub.dev" + source: hosted + version: "1.8.3" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + url: "https://pub.dev" + source: hosted + version: "1.0.1" + path_provider: + dependency: "direct main" + description: + name: path_provider + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 + url: "https://pub.dev" + source: hosted + version: "2.1.4" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d + url: "https://pub.dev" + source: hosted + version: "2.2.4" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 + url: "https://pub.dev" + source: hosted + version: "2.3.0" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + url: "https://pub.dev" + source: hosted + version: "6.0.2" + platform: + dependency: transitive + description: + name: platform + sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" + url: "https://pub.dev" + source: hosted + version: "3.1.5" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + pointer_interceptor: + dependency: transitive + description: + name: pointer_interceptor + sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 + url: "https://pub.dev" + source: hosted + version: "0.9.3+7" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" + provider: + dependency: transitive + description: + name: provider + sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c + url: "https://pub.dev" + source: hosted + version: "6.1.2" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 + url: "https://pub.dev" + source: hosted + version: "1.3.0" + reactive_flutter_typeahead: + dependency: transitive + description: + name: reactive_flutter_typeahead + sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 + url: "https://pub.dev" + source: hosted + version: "0.8.1" + reactive_forms: + dependency: "direct main" + description: + name: reactive_forms + sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + url: "https://pub.dev" + source: hosted + version: "14.3.0" + recase: + dependency: transitive + description: + name: recase + sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 + url: "https://pub.dev" + source: hosted + version: "4.1.0" + remove_emoji_input_formatter: + dependency: transitive + description: + name: remove_emoji_input_formatter + sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" + url: "https://pub.dev" + source: hosted + version: "0.0.1+1" + shelf: + dependency: transitive + description: + name: shelf + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 + url: "https://pub.dev" + source: hosted + version: "1.4.1" + shelf_packages_handler: + dependency: transitive + description: + name: shelf_packages_handler + sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + shelf_static: + dependency: transitive + description: + name: shelf_static + sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e + url: "https://pub.dev" + source: hosted + version: "1.1.2" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" + url: "https://pub.dev" + source: hosted + version: "1.5.0" + source_helper: + dependency: transitive + description: + name: source_helper + sha256: "6adebc0006c37dd63fe05bca0a929b99f06402fc95aa35bf36d67f5c06de01fd" + url: "https://pub.dev" + source: hosted + version: "1.3.4" + source_map_stack_trace: + dependency: transitive + description: + name: source_map_stack_trace + sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + source_maps: + dependency: transitive + description: + name: source_maps + sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" + url: "https://pub.dev" + source: hosted + version: "0.10.12" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + sqlite3: + dependency: transitive + description: + name: sqlite3 + sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" + url: "https://pub.dev" + source: hosted + version: "2.4.0" + sqlite3_flutter_libs: + dependency: "direct main" + description: + name: sqlite3_flutter_libs + sha256: "62bbb4073edbcdf53f40c80775f33eea01d301b7b81417e5b3fb7395416258c1" + url: "https://pub.dev" + source: hosted + version: "0.5.24" + sqlparser: + dependency: transitive + description: + name: sqlparser + sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" + url: "https://pub.dev" + source: hosted + version: "0.34.1" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://pub.dev" + source: hosted + version: "1.11.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" + source: hosted + version: "2.1.2" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test: + dependency: transitive + description: + name: test + sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + url: "https://pub.dev" + source: hosted + version: "1.24.9" + test_api: + dependency: transitive + description: + name: test_api + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + url: "https://pub.dev" + source: hosted + version: "0.6.1" + test_core: + dependency: transitive + description: + name: test_core + sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + url: "https://pub.dev" + source: hosted + version: "0.5.9" + timing: + dependency: transitive + description: + name: timing + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + type_plus: + dependency: transitive + description: + name: type_plus + sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 + url: "https://pub.dev" + source: hosted + version: "2.1.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" + uuid: + dependency: transitive + description: + name: uuid + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + url: "https://pub.dev" + source: hosted + version: "3.0.7" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + url: "https://pub.dev" + source: hosted + version: "13.0.0" + watcher: + dependency: transitive + description: + name: watcher + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + web: + dependency: transitive + description: + name: web + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + url: "https://pub.dev" + source: hosted + version: "0.3.0" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + url: "https://pub.dev" + source: hosted + version: "2.4.0" + webkit_inspection_protocol: + dependency: transitive + description: + name: webkit_inspection_protocol + sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + win32: + dependency: transitive + description: + name: win32 + sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" + url: "https://pub.dev" + source: hosted + version: "5.2.0" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d + url: "https://pub.dev" + source: hosted + version: "1.0.4" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" +sdks: + dart: ">=3.2.0 <3.9.0" + flutter: ">=3.16.0" diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock new file mode 100644 index 000000000..99723d294 --- /dev/null +++ b/packages/referral_reconciliation/pubspec.lock @@ -0,0 +1,1465 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a + url: "https://pub.dev" + source: hosted + version: "61.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 + url: "https://pub.dev" + source: hosted + version: "5.13.0" + analyzer_plugin: + dependency: transitive + description: + name: analyzer_plugin + sha256: c1d5f167683de03d5ab6c3b53fc9aeefc5d59476e7810ba7bbddff50c6f4392d + url: "https://pub.dev" + source: hosted + version: "0.11.2" + ansicolor: + dependency: transitive + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + url: "https://pub.dev" + source: hosted + version: "2.0.3" + archive: + dependency: transitive + description: + name: archive + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d + url: "https://pub.dev" + source: hosted + version: "3.6.1" + args: + dependency: transitive + description: + name: args + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" + url: "https://pub.dev" + source: hosted + version: "2.5.0" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + audioplayers: + dependency: transitive + description: + name: audioplayers + sha256: c05c6147124cd63e725e861335a8b4d57300b80e6e92cea7c145c739223bbaef + url: "https://pub.dev" + source: hosted + version: "5.2.1" + audioplayers_android: + dependency: transitive + description: + name: audioplayers_android + sha256: b00e1a0e11365d88576320ec2d8c192bc21f1afb6c0e5995d1c57ae63156acb5 + url: "https://pub.dev" + source: hosted + version: "4.0.3" + audioplayers_darwin: + dependency: transitive + description: + name: audioplayers_darwin + sha256: "3034e99a6df8d101da0f5082dcca0a2a99db62ab1d4ddb3277bed3f6f81afe08" + url: "https://pub.dev" + source: hosted + version: "5.0.2" + audioplayers_linux: + dependency: transitive + description: + name: audioplayers_linux + sha256: "60787e73fefc4d2e0b9c02c69885402177e818e4e27ef087074cf27c02246c9e" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + audioplayers_platform_interface: + dependency: transitive + description: + name: audioplayers_platform_interface + sha256: "365c547f1bb9e77d94dd1687903a668d8f7ac3409e48e6e6a3668a1ac2982adb" + url: "https://pub.dev" + source: hosted + version: "6.1.0" + audioplayers_web: + dependency: transitive + description: + name: audioplayers_web + sha256: "22cd0173e54d92bd9b2c80b1204eb1eb159ece87475ab58c9788a70ec43c2a62" + url: "https://pub.dev" + source: hosted + version: "4.1.0" + audioplayers_windows: + dependency: transitive + description: + name: audioplayers_windows + sha256: "9536812c9103563644ada2ef45ae523806b0745f7a78e89d1b5fb1951de90e1a" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + auto_route: + dependency: "direct main" + description: + name: auto_route + sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 + url: "https://pub.dev" + source: hosted + version: "7.9.2" + auto_route_generator: + dependency: "direct dev" + description: + name: auto_route_generator + sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" + url: "https://pub.dev" + source: hosted + version: "7.3.2" + bloc: + dependency: transitive + description: + name: bloc + sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e" + url: "https://pub.dev" + source: hosted + version: "8.1.4" + bloc_test: + dependency: "direct dev" + description: + name: bloc_test + sha256: "165a6ec950d9252ebe36dc5335f2e6eb13055f33d56db0eeb7642768849b43d2" + url: "https://pub.dev" + source: hosted + version: "9.1.7" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + build: + dependency: transitive + description: + name: build + sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + build_config: + dependency: transitive + description: + name: build_config + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" + source: hosted + version: "1.1.1" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" + url: "https://pub.dev" + source: hosted + version: "4.0.1" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + build_runner: + dependency: "direct dev" + description: + name: build_runner + sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" + url: "https://pub.dev" + source: hosted + version: "2.4.9" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" + url: "https://pub.dev" + source: hosted + version: "7.3.0" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb + url: "https://pub.dev" + source: hosted + version: "8.9.2" + camera: + dependency: transitive + description: + name: camera + sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" + url: "https://pub.dev" + source: hosted + version: "0.10.5+9" + camera_android: + dependency: transitive + description: + name: camera_android + sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 + url: "https://pub.dev" + source: hosted + version: "0.10.9+2" + camera_avfoundation: + dependency: transitive + description: + name: camera_avfoundation + sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" + url: "https://pub.dev" + source: hosted + version: "0.9.13+10" + camera_platform_interface: + dependency: transitive + description: + name: camera_platform_interface + sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 + url: "https://pub.dev" + source: hosted + version: "2.8.0" + camera_web: + dependency: transitive + description: + name: camera_web + sha256: b9235ec0a2ce949daec546f1f3d86f05c3921ed31c7d9ab6b7c03214d152fc2d + url: "https://pub.dev" + source: hosted + version: "0.3.4" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + charcode: + dependency: transitive + description: + name: charcode + sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 + url: "https://pub.dev" + source: hosted + version: "1.3.1" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 + url: "https://pub.dev" + source: hosted + version: "0.4.1" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 + url: "https://pub.dev" + source: hosted + version: "4.10.0" + collection: + dependency: "direct main" + description: + name: collection + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" + source: hosted + version: "1.18.0" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + coverage: + dependency: transitive + description: + name: coverage + sha256: "3945034e86ea203af7a056d98e98e42a5518fff200d6e8e6647e1886b07e936e" + url: "https://pub.dev" + source: hosted + version: "1.8.0" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e + url: "https://pub.dev" + source: hosted + version: "0.3.3+8" + crypto: + dependency: transitive + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://pub.dev" + source: hosted + version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + cupertino_icons: + dependency: transitive + description: + name: cupertino_icons + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 + url: "https://pub.dev" + source: hosted + version: "1.0.8" + dart_code_metrics: + dependency: "direct dev" + description: + name: dart_code_metrics + sha256: "3dede3f7abc077a4181ec7445448a289a9ce08e2981e6a4d49a3fb5099d47e1f" + url: "https://pub.dev" + source: hosted + version: "5.7.6" + dart_code_metrics_presets: + dependency: transitive + description: + name: dart_code_metrics_presets + sha256: b71eadf02a3787ebd5c887623f83f6fdc204d45c75a081bd636c4104b3fd8b73 + url: "https://pub.dev" + source: hosted + version: "1.8.0" + dart_mappable: + dependency: "direct main" + description: + name: dart_mappable + sha256: "47269caf2060533c29b823ff7fa9706502355ffcb61e7f2a374e3a0fb2f2c3f0" + url: "https://pub.dev" + source: hosted + version: "4.2.2" + dart_mappable_builder: + dependency: "direct dev" + description: + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.0" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + db_viewer: + dependency: transitive + description: + name: db_viewer + sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + diff_match_patch: + dependency: transitive + description: + name: diff_match_patch + sha256: "2efc9e6e8f449d0abe15be240e2c2a3bcd977c8d126cfd70598aee60af35c0a4" + url: "https://pub.dev" + source: hosted + version: "0.4.1" + digit_components: + dependency: "direct main" + description: + name: digit_components + sha256: dcdab9542149022cb66241c3c379ca96916f8b6116e585f4799748d859a2ca49 + url: "https://pub.dev" + source: hosted + version: "1.0.2" + digit_data_model: + dependency: "direct main" + description: + name: digit_data_model + sha256: "0b81e96636496b56b4f9c5d918690a17d8985d6b131e0ab54968eb5471ee4f54" + url: "https://pub.dev" + source: hosted + version: "1.0.3+1" + digit_scanner: + dependency: "direct main" + description: + name: digit_scanner + sha256: "9862c4885465bb1942e36dc9b42596c201648db9b0f5ffb8ad768e2409fc2742" + url: "https://pub.dev" + source: hosted + version: "1.0.3+1" + dio: + dependency: transitive + description: + name: dio + sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" + url: "https://pub.dev" + source: hosted + version: "5.7.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + drift: + dependency: "direct main" + description: + name: drift + sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + url: "https://pub.dev" + source: hosted + version: "2.15.0" + drift_db_viewer: + dependency: "direct main" + description: + name: drift_db_viewer + sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + drift_dev: + dependency: "direct dev" + description: + name: drift_dev + sha256: c037d9431b6f8dc633652b1469e5f53aaec6e4eb405ed29dd232fa888ef10d88 + url: "https://pub.dev" + source: hosted + version: "2.15.0" + easy_stepper: + dependency: transitive + description: + name: easy_stepper + sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + url: "https://pub.dev" + source: hosted + version: "0.5.2+1" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + file: + dependency: transitive + description: + name: file + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" + source: hosted + version: "6.1.4" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_bloc: + dependency: "direct main" + description: + name: flutter_bloc + sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a + url: "https://pub.dev" + source: hosted + version: "8.1.6" + flutter_focus_watcher: + dependency: transitive + description: + name: flutter_focus_watcher + sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility: + dependency: "direct main" + description: + name: flutter_keyboard_visibility + sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" + url: "https://pub.dev" + source: hosted + version: "5.4.1" + flutter_keyboard_visibility_linux: + dependency: transitive + description: + name: flutter_keyboard_visibility_linux + sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_macos: + dependency: transitive + description: + name: flutter_keyboard_visibility_macos + sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_platform_interface: + dependency: transitive + description: + name: flutter_keyboard_visibility_platform_interface + sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_web: + dependency: transitive + description: + name: flutter_keyboard_visibility_web + sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_windows: + dependency: transitive + description: + name: flutter_keyboard_visibility_windows + sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: "8cf40eebf5dec866a6d1956ad7b4f7016e6c0cc69847ab946833b7d43743809f" + url: "https://pub.dev" + source: hosted + version: "2.0.19" + flutter_spinkit: + dependency: transitive + description: + name: flutter_spinkit + sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 + url: "https://pub.dev" + source: hosted + version: "5.2.1" + flutter_svg: + dependency: "direct main" + description: + name: flutter_svg + sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c + url: "https://pub.dev" + source: hosted + version: "2.0.9" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_typeahead: + dependency: transitive + description: + name: flutter_typeahead + sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 + url: "https://pub.dev" + source: hosted + version: "4.8.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + fluttertoast: + dependency: "direct main" + description: + name: fluttertoast + sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" + url: "https://pub.dev" + source: hosted + version: "8.2.5" + freezed: + dependency: "direct dev" + description: + name: freezed + sha256: a434911f643466d78462625df76fd9eb13e57348ff43fe1f77bbe909522c67a1 + url: "https://pub.dev" + source: hosted + version: "2.5.2" + freezed_annotation: + dependency: "direct main" + description: + name: freezed_annotation + sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 + url: "https://pub.dev" + source: hosted + version: "2.4.4" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + google_fonts: + dependency: transitive + description: + name: google_fonts + sha256: "6b6f10f0ce3c42f6552d1c70d2c28d764cf22bb487f50f66cca31dcd5194f4d6" + url: "https://pub.dev" + source: hosted + version: "4.0.4" + google_mlkit_barcode_scanning: + dependency: transitive + description: + name: google_mlkit_barcode_scanning + sha256: "965183a8cd5cef8477ceea5dbdf29c34a739cf0cfbf1bdad54cd3f9f1807afe5" + url: "https://pub.dev" + source: hosted + version: "0.10.0" + google_mlkit_commons: + dependency: transitive + description: + name: google_mlkit_commons + sha256: "046586b381cdd139f7f6a05ad6998f7e339d061bd70158249907358394b5f496" + url: "https://pub.dev" + source: hosted + version: "0.6.1" + graphs: + dependency: transitive + description: + name: graphs + sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 + url: "https://pub.dev" + source: hosted + version: "2.3.1" + group_radio_button: + dependency: "direct main" + description: + name: group_radio_button + sha256: "204de8d16b224be7fc72dade0c3afd410ff5a34417d89f74f0fd8be7a8c2b4d6" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + gs1_barcode_parser: + dependency: transitive + description: + name: gs1_barcode_parser + sha256: ff171bc40038de3f7178fbc32eaf9eebc3d35a3c4c00bb0281fe4a976d853a42 + url: "https://pub.dev" + source: hosted + version: "1.1.0" + horizontal_data_table: + dependency: transitive + description: + name: horizontal_data_table + sha256: c8ab5256bbced698a729f3e0ff2cb0e8e97416cdbb082860370eaf883badf722 + url: "https://pub.dev" + source: hosted + version: "4.3.1" + html: + dependency: transitive + description: + name: html + sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" + url: "https://pub.dev" + source: hosted + version: "0.15.4" + http: + dependency: transitive + description: + name: http + sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + url: "https://pub.dev" + source: hosted + version: "0.13.6" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + intl: + dependency: "direct main" + description: + name: intl + sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + url: "https://pub.dev" + source: hosted + version: "0.18.1" + io: + dependency: transitive + description: + name: io + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + isar: + dependency: transitive + description: + name: isar + sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" + isar_flutter_libs: + dependency: transitive + description: + name: isar_flutter_libs + sha256: bc6768cc4b9c61aabff77152e7f33b4b17d2fc93134f7af1c3dd51500fe8d5e8 + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" + js: + dependency: transitive + description: + name: js + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + url: "https://pub.dev" + source: hosted + version: "0.6.7" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.dev" + source: hosted + version: "4.9.0" + json_serializable: + dependency: "direct dev" + description: + name: json_serializable + sha256: ea1432d167339ea9b5bb153f0571d0039607a873d6e04e0117af043f14a1fd4b + url: "https://pub.dev" + source: hosted + version: "6.8.0" + lints: + dependency: transitive + description: + name: lints + sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + url: "https://pub.dev" + source: hosted + version: "3.0.0" + location: + dependency: transitive + description: + name: location + sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + url: "https://pub.dev" + source: hosted + version: "5.0.3" + location_platform_interface: + dependency: transitive + description: + name: location_platform_interface + sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + url: "https://pub.dev" + source: hosted + version: "3.1.2" + location_web: + dependency: transitive + description: + name: location_web + sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + url: "https://pub.dev" + source: hosted + version: "4.2.0" + logging: + dependency: transitive + description: + name: logging + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + lottie: + dependency: transitive + description: + name: lottie + sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + url: "https://pub.dev" + source: hosted + version: "2.7.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + url: "https://pub.dev" + source: hosted + version: "0.12.16" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + url: "https://pub.dev" + source: hosted + version: "0.5.0" + meta: + dependency: transitive + description: + name: meta + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + url: "https://pub.dev" + source: hosted + version: "1.10.0" + mime: + dependency: transitive + description: + name: mime + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" + url: "https://pub.dev" + source: hosted + version: "1.0.6" + mocktail: + dependency: "direct dev" + description: + name: mocktail + sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + nested: + dependency: transitive + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + node_preamble: + dependency: transitive + description: + name: node_preamble + sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + overlay_builder: + dependency: "direct main" + description: + name: overlay_builder + sha256: "58b97bc5f67a2e2bb7006dd88e697ac757dfffc9dbd1e7dfc1917fb510a4b5c8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + package_info_plus: + dependency: transitive + description: + name: package_info_plus + sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + url: "https://pub.dev" + source: hosted + version: "5.0.1" + package_info_plus_platform_interface: + dependency: transitive + description: + name: package_info_plus_platform_interface + sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + path: + dependency: "direct main" + description: + name: path + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + url: "https://pub.dev" + source: hosted + version: "1.8.3" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + url: "https://pub.dev" + source: hosted + version: "1.0.1" + path_provider: + dependency: "direct main" + description: + name: path_provider + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 + url: "https://pub.dev" + source: hosted + version: "2.1.4" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d + url: "https://pub.dev" + source: hosted + version: "2.2.4" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 + url: "https://pub.dev" + source: hosted + version: "2.3.0" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + url: "https://pub.dev" + source: hosted + version: "6.0.2" + platform: + dependency: transitive + description: + name: platform + sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" + url: "https://pub.dev" + source: hosted + version: "3.1.5" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + pluto_grid: + dependency: "direct main" + description: + name: pluto_grid + sha256: e77c34a33dd9d74abbe20ba1df96474dded150dd042c7f7495be1bc2c26bd37f + url: "https://pub.dev" + source: hosted + version: "7.0.2" + pointer_interceptor: + dependency: transitive + description: + name: pointer_interceptor + sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 + url: "https://pub.dev" + source: hosted + version: "0.9.3+7" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" + process: + dependency: transitive + description: + name: process + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + provider: + dependency: transitive + description: + name: provider + sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c + url: "https://pub.dev" + source: hosted + version: "6.1.2" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + pub_updater: + dependency: transitive + description: + name: pub_updater + sha256: "05ae70703e06f7fdeb05f7f02dd680b8aad810e87c756a618f33e1794635115c" + url: "https://pub.dev" + source: hosted + version: "0.3.0" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 + url: "https://pub.dev" + source: hosted + version: "1.3.0" + reactive_flutter_typeahead: + dependency: transitive + description: + name: reactive_flutter_typeahead + sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 + url: "https://pub.dev" + source: hosted + version: "0.8.1" + reactive_forms: + dependency: "direct main" + description: + name: reactive_forms + sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + url: "https://pub.dev" + source: hosted + version: "14.3.0" + recase: + dependency: "direct main" + description: + name: recase + sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 + url: "https://pub.dev" + source: hosted + version: "4.1.0" + remove_emoji_input_formatter: + dependency: transitive + description: + name: remove_emoji_input_formatter + sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" + url: "https://pub.dev" + source: hosted + version: "0.0.1+1" + rxdart: + dependency: transitive + description: + name: rxdart + sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" + url: "https://pub.dev" + source: hosted + version: "0.27.7" + shelf: + dependency: transitive + description: + name: shelf + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 + url: "https://pub.dev" + source: hosted + version: "1.4.1" + shelf_packages_handler: + dependency: transitive + description: + name: shelf_packages_handler + sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + shelf_static: + dependency: transitive + description: + name: shelf_static + sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e + url: "https://pub.dev" + source: hosted + version: "1.1.2" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" + url: "https://pub.dev" + source: hosted + version: "1.5.0" + source_helper: + dependency: transitive + description: + name: source_helper + sha256: "6adebc0006c37dd63fe05bca0a929b99f06402fc95aa35bf36d67f5c06de01fd" + url: "https://pub.dev" + source: hosted + version: "1.3.4" + source_map_stack_trace: + dependency: transitive + description: + name: source_map_stack_trace + sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + source_maps: + dependency: transitive + description: + name: source_maps + sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" + url: "https://pub.dev" + source: hosted + version: "0.10.12" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + sqlite3: + dependency: transitive + description: + name: sqlite3 + sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" + url: "https://pub.dev" + source: hosted + version: "2.4.0" + sqlite3_flutter_libs: + dependency: "direct main" + description: + name: sqlite3_flutter_libs + sha256: "62bbb4073edbcdf53f40c80775f33eea01d301b7b81417e5b3fb7395416258c1" + url: "https://pub.dev" + source: hosted + version: "0.5.24" + sqlparser: + dependency: transitive + description: + name: sqlparser + sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" + url: "https://pub.dev" + source: hosted + version: "0.34.1" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://pub.dev" + source: hosted + version: "1.11.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" + source: hosted + version: "2.1.2" + stream_transform: + dependency: "direct main" + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test: + dependency: transitive + description: + name: test + sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + url: "https://pub.dev" + source: hosted + version: "1.24.9" + test_api: + dependency: transitive + description: + name: test_api + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + url: "https://pub.dev" + source: hosted + version: "0.6.1" + test_core: + dependency: transitive + description: + name: test_core + sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + url: "https://pub.dev" + source: hosted + version: "0.5.9" + timing: + dependency: transitive + description: + name: timing + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + type_plus: + dependency: transitive + description: + name: type_plus + sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 + url: "https://pub.dev" + source: hosted + version: "2.1.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" + uuid: + dependency: "direct main" + description: + name: uuid + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + url: "https://pub.dev" + source: hosted + version: "3.0.7" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: "4ac59808bbfca6da38c99f415ff2d3a5d7ca0a6b4809c71d9cf30fba5daf9752" + url: "https://pub.dev" + source: hosted + version: "1.1.10+1" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: f3247e7ab0ec77dc759263e68394990edc608fb2b480b80db8aa86ed09279e33 + url: "https://pub.dev" + source: hosted + version: "1.1.10+1" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "18489bdd8850de3dd7ca8a34e0c446f719ec63e2bab2e7a8cc66a9028dd76c5a" + url: "https://pub.dev" + source: hosted + version: "1.1.10+1" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + url: "https://pub.dev" + source: hosted + version: "13.0.0" + watcher: + dependency: transitive + description: + name: watcher + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + web: + dependency: transitive + description: + name: web + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + url: "https://pub.dev" + source: hosted + version: "0.3.0" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + url: "https://pub.dev" + source: hosted + version: "2.4.0" + webkit_inspection_protocol: + dependency: transitive + description: + name: webkit_inspection_protocol + sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + win32: + dependency: transitive + description: + name: win32 + sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" + url: "https://pub.dev" + source: hosted + version: "5.2.0" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d + url: "https://pub.dev" + source: hosted + version: "1.0.4" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" +sdks: + dart: ">=3.2.0 <3.9.0" + flutter: ">=3.16.0" From a1049a6e87432ff7a69b763d135dd3390cd6b88d Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Tue, 24 Sep 2024 15:06:24 +0530 Subject: [PATCH 122/241] Changed the flutter version in lock files --- packages/digit_scanner/example/pubspec.lock | 56 +++++---------------- packages/digit_scanner/example/pubspec.yaml | 2 +- 2 files changed, 13 insertions(+), 45 deletions(-) diff --git a/packages/digit_scanner/example/pubspec.lock b/packages/digit_scanner/example/pubspec.lock index 5032afc21..75da90ebe 100644 --- a/packages/digit_scanner/example/pubspec.lock +++ b/packages/digit_scanner/example/pubspec.lock @@ -615,30 +615,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.9.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" - url: "https://pub.dev" - source: hosted - version: "10.0.4" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" - url: "https://pub.dev" - source: hosted - version: "3.0.3" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://pub.dev" - source: hosted - version: "3.0.1" lints: dependency: transitive description: @@ -691,26 +667,26 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.5.0" meta: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.10.0" mime: dependency: transitive description: @@ -763,10 +739,10 @@ packages: dependency: transitive description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.8.3" path_parsing: dependency: transitive description: @@ -1000,10 +976,10 @@ packages: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.6.1" timing: dependency: transitive description: @@ -1060,14 +1036,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - vm_service: - dependency: transitive - description: - name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" - url: "https://pub.dev" - source: hosted - version: "14.2.1" watcher: dependency: transitive description: @@ -1125,5 +1093,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.3.0 <3.9.0" - flutter: ">=3.18.0-18.0.pre.54" + dart: ">=3.2.0 <3.9.0" + flutter: ">=3.16.0" diff --git a/packages/digit_scanner/example/pubspec.yaml b/packages/digit_scanner/example/pubspec.yaml index 4cecc309b..a61d03b65 100644 --- a/packages/digit_scanner/example/pubspec.yaml +++ b/packages/digit_scanner/example/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: '>=3.2.3 <4.0.0' + sdk: '>=3.2.0 <4.0.0' # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions From a5a4393f65eed2dbab03bf8cbbe7bf386e79d518 Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Tue, 1 Oct 2024 10:30:06 +0530 Subject: [PATCH 123/241] localisation added for no facilities dialog --- .../lib/utils/i18_key_constants.dart | 3 +++ .../no_facilities_assigned_dialog.dart | 18 +++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/packages/registration_delivery/lib/utils/i18_key_constants.dart b/packages/registration_delivery/lib/utils/i18_key_constants.dart index 6dbb112c2..880ce5f22 100644 --- a/packages/registration_delivery/lib/utils/i18_key_constants.dart +++ b/packages/registration_delivery/lib/utils/i18_key_constants.dart @@ -643,6 +643,9 @@ class ReferBeneficiary { String get selectCycle => 'REFERRAL_SELECT_CYCLE'; String get createReferralLabel => 'CREATE_REFERRAL_LABEL'; String get noChecklistFound => 'NO_CHECKLISTS_FOUND'; + String get noFacilityAssigned => 'NO_FACILITY_ASSIGNED'; + String get noFacilityAssignedDescription => + 'NO_FACILITY_ASSIGNED_DESCRIPTION'; } class ReasonForDeletion { diff --git a/packages/registration_delivery/lib/widgets/inventory/no_facilities_assigned_dialog.dart b/packages/registration_delivery/lib/widgets/inventory/no_facilities_assigned_dialog.dart index a078d5f96..bd158dde8 100644 --- a/packages/registration_delivery/lib/widgets/inventory/no_facilities_assigned_dialog.dart +++ b/packages/registration_delivery/lib/widgets/inventory/no_facilities_assigned_dialog.dart @@ -4,26 +4,30 @@ import 'package:digit_ui_components/theme/digit_theme.dart'; import 'package:digit_ui_components/widgets/atoms/digit_button.dart'; import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:flutter/material.dart'; +import 'package:registration_delivery/blocs/app_localization.dart'; + +import '../../utils/i18_key_constants.dart' as i18; class NoFacilitiesAssignedDialog { static Future show(BuildContext context) { return showDialog( context: context, - builder: (ctx)=> Popup( + builder: (ctx) => Popup( titleIcon: Icon( Icons.warning, color: DigitTheme.instance.colors.light.alertError, ), - title: 'No facilities assigned', - description: 'Please select another boundary or ' - 'contact the system administrator to assign ' - 'a facility.', + title: RegistrationDeliveryLocalization.of(context) + .translate(i18.referBeneficiary.noFacilityAssigned), + description: RegistrationDeliveryLocalization.of(context) + .translate(i18.referBeneficiary.noFacilityAssignedDescription), actions: [ Button( - label: 'Close', + label: RegistrationDeliveryLocalization.of(context) + .translate(i18.common.corecommonclose), type: ButtonType.primary, size: ButtonSize.large, - onPressed: (){ + onPressed: () { Navigator.of(context, rootNavigator: true).pop(); context.router.maybePop(); }, From 9faa8570bad4733903b6ad51aa062b4e4de9fbc3 Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Tue, 1 Oct 2024 10:30:49 +0530 Subject: [PATCH 124/241] comment code remove --- .../lib/pages/reason_for_deletion.dart | 239 +++++++++--------- 1 file changed, 119 insertions(+), 120 deletions(-) diff --git a/packages/registration_delivery/lib/pages/reason_for_deletion.dart b/packages/registration_delivery/lib/pages/reason_for_deletion.dart index c4d38dc12..8635aafbe 100644 --- a/packages/registration_delivery/lib/pages/reason_for_deletion.dart +++ b/packages/registration_delivery/lib/pages/reason_for_deletion.dart @@ -16,6 +16,7 @@ import '../widgets/localized.dart'; @RoutePage() class ReasonForDeletionPage extends LocalizedStatefulWidget { final bool isHousholdDelete; + const ReasonForDeletionPage({ super.key, super.appLocalizations, @@ -40,143 +41,141 @@ class ReasonForDeletionPageState extends LocalizedState { builder: (context, form, child) { return ScrollableContent( footer: DigitCard( - margin: const EdgeInsets.only(top: spacer2), - padding: const EdgeInsets.all(spacer2), - children: [ - BlocBuilder( - builder: (ctx, state) { - if (state.loading) { - return const Center( - child: CircularProgressIndicator(), - ); - } + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [ + BlocBuilder( + builder: (ctx, state) { + if (state.loading) { + return const Center( + child: CircularProgressIndicator(), + ); + } - return Button( - label: localizations - .translate(i18.householdLocation.actionLabel), - type: ButtonType.primary, - size: ButtonSize.large, - mainAxisSize: MainAxisSize.max, - onPressed: () { - if (form.valid) { - !widget.isHousholdDelete - ? context.read().add( - HouseholdOverviewDeleteIndividualEvent( - projectId: RegistrationDeliverySingleton() - .projectId!, - householdModel: - state.householdMemberWrapper.household!, - individualModel: state.selectedIndividual!, - projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, - ), - ) - : context.read().add( - HouseholdOverviewDeleteHouseholdEvent( + return Button( + label: localizations + .translate(i18.householdLocation.actionLabel), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () { + if (form.valid) { + !widget.isHousholdDelete + ? context.read().add( + HouseholdOverviewDeleteIndividualEvent( + projectId: + RegistrationDeliverySingleton() + .projectId!, + householdModel: state + .householdMemberWrapper.household!, + individualModel: + state.selectedIndividual!, + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType!, + ), + ) + : context.read().add( + HouseholdOverviewDeleteHouseholdEvent( + projectId: + RegistrationDeliverySingleton() + .projectId!, + householdModel: state + .householdMemberWrapper.household!, + members: state + .householdMemberWrapper.members!, + projectBeneficiaryModel: state + .householdMemberWrapper + .projectBeneficiaries! + .first, + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType!, + ), + ); + + // context.router.maybePop(); + final parent = + context.router.parent() as StackRouter; + + if (widget.isHousholdDelete) { + (context.router.parent() as StackRouter) + .maybePop(); + } + parent.popUntil((route) => + route.settings.name == + BeneficiaryWrapperRoute.name); + final reloadState = + context.read(); + Future.delayed( + const Duration(milliseconds: 500), + () { + reloadState.add( + HouseholdOverviewReloadEvent( projectId: RegistrationDeliverySingleton() .projectId!, - householdModel: - state.householdMemberWrapper.household!, - members: - state.householdMemberWrapper.members!, - projectBeneficiaryModel: state - .householdMemberWrapper - .projectBeneficiaries! - .first, projectBeneficiaryType: RegistrationDeliverySingleton() .beneficiaryType!, ), ); - - // context.router.maybePop(); - final parent = context.router.parent() as StackRouter; - - if (widget.isHousholdDelete) { - (context.router.parent() as StackRouter).maybePop(); - } - parent.popUntil((route) => - route.settings.name == - BeneficiaryWrapperRoute.name); - final reloadState = - context.read(); - Future.delayed( - const Duration(milliseconds: 500), - () { - reloadState.add( - HouseholdOverviewReloadEvent( - projectId: - RegistrationDeliverySingleton().projectId!, - projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, + }, + ).then( + (value) => context.router.push( + HouseholdAcknowledgementRoute( + enableViewHousehold: true, + ), ), ); - }, - ).then( - (value) => context.router.push( - HouseholdAcknowledgementRoute( - enableViewHousehold: true, - ), - ), - ); - // context.router.push(HouseholdAcknowledgementRoute( - // enableViewHousehold: true)); - } else { - Toast.showToast( - context, - message: localizations - .translate(i18.common.corecommonRequired), - type: ToastType.error - ); - } + } else { + Toast.showToast(context, + message: localizations + .translate(i18.common.corecommonRequired), + type: ToastType.error); + } + }, + ); }, - ); - }, - ), - ] - ), + ), + ]), header: const Column(children: [ BackNavigationHelpHeaderWidget(), ]), children: [ - DigitCard( - children: [ - Align( - alignment: Alignment.topLeft, - child: Text( - localizations.translate( - i18.reasonForDeletion.reasonForDeletionLabel, - ), - style: textTheme.headingXl, + DigitCard(children: [ + Align( + alignment: Alignment.topLeft, + child: Text( + localizations.translate( + i18.reasonForDeletion.reasonForDeletionLabel, ), + style: textTheme.headingXl, ), - Column( - children: widget.isHousholdDelete - ? RegistrationDeliverySingleton() - .householdDeletionReasonOptions! - .map((e) => ReactiveRadioListTile( - title: Text( - localizations.translate(e), - ), - value: e, - formControlName: _reasonForDeletionKey, - )) - .toList() - : RegistrationDeliverySingleton() - .householdMemberDeletionReasonOptions! - .map((e) => ReactiveRadioListTile( - title: Text( - localizations.translate(e), - ), - value: e, - formControlName: _reasonForDeletionKey, - )) - .toList(), - ), - ] - ), + ), + Column( + children: widget.isHousholdDelete + ? RegistrationDeliverySingleton() + .householdDeletionReasonOptions! + .map((e) => ReactiveRadioListTile( + title: Text( + localizations.translate(e), + ), + value: e, + formControlName: _reasonForDeletionKey, + )) + .toList() + : RegistrationDeliverySingleton() + .householdMemberDeletionReasonOptions! + .map((e) => ReactiveRadioListTile( + title: Text( + localizations.translate(e), + ), + value: e, + formControlName: _reasonForDeletionKey, + )) + .toList(), + ), + ]), ], ); }, From 23c5b379e9f25f591209856523c41f338d88e533 Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Mon, 21 Oct 2024 12:00:27 +0530 Subject: [PATCH 125/241] resolved review comments --- .../widgets/household_acknowledgement.dart | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart index 3674a9fb7..f886c21b0 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart @@ -46,7 +46,7 @@ class HouseholdAcknowledgementPageState label: localizations.translate( i18.householdDetails.viewHouseHoldDetailsAction, ), - isDisabled: (widget.enableViewHousehold==true)?false:true, + isDisabled: !(widget.enableViewHousehold ?? false), onPressed: () { final wrapper = context .read() @@ -58,21 +58,20 @@ class HouseholdAcknowledgementPageState ); }, type: ButtonType.primary, - size: ButtonSize.large - ), + size: ButtonSize.large), Button( label: localizations .translate(i18.acknowledgementSuccess.actionLabelText), onPressed: () { context - .read().add(const SearchHouseholdsEvent.clear()); + .read() + .add(const SearchHouseholdsEvent.clear()); final parent = context.router.parent() as StackRouter; // Pop twice to navigate back to the previous screen parent.popUntilRoot(); }, type: ButtonType.secondary, - size: ButtonSize.large - ), + size: ButtonSize.large), ], ); }, From 1b8bc78c867663d9894a62cadcee5e389addf074 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Mon, 2 Sep 2024 16:00:04 +0530 Subject: [PATCH 126/241] Made changes in referral reconciliation --- .../pubspec.yaml | 3 +- .../search_referral_reconciliations.dart | 170 +++++++++--------- packages/referral_reconciliation/pubspec.yaml | 2 + 3 files changed, 90 insertions(+), 85 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index d5165c794..5a758c808 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -18,6 +18,7 @@ dependencies: sqlite3_flutter_libs: ^0.5.10 path_provider: ^2.0.11 path: ^1.8.2 + digit_ui_components: 0.0.3-beta digit_components: ^1.0.2 auto_route: ^7.8.4 flutter_bloc: ^8.1.1 @@ -122,4 +123,4 @@ flutter: - family: RobotoCondensed fonts: - asset: assets/fonts/Roboto/RobotoCondensed-Regular.ttf - uses-material-design: true \ No newline at end of file + uses-material-design: true diff --git a/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart b/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart index d6bceeb6c..f66076003 100644 --- a/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart +++ b/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart @@ -1,4 +1,9 @@ import 'package:auto_route/auto_route.dart'; +import 'package:digit_ui_components/enum/app_enums.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_button.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_info_card.dart'; +// import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:survey_form/survey_form.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; @@ -87,11 +92,11 @@ class _SearchReferralReconciliationsPageState slivers: [ SliverToBoxAdapter( child: Padding( - padding: const EdgeInsets.all(kPadding), + padding: EdgeInsets.all(theme.spacerTheme.spacer2), child: Column( children: [ Padding( - padding: const EdgeInsets.all(kPadding), + padding: EdgeInsets.all(theme.spacerTheme.spacer2), child: Align( alignment: Alignment.topLeft, child: Text( @@ -134,17 +139,17 @@ class _SearchReferralReconciliationsPageState ), ], ), - const SizedBox(height: kPadding * 2), + SizedBox(height: theme.spacerTheme.spacer2 * 2), if (searchState.resultsNotFound) - DigitInfoCard( + InfoCard( + title: localizations.translate( + i18.referralReconciliation + .beneficiaryInfoTitle), + type: InfoType.info, description: localizations.translate( i18.referralReconciliation .referralInfoDescription, ), - title: localizations.translate( - i18.referralReconciliation - .beneficiaryInfoTitle, - ), ), ], ), @@ -157,8 +162,8 @@ class _SearchReferralReconciliationsPageState searchState.referrals.elementAt(index); return Container( - margin: const EdgeInsets.only( - bottom: kPadding), + margin: EdgeInsets.only( + bottom: theme.spacerTheme.spacer2), child: ViewReferralCard( hfReferralModel: i, onOpenPressed: () { @@ -193,84 +198,81 @@ class _SearchReferralReconciliationsPageState ); }, ))), - bottomNavigationBar: SizedBox( - height: 150, - child: Card( - margin: const EdgeInsets.all(0), - // padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: Container( - padding: - const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: Column( - children: [ - BlocBuilder( - builder: (context, state) { - final router = context.router; + bottomNavigationBar: Card( + margin: const EdgeInsets.all(0), - VoidCallback? onPressed; + child: Container( + padding: + EdgeInsets.all(theme.spacerTheme.spacer2), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + BlocBuilder( + builder: (context, state) { + final router = context.router; - onPressed = state.loading || - state.searchQuery == null || - (state.searchQuery ?? '').length < 2 - ? null - : () { - FocusManager.instance.primaryFocus - ?.unfocus(); - final bloc = - context.read(); - router.push( - HFCreateReferralWrapperRoute( - viewOnly: false, - referralReconciliation: HFReferralModel( - clientReferenceId: IdGen.i.identifier, - name: state.searchQuery, - beneficiaryId: state.tag, - ), - projectId: - ReferralReconSingleton().projectId, - cycles: ReferralReconSingleton().cycles, - ), - ); - searchController.clear(); - bloc.add( - const SearchReferralsClearEvent(), - ); - }; + VoidCallback? onPressed; - return DigitElevatedButton( - onPressed: onPressed, - child: Center( - child: Text(localizations.translate( - i18.referralReconciliation - .createReferralLabel, - )), - ), - ); - }, - ), - DigitOutlineIconButton( - buttonStyle: OutlinedButton.styleFrom( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.zero, + onPressed = () { + FocusManager.instance.primaryFocus + ?.unfocus(); + final bloc = + context.read(); + router.push( + HFCreateReferralWrapperRoute( + viewOnly: false, + referralReconciliation: HFReferralModel( + clientReferenceId: IdGen.i.identifier, + name: state.searchQuery, + beneficiaryId: state.tag, + ), + projectId: + ReferralReconSingleton().projectId, + cycles: ReferralReconSingleton().cycles, + ), + ); + searchController.clear(); + bloc.add( + const SearchReferralsClearEvent(), + ); + }; + return Button( + size: ButtonSize.large, + label: localizations.translate( + i18.referralReconciliation + .createReferralLabel, ), - ), - onPressed: () async { - context.read().add( - const DigitScannerEvent.handleScanner(), - ); - context.router.push(DigitScannerRoute( - quantity: 1, - isGS1code: false, - singleValue: true, - )); - }, - icon: Icons.qr_code, - label: localizations.translate( - i18.referralReconciliation.scannerLabel, - ), - ), - ], - ), + mainAxisSize: MainAxisSize.max, + isDisabled: !(searchController.text.isNotEmpty && searchController.text.length>=2), + onPressed: (){ + if(onPressed!=null){ + onPressed(); + } + }, + type: ButtonType.primary, + ); + }, + ), + SizedBox(height: theme.spacerTheme.spacer2,), + Button( + size: ButtonSize.large, + label: localizations.translate( + i18.referralReconciliation.scannerLabel), + onPressed: () async { + context.read().add( + const DigitScannerEvent.handleScanner(), + ); + context.router.push(DigitScannerRoute( + quantity: 1, + isGS1code: false, + singleValue: true, + )); + }, + type: ButtonType.secondary, + prefixIcon: Icons.qr_code, + mainAxisSize: MainAxisSize.max, + ), + ], ), ), ), diff --git a/packages/referral_reconciliation/pubspec.yaml b/packages/referral_reconciliation/pubspec.yaml index e9cbcad1d..fa36458be 100644 --- a/packages/referral_reconciliation/pubspec.yaml +++ b/packages/referral_reconciliation/pubspec.yaml @@ -11,6 +11,7 @@ environment: dependencies: flutter: sdk: flutter + digit_ui_components: 0.0.3-beta digit_components: ^1.0.2+1 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 @@ -37,6 +38,7 @@ dependencies: stream_transform: ^2.1.0 survey_form: ^0.0.1-dev.1 + dev_dependencies: flutter_test: sdk: flutter From a02e2b1de2ddb44eba7264af01117fe64268dd7b Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Fri, 6 Sep 2024 15:27:43 +0530 Subject: [PATCH 127/241] Made changes in referral reconciliation(Changed the digit_component library to digit_ui_component library) --- .../pubspec.yaml | 1 + .../lib/pages/acknowledgement.dart | 87 +- .../create_hf_referral_wrapper.dart | 1 - .../reason_checklist_preview.dart | 54 +- .../record_facility_details.dart | 614 +++--- .../record_reason_checklist.dart | 795 ++++---- .../record_referral_details.dart | 1676 ++++++++++------- .../project_facility_selection.dart | 55 +- .../search_referral_reconciliations.dart | 104 +- packages/referral_reconciliation/pubspec.yaml | 3 +- 10 files changed, 1862 insertions(+), 1528 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 5a758c808..835f45ca2 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -115,6 +115,7 @@ flutter: assets: - ./ - assets/icons/svg/ + - assets/animated_json/ fonts: - family: Roboto diff --git a/packages/referral_reconciliation/lib/pages/acknowledgement.dart b/packages/referral_reconciliation/lib/pages/acknowledgement.dart index f5d95349e..56b85dec6 100644 --- a/packages/referral_reconciliation/lib/pages/acknowledgement.dart +++ b/packages/referral_reconciliation/lib/pages/acknowledgement.dart @@ -1,5 +1,8 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/panel_cards.dart'; import 'package:flutter/material.dart'; import '../utils/i18_key_constants.dart' as i18; @@ -32,26 +35,31 @@ class _AcknowledgementPageState final theme = Theme.of(context); return Scaffold( - body: DigitAcknowledgement.success( - description: widget.description ?? - localizations.translate( - i18.acknowledgementSuccess.acknowledgementDescriptionText, - ), - descriptionWidget: widget.isDataRecordSuccess - ? DigitTableCard( - element: widget.descriptionTableData ?? {}, - ) - : null, - label: widget.label ?? - localizations.translate( - i18.acknowledgementSuccess.acknowledgementLabelText, - ), - action: () { - context.router.popUntilRoot(); - }, - enableBackToSearch: widget.isDataRecordSuccess ? false : true, - actionLabel: - localizations.translate(i18.acknowledgementSuccess.actionLabelText), + body: DigitCard( + cardType: CardType.primary, + children: [ + PanelCard( + type: PanelType.success, + title: widget.label ?? + localizations.translate( + i18.acknowledgementSuccess.acknowledgementLabelText, + ), + description: widget.description ?? + localizations.translate( + i18.acknowledgementSuccess.acknowledgementDescriptionText, + ), + actions: [ + Button( + label: localizations.translate(i18.acknowledgementSuccess.actionLabelText), + onPressed: () { + context.router.popUntilRoot(); + }, + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + ) + ] + ),] ), bottomNavigationBar: Offstage( offstage: !widget.isDataRecordSuccess, @@ -59,13 +67,17 @@ class _AcknowledgementPageState child: SizedBox( height: 150, child: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: Column( + cardType: CardType.primary, + margin: EdgeInsets.fromLTRB(0, theme.spacerTheme.spacer2, 0, 0), + padding: EdgeInsets.fromLTRB(theme.spacerTheme.spacer2, 0, theme.spacerTheme.spacer2, 0), + children: [Column( children: [ - DigitElevatedButton( - child: Text(localizations - .translate(i18.acknowledgementSuccess.goToHome)), + Button( + size: ButtonSize.large, + type: ButtonType.primary, + mainAxisSize: MainAxisSize.max, + label: localizations + .translate(i18.acknowledgementSuccess.goToHome), onPressed: () { context.router.popUntilRoot(); }, @@ -73,29 +85,18 @@ class _AcknowledgementPageState const SizedBox( height: 12, ), - DigitOutLineButton( + Button( + size: ButtonSize.large, + type: ButtonType.secondary, + mainAxisSize: MainAxisSize.max, onPressed: () { context.router.popUntilRoot(); }, label: localizations .translate(i18.acknowledgementSuccess.downloadmoredata), - buttonStyle: OutlinedButton.styleFrom( - backgroundColor: Colors.white, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.zero, - ), - side: BorderSide( - width: 1.0, - color: theme.colorScheme.secondary, - ), - minimumSize: Size( - MediaQuery.of(context).size.width, - 50, - ), - ), ), ], - ), + ),] ), ), ), diff --git a/packages/referral_reconciliation/lib/pages/create_referral/create_hf_referral_wrapper.dart b/packages/referral_reconciliation/lib/pages/create_referral/create_hf_referral_wrapper.dart index 7b8436f96..34b2e1398 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/create_hf_referral_wrapper.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/create_hf_referral_wrapper.dart @@ -1,5 +1,4 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_data_model/data_model.dart'; import 'package:survey_form/survey_form.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; diff --git a/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart b/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart index 88c7b6847..af242cfa3 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart @@ -1,8 +1,9 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/atoms/digit_divider.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_divider.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:survey_form/survey_form.dart'; -import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:intl/intl.dart'; @@ -43,18 +44,18 @@ class _ReferralReasonChecklistPreviewPageState serviceSearch: (serviceList, selectedService, loading) { return selectedService != null ? DigitCard( - child: DigitElevatedButton( + cardType: CardType.primary, + children: [ + Button( + size: ButtonSize.large, + label: localizations.translate(i18.common.corecommonclose), + mainAxisSize: MainAxisSize.max, onPressed: () { context.read().add( - ServiceResetEvent(serviceList: serviceList), - ); + ServiceResetEvent(serviceList: serviceList), + ); }, - child: Text( - localizations.translate(i18.common.corecommonclose), - ), - ), - ) - : const Offstage(); + type: ButtonType.primary,)]) : const Offstage(); }, ); }, @@ -70,7 +71,8 @@ class _ReferralReasonChecklistPreviewPageState children: [ ...value1.map((e) => e.serviceDefId != null ? DigitCard( - child: Column( + cardType: CardType.primary, + children: [Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -96,7 +98,7 @@ class _ReferralReasonChecklistPreviewPageState ), ), ), - DigitOutLineButton( + Button( label: localizations.translate( i18.referralReconciliation .iconLabel, @@ -108,18 +110,13 @@ class _ReferralReasonChecklistPreviewPageState ), ); }, - buttonStyle: - OutlinedButton.styleFrom( - shape: - const RoundedRectangleBorder( - borderRadius: BorderRadius.zero, - ), - ), + type: ButtonType.secondary, + size: ButtonSize.large, ), ], ), ], - ), + ),] ) : const Offstage()), ], @@ -133,7 +130,8 @@ class _ReferralReasonChecklistPreviewPageState item2, ) { return DigitCard( - child: Column( + cardType: CardType.primary, + children: [Column( children: [ Container( width: MediaQuery.of(context).size.width, @@ -181,8 +179,8 @@ class _ReferralReasonChecklistPreviewPageState margin: const EdgeInsets .only() .copyWith( - top: kPadding, - bottom: kPadding, + top: theme.spacerTheme.spacer2, + bottom: theme.spacerTheme.spacer2, ), child: Align( alignment: Alignment @@ -206,8 +204,8 @@ class _ReferralReasonChecklistPreviewPageState const EdgeInsets .only() .copyWith( - top: kPadding, - bottom: kPadding, + top: theme.spacerTheme.spacer2, + bottom: theme.spacerTheme.spacer2, ), child: Column( children: [ @@ -246,7 +244,7 @@ class _ReferralReasonChecklistPreviewPageState ), ), ], - ), + )], ); }, orElse: () => const Offstage(), diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart index 0f2bb4a98..39c75c879 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart @@ -1,8 +1,8 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/utils/date_utils.dart'; -import 'package:digit_components/widgets/atoms/digit_toaster.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; @@ -10,6 +10,7 @@ import 'package:referral_reconciliation/models/entities/referral_recon_enums.dar import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart'; import 'package:referral_reconciliation/utils/constants.dart'; +import '../../../utils/date_utils.dart'; import '../../../utils/i18_key_constants.dart' as i18; import '../../blocs/referral_recon_record.dart'; import '../../utils/utils.dart'; @@ -24,7 +25,7 @@ class ReferralFacilityPage extends LocalizedStatefulWidget { const ReferralFacilityPage({ super.key, super.appLocalizations, - this.isEditing = false, + this.isEditing = false,show }); @override @@ -52,7 +53,7 @@ class _ReferralFacilityPageState extends LocalizedState { setState(() { selectedProjectFacilityId = referralState.mapOrNull( create: (value) => - value.viewOnly ? value.hfReferralModel?.projectFacilityId : null, + value.viewOnly ? value.hfReferralModel?.projectFacilityId : null, ); }); super.initState(); @@ -79,286 +80,283 @@ class _ReferralFacilityPageState extends LocalizedState { return facilities.isNotEmpty ? Scaffold( - body: BlocBuilder( - builder: (context, recordState) { - final bool viewOnly = recordState.mapOrNull( - create: (value) => value.viewOnly, - ) ?? - false; + body: BlocBuilder( + builder: (context, recordState) { + final bool viewOnly = recordState.mapOrNull( + create: (value) => value.viewOnly, + ) ?? + false; - return ReactiveFormBuilder( - form: () => buildForm(recordState, projectFacilities), - builder: (context, form, child) => ScrollableContent( - enableFixedButton: true, - header: const Column(children: [ - BackNavigationHelpHeaderWidget(), - ]), - footer: DigitCard( - margin: - const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB( - kPadding, 0, kPadding, 0), - child: ValueListenableBuilder( - valueListenable: clickedStatus, - builder: (context, bool isClicked, _) { - return DigitElevatedButton( - onPressed: () { - form.markAllAsTouched(); - if (!form.valid) { - return; + return ReactiveFormBuilder( + form: () => buildForm(recordState, projectFacilities), + builder: (context, form, child) => ScrollableContent( + enableFixedButton: true, + header: const Column(children: [ + BackNavigationHelpHeaderWidget(), + ]), + footer: DigitCard( + margin: + EdgeInsets.fromLTRB(0, theme.spacerTheme.spacer2, 0, 0), + padding: EdgeInsets.all(theme.spacerTheme.spacer2), + cardType: CardType.primary, + children: [ValueListenableBuilder( + valueListenable: clickedStatus, + builder: (context, bool isClicked, _) { + return Button( + size: ButtonSize.large, + label: localizations.translate( + i18.common.coreCommonNext, + ), + onPressed: () { + form.markAllAsTouched(); + if (!form.valid) { + return; + } else { + clickedStatus.value = true; + if (viewOnly) { + context.router.push( + RecordReferralDetailsRoute( + projectId: + ReferralReconSingleton() + .projectId, + cycles: ReferralReconSingleton() + .cycles, + ), + ); + } else { + final evaluationFacility = + selectedProjectFacilityId; + if (evaluationFacility == null) { + Toast.showToast( + context, + message: 'Facility is mandatory', + type: ToastType.error, + ); } else { - clickedStatus.value = true; - if (viewOnly) { - context.router.push( - RecordReferralDetailsRoute( - projectId: - ReferralReconSingleton() - .projectId, - cycles: ReferralReconSingleton() - .cycles, - ), - ); - } else { - final evaluationFacility = - selectedProjectFacilityId; - if (evaluationFacility == null) { - DigitToast.show( - context, - options: DigitToastOptions( - 'Facility is mandatory', - true, - theme, - ), - ); - } else { - final dateOfEvaluation = form - .control(_dateOfEvaluationKey) - .value as DateTime; - final hfCoordinator = form - .control(_hfCoordinatorKey) - .value as String?; - final referredByTeam = form - .control(_referredByKey) - .value as String?; + final dateOfEvaluation = form + .control(_dateOfEvaluationKey) + .value as DateTime; + final hfCoordinator = form + .control(_hfCoordinatorKey) + .value as String?; + final referredByTeam = form + .control(_referredByKey) + .value as String?; - final event = context - .read(); - event.add( - RecordHFReferralSaveFacilityDetailsEvent( - dateOfEvaluation: - dateOfEvaluation, - facilityId: evaluationFacility - .toString(), - healthFacilityCord: - hfCoordinator, - referredBy: referredByTeam, - ), - ); + final event = context + .read(); + event.add( + RecordHFReferralSaveFacilityDetailsEvent( + dateOfEvaluation: + dateOfEvaluation, + facilityId: evaluationFacility + .toString(), + healthFacilityCord: + hfCoordinator, + referredBy: referredByTeam, + ), + ); - context.router.push( - RecordReferralDetailsRoute( + context.router.push( + RecordReferralDetailsRoute( projectId: - ReferralReconSingleton() - .projectId, + ReferralReconSingleton() + .projectId, cycles: ReferralReconSingleton() .cycles, )); - } - } } - }, - child: Center( - child: Text( + } + } + }, + type: ButtonType.primary, + mainAxisSize: MainAxisSize.max, + ); + }, + ),] + ), + slivers: [ + SliverToBoxAdapter( + child: DigitCard( + cardType: CardType.primary, + children: [ + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Text( + localizations.translate( + i18.referralReconciliation + .facilityDetails, + ), + style: + theme.textTheme.displayMedium, + ), + ), + ], + ), + ReactiveWrapperField( + formControlName: _administrativeUnitKey, + builder: (field){ + return LabeledField( + isRequired: true, + label: localizations.translate( + i18.referralReconciliation + .administrationUnitFormLabel, + ), + child: DigitTextFormInput( + readOnly: true, + initialValue: field.value, + ), + );} + ), + ReactiveWrapperField( + formControlName: _dateOfEvaluationKey, + validationMessages: { + 'required': (_) => localizations.translate( - i18.common.coreCommonNext, + i18.common.corecommonRequired, ), + }, + showErrors: (control) => control.invalid && control.touched, // Ensures error is shown if invalid and touched + builder: (field){ + return LabeledField( + isRequired: true, + label: localizations.translate( + i18.referralReconciliation + .dateOfEvaluationLabel, + ), + child: DigitDateFormInput( + onChange: (val) => { + form.control(_dateOfEvaluationKey).markAsTouched(), + form.control(_dateOfEvaluationKey).value = DigitDateUtils.getFormattedDateToDateTime(val), + }, + readOnly: viewOnly, + errorMessage: field.errorText, + initialValue: DigitDateUtils.getDateString(form.control(_dateOfEvaluationKey).value), + + lastDate: DateTime.now(), + cancelText: localizations.translate( + i18.common.coreCommonCancel, + ), + confirmText: localizations.translate( + i18.common.coreCommonOk, ), ), - ); - }, + );} ), - ), - slivers: [ - SliverToBoxAdapter( - child: DigitCard( - child: Column( - children: [ - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Expanded( - child: Text( - localizations.translate( - i18.referralReconciliation - .facilityDetails, - ), - style: - theme.textTheme.displayMedium, - ), - ), - ], - ), - Column(children: [ - DigitTextFormField( - formControlName: - _administrativeUnitKey, - label: localizations.translate( - i18.referralReconciliation - .administrationUnitFormLabel, + InkWell( + onTap: viewOnly + ? null + : () async { + final facility = + await Navigator.of( + context) + .push( + MaterialPageRoute( + builder: (context) => + ReferralReconProjectFacilitySelectionPage( + projectFacilities: + facilities, ), - isRequired: true, - readOnly: true, - ), - DigitDateFormPicker( - formControlName: _dateOfEvaluationKey, - label: localizations.translate( - i18.referralReconciliation - .dateOfEvaluationLabel, - ), - isEnabled: !viewOnly, - isRequired: true, - initialDate: DateTime.now(), - cancelText: localizations.translate( - i18.common.coreCommonCancel, - ), - confirmText: localizations.translate( - i18.common.coreCommonOk, - ), - padding: const EdgeInsets.only( - bottom: kPadding, - top: kPadding, - ), - lastDate: DateTime.now(), - validationMessages: { - 'required': (_) => - localizations.translate( - i18.common.corecommonRequired, - ), - }, - ), - InkWell( - onTap: viewOnly - ? null - : () async { - final facility = - await Navigator.of( - context) - .push( - MaterialPageRoute( - builder: (context) => - ReferralReconProjectFacilitySelectionPage( - projectFacilities: - facilities, - ), - ), - ); - - if (facility == null) return; - form - .control( - _evaluationFacilityKey, - ) - .value = - localizations.translate( - 'PJ_FAC_${facility.id}'); - setState(() { - selectedProjectFacilityId = - facility.id; - }); - }, - child: IgnorePointer( - child: DigitTextFormField( - hideKeyboard: true, - readOnly: viewOnly, - label: localizations.translate( - i18.referralReconciliation - .evaluationFacilityLabel, - ), - isRequired: true, - suffix: const Padding( - padding: EdgeInsets.all(8.0), - child: Icon(Icons.search), - ), - formControlName: - _evaluationFacilityKey, - validationMessages: { - 'required': (_) => - localizations.translate( - i18.referralReconciliation - .facilityValidationMessage, - ), - }, - onTap: viewOnly - ? null - : () async { - final facility = - await Navigator.of( - context) - .push( - MaterialPageRoute( - builder: (context) => - ReferralReconProjectFacilitySelectionPage( - projectFacilities: - facilities, - ), - ), - ); + ), + ); - if (facility == null) - return; - form - .control( - _evaluationFacilityKey, - ) - .value = - localizations - .translate( - 'PJ_FAC_${facility.id}', - ); - setState(() { - selectedProjectFacilityId = - facility.id; - }); - }, + if (facility == null) return; + form + .control( + _evaluationFacilityKey, + ) + .value = + localizations.translate( + 'PJ_FAC_${facility.id}'); + setState(() { + selectedProjectFacilityId = + facility.id; + }); + }, + child: IgnorePointer( + child: ReactiveWrapperField( + validationMessages: { + 'required': (_) => + localizations.translate( + i18.referralReconciliation + .facilityValidationMessage, ), - ), + }, + formControlName: _evaluationFacilityKey, + showErrors: (control) => control.invalid && control.touched, // Ensures error is shown if invalid and touched + builder: (field){return LabeledField( + isRequired: true, + label: localizations.translate( + i18.referralReconciliation + .evaluationFacilityLabel, ), - DigitTextFormField( - formControlName: _hfCoordinatorKey, - label: localizations.translate( - i18.referralReconciliation - .healthFacilityCoordinatorLabel, - ), - readOnly: viewOnly, - ), - DigitTextFormField( - formControlName: _referredByKey, - label: localizations.translate( - i18.referralReconciliation - .referredByTeamCodeLabel, - ), + child: DigitSearchFormInput( + onChange: (val) => { + form.control(_evaluationFacilityKey).markAsTouched(), + form.control(_evaluationFacilityKey).value = val, + }, readOnly: viewOnly, + errorMessage: field.errorText, + initialValue: form.control(_evaluationFacilityKey).value, ), - ]), - ], + );} ), ), ), - ], + ReactiveWrapperField( + formControlName: _hfCoordinatorKey, + builder: (field){ + return LabeledField( + label: localizations.translate( + i18.referralReconciliation + .healthFacilityCoordinatorLabel, + ), + child: DigitTextFormInput( + onChange: (val) => { + form.control(_hfCoordinatorKey).markAsTouched(), + form.control(_hfCoordinatorKey).value = val, + }, + readOnly: viewOnly, + initialValue: form.control(_hfCoordinatorKey).value, + ) + );} + ), + ReactiveWrapperField( + formControlName: _referredByKey, + builder: (field){return LabeledField( + label: localizations.translate( + i18.referralReconciliation + .referredByTeamCodeLabel, + ), + child: DigitTextFormInput( + onChange: (val) => { + form.control(_referredByKey).markAsTouched(), + form.control(_referredByKey).value = val, + }, + readOnly: viewOnly, + initialValue: form.control(_referredByKey).value, + ) + );} + ),] ), - ); - }, - ), - ) - : Center( - child: Text( - localizations.translate( - i18.referralReconciliation.noFacilitiesAssigned, - ), + ), + ], ), ); + }, + ), + ) + : Center( + child: Text( + localizations.translate( + i18.referralReconciliation.noFacilitiesAssigned, + ), + ), + ); }, loading: () => const Center( child: CircularProgressIndicator(), @@ -376,32 +374,32 @@ class _ReferralFacilityPageState extends LocalizedState { } FormGroup buildForm( - RecordHFReferralState referralState, - List facilities, - ) { + RecordHFReferralState referralState, + List facilities, + ) { final dateOfEvaluation = referralState.mapOrNull( create: (value) => value.viewOnly && - value.hfReferralModel?.additionalFields?.fields - .where((e) => - e.key == - ReferralReconEnums.dateOfEvaluation.toValue()) - .firstOrNull - ?.value != - null + value.hfReferralModel?.additionalFields?.fields + .where((e) => + e.key == + ReferralReconEnums.dateOfEvaluation.toValue()) + .firstOrNull + ?.value != + null ? DigitDateUtils.getFormattedDateToDateTime( - DigitDateUtils.getDateFromTimestamp( - int.tryParse(value.hfReferralModel?.additionalFields?.fields - .where((e) => - e.key == - ReferralReconEnums.dateOfEvaluation.toValue()) - .firstOrNull - ?.value - .toString() ?? - '') ?? - DateTime.now().millisecondsSinceEpoch, - dateFormat: defaultDateFormat, - ), - ) + DigitDateUtils.getDateFromTimestamp( + int.tryParse(value.hfReferralModel?.additionalFields?.fields + .where((e) => + e.key == + ReferralReconEnums.dateOfEvaluation.toValue()) + .firstOrNull + ?.value + .toString() ?? + '') ?? + DateTime.now().millisecondsSinceEpoch, + dateFormat: defaultDateFormat, + ), + ) : DateTime.now(), ); @@ -420,19 +418,19 @@ class _ReferralFacilityPageState extends LocalizedState { _hfCoordinatorKey: FormControl( value: referralState.mapOrNull( create: (value) => value.viewOnly && - value.hfReferralModel?.additionalFields?.fields - .where((e) => - e.key == - ReferralReconEnums.hFCoordinator.toValue()) - .firstOrNull - ?.value != - null - ? value.hfReferralModel?.additionalFields?.fields + value.hfReferralModel?.additionalFields?.fields .where((e) => - e.key == ReferralReconEnums.hFCoordinator.toValue()) + e.key == + ReferralReconEnums.hFCoordinator.toValue()) .firstOrNull - ?.value - .toString() + ?.value != + null + ? value.hfReferralModel?.additionalFields?.fields + .where((e) => + e.key == ReferralReconEnums.hFCoordinator.toValue()) + .firstOrNull + ?.value + .toString() : ReferralReconSingleton().userName, ), ), @@ -440,10 +438,10 @@ class _ReferralFacilityPageState extends LocalizedState { value: referralState.mapOrNull( create: (value) => value.viewOnly ? localizations.translate( - 'PJ_FAC_${facilities.where( - (e) => e.id == value.hfReferralModel?.projectFacilityId, - ).first.id.toString()}', - ) + 'PJ_FAC_${facilities.where( + (e) => e.id == value.hfReferralModel?.projectFacilityId, + ).first.id.toString()}', + ) : null, ), validators: [Validators.required], @@ -451,18 +449,18 @@ class _ReferralFacilityPageState extends LocalizedState { _referredByKey: FormControl( value: referralState.mapOrNull( create: (value) => value.viewOnly && - value.hfReferralModel?.additionalFields?.fields - .where((e) => - e.key == ReferralReconEnums.referredBy.toValue()) - .firstOrNull - ?.value != - null - ? value.hfReferralModel?.additionalFields?.fields - .where( - (e) => e.key == ReferralReconEnums.referredBy.toValue()) + value.hfReferralModel?.additionalFields?.fields + .where((e) => + e.key == ReferralReconEnums.referredBy.toValue()) .firstOrNull - ?.value - .toString() + ?.value != + null + ? value.hfReferralModel?.additionalFields?.fields + .where( + (e) => e.key == ReferralReconEnums.referredBy.toValue()) + .firstOrNull + ?.value + .toString() : null, ), ), diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart index 628ee0f19..63062ca02 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart @@ -1,9 +1,12 @@ import 'dart:math'; import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/atoms/input_wrapper.dart'; +import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:survey_form/survey_form.dart'; -import 'package:digit_components/utils/date_utils.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -13,6 +16,7 @@ import 'package:referral_reconciliation/router/referral_reconciliation_router.gm import 'package:referral_reconciliation/utils/constants.dart'; import '../../blocs/referral_recon_service_definition.dart'; +import '../../utils/date_utils.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/localized.dart'; @@ -46,11 +50,11 @@ class _ReferralReasonChecklistPageState @override void initState() { context.read().add( - ServiceSurveyFormEvent( - value: Random().nextInt(100).toString(), - submitTriggered: true, - ), - ); + ServiceSurveyFormEvent( + value: Random().nextInt(100).toString(), + submitTriggered: true, + ), + ); super.initState(); } @@ -85,22 +89,27 @@ class _ReferralReasonChecklistPageState return ScrollableContent( enableFixedButton: true, footer: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), + cardType: CardType.primary, + margin: EdgeInsets.all(theme.spacerTheme.spacer2), padding: - const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: DigitElevatedButton( + EdgeInsets.all(theme.spacerTheme.spacer2), + children: [Button( + size: ButtonSize.large, + label: localizations.translate(i18.common.coreCommonSubmit), + type: ButtonType.primary, + mainAxisSize: MainAxisSize.max, onPressed: () async { final router = context.router; submitTriggered = true; context.read().add( - const ServiceSurveyFormEvent( - value: '', - submitTriggered: true, - ), - ); + const ServiceSurveyFormEvent( + value: '', + submitTriggered: true, + ), + ); final isValid = - checklistFormKey.currentState?.validate(); + checklistFormKey.currentState?.validate(); if (!isValid!) { return; } @@ -109,12 +118,12 @@ class _ReferralReasonChecklistPageState for (int i = 0; i < controller.length; i++) { if (itemsAttributes?[i].required == true && ((itemsAttributes?[i].dataType == - 'SingleValueList' && - visibleChecklistIndexes - .any((e) => e == i) && - (controller[i].text == '')) || + 'SingleValueList' && + visibleChecklistIndexes + .any((e) => e == i) && + (controller[i].text == '')) || (itemsAttributes?[i].dataType != - 'SingleValueList' && + 'SingleValueList' && (controller[i].text == '' && !(widget.referralClientRefId != null))))) { @@ -122,272 +131,298 @@ class _ReferralReasonChecklistPageState } } - final shouldSubmit = await DigitDialog.show( - context, - options: DigitDialogOptions( - titleText: localizations.translate( + final shouldSubmit = await showDialog( + context: context, + builder: (BuildContext ctx) { + return Popup( + title: localizations.translate( i18.checklist.checklistDialogLabel, ), - content: Text(localizations.translate( + description: localizations.translate( i18.checklist.checklistDialogDescription, - )), - primaryAction: DigitDialogActions( - label: localizations.translate( - i18.checklist.checklistDialogPrimaryAction, - ), - action: (ctx) { - List attributes = []; - for (int i = 0; i < controller.length; i++) { - final attribute = initialAttributes; - attributes.add(ServiceAttributesModel( - attributeCode: '${attribute?[i].code}', - dataType: attribute?[i].dataType, - clientReferenceId: IdGen.i.identifier, - referenceId: widget.referralClientRefId, - value: attribute?[i].dataType != - 'SingleValueList' - ? controller[i] - .text - .toString() - .trim() - .isNotEmpty - ? controller[i].text.toString() - : '' - : visibleChecklistIndexes.contains(i) - ? controller[i].text.toString() - : i18.checklist.notSelectedKey, - rowVersion: 1, - tenantId: attribute?[i].tenantId, - additionalDetails: null)); - } - - context.read().add( - ServiceCreateEvent( - serviceModel: ServiceModel( - createdAt: DigitDateUtils - .getDateFromTimestamp( - DateTime.now() - .toLocal() - .millisecondsSinceEpoch, - dateFormat: defaultDateTimeFormat, - ), - tenantId: value - .selectedServiceDefinition! - .tenantId, - clientId: widget.referralClientRefId - .toString(), - serviceDefId: value - .selectedServiceDefinition?.id, - attributes: attributes, - rowVersion: 1, - accountId: ReferralReconSingleton() - .projectId, - additionalDetails: { - "boundaryCode": - ReferralReconSingleton() - .boundary - ?.code - }, + ), + onCrossTap: () { + Navigator.of( + context, + rootNavigator: true, + ).pop(false); + }, + actions: [ + Button( + label: localizations.translate( + i18.checklist.checklistDialogPrimaryAction, + ), + type: ButtonType.primary, + size: ButtonSize.large, + onPressed: () { + List attributes = []; + for (int i = 0; i < controller.length; i++) { + final attribute = initialAttributes; + attributes.add(ServiceAttributesModel( + attributeCode: '${attribute?[i].code}', + dataType: attribute?[i].dataType, + clientReferenceId: IdGen.i.identifier, + referenceId: widget.referralClientRefId, + value: attribute?[i].dataType != + 'SingleValueList' + ? controller[i] + .text + .toString() + .trim() + .isNotEmpty + ? controller[i].text.toString() + : '' + : visibleChecklistIndexes.contains(i) + ? controller[i].text.toString() + : i18.checklist.notSelectedKey, + rowVersion: 1, + tenantId: attribute?[i].tenantId, + additionalDetails: null)); + } + + context.read().add( + ServiceCreateEvent( + serviceModel: ServiceModel( + createdAt: DigitDateUtils + .getDateFromTimestamp( + DateTime.now() + .toLocal() + .millisecondsSinceEpoch, + dateFormat: defaultDateTimeFormat, ), + tenantId: value + .selectedServiceDefinition! + .tenantId, + clientId: widget.referralClientRefId + .toString(), + serviceDefId: value + .selectedServiceDefinition?.id, + attributes: attributes, + rowVersion: 1, + accountId: ReferralReconSingleton() + .projectId, + additionalDetails: + ReferralReconSingleton() + .boundary + ?.code, ), - ); + ), + ); - Navigator.of( - context, - rootNavigator: true, - ).pop(true); - }, - ), - secondaryAction: DigitDialogActions( - label: localizations.translate( - i18.checklist.checklistDialogSecondaryAction, + Navigator.of( + context, + rootNavigator: true, + ).pop(true); + }, ), - action: (context) { - Navigator.of( - context, - rootNavigator: true, - ).pop(false); - }, - ), - ), - ); + Button( + label: localizations.translate( + i18.checklist.checklistDialogSecondaryAction, + ), + type: ButtonType.secondary, + size: ButtonSize.large, + onPressed: () { + Navigator.of( + context, + rootNavigator: true, + ).pop(false); + }, + ) + ], + ); + }); + if (shouldSubmit ?? false) { router.maybePop(); router.push(ReferralReconAcknowledgementRoute()); } }, - child: Text( - localizations.translate(i18.common.coreCommonSubmit), - ), - ), + ),] ), children: [ Form( key: checklistFormKey, //assigning key to form child: DigitCard( - child: Column(children: [ + cardType: CardType.primary, + children: [ Padding( - padding: const EdgeInsets.only(bottom: 8), - child: Text( - '${localizations.translate( - value.selectedServiceDefinition!.code - .toString(), - )} ${localizations.translate(i18.checklist.checklist)}', - style: theme.textTheme.displayMedium, - textAlign: TextAlign.left, - ), + padding: const EdgeInsets.only(bottom: 8), + child: Text( + '${localizations.translate( + value.selectedServiceDefinition!.code + .toString(), + )} ${localizations.translate(i18.checklist.checklist)}', + style: theme.textTheme.displayMedium, + textAlign: TextAlign.left, ), - ...initialAttributes!.map(( + ), + ...initialAttributes!.map(( e, - ) { - int index = (initialAttributes ?? []).indexOf(e); - - return Column(children: [ - if (e.dataType == 'String' && - !(e.code ?? '').contains('.')) ...[ - DigitTextField( - onChange: (value) { - checklistFormKey.currentState?.validate(); - }, - isRequired: false, - controller: controller[index], - inputFormatter: [ - FilteringTextInputFormatter.allow(RegExp( - "[a-zA-Z0-9]", - )), - ], - validator: (value) { - if (((value == null || value == '') && - e.required == true)) { - return localizations - .translate("${e.code}_REQUIRED"); - } - if (e.regex != null) { - return (RegExp(e.regex!).hasMatch(value!)) - ? null - : localizations - .translate("${e.code}_REGEX"); - } - - return null; - }, - label: localizations.translate( - '${value.selectedServiceDefinition?.code}.${e.code}', - ), - ), - ] else if (e.dataType == 'Number' && - !(e.code ?? '').contains('.')) ...[ - DigitTextField( - onChange: (value) { - checklistFormKey.currentState?.validate(); - }, - textStyle: theme.textTheme.headlineMedium, - textInputType: TextInputType.number, - inputFormatter: [ - FilteringTextInputFormatter.allow(RegExp( - "[0-9]", - )), - ], - validator: (value) { - if (((value == null || value == '') && - e.required == true)) { - return localizations.translate( - i18.common.corecommonRequired, - ); - } - if (e.regex != null) { - return (RegExp(e.regex!).hasMatch(value!)) - ? null - : localizations - .translate("${e.code}_REGEX"); - } - - return null; - }, - controller: controller[index], - label: '${localizations.translate( + ) { + int index = (initialAttributes ?? []).indexOf(e); + + return Column(children: [ + if (e.dataType == 'String' && + !(e.code ?? '').contains('.')) ...[ + FormField( + validator: (value) { + if (((controller[index].text == '') && + e.required == true)) { + return localizations + .translate("${e.code}_REQUIRED"); + } + if (e.regex != null) { + return (RegExp(e.regex!).hasMatch(controller[index].text)) + ? null + : localizations + .translate("${e.code}_REGEX"); + } + + return null; + }, + builder: (FormFieldState field) { + return InputField( + onChange: (value) { + controller[index].text = value; + checklistFormKey.currentState?.validate(); + }, + errorMessage: field.errorText, + isRequired: false, + controller: controller[index], + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp( + "[a-zA-Z0-9]", + )), + ], + type: InputType.text, + label: localizations.translate( '${value.selectedServiceDefinition?.code}.${e.code}', - ).trim()} ${e.required == true ? '*' : ''}', - ), - ] else if (e.dataType == 'MultiValueList' && - !(e.code ?? '').contains('.')) ...[ - Align( - alignment: Alignment.topLeft, - child: Padding( - padding: const EdgeInsets.all(8), - child: Column( - children: [ - Text( - '${localizations.translate( - '${value.selectedServiceDefinition?.code}.${e.code}', - )} ${e.required == true ? '*' : ''}', - style: theme.textTheme.headlineSmall, ), - ], - ), + ); + }) + ] else if (e.dataType == 'Number' && + !(e.code ?? '').contains('.')) ...[ + FormField( + validator: (value) { + if (((controller[index].text == '') && e.required == true)) { + return localizations.translate( + i18.common.corecommonRequired, + ); + } + if (e.regex != null) { + return (RegExp(e.regex!).hasMatch(controller[index].text)) + ? null + : localizations.translate("${e.code}_REGEX"); + } + + return null; + }, + builder: (FormFieldState field) { + return InputField( + onChange: (value) { + controller[index].text = value; + checklistFormKey.currentState?.validate(); + }, + controller: controller[index], + errorMessage: field.errorText, + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp( + "[0-9]", + )), + ], + type: InputType.text, + keyboardType: TextInputType.number, + label: '${localizations.translate( + '${value.selectedServiceDefinition?.code}.${e.code}', + ).trim()} ${e.required == true ? '*' : ''}', + ); + }) + ] else if (e.dataType == 'MultiValueList' && + !(e.code ?? '').contains('.')) ...[ + Align( + alignment: Alignment.topLeft, + child: Padding( + padding: const EdgeInsets.all(8), + child: Column( + children: [ + Text( + '${localizations.translate( + '${value.selectedServiceDefinition?.code}.${e.code}', + )} ${e.required == true ? '*' : ''}', + style: theme.textTheme.headlineSmall, + ), + ], ), ), - BlocBuilder( - builder: (context, state) { - return Column( - children: e.values! - .map((e) => DigitCheckboxTile( - label: e, - value: controller[index] - .text - .split('.') - .contains(e), - onChanged: (value) { - context - .read() - .add( - ServiceSurveyFormEvent( - value: e.toString(), - submitTriggered: - submitTriggered, - ), - ); - final String ele; - var val = controller[index] - .text - .split('.'); - if (val.contains(e)) { - val.remove(e); - ele = val.join("."); - } else { - ele = - "${controller[index].text}.$e"; - } - controller[index].value = - TextEditingController - .fromValue( + ), + BlocBuilder( + builder: (context, state) { + return Column( + children: e.values! + .map((e) => Column( + children: [ + DigitCheckbox( + label: e, + value: controller[index] + .text + .split('.') + .contains(e), + onChanged: (value) { + context + .read() + .add( + ServiceSurveyFormEvent( + value: e.toString(), + submitTriggered: + submitTriggered, + ), + ); + final String ele; + var val = controller[index] + .text + .split('.'); + if (val.contains(e)) { + val.remove(e); + ele = val.join("."); + } else { + ele = + "${controller[index].text}.$e"; + } + controller[index].value = + TextEditingController + .fromValue( TextEditingValue( text: ele, ), ).value; - }, - )) - .toList(), - ); - }, + }, + ), + SizedBox( + height: theme.spacerTheme.spacer3, + ) + ], + )).toList(), + ); + }, + ), + ] + else if (e.dataType == 'SingleValueList') ...[ + if (!(e.code ?? '').contains('.')) + DigitCard( + cardType: CardType.primary, + children: [_buildChecklist( + e, + index, + value.selectedServiceDefinition, + context, + ),] ), - ] else if (e.dataType == 'SingleValueList') ...[ - if (!(e.code ?? '').contains('.')) - DigitCard( - child: _buildChecklist( - e, - index, - value.selectedServiceDefinition, - context, - ), - ), - ], - ]); - }), - const SizedBox( - height: 15, - ), - ]), + ], + ]); + }), + const SizedBox( + height: 15, + ),] ), ), ], @@ -401,12 +436,13 @@ class _ReferralReasonChecklistPageState } Widget _buildChecklist( - AttributesModel item, - int index, - ServiceDefinitionModel? selectedServiceDefinition, - BuildContext context, - ) { + AttributesModel item, + int index, + ServiceDefinitionModel? selectedServiceDefinition, + BuildContext context, + ) { final theme = Theme.of(context); + /* Check the data type of the attribute*/ if (item.dataType == 'SingleValueList') { final childItems = getNextQuestions( @@ -451,15 +487,15 @@ class _ReferralReasonChecklistPageState onChanged: (value) { context.read().add( ServiceSurveyFormEvent( - value: Random().nextInt(100).toString(), - submitTriggered: submitTriggered, - ), - ); + value: Random().nextInt(100).toString(), + submitTriggered: submitTriggered, + ), + ); setState(() { // Clear child controllers and update visibility for (final matchingChildItem in childItems) { final childIndex = - initialAttributes?.indexOf(matchingChildItem); + initialAttributes?.indexOf(matchingChildItem); if (childIndex != null) { controller[childIndex].clear(); visibleChecklistIndexes @@ -470,20 +506,20 @@ class _ReferralReasonChecklistPageState // Update the current controller's value controller[index].value = TextEditingController.fromValue( - TextEditingValue( - text: value!, - ), - ).value; + TextEditingValue( + text: value!, + ), + ).value; if (excludedIndexes.isNotEmpty) { for (int i = 0; i < excludedIndexes.length; i++) { // Clear excluded child controllers controller[excludedIndexes[i]].value = TextEditingController.fromValue( - const TextEditingValue( - text: '', - ), - ).value; + const TextEditingValue( + text: '', + ), + ).value; } } @@ -492,12 +528,12 @@ class _ReferralReasonChecklistPageState }, items: item.values != null ? item.values! - .where((e) => e != i18.checklist.notSelectedKey) - .toList() + .where((e) => e != i18.checklist.notSelectedKey) + .toList() : [], itemBuilder: (item) => RadioButtonBuilder( localizations.translate( - item.trim().toUpperCase(), + 'CORE_COMMON_${item.trim().toUpperCase()}', ), ), ); @@ -541,98 +577,114 @@ class _ReferralReasonChecklistPageState } else if (item.dataType == 'String') { return Padding( padding: const EdgeInsets.all(8.0), - child: DigitTextField( - onChange: (value) { - checklistFormKey.currentState?.validate(); - }, - isRequired: item.required ?? true, - controller: controller[index], - inputFormatter: [ - FilteringTextInputFormatter.allow(RegExp( - "[a-zA-Z0-9 ]", - )), - ], + child: FormField( validator: (value) { - if (((value == null || value == '') && item.required == true)) { + // Custom validation logic + if (((controller[index].text == '') && item.required == true)) { return localizations.translate("${item.code}_REQUIRED"); } if (item.regex != null) { - return (RegExp(item.regex!).hasMatch(value!)) + return (RegExp(item.regex!).hasMatch(controller[index].text)) ? null : localizations.translate("${item.code}_REGEX"); } return null; }, - label: localizations.translate( - '${selectedServiceDefinition?.code}.${item.code}', - ), + builder: (FormFieldState field) { + return InputField( + onChange: (value) { + controller[index].text = value; + checklistFormKey.currentState?.validate(); + }, + errorMessage: field.errorText, + isRequired: item.required ?? true, + type: InputType.text, + label: localizations.translate( + '${selectedServiceDefinition?.code}.${item.code}', + ), + controller: controller[index], + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp( + "[a-zA-Z0-9 ]", + )), + ], + ); + }, + ), ); } else if (item.dataType == 'Number') { - return DigitTextField( - onChange: (value) { - checklistFormKey.currentState?.validate(); - }, - textStyle: theme.textTheme.headlineMedium, - textInputType: TextInputType.number, - inputFormatter: [ - FilteringTextInputFormatter.allow(RegExp( - "[0-9]", - )), - ], - validator: (value) { - if (((value == null || value == '') && item.required == true)) { - return localizations.translate( - i18.common.corecommonRequired, + return FormField( + validator: (value) { + if (((controller[index].text == '') && item.required == true)) { + return localizations.translate( + i18.common.corecommonRequired, + ); + } + if (item.regex != null) { + return (RegExp(item.regex!).hasMatch(controller[index].text)) + ? null + : localizations.translate("${item.code}_REGEX"); + } + + return null; + }, + builder: (FormFieldState field) { + return InputField( + onChange: (value) { + controller[index].text = value; + checklistFormKey.currentState?.validate(); + }, + controller: controller[index], + errorMessage: field.errorText, + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp( + "[0-9]", + )), + ], + type: InputType.text, + keyboardType: TextInputType.number, + label: '${localizations.translate( + '${selectedServiceDefinition?.code}.${item.code}', + ).trim()} ${item.required == true ? '*' : ''}', ); - } - if (item.regex != null) { - return (RegExp(item.regex!).hasMatch(value!)) - ? null - : localizations.translate("${item.code}_REGEX"); - } - - return null; - }, - controller: controller[index], - label: '${localizations.translate( - '${selectedServiceDefinition?.code}.${item.code}', - ).trim()} ${item.required == true ? '*' : ''}', - ); + }); } else if (item.dataType == 'MultiValueList') { return Column( - children: [ - Align( - alignment: Alignment.topLeft, - child: Padding( - padding: const EdgeInsets.all(8), - child: Column( - children: [ - Text( - '${localizations.translate( - '${selectedServiceDefinition?.code}.${item.code}', - )} ${item.required == true ? '*' : ''}', - style: theme.textTheme.headlineSmall, - ), - ], + children: [ + Align( + alignment: Alignment.topLeft, + child: Padding( + padding: const EdgeInsets.all(8), + child: Column( + children: [ + Text( + '${localizations.translate( + '${selectedServiceDefinition?.code}.${item.code}', + )} ${item.required == true ? '*' : ''}', + style: theme.textTheme.headlineSmall, + ), + ], + ), ), ), - ), - BlocBuilder( - builder: (context, state) { - return Column( - children: item.values! - .map((e) => DigitCheckboxTile( + BlocBuilder( + builder: (context, state) { + return Column( + children: item.values! + .map((e) => Column( + children: [ + DigitCheckbox( label: e, value: controller[index].text.split('.').contains(e), onChanged: (value) { context.read().add( ServiceSurveyFormEvent( - value: e.toString(), - submitTriggered: submitTriggered, - ), - ); + value: e.toString(), + submitTriggered: submitTriggered, + ), + ); final String ele; var val = controller[index].text.split('.'); if (val.contains(e)) { @@ -643,18 +695,19 @@ class _ReferralReasonChecklistPageState } controller[index].value = TextEditingController.fromValue( - TextEditingValue( - text: ele, - ), - ).value; - }, - )) - .toList(), - ); - }, - ), - ], - ); + TextEditingValue( + text: ele, + ), + ).value; + },), + SizedBox( + height: theme.spacerTheme.spacer3, + ) + ], + )).toList(), + ); + } + )]); } else { return const SizedBox.shrink(); } @@ -662,17 +715,19 @@ class _ReferralReasonChecklistPageState // Function to build nested checklists for child attributes Widget _buildNestedChecklists( - String parentCode, - int parentIndex, - String parentControllerValue, - BuildContext context, - ) { + String parentCode, + int parentIndex, + String parentControllerValue, + BuildContext context, + ) { // Retrieve child items for the given parent code final childItems = getNextQuestions( parentCode, initialAttributes ?? [], ); + final theme = Theme.of(context); + return Column( children: [ // Build cards for each matching child attribute @@ -682,7 +737,7 @@ class _ReferralReasonChecklistPageState margin: const EdgeInsets.only(bottom: 8.0, left: 4.0, right: 4.0), color: countDots(matchingChildItem.code ?? '') % 4 == 2 ? const Color.fromRGBO(238, 238, 238, 1) - : const DigitColors().white, + : theme.colorTheme.paper.secondary, child: _buildChecklist( matchingChildItem, initialAttributes?.indexOf(matchingChildItem) ?? @@ -697,9 +752,9 @@ class _ReferralReasonChecklistPageState // Function to get the next questions (child attributes) based on a parent code List getNextQuestions( - String parentCode, - List checklistItems, - ) { + String parentCode, + List checklistItems, + ) { final childCodePrefix = '$parentCode.'; final nextCheckLists = checklistItems.where((item) { return item.code!.startsWith(childCodePrefix) && @@ -719,4 +774,4 @@ class _ReferralReasonChecklistPageState return dotCount; } -} +} \ No newline at end of file diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart index d281a5f81..f6ccf2630 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart @@ -1,8 +1,9 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/atoms/digit_radio_button_list.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/atoms/dropdown_wrapper.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:survey_form/survey_form.dart'; -import 'package:digit_components/widgets/atoms/digit_toaster.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -50,6 +51,7 @@ class _RecordReferralDetailsPageState static const _beneficiaryIdKey = 'beneficiaryId'; static const _referralCodeKey = 'referralCode'; static const _ageKey = 'ageInMonths'; + String selectedReasonIndex = ''; final clickedStatus = ValueNotifier(false); @override @@ -103,299 +105,23 @@ class _RecordReferralDetailsPageState builder: (context, serviceState) { return serviceState.maybeWhen( orElse: () => DigitCard( - margin: const EdgeInsets.fromLTRB( - 0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB( - kPadding, 0, kPadding, 0), - child: ValueListenableBuilder( - valueListenable: clickedStatus, - builder: (context, bool isClicked, _) { - return DigitElevatedButton( - onPressed: isClicked - ? null - : () { - if (form - .control(_cycleKey) - .value == - null) { - clickedStatus.value = false; - form - .control(_cycleKey) - .setErrors({'': true}); - } else if (form - .control(_genderKey) - .value == - null) { - clickedStatus.value = false; - form - .control(_genderKey) - .setErrors({'': true}); - } else if (form - .control(_referralReason) - .value == - null) { - clickedStatus.value = false; - form - .control(_referralReason) - .setErrors({'': true}); - } - form.markAllAsTouched(); - - if (viewOnly) { - final symptom = form - .control(_referralReason) - .value as String; - context - .read< - ReferralReconServiceDefinitionBloc>() - .add( - ReferralReconServiceDefinitionSelectionEvent( - serviceDefinitionCode: - symptom, - ), - ); - context.read().add( - ServiceSearchEvent( - serviceSearchModel: - ServiceSearchModel( - clientId: recordState - .mapOrNull( - create: (value) => value - .viewOnly - ? value - .hfReferralModel - ?.clientReferenceId - : null, - ), - ), - ), - ); - context.router.push( - ReferralReasonChecklistPreviewRoute(), - ); - } else if (!form.valid) { - return; - } else if (value - .serviceDefinitionList - .isEmpty) { - DigitToast.show( - context, - options: DigitToastOptions( - i18.referralReconciliation - .noChecklistFound, - true, - DigitTheme - .instance.mobileTheme, - ), - ); - } else { - final hfState = BlocProvider.of< - RecordHFReferralBloc>( - context, - ).state; - clickedStatus.value = true; - final cycle = form - .control(_cycleKey) - .value; - final nameOfChild = form - .control(_nameOfChildKey) - .value as String; - final age = form - .control(_ageKey) - .value as int; - final gender = form - .control(_genderKey) - .value as String; - final beneficiaryId = form - .control(_beneficiaryIdKey) - .value as String?; - final referralCode = form - .control(_referralCodeKey) - .value as String?; - final symptom = form - .control(_referralReason) - .value as String; - final hfCoordinator = - hfState.mapOrNull( - create: (val) => - val.healthFacilityCord, - ); - final referredBy = - hfState.mapOrNull( - create: (val) => - val.referredBy, - ); - final dateOfEvaluation = hfState - .mapOrNull( - create: (val) => - val.dateOfEvaluation, - ) - ?.millisecondsSinceEpoch; - final facilityId = - hfState.mapOrNull( - create: (val) => - val.facilityId, - ); - final hfClientRefId = - IdGen.i.identifier; - - final event = context.read< - RecordHFReferralBloc>(); - event.add( - RecordHFReferralCreateEntryEvent( - hfReferralModel: - HFReferralModel( - clientReferenceId: - hfClientRefId, - projectFacilityId: - facilityId, - projectId: - widget.projectId, - name: nameOfChild.trim(), - beneficiaryId: - beneficiaryId, - referralCode: - referralCode, - symptom: symptom, - tenantId: - ReferralReconSingleton() - .tenantId, - rowVersion: 1, - auditDetails: - AuditDetails( - createdBy: - ReferralReconSingleton() - .userUUid, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: - ReferralReconSingleton() - .userUUid, - lastModifiedTime: context - .millisecondsSinceEpoch(), - ), - clientAuditDetails: - ClientAuditDetails( - createdBy: - ReferralReconSingleton() - .userUUid, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: - ReferralReconSingleton() - .userUUid, - lastModifiedTime: context - .millisecondsSinceEpoch(), - ), - additionalFields: - HFReferralAdditionalFields( - version: 1, - fields: [ - if (hfCoordinator != - null && - hfCoordinator - .toString() - .trim() - .isNotEmpty) - AdditionalField( - ReferralReconEnums - .hFCoordinator - .toValue(), - hfCoordinator, - ), - if (referredBy != - null && - referredBy - .toString() - .trim() - .isNotEmpty) - AdditionalField( - ReferralReconEnums - .referredBy - .toValue(), - referredBy, - ), - if (dateOfEvaluation != - null && - dateOfEvaluation - .toString() - .trim() - .isNotEmpty) - AdditionalField( - ReferralReconEnums - .dateOfEvaluation - .toValue(), - dateOfEvaluation, - ), - if (nameOfChild != - null && - nameOfChild - .toString() - .trim() - .isNotEmpty) - AdditionalField( - ReferralReconEnums - .nameOfReferral - .toValue(), - nameOfChild, - ), - if (age != null && - age - .toString() - .trim() - .isNotEmpty) - AdditionalField( - ReferralReconEnums - .age - .toValue(), - age, - ), - if (gender != null && - gender - .toString() - .trim() - .isNotEmpty) - AdditionalField( - ReferralReconEnums - .gender - .toValue(), - gender, - ), - if (cycle != null && - cycle - .toString() - .trim() - .isNotEmpty) - AdditionalField( - ReferralReconEnums - .cycle - .toValue(), - cycle, - ), - ], - ), - ), - ), - ); - context - .read< - ReferralReconServiceDefinitionBloc>() - .add( - ReferralReconServiceDefinitionSelectionEvent( - serviceDefinitionCode: - symptom), - ); - context.router.push( - ReferralReasonChecklistRoute( - referralClientRefId: - hfClientRefId, - ), - ); - } - }, - child: Center( - child: Text( - localizations + margin: EdgeInsets.fromLTRB( + 0, theme.spacerTheme.spacer2, 0, 0), + padding: EdgeInsets.fromLTRB( + theme.spacerTheme.spacer2, + 0, + theme.spacerTheme.spacer2, + 0), + cardType: CardType.primary, + children: [ + ValueListenableBuilder( + valueListenable: clickedStatus, + builder: (context, bool isClicked, _) { + return Button( + size: ButtonSize.large, + type: ButtonType.primary, + mainAxisSize: MainAxisSize.max, + label: localizations .translate(recordState.mapOrNull( create: (value) => value .viewOnly @@ -405,65 +131,51 @@ class _RecordReferralDetailsPageState .coreCommonSubmit, ) ?? i18.common.coreCommonSubmit), - ), - ), - ); - }, - ), - ), - serviceSearch: (value1, value2, value3) { - return DigitCard( - margin: const EdgeInsets.fromLTRB( - 0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB( - kPadding, 0, kPadding, 0), - child: ValueListenableBuilder( - valueListenable: clickedStatus, - builder: (context, bool isClicked, _) { - return DigitElevatedButton( - onPressed: isClicked - ? null - : () { - if (form + onPressed: isClicked + ? () {} + : () { + if (form + .control(_cycleKey) + .value == + null) { + clickedStatus.value = false; + form .control(_cycleKey) - .value == - null) { - clickedStatus.value = false; - form - .control(_cycleKey) - .setErrors({'': true}); - } else if (form + .setErrors({'': true}); + } else if (form + .control(_genderKey) + .value == + null) { + clickedStatus.value = false; + form .control(_genderKey) - .value == - null) { - clickedStatus.value = false; - form - .control(_genderKey) - .setErrors({'': true}); - } else if (form + .setErrors({'': true}); + } else if (form + .control( + _referralReason) + .value == + null) { + clickedStatus.value = false; + form .control( _referralReason) - .value == - null) { - clickedStatus.value = false; - form - .control(_referralReason) - .setErrors({'': true}); - } - form.markAllAsTouched(); + .setErrors({'': true}); + } + form.markAllAsTouched(); - if (viewOnly) { - final symptom = form - .control(_referralReason) - .value as String; - if (value1.isNotEmpty) { + if (viewOnly) { + final symptom = form + .control( + _referralReason) + .value as String; context .read< ReferralReconServiceDefinitionBloc>() .add( ReferralReconServiceDefinitionSelectionEvent( - serviceDefinitionCode: - symptom), + serviceDefinitionCode: + symptom, + ), ); context .read() @@ -487,21 +199,223 @@ class _RecordReferralDetailsPageState context.router.push( ReferralReasonChecklistPreviewRoute(), ); + } else if (!form.valid) { + return; + } else if (value + .serviceDefinitionList + .isEmpty) { + Toast.showToast( + context, + message: i18 + .referralReconciliation + .noChecklistFound, + type: ToastType.error, + ); } else { + final hfState = BlocProvider + .of( + context, + ).state; + clickedStatus.value = true; + final cycle = form + .control(_cycleKey) + .value; + final nameOfChild = form + .control( + _nameOfChildKey) + .value as String; + final age = form + .control(_ageKey) + .value as int; + final gender = form + .control(_genderKey) + .value as String; + final beneficiaryId = form + .control( + _beneficiaryIdKey) + .value as String?; + final referralCode = form + .control( + _referralCodeKey) + .value as String?; + final symptom = form + .control( + _referralReason) + .value as String; + final hfCoordinator = + hfState.mapOrNull( + create: (val) => val + .healthFacilityCord, + ); + final referredBy = + hfState.mapOrNull( + create: (val) => + val.referredBy, + ); + final dateOfEvaluation = hfState + .mapOrNull( + create: (val) => val + .dateOfEvaluation, + ) + ?.millisecondsSinceEpoch; + final facilityId = + hfState.mapOrNull( + create: (val) => + val.facilityId, + ); final hfClientRefId = - recordState.mapOrNull( - create: (value) => value - .hfReferralModel - ?.clientReferenceId, + IdGen.i.identifier; + + final event = context.read< + RecordHFReferralBloc>(); + event.add( + RecordHFReferralCreateEntryEvent( + hfReferralModel: + HFReferralModel( + clientReferenceId: + hfClientRefId, + projectFacilityId: + facilityId, + projectId: + widget.projectId, + name: nameOfChild + .trim(), + beneficiaryId: + beneficiaryId, + referralCode: + referralCode, + symptom: symptom, + tenantId: + ReferralReconSingleton() + .tenantId, + rowVersion: 1, + auditDetails: + AuditDetails( + createdBy: + ReferralReconSingleton() + .userUUid, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: + ReferralReconSingleton() + .userUUid, + lastModifiedTime: + context + .millisecondsSinceEpoch(), + ), + clientAuditDetails: + ClientAuditDetails( + createdBy: + ReferralReconSingleton() + .userUUid, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: + ReferralReconSingleton() + .userUUid, + lastModifiedTime: + context + .millisecondsSinceEpoch(), + ), + additionalFields: + HFReferralAdditionalFields( + version: 1, + fields: [ + if (hfCoordinator != + null && + hfCoordinator + .toString() + .trim() + .isNotEmpty) + AdditionalField( + ReferralReconEnums + .hFCoordinator + .toValue(), + hfCoordinator, + ), + if (referredBy != + null && + referredBy + .toString() + .trim() + .isNotEmpty) + AdditionalField( + ReferralReconEnums + .referredBy + .toValue(), + referredBy, + ), + if (dateOfEvaluation != + null && + dateOfEvaluation + .toString() + .trim() + .isNotEmpty) + AdditionalField( + ReferralReconEnums + .dateOfEvaluation + .toValue(), + dateOfEvaluation, + ), + if (nameOfChild != + null && + nameOfChild + .toString() + .trim() + .isNotEmpty) + AdditionalField( + ReferralReconEnums + .nameOfReferral + .toValue(), + nameOfChild, + ), + if (age != null && + age + .toString() + .trim() + .isNotEmpty) + AdditionalField( + ReferralReconEnums + .age + .toValue(), + age, + ), + if (gender != + null && + gender + .toString() + .trim() + .isNotEmpty) + AdditionalField( + ReferralReconEnums + .gender + .toValue(), + gender, + ), + if (cycle != + null && + cycle + .toString() + .trim() + .isNotEmpty) + AdditionalField( + ReferralReconEnums + .cycle + .toValue(), + cycle, + ), + ], + ), + ), + ), ); context .read< ReferralReconServiceDefinitionBloc>() .add( ReferralReconServiceDefinitionSelectionEvent( - serviceDefinitionCode: - symptom, - ), + serviceDefinitionCode: + symptom), ); context.router.push( ReferralReasonChecklistRoute( @@ -510,251 +424,364 @@ class _RecordReferralDetailsPageState ), ); } - } else if (!form.valid) { - return; - } else if (value - .serviceDefinitionList - .isEmpty) { - DigitToast.show( - context, - options: DigitToastOptions( - i18.referralReconciliation - .noChecklistFound, - true, - DigitTheme - .instance.mobileTheme, - ), - ); - } else { - final hfState = BlocProvider - .of( - context, - ).state; - clickedStatus.value = true; - final cycle = form - .control(_cycleKey) - .value; - final nameOfChild = form - .control(_nameOfChildKey) - .value as String; - final age = form - .control(_ageKey) - .value as int; - final gender = form - .control(_genderKey) - .value as String; - final beneficiaryId = form - .control( - _beneficiaryIdKey) - .value as String?; - final referralCode = form - .control(_referralCodeKey) - .value as String?; - final symptom = form - .control(_referralReason) - .value as String; - final hfCoordinator = - hfState.mapOrNull( - create: (val) => - val.healthFacilityCord, - ); - final referredBy = - hfState.mapOrNull( - create: (val) => - val.referredBy, - ); - final dateOfEvaluation = hfState - .mapOrNull( - create: (val) => val - .dateOfEvaluation, - ) - ?.millisecondsSinceEpoch; - final facilityId = - hfState.mapOrNull( - create: (val) => - val.facilityId, - ); - final hfClientRefId = - IdGen.i.identifier; + }, + ); + }, + ), + ]), + serviceSearch: (value1, value2, value3) { + return DigitCard( + margin: EdgeInsets.all( + theme.spacerTheme.spacer2), + padding: EdgeInsets.all( + theme.spacerTheme.spacer2), + cardType: CardType.primary, + children: [ + ValueListenableBuilder( + valueListenable: clickedStatus, + builder: (context, bool isClicked, _) { + return Button( + size: ButtonSize.large, + type: ButtonType.primary, + mainAxisSize: MainAxisSize.max, + label: localizations.translate( + recordState.mapOrNull( + create: (value) => value + .viewOnly + ? i18.common + .coreCommonNext + : i18.common + .coreCommonSubmit, + ) ?? + i18.common + .coreCommonSubmit), + onPressed: isClicked + ? () {} + : () { + if (form + .control(_cycleKey) + .value == + null) { + clickedStatus.value = + false; + form + .control(_cycleKey) + .setErrors( + {'': true}); + } else if (form + .control(_genderKey) + .value == + null) { + clickedStatus.value = + false; + form + .control(_genderKey) + .setErrors( + {'': true}); + } + form.markAllAsTouched(); + if (form.invalid) return; - final event = context.read< - RecordHFReferralBloc>(); - event.add( - RecordHFReferralCreateEntryEvent( - hfReferralModel: - HFReferralModel( - clientReferenceId: - hfClientRefId, - projectFacilityId: - facilityId, - projectId: - ReferralReconSingleton() - .projectId, - name: - nameOfChild.trim(), - beneficiaryId: - beneficiaryId, - referralCode: - referralCode, - symptom: symptom, - tenantId: - ReferralReconSingleton() - .tenantId, - rowVersion: 1, - auditDetails: - AuditDetails( - createdBy: - ReferralReconSingleton() - .userUUid, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: - ReferralReconSingleton() - .userUUid, - lastModifiedTime: context - .millisecondsSinceEpoch(), - ), - clientAuditDetails: - ClientAuditDetails( - createdBy: - ReferralReconSingleton() - .userUUid, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: - ReferralReconSingleton() - .userUUid, - lastModifiedTime: context - .millisecondsSinceEpoch(), - ), - additionalFields: - HFReferralAdditionalFields( - version: 1, - fields: [ - if (hfCoordinator != - null && - hfCoordinator - .toString() - .trim() - .isNotEmpty) - AdditionalField( - ReferralReconEnums - .hFCoordinator - .toValue(), - hfCoordinator, - ), - if (referredBy != - null && - referredBy - .toString() - .trim() - .isNotEmpty) - AdditionalField( - ReferralReconEnums - .referredBy - .toValue(), - referredBy, - ), - if (dateOfEvaluation != - null && - dateOfEvaluation - .toString() - .trim() - .isNotEmpty) - AdditionalField( - ReferralReconEnums - .dateOfEvaluation - .toValue(), - dateOfEvaluation, + if (viewOnly) { + final symptom = form + .control( + _referralReason) + .value as String; + if (value1.isNotEmpty) { + context + .read< + ReferralReconServiceDefinitionBloc>() + .add( + ReferralReconServiceDefinitionSelectionEvent( + serviceDefinitionCode: + symptom), + ); + context + .read() + .add( + ServiceSearchEvent( + serviceSearchModel: + ServiceSearchModel( + clientId: + recordState + .mapOrNull( + create: (value) => value + .viewOnly + ? value + .hfReferralModel + ?.clientReferenceId + : null, + ), + ), ), - if (nameOfChild != - null && - nameOfChild - .toString() - .trim() - .isNotEmpty) - AdditionalField( - ReferralReconEnums - .nameOfReferral - .toValue(), - nameOfChild, - ), - if (age != null && - age - .toString() - .trim() - .isNotEmpty) - AdditionalField( - ReferralReconEnums - .age - .toValue(), - age, - ), - if (gender != - null && - gender - .toString() - .trim() - .isNotEmpty) - AdditionalField( - ReferralReconEnums - .gender - .toValue(), - gender, - ), - if (cycle != null && - cycle - .toString() - .trim() - .isNotEmpty) - AdditionalField( - ReferralReconEnums - .cycle - .toValue(), - cycle, + ); + context.router.push( + ReferralReasonChecklistPreviewRoute(), + ); + } else { + final hfClientRefId = + recordState + .mapOrNull( + create: (value) => value + .hfReferralModel + ?.clientReferenceId, + ); + context + .read< + ReferralReconServiceDefinitionBloc>() + .add( + ReferralReconServiceDefinitionSelectionEvent( + serviceDefinitionCode: + symptom, ), - ], + ); + context.router.push( + ReferralReasonChecklistRoute( + referralClientRefId: + hfClientRefId, + ), + ); + } + } else if (!form.valid) { + return; + } else if (value + .serviceDefinitionList + .isEmpty) { + Toast.showToast( + context, + message: i18 + .referralReconciliation + .noChecklistFound, + type: ToastType.error, + ); + } else { + final hfState = + BlocProvider.of< + RecordHFReferralBloc>( + context, + ).state; + clickedStatus.value = + true; + final cycle = form + .control(_cycleKey) + .value; + final nameOfChild = form + .control( + _nameOfChildKey) + .value as String; + final age = form + .control(_ageKey) + .value as int; + final gender = form + .control(_genderKey) + .value as String; + final beneficiaryId = form + .control( + _beneficiaryIdKey) + .value as String?; + final referralCode = form + .control( + _referralCodeKey) + .value as String?; + final symptom = form + .control( + _referralReason) + .value as String; + final hfCoordinator = + hfState.mapOrNull( + create: (val) => val + .healthFacilityCord, + ); + final referredBy = + hfState.mapOrNull( + create: (val) => + val.referredBy, + ); + final dateOfEvaluation = + hfState + .mapOrNull( + create: (val) => + val.dateOfEvaluation, + ) + ?.millisecondsSinceEpoch; + final facilityId = + hfState.mapOrNull( + create: (val) => + val.facilityId, + ); + final hfClientRefId = + IdGen.i.identifier; + + final event = context.read< + RecordHFReferralBloc>(); + event.add( + RecordHFReferralCreateEntryEvent( + hfReferralModel: + HFReferralModel( + clientReferenceId: + hfClientRefId, + projectFacilityId: + facilityId, + projectId: + ReferralReconSingleton() + .projectId, + name: nameOfChild + .trim(), + beneficiaryId: + beneficiaryId, + referralCode: + referralCode, + symptom: symptom, + tenantId: + ReferralReconSingleton() + .tenantId, + rowVersion: 1, + auditDetails: + AuditDetails( + createdBy: + ReferralReconSingleton() + .userUUid, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: + ReferralReconSingleton() + .userUUid, + lastModifiedTime: + context + .millisecondsSinceEpoch(), + ), + clientAuditDetails: + ClientAuditDetails( + createdBy: + ReferralReconSingleton() + .userUUid, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: + ReferralReconSingleton() + .userUUid, + lastModifiedTime: + context + .millisecondsSinceEpoch(), + ), + additionalFields: + HFReferralAdditionalFields( + version: 1, + fields: [ + if (hfCoordinator != + null && + hfCoordinator + .toString() + .trim() + .isNotEmpty) + AdditionalField( + ReferralReconEnums + .hFCoordinator + .toValue(), + hfCoordinator, + ), + if (referredBy != + null && + referredBy + .toString() + .trim() + .isNotEmpty) + AdditionalField( + ReferralReconEnums + .referredBy + .toValue(), + referredBy, + ), + if (dateOfEvaluation != + null && + dateOfEvaluation + .toString() + .trim() + .isNotEmpty) + AdditionalField( + ReferralReconEnums + .dateOfEvaluation + .toValue(), + dateOfEvaluation, + ), + if (nameOfChild != + null && + nameOfChild + .toString() + .trim() + .isNotEmpty) + AdditionalField( + ReferralReconEnums + .nameOfReferral + .toValue(), + nameOfChild, + ), + if (age != + null && + age + .toString() + .trim() + .isNotEmpty) + AdditionalField( + ReferralReconEnums + .age + .toValue(), + age, + ), + if (gender != + null && + gender + .toString() + .trim() + .isNotEmpty) + AdditionalField( + ReferralReconEnums + .gender + .toValue(), + gender, + ), + if (cycle != + null && + cycle + .toString() + .trim() + .isNotEmpty) + AdditionalField( + ReferralReconEnums + .cycle + .toValue(), + cycle, + ), + ], + ), + ), ), - ), - ), - ); - context - .read< - ReferralReconServiceDefinitionBloc>() - .add( - ReferralReconServiceDefinitionSelectionEvent( - serviceDefinitionCode: - symptom, + ); + context + .read< + ReferralReconServiceDefinitionBloc>() + .add( + ReferralReconServiceDefinitionSelectionEvent( + serviceDefinitionCode: + symptom, + ), + ); + final parent = context + .router + .parent() + as StackRouter; + parent.push( + ReferralReasonChecklistRoute( + referralClientRefId: + hfClientRefId, ), ); - final parent = context.router - .parent() as StackRouter; - parent.push( - ReferralReasonChecklistRoute( - referralClientRefId: - hfClientRefId, - ), - ); - } - }, - child: Center( - child: Text( - localizations.translate(recordState - .mapOrNull( - create: (value) => - value.viewOnly - ? i18.common - .coreCommonNext - : i18.common - .coreCommonSubmit, - ) ?? - i18.common.coreCommonSubmit), - ), - ), - ); - }, - ), - ); + } + }, + ); + }, + ), + ]); }, ); }, @@ -764,7 +791,7 @@ class _RecordReferralDetailsPageState child: Column( children: [ DigitCard( - child: Column( + cardType: CardType.primary, children: [ Row( mainAxisAlignment: @@ -776,81 +803,191 @@ class _RecordReferralDetailsPageState i18.referralReconciliation .referralDetails, ), - style: - theme.textTheme.displayMedium, + style: theme + .textTheme.displayMedium, ), ), ], ), - Column(children: [ - DigitReactiveSearchDropdown( - label: localizations.translate( - i18.referralReconciliation - .selectCycle, - ), - form: form, - isRequired: true, - enabled: !viewOnly, - menuItems: widget.cycles, + ReactiveWrapperField( formControlName: _cycleKey, - valueMapper: (value) { - return '${localizations.translate(i18.referralReconciliation.cycle)} $value'; + validationMessages: { + '': (_) => localizations + .translate(i18.common + .corecommonRequired), }, - validationMessage: - localizations.translate( - i18.common.corecommonRequired, - ), - emptyText: localizations.translate( - i18.common.noMatchFound), - ), - DigitTextFormField( - formControlName: _nameOfChildKey, - label: localizations.translate( - i18.referralReconciliation - .nameOfTheChildLabel, - ), - readOnly: viewOnly, - isRequired: true, + showErrors: (control) => + control.invalid && + control.touched, + // Ensures error is shown if invalid and touched + builder: (field) { + return LabeledField( + isRequired: true, + label: localizations + .translate( + i18.referralReconciliation + .selectCycle, + ), + child: Dropdown( + readOnly: viewOnly, + onSelect: (val) => { + form + .control( + _cycleKey) + .markAsTouched(), + form + .control( + _cycleKey) + .value = val.name, + }, + selectedOption: widget + .cycles + .asMap() + .entries + .map((item) => + DropdownItem( + name: + 'Cycle ${item.value}', + code: item.key + .toString(), + )) + .firstWhere( + (item) => + item.name == + form + .control( + _cycleKey) + .value, + orElse: () => + const DropdownItem( + name: '', + code: ''), + ), + errorMessage: + field.errorText, + items: widget.cycles + .asMap() + .entries + .map( + (item) => + DropdownItem( + name: + 'Cycle ${item.value}', + code: item.key + .toString(), + ), + ) + .toList(), + )); + }), + ReactiveWrapperField( validationMessages: { 'required': (_) => localizations.translate( - i18.common.corecommonRequired, + i18.common + .corecommonRequired, ), }, - ), - DigitTextFormField( - formControlName: _beneficiaryIdKey, - label: localizations.translate( - i18.referralReconciliation - .beneficiaryIdLabel, - ), - readOnly: viewOnly, - ), - DigitTextFormField( - formControlName: _referralCodeKey, - label: localizations.translate( - i18.referralReconciliation - .referralCodeLabel, - ), - readOnly: viewOnly, - ), - DigitTextFormField( + formControlName: + _nameOfChildKey, + showErrors: (control) => + control.invalid && + control.touched, + // Ensures error is shown if invalid and touched + builder: (field) { + return LabeledField( + isRequired: true, + label: + localizations.translate( + i18.referralReconciliation + .nameOfTheChildLabel, + ), + child: DigitTextFormInput( + onChange: (val) => { + form + .control( + _nameOfChildKey) + .markAsTouched(), + form + .control( + _nameOfChildKey) + .value = val, + }, + errorMessage: + field.errorText, + readOnly: viewOnly, + initialValue: form + .control( + _nameOfChildKey) + .value, + ), + ); + }), + ReactiveWrapperField( + formControlName: + _beneficiaryIdKey, + builder: (field) { + return LabeledField( + label: + localizations.translate( + i18.referralReconciliation + .beneficiaryIdLabel, + ), + child: DigitTextFormInput( + onChange: (val) => { + form + .control( + _beneficiaryIdKey) + .markAsTouched(), + form + .control( + _beneficiaryIdKey) + .value = val, + }, + initialValue: form + .control( + _beneficiaryIdKey) + .value, + readOnly: viewOnly, + ), + ); + }), + ReactiveWrapperField( + formControlName: + _referralCodeKey, + builder: (field) { + return LabeledField( + label: + localizations.translate( + i18.referralReconciliation + .referralCodeLabel, + ), + child: DigitTextFormInput( + onChange: (val) => { + form + .control( + _referralCodeKey) + .markAsTouched(), + form + .control( + _referralCodeKey) + .value = val, + }, + initialValue: form + .control( + _referralCodeKey) + .value, + readOnly: viewOnly, + ), + ); + }), + ReactiveWrapperField( formControlName: _ageKey, - label: localizations.translate( - i18.common.ageInMonths, - ), - readOnly: viewOnly, - keyboardType: TextInputType.number, - inputFormatters: [ - FilteringTextInputFormatter - .digitsOnly, - LengthLimitingTextInputFormatter(4) - ], - isRequired: true, validationMessages: { 'required': (_) => localizations.translate( - i18.common.corecommonRequired, + i18.common + .corecommonRequired, ), 'max': (_) => localizations .translate( @@ -875,33 +1012,132 @@ class _RecordReferralDetailsPageState .toString(), ), }, - ), - DigitReactiveSearchDropdown( - label: localizations.translate( - i18.common.genderLabelText, - ), - enabled: !viewOnly, - form: form, - isRequired: true, - menuItems: ReferralReconSingleton() - .genderOptions, - validationMessage: - localizations.translate( - i18.common.corecommonRequired, - ), - formControlName: _genderKey, - valueMapper: (value) { - return localizations - .translate(value); + showErrors: (control) => + control.invalid && + control.touched, + // Ensures error is shown if invalid and touched + builder: (field) { + return LabeledField( + isRequired: true, + label: + localizations.translate( + i18.common.ageInMonths, + ), + child: DigitTextFormInput( + onChange: (val) => { + form + .control(_ageKey) + .markAsTouched(), + form + .control(_ageKey) + .value = + int.tryParse(val), + }, + keyboardType: + TextInputType.number, + inputFormatters: [ + FilteringTextInputFormatter + .digitsOnly, + LengthLimitingTextInputFormatter( + 4) + ], + readOnly: viewOnly, + initialValue: form + .control( + _ageKey) + .value == + null + ? "" + : form + .control(_ageKey) + .value + .toString(), + errorMessage: + field.errorText, + ), + ); + }), + ReactiveWrapperField( + validationMessages: { + '': (_) => + localizations.translate( + i18.common + .corecommonRequired, + ), }, - emptyText: localizations.translate( - i18.common.noMatchFound, - ), - ) - ]), - ], - ), - ), + formControlName: _genderKey, + showErrors: (control) => + control.invalid && + control.touched, + // Ensures error is shown if invalid and touched + builder: (field) { + return LabeledField( + isRequired: true, + label: localizations + .translate( + i18.common + .genderLabelText, + ), + child: Dropdown( + readOnly: viewOnly, + onSelect: (val) => { + form + .control( + _genderKey) + .markAsTouched(), + form + .control( + _genderKey) + .value = val.name, + }, + errorMessage: + field.errorText, + selectedOption: + ReferralReconSingleton() + .genderOptions + .asMap() + .entries + .map((item) => + DropdownItem( + name: item + .value, + code: item + .key + .toString(), + )) + .firstWhere( + (item) => + item.name == + form + .control( + _genderKey) + .value, + orElse: () => + const DropdownItem( + name: + '', + code: + ''), + ), + items: + ReferralReconSingleton() + .genderOptions + .asMap() + .entries + .map( + (item) => + DropdownItem( + name: item + .value, + code: item + .key + .toString(), + ), + ) + .toList(), + )); + }), + ]), StatefulBuilder(builder: (context, set) { form.control(_referralReason).value = recordState.mapOrNull( @@ -915,26 +1151,61 @@ class _RecordReferralDetailsPageState : null, ); return DigitCard( - child: DigitRadioButtonList( - labelStyle: theme.textTheme.displayMedium, - isEnabled: !viewOnly, - formControlName: _referralReason, - valueMapper: (val) => - localizations.translate(val), - options: ReferralReconSingleton() - .referralReasons, - labelText: localizations.translate( - i18.referralReconciliation - .reasonForReferralHeader, - ), - isRequired: true, - errorMessage: localizations.translate( - i18.common.corecommonRequired, - ), - onValueChange: (val) { - form.control(_referralReason).value = val; - }, - )); + cardType: CardType.primary, + children: [ + ReactiveWrapperField( + formControlName: _referralReason, + validationMessages: { + 'required': (_) => + localizations.translate( + i18.common + .corecommonRequired, + ), + }, + showErrors: (control) => + control.invalid && + control.touched, + // Ensures error is shown if invalid and touched + builder: (field) { + return LabeledField( + isRequired: true, + label: localizations.translate( + i18.referralReconciliation + .reasonForReferralHeader, + ), + child: RadioList( + onChanged: (val) { + form + .control( + _referralReason) + .markAsTouched(); + form + .control( + _referralReason) + .value = val.name; + selectedReasonIndex = + val.code; + }, + groupValue: selectedReasonIndex, + errorMessage: field.errorText, + radioButtons: + ReferralReconSingleton() + .referralReasons + .asMap() + .entries + .map((entry) { + int index = entry.key; + String val = entry.value; + return RadioButtonModel( + code: index.toString(), + // Use the index as the code + name: val, + ); + }).toList(), + ), + ); + }), + ]); }), ], ), @@ -974,6 +1245,9 @@ class _RecordReferralDetailsPageState create: (value) => value.viewOnly, ) ?? false, + validators: [ + Validators.required, + ], ), _nameOfChildKey: FormControl( value: referralState.mapOrNull( @@ -1096,9 +1370,9 @@ class _RecordReferralDetailsPageState create: (value) => value.viewOnly, ) ?? false, - // validators: [ - // Validators.required, - // ], + validators: [ + Validators.required, + ], ), }); } diff --git a/packages/referral_reconciliation/lib/pages/project_facility/project_facility_selection.dart b/packages/referral_reconciliation/lib/pages/project_facility/project_facility_selection.dart index ee1f22aa3..820248256 100644 --- a/packages/referral_reconciliation/lib/pages/project_facility/project_facility_selection.dart +++ b/packages/referral_reconciliation/lib/pages/project_facility/project_facility_selection.dart @@ -1,10 +1,10 @@ import 'package:auto_route/auto_route.dart'; import 'package:collection/collection.dart'; -import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:flutter/material.dart'; import 'package:reactive_forms/reactive_forms.dart'; -import 'package:referral_reconciliation/blocs/app_localization.dart'; import 'package:referral_reconciliation/utils/constants.dart'; import 'package:referral_reconciliation/widgets/localized.dart'; @@ -72,14 +72,14 @@ class _ReferralReconProjectFacilitySelectionPageState child: Container( color: Colors.white, child: Padding( - padding: const EdgeInsets.only( - left: kPadding * 2, - right: kPadding * 2, + padding: EdgeInsets.only( + left: theme.spacerTheme.spacer2 * 2, + right: theme.spacerTheme.spacer2 * 2, ), child: Column( children: [ Padding( - padding: const EdgeInsets.all(kPadding), + padding: EdgeInsets.all(theme.spacerTheme.spacer2), child: Align( alignment: Alignment.topLeft, child: Text( @@ -91,13 +91,19 @@ class _ReferralReconProjectFacilitySelectionPageState ), ), ), - const DigitTextFormField( - suffix: Padding( - padding: EdgeInsets.all(8.0), - child: Icon(Icons.search), - ), - label: '', - formControlName: _facilityName, + ReactiveWrapperField( + formControlName: _facilityName, + builder: (field){ + return LabeledField( + label: '', + child: DigitSearchFormInput( + onChange: (val) => { + form.control(_facilityName).markAsTouched(), + form.control(_facilityName).value = val, + }, + initialValue: form.control(_facilityName).value ?? "", + ), + );} ), ], ), @@ -116,7 +122,7 @@ class _ReferralReconProjectFacilitySelectionPageState child: Container( margin: const EdgeInsets.only(left: 8, right: 8), decoration: BoxDecoration( - color: DigitTheme.instance.colors.alabasterWhite, + color: theme.colorTheme.paper.secondary, border: Border( top: index == 0 ? borderSide : BorderSide.none, bottom: (filteredProjectFacilities != null && @@ -134,14 +140,15 @@ class _ReferralReconProjectFacilitySelectionPageState Navigator.of(context).pop(projectFacility); }, child: Container( - margin: const EdgeInsets.only( - top: kPadding, - left: kPadding, - right: kPadding, + margin: EdgeInsets.only( + top: theme.spacerTheme.spacer2, + left: theme.spacerTheme.spacer2, + right: theme.spacerTheme.spacer2, ), decoration: BoxDecoration( - color: - DigitTheme.instance.colors.alabasterWhite, + color: Colors.white, + // color: + // DigitTheme.instance.colors.alabasterWhite, border: Border( bottom: BorderSide( // <--- left side @@ -151,10 +158,10 @@ class _ReferralReconProjectFacilitySelectionPageState ), ), child: Padding( - padding: const EdgeInsets.only( - left: kPadding * 2, - bottom: kPadding * 2, - top: kPadding * 2, + padding: EdgeInsets.only( + left: theme.spacerTheme.spacer2 * 2, + bottom: theme.spacerTheme.spacer2 * 2, + top: theme.spacerTheme.spacer2 * 2, ), child: Text(projectFacility != null ? localizations.translate( diff --git a/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart b/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart index f66076003..936238606 100644 --- a/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart +++ b/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart @@ -46,11 +46,11 @@ class _SearchReferralReconciliationsPageState searchReferralsBloc = SearchReferralsBloc( const SearchReferralsState(), referralReconDataRepository: - context.repository(context), + context.repository(context), ); context.read().add( - const DigitScannerEvent.handleScanner(), - ); + const DigitScannerEvent.handleScanner(), + ); super.initState(); } @@ -60,7 +60,7 @@ class _SearchReferralReconciliationsPageState return KeyboardVisibilityBuilder( builder: (context, isKeyboardVisible) => BlocProvider< - SearchReferralsBloc>( + SearchReferralsBloc>( create: (context) => searchReferralsBloc! ..add( const SearchReferralsClearEvent(), @@ -72,16 +72,16 @@ class _SearchReferralReconciliationsPageState context .read() .add(SearchReferralsEvent.searchByTag( - tag: scannerState.qrCodes.last, - )); + tag: scannerState.qrCodes.last, + )); } }, child: BlocProvider( create: (_) => ServiceBloc( - const ServiceEmptyState(), - serviceDataRepository: context.repository< - ServiceModel, ServiceSearchModel>(context), - ), + const ServiceEmptyState(), + serviceDataRepository: context.repository< + ServiceModel, ServiceSearchModel>(context), + ), child: BlocBuilder( builder: (context, searchState) { @@ -105,7 +105,7 @@ class _SearchReferralReconciliationsPageState .searchReferralsHeader, ), style: - theme.textTheme.displayMedium, + theme.textTheme.displayMedium, textAlign: TextAlign.left, ), ), @@ -119,7 +119,7 @@ class _SearchReferralReconciliationsPageState .referralSearchHintText, ), textCapitalization: - TextCapitalization.words, + TextCapitalization.words, onChanged: (value) { final bloc = context .read(); @@ -132,8 +132,8 @@ class _SearchReferralReconciliationsPageState } else { bloc.add( SearchReferralsByNameEvent( - searchText: value.trim(), - )); + searchText: value.trim(), + )); } }, ), @@ -143,8 +143,8 @@ class _SearchReferralReconciliationsPageState if (searchState.resultsNotFound) InfoCard( title: localizations.translate( - i18.referralReconciliation - .beneficiaryInfoTitle), + i18.referralReconciliation + .beneficiaryInfoTitle), type: InfoType.info, description: localizations.translate( i18.referralReconciliation @@ -157,9 +157,9 @@ class _SearchReferralReconciliationsPageState ), SliverList( delegate: SliverChildBuilderDelegate( - (ctx, index) { + (ctx, index) { final i = - searchState.referrals.elementAt(index); + searchState.referrals.elementAt(index); return Container( margin: EdgeInsets.only( @@ -168,21 +168,21 @@ class _SearchReferralReconciliationsPageState hfReferralModel: i, onOpenPressed: () { context.read().add( - ServiceSearchEvent( - serviceSearchModel: - ServiceSearchModel( - clientId: - i.clientReferenceId, - ), - ), - ); + ServiceSearchEvent( + serviceSearchModel: + ServiceSearchModel( + clientId: + i.clientReferenceId, + ), + ), + ); context.router.push( HFCreateReferralWrapperRoute( viewOnly: true, referralReconciliation: i, projectId: - ReferralReconSingleton() - .projectId, + ReferralReconSingleton() + .projectId, cycles: ReferralReconSingleton() .cycles, ), @@ -203,7 +203,7 @@ class _SearchReferralReconciliationsPageState child: Container( padding: - EdgeInsets.all(theme.spacerTheme.spacer2), + EdgeInsets.all(theme.spacerTheme.spacer2), child: Column( mainAxisSize: MainAxisSize.min, children: [ @@ -214,28 +214,28 @@ class _SearchReferralReconciliationsPageState VoidCallback? onPressed; onPressed = () { - FocusManager.instance.primaryFocus - ?.unfocus(); - final bloc = - context.read(); - router.push( - HFCreateReferralWrapperRoute( - viewOnly: false, - referralReconciliation: HFReferralModel( - clientReferenceId: IdGen.i.identifier, - name: state.searchQuery, - beneficiaryId: state.tag, - ), - projectId: - ReferralReconSingleton().projectId, - cycles: ReferralReconSingleton().cycles, - ), - ); - searchController.clear(); - bloc.add( - const SearchReferralsClearEvent(), - ); - }; + FocusManager.instance.primaryFocus + ?.unfocus(); + final bloc = + context.read(); + router.push( + HFCreateReferralWrapperRoute( + viewOnly: false, + referralReconciliation: HFReferralModel( + clientReferenceId: IdGen.i.identifier, + name: state.searchQuery, + beneficiaryId: state.tag, + ), + projectId: + ReferralReconSingleton().projectId, + cycles: ReferralReconSingleton().cycles, + ), + ); + searchController.clear(); + bloc.add( + const SearchReferralsClearEvent(), + ); + }; return Button( size: ButtonSize.large, label: localizations.translate( @@ -278,4 +278,4 @@ class _SearchReferralReconciliationsPageState ), ))); } -} +} \ No newline at end of file diff --git a/packages/referral_reconciliation/pubspec.yaml b/packages/referral_reconciliation/pubspec.yaml index fa36458be..f9ef6a58a 100644 --- a/packages/referral_reconciliation/pubspec.yaml +++ b/packages/referral_reconciliation/pubspec.yaml @@ -60,4 +60,5 @@ dev_dependencies: flutter: assets: - assets/images/ - - assets/icons/svg/ \ No newline at end of file + - assets/icons/svg/ + - assets/animated_json/ \ No newline at end of file From 13658fbb265147e2a0b7cfecb7a5cc3eb89c57b2 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Mon, 11 Nov 2024 16:35:54 +0530 Subject: [PATCH 128/241] merge conflict changes --- .../lib/pages/login.dart | 24 ------------------ .../pubspec.lock | 20 +++++++-------- packages/inventory_management/pubspec.lock | 25 ++++++++----------- 3 files changed, 21 insertions(+), 48 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/pages/login.dart b/apps/health_campaign_field_worker_app/lib/pages/login.dart index a697b7dfc..cb1277d20 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/login.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/login.dart @@ -271,27 +271,3 @@ PrivacyNoticeModel? convertToPrivacyPolicyModel(PrivacyPolicy? privacyPolicy) { .toList(), ); } - - -// convert to privacy notice model -PrivacyNoticeModel? convertToPrivacyPolicyModel(PrivacyPolicy? privacyPolicy) { - return PrivacyNoticeModel( - header: privacyPolicy?.header ?? '', - module: privacyPolicy?.module ?? '', - active: privacyPolicy?.active, - contents: privacyPolicy?.contents?.map((content) => ContentNoticeModel( - header: content.header, - descriptions: content.descriptions?.map((description) => DescriptionNoticeModel( - text: description.text, - type: description.type, - isBold: description.isBold, - subDescriptions: description.subDescriptions?.map((subDescription) => SubDescriptionNoticeModel( - text: subDescription.text, - type: subDescription.type, - isBold: subDescription.isBold, - isSpaceRequired: subDescription.isSpaceRequired, - )).toList(), - )).toList(), - )).toList(), - ); -} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index f395745bd..32dcb6977 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -441,9 +441,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../../packages/dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -521,15 +523,13 @@ packages: path: "../../packages/digit_dss" relative: true source: path - version: "1.0.1" + version: "1.0.2" digit_firebase_services: dependency: "direct main" description: - path: "packages/digit_firebase_services" - ref: checklist-tanishi - resolved-ref: a4fd63e10e76cec82675332689e344e309246e65 - url: "https://github.com/egovernments/health-campaign-field-worker-app" - source: git + path: "../../packages/digit_firebase_services" + relative: true + source: path version: "0.0.1" digit_location_tracker: dependency: "direct main" @@ -2397,5 +2397,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <4.0.0" + dart: ">=3.2.0 <=3.9.0" flutter: ">=3.16.0" diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index 8d4d079e1..5304512f7 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -421,26 +421,23 @@ packages: digit_components: dependency: "direct main" description: - name: digit_components - sha256: "07b585e5d8010639366da72a4a8b215ce9b8790c75b2162b66af3cea57ca35d9" - url: "https://pub.dev" - source: hosted + path: "../digit_components" + relative: true + source: path version: "1.0.2+1" digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "560b806cbb9f760ed956ecf2d01a8e5ea5640d8fca9ec1332ee15b34998d2e15" - url: "https://pub.dev" - source: hosted - version: "1.0.3+3" + path: "../digit_data_model" + relative: true + source: path + version: "1.0.4" digit_scanner: dependency: "direct main" description: - name: digit_scanner - sha256: "9862c4885465bb1942e36dc9b42596c201648db9b0f5ffb8ad768e2409fc2742" - url: "https://pub.dev" - source: hosted + path: "../digit_scanner" + relative: true + source: path version: "1.0.3+1" dio: dependency: transitive @@ -1447,5 +1444,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" + dart: ">=3.2.0 <4.0.0" flutter: ">=3.16.0" From 41d1600f5c03c7dcd84dcf3b617b99cd459bea7e Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Fri, 6 Sep 2024 15:29:32 +0530 Subject: [PATCH 129/241] Made changes in referral reconciliation(Changed the digit_component library to digit_ui_component library) --- .../assets/animated_json/alert.json | 1127 +++++++++++++++++ .../assets/animated_json/error.json | 728 +++++++++++ .../assets/animated_json/success.json | 917 ++++++++++++++ .../assets/animated_json/alert.json | 1127 +++++++++++++++++ .../assets/animated_json/error.json | 728 +++++++++++ .../assets/animated_json/success.json | 917 ++++++++++++++ .../lib/utils/date_utils.dart | 34 + 7 files changed, 5578 insertions(+) create mode 100644 apps/health_campaign_field_worker_app/assets/animated_json/alert.json create mode 100644 apps/health_campaign_field_worker_app/assets/animated_json/error.json create mode 100644 apps/health_campaign_field_worker_app/assets/animated_json/success.json create mode 100644 packages/referral_reconciliation/assets/animated_json/alert.json create mode 100644 packages/referral_reconciliation/assets/animated_json/error.json create mode 100644 packages/referral_reconciliation/assets/animated_json/success.json create mode 100644 packages/referral_reconciliation/lib/utils/date_utils.dart diff --git a/apps/health_campaign_field_worker_app/assets/animated_json/alert.json b/apps/health_campaign_field_worker_app/assets/animated_json/alert.json new file mode 100644 index 000000000..171b416cd --- /dev/null +++ b/apps/health_campaign_field_worker_app/assets/animated_json/alert.json @@ -0,0 +1,1127 @@ +{ + "nm": "48 - Warning", + "ddd": 0, + "h": 500, + "w": 500, + "meta": { + "g": "LottieFiles AE " + }, + "layers": [ + { + "ty": 3, + "nm": "48 - Warning", + "sr": 1, + "st": 0, + "op": 144, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 60, + 60, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 180, + 180, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 250.045, + 290.339, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 0, + "ix": 11 + } + }, + "ef": [], + "ind": 1 + }, + { + "ty": 4, + "nm": "Line", + "sr": 1, + "st": 0, + "op": 144, + "ip": 12, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + -1, + 21.25, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 12 + }, + { + "s": [ + 55.556, + 55.556, + 100 + ], + "t": 32 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 85.533, + 85.887, + 0 + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 180 + ], + "t": 12 + }, + { + "s": [ + 0 + ], + "t": 32 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Shape 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1, + 80 + ], + [ + -1, + -37.5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 2, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 28, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 100, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 0 + ], + "t": 22 + }, + { + "s": [ + 40 + ], + "t": 42 + } + ], + "ix": 1 + }, + "m": 1 + } + ], + "ind": 2, + "parent": 5 + }, + { + "ty": 4, + "nm": "Dot", + "sr": 1, + "st": 0, + "op": 144, + "ip": 12, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Shape 1", + "ix": 1, + "cix": 2, + "np": 4, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1, + 80 + ], + [ + -1, + -37.5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 0.1, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 0, + "k": 0, + "ix": 1 + }, + "m": 1 + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 2, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 33, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 3, + "parent": 2 + }, + { + "ty": 4, + "nm": "Tri Outlines", + "sr": 1, + "st": 0, + "op": 144, + "ip": 10, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 85.513, + 72.848, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 10 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 15 + } + ], + "ix": 6, + "x": "var $bm_rt;\nvar amp, freq, decay, n, t, v;\ntry {\n amp = $bm_div(effect('Scale - Overshoot')('ADBE Slider Control-0001'), 2.5), freq = $bm_div(effect('Scale - Bounce')('ADBE Slider Control-0001'), 20), decay = $bm_div(effect('Scale - Friction')('ADBE Slider Control-0001'), 20), n = 0, 0 < numKeys && (n = nearestKey(time).index, key(n).time > time && n--), t = 0 === n ? 0 : $bm_sub(time, key(n).time), $bm_rt = 0 < n ? (v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10))), $bm_sum(value, $bm_div($bm_mul($bm_mul($bm_div(v, 100), amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))))) : value;\n} catch (e$$4) {\n $bm_rt = value = value;\n}" + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 59.955, + 37.467, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [ + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Overshoot", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 10, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Bounce", + "ix": 2, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 35, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Friction", + "ix": 3, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 65, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + } + ], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Group 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + -3.315, + 5.634 + ], + [ + 0, + 0 + ], + [ + -3.267, + -5.554 + ], + [ + 0, + 0 + ], + [ + 6.537, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 3.268, + -5.554 + ], + [ + 0, + 0 + ], + [ + 3.315, + 5.634 + ], + [ + 0, + 0 + ], + [ + -6.536, + 0 + ] + ], + "v": [ + [ + -81.948, + 59.861 + ], + [ + -7.284, + -67.044 + ], + [ + 7.284, + -67.044 + ], + [ + 81.948, + 59.861 + ], + [ + 74.664, + 72.598 + ], + [ + -74.664, + 72.598 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 0.7255, + 0.098, + 0 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 85.513, + 72.848 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 4, + "parent": 1 + }, + { + "ty": 3, + "nm": "Tri", + "sr": 1, + "st": 0, + "op": 144, + "ip": 10, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 85.513, + 72.848, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 10 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 15 + } + ], + "ix": 6, + "x": "var $bm_rt;\nvar amp, freq, decay, n, t, v;\ntry {\n amp = $bm_div(effect('Scale - Overshoot')('ADBE Slider Control-0001'), 2.5), freq = $bm_div(effect('Scale - Bounce')('ADBE Slider Control-0001'), 20), decay = $bm_div(effect('Scale - Friction')('ADBE Slider Control-0001'), 20), n = 0, 0 < numKeys && (n = nearestKey(time).index, key(n).time > time && n--), t = 0 === n ? 0 : $bm_sub(time, key(n).time), $bm_rt = 0 < n ? (v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10))), $bm_sum(value, $bm_div($bm_mul($bm_mul($bm_div(v, 100), amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))))) : value;\n} catch (e$$4) {\n $bm_rt = value = value;\n}" + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 59.955, + 37.467, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [ + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Overshoot", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 10, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Bounce", + "ix": 2, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 35, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Friction", + "ix": 3, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 65, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + } + ], + "ind": 5, + "parent": 1 + }, + { + "ty": 1, + "nm": "Plate_white", + "sr": 1, + "st": 0, + "op": 144, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 250, + 250, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 250, + 250, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "sc": "#ffffff", + "sh": 500, + "sw": 500, + "ind": 6 + } + ], + "v": "5.5.7", + "fr": 48, + "op": 144, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/assets/animated_json/error.json b/apps/health_campaign_field_worker_app/assets/animated_json/error.json new file mode 100644 index 000000000..96b4f9626 --- /dev/null +++ b/apps/health_campaign_field_worker_app/assets/animated_json/error.json @@ -0,0 +1,728 @@ +{ + "nm": "ckeck", + "ddd": 0, + "h": 50, + "w": 50, + "meta": { + "g": "@lottiefiles/toolkit-js 0.33.2" + }, + "layers": [ + { + "ty": 4, + "nm": "! Outlines", + "sr": 1, + "st": 0, + "op": 213, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 2, + 12, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.653, + "y": -0.834 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 60 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 73 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.127, + "y": 1.695 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 83 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 90 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 25, + 25, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Group 1", + "ix": 1, + "cix": 2, + "np": 4, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 1.104 + ], + [ + -1.104, + 0 + ], + [ + 0, + -1.104 + ], + [ + 1.104, + 0 + ] + ], + "o": [ + [ + 0, + -1.104 + ], + [ + 1.104, + 0 + ], + [ + 0, + 1.104 + ], + [ + -1.104, + 0 + ] + ], + "v": [ + [ + -2, + 10 + ], + [ + 0, + 8 + ], + [ + 2, + 10 + ], + [ + 0, + 12 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 2", + "ix": 2, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1.036, + 5 + ], + [ + -2, + -6.625 + ], + [ + -2, + -12 + ], + [ + 2, + -12 + ], + [ + 2, + -6.625 + ], + [ + 1.052, + 5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "mm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Merge", + "nm": "Merge Paths 1", + "mm": 1 + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0.099, + 9.982 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 2.099, + 21.982 + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 10 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 12 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 14 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 16 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 18 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 20 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 22 + }, + { + "s": [ + 0 + ], + "t": 24 + } + ], + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 1 + }, + { + "ty": 4, + "nm": "Shape Layer 1", + "sr": 1, + "st": 0, + "op": 193, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 10, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.41, + "y": -0.602 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 60 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.436, + "y": 1.492 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 83 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 90 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 25, + 35, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Ellipse 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "el", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Ellipse", + "nm": "Ellipse Path 1", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 3 + }, + "s": { + "a": 0, + "k": [ + 40, + 40 + ], + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 2, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 100, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 0, + "k": 0, + "ix": 1 + }, + "m": 1 + } + ], + "ind": 2 + } + ], + "v": "5.6.5", + "fr": 60, + "op": 180, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/assets/animated_json/success.json b/apps/health_campaign_field_worker_app/assets/animated_json/success.json new file mode 100644 index 000000000..43192f708 --- /dev/null +++ b/apps/health_campaign_field_worker_app/assets/animated_json/success.json @@ -0,0 +1,917 @@ +{ + "nm": "sucess", + "ddd": 0, + "h": 120, + "w": 120, + "meta": { + "g": "LottieFiles AE 0.1.21" + }, + "layers": [ + { + "ty": 3, + "nm": "scale up null", + "sr": 1, + "st": 0, + "op": 300.00001221925, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0 + }, + "i": { + "x": 0.833, + "y": 1 + }, + "s": [ + 111, + 111, + 100 + ], + "t": 27 + }, + { + "o": { + "x": 0.167, + "y": 0 + }, + "i": { + "x": 0.833, + "y": 1 + }, + "s": [ + 101, + 101, + 100 + ], + "t": 36 + }, + { + "s": [ + 121, + 121, + 100 + ], + "t": 42.0000017106951 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 60, + 60, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 0, + "ix": 11 + } + }, + "ef": [], + "ind": 1 + }, + { + "ty": 4, + "nm": "spark", + "sr": 1, + "st": 35.0000014255792, + "op": 335.00001364483, + "ip": 35.0000014255792, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0.5, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Rectangle 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 1", + "d": 1, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 0, + -21 + ], + "t": 35, + "ti": [ + 0, + 1.5 + ], + "to": [ + 0, + -1.5 + ] + }, + { + "s": [ + 0, + -30 + ], + "t": 53.0000021587343 + } + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 4 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.976, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 2, + 0 + ], + "t": 35 + }, + { + "o": { + "x": 0.33299999999999996, + "y": 0 + }, + "i": { + "x": 0.15355432054499818, + "y": 0.9999999999999999 + }, + "s": [ + 2, + 8 + ], + "t": 42 + }, + { + "s": [ + 1.633, + 0 + ], + "t": 53.0000021587343 + } + ], + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + -8 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "rp", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Repeater", + "nm": "Repeater 1", + "ix": 2, + "m": 1, + "c": { + "a": 0, + "k": 8, + "ix": 1 + }, + "o": { + "a": 0, + "k": 0, + "ix": 2 + }, + "tr": { + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 45, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0 + }, + "so": { + "a": 0, + "k": 100, + "ix": 5 + }, + "eo": { + "a": 0, + "k": 100, + "ix": 6 + } + } + } + ], + "ind": 2, + "parent": 1 + }, + { + "ty": 4, + "nm": "check", + "sr": 1, + "st": 10.0000004073083, + "op": 310.000012626559, + "ip": 22.0000008960784, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 3.5, + 3.75 + ], + [ + -12.973, + 5.349 + ], + [ + -6.124, + -9.992 + ], + [ + 12.125, + -7.431 + ], + [ + 7.431, + 12.125 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -3.5, + -3.75 + ], + [ + 10.764, + -2.941 + ], + [ + 7.431, + 12.125 + ], + [ + -12.125, + 7.431 + ], + [ + -7.431, + -12.125 + ] + ], + "v": [ + [ + 15.25, + -9.688 + ], + [ + -5.75, + 10.062 + ], + [ + -16, + 0.25 + ], + [ + -6.777, + -24.849 + ], + [ + 21.955, + -13.456 + ], + [ + 13.456, + 21.955 + ], + [ + -21.955, + 13.456 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 1, + "k": [ + { + "o": { + "x": 0.714, + "y": 0 + }, + "i": { + "x": 0.351, + "y": 1 + }, + "s": [ + 100 + ], + "t": 10 + }, + { + "s": [ + 23 + ], + "t": 40.0000016292334 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.742, + "y": 0 + }, + "i": { + "x": 0.363, + "y": 1 + }, + "s": [ + 100 + ], + "t": 17 + }, + { + "s": [ + 0 + ], + "t": 45.0000018328876 + } + ], + "ix": 1 + }, + "m": 1 + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 4, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 3 + } + } + ], + "ind": 3, + "parent": 1 + }, + { + "ty": 4, + "nm": "circle", + "sr": 1, + "st": 0, + "op": 300.00001221925, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + -14.221, + 0 + ], + [ + 0, + -14.221 + ], + [ + 14.221, + 0 + ], + [ + 0, + 14.221 + ] + ], + "o": [ + [ + 14.221, + 0 + ], + [ + 0, + 14.221 + ], + [ + -14.221, + 0 + ], + [ + 0, + -14.221 + ] + ], + "v": [ + [ + 0, + -25.75 + ], + [ + 25.75, + 0 + ], + [ + 0, + 25.75 + ], + [ + -25.75, + 0 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 2, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 3 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 3, + "e": { + "a": 1, + "k": [ + { + "o": { + "x": 0.714, + "y": 0 + }, + "i": { + "x": 0.351, + "y": 1 + }, + "s": [ + 100 + ], + "t": 0 + }, + { + "s": [ + 100 + ], + "t": 30.0000012219251 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.742, + "y": 0 + }, + "i": { + "x": 0.363, + "y": 1 + }, + "s": [ + 100 + ], + "t": 7 + }, + { + "s": [ + 0 + ], + "t": 33.0000013441176 + } + ], + "ix": 1 + }, + "m": 1 + } + ], + "ind": 4, + "parent": 1 + } + ], + "v": "5.5.7", + "fr": 29.9700012207031, + "op": 60.0000024438501, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/packages/referral_reconciliation/assets/animated_json/alert.json b/packages/referral_reconciliation/assets/animated_json/alert.json new file mode 100644 index 000000000..171b416cd --- /dev/null +++ b/packages/referral_reconciliation/assets/animated_json/alert.json @@ -0,0 +1,1127 @@ +{ + "nm": "48 - Warning", + "ddd": 0, + "h": 500, + "w": 500, + "meta": { + "g": "LottieFiles AE " + }, + "layers": [ + { + "ty": 3, + "nm": "48 - Warning", + "sr": 1, + "st": 0, + "op": 144, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 60, + 60, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 180, + 180, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 250.045, + 290.339, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 0, + "ix": 11 + } + }, + "ef": [], + "ind": 1 + }, + { + "ty": 4, + "nm": "Line", + "sr": 1, + "st": 0, + "op": 144, + "ip": 12, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + -1, + 21.25, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 12 + }, + { + "s": [ + 55.556, + 55.556, + 100 + ], + "t": 32 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 85.533, + 85.887, + 0 + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 180 + ], + "t": 12 + }, + { + "s": [ + 0 + ], + "t": 32 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Shape 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1, + 80 + ], + [ + -1, + -37.5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 2, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 28, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 100, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 0 + ], + "t": 22 + }, + { + "s": [ + 40 + ], + "t": 42 + } + ], + "ix": 1 + }, + "m": 1 + } + ], + "ind": 2, + "parent": 5 + }, + { + "ty": 4, + "nm": "Dot", + "sr": 1, + "st": 0, + "op": 144, + "ip": 12, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Shape 1", + "ix": 1, + "cix": 2, + "np": 4, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1, + 80 + ], + [ + -1, + -37.5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 0.1, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 0, + "k": 0, + "ix": 1 + }, + "m": 1 + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 2, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 33, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 3, + "parent": 2 + }, + { + "ty": 4, + "nm": "Tri Outlines", + "sr": 1, + "st": 0, + "op": 144, + "ip": 10, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 85.513, + 72.848, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 10 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 15 + } + ], + "ix": 6, + "x": "var $bm_rt;\nvar amp, freq, decay, n, t, v;\ntry {\n amp = $bm_div(effect('Scale - Overshoot')('ADBE Slider Control-0001'), 2.5), freq = $bm_div(effect('Scale - Bounce')('ADBE Slider Control-0001'), 20), decay = $bm_div(effect('Scale - Friction')('ADBE Slider Control-0001'), 20), n = 0, 0 < numKeys && (n = nearestKey(time).index, key(n).time > time && n--), t = 0 === n ? 0 : $bm_sub(time, key(n).time), $bm_rt = 0 < n ? (v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10))), $bm_sum(value, $bm_div($bm_mul($bm_mul($bm_div(v, 100), amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))))) : value;\n} catch (e$$4) {\n $bm_rt = value = value;\n}" + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 59.955, + 37.467, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [ + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Overshoot", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 10, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Bounce", + "ix": 2, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 35, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Friction", + "ix": 3, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 65, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + } + ], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Group 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + -3.315, + 5.634 + ], + [ + 0, + 0 + ], + [ + -3.267, + -5.554 + ], + [ + 0, + 0 + ], + [ + 6.537, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 3.268, + -5.554 + ], + [ + 0, + 0 + ], + [ + 3.315, + 5.634 + ], + [ + 0, + 0 + ], + [ + -6.536, + 0 + ] + ], + "v": [ + [ + -81.948, + 59.861 + ], + [ + -7.284, + -67.044 + ], + [ + 7.284, + -67.044 + ], + [ + 81.948, + 59.861 + ], + [ + 74.664, + 72.598 + ], + [ + -74.664, + 72.598 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 0.7255, + 0.098, + 0 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 85.513, + 72.848 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 4, + "parent": 1 + }, + { + "ty": 3, + "nm": "Tri", + "sr": 1, + "st": 0, + "op": 144, + "ip": 10, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 85.513, + 72.848, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 10 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 15 + } + ], + "ix": 6, + "x": "var $bm_rt;\nvar amp, freq, decay, n, t, v;\ntry {\n amp = $bm_div(effect('Scale - Overshoot')('ADBE Slider Control-0001'), 2.5), freq = $bm_div(effect('Scale - Bounce')('ADBE Slider Control-0001'), 20), decay = $bm_div(effect('Scale - Friction')('ADBE Slider Control-0001'), 20), n = 0, 0 < numKeys && (n = nearestKey(time).index, key(n).time > time && n--), t = 0 === n ? 0 : $bm_sub(time, key(n).time), $bm_rt = 0 < n ? (v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10))), $bm_sum(value, $bm_div($bm_mul($bm_mul($bm_div(v, 100), amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))))) : value;\n} catch (e$$4) {\n $bm_rt = value = value;\n}" + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 59.955, + 37.467, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [ + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Overshoot", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 10, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Bounce", + "ix": 2, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 35, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Friction", + "ix": 3, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 65, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + } + ], + "ind": 5, + "parent": 1 + }, + { + "ty": 1, + "nm": "Plate_white", + "sr": 1, + "st": 0, + "op": 144, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 250, + 250, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 250, + 250, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "sc": "#ffffff", + "sh": 500, + "sw": 500, + "ind": 6 + } + ], + "v": "5.5.7", + "fr": 48, + "op": 144, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/packages/referral_reconciliation/assets/animated_json/error.json b/packages/referral_reconciliation/assets/animated_json/error.json new file mode 100644 index 000000000..96b4f9626 --- /dev/null +++ b/packages/referral_reconciliation/assets/animated_json/error.json @@ -0,0 +1,728 @@ +{ + "nm": "ckeck", + "ddd": 0, + "h": 50, + "w": 50, + "meta": { + "g": "@lottiefiles/toolkit-js 0.33.2" + }, + "layers": [ + { + "ty": 4, + "nm": "! Outlines", + "sr": 1, + "st": 0, + "op": 213, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 2, + 12, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.653, + "y": -0.834 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 60 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 73 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.127, + "y": 1.695 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 83 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 90 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 25, + 25, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Group 1", + "ix": 1, + "cix": 2, + "np": 4, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 1.104 + ], + [ + -1.104, + 0 + ], + [ + 0, + -1.104 + ], + [ + 1.104, + 0 + ] + ], + "o": [ + [ + 0, + -1.104 + ], + [ + 1.104, + 0 + ], + [ + 0, + 1.104 + ], + [ + -1.104, + 0 + ] + ], + "v": [ + [ + -2, + 10 + ], + [ + 0, + 8 + ], + [ + 2, + 10 + ], + [ + 0, + 12 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 2", + "ix": 2, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1.036, + 5 + ], + [ + -2, + -6.625 + ], + [ + -2, + -12 + ], + [ + 2, + -12 + ], + [ + 2, + -6.625 + ], + [ + 1.052, + 5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "mm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Merge", + "nm": "Merge Paths 1", + "mm": 1 + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0.099, + 9.982 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 2.099, + 21.982 + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 10 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 12 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 14 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 16 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 18 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 20 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 22 + }, + { + "s": [ + 0 + ], + "t": 24 + } + ], + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 1 + }, + { + "ty": 4, + "nm": "Shape Layer 1", + "sr": 1, + "st": 0, + "op": 193, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 10, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.41, + "y": -0.602 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 60 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.436, + "y": 1.492 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 83 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 90 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 25, + 35, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Ellipse 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "el", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Ellipse", + "nm": "Ellipse Path 1", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 3 + }, + "s": { + "a": 0, + "k": [ + 40, + 40 + ], + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 2, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 100, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 0, + "k": 0, + "ix": 1 + }, + "m": 1 + } + ], + "ind": 2 + } + ], + "v": "5.6.5", + "fr": 60, + "op": 180, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/packages/referral_reconciliation/assets/animated_json/success.json b/packages/referral_reconciliation/assets/animated_json/success.json new file mode 100644 index 000000000..43192f708 --- /dev/null +++ b/packages/referral_reconciliation/assets/animated_json/success.json @@ -0,0 +1,917 @@ +{ + "nm": "sucess", + "ddd": 0, + "h": 120, + "w": 120, + "meta": { + "g": "LottieFiles AE 0.1.21" + }, + "layers": [ + { + "ty": 3, + "nm": "scale up null", + "sr": 1, + "st": 0, + "op": 300.00001221925, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0 + }, + "i": { + "x": 0.833, + "y": 1 + }, + "s": [ + 111, + 111, + 100 + ], + "t": 27 + }, + { + "o": { + "x": 0.167, + "y": 0 + }, + "i": { + "x": 0.833, + "y": 1 + }, + "s": [ + 101, + 101, + 100 + ], + "t": 36 + }, + { + "s": [ + 121, + 121, + 100 + ], + "t": 42.0000017106951 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 60, + 60, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 0, + "ix": 11 + } + }, + "ef": [], + "ind": 1 + }, + { + "ty": 4, + "nm": "spark", + "sr": 1, + "st": 35.0000014255792, + "op": 335.00001364483, + "ip": 35.0000014255792, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0.5, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Rectangle 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 1", + "d": 1, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 0, + -21 + ], + "t": 35, + "ti": [ + 0, + 1.5 + ], + "to": [ + 0, + -1.5 + ] + }, + { + "s": [ + 0, + -30 + ], + "t": 53.0000021587343 + } + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 4 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.976, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 2, + 0 + ], + "t": 35 + }, + { + "o": { + "x": 0.33299999999999996, + "y": 0 + }, + "i": { + "x": 0.15355432054499818, + "y": 0.9999999999999999 + }, + "s": [ + 2, + 8 + ], + "t": 42 + }, + { + "s": [ + 1.633, + 0 + ], + "t": 53.0000021587343 + } + ], + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + -8 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "rp", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Repeater", + "nm": "Repeater 1", + "ix": 2, + "m": 1, + "c": { + "a": 0, + "k": 8, + "ix": 1 + }, + "o": { + "a": 0, + "k": 0, + "ix": 2 + }, + "tr": { + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 45, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0 + }, + "so": { + "a": 0, + "k": 100, + "ix": 5 + }, + "eo": { + "a": 0, + "k": 100, + "ix": 6 + } + } + } + ], + "ind": 2, + "parent": 1 + }, + { + "ty": 4, + "nm": "check", + "sr": 1, + "st": 10.0000004073083, + "op": 310.000012626559, + "ip": 22.0000008960784, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 3.5, + 3.75 + ], + [ + -12.973, + 5.349 + ], + [ + -6.124, + -9.992 + ], + [ + 12.125, + -7.431 + ], + [ + 7.431, + 12.125 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -3.5, + -3.75 + ], + [ + 10.764, + -2.941 + ], + [ + 7.431, + 12.125 + ], + [ + -12.125, + 7.431 + ], + [ + -7.431, + -12.125 + ] + ], + "v": [ + [ + 15.25, + -9.688 + ], + [ + -5.75, + 10.062 + ], + [ + -16, + 0.25 + ], + [ + -6.777, + -24.849 + ], + [ + 21.955, + -13.456 + ], + [ + 13.456, + 21.955 + ], + [ + -21.955, + 13.456 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 1, + "k": [ + { + "o": { + "x": 0.714, + "y": 0 + }, + "i": { + "x": 0.351, + "y": 1 + }, + "s": [ + 100 + ], + "t": 10 + }, + { + "s": [ + 23 + ], + "t": 40.0000016292334 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.742, + "y": 0 + }, + "i": { + "x": 0.363, + "y": 1 + }, + "s": [ + 100 + ], + "t": 17 + }, + { + "s": [ + 0 + ], + "t": 45.0000018328876 + } + ], + "ix": 1 + }, + "m": 1 + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 4, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 3 + } + } + ], + "ind": 3, + "parent": 1 + }, + { + "ty": 4, + "nm": "circle", + "sr": 1, + "st": 0, + "op": 300.00001221925, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + -14.221, + 0 + ], + [ + 0, + -14.221 + ], + [ + 14.221, + 0 + ], + [ + 0, + 14.221 + ] + ], + "o": [ + [ + 14.221, + 0 + ], + [ + 0, + 14.221 + ], + [ + -14.221, + 0 + ], + [ + 0, + -14.221 + ] + ], + "v": [ + [ + 0, + -25.75 + ], + [ + 25.75, + 0 + ], + [ + 0, + 25.75 + ], + [ + -25.75, + 0 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 2, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 3 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 3, + "e": { + "a": 1, + "k": [ + { + "o": { + "x": 0.714, + "y": 0 + }, + "i": { + "x": 0.351, + "y": 1 + }, + "s": [ + 100 + ], + "t": 0 + }, + { + "s": [ + 100 + ], + "t": 30.0000012219251 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.742, + "y": 0 + }, + "i": { + "x": 0.363, + "y": 1 + }, + "s": [ + 100 + ], + "t": 7 + }, + { + "s": [ + 0 + ], + "t": 33.0000013441176 + } + ], + "ix": 1 + }, + "m": 1 + } + ], + "ind": 4, + "parent": 1 + } + ], + "v": "5.5.7", + "fr": 29.9700012207031, + "op": 60.0000024438501, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/packages/referral_reconciliation/lib/utils/date_utils.dart b/packages/referral_reconciliation/lib/utils/date_utils.dart new file mode 100644 index 000000000..6062af222 --- /dev/null +++ b/packages/referral_reconciliation/lib/utils/date_utils.dart @@ -0,0 +1,34 @@ +import 'package:intl/intl.dart'; +import 'package:flutter/foundation.dart'; + +class DigitDateUtils { + static String getDateString(DateTime date) { + final DateFormat formatter = DateFormat('yyyy-MM-dd'); + return formatter.format(date); + } + + // Function to parse the provided date string and return a DateTime object. + static DateTime? getFormattedDateToDateTime(String date) { + try { + DateFormat inputFormat; + inputFormat = date.contains('-') + ? DateFormat('dd-MM-yyyy') + : DateFormat('dd/MM/yyyy'); + DateTime inputDate = inputFormat.parse(date); + + return inputDate; + } on Exception catch (e) { + if (kDebugMode) { + print(e); + } + + return null; + } + } + + // Function to get a formatted date string from the provided timestamp in milliseconds. + static String getDateFromTimestamp(int timestamp, {String? dateFormat}) { + DateTime date = DateTime.fromMillisecondsSinceEpoch(timestamp); + return DateFormat(dateFormat ?? "dd/MM/yyyy").format(date); + } +} From 52e4c9463e6b9a52d10ec770e398633096bf0559 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Mon, 9 Sep 2024 11:28:31 +0530 Subject: [PATCH 130/241] Changes in radiolist button --- .../record_referral_details.dart | 97 +++++++++++-------- 1 file changed, 54 insertions(+), 43 deletions(-) diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart index f6ccf2630..8ec9b8d92 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart @@ -838,18 +838,15 @@ class _RecordReferralDetailsPageState form .control( _cycleKey) - .value = val.name, + .value = val.code, }, selectedOption: widget .cycles - .asMap() - .entries .map((item) => DropdownItem( name: - 'Cycle ${item.value}', - code: item.key - .toString(), + '${localizations.translate(i18.referralReconciliation.cycle) } $item', + code: item.toString(), )) .firstWhere( (item) => @@ -866,15 +863,12 @@ class _RecordReferralDetailsPageState errorMessage: field.errorText, items: widget.cycles - .asMap() - .entries .map( (item) => DropdownItem( - name: - 'Cycle ${item.value}', - code: item.key - .toString(), + name: + '${localizations.translate(i18.referralReconciliation.cycle) } $item', + code: item.toString(), ), ) .toList(), @@ -1088,21 +1082,17 @@ class _RecordReferralDetailsPageState form .control( _genderKey) - .value = val.name, + .value = val.code, }, errorMessage: field.errorText, selectedOption: ReferralReconSingleton() .genderOptions - .asMap() - .entries .map((item) => DropdownItem( - name: item - .value, + name: localizations.translate(item), code: item - .key .toString(), )) .firstWhere( @@ -1122,15 +1112,11 @@ class _RecordReferralDetailsPageState items: ReferralReconSingleton() .genderOptions - .asMap() - .entries .map( (item) => DropdownItem( - name: item - .value, + name: localizations.translate(item), code: item - .key .toString(), ), ) @@ -1153,7 +1139,7 @@ class _RecordReferralDetailsPageState return DigitCard( cardType: CardType.primary, children: [ - ReactiveWrapperField( + ReactiveWrapperField( formControlName: _referralReason, validationMessages: { 'required': (_) => @@ -1182,24 +1168,21 @@ class _RecordReferralDetailsPageState form .control( _referralReason) - .value = val.name; - selectedReasonIndex = - val.code; + .value = ReferralReasonModel(code: val.code, value: val.name); }, - groupValue: selectedReasonIndex, + groupValue: form + .control( + _referralReason) + .value?.code ?? "", errorMessage: field.errorText, radioButtons: ReferralReconSingleton() .referralReasons - .asMap() - .entries - .map((entry) { - int index = entry.key; - String val = entry.value; + .map((r) { return RadioButtonModel( - code: index.toString(), + code: r.toString().toUpperCase(), // Use the index as the code - name: val, + name: localizations.translate(r.toString().toUpperCase()), ); }).toList(), ), @@ -1359,21 +1342,49 @@ class _RecordReferralDetailsPageState ] : [Validators.required], ), - _referralReason: FormControl( + _referralReason: FormControl( value: referralState.mapOrNull( - create: (value) => - value.viewOnly && value.hfReferralModel?.symptom != null - ? value.hfReferralModel?.symptom - : null, + create: (value) { + if (value.viewOnly && value.hfReferralModel?.symptom != null) { + return ReferralReasonModel( + code: value.hfReferralModel?.symptom ?? '', + value: value.hfReferralModel?.symptom ?? '', + ); + } + return null; + }, ), disabled: referralState.mapOrNull( - create: (value) => value.viewOnly, - ) ?? - false, + create: (value) => value.viewOnly, + ) ?? false, validators: [ Validators.required, ], ), + + // _referralReason: FormControl( + // value: referralState.mapOrNull( + // create: (value) => + // value.viewOnly && value.hfReferralModel?.symptom != null + // ? value.hfReferralModel?.symptom + // : null, + // ), + // disabled: referralState.mapOrNull( + // create: (value) => value.viewOnly, + // ) ?? + // false, + // validators: [ + // Validators.required, + // ], + // ), }); } } + +class ReferralReasonModel { + final String code; + final String value; + + ReferralReasonModel({required this.code, required this.value}); +} + From f50ede5ff7d3d32d1a9ea61bea46589e9d67258c Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Tue, 10 Sep 2024 10:23:39 +0530 Subject: [PATCH 131/241] Fixed button issues and changed search bar component --- .../lib/utils/utils.dart | 1 + packages/attendance_management/pubspec.yaml | 1 + .../lib/pages/acknowledgement.dart | 104 ++++++------ .../reason_checklist_preview.dart | 4 + .../record_reason_checklist.dart | 111 ++++++------ .../record_referral_details.dart | 158 ++++++++---------- .../search_referral_reconciliations.dart | 5 +- 7 files changed, 176 insertions(+), 208 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/utils/utils.dart b/apps/health_campaign_field_worker_app/lib/utils/utils.dart index c0ee4066e..6b5d19fc3 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/utils.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/utils.dart @@ -424,6 +424,7 @@ int getSyncCount(List oplogs) { case DataModelType.referral: case DataModelType.hFReferral: case DataModelType.attendance: + case DataModelType.service: return true; default: return false; diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index 76f8fe39d..a4951a968 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -12,6 +12,7 @@ dependencies: flutter: sdk: flutter digit_components: ^1.0.1+1 + digit_ui_components: 0.0.3-beta flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 diff --git a/packages/referral_reconciliation/lib/pages/acknowledgement.dart b/packages/referral_reconciliation/lib/pages/acknowledgement.dart index 56b85dec6..4a0906556 100644 --- a/packages/referral_reconciliation/lib/pages/acknowledgement.dart +++ b/packages/referral_reconciliation/lib/pages/acknowledgement.dart @@ -1,6 +1,5 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_ui_components/digit_components.dart'; -import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/molecules/panel_cards.dart'; import 'package:flutter/material.dart'; @@ -35,68 +34,59 @@ class _AcknowledgementPageState final theme = Theme.of(context); return Scaffold( - body: DigitCard( - cardType: CardType.primary, - children: [ - PanelCard( - type: PanelType.success, - title: widget.label ?? - localizations.translate( - i18.acknowledgementSuccess.acknowledgementLabelText, - ), - description: widget.description ?? - localizations.translate( - i18.acknowledgementSuccess.acknowledgementDescriptionText, + body: PanelCard( + type: PanelType.success, + title: widget.label ?? + localizations.translate( + i18.acknowledgementSuccess.acknowledgementLabelText, + ), + description: widget.description ?? + localizations.translate( + i18.acknowledgementSuccess.acknowledgementDescriptionText, + ), + actions: [ + Button( + label: localizations.translate(i18.acknowledgementSuccess.actionLabelText), + onPressed: () { + context.router.popUntilRoot(); + }, + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + ) + ] ), - actions: [ - Button( - label: localizations.translate(i18.acknowledgementSuccess.actionLabelText), - onPressed: () { - context.router.popUntilRoot(); - }, - type: ButtonType.primary, - size: ButtonSize.large, - mainAxisSize: MainAxisSize.max, - ) - ] - ),] - ), bottomNavigationBar: Offstage( offstage: !widget.isDataRecordSuccess, // Show the bottom navigation bar if `isDataRecordSuccess` is true child: SizedBox( height: 150, - child: DigitCard( - cardType: CardType.primary, - margin: EdgeInsets.fromLTRB(0, theme.spacerTheme.spacer2, 0, 0), - padding: EdgeInsets.fromLTRB(theme.spacerTheme.spacer2, 0, theme.spacerTheme.spacer2, 0), - children: [Column( - children: [ - Button( - size: ButtonSize.large, - type: ButtonType.primary, - mainAxisSize: MainAxisSize.max, - label: localizations - .translate(i18.acknowledgementSuccess.goToHome), - onPressed: () { - context.router.popUntilRoot(); - }, - ), - const SizedBox( - height: 12, - ), - Button( - size: ButtonSize.large, - type: ButtonType.secondary, - mainAxisSize: MainAxisSize.max, - onPressed: () { - context.router.popUntilRoot(); - }, - label: localizations - .translate(i18.acknowledgementSuccess.downloadmoredata), - ), - ], - ),] + child: Column( + children: [ + Button( + size: ButtonSize.large, + type: ButtonType.primary, + mainAxisSize: MainAxisSize.max, + label: localizations + .translate(i18.acknowledgementSuccess.goToHome), + onPressed: () { + context.router.popUntilRoot(); + }, + ), + const SizedBox( + height: 12, + ), + Button( + size: ButtonSize.large, + type: ButtonType.secondary, + mainAxisSize: MainAxisSize.max, + onPressed: () { + context.router.popUntilRoot(); + }, + label: localizations + .translate(i18.acknowledgementSuccess.downloadmoredata), + ), + ], ), ), ), diff --git a/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart b/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart index af242cfa3..b1284e6e4 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart @@ -45,6 +45,7 @@ class _ReferralReasonChecklistPreviewPageState return selectedService != null ? DigitCard( cardType: CardType.primary, + padding: EdgeInsets.all(theme.spacerTheme.spacer2), children: [ Button( size: ButtonSize.large, @@ -54,6 +55,8 @@ class _ReferralReasonChecklistPreviewPageState context.read().add( ServiceResetEvent(serviceList: serviceList), ); + context.router.popUntil((route) => route.settings.name == 'SearchReferralReconciliationsRoute'); + context.router.maybePop(); }, type: ButtonType.primary,)]) : const Offstage(); }, @@ -71,6 +74,7 @@ class _ReferralReasonChecklistPreviewPageState children: [ ...value1.map((e) => e.serviceDefId != null ? DigitCard( + margin: EdgeInsets.all(theme.spacerTheme.spacer2), cardType: CardType.primary, children: [Column( mainAxisAlignment: diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart index 63062ca02..8b9374ecf 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart @@ -90,10 +90,10 @@ class _ReferralReasonChecklistPageState enableFixedButton: true, footer: DigitCard( cardType: CardType.primary, - margin: EdgeInsets.all(theme.spacerTheme.spacer2), padding: EdgeInsets.all(theme.spacerTheme.spacer2), - children: [Button( + children: [ + Button( size: ButtonSize.large, label: localizations.translate(i18.common.coreCommonSubmit), type: ButtonType.primary, @@ -141,12 +141,6 @@ class _ReferralReasonChecklistPageState description: localizations.translate( i18.checklist.checklistDialogDescription, ), - onCrossTap: () { - Navigator.of( - context, - rootNavigator: true, - ).pop(false); - }, actions: [ Button( label: localizations.translate( @@ -482,58 +476,58 @@ class _ReferralReasonChecklistPageState children: [ BlocBuilder( builder: (context, state) { - return RadioGroup.builder( - groupValue: controller[index].text.trim(), - onChanged: (value) { - context.read().add( - ServiceSurveyFormEvent( - value: Random().nextInt(100).toString(), - submitTriggered: submitTriggered, - ), - ); - setState(() { - // Clear child controllers and update visibility - for (final matchingChildItem in childItems) { - final childIndex = - initialAttributes?.indexOf(matchingChildItem); - if (childIndex != null) { - controller[childIndex].clear(); - visibleChecklistIndexes - .removeWhere((v) => v == childIndex); - } - } + return Align( + alignment: Alignment.topLeft, + child: Padding( + padding: EdgeInsets.only(left: theme.spacerTheme.spacer2), + child: RadioList( + radioButtons: item.values != null + ? item.values! + .where((e) => e != i18.checklist.notSelectedKey) + .map((e) => RadioButtonModel( + code: e, + name: localizations.translate('CORE_COMMON_${e.trim().toUpperCase()}'), + )) + .toList() + : [], + groupValue: controller[index].text.trim(), + onChanged: (selectedValue) { + context.read().add( + ServiceSurveyFormEvent( + value: Random().nextInt(100).toString(), + submitTriggered: submitTriggered, + ), + ); + setState(() { + // Clear child controllers and update visibility + for (final matchingChildItem in childItems) { + final childIndex = initialAttributes?.indexOf(matchingChildItem); + if (childIndex != null) { + controller[childIndex].clear(); + visibleChecklistIndexes.removeWhere((v) => v == childIndex); + } + } - // Update the current controller's value - controller[index].value = - TextEditingController.fromValue( + // Update the current controller's value + controller[index].value = TextEditingController.fromValue( TextEditingValue( - text: value!, + text: selectedValue.code, ), ).value; - if (excludedIndexes.isNotEmpty) { - for (int i = 0; i < excludedIndexes.length; i++) { - // Clear excluded child controllers - controller[excludedIndexes[i]].value = - TextEditingController.fromValue( + if (excludedIndexes.isNotEmpty) { + for (int i = 0; i < excludedIndexes.length; i++) { + // Clear excluded child controllers + controller[excludedIndexes[i]].value = TextEditingController.fromValue( const TextEditingValue( text: '', ), ).value; - } - } - - // Remove corresponding controllers based on the removed attributes - }); - }, - items: item.values != null - ? item.values! - .where((e) => e != i18.checklist.notSelectedKey) - .toList() - : [], - itemBuilder: (item) => RadioButtonBuilder( - localizations.translate( - 'CORE_COMMON_${item.trim().toUpperCase()}', + } + } + }); + }, + isDisabled: false, // Set this based on your logic ), ), ); @@ -549,12 +543,15 @@ class _ReferralReasonChecklistPageState offstage: !hasError, child: Align( alignment: Alignment.centerLeft, - child: Text( - localizations.translate( - i18.common.corecommonRequired, - ), - style: TextStyle( - color: theme.colorScheme.error, + child: Padding( + padding: EdgeInsets.only(left: theme.spacerTheme.spacer4,bottom: theme.spacerTheme.spacer3), + child: Text( + localizations.translate( + i18.common.corecommonRequired, + ), + style: TextStyle( + color: theme.colorScheme.error, + ), ), ), ), diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart index 8ec9b8d92..6311d4f06 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart @@ -105,13 +105,8 @@ class _RecordReferralDetailsPageState builder: (context, serviceState) { return serviceState.maybeWhen( orElse: () => DigitCard( - margin: EdgeInsets.fromLTRB( - 0, theme.spacerTheme.spacer2, 0, 0), - padding: EdgeInsets.fromLTRB( - theme.spacerTheme.spacer2, - 0, - theme.spacerTheme.spacer2, - 0), + padding: EdgeInsets.all( + theme.spacerTheme.spacer2), cardType: CardType.primary, children: [ ValueListenableBuilder( @@ -431,10 +426,7 @@ class _RecordReferralDetailsPageState ]), serviceSearch: (value1, value2, value3) { return DigitCard( - margin: EdgeInsets.all( - theme.spacerTheme.spacer2), - padding: EdgeInsets.all( - theme.spacerTheme.spacer2), + padding: EdgeInsets.all(theme.spacerTheme.spacer2), cardType: CardType.primary, children: [ ValueListenableBuilder( @@ -468,7 +460,7 @@ class _RecordReferralDetailsPageState .control(_cycleKey) .setErrors( {'': true}); - } else if (form + } if (form .control(_genderKey) .value == null) { @@ -850,7 +842,7 @@ class _RecordReferralDetailsPageState )) .firstWhere( (item) => - item.name == + item.code == form .control( _cycleKey) @@ -1097,7 +1089,7 @@ class _RecordReferralDetailsPageState )) .firstWhere( (item) => - item.name == + item.code == form .control( _genderKey) @@ -1139,55 +1131,59 @@ class _RecordReferralDetailsPageState return DigitCard( cardType: CardType.primary, children: [ - ReactiveWrapperField( - formControlName: _referralReason, - validationMessages: { - 'required': (_) => - localizations.translate( - i18.common - .corecommonRequired, + SizedBox( + width: double.infinity, + child: ReactiveWrapperField( + formControlName: _referralReason, + validationMessages: { + 'required': (_) => + localizations.translate( + i18.common + .corecommonRequired, + ), + }, + showErrors: (control) => + control.invalid && + control.touched, + // Ensures error is shown if invalid and touched + builder: (field) { + return LabeledField( + isRequired: true, + label: localizations.translate( + i18.referralReconciliation + .reasonForReferralHeader, ), - }, - showErrors: (control) => - control.invalid && - control.touched, - // Ensures error is shown if invalid and touched - builder: (field) { - return LabeledField( - isRequired: true, - label: localizations.translate( - i18.referralReconciliation - .reasonForReferralHeader, - ), - child: RadioList( - onChanged: (val) { - form - .control( - _referralReason) - .markAsTouched(); - form + child: RadioList( + readOnly: viewOnly, + onChanged: (val) { + form + .control( + _referralReason) + .markAsTouched(); + form + .control( + _referralReason) + .value = val.code; + }, + groupValue: form .control( - _referralReason) - .value = ReferralReasonModel(code: val.code, value: val.name); - }, - groupValue: form - .control( - _referralReason) - .value?.code ?? "", - errorMessage: field.errorText, - radioButtons: - ReferralReconSingleton() - .referralReasons - .map((r) { - return RadioButtonModel( - code: r.toString().toUpperCase(), - // Use the index as the code - name: localizations.translate(r.toString().toUpperCase()), - ); - }).toList(), - ), - ); - }), + _referralReason) + .value ?? "", + errorMessage: field.errorText, + radioButtons: + ReferralReconSingleton() + .referralReasons + .map((r) { + return RadioButtonModel( + code: r.toString().toUpperCase(), + // Use the index as the code + name: localizations.translate(r.toString().toUpperCase()), + ); + }).toList(), + ), + ); + }), + ), ]); }), ], @@ -1342,49 +1338,29 @@ class _RecordReferralDetailsPageState ] : [Validators.required], ), - _referralReason: FormControl( + _referralReason: FormControl( value: referralState.mapOrNull( - create: (value) { - if (value.viewOnly && value.hfReferralModel?.symptom != null) { - return ReferralReasonModel( - code: value.hfReferralModel?.symptom ?? '', - value: value.hfReferralModel?.symptom ?? '', - ); - } - return null; - }, + create: (value) => + value.viewOnly && value.hfReferralModel?.symptom != null + ? value.hfReferralModel?.symptom + : null, ), disabled: referralState.mapOrNull( - create: (value) => value.viewOnly, - ) ?? false, + create: (value) => value.viewOnly, + ) ?? + false, validators: [ Validators.required, ], ), - - // _referralReason: FormControl( - // value: referralState.mapOrNull( - // create: (value) => - // value.viewOnly && value.hfReferralModel?.symptom != null - // ? value.hfReferralModel?.symptom - // : null, - // ), - // disabled: referralState.mapOrNull( - // create: (value) => value.viewOnly, - // ) ?? - // false, - // validators: [ - // Validators.required, - // ], - // ), }); } } -class ReferralReasonModel { +class ReferralReason { final String code; final String value; - ReferralReasonModel({required this.code, required this.value}); + ReferralReason({required this.code, required this.value}); } diff --git a/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart b/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart index 936238606..5e765170a 100644 --- a/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart +++ b/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart @@ -3,9 +3,9 @@ import 'package:digit_ui_components/enum/app_enums.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/digit_button.dart'; import 'package:digit_ui_components/widgets/atoms/digit_info_card.dart'; -// import 'package:digit_ui_components/widgets/scrollable_content.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_search_bar.dart'; +import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:survey_form/survey_form.dart'; -import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_scanner/blocs/scanner.dart'; import 'package:digit_scanner/router/digit_scanner_router.gm.dart'; @@ -57,7 +57,6 @@ class _SearchReferralReconciliationsPageState @override Widget build(BuildContext context) { final theme = Theme.of(context); - return KeyboardVisibilityBuilder( builder: (context, isKeyboardVisible) => BlocProvider< SearchReferralsBloc>( From 15236080cd615a9fa737261dd5d3e66f68b99ae8 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Tue, 10 Sep 2024 11:14:57 +0530 Subject: [PATCH 132/241] Added a value in i18 file --- .../pages/create_referral/record_facility_details.dart | 2 +- .../pages/create_referral/record_reason_checklist.dart | 1 - .../pages/create_referral/record_referral_details.dart | 8 ++++---- .../lib/utils/i18_key_constants.dart | 1 + 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart index 39c75c879..a064fbeba 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart @@ -130,7 +130,7 @@ class _ReferralFacilityPageState extends LocalizedState { if (evaluationFacility == null) { Toast.showToast( context, - message: 'Facility is mandatory', + message: localizations.translate(i18.referralReconciliation.facilityIsMandatory), type: ToastType.error, ); } else { diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart index 8b9374ecf..03efbb369 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart @@ -11,7 +11,6 @@ import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:group_radio_button/group_radio_button.dart'; import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart'; import 'package:referral_reconciliation/utils/constants.dart'; diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart index 6311d4f06..b5b49956a 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart @@ -201,9 +201,9 @@ class _RecordReferralDetailsPageState .isEmpty) { Toast.showToast( context, - message: i18 + message: localizations.translate(i18 .referralReconciliation - .noChecklistFound, + .noChecklistFound), type: ToastType.error, ); } else { @@ -541,9 +541,9 @@ class _RecordReferralDetailsPageState .isEmpty) { Toast.showToast( context, - message: i18 + message: localizations.translate(i18 .referralReconciliation - .noChecklistFound, + .noChecklistFound), type: ToastType.error, ); } else { diff --git a/packages/referral_reconciliation/lib/utils/i18_key_constants.dart b/packages/referral_reconciliation/lib/utils/i18_key_constants.dart index bdb903ae3..822c08dfe 100644 --- a/packages/referral_reconciliation/lib/utils/i18_key_constants.dart +++ b/packages/referral_reconciliation/lib/utils/i18_key_constants.dart @@ -191,4 +191,5 @@ class ReferralReconciliation { String get beneficiaryInfoTitle => 'BENEFICIARY_INFO_TITLE'; String get scannerLabel => 'SCANNER_LABEL'; String get noFacilitiesAssigned => 'NO_FACILITIES_ASSIGNED'; + String get facilityIsMandatory => 'FACILITY_IS_MANDATORY'; } From dab87ad5b16defcbed8b78aceaf94aecd3bfe590 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Wed, 11 Sep 2024 11:38:53 +0530 Subject: [PATCH 133/241] Made changes in HF referral widget files --- .../lib/pages/acknowledgement.dart | 1 - .../widgets/back_navigation_help_header.dart | 6 +- .../lib/widgets/beneficiary_card.dart | 36 +++++------ .../lib/widgets/view_referral_card.dart | 59 +++++++++---------- pubspec.lock | 8 +-- 5 files changed, 53 insertions(+), 57 deletions(-) diff --git a/packages/referral_reconciliation/lib/pages/acknowledgement.dart b/packages/referral_reconciliation/lib/pages/acknowledgement.dart index 4a0906556..1cc0b5b29 100644 --- a/packages/referral_reconciliation/lib/pages/acknowledgement.dart +++ b/packages/referral_reconciliation/lib/pages/acknowledgement.dart @@ -1,6 +1,5 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_ui_components/digit_components.dart'; -import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/molecules/panel_cards.dart'; import 'package:flutter/material.dart'; diff --git a/packages/referral_reconciliation/lib/widgets/back_navigation_help_header.dart b/packages/referral_reconciliation/lib/widgets/back_navigation_help_header.dart index e5ee13230..7ff892205 100644 --- a/packages/referral_reconciliation/lib/widgets/back_navigation_help_header.dart +++ b/packages/referral_reconciliation/lib/widgets/back_navigation_help_header.dart @@ -1,5 +1,5 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/theme/digit_theme.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:flutter/material.dart'; import '../../utils/i18_key_constants.dart' as i18; @@ -26,7 +26,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { final theme = Theme.of(context); return Padding( - padding: const EdgeInsets.all(kPadding/2), + padding: EdgeInsets.all(theme.spacerTheme.spacer2/2), child: Row( children: [ Expanded( @@ -55,7 +55,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { ], ), ), - SizedBox(width: showHelp ? kPadding *2 : 0), + SizedBox(width: showHelp ? theme.spacerTheme.spacer2 *2 : 0), if (showHelp) TextButton( style: TextButton.styleFrom(padding: EdgeInsets.zero), diff --git a/packages/referral_reconciliation/lib/widgets/beneficiary_card.dart b/packages/referral_reconciliation/lib/widgets/beneficiary_card.dart index af213d6b4..e3c793729 100644 --- a/packages/referral_reconciliation/lib/widgets/beneficiary_card.dart +++ b/packages/referral_reconciliation/lib/widgets/beneficiary_card.dart @@ -1,4 +1,4 @@ -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:flutter/material.dart'; import 'package:referral_reconciliation/models/entities/referral_recon_enums.dart'; @@ -29,7 +29,7 @@ class ReferralBeneficiaryCard extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: const EdgeInsets.all(kPadding / 2), + padding: EdgeInsets.all(theme.spacerTheme.spacer2 / 2), child: Text( title, style: theme.textTheme.headlineSmall, @@ -38,30 +38,32 @@ class ReferralBeneficiaryCard extends StatelessWidget { Offstage( offstage: status == null, child: status == ReferralReconEnums.visited.toValue() - ? DigitIconButton( - icon: Icons.check_circle, - iconText: ReferralReconLocalization.of(context) - .translate(status.toString()), - iconTextColor: theme.colorScheme.onSurfaceVariant, - iconColor: theme.colorScheme.onSurfaceVariant, - ) - : DigitIconButton( - icon: Icons.info_rounded, - iconText: ReferralReconLocalization.of(context) - .translate(status.toString()), - iconTextColor: theme.colorScheme.error, - iconColor: theme.colorScheme.error, + ? Row( + children: [ + Icon(Icons.check_circle, color: theme.colorTheme.alert.success,), + SizedBox(width: theme.spacerTheme.spacer1,), + Text(ReferralReconLocalization.of(context) + .translate(status.toString()),style: TextStyle(color: Colors.green,fontSize: theme.spacerTheme.spacer4),) + ], + ) + : Row( + children: [ + Icon(Icons.info_rounded, color: theme.colorTheme.alert.error,), + SizedBox(width: theme.spacerTheme.spacer1,), + Text(ReferralReconLocalization.of(context) + .translate(status.toString()), style: TextStyle(color: Colors.red,fontSize: theme.spacerTheme.spacer4),) + ], ), ), Padding( - padding: const EdgeInsets.all(kPadding / 2), + padding: EdgeInsets.all(theme.spacerTheme.spacer2 / 2), child: Text( subtitle, style: theme.textTheme.bodyMedium, ), ), Padding( - padding: const EdgeInsets.all(kPadding / 2), + padding: EdgeInsets.all(theme.spacerTheme.spacer2 / 2), child: Text( description, style: theme.textTheme.bodySmall, diff --git a/packages/referral_reconciliation/lib/widgets/view_referral_card.dart b/packages/referral_reconciliation/lib/widgets/view_referral_card.dart index 8edbb33a7..2a4682e0c 100644 --- a/packages/referral_reconciliation/lib/widgets/view_referral_card.dart +++ b/packages/referral_reconciliation/lib/widgets/view_referral_card.dart @@ -1,11 +1,13 @@ -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/utils/date_utils.dart'; +import 'package:digit_ui_components/enum/app_enums.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_button.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:referral_reconciliation/models/entities/hf_referral.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../models/entities/referral_recon_enums.dart'; import '../utils/constants.dart'; +import '../utils/date_utils.dart'; import 'beneficiary_card.dart'; import 'localized.dart'; @@ -55,39 +57,32 @@ class _ViewReferralCardState extends LocalizedState { .value .toString() ?? ''); - return DigitCard( - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - width: MediaQuery.of(context).size.width / 1.8, - child: ReferralBeneficiaryCard( - description: '', - subtitle: - '${localizations.translate(i18.referralReconciliation.dateOfEvaluationLabel)}: ${dateOfEvaluation != null ? DigitDateUtils.getDateFromTimestamp(dateOfEvaluation, dateFormat: defaultDateFormat) : localizations.translate(i18.common.coreCommonNA)}', - title: hfReferralModel.name.toString(), - ), + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + width: MediaQuery.of(context).size.width / 1.8, + child: ReferralBeneficiaryCard( + description: '', + subtitle: + '${localizations.translate(i18.referralReconciliation.dateOfEvaluationLabel)}: ${dateOfEvaluation != null ? DigitDateUtils.getDateFromTimestamp(dateOfEvaluation, dateFormat: defaultDateFormat) : localizations.translate(i18.common.coreCommonNA)}', + title: hfReferralModel.name.toString(), ), - Flexible( - child: DigitOutLineButton( - buttonStyle: OutlinedButton.styleFrom( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.zero, - ), - ), - label: localizations - .translate(i18.referralReconciliation.iconLabel), - onPressed: widget.onOpenPressed, - ), + ), + Flexible( + child: Button( + size: ButtonSize.large, + type: ButtonType.secondary, + label: localizations + .translate(i18.referralReconciliation.iconLabel), + onPressed: widget.onOpenPressed ?? () {}, ), - ], - ), - ], - ), + ), + ], + ),] ); } } diff --git a/pubspec.lock b/pubspec.lock index 8ec919d96..971b6e21a 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -325,10 +325,10 @@ packages: dependency: transitive description: name: mime - sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.6" mustache_template: dependency: transitive description: @@ -421,10 +421,10 @@ packages: dependency: transitive description: name: quiver - sha256: b1c1ac5ce6688d77f65f3375a9abb9319b3cb32486bdc7a1e0fdf004d7ba4e47 + sha256: ea0b925899e64ecdfbf9c7becb60d5b50e706ade44a85b2363be2a22d88117d2 url: "https://pub.dev" source: hosted - version: "3.2.1" + version: "3.2.2" shelf: dependency: transitive description: From d367691d2a2af19c31e0ab520839bcda97962cca Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Fri, 13 Sep 2024 12:34:30 +0530 Subject: [PATCH 134/241] Removed commented code --- .../lib/pages/create_referral/record_referral_details.dart | 7 ------- 1 file changed, 7 deletions(-) diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart index b5b49956a..561127105 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart @@ -1357,10 +1357,3 @@ class _RecordReferralDetailsPageState } } -class ReferralReason { - final String code; - final String value; - - ReferralReason({required this.code, required this.value}); -} - From 75997a4cb81194392cb610e5ac1397865bb36328 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Mon, 23 Sep 2024 10:57:36 +0530 Subject: [PATCH 135/241] Using digit-ui library from the published page --- apps/health_campaign_field_worker_app/pubspec.yaml | 2 +- packages/attendance_management/pubspec.yaml | 1 - .../referral_reconciliation/lib/pages/acknowledgement.dart | 3 +-- packages/referral_reconciliation/pubspec.yaml | 5 ++--- 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 835f45ca2..64e8d90d5 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -18,7 +18,7 @@ dependencies: sqlite3_flutter_libs: ^0.5.10 path_provider: ^2.0.11 path: ^1.8.2 - digit_ui_components: 0.0.3-beta + digit_ui_components: 0.0.1+7 digit_components: ^1.0.2 auto_route: ^7.8.4 flutter_bloc: ^8.1.1 diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index a4951a968..76f8fe39d 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -12,7 +12,6 @@ dependencies: flutter: sdk: flutter digit_components: ^1.0.1+1 - digit_ui_components: 0.0.3-beta flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 diff --git a/packages/referral_reconciliation/lib/pages/acknowledgement.dart b/packages/referral_reconciliation/lib/pages/acknowledgement.dart index 1cc0b5b29..09cf01b99 100644 --- a/packages/referral_reconciliation/lib/pages/acknowledgement.dart +++ b/packages/referral_reconciliation/lib/pages/acknowledgement.dart @@ -22,8 +22,7 @@ class ReferralReconAcknowledgementPage extends LocalizedStatefulWidget { }); @override - State createState() => - _AcknowledgementPageState(); + State createState() => _AcknowledgementPageState(); } class _AcknowledgementPageState diff --git a/packages/referral_reconciliation/pubspec.yaml b/packages/referral_reconciliation/pubspec.yaml index f9ef6a58a..ea86dcf71 100644 --- a/packages/referral_reconciliation/pubspec.yaml +++ b/packages/referral_reconciliation/pubspec.yaml @@ -1,6 +1,6 @@ name: referral_reconciliation description: "This module will enable the health facility supervisors to track referrals made by on-field health workers to different health facilities digitally via the Digit HCM app" -version: 1.0.3-dev.1 +version: 1.0.2 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/referral_reconciliation repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -11,8 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_ui_components: 0.0.3-beta - digit_components: ^1.0.2+1 + digit_ui_components: 0.0.1+7 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 reactive_forms: ^14.1.0 From 11cd0599540cdd7243bdd720cd682ade0f962b32 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Wed, 25 Sep 2024 17:11:35 +0530 Subject: [PATCH 136/241] Did all the asked changes on PR --- .../lib/pages/acknowledgement.dart | 43 +- .../reason_checklist_preview.dart | 324 ++++---- .../record_facility_details.dart | 691 +++++++++------- .../record_reason_checklist.dart | 779 +++++++++--------- .../record_referral_details.dart | 182 ++-- .../project_facility_selection.dart | 27 +- .../search_referral_reconciliations.dart | 105 +-- .../widgets/back_navigation_help_header.dart | 4 +- .../lib/widgets/beneficiary_card.dart | 42 +- .../lib/widgets/view_referral_card.dart | 49 +- 10 files changed, 1177 insertions(+), 1069 deletions(-) diff --git a/packages/referral_reconciliation/lib/pages/acknowledgement.dart b/packages/referral_reconciliation/lib/pages/acknowledgement.dart index 09cf01b99..c9a5ba5ab 100644 --- a/packages/referral_reconciliation/lib/pages/acknowledgement.dart +++ b/packages/referral_reconciliation/lib/pages/acknowledgement.dart @@ -22,7 +22,8 @@ class ReferralReconAcknowledgementPage extends LocalizedStatefulWidget { }); @override - State createState() => _AcknowledgementPageState(); + State createState() => + _AcknowledgementPageState(); } class _AcknowledgementPageState @@ -33,27 +34,27 @@ class _AcknowledgementPageState return Scaffold( body: PanelCard( - type: PanelType.success, - title: widget.label ?? - localizations.translate( - i18.acknowledgementSuccess.acknowledgementLabelText, - ), - description: widget.description ?? - localizations.translate( - i18.acknowledgementSuccess.acknowledgementDescriptionText, - ), - actions: [ - Button( - label: localizations.translate(i18.acknowledgementSuccess.actionLabelText), - onPressed: () { - context.router.popUntilRoot(); - }, - type: ButtonType.primary, - size: ButtonSize.large, - mainAxisSize: MainAxisSize.max, - ) - ] + type: PanelType.success, + title: widget.label ?? + localizations.translate( + i18.acknowledgementSuccess.acknowledgementLabelText, + ), + description: widget.description ?? + localizations.translate( + i18.acknowledgementSuccess.acknowledgementDescriptionText, ), + actions: [ + Button( + label: localizations + .translate(i18.acknowledgementSuccess.actionLabelText), + onPressed: () { + context.router.popUntilRoot(); + }, + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + ) + ]), bottomNavigationBar: Offstage( offstage: !widget.isDataRecordSuccess, // Show the bottom navigation bar if `isDataRecordSuccess` is true diff --git a/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart b/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart index b1284e6e4..a6b8a5aaf 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart @@ -10,6 +10,7 @@ import 'package:intl/intl.dart'; import 'package:referral_reconciliation/utils/constants.dart'; import '../../blocs/referral_recon_service_definition.dart'; +import '../../router/referral_reconciliation_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../widgets/back_navigation_help_header.dart'; import '../../widgets/localized.dart'; @@ -47,18 +48,25 @@ class _ReferralReasonChecklistPreviewPageState cardType: CardType.primary, padding: EdgeInsets.all(theme.spacerTheme.spacer2), children: [ - Button( - size: ButtonSize.large, - label: localizations.translate(i18.common.corecommonclose), - mainAxisSize: MainAxisSize.max, - onPressed: () { - context.read().add( - ServiceResetEvent(serviceList: serviceList), - ); - context.router.popUntil((route) => route.settings.name == 'SearchReferralReconciliationsRoute'); - context.router.maybePop(); - }, - type: ButtonType.primary,)]) : const Offstage(); + Button( + size: ButtonSize.large, + label: localizations + .translate(i18.common.corecommonclose), + mainAxisSize: MainAxisSize.max, + onPressed: () { + context.read().add( + ServiceResetEvent( + serviceList: serviceList), + ); + context.router.popUntil((route) => + route.settings.name == + SearchReferralReconciliationsRoute.name); + context.router.maybePop(); + }, + type: ButtonType.primary, + ) + ]) + : const Offstage(); }, ); }, @@ -74,54 +82,61 @@ class _ReferralReasonChecklistPreviewPageState children: [ ...value1.map((e) => e.serviceDefId != null ? DigitCard( - margin: EdgeInsets.all(theme.spacerTheme.spacer2), + margin: + EdgeInsets.all(theme.spacerTheme.spacer2), cardType: CardType.primary, - children: [Column( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Align( - alignment: Alignment.centerLeft, - child: Text( - DateFormat(defaultDateFormat).format( - DateFormat(defaultDateFormat).parse( - e.createdAt.toString(), - ), - ), - style: theme.textTheme.headlineMedium, - ), - ), - Row( + children: [ + Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - SizedBox( + Align( + alignment: Alignment.centerLeft, child: Text( - localizations.translate( - '${e.tenantId}', + DateFormat(defaultDateFormat) + .format( + DateFormat(defaultDateFormat) + .parse( + e.createdAt.toString(), + ), ), + style: theme + .textTheme.headlineMedium, ), ), - Button( - label: localizations.translate( - i18.referralReconciliation - .iconLabel, - ), - onPressed: () { - context.read().add( - ServiceSelectionEvent( - service: e, - ), - ); - }, - type: ButtonType.secondary, - size: ButtonSize.large, + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + SizedBox( + child: Text( + localizations.translate( + '${e.tenantId}', + ), + ), + ), + Button( + label: localizations.translate( + i18.referralReconciliation + .iconLabel, + ), + onPressed: () { + context + .read() + .add( + ServiceSelectionEvent( + service: e, + ), + ); + }, + type: ButtonType.secondary, + size: ButtonSize.large, + ), + ], ), ], ), - ], - ),] - ) + ]) : const Offstage()), ], ) @@ -135,120 +150,131 @@ class _ReferralReasonChecklistPreviewPageState ) { return DigitCard( cardType: CardType.primary, - children: [Column( - children: [ - Container( - width: MediaQuery.of(context).size.width, - margin: const EdgeInsets.all(8), - child: Column( - mainAxisAlignment: - MainAxisAlignment.start, - children: [ - Align( - alignment: Alignment.centerLeft, - child: Text( - localizations.translate( - item2?.code ?? '', + children: [ + Column( + children: [ + Container( + width: MediaQuery.of(context).size.width, + margin: const EdgeInsets.all(8), + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + Align( + alignment: Alignment.centerLeft, + child: Text( + localizations.translate( + item2?.code ?? '', + ), + style: + theme.textTheme.displayMedium, ), - style: - theme.textTheme.displayMedium, ), - ), - ...(value2.attributes ?? []) - .where((a) => - a.value != - i18.checklist - .notSelectedKey && - a.value != '') - .map( - (e) => Padding( - padding: - const EdgeInsets.all(8), - child: Column( - mainAxisAlignment: - MainAxisAlignment.start, - children: [ - Align( - alignment: - Alignment.centerLeft, - child: Text( - localizations.translate( - "${item2?.code ?? ''}.${e.attributeCode!}", - ), - style: theme.textTheme - .headlineSmall, - ), - ), - Container( - margin: const EdgeInsets - .only() - .copyWith( - top: theme.spacerTheme.spacer2, - bottom: theme.spacerTheme.spacer2, - ), - child: Align( + ...(value2.attributes ?? []) + .where((a) => + a.value != + i18.checklist + .notSelectedKey && + a.value != '') + .map( + (e) => Padding( + padding: + const EdgeInsets.all(8), + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + Align( alignment: Alignment .centerLeft, child: Text( - e.dataType == - 'SingleValueList' - ? localizations - .translate( - 'CORE_COMMON_${e.value.toString().toUpperCase()}', - ) - : e.value ?? "", + localizations + .translate( + "${item2?.code ?? ''}.${e.attributeCode!}", + ), + style: theme.textTheme + .headlineSmall, + ), + ), + Container( + margin: const EdgeInsets + .only() + .copyWith( + top: theme.spacerTheme + .spacer2, + bottom: theme + .spacerTheme + .spacer2, + ), + child: Align( + alignment: Alignment + .centerLeft, + child: Text( + e.dataType == + 'SingleValueList' + ? localizations + .translate( + 'CORE_COMMON_${e.value.toString().toUpperCase()}', + ) + : e.value ?? "", + ), ), ), - ), - e.additionalDetails != '' && - e.additionalDetails != - null - ? Container( - margin: - const EdgeInsets - .only() - .copyWith( - top: theme.spacerTheme.spacer2, - bottom: theme.spacerTheme.spacer2, - ), - child: Column( - children: [ - Align( - alignment: - Alignment - .centerLeft, - child: Text( - localizations - .translate( - "${item2?.code ?? ''}.${e.attributeCode!}.ADDITIONAL_FIELD", + e.additionalDetails != + '' && + e.additionalDetails != + null + ? Container( + margin: + const EdgeInsets + .only() + .copyWith( + top: theme + .spacerTheme + .spacer2, + bottom: theme + .spacerTheme + .spacer2, + ), + child: Column( + children: [ + Align( + alignment: + Alignment + .centerLeft, + child: Text( + localizations + .translate( + "${item2?.code ?? ''}.${e.attributeCode!}.ADDITIONAL_FIELD", + ), ), ), - ), - Align( - alignment: - Alignment - .centerLeft, - child: Text( - localizations - .translate( - e.additionalDetails, + Align( + alignment: + Alignment + .centerLeft, + child: Text( + localizations + .translate( + e.additionalDetails, + ), ), ), - ), - ], - ), - ) - : const Offstage(), - const DigitDivider(), - ], + ], + ), + ) + : const Offstage(), + const DigitDivider(), + ], + ), ), ), - ), - ].toList(), + ].toList(), + ), ), - ), - ], - )], + ], + ) + ], ); }, orElse: () => const Offstage(), diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart index a064fbeba..a0b7ee8d0 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart @@ -22,11 +22,8 @@ import '../project_facility/project_facility_selection.dart'; class ReferralFacilityPage extends LocalizedStatefulWidget { final bool isEditing; - const ReferralFacilityPage({ - super.key, - super.appLocalizations, - this.isEditing = false,show - }); + const ReferralFacilityPage( + {super.key, super.appLocalizations, this.isEditing = false}); @override State createState() => _ReferralFacilityPageState(); @@ -53,7 +50,7 @@ class _ReferralFacilityPageState extends LocalizedState { setState(() { selectedProjectFacilityId = referralState.mapOrNull( create: (value) => - value.viewOnly ? value.hfReferralModel?.projectFacilityId : null, + value.viewOnly ? value.hfReferralModel?.projectFacilityId : null, ); }); super.initState(); @@ -80,283 +77,339 @@ class _ReferralFacilityPageState extends LocalizedState { return facilities.isNotEmpty ? Scaffold( - body: BlocBuilder( - builder: (context, recordState) { - final bool viewOnly = recordState.mapOrNull( - create: (value) => value.viewOnly, - ) ?? - false; + body: BlocBuilder( + builder: (context, recordState) { + final bool viewOnly = recordState.mapOrNull( + create: (value) => value.viewOnly, + ) ?? + false; - return ReactiveFormBuilder( - form: () => buildForm(recordState, projectFacilities), - builder: (context, form, child) => ScrollableContent( - enableFixedButton: true, - header: const Column(children: [ - BackNavigationHelpHeaderWidget(), - ]), - footer: DigitCard( - margin: - EdgeInsets.fromLTRB(0, theme.spacerTheme.spacer2, 0, 0), - padding: EdgeInsets.all(theme.spacerTheme.spacer2), - cardType: CardType.primary, - children: [ValueListenableBuilder( - valueListenable: clickedStatus, - builder: (context, bool isClicked, _) { - return Button( - size: ButtonSize.large, - label: localizations.translate( - i18.common.coreCommonNext, - ), - onPressed: () { - form.markAllAsTouched(); - if (!form.valid) { - return; - } else { - clickedStatus.value = true; - if (viewOnly) { - context.router.push( - RecordReferralDetailsRoute( - projectId: - ReferralReconSingleton() - .projectId, - cycles: ReferralReconSingleton() - .cycles, - ), - ); - } else { - final evaluationFacility = - selectedProjectFacilityId; - if (evaluationFacility == null) { - Toast.showToast( - context, - message: localizations.translate(i18.referralReconciliation.facilityIsMandatory), - type: ToastType.error, - ); - } else { - final dateOfEvaluation = form - .control(_dateOfEvaluationKey) - .value as DateTime; - final hfCoordinator = form - .control(_hfCoordinatorKey) - .value as String?; - final referredByTeam = form - .control(_referredByKey) - .value as String?; - - final event = context - .read(); - event.add( - RecordHFReferralSaveFacilityDetailsEvent( - dateOfEvaluation: - dateOfEvaluation, - facilityId: evaluationFacility - .toString(), - healthFacilityCord: - hfCoordinator, - referredBy: referredByTeam, - ), - ); - - context.router.push( - RecordReferralDetailsRoute( - projectId: - ReferralReconSingleton() - .projectId, - cycles: ReferralReconSingleton() - .cycles, - )); - } - } - } - }, - type: ButtonType.primary, - mainAxisSize: MainAxisSize.max, - ); - }, - ),] - ), - slivers: [ - SliverToBoxAdapter( - child: DigitCard( - cardType: CardType.primary, - children: [ - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, + return ReactiveFormBuilder( + form: () => buildForm(recordState, projectFacilities), + builder: (context, form, child) => ScrollableContent( + enableFixedButton: true, + header: const Column(children: [ + BackNavigationHelpHeaderWidget(), + ]), + footer: DigitCard( + margin: EdgeInsets.fromLTRB( + 0, theme.spacerTheme.spacer2, 0, 0), + padding: + EdgeInsets.all(theme.spacerTheme.spacer2), + cardType: CardType.primary, children: [ - Expanded( - child: Text( - localizations.translate( - i18.referralReconciliation - .facilityDetails, - ), - style: - theme.textTheme.displayMedium, - ), - ), - ], - ), - ReactiveWrapperField( - formControlName: _administrativeUnitKey, - builder: (field){ - return LabeledField( - isRequired: true, - label: localizations.translate( - i18.referralReconciliation - .administrationUnitFormLabel, - ), - child: DigitTextFormInput( - readOnly: true, - initialValue: field.value, - ), - );} - ), - ReactiveWrapperField( - formControlName: _dateOfEvaluationKey, - validationMessages: { - 'required': (_) => - localizations.translate( - i18.common.corecommonRequired, + ValueListenableBuilder( + valueListenable: clickedStatus, + builder: (context, bool isClicked, _) { + return Button( + size: ButtonSize.large, + label: localizations.translate( + i18.common.coreCommonNext, ), - }, - showErrors: (control) => control.invalid && control.touched, // Ensures error is shown if invalid and touched - builder: (field){ - return LabeledField( - isRequired: true, - label: localizations.translate( - i18.referralReconciliation - .dateOfEvaluationLabel, - ), - child: DigitDateFormInput( - onChange: (val) => { - form.control(_dateOfEvaluationKey).markAsTouched(), - form.control(_dateOfEvaluationKey).value = DigitDateUtils.getFormattedDateToDateTime(val), - }, - readOnly: viewOnly, - errorMessage: field.errorText, - initialValue: DigitDateUtils.getDateString(form.control(_dateOfEvaluationKey).value), + onPressed: () { + form.markAllAsTouched(); + if (!form.valid) { + return; + } else { + clickedStatus.value = true; + if (viewOnly) { + context.router.push( + RecordReferralDetailsRoute( + projectId: + ReferralReconSingleton() + .projectId, + cycles: + ReferralReconSingleton() + .cycles, + ), + ); + } else { + final evaluationFacility = + selectedProjectFacilityId; + if (evaluationFacility == null) { + Toast.showToast( + context, + message: localizations + .translate(i18 + .referralReconciliation + .facilityIsMandatory), + type: ToastType.error, + ); + } else { + final dateOfEvaluation = form + .control( + _dateOfEvaluationKey) + .value as DateTime; + final hfCoordinator = form + .control(_hfCoordinatorKey) + .value as String?; + final referredByTeam = form + .control(_referredByKey) + .value as String?; - lastDate: DateTime.now(), - cancelText: localizations.translate( - i18.common.coreCommonCancel, - ), - confirmText: localizations.translate( - i18.common.coreCommonOk, - ), - ), - );} - ), - InkWell( - onTap: viewOnly - ? null - : () async { - final facility = - await Navigator.of( - context) - .push( - MaterialPageRoute( - builder: (context) => - ReferralReconProjectFacilitySelectionPage( - projectFacilities: - facilities, - ), - ), - ); + final event = context.read< + RecordHFReferralBloc>(); + event.add( + RecordHFReferralSaveFacilityDetailsEvent( + dateOfEvaluation: + dateOfEvaluation, + facilityId: + evaluationFacility + .toString(), + healthFacilityCord: + hfCoordinator, + referredBy: referredByTeam, + ), + ); - if (facility == null) return; - form - .control( - _evaluationFacilityKey, - ) - .value = - localizations.translate( - 'PJ_FAC_${facility.id}'); - setState(() { - selectedProjectFacilityId = - facility.id; - }); - }, - child: IgnorePointer( - child: ReactiveWrapperField( - validationMessages: { - 'required': (_) => - localizations.translate( - i18.referralReconciliation - .facilityValidationMessage, + context.router.push( + RecordReferralDetailsRoute( + projectId: + ReferralReconSingleton() + .projectId, + cycles: + ReferralReconSingleton() + .cycles, + )); + } + } + } + }, + type: ButtonType.primary, + mainAxisSize: MainAxisSize.max, + ); + }, + ), + ]), + slivers: [ + SliverToBoxAdapter( + child: DigitCard( + cardType: CardType.primary, + children: [ + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Text( + localizations.translate( + i18.referralReconciliation + .facilityDetails, + ), + style: + theme.textTheme.displayMedium, ), - }, - formControlName: _evaluationFacilityKey, - showErrors: (control) => control.invalid && control.touched, // Ensures error is shown if invalid and touched - builder: (field){return LabeledField( - isRequired: true, - label: localizations.translate( - i18.referralReconciliation - .evaluationFacilityLabel, - ), - child: DigitSearchFormInput( - onChange: (val) => { - form.control(_evaluationFacilityKey).markAsTouched(), - form.control(_evaluationFacilityKey).value = val, + ), + ], + ), + ReactiveWrapperField( + formControlName: + _administrativeUnitKey, + builder: (field) { + return LabeledField( + isRequired: true, + label: localizations.translate( + i18.referralReconciliation + .administrationUnitFormLabel, + ), + child: DigitTextFormInput( + readOnly: true, + initialValue: field.value, + ), + ); + }), + ReactiveWrapperField( + formControlName: _dateOfEvaluationKey, + validationMessages: { + 'required': (_) => + localizations.translate( + i18.common.corecommonRequired, + ), }, - readOnly: viewOnly, - errorMessage: field.errorText, - initialValue: form.control(_evaluationFacilityKey).value, + showErrors: (control) => + control.invalid && + control + .touched, // Ensures error is shown if invalid and touched + builder: (field) { + return LabeledField( + isRequired: true, + label: localizations.translate( + i18.referralReconciliation + .dateOfEvaluationLabel, + ), + child: DigitDateFormInput( + onChange: (val) => { + form + .control( + _dateOfEvaluationKey) + .markAsTouched(), + form + .control( + _dateOfEvaluationKey) + .value = + DigitDateUtils + .getFormattedDateToDateTime( + val), + }, + readOnly: viewOnly, + errorMessage: field.errorText, + initialValue: DigitDateUtils + .getDateString(form + .control( + _dateOfEvaluationKey) + .value), + lastDate: DateTime.now(), + cancelText: + localizations.translate( + i18.common.coreCommonCancel, + ), + confirmText: + localizations.translate( + i18.common.coreCommonOk, + ), + ), + ); + }), + InkWell( + onTap: viewOnly + ? null + : () async { + final facility = + await Navigator.of(context) + .push( + MaterialPageRoute( + builder: (context) => + ReferralReconProjectFacilitySelectionPage( + projectFacilities: + facilities, + ), + ), + ); + + if (facility == null) return; + form + .control( + _evaluationFacilityKey, + ) + .value = + localizations.translate( + 'PJ_FAC_${facility.id}'); + setState(() { + selectedProjectFacilityId = + facility.id; + }); + }, + child: IgnorePointer( + child: ReactiveWrapperField( + validationMessages: { + 'required': (_) => + localizations.translate( + i18.referralReconciliation + .facilityValidationMessage, + ), + }, + formControlName: + _evaluationFacilityKey, + showErrors: (control) => + control.invalid && + control + .touched, // Ensures error is shown if invalid and touched + builder: (field) { + return LabeledField( + isRequired: true, + label: + localizations.translate( + i18.referralReconciliation + .evaluationFacilityLabel, + ), + child: DigitSearchFormInput( + onChange: (val) => { + form + .control( + _evaluationFacilityKey) + .markAsTouched(), + form + .control( + _evaluationFacilityKey) + .value = val, + }, + readOnly: viewOnly, + errorMessage: + field.errorText, + initialValue: form + .control( + _evaluationFacilityKey) + .value, + ), + ); + }), ), - );} - ), - ), - ), - ReactiveWrapperField( - formControlName: _hfCoordinatorKey, - builder: (field){ - return LabeledField( - label: localizations.translate( - i18.referralReconciliation - .healthFacilityCoordinatorLabel, ), - child: DigitTextFormInput( - onChange: (val) => { - form.control(_hfCoordinatorKey).markAsTouched(), - form.control(_hfCoordinatorKey).value = val, - }, - readOnly: viewOnly, - initialValue: form.control(_hfCoordinatorKey).value, - ) - );} + ReactiveWrapperField( + formControlName: _hfCoordinatorKey, + builder: (field) { + return LabeledField( + label: localizations.translate( + i18.referralReconciliation + .healthFacilityCoordinatorLabel, + ), + child: DigitTextFormInput( + onChange: (val) => { + form + .control( + _hfCoordinatorKey) + .markAsTouched(), + form + .control( + _hfCoordinatorKey) + .value = val, + }, + readOnly: viewOnly, + initialValue: form + .control( + _hfCoordinatorKey) + .value, + )); + }), + ReactiveWrapperField( + formControlName: _referredByKey, + builder: (field) { + return LabeledField( + label: localizations.translate( + i18.referralReconciliation + .referredByTeamCodeLabel, + ), + child: DigitTextFormInput( + onChange: (val) => { + form + .control(_referredByKey) + .markAsTouched(), + form + .control(_referredByKey) + .value = val, + }, + readOnly: viewOnly, + initialValue: form + .control(_referredByKey) + .value, + )); + }), + ]), ), - ReactiveWrapperField( - formControlName: _referredByKey, - builder: (field){return LabeledField( - label: localizations.translate( - i18.referralReconciliation - .referredByTeamCodeLabel, - ), - child: DigitTextFormInput( - onChange: (val) => { - form.control(_referredByKey).markAsTouched(), - form.control(_referredByKey).value = val, - }, - readOnly: viewOnly, - initialValue: form.control(_referredByKey).value, - ) - );} - ),] + ], ), - ), - ], + ); + }, ), - ); - }, - ), - ) + ) : Center( - child: Text( - localizations.translate( - i18.referralReconciliation.noFacilitiesAssigned, - ), - ), - ); + child: Text( + localizations.translate( + i18.referralReconciliation.noFacilitiesAssigned, + ), + ), + ); }, loading: () => const Center( child: CircularProgressIndicator(), @@ -374,32 +427,32 @@ class _ReferralFacilityPageState extends LocalizedState { } FormGroup buildForm( - RecordHFReferralState referralState, - List facilities, - ) { + RecordHFReferralState referralState, + List facilities, + ) { final dateOfEvaluation = referralState.mapOrNull( create: (value) => value.viewOnly && - value.hfReferralModel?.additionalFields?.fields - .where((e) => - e.key == - ReferralReconEnums.dateOfEvaluation.toValue()) - .firstOrNull - ?.value != - null + value.hfReferralModel?.additionalFields?.fields + .where((e) => + e.key == + ReferralReconEnums.dateOfEvaluation.toValue()) + .firstOrNull + ?.value != + null ? DigitDateUtils.getFormattedDateToDateTime( - DigitDateUtils.getDateFromTimestamp( - int.tryParse(value.hfReferralModel?.additionalFields?.fields - .where((e) => - e.key == - ReferralReconEnums.dateOfEvaluation.toValue()) - .firstOrNull - ?.value - .toString() ?? - '') ?? - DateTime.now().millisecondsSinceEpoch, - dateFormat: defaultDateFormat, - ), - ) + DigitDateUtils.getDateFromTimestamp( + int.tryParse(value.hfReferralModel?.additionalFields?.fields + .where((e) => + e.key == + ReferralReconEnums.dateOfEvaluation.toValue()) + .firstOrNull + ?.value + .toString() ?? + '') ?? + DateTime.now().millisecondsSinceEpoch, + dateFormat: defaultDateFormat, + ), + ) : DateTime.now(), ); @@ -418,19 +471,19 @@ class _ReferralFacilityPageState extends LocalizedState { _hfCoordinatorKey: FormControl( value: referralState.mapOrNull( create: (value) => value.viewOnly && - value.hfReferralModel?.additionalFields?.fields + value.hfReferralModel?.additionalFields?.fields + .where((e) => + e.key == + ReferralReconEnums.hFCoordinator.toValue()) + .firstOrNull + ?.value != + null + ? value.hfReferralModel?.additionalFields?.fields .where((e) => - e.key == - ReferralReconEnums.hFCoordinator.toValue()) + e.key == ReferralReconEnums.hFCoordinator.toValue()) .firstOrNull - ?.value != - null - ? value.hfReferralModel?.additionalFields?.fields - .where((e) => - e.key == ReferralReconEnums.hFCoordinator.toValue()) - .firstOrNull - ?.value - .toString() + ?.value + .toString() : ReferralReconSingleton().userName, ), ), @@ -438,10 +491,10 @@ class _ReferralFacilityPageState extends LocalizedState { value: referralState.mapOrNull( create: (value) => value.viewOnly ? localizations.translate( - 'PJ_FAC_${facilities.where( - (e) => e.id == value.hfReferralModel?.projectFacilityId, - ).first.id.toString()}', - ) + 'PJ_FAC_${facilities.where( + (e) => e.id == value.hfReferralModel?.projectFacilityId, + ).first.id.toString()}', + ) : null, ), validators: [Validators.required], @@ -449,18 +502,18 @@ class _ReferralFacilityPageState extends LocalizedState { _referredByKey: FormControl( value: referralState.mapOrNull( create: (value) => value.viewOnly && - value.hfReferralModel?.additionalFields?.fields - .where((e) => - e.key == ReferralReconEnums.referredBy.toValue()) - .firstOrNull - ?.value != - null + value.hfReferralModel?.additionalFields?.fields + .where((e) => + e.key == ReferralReconEnums.referredBy.toValue()) + .firstOrNull + ?.value != + null ? value.hfReferralModel?.additionalFields?.fields - .where( - (e) => e.key == ReferralReconEnums.referredBy.toValue()) - .firstOrNull - ?.value - .toString() + .where( + (e) => e.key == ReferralReconEnums.referredBy.toValue()) + .firstOrNull + ?.value + .toString() : null, ), ), diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart index 03efbb369..f8ea863f9 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart @@ -49,11 +49,11 @@ class _ReferralReasonChecklistPageState @override void initState() { context.read().add( - ServiceSurveyFormEvent( - value: Random().nextInt(100).toString(), - submitTriggered: true, - ), - ); + ServiceSurveyFormEvent( + value: Random().nextInt(100).toString(), + submitTriggered: true, + ), + ); super.initState(); } @@ -88,248 +88,267 @@ class _ReferralReasonChecklistPageState return ScrollableContent( enableFixedButton: true, footer: DigitCard( - cardType: CardType.primary, - padding: - EdgeInsets.all(theme.spacerTheme.spacer2), - children: [ - Button( - size: ButtonSize.large, - label: localizations.translate(i18.common.coreCommonSubmit), - type: ButtonType.primary, - mainAxisSize: MainAxisSize.max, - onPressed: () async { - final router = context.router; - submitTriggered = true; - - context.read().add( - const ServiceSurveyFormEvent( - value: '', - submitTriggered: true, - ), - ); - final isValid = - checklistFormKey.currentState?.validate(); - if (!isValid!) { - return; - } - final itemsAttributes = initialAttributes; - - for (int i = 0; i < controller.length; i++) { - if (itemsAttributes?[i].required == true && - ((itemsAttributes?[i].dataType == - 'SingleValueList' && - visibleChecklistIndexes - .any((e) => e == i) && - (controller[i].text == '')) || - (itemsAttributes?[i].dataType != - 'SingleValueList' && - (controller[i].text == '' && - !(widget.referralClientRefId != - null))))) { - return; - } - } - - final shouldSubmit = await showDialog( - context: context, - builder: (BuildContext ctx) { - return Popup( - title: localizations.translate( - i18.checklist.checklistDialogLabel, - ), - description: localizations.translate( - i18.checklist.checklistDialogDescription, - ), - actions: [ - Button( - label: localizations.translate( - i18.checklist.checklistDialogPrimaryAction, - ), - type: ButtonType.primary, - size: ButtonSize.large, - onPressed: () { - List attributes = []; - for (int i = 0; i < controller.length; i++) { - final attribute = initialAttributes; - attributes.add(ServiceAttributesModel( - attributeCode: '${attribute?[i].code}', - dataType: attribute?[i].dataType, - clientReferenceId: IdGen.i.identifier, - referenceId: widget.referralClientRefId, - value: attribute?[i].dataType != - 'SingleValueList' - ? controller[i] - .text - .toString() - .trim() - .isNotEmpty - ? controller[i].text.toString() - : '' - : visibleChecklistIndexes.contains(i) - ? controller[i].text.toString() - : i18.checklist.notSelectedKey, - rowVersion: 1, - tenantId: attribute?[i].tenantId, - additionalDetails: null)); - } - - context.read().add( - ServiceCreateEvent( - serviceModel: ServiceModel( - createdAt: DigitDateUtils - .getDateFromTimestamp( - DateTime.now() - .toLocal() - .millisecondsSinceEpoch, - dateFormat: defaultDateTimeFormat, + cardType: CardType.primary, + padding: EdgeInsets.all(theme.spacerTheme.spacer2), + children: [ + Button( + size: ButtonSize.large, + label: localizations + .translate(i18.common.coreCommonSubmit), + type: ButtonType.primary, + mainAxisSize: MainAxisSize.max, + onPressed: () async { + final router = context.router; + submitTriggered = true; + + context.read().add( + const ServiceSurveyFormEvent( + value: '', + submitTriggered: true, + ), + ); + final isValid = + checklistFormKey.currentState?.validate(); + if (!isValid!) { + return; + } + final itemsAttributes = initialAttributes; + + for (int i = 0; i < controller.length; i++) { + if (itemsAttributes?[i].required == true && + ((itemsAttributes?[i].dataType == + 'SingleValueList' && + visibleChecklistIndexes + .any((e) => e == i) && + (controller[i].text == '')) || + (itemsAttributes?[i].dataType != + 'SingleValueList' && + (controller[i].text == '' && + !(widget.referralClientRefId != + null))))) { + return; + } + } + + final shouldSubmit = await showDialog( + context: context, + builder: (BuildContext ctx) { + return Popup( + title: localizations.translate( + i18.checklist.checklistDialogLabel, + ), + description: localizations.translate( + i18.checklist.checklistDialogDescription, + ), + actions: [ + Button( + label: localizations.translate( + i18.checklist + .checklistDialogPrimaryAction, ), - tenantId: value - .selectedServiceDefinition! - .tenantId, - clientId: widget.referralClientRefId - .toString(), - serviceDefId: value - .selectedServiceDefinition?.id, - attributes: attributes, - rowVersion: 1, - accountId: ReferralReconSingleton() - .projectId, - additionalDetails: - ReferralReconSingleton() - .boundary - ?.code, + type: ButtonType.primary, + size: ButtonSize.large, + onPressed: () { + List + attributes = []; + for (int i = 0; + i < controller.length; + i++) { + final attribute = initialAttributes; + attributes.add( + ServiceAttributesModel( + attributeCode: + '${attribute?[i].code}', + dataType: + attribute?[i].dataType, + clientReferenceId: + IdGen.i.identifier, + referenceId: widget + .referralClientRefId, + value: attribute?[i] + .dataType != + 'SingleValueList' + ? controller[i] + .text + .toString() + .trim() + .isNotEmpty + ? controller[i] + .text + .toString() + : '' + : visibleChecklistIndexes + .contains(i) + ? controller[i] + .text + .toString() + : i18.checklist + .notSelectedKey, + rowVersion: 1, + tenantId: + attribute?[i].tenantId, + additionalDetails: null)); + } + + context.read().add( + ServiceCreateEvent( + serviceModel: ServiceModel( + createdAt: DigitDateUtils + .getDateFromTimestamp( + DateTime.now() + .toLocal() + .millisecondsSinceEpoch, + dateFormat: + defaultDateTimeFormat, + ), + tenantId: value + .selectedServiceDefinition! + .tenantId, + clientId: widget + .referralClientRefId + .toString(), + serviceDefId: value + .selectedServiceDefinition + ?.id, + attributes: attributes, + rowVersion: 1, + accountId: + ReferralReconSingleton() + .projectId, + additionalDetails: + ReferralReconSingleton() + .boundary + ?.code, + ), + ), + ); + + Navigator.of( + context, + rootNavigator: true, + ).pop(true); + }, ), - ), + Button( + label: localizations.translate( + i18.checklist + .checklistDialogSecondaryAction, + ), + type: ButtonType.secondary, + size: ButtonSize.large, + onPressed: () { + Navigator.of( + context, + rootNavigator: true, + ).pop(false); + }, + ) + ], ); + }); - Navigator.of( - context, - rootNavigator: true, - ).pop(true); - }, - ), - Button( - label: localizations.translate( - i18.checklist.checklistDialogSecondaryAction, - ), - type: ButtonType.secondary, - size: ButtonSize.large, - onPressed: () { - Navigator.of( - context, - rootNavigator: true, - ).pop(false); - }, - ) - ], - ); - }); - - if (shouldSubmit ?? false) { - router.maybePop(); - router.push(ReferralReconAcknowledgementRoute()); - } - }, - ),] - ), + if (shouldSubmit ?? false) { + router.maybePop(); + router.push(ReferralReconAcknowledgementRoute()); + } + }, + ), + ]), children: [ Form( key: checklistFormKey, //assigning key to form - child: DigitCard( - cardType: CardType.primary, - children: [ - Padding( + child: DigitCard(cardType: CardType.primary, children: [ + Padding( padding: const EdgeInsets.only(bottom: 8), child: Text( '${localizations.translate( - value.selectedServiceDefinition!.code - .toString(), + value.selectedServiceDefinition!.code.toString(), )} ${localizations.translate(i18.checklist.checklist)}', style: theme.textTheme.displayMedium, textAlign: TextAlign.left, ), ), ...initialAttributes!.map(( - e, - ) { + e, + ) { int index = (initialAttributes ?? []).indexOf(e); return Column(children: [ if (e.dataType == 'String' && !(e.code ?? '').contains('.')) ...[ - FormField( - validator: (value) { - if (((controller[index].text == '') && - e.required == true)) { - return localizations - .translate("${e.code}_REQUIRED"); - } - if (e.regex != null) { - return (RegExp(e.regex!).hasMatch(controller[index].text)) - ? null - : localizations - .translate("${e.code}_REGEX"); - } - - return null; - }, - builder: (FormFieldState field) { - return InputField( - onChange: (value) { - controller[index].text = value; - checklistFormKey.currentState?.validate(); - }, - errorMessage: field.errorText, - isRequired: false, - controller: controller[index], - inputFormatters: [ - FilteringTextInputFormatter.allow(RegExp( - "[a-zA-Z0-9]", - )), - ], - type: InputType.text, - label: localizations.translate( - '${value.selectedServiceDefinition?.code}.${e.code}', - ), - ); - }) + FormField(validator: (value) { + if (((controller[index].text == '') && + e.required == true)) { + return localizations + .translate("${e.code}_REQUIRED"); + } + if (e.regex != null) { + return (RegExp(e.regex!) + .hasMatch(controller[index].text)) + ? null + : localizations + .translate("${e.code}_REGEX"); + } + + return null; + }, builder: (FormFieldState field) { + return InputField( + onChange: (value) { + controller[index].text = value; + checklistFormKey.currentState?.validate(); + }, + errorMessage: field.errorText, + isRequired: false, + controller: controller[index], + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp( + "[a-zA-Z0-9]", + )), + ], + type: InputType.text, + label: localizations.translate( + '${value.selectedServiceDefinition?.code}.${e.code}', + ), + ); + }) ] else if (e.dataType == 'Number' && !(e.code ?? '').contains('.')) ...[ - FormField( - validator: (value) { - if (((controller[index].text == '') && e.required == true)) { - return localizations.translate( - i18.common.corecommonRequired, - ); - } - if (e.regex != null) { - return (RegExp(e.regex!).hasMatch(controller[index].text)) - ? null - : localizations.translate("${e.code}_REGEX"); - } - - return null; - }, - builder: (FormFieldState field) { - return InputField( - onChange: (value) { - controller[index].text = value; - checklistFormKey.currentState?.validate(); - }, - controller: controller[index], - errorMessage: field.errorText, - inputFormatters: [ - FilteringTextInputFormatter.allow(RegExp( - "[0-9]", - )), - ], - type: InputType.text, - keyboardType: TextInputType.number, - label: '${localizations.translate( - '${value.selectedServiceDefinition?.code}.${e.code}', - ).trim()} ${e.required == true ? '*' : ''}', - ); - }) + FormField(validator: (value) { + if (((controller[index].text == '') && + e.required == true)) { + return localizations.translate( + i18.common.corecommonRequired, + ); + } + if (e.regex != null) { + return (RegExp(e.regex!) + .hasMatch(controller[index].text)) + ? null + : localizations + .translate("${e.code}_REGEX"); + } + + return null; + }, builder: (FormFieldState field) { + return InputField( + onChange: (value) { + controller[index].text = value; + checklistFormKey.currentState?.validate(); + }, + controller: controller[index], + errorMessage: field.errorText, + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp( + "[0-9]", + )), + ], + type: InputType.text, + keyboardType: TextInputType.number, + label: '${localizations.translate( + '${value.selectedServiceDefinition?.code}.${e.code}', + ).trim()} ${e.required == true ? '*' : ''}', + ); + }) ] else if (e.dataType == 'MultiValueList' && !(e.code ?? '').contains('.')) ...[ Align( @@ -353,70 +372,72 @@ class _ReferralReasonChecklistPageState return Column( children: e.values! .map((e) => Column( - children: [ - DigitCheckbox( - label: e, - value: controller[index] - .text - .split('.') - .contains(e), - onChanged: (value) { - context - .read() - .add( - ServiceSurveyFormEvent( - value: e.toString(), - submitTriggered: - submitTriggered, + children: [ + DigitCheckbox( + label: e, + value: controller[index] + .text + .split('.') + .contains(e), + onChanged: (value) { + context + .read() + .add( + ServiceSurveyFormEvent( + value: e.toString(), + submitTriggered: + submitTriggered, + ), + ); + final String ele; + var val = controller[index] + .text + .split('.'); + if (val.contains(e)) { + val.remove(e); + ele = val.join("."); + } else { + ele = + "${controller[index].text}.$e"; + } + controller[index].value = + TextEditingController + .fromValue( + TextEditingValue( + text: ele, + ), + ).value; + }, ), - ); - final String ele; - var val = controller[index] - .text - .split('.'); - if (val.contains(e)) { - val.remove(e); - ele = val.join("."); - } else { - ele = - "${controller[index].text}.$e"; - } - controller[index].value = - TextEditingController - .fromValue( - TextEditingValue( - text: ele, - ), - ).value; - }, - ), - SizedBox( - height: theme.spacerTheme.spacer3, - ) - ], - )).toList(), + SizedBox( + height: + theme.spacerTheme.spacer3, + ) + ], + )) + .toList(), ); }, ), - ] - else if (e.dataType == 'SingleValueList') ...[ + ] else if (e.dataType == 'SingleValueList') ...[ if (!(e.code ?? '').contains('.')) DigitCard( - cardType: CardType.primary, - children: [_buildChecklist( - e, - index, - value.selectedServiceDefinition, - context, - ),] - ), + cardType: CardType.primary, + children: [ + _buildChecklist( + e, + index, + value.selectedServiceDefinition, + context, + ), + ]), ], ]); }), const SizedBox( height: 15, - ),] - ), + ), + ]), ), ], ); @@ -429,11 +450,11 @@ class _ReferralReasonChecklistPageState } Widget _buildChecklist( - AttributesModel item, - int index, - ServiceDefinitionModel? selectedServiceDefinition, - BuildContext context, - ) { + AttributesModel item, + int index, + ServiceDefinitionModel? selectedServiceDefinition, + BuildContext context, + ) { final theme = Theme.of(context); /* Check the data type of the attribute*/ @@ -482,33 +503,37 @@ class _ReferralReasonChecklistPageState child: RadioList( radioButtons: item.values != null ? item.values! - .where((e) => e != i18.checklist.notSelectedKey) - .map((e) => RadioButtonModel( - code: e, - name: localizations.translate('CORE_COMMON_${e.trim().toUpperCase()}'), - )) - .toList() + .where((e) => e != i18.checklist.notSelectedKey) + .map((e) => RadioButtonModel( + code: e, + name: localizations.translate( + 'CORE_COMMON_${e.trim().toUpperCase()}'), + )) + .toList() : [], groupValue: controller[index].text.trim(), onChanged: (selectedValue) { context.read().add( - ServiceSurveyFormEvent( - value: Random().nextInt(100).toString(), - submitTriggered: submitTriggered, - ), - ); + ServiceSurveyFormEvent( + value: Random().nextInt(100).toString(), + submitTriggered: submitTriggered, + ), + ); setState(() { // Clear child controllers and update visibility for (final matchingChildItem in childItems) { - final childIndex = initialAttributes?.indexOf(matchingChildItem); + final childIndex = + initialAttributes?.indexOf(matchingChildItem); if (childIndex != null) { controller[childIndex].clear(); - visibleChecklistIndexes.removeWhere((v) => v == childIndex); + visibleChecklistIndexes + .removeWhere((v) => v == childIndex); } } // Update the current controller's value - controller[index].value = TextEditingController.fromValue( + controller[index].value = + TextEditingController.fromValue( TextEditingValue( text: selectedValue.code, ), @@ -517,7 +542,8 @@ class _ReferralReasonChecklistPageState if (excludedIndexes.isNotEmpty) { for (int i = 0; i < excludedIndexes.length; i++) { // Clear excluded child controllers - controller[excludedIndexes[i]].value = TextEditingController.fromValue( + controller[excludedIndexes[i]].value = + TextEditingController.fromValue( const TextEditingValue( text: '', ), @@ -543,7 +569,9 @@ class _ReferralReasonChecklistPageState child: Align( alignment: Alignment.centerLeft, child: Padding( - padding: EdgeInsets.only(left: theme.spacerTheme.spacer4,bottom: theme.spacerTheme.spacer3), + padding: EdgeInsets.only( + left: theme.spacerTheme.spacer4, + bottom: theme.spacerTheme.spacer3), child: Text( localizations.translate( i18.common.corecommonRequired, @@ -575,6 +603,8 @@ class _ReferralReasonChecklistPageState padding: const EdgeInsets.all(8.0), child: FormField( validator: (value) { + print(value); + print(controller[index].text); // Custom validation logic if (((controller[index].text == '') && item.required == true)) { return localizations.translate("${item.code}_REQUIRED"); @@ -588,7 +618,7 @@ class _ReferralReasonChecklistPageState return null; }, builder: (FormFieldState field) { - return InputField( + return InputField( onChange: (value) { controller[index].text = value; checklistFormKey.currentState?.validate(); @@ -607,80 +637,75 @@ class _ReferralReasonChecklistPageState ], ); }, - ), ); } else if (item.dataType == 'Number') { - return FormField( - validator: (value) { - if (((controller[index].text == '') && item.required == true)) { - return localizations.translate( - i18.common.corecommonRequired, - ); - } - if (item.regex != null) { - return (RegExp(item.regex!).hasMatch(controller[index].text)) - ? null - : localizations.translate("${item.code}_REGEX"); - } - - return null; + return FormField(validator: (value) { + if (((controller[index].text == '') && item.required == true)) { + return localizations.translate( + i18.common.corecommonRequired, + ); + } + if (item.regex != null) { + return (RegExp(item.regex!).hasMatch(controller[index].text)) + ? null + : localizations.translate("${item.code}_REGEX"); + } + + return null; + }, builder: (FormFieldState field) { + return InputField( + onChange: (value) { + controller[index].text = value; + checklistFormKey.currentState?.validate(); }, - builder: (FormFieldState field) { - return InputField( - onChange: (value) { - controller[index].text = value; - checklistFormKey.currentState?.validate(); - }, - controller: controller[index], - errorMessage: field.errorText, - inputFormatters: [ - FilteringTextInputFormatter.allow(RegExp( - "[0-9]", - )), - ], - type: InputType.text, - keyboardType: TextInputType.number, - label: '${localizations.translate( + controller: controller[index], + errorMessage: field.errorText, + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp( + "[0-9]", + )), + ], + type: InputType.text, + keyboardType: TextInputType.number, + label: '${localizations.translate( '${selectedServiceDefinition?.code}.${item.code}', ).trim()} ${item.required == true ? '*' : ''}', - ); - }); + ); + }); } else if (item.dataType == 'MultiValueList') { - return Column( - children: [ - Align( - alignment: Alignment.topLeft, - child: Padding( - padding: const EdgeInsets.all(8), - child: Column( - children: [ - Text( - '${localizations.translate( - '${selectedServiceDefinition?.code}.${item.code}', - )} ${item.required == true ? '*' : ''}', - style: theme.textTheme.headlineSmall, - ), - ], + return Column(children: [ + Align( + alignment: Alignment.topLeft, + child: Padding( + padding: const EdgeInsets.all(8), + child: Column( + children: [ + Text( + '${localizations.translate( + '${selectedServiceDefinition?.code}.${item.code}', + )} ${item.required == true ? '*' : ''}', + style: theme.textTheme.headlineSmall, ), - ), + ], ), - BlocBuilder( - builder: (context, state) { - return Column( - children: item.values! - .map((e) => Column( + ), + ), + BlocBuilder(builder: (context, state) { + return Column( + children: item.values! + .map((e) => Column( children: [ DigitCheckbox( label: e, value: controller[index].text.split('.').contains(e), onChanged: (value) { context.read().add( - ServiceSurveyFormEvent( - value: e.toString(), - submitTriggered: submitTriggered, - ), - ); + ServiceSurveyFormEvent( + value: e.toString(), + submitTriggered: submitTriggered, + ), + ); final String ele; var val = controller[index].text.split('.'); if (val.contains(e)) { @@ -691,19 +716,21 @@ class _ReferralReasonChecklistPageState } controller[index].value = TextEditingController.fromValue( - TextEditingValue( - text: ele, - ), - ).value; - },), + TextEditingValue( + text: ele, + ), + ).value; + }, + ), SizedBox( height: theme.spacerTheme.spacer3, ) ], - )).toList(), - ); - } - )]); + )) + .toList(), + ); + }) + ]); } else { return const SizedBox.shrink(); } @@ -711,11 +738,11 @@ class _ReferralReasonChecklistPageState // Function to build nested checklists for child attributes Widget _buildNestedChecklists( - String parentCode, - int parentIndex, - String parentControllerValue, - BuildContext context, - ) { + String parentCode, + int parentIndex, + String parentControllerValue, + BuildContext context, + ) { // Retrieve child items for the given parent code final childItems = getNextQuestions( parentCode, @@ -748,9 +775,9 @@ class _ReferralReasonChecklistPageState // Function to get the next questions (child attributes) based on a parent code List getNextQuestions( - String parentCode, - List checklistItems, - ) { + String parentCode, + List checklistItems, + ) { final childCodePrefix = '$parentCode.'; final nextCheckLists = checklistItems.where((item) { return item.code!.startsWith(childCodePrefix) && @@ -770,4 +797,4 @@ class _ReferralReasonChecklistPageState return dotCount; } -} \ No newline at end of file +} diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart index 561127105..332fe102c 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart @@ -63,7 +63,6 @@ class _RecordReferralDetailsPageState @override Widget build(BuildContext context) { final theme = Theme.of(context); - // final router = context.router; return BlocBuilder( @@ -105,8 +104,8 @@ class _RecordReferralDetailsPageState builder: (context, serviceState) { return serviceState.maybeWhen( orElse: () => DigitCard( - padding: EdgeInsets.all( - theme.spacerTheme.spacer2), + padding: + EdgeInsets.all(theme.spacerTheme.spacer2), cardType: CardType.primary, children: [ ValueListenableBuilder( @@ -201,9 +200,10 @@ class _RecordReferralDetailsPageState .isEmpty) { Toast.showToast( context, - message: localizations.translate(i18 - .referralReconciliation - .noChecklistFound), + message: localizations + .translate(i18 + .referralReconciliation + .noChecklistFound), type: ToastType.error, ); } else { @@ -426,7 +426,8 @@ class _RecordReferralDetailsPageState ]), serviceSearch: (value1, value2, value3) { return DigitCard( - padding: EdgeInsets.all(theme.spacerTheme.spacer2), + padding: EdgeInsets.all( + theme.spacerTheme.spacer2), cardType: CardType.primary, children: [ ValueListenableBuilder( @@ -460,7 +461,8 @@ class _RecordReferralDetailsPageState .control(_cycleKey) .setErrors( {'': true}); - } if (form + } + if (form .control(_genderKey) .value == null) { @@ -541,9 +543,10 @@ class _RecordReferralDetailsPageState .isEmpty) { Toast.showToast( context, - message: localizations.translate(i18 - .referralReconciliation - .noChecklistFound), + message: localizations + .translate(i18 + .referralReconciliation + .noChecklistFound), type: ToastType.error, ); } else { @@ -795,8 +798,8 @@ class _RecordReferralDetailsPageState i18.referralReconciliation .referralDetails, ), - style: theme - .textTheme.displayMedium, + style: + theme.textTheme.displayMedium, ), ), ], @@ -804,9 +807,8 @@ class _RecordReferralDetailsPageState ReactiveWrapperField( formControlName: _cycleKey, validationMessages: { - '': (_) => localizations - .translate(i18.common - .corecommonRequired), + '': (_) => localizations.translate( + i18.common.corecommonRequired), }, showErrors: (control) => control.invalid && @@ -815,8 +817,7 @@ class _RecordReferralDetailsPageState builder: (field) { return LabeledField( isRequired: true, - label: localizations - .translate( + label: localizations.translate( i18.referralReconciliation .selectCycle, ), @@ -824,21 +825,19 @@ class _RecordReferralDetailsPageState readOnly: viewOnly, onSelect: (val) => { form - .control( - _cycleKey) + .control(_cycleKey) .markAsTouched(), form - .control( - _cycleKey) + .control(_cycleKey) .value = val.code, }, - selectedOption: widget - .cycles + selectedOption: widget.cycles .map((item) => DropdownItem( name: - '${localizations.translate(i18.referralReconciliation.cycle) } $item', - code: item.toString(), + '${localizations.translate(i18.referralReconciliation.cycle)} $item', + code: + item.toString(), )) .firstWhere( (item) => @@ -852,15 +851,13 @@ class _RecordReferralDetailsPageState name: '', code: ''), ), - errorMessage: - field.errorText, + errorMessage: field.errorText, items: widget.cycles .map( - (item) => - DropdownItem( - name: - '${localizations.translate(i18.referralReconciliation.cycle) } $item', - code: item.toString(), + (item) => DropdownItem( + name: + '${localizations.translate(i18.referralReconciliation.cycle)} $item', + code: item.toString(), ), ) .toList(), @@ -870,12 +867,10 @@ class _RecordReferralDetailsPageState validationMessages: { 'required': (_) => localizations.translate( - i18.common - .corecommonRequired, + i18.common.corecommonRequired, ), }, - formControlName: - _nameOfChildKey, + formControlName: _nameOfChildKey, showErrors: (control) => control.invalid && control.touched, @@ -883,39 +878,32 @@ class _RecordReferralDetailsPageState builder: (field) { return LabeledField( isRequired: true, - label: - localizations.translate( + label: localizations.translate( i18.referralReconciliation .nameOfTheChildLabel, ), child: DigitTextFormInput( onChange: (val) => { form - .control( - _nameOfChildKey) + .control(_nameOfChildKey) .markAsTouched(), form - .control( - _nameOfChildKey) + .control(_nameOfChildKey) .value = val, }, - errorMessage: - field.errorText, + errorMessage: field.errorText, readOnly: viewOnly, initialValue: form - .control( - _nameOfChildKey) + .control(_nameOfChildKey) .value, ), ); }), ReactiveWrapperField( - formControlName: - _beneficiaryIdKey, + formControlName: _beneficiaryIdKey, builder: (field) { return LabeledField( - label: - localizations.translate( + label: localizations.translate( i18.referralReconciliation .beneficiaryIdLabel, ), @@ -931,37 +919,31 @@ class _RecordReferralDetailsPageState .value = val, }, initialValue: form - .control( - _beneficiaryIdKey) + .control(_beneficiaryIdKey) .value, readOnly: viewOnly, ), ); }), ReactiveWrapperField( - formControlName: - _referralCodeKey, + formControlName: _referralCodeKey, builder: (field) { return LabeledField( - label: - localizations.translate( + label: localizations.translate( i18.referralReconciliation .referralCodeLabel, ), child: DigitTextFormInput( onChange: (val) => { form - .control( - _referralCodeKey) + .control(_referralCodeKey) .markAsTouched(), form - .control( - _referralCodeKey) + .control(_referralCodeKey) .value = val, }, initialValue: form - .control( - _referralCodeKey) + .control(_referralCodeKey) .value, readOnly: viewOnly, ), @@ -972,8 +954,7 @@ class _RecordReferralDetailsPageState validationMessages: { 'required': (_) => localizations.translate( - i18.common - .corecommonRequired, + i18.common.corecommonRequired, ), 'max': (_) => localizations .translate( @@ -1005,8 +986,7 @@ class _RecordReferralDetailsPageState builder: (field) { return LabeledField( isRequired: true, - label: - localizations.translate( + label: localizations.translate( i18.common.ageInMonths, ), child: DigitTextFormInput( @@ -1014,9 +994,7 @@ class _RecordReferralDetailsPageState form .control(_ageKey) .markAsTouched(), - form - .control(_ageKey) - .value = + form.control(_ageKey).value = int.tryParse(val), }, keyboardType: @@ -1029,8 +1007,7 @@ class _RecordReferralDetailsPageState ], readOnly: viewOnly, initialValue: form - .control( - _ageKey) + .control(_ageKey) .value == null ? "" @@ -1038,17 +1015,14 @@ class _RecordReferralDetailsPageState .control(_ageKey) .value .toString(), - errorMessage: - field.errorText, + errorMessage: field.errorText, ), ); }), ReactiveWrapperField( validationMessages: { - '': (_) => - localizations.translate( - i18.common - .corecommonRequired, + '': (_) => localizations.translate( + i18.common.corecommonRequired, ), }, formControlName: _genderKey, @@ -1059,31 +1033,28 @@ class _RecordReferralDetailsPageState builder: (field) { return LabeledField( isRequired: true, - label: localizations - .translate( - i18.common - .genderLabelText, + label: localizations.translate( + i18.common.genderLabelText, ), child: Dropdown( readOnly: viewOnly, onSelect: (val) => { form - .control( - _genderKey) + .control(_genderKey) .markAsTouched(), form - .control( - _genderKey) + .control(_genderKey) .value = val.code, }, - errorMessage: - field.errorText, + errorMessage: field.errorText, selectedOption: ReferralReconSingleton() .genderOptions .map((item) => DropdownItem( - name: localizations.translate(item), + name: localizations + .translate( + item), code: item .toString(), )) @@ -1096,10 +1067,8 @@ class _RecordReferralDetailsPageState .value, orElse: () => const DropdownItem( - name: - '', - code: - ''), + name: '', + code: ''), ), items: ReferralReconSingleton() @@ -1107,7 +1076,9 @@ class _RecordReferralDetailsPageState .map( (item) => DropdownItem( - name: localizations.translate(item), + name: localizations + .translate( + item), code: item .toString(), ), @@ -1149,7 +1120,8 @@ class _RecordReferralDetailsPageState builder: (field) { return LabeledField( isRequired: true, - label: localizations.translate( + label: + localizations.translate( i18.referralReconciliation .reasonForReferralHeader, ), @@ -1166,18 +1138,25 @@ class _RecordReferralDetailsPageState .value = val.code; }, groupValue: form - .control( - _referralReason) - .value ?? "", - errorMessage: field.errorText, + .control( + _referralReason) + .value ?? + "", + errorMessage: + field.errorText, radioButtons: ReferralReconSingleton() .referralReasons .map((r) { return RadioButtonModel( - code: r.toString().toUpperCase(), + code: r + .toString() + .toUpperCase(), // Use the index as the code - name: localizations.translate(r.toString().toUpperCase()), + name: localizations + .translate(r + .toString() + .toUpperCase()), ); }).toList(), ), @@ -1356,4 +1335,3 @@ class _RecordReferralDetailsPageState }); } } - diff --git a/packages/referral_reconciliation/lib/pages/project_facility/project_facility_selection.dart b/packages/referral_reconciliation/lib/pages/project_facility/project_facility_selection.dart index 820248256..85b09d783 100644 --- a/packages/referral_reconciliation/lib/pages/project_facility/project_facility_selection.dart +++ b/packages/referral_reconciliation/lib/pages/project_facility/project_facility_selection.dart @@ -79,7 +79,8 @@ class _ReferralReconProjectFacilitySelectionPageState child: Column( children: [ Padding( - padding: EdgeInsets.all(theme.spacerTheme.spacer2), + padding: + EdgeInsets.all(theme.spacerTheme.spacer2), child: Align( alignment: Alignment.topLeft, child: Text( @@ -93,18 +94,22 @@ class _ReferralReconProjectFacilitySelectionPageState ), ReactiveWrapperField( formControlName: _facilityName, - builder: (field){ + builder: (field) { return LabeledField( label: '', child: DigitSearchFormInput( - onChange: (val) => { - form.control(_facilityName).markAsTouched(), - form.control(_facilityName).value = val, - }, - initialValue: form.control(_facilityName).value ?? "", + onChange: (val) => { + form + .control(_facilityName) + .markAsTouched(), + form.control(_facilityName).value = val, + }, + initialValue: + form.control(_facilityName).value ?? + "", ), - );} - ), + ); + }), ], ), ), @@ -146,9 +151,7 @@ class _ReferralReconProjectFacilitySelectionPageState right: theme.spacerTheme.spacer2, ), decoration: BoxDecoration( - color: Colors.white, - // color: - // DigitTheme.instance.colors.alabasterWhite, + color: DigitTheme.instance.colors.transparent, border: Border( bottom: BorderSide( // <--- left side diff --git a/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart b/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart index 5e765170a..f25d9a190 100644 --- a/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart +++ b/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart @@ -46,11 +46,11 @@ class _SearchReferralReconciliationsPageState searchReferralsBloc = SearchReferralsBloc( const SearchReferralsState(), referralReconDataRepository: - context.repository(context), + context.repository(context), ); context.read().add( - const DigitScannerEvent.handleScanner(), - ); + const DigitScannerEvent.handleScanner(), + ); super.initState(); } @@ -59,7 +59,7 @@ class _SearchReferralReconciliationsPageState final theme = Theme.of(context); return KeyboardVisibilityBuilder( builder: (context, isKeyboardVisible) => BlocProvider< - SearchReferralsBloc>( + SearchReferralsBloc>( create: (context) => searchReferralsBloc! ..add( const SearchReferralsClearEvent(), @@ -71,16 +71,16 @@ class _SearchReferralReconciliationsPageState context .read() .add(SearchReferralsEvent.searchByTag( - tag: scannerState.qrCodes.last, - )); + tag: scannerState.qrCodes.last, + )); } }, child: BlocProvider( create: (_) => ServiceBloc( - const ServiceEmptyState(), - serviceDataRepository: context.repository< - ServiceModel, ServiceSearchModel>(context), - ), + const ServiceEmptyState(), + serviceDataRepository: context.repository< + ServiceModel, ServiceSearchModel>(context), + ), child: BlocBuilder( builder: (context, searchState) { @@ -91,11 +91,13 @@ class _SearchReferralReconciliationsPageState slivers: [ SliverToBoxAdapter( child: Padding( - padding: EdgeInsets.all(theme.spacerTheme.spacer2), + padding: + EdgeInsets.all(theme.spacerTheme.spacer2), child: Column( children: [ Padding( - padding: EdgeInsets.all(theme.spacerTheme.spacer2), + padding: EdgeInsets.all( + theme.spacerTheme.spacer2), child: Align( alignment: Alignment.topLeft, child: Text( @@ -104,7 +106,7 @@ class _SearchReferralReconciliationsPageState .searchReferralsHeader, ), style: - theme.textTheme.displayMedium, + theme.textTheme.displayMedium, textAlign: TextAlign.left, ), ), @@ -118,7 +120,7 @@ class _SearchReferralReconciliationsPageState .referralSearchHintText, ), textCapitalization: - TextCapitalization.words, + TextCapitalization.words, onChanged: (value) { final bloc = context .read(); @@ -131,19 +133,21 @@ class _SearchReferralReconciliationsPageState } else { bloc.add( SearchReferralsByNameEvent( - searchText: value.trim(), - )); + searchText: value.trim(), + )); } }, ), ], ), - SizedBox(height: theme.spacerTheme.spacer2 * 2), + SizedBox( + height: + theme.spacerTheme.spacer2 * 2), if (searchState.resultsNotFound) InfoCard( - title: localizations.translate( - i18.referralReconciliation - .beneficiaryInfoTitle), + title: localizations.translate(i18 + .referralReconciliation + .beneficiaryInfoTitle), type: InfoType.info, description: localizations.translate( i18.referralReconciliation @@ -156,9 +160,9 @@ class _SearchReferralReconciliationsPageState ), SliverList( delegate: SliverChildBuilderDelegate( - (ctx, index) { + (ctx, index) { final i = - searchState.referrals.elementAt(index); + searchState.referrals.elementAt(index); return Container( margin: EdgeInsets.only( @@ -167,21 +171,21 @@ class _SearchReferralReconciliationsPageState hfReferralModel: i, onOpenPressed: () { context.read().add( - ServiceSearchEvent( - serviceSearchModel: - ServiceSearchModel( - clientId: - i.clientReferenceId, - ), - ), - ); + ServiceSearchEvent( + serviceSearchModel: + ServiceSearchModel( + clientId: + i.clientReferenceId, + ), + ), + ); context.router.push( HFCreateReferralWrapperRoute( viewOnly: true, referralReconciliation: i, projectId: - ReferralReconSingleton() - .projectId, + ReferralReconSingleton() + .projectId, cycles: ReferralReconSingleton() .cycles, ), @@ -199,10 +203,8 @@ class _SearchReferralReconciliationsPageState ))), bottomNavigationBar: Card( margin: const EdgeInsets.all(0), - child: Container( - padding: - EdgeInsets.all(theme.spacerTheme.spacer2), + padding: EdgeInsets.all(theme.spacerTheme.spacer2), child: Column( mainAxisSize: MainAxisSize.min, children: [ @@ -213,10 +215,8 @@ class _SearchReferralReconciliationsPageState VoidCallback? onPressed; onPressed = () { - FocusManager.instance.primaryFocus - ?.unfocus(); - final bloc = - context.read(); + FocusManager.instance.primaryFocus?.unfocus(); + final bloc = context.read(); router.push( HFCreateReferralWrapperRoute( viewOnly: false, @@ -225,8 +225,7 @@ class _SearchReferralReconciliationsPageState name: state.searchQuery, beneficiaryId: state.tag, ), - projectId: - ReferralReconSingleton().projectId, + projectId: ReferralReconSingleton().projectId, cycles: ReferralReconSingleton().cycles, ), ); @@ -238,13 +237,13 @@ class _SearchReferralReconciliationsPageState return Button( size: ButtonSize.large, label: localizations.translate( - i18.referralReconciliation - .createReferralLabel, + i18.referralReconciliation.createReferralLabel, ), mainAxisSize: MainAxisSize.max, - isDisabled: !(searchController.text.isNotEmpty && searchController.text.length>=2), - onPressed: (){ - if(onPressed!=null){ + isDisabled: !(searchController.text.isNotEmpty && + searchController.text.length >= 2), + onPressed: () { + if (onPressed != null) { onPressed(); } }, @@ -252,15 +251,17 @@ class _SearchReferralReconciliationsPageState ); }, ), - SizedBox(height: theme.spacerTheme.spacer2,), + SizedBox( + height: theme.spacerTheme.spacer2, + ), Button( size: ButtonSize.large, - label: localizations.translate( - i18.referralReconciliation.scannerLabel), + label: localizations + .translate(i18.referralReconciliation.scannerLabel), onPressed: () async { context.read().add( - const DigitScannerEvent.handleScanner(), - ); + const DigitScannerEvent.handleScanner(), + ); context.router.push(DigitScannerRoute( quantity: 1, isGS1code: false, @@ -277,4 +278,4 @@ class _SearchReferralReconciliationsPageState ), ))); } -} \ No newline at end of file +} diff --git a/packages/referral_reconciliation/lib/widgets/back_navigation_help_header.dart b/packages/referral_reconciliation/lib/widgets/back_navigation_help_header.dart index 7ff892205..0a5f695c7 100644 --- a/packages/referral_reconciliation/lib/widgets/back_navigation_help_header.dart +++ b/packages/referral_reconciliation/lib/widgets/back_navigation_help_header.dart @@ -26,7 +26,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { final theme = Theme.of(context); return Padding( - padding: EdgeInsets.all(theme.spacerTheme.spacer2/2), + padding: EdgeInsets.all(theme.spacerTheme.spacer2 / 2), child: Row( children: [ Expanded( @@ -55,7 +55,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { ], ), ), - SizedBox(width: showHelp ? theme.spacerTheme.spacer2 *2 : 0), + SizedBox(width: showHelp ? theme.spacerTheme.spacer2 * 2 : 0), if (showHelp) TextButton( style: TextButton.styleFrom(padding: EdgeInsets.zero), diff --git a/packages/referral_reconciliation/lib/widgets/beneficiary_card.dart b/packages/referral_reconciliation/lib/widgets/beneficiary_card.dart index e3c793729..1eb514dde 100644 --- a/packages/referral_reconciliation/lib/widgets/beneficiary_card.dart +++ b/packages/referral_reconciliation/lib/widgets/beneficiary_card.dart @@ -39,19 +39,39 @@ class ReferralBeneficiaryCard extends StatelessWidget { offstage: status == null, child: status == ReferralReconEnums.visited.toValue() ? Row( - children: [ - Icon(Icons.check_circle, color: theme.colorTheme.alert.success,), - SizedBox(width: theme.spacerTheme.spacer1,), - Text(ReferralReconLocalization.of(context) - .translate(status.toString()),style: TextStyle(color: Colors.green,fontSize: theme.spacerTheme.spacer4),) - ], - ) + children: [ + Icon( + Icons.check_circle, + color: theme.colorTheme.alert.success, + ), + SizedBox( + width: theme.spacerTheme.spacer1, + ), + Text( + ReferralReconLocalization.of(context) + .translate(status.toString()), + style: TextStyle( + color: Colors.green, + fontSize: theme.spacerTheme.spacer4), + ) + ], + ) : Row( children: [ - Icon(Icons.info_rounded, color: theme.colorTheme.alert.error,), - SizedBox(width: theme.spacerTheme.spacer1,), - Text(ReferralReconLocalization.of(context) - .translate(status.toString()), style: TextStyle(color: Colors.red,fontSize: theme.spacerTheme.spacer4),) + Icon( + Icons.info_rounded, + color: theme.colorTheme.alert.error, + ), + SizedBox( + width: theme.spacerTheme.spacer1, + ), + Text( + ReferralReconLocalization.of(context) + .translate(status.toString()), + style: TextStyle( + color: Colors.red, + fontSize: theme.spacerTheme.spacer4), + ) ], ), ), diff --git a/packages/referral_reconciliation/lib/widgets/view_referral_card.dart b/packages/referral_reconciliation/lib/widgets/view_referral_card.dart index 2a4682e0c..b1f997e33 100644 --- a/packages/referral_reconciliation/lib/widgets/view_referral_card.dart +++ b/packages/referral_reconciliation/lib/widgets/view_referral_card.dart @@ -57,32 +57,31 @@ class _ViewReferralCardState extends LocalizedState { .value .toString() ?? ''); - return DigitCard( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - width: MediaQuery.of(context).size.width / 1.8, - child: ReferralBeneficiaryCard( - description: '', - subtitle: - '${localizations.translate(i18.referralReconciliation.dateOfEvaluationLabel)}: ${dateOfEvaluation != null ? DigitDateUtils.getDateFromTimestamp(dateOfEvaluation, dateFormat: defaultDateFormat) : localizations.translate(i18.common.coreCommonNA)}', - title: hfReferralModel.name.toString(), - ), + return DigitCard(children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + width: MediaQuery.of(context).size.width / 1.8, + child: ReferralBeneficiaryCard( + description: '', + subtitle: + '${localizations.translate(i18.referralReconciliation.dateOfEvaluationLabel)}: ${dateOfEvaluation != null ? DigitDateUtils.getDateFromTimestamp(dateOfEvaluation, dateFormat: defaultDateFormat) : localizations.translate(i18.common.coreCommonNA)}', + title: hfReferralModel.name.toString(), ), - Flexible( - child: Button( - size: ButtonSize.large, - type: ButtonType.secondary, - label: localizations - .translate(i18.referralReconciliation.iconLabel), - onPressed: widget.onOpenPressed ?? () {}, - ), + ), + Flexible( + child: Button( + size: ButtonSize.large, + type: ButtonType.secondary, + label: + localizations.translate(i18.referralReconciliation.iconLabel), + onPressed: widget.onOpenPressed ?? () {}, ), - ], - ),] - ); + ), + ], + ), + ]); } } From 7cd45c9e18dcf862a42e3ed6810c8062dea611e6 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Mon, 11 Nov 2024 17:15:15 +0530 Subject: [PATCH 137/241] merge conflict changes --- .../pubspec.lock | 260 +++++- .../pubspec.yaml | 1 - .../record_reason_checklist.dart | 787 +++++++++--------- .../lib/utils/date_utils.dart | 34 + packages/referral_reconciliation/pubspec.lock | 359 +++++++- packages/referral_reconciliation/pubspec.yaml | 4 +- 6 files changed, 1008 insertions(+), 437 deletions(-) create mode 100644 packages/referral_reconciliation/lib/utils/date_utils.dart diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 0ec0517ab..f94e9571d 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -414,6 +414,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" + url: "https://pub.dev" + source: hosted + version: "1.0.2" cupertino_icons: dependency: "direct main" description: @@ -433,9 +441,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../../packages/dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -513,7 +523,7 @@ packages: path: "../../packages/digit_dss" relative: true source: path - version: "1.0.1" + version: "1.0.2" digit_firebase_services: dependency: "direct main" description: @@ -542,6 +552,14 @@ packages: relative: true source: path version: "1.0.0" + digit_ui_components: + dependency: transitive + description: + name: digit_ui_components + sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae + url: "https://pub.dev" + source: hosted + version: "0.0.1+7" dio: dependency: "direct main" description: @@ -566,6 +584,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.1" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" drift: dependency: "direct main" description: @@ -638,6 +664,46 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 + url: "https://pub.dev" + source: hosted + version: "8.0.0+1" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + url: "https://pub.dev" + source: hosted + version: "0.9.2+1" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 + url: "https://pub.dev" + source: hosted + version: "0.9.4" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" firebase_core: dependency: transitive description: @@ -744,6 +810,30 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" flutter_focus_watcher: dependency: transitive description: @@ -917,6 +1007,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" flutter_svg: dependency: "direct main" description: @@ -988,6 +1086,54 @@ packages: description: flutter source: sdk version: "0.0.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + url: "https://pub.dev" + source: hosted + version: "4.3.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: bc2aca02423ad429cb0556121f56e60360a2b7d694c8570301d06ea0c00732fd + url: "https://pub.dev" + source: hosted + version: "2.3.7" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -1076,6 +1222,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.1.3" + html: + dependency: transitive + description: + name: html + sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" + url: "https://pub.dev" + source: hosted + version: "0.15.5" http: dependency: transitive description: @@ -1108,6 +1262,70 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.7" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" + url: "https://pub.dev" + source: hosted + version: "1.0.8" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" + url: "https://pub.dev" + source: hosted + version: "0.8.9+6" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 + url: "https://pub.dev" + source: hosted + version: "0.8.9+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b + url: "https://pub.dev" + source: hosted + version: "2.9.3" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" integration_test: dependency: "direct dev" description: flutter @@ -1344,6 +1562,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_parsing: dependency: transitive description: @@ -1922,6 +2148,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" upower: dependency: transitive description: @@ -2034,6 +2276,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" vm_service: dependency: transitive description: @@ -2139,5 +2389,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <4.0.0" + dart: ">=3.2.0 <=3.9.0" flutter: ">=3.16.0" diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 835f45ca2..8515fc0a3 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -18,7 +18,6 @@ dependencies: sqlite3_flutter_libs: ^0.5.10 path_provider: ^2.0.11 path: ^1.8.2 - digit_ui_components: 0.0.3-beta digit_components: ^1.0.2 auto_route: ^7.8.4 flutter_bloc: ^8.1.1 diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart index 63062ca02..484f89f72 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart @@ -1,19 +1,19 @@ import 'dart:math'; import 'package:auto_route/auto_route.dart'; +import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/input_wrapper.dart'; import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; -import 'package:survey_form/survey_form.dart'; -import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:group_radio_button/group_radio_button.dart'; import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart'; import 'package:referral_reconciliation/utils/constants.dart'; +import 'package:survey_form/survey_form.dart'; import '../../blocs/referral_recon_service_definition.dart'; import '../../utils/date_utils.dart'; @@ -50,11 +50,11 @@ class _ReferralReasonChecklistPageState @override void initState() { context.read().add( - ServiceSurveyFormEvent( - value: Random().nextInt(100).toString(), - submitTriggered: true, - ), - ); + ServiceSurveyFormEvent( + value: Random().nextInt(100).toString(), + submitTriggered: true, + ), + ); super.initState(); } @@ -89,254 +89,276 @@ class _ReferralReasonChecklistPageState return ScrollableContent( enableFixedButton: true, footer: DigitCard( - cardType: CardType.primary, - margin: EdgeInsets.all(theme.spacerTheme.spacer2), - padding: - EdgeInsets.all(theme.spacerTheme.spacer2), - children: [Button( - size: ButtonSize.large, - label: localizations.translate(i18.common.coreCommonSubmit), - type: ButtonType.primary, - mainAxisSize: MainAxisSize.max, - onPressed: () async { - final router = context.router; - submitTriggered = true; - - context.read().add( - const ServiceSurveyFormEvent( - value: '', - submitTriggered: true, - ), - ); - final isValid = - checklistFormKey.currentState?.validate(); - if (!isValid!) { - return; - } - final itemsAttributes = initialAttributes; - - for (int i = 0; i < controller.length; i++) { - if (itemsAttributes?[i].required == true && - ((itemsAttributes?[i].dataType == - 'SingleValueList' && - visibleChecklistIndexes - .any((e) => e == i) && - (controller[i].text == '')) || - (itemsAttributes?[i].dataType != - 'SingleValueList' && - (controller[i].text == '' && - !(widget.referralClientRefId != - null))))) { - return; - } - } + cardType: CardType.primary, + margin: EdgeInsets.all(theme.spacerTheme.spacer2), + padding: EdgeInsets.all(theme.spacerTheme.spacer2), + children: [ + Button( + size: ButtonSize.large, + label: localizations + .translate(i18.common.coreCommonSubmit), + type: ButtonType.primary, + mainAxisSize: MainAxisSize.max, + onPressed: () async { + final router = context.router; + submitTriggered = true; - final shouldSubmit = await showDialog( - context: context, - builder: (BuildContext ctx) { - return Popup( - title: localizations.translate( - i18.checklist.checklistDialogLabel, - ), - description: localizations.translate( - i18.checklist.checklistDialogDescription, - ), - onCrossTap: () { - Navigator.of( - context, - rootNavigator: true, - ).pop(false); - }, - actions: [ - Button( - label: localizations.translate( - i18.checklist.checklistDialogPrimaryAction, - ), - type: ButtonType.primary, - size: ButtonSize.large, - onPressed: () { - List attributes = []; - for (int i = 0; i < controller.length; i++) { - final attribute = initialAttributes; - attributes.add(ServiceAttributesModel( - attributeCode: '${attribute?[i].code}', - dataType: attribute?[i].dataType, - clientReferenceId: IdGen.i.identifier, - referenceId: widget.referralClientRefId, - value: attribute?[i].dataType != - 'SingleValueList' - ? controller[i] - .text - .toString() - .trim() - .isNotEmpty - ? controller[i].text.toString() - : '' - : visibleChecklistIndexes.contains(i) - ? controller[i].text.toString() - : i18.checklist.notSelectedKey, - rowVersion: 1, - tenantId: attribute?[i].tenantId, - additionalDetails: null)); - } - - context.read().add( - ServiceCreateEvent( - serviceModel: ServiceModel( - createdAt: DigitDateUtils - .getDateFromTimestamp( - DateTime.now() - .toLocal() - .millisecondsSinceEpoch, - dateFormat: defaultDateTimeFormat, + context.read().add( + const ServiceSurveyFormEvent( + value: '', + submitTriggered: true, + ), + ); + final isValid = + checklistFormKey.currentState?.validate(); + if (!isValid!) { + return; + } + final itemsAttributes = initialAttributes; + + for (int i = 0; i < controller.length; i++) { + if (itemsAttributes?[i].required == true && + ((itemsAttributes?[i].dataType == + 'SingleValueList' && + visibleChecklistIndexes + .any((e) => e == i) && + (controller[i].text == '')) || + (itemsAttributes?[i].dataType != + 'SingleValueList' && + (controller[i].text == '' && + !(widget.referralClientRefId != + null))))) { + return; + } + } + + final shouldSubmit = await showDialog( + context: context, + builder: (BuildContext ctx) { + return Popup( + title: localizations.translate( + i18.checklist.checklistDialogLabel, + ), + description: localizations.translate( + i18.checklist.checklistDialogDescription, + ), + onCrossTap: () { + Navigator.of( + context, + rootNavigator: true, + ).pop(false); + }, + actions: [ + Button( + label: localizations.translate( + i18.checklist + .checklistDialogPrimaryAction, ), - tenantId: value - .selectedServiceDefinition! - .tenantId, - clientId: widget.referralClientRefId - .toString(), - serviceDefId: value - .selectedServiceDefinition?.id, - attributes: attributes, - rowVersion: 1, - accountId: ReferralReconSingleton() - .projectId, - additionalDetails: - ReferralReconSingleton() - .boundary - ?.code, + type: ButtonType.primary, + size: ButtonSize.large, + onPressed: () { + List + attributes = []; + for (int i = 0; + i < controller.length; + i++) { + final attribute = initialAttributes; + attributes.add( + ServiceAttributesModel( + attributeCode: + '${attribute?[i].code}', + dataType: + attribute?[i].dataType, + clientReferenceId: + IdGen.i.identifier, + referenceId: widget + .referralClientRefId, + value: attribute?[i] + .dataType != + 'SingleValueList' + ? controller[i] + .text + .toString() + .trim() + .isNotEmpty + ? controller[i] + .text + .toString() + : '' + : visibleChecklistIndexes + .contains(i) + ? controller[i] + .text + .toString() + : i18.checklist + .notSelectedKey, + rowVersion: 1, + tenantId: + attribute?[i].tenantId, + additionalDetails: null)); + } + + context.read().add( + ServiceCreateEvent( + serviceModel: ServiceModel( + createdAt: DigitDateUtils + .getDateFromTimestamp( + DateTime.now() + .toLocal() + .millisecondsSinceEpoch, + dateFormat: + defaultDateTimeFormat, + ), + tenantId: value + .selectedServiceDefinition! + .tenantId, + clientId: widget + .referralClientRefId + .toString(), + serviceDefId: value + .selectedServiceDefinition + ?.id, + attributes: attributes, + rowVersion: 1, + accountId: + ReferralReconSingleton() + .projectId, + additionalDetails: { + "boundaryCode": + ReferralReconSingleton() + .boundary + ?.code + }, + ), + ), + ); + + Navigator.of( + context, + rootNavigator: true, + ).pop(true); + }, ), - ), + Button( + label: localizations.translate( + i18.checklist + .checklistDialogSecondaryAction, + ), + type: ButtonType.secondary, + size: ButtonSize.large, + onPressed: () { + Navigator.of( + context, + rootNavigator: true, + ).pop(false); + }, + ) + ], ); + }); - Navigator.of( - context, - rootNavigator: true, - ).pop(true); - }, - ), - Button( - label: localizations.translate( - i18.checklist.checklistDialogSecondaryAction, - ), - type: ButtonType.secondary, - size: ButtonSize.large, - onPressed: () { - Navigator.of( - context, - rootNavigator: true, - ).pop(false); - }, - ) - ], - ); - }); - - if (shouldSubmit ?? false) { - router.maybePop(); - router.push(ReferralReconAcknowledgementRoute()); - } - }, - ),] - ), + if (shouldSubmit ?? false) { + router.maybePop(); + router.push(ReferralReconAcknowledgementRoute()); + } + }, + ), + ]), children: [ Form( key: checklistFormKey, //assigning key to form - child: DigitCard( - cardType: CardType.primary, - children: [ - Padding( + child: DigitCard(cardType: CardType.primary, children: [ + Padding( padding: const EdgeInsets.only(bottom: 8), child: Text( '${localizations.translate( - value.selectedServiceDefinition!.code - .toString(), + value.selectedServiceDefinition!.code.toString(), )} ${localizations.translate(i18.checklist.checklist)}', style: theme.textTheme.displayMedium, textAlign: TextAlign.left, ), ), ...initialAttributes!.map(( - e, - ) { + e, + ) { int index = (initialAttributes ?? []).indexOf(e); return Column(children: [ if (e.dataType == 'String' && !(e.code ?? '').contains('.')) ...[ - FormField( - validator: (value) { - if (((controller[index].text == '') && - e.required == true)) { - return localizations - .translate("${e.code}_REQUIRED"); - } - if (e.regex != null) { - return (RegExp(e.regex!).hasMatch(controller[index].text)) - ? null - : localizations - .translate("${e.code}_REGEX"); - } - - return null; - }, - builder: (FormFieldState field) { - return InputField( - onChange: (value) { - controller[index].text = value; - checklistFormKey.currentState?.validate(); - }, - errorMessage: field.errorText, - isRequired: false, - controller: controller[index], - inputFormatters: [ - FilteringTextInputFormatter.allow(RegExp( - "[a-zA-Z0-9]", - )), - ], - type: InputType.text, - label: localizations.translate( - '${value.selectedServiceDefinition?.code}.${e.code}', - ), - ); - }) + FormField(validator: (value) { + if (((controller[index].text == '') && + e.required == true)) { + return localizations + .translate("${e.code}_REQUIRED"); + } + if (e.regex != null) { + return (RegExp(e.regex!) + .hasMatch(controller[index].text)) + ? null + : localizations + .translate("${e.code}_REGEX"); + } + + return null; + }, builder: (FormFieldState field) { + return InputField( + onChange: (value) { + controller[index].text = value; + checklistFormKey.currentState?.validate(); + }, + errorMessage: field.errorText, + isRequired: false, + controller: controller[index], + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp( + "[a-zA-Z0-9]", + )), + ], + type: InputType.text, + label: localizations.translate( + '${value.selectedServiceDefinition?.code}.${e.code}', + ), + ); + }) ] else if (e.dataType == 'Number' && !(e.code ?? '').contains('.')) ...[ - FormField( - validator: (value) { - if (((controller[index].text == '') && e.required == true)) { - return localizations.translate( - i18.common.corecommonRequired, - ); - } - if (e.regex != null) { - return (RegExp(e.regex!).hasMatch(controller[index].text)) - ? null - : localizations.translate("${e.code}_REGEX"); - } - - return null; - }, - builder: (FormFieldState field) { - return InputField( - onChange: (value) { - controller[index].text = value; - checklistFormKey.currentState?.validate(); - }, - controller: controller[index], - errorMessage: field.errorText, - inputFormatters: [ - FilteringTextInputFormatter.allow(RegExp( - "[0-9]", - )), - ], - type: InputType.text, - keyboardType: TextInputType.number, - label: '${localizations.translate( - '${value.selectedServiceDefinition?.code}.${e.code}', - ).trim()} ${e.required == true ? '*' : ''}', - ); - }) + FormField(validator: (value) { + if (((controller[index].text == '') && + e.required == true)) { + return localizations.translate( + i18.common.corecommonRequired, + ); + } + if (e.regex != null) { + return (RegExp(e.regex!) + .hasMatch(controller[index].text)) + ? null + : localizations + .translate("${e.code}_REGEX"); + } + + return null; + }, builder: (FormFieldState field) { + return InputField( + onChange: (value) { + controller[index].text = value; + checklistFormKey.currentState?.validate(); + }, + controller: controller[index], + errorMessage: field.errorText, + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp( + "[0-9]", + )), + ], + type: InputType.text, + keyboardType: TextInputType.number, + label: '${localizations.translate( + '${value.selectedServiceDefinition?.code}.${e.code}', + ).trim()} ${e.required == true ? '*' : ''}', + ); + }) ] else if (e.dataType == 'MultiValueList' && !(e.code ?? '').contains('.')) ...[ Align( @@ -360,70 +382,72 @@ class _ReferralReasonChecklistPageState return Column( children: e.values! .map((e) => Column( - children: [ - DigitCheckbox( - label: e, - value: controller[index] - .text - .split('.') - .contains(e), - onChanged: (value) { - context - .read() - .add( - ServiceSurveyFormEvent( - value: e.toString(), - submitTriggered: - submitTriggered, + children: [ + DigitCheckbox( + label: e, + value: controller[index] + .text + .split('.') + .contains(e), + onChanged: (value) { + context + .read() + .add( + ServiceSurveyFormEvent( + value: e.toString(), + submitTriggered: + submitTriggered, + ), + ); + final String ele; + var val = controller[index] + .text + .split('.'); + if (val.contains(e)) { + val.remove(e); + ele = val.join("."); + } else { + ele = + "${controller[index].text}.$e"; + } + controller[index].value = + TextEditingController + .fromValue( + TextEditingValue( + text: ele, + ), + ).value; + }, ), - ); - final String ele; - var val = controller[index] - .text - .split('.'); - if (val.contains(e)) { - val.remove(e); - ele = val.join("."); - } else { - ele = - "${controller[index].text}.$e"; - } - controller[index].value = - TextEditingController - .fromValue( - TextEditingValue( - text: ele, - ), - ).value; - }, - ), - SizedBox( - height: theme.spacerTheme.spacer3, - ) - ], - )).toList(), + SizedBox( + height: + theme.spacerTheme.spacer3, + ) + ], + )) + .toList(), ); }, ), - ] - else if (e.dataType == 'SingleValueList') ...[ + ] else if (e.dataType == 'SingleValueList') ...[ if (!(e.code ?? '').contains('.')) DigitCard( - cardType: CardType.primary, - children: [_buildChecklist( - e, - index, - value.selectedServiceDefinition, - context, - ),] - ), + cardType: CardType.primary, + children: [ + _buildChecklist( + e, + index, + value.selectedServiceDefinition, + context, + ), + ]), ], ]); }), const SizedBox( height: 15, - ),] - ), + ), + ]), ), ], ); @@ -436,11 +460,11 @@ class _ReferralReasonChecklistPageState } Widget _buildChecklist( - AttributesModel item, - int index, - ServiceDefinitionModel? selectedServiceDefinition, - BuildContext context, - ) { + AttributesModel item, + int index, + ServiceDefinitionModel? selectedServiceDefinition, + BuildContext context, + ) { final theme = Theme.of(context); /* Check the data type of the attribute*/ @@ -486,16 +510,16 @@ class _ReferralReasonChecklistPageState groupValue: controller[index].text.trim(), onChanged: (value) { context.read().add( - ServiceSurveyFormEvent( - value: Random().nextInt(100).toString(), - submitTriggered: submitTriggered, - ), - ); + ServiceSurveyFormEvent( + value: Random().nextInt(100).toString(), + submitTriggered: submitTriggered, + ), + ); setState(() { // Clear child controllers and update visibility for (final matchingChildItem in childItems) { final childIndex = - initialAttributes?.indexOf(matchingChildItem); + initialAttributes?.indexOf(matchingChildItem); if (childIndex != null) { controller[childIndex].clear(); visibleChecklistIndexes @@ -506,20 +530,20 @@ class _ReferralReasonChecklistPageState // Update the current controller's value controller[index].value = TextEditingController.fromValue( - TextEditingValue( - text: value!, - ), - ).value; + TextEditingValue( + text: value!, + ), + ).value; if (excludedIndexes.isNotEmpty) { for (int i = 0; i < excludedIndexes.length; i++) { // Clear excluded child controllers controller[excludedIndexes[i]].value = TextEditingController.fromValue( - const TextEditingValue( - text: '', - ), - ).value; + const TextEditingValue( + text: '', + ), + ).value; } } @@ -528,8 +552,8 @@ class _ReferralReasonChecklistPageState }, items: item.values != null ? item.values! - .where((e) => e != i18.checklist.notSelectedKey) - .toList() + .where((e) => e != i18.checklist.notSelectedKey) + .toList() : [], itemBuilder: (item) => RadioButtonBuilder( localizations.translate( @@ -592,7 +616,7 @@ class _ReferralReasonChecklistPageState return null; }, builder: (FormFieldState field) { - return InputField( + return InputField( onChange: (value) { controller[index].text = value; checklistFormKey.currentState?.validate(); @@ -611,80 +635,75 @@ class _ReferralReasonChecklistPageState ], ); }, - ), ); } else if (item.dataType == 'Number') { - return FormField( - validator: (value) { - if (((controller[index].text == '') && item.required == true)) { - return localizations.translate( - i18.common.corecommonRequired, - ); - } - if (item.regex != null) { - return (RegExp(item.regex!).hasMatch(controller[index].text)) - ? null - : localizations.translate("${item.code}_REGEX"); - } - - return null; + return FormField(validator: (value) { + if (((controller[index].text == '') && item.required == true)) { + return localizations.translate( + i18.common.corecommonRequired, + ); + } + if (item.regex != null) { + return (RegExp(item.regex!).hasMatch(controller[index].text)) + ? null + : localizations.translate("${item.code}_REGEX"); + } + + return null; + }, builder: (FormFieldState field) { + return InputField( + onChange: (value) { + controller[index].text = value; + checklistFormKey.currentState?.validate(); }, - builder: (FormFieldState field) { - return InputField( - onChange: (value) { - controller[index].text = value; - checklistFormKey.currentState?.validate(); - }, - controller: controller[index], - errorMessage: field.errorText, - inputFormatters: [ - FilteringTextInputFormatter.allow(RegExp( - "[0-9]", - )), - ], - type: InputType.text, - keyboardType: TextInputType.number, - label: '${localizations.translate( + controller: controller[index], + errorMessage: field.errorText, + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp( + "[0-9]", + )), + ], + type: InputType.text, + keyboardType: TextInputType.number, + label: '${localizations.translate( '${selectedServiceDefinition?.code}.${item.code}', ).trim()} ${item.required == true ? '*' : ''}', - ); - }); + ); + }); } else if (item.dataType == 'MultiValueList') { - return Column( - children: [ - Align( - alignment: Alignment.topLeft, - child: Padding( - padding: const EdgeInsets.all(8), - child: Column( - children: [ - Text( - '${localizations.translate( - '${selectedServiceDefinition?.code}.${item.code}', - )} ${item.required == true ? '*' : ''}', - style: theme.textTheme.headlineSmall, - ), - ], + return Column(children: [ + Align( + alignment: Alignment.topLeft, + child: Padding( + padding: const EdgeInsets.all(8), + child: Column( + children: [ + Text( + '${localizations.translate( + '${selectedServiceDefinition?.code}.${item.code}', + )} ${item.required == true ? '*' : ''}', + style: theme.textTheme.headlineSmall, ), - ), + ], ), - BlocBuilder( - builder: (context, state) { - return Column( - children: item.values! - .map((e) => Column( + ), + ), + BlocBuilder(builder: (context, state) { + return Column( + children: item.values! + .map((e) => Column( children: [ DigitCheckbox( label: e, value: controller[index].text.split('.').contains(e), onChanged: (value) { context.read().add( - ServiceSurveyFormEvent( - value: e.toString(), - submitTriggered: submitTriggered, - ), - ); + ServiceSurveyFormEvent( + value: e.toString(), + submitTriggered: submitTriggered, + ), + ); final String ele; var val = controller[index].text.split('.'); if (val.contains(e)) { @@ -695,19 +714,21 @@ class _ReferralReasonChecklistPageState } controller[index].value = TextEditingController.fromValue( - TextEditingValue( - text: ele, - ), - ).value; - },), + TextEditingValue( + text: ele, + ), + ).value; + }, + ), SizedBox( height: theme.spacerTheme.spacer3, ) ], - )).toList(), - ); - } - )]); + )) + .toList(), + ); + }) + ]); } else { return const SizedBox.shrink(); } @@ -715,11 +736,11 @@ class _ReferralReasonChecklistPageState // Function to build nested checklists for child attributes Widget _buildNestedChecklists( - String parentCode, - int parentIndex, - String parentControllerValue, - BuildContext context, - ) { + String parentCode, + int parentIndex, + String parentControllerValue, + BuildContext context, + ) { // Retrieve child items for the given parent code final childItems = getNextQuestions( parentCode, @@ -752,9 +773,9 @@ class _ReferralReasonChecklistPageState // Function to get the next questions (child attributes) based on a parent code List getNextQuestions( - String parentCode, - List checklistItems, - ) { + String parentCode, + List checklistItems, + ) { final childCodePrefix = '$parentCode.'; final nextCheckLists = checklistItems.where((item) { return item.code!.startsWith(childCodePrefix) && @@ -774,4 +795,4 @@ class _ReferralReasonChecklistPageState return dotCount; } -} \ No newline at end of file +} diff --git a/packages/referral_reconciliation/lib/utils/date_utils.dart b/packages/referral_reconciliation/lib/utils/date_utils.dart new file mode 100644 index 000000000..6062af222 --- /dev/null +++ b/packages/referral_reconciliation/lib/utils/date_utils.dart @@ -0,0 +1,34 @@ +import 'package:intl/intl.dart'; +import 'package:flutter/foundation.dart'; + +class DigitDateUtils { + static String getDateString(DateTime date) { + final DateFormat formatter = DateFormat('yyyy-MM-dd'); + return formatter.format(date); + } + + // Function to parse the provided date string and return a DateTime object. + static DateTime? getFormattedDateToDateTime(String date) { + try { + DateFormat inputFormat; + inputFormat = date.contains('-') + ? DateFormat('dd-MM-yyyy') + : DateFormat('dd/MM/yyyy'); + DateTime inputDate = inputFormat.parse(date); + + return inputDate; + } on Exception catch (e) { + if (kDebugMode) { + print(e); + } + + return null; + } + } + + // Function to get a formatted date string from the provided timestamp in milliseconds. + static String getDateFromTimestamp(int timestamp, {String? dateFormat}) { + DateTime date = DateTime.fromMillisecondsSinceEpoch(timestamp); + return DateFormat(dateFormat ?? "dd/MM/yyyy").format(date); + } +} diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index 7de3b8b42..e1555925f 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -361,22 +361,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_code_metrics: - dependency: "direct dev" - description: - name: dart_code_metrics - sha256: "3dede3f7abc077a4181ec7445448a289a9ce08e2981e6a4d49a3fb5099d47e1f" - url: "https://pub.dev" - source: hosted - version: "5.7.6" - dart_code_metrics_presets: - dependency: transitive - description: - name: dart_code_metrics_presets - sha256: b71eadf02a3787ebd5c887623f83f6fdc204d45c75a081bd636c4104b3fd8b73 - url: "https://pub.dev" - source: hosted - version: "1.8.0" dart_mappable: dependency: "direct main" description: @@ -419,7 +403,7 @@ packages: source: hosted version: "0.4.1" digit_components: - dependency: "direct main" + dependency: "direct overridden" description: path: "../digit_components" relative: true @@ -439,6 +423,14 @@ packages: relative: true source: path version: "1.0.3+1" + digit_ui_components: + dependency: "direct main" + description: + name: digit_ui_components + sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae + url: "https://pub.dev" + source: hosted + version: "0.0.1+7" dio: dependency: transitive description: @@ -447,6 +439,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.4.3+1" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" drift: dependency: "direct main" description: @@ -503,6 +503,46 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 + url: "https://pub.dev" + source: hosted + version: "8.0.0+1" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + url: "https://pub.dev" + source: hosted + version: "0.9.2+1" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 + url: "https://pub.dev" + source: hosted + version: "0.9.4" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" fixnum: dependency: transitive description: @@ -524,6 +564,30 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.5" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" flutter_focus_watcher: dependency: transitive description: @@ -588,6 +652,11 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.2" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -604,14 +673,22 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" flutter_svg: dependency: "direct main" description: name: flutter_svg - sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c + sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" url: "https://pub.dev" source: hosted - version: "2.0.9" + version: "2.0.10+1" flutter_test: dependency: "direct dev" description: flutter @@ -662,6 +739,54 @@ packages: url: "https://pub.dev" source: hosted version: "3.2.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + url: "https://pub.dev" + source: hosted + version: "4.3.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: bc2aca02423ad429cb0556121f56e60360a2b7d694c8570301d06ea0c00732fd + url: "https://pub.dev" + source: hosted + version: "2.3.7" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -674,10 +799,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: "6b6f10f0ce3c42f6552d1c70d2c28d764cf22bb487f50f66cca31dcd5194f4d6" + sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" url: "https://pub.dev" source: hosted - version: "4.0.4" + version: "4.0.5" google_mlkit_barcode_scanning: dependency: transitive description: @@ -738,10 +863,10 @@ packages: dependency: transitive description: name: http - sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba url: "https://pub.dev" source: hosted - version: "0.13.6" + version: "1.2.0" http_multi_server: dependency: transitive description: @@ -758,6 +883,70 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" + url: "https://pub.dev" + source: hosted + version: "1.0.8" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" + url: "https://pub.dev" + source: hosted + version: "0.8.9+6" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 + url: "https://pub.dev" + source: hosted + version: "0.8.9+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b + url: "https://pub.dev" + source: hosted + version: "2.9.3" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" intl: dependency: "direct main" description: @@ -958,6 +1147,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_parsing: dependency: transitive description: @@ -1062,14 +1259,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.1" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" provider: dependency: transitive description: @@ -1086,14 +1275,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - pub_updater: - dependency: transitive - description: - name: pub_updater - sha256: "05ae70703e06f7fdeb05f7f02dd680b8aad810e87c756a618f33e1794635115c" - url: "https://pub.dev" - source: hosted - version: "0.3.0" pubspec_parse: dependency: transitive description: @@ -1346,6 +1527,86 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + url_launcher: + dependency: transitive + description: + name: url_launcher + sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" + url: "https://pub.dev" + source: hosted + version: "6.3.0" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "17cd5e205ea615e2c6ea7a77323a11712dffa0720a8a90540db57a01347f9ad9" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" + url: "https://pub.dev" + source: hosted + version: "6.2.4" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 + url: "https://pub.dev" + source: hosted + version: "3.1.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + url: "https://pub.dev" + source: hosted + version: "2.2.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" + url: "https://pub.dev" + source: hosted + version: "3.1.2" uuid: dependency: "direct main" description: @@ -1358,26 +1619,26 @@ packages: dependency: transitive description: name: vector_graphics - sha256: "4ac59808bbfca6da38c99f415ff2d3a5d7ca0a6b4809c71d9cf30fba5daf9752" + sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: f3247e7ab0ec77dc759263e68394990edc608fb2b480b80db8aa86ed09279e33 + sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "18489bdd8850de3dd7ca8a34e0c446f719ec63e2bab2e7a8cc66a9028dd76c5a" + sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_math: dependency: transitive description: @@ -1386,6 +1647,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" vm_service: dependency: transitive description: diff --git a/packages/referral_reconciliation/pubspec.yaml b/packages/referral_reconciliation/pubspec.yaml index f9ef6a58a..1c1744653 100644 --- a/packages/referral_reconciliation/pubspec.yaml +++ b/packages/referral_reconciliation/pubspec.yaml @@ -11,8 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_ui_components: 0.0.3-beta - digit_components: ^1.0.2+1 + digit_ui_components: 0.0.1+7 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 reactive_forms: ^14.1.0 @@ -43,7 +42,6 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^3.0.1 - dart_code_metrics: ^5.7.6 freezed: ^2.1.0+1 build_runner: ^2.4.7 json_serializable: ^6.4.0 From f38943d27e3c82a25c51c8d9afc8ab807c84342a Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Mon, 11 Nov 2024 17:17:22 +0530 Subject: [PATCH 138/241] additionalDetails from string to Map --- .../create_referral/record_reason_checklist.dart | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart index f8ea863f9..bd33c4102 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart @@ -1,18 +1,18 @@ import 'dart:math'; import 'package:auto_route/auto_route.dart'; +import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/input_wrapper.dart'; import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; -import 'package:survey_form/survey_form.dart'; -import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart'; import 'package:referral_reconciliation/utils/constants.dart'; +import 'package:survey_form/survey_form.dart'; import '../../blocs/referral_recon_service_definition.dart'; import '../../utils/date_utils.dart'; @@ -215,10 +215,12 @@ class _ReferralReasonChecklistPageState accountId: ReferralReconSingleton() .projectId, - additionalDetails: - ReferralReconSingleton() - .boundary - ?.code, + additionalDetails: { + "boundaryCode": + ReferralReconSingleton() + .boundary + ?.code + }, ), ), ); From 69d6de219240908c5bd81490194d3183584fe77f Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Mon, 11 Nov 2024 18:05:29 +0530 Subject: [PATCH 139/241] lock file version changes --- apps/health_campaign_field_worker_app/pubspec.lock | 4 ++-- packages/attendance_management/pubspec.lock | 12 +++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index f94e9571d..6e6680742 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -553,7 +553,7 @@ packages: source: path version: "1.0.0" digit_ui_components: - dependency: transitive + dependency: "direct main" description: name: digit_ui_components sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae @@ -1816,7 +1816,7 @@ packages: path: "../../packages/referral_reconciliation" relative: true source: path - version: "1.0.3-dev.1" + version: "1.0.2" registration_delivery: dependency: "direct main" description: diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index 4c22c3a97..986777d20 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -276,9 +276,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -318,14 +320,14 @@ packages: path: "../digit_components" relative: true source: path - version: "1.0.2" + version: "1.0.2+1" digit_data_model: dependency: "direct main" description: path: "../digit_data_model" relative: true source: path - version: "1.0.3+1" + version: "1.0.4" dio: dependency: "direct main" description: From e72d72ba99f869c3bf062a480f88031ec7cfbfd1 Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Thu, 5 Sep 2024 12:14:28 +0530 Subject: [PATCH 140/241] updated flutter components in checklist package --- .../assets/animated_json/alert.json | 1127 ++++++++++++++++ .../assets/animated_json/error.json | 728 +++++++++++ .../assets/animated_json/success.json | 917 +++++++++++++ .../lib/pages/acknowledgement.dart | 61 +- .../survey_form/lib/pages/survey_form.dart | 195 +-- .../lib/pages/survey_form_boundary_view.dart | 94 +- .../lib/pages/survey_form_preview.dart | 281 ++-- .../lib/pages/survey_form_view.dart | 1161 ++++++++--------- .../lib/pages/survey_form_wrapper.dart | 7 + .../survey_form/lib/widgets/action_card.dart | 30 +- .../widgets/back_navigation_help_header.dart | 28 +- 11 files changed, 3698 insertions(+), 931 deletions(-) create mode 100644 apps/health_campaign_field_worker_app/assets/animated_json/alert.json create mode 100644 apps/health_campaign_field_worker_app/assets/animated_json/error.json create mode 100644 apps/health_campaign_field_worker_app/assets/animated_json/success.json diff --git a/apps/health_campaign_field_worker_app/assets/animated_json/alert.json b/apps/health_campaign_field_worker_app/assets/animated_json/alert.json new file mode 100644 index 000000000..171b416cd --- /dev/null +++ b/apps/health_campaign_field_worker_app/assets/animated_json/alert.json @@ -0,0 +1,1127 @@ +{ + "nm": "48 - Warning", + "ddd": 0, + "h": 500, + "w": 500, + "meta": { + "g": "LottieFiles AE " + }, + "layers": [ + { + "ty": 3, + "nm": "48 - Warning", + "sr": 1, + "st": 0, + "op": 144, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 60, + 60, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 180, + 180, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 250.045, + 290.339, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 0, + "ix": 11 + } + }, + "ef": [], + "ind": 1 + }, + { + "ty": 4, + "nm": "Line", + "sr": 1, + "st": 0, + "op": 144, + "ip": 12, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + -1, + 21.25, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 12 + }, + { + "s": [ + 55.556, + 55.556, + 100 + ], + "t": 32 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 85.533, + 85.887, + 0 + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 180 + ], + "t": 12 + }, + { + "s": [ + 0 + ], + "t": 32 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Shape 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1, + 80 + ], + [ + -1, + -37.5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 2, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 28, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 100, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 0 + ], + "t": 22 + }, + { + "s": [ + 40 + ], + "t": 42 + } + ], + "ix": 1 + }, + "m": 1 + } + ], + "ind": 2, + "parent": 5 + }, + { + "ty": 4, + "nm": "Dot", + "sr": 1, + "st": 0, + "op": 144, + "ip": 12, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Shape 1", + "ix": 1, + "cix": 2, + "np": 4, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1, + 80 + ], + [ + -1, + -37.5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 0.1, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 0, + "k": 0, + "ix": 1 + }, + "m": 1 + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 2, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 33, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 3, + "parent": 2 + }, + { + "ty": 4, + "nm": "Tri Outlines", + "sr": 1, + "st": 0, + "op": 144, + "ip": 10, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 85.513, + 72.848, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 10 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 15 + } + ], + "ix": 6, + "x": "var $bm_rt;\nvar amp, freq, decay, n, t, v;\ntry {\n amp = $bm_div(effect('Scale - Overshoot')('ADBE Slider Control-0001'), 2.5), freq = $bm_div(effect('Scale - Bounce')('ADBE Slider Control-0001'), 20), decay = $bm_div(effect('Scale - Friction')('ADBE Slider Control-0001'), 20), n = 0, 0 < numKeys && (n = nearestKey(time).index, key(n).time > time && n--), t = 0 === n ? 0 : $bm_sub(time, key(n).time), $bm_rt = 0 < n ? (v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10))), $bm_sum(value, $bm_div($bm_mul($bm_mul($bm_div(v, 100), amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))))) : value;\n} catch (e$$4) {\n $bm_rt = value = value;\n}" + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 59.955, + 37.467, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [ + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Overshoot", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 10, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Bounce", + "ix": 2, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 35, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Friction", + "ix": 3, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 65, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + } + ], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Group 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + -3.315, + 5.634 + ], + [ + 0, + 0 + ], + [ + -3.267, + -5.554 + ], + [ + 0, + 0 + ], + [ + 6.537, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 3.268, + -5.554 + ], + [ + 0, + 0 + ], + [ + 3.315, + 5.634 + ], + [ + 0, + 0 + ], + [ + -6.536, + 0 + ] + ], + "v": [ + [ + -81.948, + 59.861 + ], + [ + -7.284, + -67.044 + ], + [ + 7.284, + -67.044 + ], + [ + 81.948, + 59.861 + ], + [ + 74.664, + 72.598 + ], + [ + -74.664, + 72.598 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 0.7255, + 0.098, + 0 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 85.513, + 72.848 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 4, + "parent": 1 + }, + { + "ty": 3, + "nm": "Tri", + "sr": 1, + "st": 0, + "op": 144, + "ip": 10, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 85.513, + 72.848, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 10 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 15 + } + ], + "ix": 6, + "x": "var $bm_rt;\nvar amp, freq, decay, n, t, v;\ntry {\n amp = $bm_div(effect('Scale - Overshoot')('ADBE Slider Control-0001'), 2.5), freq = $bm_div(effect('Scale - Bounce')('ADBE Slider Control-0001'), 20), decay = $bm_div(effect('Scale - Friction')('ADBE Slider Control-0001'), 20), n = 0, 0 < numKeys && (n = nearestKey(time).index, key(n).time > time && n--), t = 0 === n ? 0 : $bm_sub(time, key(n).time), $bm_rt = 0 < n ? (v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10))), $bm_sum(value, $bm_div($bm_mul($bm_mul($bm_div(v, 100), amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))))) : value;\n} catch (e$$4) {\n $bm_rt = value = value;\n}" + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 59.955, + 37.467, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [ + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Overshoot", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 10, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Bounce", + "ix": 2, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 35, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Friction", + "ix": 3, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 65, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + } + ], + "ind": 5, + "parent": 1 + }, + { + "ty": 1, + "nm": "Plate_white", + "sr": 1, + "st": 0, + "op": 144, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 250, + 250, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 250, + 250, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "sc": "#ffffff", + "sh": 500, + "sw": 500, + "ind": 6 + } + ], + "v": "5.5.7", + "fr": 48, + "op": 144, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/assets/animated_json/error.json b/apps/health_campaign_field_worker_app/assets/animated_json/error.json new file mode 100644 index 000000000..96b4f9626 --- /dev/null +++ b/apps/health_campaign_field_worker_app/assets/animated_json/error.json @@ -0,0 +1,728 @@ +{ + "nm": "ckeck", + "ddd": 0, + "h": 50, + "w": 50, + "meta": { + "g": "@lottiefiles/toolkit-js 0.33.2" + }, + "layers": [ + { + "ty": 4, + "nm": "! Outlines", + "sr": 1, + "st": 0, + "op": 213, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 2, + 12, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.653, + "y": -0.834 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 60 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 73 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.127, + "y": 1.695 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 83 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 90 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 25, + 25, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Group 1", + "ix": 1, + "cix": 2, + "np": 4, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 1.104 + ], + [ + -1.104, + 0 + ], + [ + 0, + -1.104 + ], + [ + 1.104, + 0 + ] + ], + "o": [ + [ + 0, + -1.104 + ], + [ + 1.104, + 0 + ], + [ + 0, + 1.104 + ], + [ + -1.104, + 0 + ] + ], + "v": [ + [ + -2, + 10 + ], + [ + 0, + 8 + ], + [ + 2, + 10 + ], + [ + 0, + 12 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 2", + "ix": 2, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1.036, + 5 + ], + [ + -2, + -6.625 + ], + [ + -2, + -12 + ], + [ + 2, + -12 + ], + [ + 2, + -6.625 + ], + [ + 1.052, + 5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "mm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Merge", + "nm": "Merge Paths 1", + "mm": 1 + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0.099, + 9.982 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 2.099, + 21.982 + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 10 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 12 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 14 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 16 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 18 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 20 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 22 + }, + { + "s": [ + 0 + ], + "t": 24 + } + ], + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 1 + }, + { + "ty": 4, + "nm": "Shape Layer 1", + "sr": 1, + "st": 0, + "op": 193, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 10, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.41, + "y": -0.602 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 60 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.436, + "y": 1.492 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 83 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 90 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 25, + 35, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Ellipse 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "el", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Ellipse", + "nm": "Ellipse Path 1", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 3 + }, + "s": { + "a": 0, + "k": [ + 40, + 40 + ], + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 2, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 100, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 0, + "k": 0, + "ix": 1 + }, + "m": 1 + } + ], + "ind": 2 + } + ], + "v": "5.6.5", + "fr": 60, + "op": 180, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/assets/animated_json/success.json b/apps/health_campaign_field_worker_app/assets/animated_json/success.json new file mode 100644 index 000000000..43192f708 --- /dev/null +++ b/apps/health_campaign_field_worker_app/assets/animated_json/success.json @@ -0,0 +1,917 @@ +{ + "nm": "sucess", + "ddd": 0, + "h": 120, + "w": 120, + "meta": { + "g": "LottieFiles AE 0.1.21" + }, + "layers": [ + { + "ty": 3, + "nm": "scale up null", + "sr": 1, + "st": 0, + "op": 300.00001221925, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0 + }, + "i": { + "x": 0.833, + "y": 1 + }, + "s": [ + 111, + 111, + 100 + ], + "t": 27 + }, + { + "o": { + "x": 0.167, + "y": 0 + }, + "i": { + "x": 0.833, + "y": 1 + }, + "s": [ + 101, + 101, + 100 + ], + "t": 36 + }, + { + "s": [ + 121, + 121, + 100 + ], + "t": 42.0000017106951 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 60, + 60, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 0, + "ix": 11 + } + }, + "ef": [], + "ind": 1 + }, + { + "ty": 4, + "nm": "spark", + "sr": 1, + "st": 35.0000014255792, + "op": 335.00001364483, + "ip": 35.0000014255792, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0.5, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Rectangle 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 1", + "d": 1, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 0, + -21 + ], + "t": 35, + "ti": [ + 0, + 1.5 + ], + "to": [ + 0, + -1.5 + ] + }, + { + "s": [ + 0, + -30 + ], + "t": 53.0000021587343 + } + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 4 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.976, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 2, + 0 + ], + "t": 35 + }, + { + "o": { + "x": 0.33299999999999996, + "y": 0 + }, + "i": { + "x": 0.15355432054499818, + "y": 0.9999999999999999 + }, + "s": [ + 2, + 8 + ], + "t": 42 + }, + { + "s": [ + 1.633, + 0 + ], + "t": 53.0000021587343 + } + ], + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + -8 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "rp", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Repeater", + "nm": "Repeater 1", + "ix": 2, + "m": 1, + "c": { + "a": 0, + "k": 8, + "ix": 1 + }, + "o": { + "a": 0, + "k": 0, + "ix": 2 + }, + "tr": { + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 45, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0 + }, + "so": { + "a": 0, + "k": 100, + "ix": 5 + }, + "eo": { + "a": 0, + "k": 100, + "ix": 6 + } + } + } + ], + "ind": 2, + "parent": 1 + }, + { + "ty": 4, + "nm": "check", + "sr": 1, + "st": 10.0000004073083, + "op": 310.000012626559, + "ip": 22.0000008960784, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 3.5, + 3.75 + ], + [ + -12.973, + 5.349 + ], + [ + -6.124, + -9.992 + ], + [ + 12.125, + -7.431 + ], + [ + 7.431, + 12.125 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -3.5, + -3.75 + ], + [ + 10.764, + -2.941 + ], + [ + 7.431, + 12.125 + ], + [ + -12.125, + 7.431 + ], + [ + -7.431, + -12.125 + ] + ], + "v": [ + [ + 15.25, + -9.688 + ], + [ + -5.75, + 10.062 + ], + [ + -16, + 0.25 + ], + [ + -6.777, + -24.849 + ], + [ + 21.955, + -13.456 + ], + [ + 13.456, + 21.955 + ], + [ + -21.955, + 13.456 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 1, + "k": [ + { + "o": { + "x": 0.714, + "y": 0 + }, + "i": { + "x": 0.351, + "y": 1 + }, + "s": [ + 100 + ], + "t": 10 + }, + { + "s": [ + 23 + ], + "t": 40.0000016292334 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.742, + "y": 0 + }, + "i": { + "x": 0.363, + "y": 1 + }, + "s": [ + 100 + ], + "t": 17 + }, + { + "s": [ + 0 + ], + "t": 45.0000018328876 + } + ], + "ix": 1 + }, + "m": 1 + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 4, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 3 + } + } + ], + "ind": 3, + "parent": 1 + }, + { + "ty": 4, + "nm": "circle", + "sr": 1, + "st": 0, + "op": 300.00001221925, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + -14.221, + 0 + ], + [ + 0, + -14.221 + ], + [ + 14.221, + 0 + ], + [ + 0, + 14.221 + ] + ], + "o": [ + [ + 14.221, + 0 + ], + [ + 0, + 14.221 + ], + [ + -14.221, + 0 + ], + [ + 0, + -14.221 + ] + ], + "v": [ + [ + 0, + -25.75 + ], + [ + 25.75, + 0 + ], + [ + 0, + 25.75 + ], + [ + -25.75, + 0 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 2, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 3 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 3, + "e": { + "a": 1, + "k": [ + { + "o": { + "x": 0.714, + "y": 0 + }, + "i": { + "x": 0.351, + "y": 1 + }, + "s": [ + 100 + ], + "t": 0 + }, + { + "s": [ + 100 + ], + "t": 30.0000012219251 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.742, + "y": 0 + }, + "i": { + "x": 0.363, + "y": 1 + }, + "s": [ + 100 + ], + "t": 7 + }, + { + "s": [ + 0 + ], + "t": 33.0000013441176 + } + ], + "ix": 1 + }, + "m": 1 + } + ], + "ind": 4, + "parent": 1 + } + ], + "v": "5.5.7", + "fr": 29.9700012207031, + "op": 60.0000024438501, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/packages/survey_form/lib/pages/acknowledgement.dart b/packages/survey_form/lib/pages/acknowledgement.dart index cd4ec0f5f..3e13923cf 100644 --- a/packages/survey_form/lib/pages/acknowledgement.dart +++ b/packages/survey_form/lib/pages/acknowledgement.dart @@ -1,5 +1,7 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/panel_cards.dart'; import 'package:flutter/material.dart'; import '../utils/i18_key_constants.dart' as i18; @@ -28,26 +30,26 @@ class AcknowledgementPageState extends LocalizedState context.router.popUntilRoot(), + type: ButtonType.primary, + size: ButtonSize.large, + ) + ], + ), ), bottomNavigationBar: Offstage( offstage: !widget.isDataRecordSuccess, @@ -55,19 +57,22 @@ class AcknowledgementPageState extends LocalizedState { + ServiceDefinitionModel? selectedServiceDefinition; + @override Widget build(BuildContext context) { final localizations = SurveyFormLocalization.of(context); @@ -38,100 +40,115 @@ class SurveyFormPageState extends State { BlocBuilder( builder: (context, state) { return state.map( - empty: (value) => Text(localizations.translate( - i18.surveyForm.noSurveyFormFound, - ),), + empty: (value) => Text( + localizations.translate( + i18.surveyForm.noSurveyFormFound, + ), + ), isloading: (value) => const Center( child: CircularProgressIndicator(), ), serviceDefinitionFetch: (ServiceDefinitionServiceFetchedState value) { - final values = value.serviceDefinitionList.where( - (item) => - !SurveyFormSingleton().roles + final values = value.serviceDefinitionList + .where((item) => + !SurveyFormSingleton() + .roles .indexOf( - item.code!.split('.').lastOrNull!, - ) + item.code!.split('.').lastOrNull!, + ) .isNegative && - !item.code!.contains(Constants - .healthFacilitySurveyFormPrefix) && - (item.code ?? '').contains( - SurveyFormSingleton().projectName)); + !item.code!.contains( + Constants.healthFacilitySurveyFormPrefix) && + (item.code ?? '') + .contains(SurveyFormSingleton().projectName)); + + if (values.isEmpty) { + return Column( + children: [ + NoResultCard( + align: Alignment.center, + label: localizations.translate( + i18.common.noResultsFound, + ), + ), + ], + ); + } + return Padding( + padding: const EdgeInsets.all(spacer4), + child: ButtonListTile( + spacing: spacer4, + sortButtons: false, + isVertical: true, + buttons: values + .map((e)=>Button( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + label: localizations.translate('${e.code}'), + type: ButtonType.secondary, + size: ButtonSize.large, + prefixIcon: Icons.article, + suffixIcon: Icons.arrow_forward, + onPressed: () { + context.read().add( + ServiceDefinitionSelectionEvent( + serviceDefinition: e,)); - if (values.isEmpty) { - return Column( - children: [ - NoResultCard( - align: Alignment.center, - label: localizations.translate( - i18.common.noResultsFound, - ), - ), - ], - ); - } - return Column( - children: values - .map((e) => DigitProjectCell( - projectText: localizations - .translate('${e.code}'), - onTap: () { - context - .read() - .add( - ServiceDefinitionSelectionEvent( - serviceDefinition: e, - ), - ); - DigitActionDialog.show( - context, - widget: ActionCard(items: [ - ActionCardModel( - icon: Icons.edit_calendar, - label: localizations.translate(i18 - .surveyForm - .surveyFormCreateActionLabel), - action: () { - context.router.push( - SurveyFormBoundaryViewRoute(), - ); - Navigator.of( - context, - rootNavigator: true, - ).pop(); - }, - ), - ActionCardModel( - icon: Icons.visibility, - label: localizations.translate(i18 - .surveyForm - .surveyFormViewActionLabel), - action: () { - context - .read() - .add( - ServiceSearchEvent( - serviceSearchModel: - ServiceSearchModel( - id: e.id, - ), - ), - ); - context.router.push( - SurveyFormPreviewRoute(), - ); - Navigator.of( - context, - rootNavigator: true, - ).pop(); - }, - ), - ]), - ); - }, - )) - .toList(), - ); + showPopup( + context: context, + title: "", + type: PopUpType.simple, + actions: [ + Button( + label: localizations.translate(i18 + .surveyForm + .surveyFormCreateActionLabel), + onPressed: () { + context.router.push( + SurveyFormBoundaryViewRoute(), + ); + Navigator.of( + context, + rootNavigator: true, + ).pop(); + }, + type: ButtonType.secondary, + size: ButtonSize.medium, + prefixIcon: Icons.edit_calendar, + ), + Button( + label: localizations.translate(i18 + .surveyForm + .surveyFormViewActionLabel), + onPressed: () { + context + .read() + .add( + ServiceSearchEvent( + serviceSearchModel: + ServiceSearchModel( + id: e.id, + ), + ), + ); + context.router.push( + SurveyFormPreviewRoute(), + ); + Navigator.of( + context, + rootNavigator: true, + ).pop(); + }, + type: ButtonType.secondary, + size: ButtonSize.medium, + prefixIcon: Icons.visibility, + ), + ] + ); + }, + )).toList() + ), + ); }, ); }, diff --git a/packages/survey_form/lib/pages/survey_form_boundary_view.dart b/packages/survey_form/lib/pages/survey_form_boundary_view.dart index 937cdaede..2d7066e33 100644 --- a/packages/survey_form/lib/pages/survey_form_boundary_view.dart +++ b/packages/survey_form/lib/pages/survey_form_boundary_view.dart @@ -1,9 +1,7 @@ import 'package:auto_route/auto_route.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:survey_form/survey_form.dart'; -import 'package:digit_components/widgets/digit_card.dart'; -import 'package:digit_components/widgets/digit_elevated_button.dart'; -import 'package:digit_components/widgets/digit_text_field.dart'; -import 'package:digit_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; @@ -37,53 +35,55 @@ class SurveyFormBoundaryViewPageState BackNavigationHelpHeaderWidget(), ]), footer: DigitCard( - child: DigitElevatedButton( - onPressed: () => context.router.push(SurveyFormViewRoute()), - child: Text(localizations.translate( - i18.common.coreCommonContinue, - )), - ), - ), - children: [ - DigitCard( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - localizations.translate( - i18.surveyForm.surveyFormDetailLabel, - ), - style: theme.textTheme.displayMedium, + cardType: CardType.primary, + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [ + Button( + type: ButtonType.primary, + label: localizations.translate( + i18.common.coreCommonContinue, ), - DigitTextField( - readOnly: true, - label: localizations.translate( - i18.surveyForm.surveyFormdate, - ), - suffixIcon: const Padding( - padding: EdgeInsets.all(8), - child: Icon( - Icons.date_range_outlined, - ), - ), - controller: TextEditingController( - text: DateFormat('dd MMMM yyyy').format(DateTime.now()), - ), + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () => context.router.push(SurveyFormViewRoute()), + ), + ]), + children: [ + DigitCard(cardType: CardType.primary, children: [ + Text( + localizations.translate( + i18.surveyForm.surveyFormDetailLabel, + ), + style: theme.textTheme.displayMedium, + ), + LabeledField( + label: localizations.translate( + i18.surveyForm.surveyFormdate, + ), + child: DigitDateFormInput( + readOnly: true, + initialValue: DateFormat('dd MMMM yyyy').format(DateTime.now()), + controller: TextEditingController( + text: DateFormat('dd MMMM yyyy').format(DateTime.now()), ), - DigitTextField( - readOnly: true, - label: localizations.translate( - i18.householdLocation.administrationAreaFormLabel, - ), - controller: TextEditingController( - text: localizations - .translate(SurveyFormSingleton().boundary!.code.toString()), - ), + ), + ), + LabeledField( + label: localizations.translate( + i18.householdLocation.administrationAreaFormLabel, + ), + child: DigitTextFormInput( + readOnly: true, + initialValue: localizations + .translate(SurveyFormSingleton().boundary!.code.toString()), + controller: TextEditingController( + text: localizations.translate( + SurveyFormSingleton().boundary!.code.toString()), ), - ], + ), ), - ), + ]), ], ), ); diff --git a/packages/survey_form/lib/pages/survey_form_preview.dart b/packages/survey_form/lib/pages/survey_form_preview.dart index aa4ffaa74..c3655c2bd 100644 --- a/packages/survey_form/lib/pages/survey_form_preview.dart +++ b/packages/survey_form/lib/pages/survey_form_preview.dart @@ -1,10 +1,8 @@ import 'package:auto_route/annotations.dart'; -import 'package:digit_components/theme/digit_theme.dart'; -import 'package:digit_components/widgets/atoms/digit_divider.dart'; -import 'package:digit_components/widgets/digit_card.dart'; -import 'package:digit_components/widgets/digit_elevated_button.dart'; -import 'package:digit_components/widgets/digit_outline_button.dart'; -import 'package:digit_components/widgets/scrollable_content.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_divider.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:survey_form/survey_form.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -31,6 +29,7 @@ class SurveyFormPreviewPageState extends LocalizedState { @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); return Scaffold( body: ScrollableContent( @@ -44,17 +43,23 @@ class SurveyFormPreviewPageState extends LocalizedState { serviceSearch: (value1, value2, value3) { return value2 != null ? DigitCard( - child: DigitElevatedButton( - onPressed: () { - context.read().add( - ServiceResetEvent(serviceList: value1), - ); - }, - child: Text( - localizations.translate(i18.common.corecommonclose), - ), - ), - ) + cardType: CardType.primary, + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [ + Button( + mainAxisSize: MainAxisSize.max, + label: localizations + .translate(i18.common.corecommonclose), + type: ButtonType.primary, + size: ButtonSize.large, + onPressed: () { + context.read().add( + ServiceResetEvent(serviceList: value1), + ); + }, + ), + ]) : const Offstage(); }, ); @@ -73,22 +78,20 @@ class SurveyFormPreviewPageState extends LocalizedState { ...serviceList .map((e) => e.serviceDefId != null ? DigitCard( - child: Column( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ + cardType: CardType.primary, + children: [ Align( alignment: Alignment.centerLeft, child: Text( DateFormat(Constants.SurveyFormPreviewDateFormat) .format( - DateFormat(Constants.defaultDateFormat) + DateFormat(Constants + .defaultDateFormat) .parse( e.createdAt.toString(), ), ), - style: theme - .textTheme.headlineMedium, + style: textTheme.headingXl, ), ), Row( @@ -103,12 +106,13 @@ class SurveyFormPreviewPageState extends LocalizedState { ), ), ), - DigitOutLineButton( - label: - localizations.translate( + Button( + label: localizations.translate( i18.searchBeneficiary .iconLabel, ), + type: ButtonType.secondary, + size: ButtonSize.medium, onPressed: () { context .read() @@ -118,20 +122,10 @@ class SurveyFormPreviewPageState extends LocalizedState { ), ); }, - buttonStyle: OutlinedButton - .styleFrom( - shape: - const RoundedRectangleBorder( - borderRadius: - BorderRadius.zero, - ), - ), ), ], ), - ], - ), - ) + ]) : const Offstage()) .toList(), ], @@ -156,120 +150,113 @@ class SurveyFormPreviewPageState extends LocalizedState { item2, ) { return DigitCard( - child: Column( + cardType: CardType.primary, + children: [Column( + mainAxisAlignment: + MainAxisAlignment.start, children: [ - Container( - width: MediaQuery.of(context).size.width, - margin: const EdgeInsets.all(8), - child: Column( - mainAxisAlignment: - MainAxisAlignment.start, - children: [ - Align( - alignment: Alignment.centerLeft, - child: Text( - localizations.translate( - item2?.code ?? '', - ), - style: - theme.textTheme.displayMedium, - ), - ), - ...(selectedService.attributes ?? []) - .where((a) => - a.value != - i18.surveyForm - .notSelectedKey && - a.value != '') - .map( - (e) => Padding( - padding: - const EdgeInsets.all(8), - child: Column( - mainAxisAlignment: - MainAxisAlignment.start, - children: [ - Align( - alignment: - Alignment.centerLeft, - child: Text( - localizations.translate( - "${item2?.code ?? ''}.${e.attributeCode!}", - ), - style: theme.textTheme - .headlineSmall, - ), - ), - Container( - margin: const EdgeInsets - .only() - .copyWith( - top: kPadding, - bottom: kPadding, + Align( + alignment: Alignment.centerLeft, + child: Text( + localizations.translate( + item2?.code ?? '', + ), + style: + theme.textTheme.displayMedium, + ), + ), + ...(selectedService.attributes ?? []) + .where((a) => + a.value != + i18.surveyForm + .notSelectedKey && + a.value != '') + .map( + (e) => Padding( + padding: + const EdgeInsets.all(8), + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + Align( + alignment: + Alignment.centerLeft, + child: Text( + localizations.translate( + "${item2?.code ?? ''}.${e.attributeCode!}", + ), + style: theme.textTheme + .headlineSmall, + ), + ), + Container( + margin: const EdgeInsets + .only() + .copyWith( + top: spacer2, + bottom: spacer2, + ), + child: Align( + alignment: Alignment + .centerLeft, + child: Text( + e.dataType == + 'SingleValueList' + ? localizations + .translate( + 'CORE_COMMON_${e.value.toString().toUpperCase()}', + ) + : e.value ?? "", + ), + ), + ), + e.additionalDetails != '' && + e.additionalDetails != + null + ? Container( + margin: + const EdgeInsets + .only() + .copyWith( + top: spacer2, + bottom: spacer2, ), - child: Align( - alignment: Alignment - .centerLeft, - child: Text( - e.dataType == - 'SingleValueList' - ? localizations + child: Column( + children: [ + Align( + alignment: + Alignment + .centerLeft, + child: Text( + localizations .translate( - 'CORE_COMMON_${e.value.toString().toUpperCase()}', - ) - : e.value ?? "", - ), - ), - ), - e.additionalDetails != '' && - e.additionalDetails != - null - ? Container( - margin: - const EdgeInsets - .only() - .copyWith( - top: kPadding, - bottom: kPadding, + "${item2?.code ?? ''}.${e.attributeCode!}.ADDITIONAL_FIELD", + ), ), - child: Column( - children: [ - Align( - alignment: - Alignment - .centerLeft, - child: Text( - localizations - .translate( - "${item2?.code ?? ''}.${e.attributeCode!}.ADDITIONAL_FIELD", - ), - ), - ), - Align( - alignment: - Alignment - .centerLeft, - child: Text( - localizations - .translate( - e.additionalDetails, - ), - ), - ), - ], + ), + Align( + alignment: + Alignment + .centerLeft, + child: Text( + localizations + .translate( + e.additionalDetails, + ), ), - ) - : const Offstage(), - const DigitDivider(), - ], - ), - ), - ), - ].toList(), - ), - ), - ], - ), + ), + ], + ), + ) + : const Offstage(), + const DigitDivider(), + ], + ), + ), + ), + ].toList(), + ),] ); }, orElse: () => const Offstage(), diff --git a/packages/survey_form/lib/pages/survey_form_view.dart b/packages/survey_form/lib/pages/survey_form_view.dart index bedbaea6f..8aac749a8 100644 --- a/packages/survey_form/lib/pages/survey_form_view.dart +++ b/packages/survey_form/lib/pages/survey_form_view.dart @@ -1,32 +1,27 @@ import 'dart:math'; import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/blocs/location/location.dart'; -import 'package:digit_components/theme/colors.dart'; -import 'package:digit_components/theme/digit_theme.dart'; -import 'package:digit_components/utils/date_utils.dart'; -import 'package:digit_components/utils/utils.dart'; -import 'package:digit_components/widgets/atoms/selection_card.dart'; -import 'package:digit_components/widgets/digit_card.dart'; -import 'package:digit_components/widgets/digit_checkbox_tile.dart'; -import 'package:digit_components/widgets/digit_dialog.dart'; -import 'package:digit_components/widgets/digit_elevated_button.dart'; -import 'package:digit_components/widgets/digit_sync_dialog.dart'; -import 'package:digit_components/widgets/digit_text_field.dart'; -import 'package:digit_components/widgets/scrollable_content.dart'; +import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/utils/date_utils.dart'; +import 'package:digit_ui_components/utils/validators/validator.dart'; +import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; +import 'package:digit_ui_components/widgets/atoms/selection_card.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:survey_form/survey_form.dart'; +import 'package:survey_form/utils/extensions/context_utility.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:group_radio_button/group_radio_button.dart'; + import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:group_radio_button/group_radio_button.dart'; -import 'package:survey_form/survey_form.dart'; -import 'package:survey_form/utils/extensions/context_utility.dart'; import '../router/survey_form_router.gm.dart'; import '../utils/constants.dart'; -import '../utils/i18_key_constants.dart' as i18; import '../widgets/back_navigation_help_header.dart'; import '../widgets/localized.dart'; +import '../utils/i18_key_constants.dart' as i18; @RoutePage() class SurveyFormViewPage extends LocalizedStatefulWidget { @@ -45,14 +40,13 @@ class SurveyFormViewPage extends LocalizedStatefulWidget { class SurveyFormViewPageState extends LocalizedState { String isStateChanged = ''; var submitTriggered = false; - bool triggerLocalization = false; List controller = []; List additionalController = []; List? initialAttributes; ServiceDefinitionModel? selectedServiceDefinition; bool isControllersInitialized = false; List visibleSurveyFormIndexes = []; - GlobalKey surveyFormKey = GlobalKey(); + GlobalKey surveyFormFormKey = GlobalKey(); @override void initState() { @@ -106,268 +100,260 @@ class SurveyFormViewPageState extends LocalizedState { const BackNavigationHelpHeaderWidget(), ]), enableFixedButton: true, - footer: BlocListener( - listener: (context, state) async { - if (state.accuracy != null && triggerLocalization) { - if (!mounted) return; - triggerLocalization = false; - final router = context.router; - // close the location capturing `dialog` - DigitComponentsUtils().hideDialog(context); + footer: DigitCard( + cardType: CardType.primary, + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [ + Button( + label: localizations + .translate(i18.common.coreCommonSubmit), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () async { + final router = context.router; + submitTriggered = true; - // Wait for the location to be obtained - final locationState = - context.read().state; - double? latitude = locationState.latitude; - double? longitude = locationState.longitude; - - final shouldSubmit = await DigitDialog.show( - context, - options: DigitDialogOptions( - titleText: localizations.translate( - i18.surveyForm.surveyFormDialogLabel, - ), - content: Text(localizations.translate( - i18.surveyForm.surveyFormDialogDescription, - )), - primaryAction: DigitDialogActions( - label: localizations.translate( - i18.surveyForm.surveyFormDialogPrimaryAction, - ), - action: (ctx) { - final referenceId = IdGen.i.identifier; - List attributes = []; - for (int i = 0; i < controller.length; i++) { - final attribute = initialAttributes; - attributes.add(ServiceAttributesModel( - auditDetails: AuditDetails( - createdBy: SurveyFormSingleton() - .loggedInUserUuid, - createdTime: - context.millisecondsSinceEpoch(), - ), - attributeCode: '${attribute?[i].code}', - dataType: attribute?[i].dataType, - clientReferenceId: IdGen.i.identifier, - referenceId: isHealthFacilityWorker && - widget.referralClientRefId != null - ? widget.referralClientRefId - : referenceId, - value: attribute?[i].dataType != - 'SingleValueList' - ? controller[i] - .text - .toString() - .trim() - .isNotEmpty - ? controller[i].text.toString() - : '' - : visibleSurveyFormIndexes.contains(i) - ? controller[i].text.toString() - : i18.surveyForm.notSelectedKey, - rowVersion: 1, - tenantId: attribute?[i].tenantId, - additionalDetails: isHealthFacilityWorker && - widget.referralClientRefId != null - ? null - : ((attribute?[i].values?.length == 2 || - attribute?[i] - .values - ?.length == - 3) && - controller[i].text == - attribute?[i] - .values?[1] - .trim()) - ? additionalController[i] - .text - .toString() - .isEmpty - ? null - : additionalController[i] - .text - .toString() - : null, - additionalFields: - ServiceAttributesAdditionalFields( - version: 1, - fields: [ - AdditionalField( - 'latitude', - latitude, - ), - AdditionalField( - 'longitude', - longitude, - ), - ], - ), - )); - } + context.read().add( + const ServiceSurveyFormEvent( + value: '', + submitTriggered: true, + ), + ); + final isValid = + surveyFormFormKey.currentState?.validate(); + if (!isValid!) { + return; + } + final itemsAttributes = initialAttributes; - context.read().add( - ServiceCreateEvent( - serviceModel: ServiceModel( - createdAt: DigitDateUtils - .getDateFromTimestamp( - DateTime.now() - .toLocal() - .millisecondsSinceEpoch, - dateFormat: Constants - .SurveyFormViewDateFormat, - ), - tenantId: value - .selectedServiceDefinition! - .tenantId, - clientId: isHealthFacilityWorker && + for (int i = 0; i < controller.length; i++) { + if (itemsAttributes?[i].required == true && + ((itemsAttributes?[i].dataType == + 'SingleValueList' && + visibleSurveyFormIndexes + .any((e) => e == i) && + (controller[i].text == '')) || + (itemsAttributes?[i].dataType != + 'SingleValueList' && + (controller[i].text == '' && + !(isHealthFacilityWorker && widget.referralClientRefId != - null - ? widget.referralClientRefId - .toString() - : referenceId, - serviceDefId: value - .selectedServiceDefinition?.id, - attributes: attributes, - rowVersion: 1, - accountId: - SurveyFormSingleton().projectId, - auditDetails: AuditDetails( - createdBy: SurveyFormSingleton() - .loggedInUserUuid, - createdTime: DateTime.now() - .millisecondsSinceEpoch, - ), - clientAuditDetails: - ClientAuditDetails( - createdBy: SurveyFormSingleton() - .loggedInUserUuid, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: - SurveyFormSingleton() + null))))) { + return; + } + } + + // Request location from LocationBloc + context + .read() + .add(const LocationEvent.load()); + + // Wait for the location to be obtained + final locationState = + context.read().state; + double? latitude = locationState.latitude; + double? longitude = locationState.longitude; + + final shouldSubmit = await showDialog( + context: context, + builder: (context) => Popup( + type: PopUpType.simple, + title: localizations.translate( + i18.surveyForm.surveyFormDialogLabel, + ), + description: localizations.translate( + i18.surveyForm.surveyFormDialogDescription, + ), + actions: [ + Button( + label: localizations.translate( + i18.surveyForm + .surveyFormDialogPrimaryAction, + ), + onPressed: () { + final referenceId = + IdGen.i.identifier; + List + attributes = []; + for (int i = 0; + i < controller.length; + i++) { + final attribute = initialAttributes; + attributes + .add(ServiceAttributesModel( + auditDetails: AuditDetails( + createdBy: SurveyFormSingleton() .loggedInUserUuid, - lastModifiedTime: context - .millisecondsSinceEpoch(), - ), - additionalFields: - ServiceAdditionalFields( - version: 1, - fields: [ - AdditionalField( - 'latitude', - latitude, - ), - AdditionalField( - 'longitude', - longitude, + createdTime: context + .millisecondsSinceEpoch(), ), - AdditionalField( - 'localityCode', - SurveyFormSingleton() - .boundary - ?.code, + attributeCode: + '${attribute?[i].code}', + dataType: attribute?[i].dataType, + clientReferenceId: + IdGen.i.identifier, + referenceId: isHealthFacilityWorker && + widget.referralClientRefId != + null + ? widget.referralClientRefId + : referenceId, + value: attribute?[i].dataType != + 'SingleValueList' + ? controller[i] + .text + .toString() + .trim() + .isNotEmpty + ? controller[i] + .text + .toString() + : '' + : visibleSurveyFormIndexes + .contains(i) + ? controller[i] + .text + .toString() + : i18.surveyForm + .notSelectedKey, + rowVersion: 1, + tenantId: attribute?[i].tenantId, + additionalDetails: isHealthFacilityWorker && + widget.referralClientRefId != + null + ? null + : ((attribute?[i] + .values + ?.length == + 2 || + attribute?[i] + .values + ?.length == + 3) && + controller[i].text == + attribute?[i] + .values?[1] + .trim()) + ? additionalController[i] + .text + .toString() + .isEmpty + ? null + : additionalController[ + i] + .text + .toString() + : null, + additionalFields: + ServiceAttributesAdditionalFields( + version: 1, + fields: [ + AdditionalField( + 'latitude', + latitude, + ), + AdditionalField( + 'longitude', + longitude, + ), + ], ), - ], - ), - additionalDetails: { - "boundaryCode": - SurveyFormSingleton() - .boundary - ?.code, - 'lat': latitude, - 'lng': longitude, - }, - ), - ), - ); + )); + } - Navigator.of( - context, - rootNavigator: true, - ).pop(true); - }, - ), - secondaryAction: DigitDialogActions( - label: localizations.translate( - i18.surveyForm.surveyFormDialogSecondaryAction, - ), - action: (context) { - Navigator.of( - context, - rootNavigator: true, - ).pop(false); - }, - ), - ), - ); - if (shouldSubmit ?? false) { - router.navigate(SurveyformRoute()); - router.push(SurveyFormAcknowledgementRoute()); - } - } - }, - child: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: - const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: DigitElevatedButton( - onPressed: () async { - submitTriggered = true; - - context.read().add( - const ServiceSurveyFormEvent( - value: '', - submitTriggered: true, - ), - ); - final isValid = - surveyFormKey.currentState?.validate(); - if (!isValid!) { - return; - } - final itemsAttributes = initialAttributes; + context.read().add( + ServiceCreateEvent( + serviceModel: ServiceModel( + createdAt: DigitDateUtils + .getDateFromTimestamp( + DateTime.now() + .toLocal() + .millisecondsSinceEpoch, + dateFormat: Constants + .SurveyFormViewDateFormat, + ), + tenantId: value + .selectedServiceDefinition! + .tenantId, + clientId: isHealthFacilityWorker && + widget.referralClientRefId != + null + ? widget + .referralClientRefId + .toString() + : referenceId, + serviceDefId: value + .selectedServiceDefinition + ?.id, + attributes: attributes, + rowVersion: 1, + accountId: + SurveyFormSingleton() + .projectId, + auditDetails: AuditDetails( + createdBy: + SurveyFormSingleton() + .loggedInUserUuid, + createdTime: DateTime + .now() + .millisecondsSinceEpoch, + ), + clientAuditDetails: + ClientAuditDetails( + createdBy: + SurveyFormSingleton() + .loggedInUserUuid, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: + SurveyFormSingleton() + .loggedInUserUuid, + lastModifiedTime: context + .millisecondsSinceEpoch(), + ), + additionalDetails: + SurveyFormSingleton() + .boundary + ?.code, + ), + ), + ); - for (int i = 0; i < controller.length; i++) { - if (itemsAttributes?[i].required == true && - ((itemsAttributes?[i].dataType == - 'SingleValueList' && - visibleSurveyFormIndexes - .any((e) => e == i) && - (controller[i].text == '')) || - (itemsAttributes?[i].dataType != - 'SingleValueList' && - (controller[i].text == '' && - !(isHealthFacilityWorker && - widget.referralClientRefId != - null))))) { - return; + Navigator.of( + context, + rootNavigator: true, + ).pop(true); + }, + type: ButtonType.primary, + size: ButtonSize.large), + Button( + label: localizations.translate( + i18.surveyForm + .surveyFormDialogSecondaryAction, + ), + onPressed: () { + Navigator.of( + context, + rootNavigator: true, + ).pop(false); + }, + type: ButtonType.secondary, + size: ButtonSize.large) + ]), + ); + if (shouldSubmit ?? false) { + router.navigate(SurveyformRoute()); + router.push(SurveyFormAcknowledgementRoute()); } - } - - triggerLocalization = true; - - // Request location from LocationBloc - context - .read() - .add(const LocationEvent.load()); - DigitComponentsUtils().showLocationCapturingDialog( - context, - localizations - .translate(i18.common.locationCapturing), - DigitSyncDialogType.inProgress, - ); - }, - child: Text( - localizations.translate(i18.common.coreCommonSubmit), + }, ), - ), - ), - ), + ]), children: [ Form( - key: surveyFormKey, //assigning key to form - child: DigitCard( - child: Column(children: [ + key: surveyFormFormKey, //assigning key to form + child: DigitCard(cardType: CardType.primary, children: [ + Column(children: [ Padding( padding: const EdgeInsets.only(bottom: 8), child: Text( @@ -386,76 +372,99 @@ class SurveyFormViewPageState extends LocalizedState { return Column(children: [ if (e.dataType == 'String' && !(e.code ?? '').contains('.')) ...[ - DigitTextField( - onChange: (value) { - surveyFormKey.currentState?.validate(); - }, - isRequired: false, - controller: controller[index], - inputFormatter: [ - FilteringTextInputFormatter.allow(RegExp( - "[a-zA-Z0-9]", - )), - ], - validator: (value) { - if (((value == null || value == '') && - e.required == true)) { - return localizations - .translate("${e.code}_REQUIRED"); - } - if (e.regex != null) { - return (RegExp(e.regex!).hasMatch(value!)) - ? null - : localizations - .translate("${e.code}_REGEX"); - } - - return null; - }, + LabeledField( label: localizations.translate( '${value.selectedServiceDefinition?.code}.${e.code}', ), + isRequired: e.required ?? false, + child: DigitTextFormInput( + onChange: (value) { + surveyFormFormKey.currentState + ?.validate(); + }, + isRequired: e.required ?? false, + controller: controller[index], + inputFormatters: [ + FilteringTextInputFormatter.allow( + RegExp( + "[a-zA-Z0-9]", + )), + ], + validations: [ + Validator( + ValidatorType.customFunction, + controller[index].text, + customValidation: (value) { + if (((value == null || + value == '') && + e.required == true)) { + return localizations.translate( + "${e.code}_REQUIRED"); + } + if (e.regex != null) { + return (RegExp(e.regex!) + .hasMatch(value!)) + ? null + : localizations.translate( + "${e.code}_REGEX"); + } + + return null; + }, + ), + ]), ), ] else if (e.dataType == 'Number' && !(e.code ?? '').contains('.')) ...[ - DigitTextField( - onChange: (value) { - surveyFormKey.currentState?.validate(); - }, - textStyle: theme.textTheme.headlineMedium, - textInputType: TextInputType.number, - inputFormatter: [ - FilteringTextInputFormatter.allow(RegExp( - "[0-9]", - )), - ], - validator: (value) { - if (((value == null || value == '') && - e.required == true)) { - return localizations.translate( - i18.common.corecommonRequired, - ); - } - if (e.regex != null) { - return (RegExp(e.regex!).hasMatch(value!)) - ? null - : localizations - .translate("${e.code}_REGEX"); - } - - return null; - }, - controller: controller[index], + LabeledField( label: '${localizations.translate( '${value.selectedServiceDefinition?.code}.${e.code}', ).trim()} ${e.required == true ? '*' : ''}', + isRequired: e.required ?? false, + child: DigitTextFormInput( + onChange: (value) { + surveyFormFormKey.currentState + ?.validate(); + }, + isRequired: e.required ?? false, + keyboardType: TextInputType.number, + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp( + "[0-9]", + )), + ], + validations: [ + Validator( + ValidatorType.customFunction, + controller[index].text, + customValidation: (value) { + if (((value == null || value == '') && + e.required == true)) { + return localizations.translate( + i18.common.corecommonRequired, + ); + } + if (e.regex != null) { + return (RegExp(e.regex!) + .hasMatch(value!)) + ? null + : localizations.translate( + "${e.code}_REGEX"); + } + + return null; + }, + ), + ], + controller: controller[index], + ), ), ] else if (e.dataType == 'MultiValueList' && !(e.code ?? '').contains('.')) ...[ Align( alignment: Alignment.topLeft, child: Padding( - padding: const EdgeInsets.all(kPadding * 2), + padding: const EdgeInsets.all(8), child: Column( children: [ Text( @@ -470,183 +479,136 @@ class SurveyFormViewPageState extends LocalizedState { ), BlocBuilder( builder: (context, state) { - // Validation logic to check if required field is empty - final hasError = (e.required == true && - controller[index].text.isEmpty && - submitTriggered); - return Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - // Checkbox options - Column( - children: e.values! - .map((item) => Padding( - padding: - const EdgeInsets.only( - left: kPadding * 2), - child: DigitCheckboxTile( - label: item, - value: controller[index] - .text - .split('.') - .contains(item), - onChanged: (value) { - context - .read() - .add( - ServiceSurveyFormEvent( - value: item - .toString(), - submitTriggered: - submitTriggered, - ), - ); - - // Split the controller text into a list of values - var val = - controller[index] - .text - .split('.') - .where((v) => v - .trim() - .isNotEmpty) - .toList(); - if (val - .contains(item)) { - val.remove(item); - } else { - val.add(item); - } - - // Update the controller with the selected values - controller[index] - .value = - TextEditingController - .fromValue( - TextEditingValue( - text: val.join('.'), - ), - ).value; - - // If the field is required and no option is selected, trigger validation - if (e.required == - true && - val.isEmpty) { - submitTriggered = - true; - } - }, + children: e.values! + .map((e) => DigitCheckbox( + label: e, + value: controller[index] + .text + .split('.') + .contains(e), + onChanged: (value) { + context + .read() + .add( + ServiceSurveyFormEvent( + value: e.toString(), + submitTriggered: + submitTriggered, + ), + ); + final String ele; + var val = controller[index] + .text + .split('.'); + if (val.contains(e)) { + val.remove(e); + ele = val.join("."); + } else { + ele = + "${controller[index].text}.$e"; + } + controller[index].value = + TextEditingController + .fromValue( + TextEditingValue( + text: ele, ), - )) - .toList(), - ), - // Error message display if validation fails - Offstage( - offstage: !hasError, - child: Align( - alignment: Alignment.centerLeft, - child: Text( - localizations.translate( - i18.common.corecommonRequired, - ), - style: TextStyle( - color: theme.colorScheme.error, - ), - ), - ), - ), - ], + ).value; + }, + )) + .toList(), ); }, ), ] else if (e.dataType == 'SingleValueList') ...[ if (!(e.code ?? '').contains('.')) DigitCard( - child: _buildSurveyForm( - e, - index, - value.selectedServiceDefinition, - context, - ), - ), + cardType: CardType.primary, + children: [ + _buildSurveyForm( + e, + index, + value.selectedServiceDefinition, + context, + ), + ]), ] else if (e.dataType == 'Boolean') ...[ if (!(e.code ?? '').contains('.')) DigitCard( - child: Column( + cardType: CardType.primary, children: [ - Align( - alignment: Alignment.topLeft, - child: Padding( - padding: const EdgeInsets.all(8), - child: Column( - children: [ - Text( - '${localizations.translate( - '${selectedServiceDefinition?.code}.${e.code}', - )} ${e.required == true ? '*' : ''}', - style: theme - .textTheme.headlineSmall, + Column( + children: [ + Align( + alignment: Alignment.topLeft, + child: Padding( + padding: + const EdgeInsets.all(8), + child: Column( + children: [ + Text( + '${localizations.translate( + '${selectedServiceDefinition?.code}.${e.code}', + )} ${e.required == true ? '*' : ''}', + style: theme.textTheme + .headlineSmall, + ), + ], ), - ], + ), ), - ), - ), - BlocBuilder( - builder: (context, state) { - return SelectionBox( - //label: e, - allowMultipleSelection: false, - width: 110, - valueMapper: (value) { - return value - ? localizations.translate( + BlocBuilder( + builder: (context, state) { + return SelectionBox( + //label: e, + allowMultipleSelection: false, + // width: 110, + // initialSelection: controller[index].text=='true' ? [true] : controller[index].text=='false' ?[false] : [], + options: [ + SelectionOption( + name: localizations + .translate( i18.common .coreCommonYes, - ) - : localizations.translate( + ), + code: 'true', + ), + SelectionOption( + name: localizations + .translate( i18.common.coreCommonNo, + ), + code: 'false', + ) + ], + onSelectionChanged: + (curValue) { + if (curValue.isNotEmpty) { + context + .read() + .add( + ServiceSurveyFormEvent( + value: curValue + .last.code, + submitTriggered: + submitTriggered, + ), + ); + controller[index].value = + TextEditingValue( + text: curValue.first + .toString(), ); + } + }, + ); }, - initialSelection: - controller[index].text == - 'true' - ? [true] - : controller[index] - .text == - 'false' - ? [false] - : [], - options: const [ - true, - false - ], // TODO: need to update - onSelectionChanged: (curValue) { - if (curValue.isNotEmpty) { - context - .read() - .add( - ServiceSurveyFormEvent( - value: curValue - .toString(), - submitTriggered: - submitTriggered, - ), - ); - controller[index].value = - TextEditingValue( - text: curValue.first - .toString(), - ); - } - }, - ); - }, + ), + ], ), - ], - ), - ), + ]), ], ]); }), @@ -654,7 +616,7 @@ class SurveyFormViewPageState extends LocalizedState { height: 15, ), ]), - ), + ]), ), ], ); @@ -767,7 +729,7 @@ class SurveyFormViewPageState extends LocalizedState { : [], itemBuilder: (item) => RadioButtonBuilder( localizations.translate( - item.trim().toUpperCase(), + 'CORE_COMMON_${item.trim().toUpperCase()}', ), ), ); @@ -784,22 +746,29 @@ class SurveyFormViewPageState extends LocalizedState { right: 4.0, bottom: 16, ), - child: DigitTextField( - maxLength: 1000, - isRequired: true, - controller: additionalController[index], + child: LabeledField( label: localizations.translate( '${selectedServiceDefinition?.code}.${item.code}.ADDITIONAL_FIELD', ), - validator: (value1) { - if (value1 == null || value1 == '') { - return localizations.translate( - i18.common.coreCommonReasonRequired, - ); - } + child: DigitTextFormInput( + maxLength: 1000, + isRequired: true, + controller: additionalController[index], + validations: [ + Validator( + ValidatorType.customFunction, + additionalController[index].text, + customValidation: (value1) { + if (value1 == null || value1 == '') { + return localizations.translate( + i18.common.coreCommonReasonRequired, + ); + } - return null; - }, + return null; + }, + ) + ]), ), ) : const SizedBox(); @@ -843,65 +812,81 @@ class SurveyFormViewPageState extends LocalizedState { } else if (item.dataType == 'String') { return Padding( padding: const EdgeInsets.all(8.0), - child: DigitTextField( - maxLength: 1000, - onChange: (value) { - surveyFormKey.currentState?.validate(); - }, - isRequired: item.required ?? true, - controller: controller[index], - inputFormatter: [ - FilteringTextInputFormatter.allow(RegExp( - "[a-zA-Z0-9 ]", - )), - ], - validator: (value) { - if (((value == null || value == '') && item.required == true)) { - return localizations.translate("${item.code}_REQUIRED"); - } - if (item.regex != null) { - return (RegExp(item.regex!).hasMatch(value!)) - ? null - : localizations.translate("${item.code}_REGEX"); - } - - return null; - }, + child: LabeledField( label: localizations.translate( '${selectedServiceDefinition?.code}.${item.code}', ), + child: DigitTextFormInput( + maxLength: 1000, + onChange: (value) { + surveyFormFormKey.currentState?.validate(); + }, + isRequired: item.required ?? true, + controller: controller[index], + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp( + "[a-zA-Z0-9 ]", + )), + ], + validations: [ + Validator( + ValidatorType.customFunction, + controller[index].text, + customValidation: (value) { + if (((value == null || value == '') && + item.required == true)) { + return localizations.translate("${item.code}_REQUIRED"); + } + if (item.regex != null) { + return (RegExp(item.regex!).hasMatch(value!)) + ? null + : localizations.translate("${item.code}_REGEX"); + } + + return null; + }, + ) + ], + ), ), ); } else if (item.dataType == 'Number') { - return DigitTextField( - onChange: (value) { - surveyFormKey.currentState?.validate(); - }, - textStyle: theme.textTheme.headlineMedium, - textInputType: TextInputType.number, - inputFormatter: [ - FilteringTextInputFormatter.allow(RegExp( - "[0-9]", - )), - ], - validator: (value) { - if (((value == null || value == '') && item.required == true)) { - return localizations.translate( - i18.common.corecommonRequired, - ); - } - if (item.regex != null) { - return (RegExp(item.regex!).hasMatch(value!)) - ? null - : localizations.translate("${item.code}_REGEX"); - } - - return null; - }, - controller: controller[index], + return LabeledField( label: '${localizations.translate( '${selectedServiceDefinition?.code}.${item.code}', ).trim()} ${item.required == true ? '*' : ''}', + child: DigitTextFormInput( + onChange: (value) { + surveyFormFormKey.currentState?.validate(); + }, + keyboardType: TextInputType.number, + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp( + "[0-9]", + )), + ], + validations: [ + Validator( + ValidatorType.customFunction, + controller[index].text, + customValidation: (value) { + if (((value == null || value == '') && item.required == true)) { + return localizations.translate( + i18.common.corecommonRequired, + ); + } + if (item.regex != null) { + return (RegExp(item.regex!).hasMatch(value!)) + ? null + : localizations.translate("${item.code}_REGEX"); + } + + return null; + }, + ) + ], + controller: controller[index], + ), ); } else if (item.dataType == 'MultiValueList') { return Column( @@ -926,7 +911,7 @@ class SurveyFormViewPageState extends LocalizedState { builder: (context, state) { return Column( children: item.values! - .map((e) => DigitCheckboxTile( + .map((e) => DigitCheckbox( label: e, value: controller[index].text.split('.').contains(e), onChanged: (value) { @@ -979,19 +964,26 @@ class SurveyFormViewPageState extends LocalizedState { ), BlocBuilder( builder: (context, state) { - return SelectionBox( + return SelectionBox( //label: e, + options: [ + SelectionOption( + name: localizations.translate( + i18.common.coreCommonYes, + ), + code: "true"), + SelectionOption( + name: localizations.translate( + i18.common.coreCommonNo, + ), + code: "false"), + ], allowMultipleSelection: false, width: 110, - valueMapper: (value) { - return value ? 'Yes' : 'No'; - }, - initialSelection: const [false], - options: const [true, false], - onSelectionChanged: (valuec) { + onSelectionChanged: (value) { context.read().add( ServiceSurveyFormEvent( - value: valuec.toString(), + value: value.last.code, submitTriggered: submitTriggered, ), ); @@ -1041,7 +1033,7 @@ class SurveyFormViewPageState extends LocalizedState { margin: const EdgeInsets.only(bottom: 8.0, left: 4.0, right: 4.0), color: countDots(matchingChildItem.code ?? '') % 4 == 2 ? const Color.fromRGBO(238, 238, 238, 1) - : const DigitColors().white, + : const DigitColors().light.primary1Bg, child: _buildSurveyForm( matchingChildItem, initialAttributes?.indexOf(matchingChildItem) ?? parentIndex, @@ -1082,35 +1074,38 @@ class SurveyFormViewPageState extends LocalizedState { Future _onBackPressed(BuildContext context) async { bool? shouldNavigateBack = await showDialog( context: context, - builder: (context) => DigitDialog( - options: DigitDialogOptions( - titleText: localizations.translate( - i18.surveyForm.surveyFormBackDialogLabel, - ), - content: Text(localizations.translate( - i18.surveyForm.surveyFormBackDialogDescription, - )), - primaryAction: DigitDialogActions( - label: localizations - .translate(i18.surveyForm.surveyFormBackDialogPrimaryAction), - action: (ctx) { - Navigator.of( - context, - rootNavigator: true, - ).pop(true); - }, - ), - secondaryAction: DigitDialogActions( - label: localizations - .translate(i18.surveyForm.surveyFormBackDialogSecondaryAction), - action: (context) { - Navigator.of( - context, - rootNavigator: true, - ).pop(false); - }, - ), + builder: (context) => Popup( + title: localizations.translate( + i18.surveyForm.surveyFormBackDialogLabel, + ), + type: PopUpType.simple, + description: localizations.translate( + i18.surveyForm.surveyFormBackDialogDescription, ), + actions: [ + Button( + label: localizations + .translate(i18.surveyForm.surveyFormBackDialogPrimaryAction), + onPressed: () { + Navigator.of( + context, + rootNavigator: true, + ).pop(true); + }, + type: ButtonType.primary, + size: ButtonSize.large), + Button( + label: localizations.translate( + i18.surveyForm.surveyFormBackDialogSecondaryAction), + onPressed: () { + Navigator.of( + context, + rootNavigator: true, + ).pop(false); + }, + type: ButtonType.secondary, + size: ButtonSize.large) + ], ), ); diff --git a/packages/survey_form/lib/pages/survey_form_wrapper.dart b/packages/survey_form/lib/pages/survey_form_wrapper.dart index ff640108d..53d97087f 100644 --- a/packages/survey_form/lib/pages/survey_form_wrapper.dart +++ b/packages/survey_form/lib/pages/survey_form_wrapper.dart @@ -1,8 +1,10 @@ import 'package:auto_route/auto_route.dart'; +import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; import 'package:survey_form/utils/extensions/context_utility.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:survey_form/survey_form.dart'; +import 'package:location/location.dart'; @RoutePage() class SurveyFormWrapperPage extends StatelessWidget { @@ -35,6 +37,11 @@ class SurveyFormWrapperPage extends StatelessWidget { serviceDataRepository: service, ), ), + BlocProvider( + create: (_)=>LocationBloc( + location: Location() + ) + ) ], child: const AutoRouter(), ); diff --git a/packages/survey_form/lib/widgets/action_card.dart b/packages/survey_form/lib/widgets/action_card.dart index c5468f7bf..e231a1761 100644 --- a/packages/survey_form/lib/widgets/action_card.dart +++ b/packages/survey_form/lib/widgets/action_card.dart @@ -1,4 +1,6 @@ -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/enum/app_enums.dart'; +import 'package:digit_ui_components/theme/spacers.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_button.dart'; import 'package:flutter/material.dart'; class ActionCard extends StatelessWidget { @@ -15,27 +17,13 @@ class ActionCard extends StatelessWidget { children: items .map( (e) => Padding( - padding: const EdgeInsets.all(kPadding / 2), - child: DigitOutlineIconButton( - buttonStyle: OutlinedButton.styleFrom( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.zero, - ), - backgroundColor: Colors.white, - side: BorderSide( - width: 1.0, - color: e.action != null - ? theme.colorScheme.secondary - : theme.colorScheme.outline, - ), - minimumSize: Size( - MediaQuery.of(context).size.width / 1.25, - 50, - ), - ), - icon: e.icon, + padding: const EdgeInsets.all(spacer2 / 2), + child: Button( + type: ButtonType.secondary, + size: ButtonSize.large, + prefixIcon: e.icon, label: e.label, - onPressed: e.action, + onPressed: ()=>e.action, ), ), ) diff --git a/packages/survey_form/lib/widgets/back_navigation_help_header.dart b/packages/survey_form/lib/widgets/back_navigation_help_header.dart index 063f47bd1..14881117e 100644 --- a/packages/survey_form/lib/widgets/back_navigation_help_header.dart +++ b/packages/survey_form/lib/widgets/back_navigation_help_header.dart @@ -1,4 +1,7 @@ import 'package:auto_route/auto_route.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_back_button.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_button.dart'; import 'package:flutter/material.dart'; import '../../utils/i18_key_constants.dart' as i18; @@ -32,22 +35,15 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { child: Row( children: [ if (showBackNavigation) - Flexible( - child: TextButton.icon( - style: TextButton.styleFrom( - foregroundColor: theme.colorScheme.onSurface, - padding: EdgeInsets.zero, - ), - onPressed: () { - context.router.maybePop(); - handleBack != null ? handleBack!() : null; - }, - icon: const Icon(Icons.arrow_left_sharp), - label: Text( - SurveyFormLocalization.of(context).translate( - i18.common.coreCommonBack, - ), - overflow: TextOverflow.ellipsis, + Align( + alignment: Alignment.topLeft, + child: Padding( + padding: const EdgeInsets.all(spacer2), + child: BackNavigationButton( + handleBack: (){ + context.router.maybePop(); + handleBack!=null?handleBack!():null; + }, ), ), ), From 4dcbd5b79f94af86610c09c49b399cf15046aede Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Mon, 9 Sep 2024 15:16:00 +0530 Subject: [PATCH 141/241] updated validations for fields --- .../survey_form/lib/pages/survey_form.dart | 174 +- .../lib/pages/survey_form_boundary_view.dart | 4 +- .../lib/pages/survey_form_preview.dart | 96 +- .../lib/pages/survey_form_view.dart | 1557 +++++++++-------- 4 files changed, 935 insertions(+), 896 deletions(-) diff --git a/packages/survey_form/lib/pages/survey_form.dart b/packages/survey_form/lib/pages/survey_form.dart index 22b5e7a34..e7f2ddf39 100644 --- a/packages/survey_form/lib/pages/survey_form.dart +++ b/packages/survey_form/lib/pages/survey_form.dart @@ -1,7 +1,8 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_action_card.dart'; +import 'package:digit_ui_components/widgets/atoms/menu_card.dart'; import 'package:digit_ui_components/widgets/helper_widget/button_list.dart'; -import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:survey_form/survey_form.dart'; @@ -50,18 +51,17 @@ class SurveyFormPageState extends State { ), serviceDefinitionFetch: (ServiceDefinitionServiceFetchedState value) { - final values = value.serviceDefinitionList - .where((item) => - !SurveyFormSingleton() - .roles - .indexOf( - item.code!.split('.').lastOrNull!, - ) - .isNegative && - !item.code!.contains( - Constants.healthFacilitySurveyFormPrefix) && - (item.code ?? '') - .contains(SurveyFormSingleton().projectName)); + final values = value.serviceDefinitionList.where((item) => + !SurveyFormSingleton() + .roles + .indexOf( + item.code!.split('.').lastOrNull!, + ) + .isNegative && + !item.code! + .contains(Constants.healthFacilitySurveyFormPrefix) && + (item.code ?? '') + .contains(SurveyFormSingleton().projectName)); if (values.isEmpty) { return Column( @@ -75,79 +75,83 @@ class SurveyFormPageState extends State { ], ); } - return Padding( - padding: const EdgeInsets.all(spacer4), - child: ButtonListTile( - spacing: spacer4, - sortButtons: false, - isVertical: true, - buttons: values - .map((e)=>Button( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - label: localizations.translate('${e.code}'), - type: ButtonType.secondary, - size: ButtonSize.large, - prefixIcon: Icons.article, - suffixIcon: Icons.arrow_forward, - onPressed: () { - context.read().add( - ServiceDefinitionSelectionEvent( - serviceDefinition: e,)); - - showPopup( - context: context, - title: "", - type: PopUpType.simple, - actions: [ - Button( - label: localizations.translate(i18 - .surveyForm - .surveyFormCreateActionLabel), - onPressed: () { - context.router.push( - SurveyFormBoundaryViewRoute(), - ); - Navigator.of( - context, - rootNavigator: true, - ).pop(); - }, - type: ButtonType.secondary, - size: ButtonSize.medium, - prefixIcon: Icons.edit_calendar, - ), - Button( - label: localizations.translate(i18 - .surveyForm - .surveyFormViewActionLabel), - onPressed: () { - context - .read() - .add( - ServiceSearchEvent( - serviceSearchModel: - ServiceSearchModel( - id: e.id, - ), - ), - ); - context.router.push( - SurveyFormPreviewRoute(), - ); - Navigator.of( - context, - rootNavigator: true, - ).pop(); - }, - type: ButtonType.secondary, - size: ButtonSize.medium, - prefixIcon: Icons.visibility, + return Column( + children: values + .map((e) => Padding( + padding: const EdgeInsets.only( + left: spacer4, + right: spacer4, + top: spacer2 + ), + child: MenuCard( + icon: Icons.article, + heading: localizations.translate('${e.code}'), + onTap: () { + context + .read() + .add(ServiceDefinitionSelectionEvent( + serviceDefinition: e, + )); + + showDialog( + context: context, + builder: (ctx)=>ActionCard( + onOutsideTap: (){ + Navigator.of( + context, + rootNavigator: true, + ).pop(); + }, + actions: [ + Button( + label: localizations.translate(i18 + .surveyForm + .surveyFormCreateActionLabel), + onPressed: () { + context.router.push( + SurveyFormBoundaryViewRoute(), + ); + Navigator.of( + context, + rootNavigator: true, + ).pop(); + }, + type: ButtonType.secondary, + size: ButtonSize.large, + prefixIcon: Icons.edit_calendar, + ), + Button( + label: localizations.translate(i18 + .surveyForm + .surveyFormViewActionLabel), + onPressed: () { + context.read().add( + ServiceSearchEvent( + serviceSearchModel: + ServiceSearchModel( + id: e.id, + ), + ), + ); + context.router.push( + SurveyFormPreviewRoute(), + ); + Navigator.of( + context, + rootNavigator: true, + ).pop(); + }, + type: ButtonType.secondary, + size: ButtonSize.large, + prefixIcon: Icons.visibility, + ) + ], ), - ] - ); - }, - )).toList() - ), + ); + }, + ), + )) + .toList(), ); }, ); diff --git a/packages/survey_form/lib/pages/survey_form_boundary_view.dart b/packages/survey_form/lib/pages/survey_form_boundary_view.dart index 2d7066e33..538424904 100644 --- a/packages/survey_form/lib/pages/survey_form_boundary_view.dart +++ b/packages/survey_form/lib/pages/survey_form_boundary_view.dart @@ -1,5 +1,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:survey_form/survey_form.dart'; import 'package:flutter/material.dart'; @@ -28,6 +29,7 @@ class SurveyFormBoundaryViewPageState Widget build(BuildContext context) { final localizations = SurveyFormLocalization.of(context); final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); return Scaffold( body: ScrollableContent( @@ -55,7 +57,7 @@ class SurveyFormBoundaryViewPageState localizations.translate( i18.surveyForm.surveyFormDetailLabel, ), - style: theme.textTheme.displayMedium, + style: textTheme.headingXl, ), LabeledField( label: localizations.translate( diff --git a/packages/survey_form/lib/pages/survey_form_preview.dart b/packages/survey_form/lib/pages/survey_form_preview.dart index c3655c2bd..bc72a09ed 100644 --- a/packages/survey_form/lib/pages/survey_form_preview.dart +++ b/packages/survey_form/lib/pages/survey_form_preview.dart @@ -77,55 +77,58 @@ class SurveyFormPreviewPageState extends LocalizedState { children: [ ...serviceList .map((e) => e.serviceDefId != null - ? DigitCard( - cardType: CardType.primary, - children: [ - Align( - alignment: Alignment.centerLeft, - child: Text( - DateFormat(Constants.SurveyFormPreviewDateFormat) - .format( - DateFormat(Constants - .defaultDateFormat) - .parse( - e.createdAt.toString(), + ? Padding( + padding: const EdgeInsets.all(spacer2), + child: DigitCard( + cardType: CardType.primary, + children: [ + Align( + alignment: Alignment.centerLeft, + child: Text( + DateFormat(Constants.SurveyFormPreviewDateFormat) + .format( + DateFormat(Constants + .defaultDateFormat) + .parse( + e.createdAt.toString(), + ), ), + style: textTheme.headingXl, ), - style: textTheme.headingXl, ), - ), - Row( - mainAxisAlignment: - MainAxisAlignment - .spaceBetween, - children: [ - SizedBox( - child: Text( - localizations.translate( - '${e.tenantId}', + Row( + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + children: [ + SizedBox( + child: Text( + localizations.translate( + '${e.tenantId}', + ), ), ), - ), - Button( - label: localizations.translate( - i18.searchBeneficiary - .iconLabel, + Button( + label: localizations.translate( + i18.searchBeneficiary + .iconLabel, + ), + type: ButtonType.secondary, + size: ButtonSize.medium, + onPressed: () { + context + .read() + .add( + ServiceSelectionEvent( + service: e, + ), + ); + }, ), - type: ButtonType.secondary, - size: ButtonSize.medium, - onPressed: () { - context - .read() - .add( - ServiceSelectionEvent( - service: e, - ), - ); - }, - ), - ], - ), - ]) + ], + ), + ]), + ) : const Offstage()) .toList(), ], @@ -152,8 +155,7 @@ class SurveyFormPreviewPageState extends LocalizedState { return DigitCard( cardType: CardType.primary, children: [Column( - mainAxisAlignment: - MainAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, children: [ Align( alignment: Alignment.centerLeft, @@ -174,7 +176,7 @@ class SurveyFormPreviewPageState extends LocalizedState { .map( (e) => Padding( padding: - const EdgeInsets.all(8), + const EdgeInsets.all(spacer2), child: Column( mainAxisAlignment: MainAxisAlignment.start, @@ -207,7 +209,7 @@ class SurveyFormPreviewPageState extends LocalizedState { .translate( 'CORE_COMMON_${e.value.toString().toUpperCase()}', ) - : e.value ?? "", + : e.value??"", ), ), ), diff --git a/packages/survey_form/lib/pages/survey_form_view.dart b/packages/survey_form/lib/pages/survey_form_view.dart index 8aac749a8..412b32ea0 100644 --- a/packages/survey_form/lib/pages/survey_form_view.dart +++ b/packages/survey_form/lib/pages/survey_form_view.dart @@ -3,15 +3,15 @@ import 'dart:math'; import 'package:auto_route/auto_route.dart'; import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/utils/date_utils.dart'; -import 'package:digit_ui_components/utils/validators/validator.dart'; import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:digit_ui_components/widgets/atoms/selection_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; import 'package:survey_form/survey_form.dart'; import 'package:survey_form/utils/extensions/context_utility.dart'; import 'package:digit_data_model/data_model.dart'; -import 'package:group_radio_button/group_radio_button.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -62,6 +62,7 @@ class SurveyFormViewPageState extends LocalizedState { @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); bool isHealthFacilityWorker = SurveyFormSingleton().isHealthFacilityWorker; @@ -126,6 +127,7 @@ class SurveyFormViewPageState extends LocalizedState { if (!isValid!) { return; } + final itemsAttributes = initialAttributes; for (int i = 0; i < controller.length; i++) { @@ -156,196 +158,188 @@ class SurveyFormViewPageState extends LocalizedState { double? latitude = locationState.latitude; double? longitude = locationState.longitude; - final shouldSubmit = await showDialog( - context: context, - builder: (context) => Popup( - type: PopUpType.simple, - title: localizations.translate( - i18.surveyForm.surveyFormDialogLabel, - ), - description: localizations.translate( - i18.surveyForm.surveyFormDialogDescription, - ), - actions: [ - Button( - label: localizations.translate( - i18.surveyForm - .surveyFormDialogPrimaryAction, - ), - onPressed: () { - final referenceId = - IdGen.i.identifier; - List - attributes = []; - for (int i = 0; - i < controller.length; - i++) { - final attribute = initialAttributes; - attributes - .add(ServiceAttributesModel( - auditDetails: AuditDetails( - createdBy: SurveyFormSingleton() - .loggedInUserUuid, - createdTime: context - .millisecondsSinceEpoch(), - ), - attributeCode: - '${attribute?[i].code}', - dataType: attribute?[i].dataType, - clientReferenceId: - IdGen.i.identifier, - referenceId: isHealthFacilityWorker && - widget.referralClientRefId != - null - ? widget.referralClientRefId - : referenceId, - value: attribute?[i].dataType != - 'SingleValueList' - ? controller[i] - .text - .toString() - .trim() - .isNotEmpty - ? controller[i] - .text - .toString() - : '' - : visibleSurveyFormIndexes - .contains(i) - ? controller[i] - .text - .toString() - : i18.surveyForm - .notSelectedKey, - rowVersion: 1, - tenantId: attribute?[i].tenantId, - additionalDetails: isHealthFacilityWorker && - widget.referralClientRefId != - null - ? null - : ((attribute?[i] - .values - ?.length == - 2 || - attribute?[i] - .values - ?.length == - 3) && - controller[i].text == - attribute?[i] - .values?[1] - .trim()) - ? additionalController[i] - .text - .toString() - .isEmpty - ? null - : additionalController[ - i] - .text - .toString() - : null, - additionalFields: - ServiceAttributesAdditionalFields( - version: 1, - fields: [ - AdditionalField( - 'latitude', - latitude, + showPopup( + context: context, + type: PopUpType.simple, + title: localizations.translate( + i18.surveyForm.surveyFormDialogLabel, + ), + description: localizations.translate( + i18.surveyForm.surveyFormDialogDescription, + ), + actions: [ + Button( + label: localizations.translate( + i18.surveyForm + .surveyFormDialogPrimaryAction, + ), + onPressed: () { + final referenceId = IdGen.i.identifier; + List + attributes = []; + for (int i = 0; + i < controller.length; + i++) { + final attribute = initialAttributes; + attributes.add(ServiceAttributesModel( + auditDetails: AuditDetails( + createdBy: SurveyFormSingleton() + .loggedInUserUuid, + createdTime: context + .millisecondsSinceEpoch(), + ), + attributeCode: + '${attribute?[i].code}', + dataType: attribute?[i].dataType, + clientReferenceId: + IdGen.i.identifier, + referenceId: isHealthFacilityWorker && + widget.referralClientRefId != + null + ? widget.referralClientRefId + : referenceId, + value: attribute?[i].dataType != + 'SingleValueList' + ? controller[i] + .text + .toString() + .trim() + .isNotEmpty + ? controller[i] + .text + .toString() + : '' + : visibleSurveyFormIndexes + .contains(i) + ? controller[i] + .text + .toString() + : i18.surveyForm + .notSelectedKey, + rowVersion: 1, + tenantId: attribute?[i].tenantId, + additionalDetails: isHealthFacilityWorker && + widget.referralClientRefId != + null + ? null + : ((attribute?[i] + .values + ?.length == + 2 || + attribute?[i] + .values + ?.length == + 3) && + controller[i].text == + attribute?[i] + .values?[1] + .trim()) + ? additionalController[i] + .text + .toString() + .isEmpty + ? null + : additionalController[ + i] + .text + .toString() + : null, + additionalFields: + ServiceAttributesAdditionalFields( + version: 1, + fields: [ + AdditionalField( + 'latitude', + latitude, + ), + AdditionalField( + 'longitude', + longitude, + ), + ], + ), + )); + } + + context.read().add( + ServiceCreateEvent( + serviceModel: ServiceModel( + createdAt: DigitDateUtils + .getDateFromTimestamp( + DateTime.now() + .toLocal() + .millisecondsSinceEpoch, + dateFormat: Constants + .SurveyFormViewDateFormat, ), - AdditionalField( - 'longitude', - longitude, + tenantId: value + .selectedServiceDefinition! + .tenantId, + clientId: isHealthFacilityWorker && + widget.referralClientRefId != + null + ? widget + .referralClientRefId + .toString() + : referenceId, + serviceDefId: value + .selectedServiceDefinition + ?.id, + attributes: attributes, + rowVersion: 1, + accountId: + SurveyFormSingleton() + .projectId, + auditDetails: AuditDetails( + createdBy: + SurveyFormSingleton() + .loggedInUserUuid, + createdTime: DateTime.now() + .millisecondsSinceEpoch, ), - ], - ), - )); - } - - context.read().add( - ServiceCreateEvent( - serviceModel: ServiceModel( - createdAt: DigitDateUtils - .getDateFromTimestamp( - DateTime.now() - .toLocal() - .millisecondsSinceEpoch, - dateFormat: Constants - .SurveyFormViewDateFormat, - ), - tenantId: value - .selectedServiceDefinition! - .tenantId, - clientId: isHealthFacilityWorker && - widget.referralClientRefId != - null - ? widget - .referralClientRefId - .toString() - : referenceId, - serviceDefId: value - .selectedServiceDefinition - ?.id, - attributes: attributes, - rowVersion: 1, - accountId: + clientAuditDetails: + ClientAuditDetails( + createdBy: SurveyFormSingleton() - .projectId, - auditDetails: AuditDetails( - createdBy: - SurveyFormSingleton() - .loggedInUserUuid, - createdTime: DateTime - .now() - .millisecondsSinceEpoch, - ), - clientAuditDetails: - ClientAuditDetails( - createdBy: - SurveyFormSingleton() - .loggedInUserUuid, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: - SurveyFormSingleton() - .loggedInUserUuid, - lastModifiedTime: context - .millisecondsSinceEpoch(), - ), - additionalDetails: + .loggedInUserUuid, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: SurveyFormSingleton() - .boundary - ?.code, + .loggedInUserUuid, + lastModifiedTime: context + .millisecondsSinceEpoch(), ), + additionalDetails: + SurveyFormSingleton() + .boundary + ?.code, ), - ); - - Navigator.of( - context, - rootNavigator: true, - ).pop(true); - }, - type: ButtonType.primary, - size: ButtonSize.large), - Button( - label: localizations.translate( - i18.surveyForm - .surveyFormDialogSecondaryAction, - ), - onPressed: () { - Navigator.of( - context, - rootNavigator: true, - ).pop(false); - }, - type: ButtonType.secondary, - size: ButtonSize.large) - ]), - ); - if (shouldSubmit ?? false) { - router.navigate(SurveyformRoute()); - router.push(SurveyFormAcknowledgementRoute()); - } + ), + ); + Navigator.of( + context, + rootNavigator: true, + ).pop(true); + router.push( + SurveyFormAcknowledgementRoute()); + }, + type: ButtonType.primary, + size: ButtonSize.large), + Button( + label: localizations.translate( + i18.surveyForm + .surveyFormDialogSecondaryAction, + ), + onPressed: () { + Navigator.of( + context, + rootNavigator: true, + ).pop(false); + }, + type: ButtonType.secondary, + size: ButtonSize.large) + ]); }, ), ]), @@ -353,269 +347,297 @@ class SurveyFormViewPageState extends LocalizedState { Form( key: surveyFormFormKey, //assigning key to form child: DigitCard(cardType: CardType.primary, children: [ - Column(children: [ - Padding( - padding: const EdgeInsets.only(bottom: 8), - child: Text( - '${localizations.translate( - value.selectedServiceDefinition!.code - .toString(), - )} ${localizations.translate(i18.surveyForm.surveyForm)}', - style: theme.textTheme.displayMedium, - textAlign: TextAlign.left, - ), + Padding( + padding: const EdgeInsets.only(bottom: spacer2), + child: Text( + '${localizations.translate( + value.selectedServiceDefinition!.code.toString(), + )} ${localizations.translate(i18.surveyForm.surveyForm)}', + style: textTheme.headingXl, ), - ...initialAttributes!.map(( - e, - ) { - int index = (initialAttributes ?? []).indexOf(e); - return Column(children: [ - if (e.dataType == 'String' && - !(e.code ?? '').contains('.')) ...[ - LabeledField( - label: localizations.translate( - '${value.selectedServiceDefinition?.code}.${e.code}', - ), - isRequired: e.required ?? false, - child: DigitTextFormInput( - onChange: (value) { - surveyFormFormKey.currentState - ?.validate(); - }, - isRequired: e.required ?? false, - controller: controller[index], - inputFormatters: [ - FilteringTextInputFormatter.allow( - RegExp( - "[a-zA-Z0-9]", - )), - ], - validations: [ - Validator( - ValidatorType.customFunction, - controller[index].text, - customValidation: (value) { - if (((value == null || - value == '') && - e.required == true)) { - return localizations.translate( - "${e.code}_REQUIRED"); - } - if (e.regex != null) { - return (RegExp(e.regex!) - .hasMatch(value!)) - ? null - : localizations.translate( - "${e.code}_REGEX"); - } + ), + ...initialAttributes!.map(( + e, + ) { + int index = (initialAttributes ?? []).indexOf(e); + return Column(children: [ + if (e.dataType == 'String' && + !(e.code ?? '').contains('.')) ...[ + FormField( + autovalidateMode: + AutovalidateMode.onUserInteraction, + validator: (value) { + if (((controller[index].text == null || + controller[index].text == '') && + e.required == true)) { + return localizations + .translate("${e.code}_REQUIRED"); + } + if (e.regex != null) { + return (RegExp(e.regex!).hasMatch( + controller[index].text!)) + ? null + : localizations + .translate("${e.code}_REGEX"); + } - return null; - }, + return null; + }, + builder: (field) { + return LabeledField( + label: localizations.translate( + '${value.selectedServiceDefinition?.code}.${e.code}', ), - ]), - ), - ] else if (e.dataType == 'Number' && - !(e.code ?? '').contains('.')) ...[ - LabeledField( - label: '${localizations.translate( - '${value.selectedServiceDefinition?.code}.${e.code}', - ).trim()} ${e.required == true ? '*' : ''}', - isRequired: e.required ?? false, - child: DigitTextFormInput( - onChange: (value) { - surveyFormFormKey.currentState - ?.validate(); - }, - isRequired: e.required ?? false, - keyboardType: TextInputType.number, - inputFormatters: [ - FilteringTextInputFormatter.allow(RegExp( - "[0-9]", - )), - ], - validations: [ - Validator( - ValidatorType.customFunction, - controller[index].text, - customValidation: (value) { - if (((value == null || value == '') && - e.required == true)) { - return localizations.translate( - i18.common.corecommonRequired, - ); - } - if (e.regex != null) { - return (RegExp(e.regex!) - .hasMatch(value!)) - ? null - : localizations.translate( - "${e.code}_REGEX"); - } + isRequired: e.required ?? false, + child: DigitTextFormInput( + onChange: (value) { + field.didChange(value); + controller[index].text = value; + surveyFormFormKey.currentState + ?.validate(); + }, + errorMessage: field.errorText, + controller: controller[index], + inputFormatters: [ + FilteringTextInputFormatter.allow( + RegExp( + "[a-zA-Z0-9]", + )), + ], + )); + }), + ] else if (e.dataType == 'Number' && + !(e.code ?? '').contains('.')) ...[ + FormField( + autovalidateMode: + AutovalidateMode.onUserInteraction, + validator: (value) { + if (((controller[index].text == null || + controller[index].text == '') && + e.required == true)) { + return localizations.translate( + i18.common.corecommonRequired, + ); + } + if (e.regex != null) { + return (RegExp(e.regex!).hasMatch( + controller[index].text!)) + ? null + : localizations + .translate("${e.code}_REGEX"); + } - return null; + return null; + }, + builder: (field) { + return LabeledField( + label: localizations + .translate( + '${value.selectedServiceDefinition?.code}.${e.code}', + ) + .trim(), + isRequired: e.required ?? false, + child: DigitTextFormInput( + onChange: (value) { + field.didChange(value); + controller[index].text = value; + surveyFormFormKey.currentState + ?.validate(); }, + errorMessage: field.errorText, + keyboardType: TextInputType.number, + inputFormatters: [ + FilteringTextInputFormatter.allow( + RegExp( + "[0-9]", + )), + ], + controller: controller[index], ), - ], - controller: controller[index], - ), - ), - ] else if (e.dataType == 'MultiValueList' && - !(e.code ?? '').contains('.')) ...[ - Align( - alignment: Alignment.topLeft, - child: Padding( - padding: const EdgeInsets.all(8), - child: Column( - children: [ - Text( - '${localizations.translate( - '${value.selectedServiceDefinition?.code}.${e.code}', - )} ${e.required == true ? '*' : ''}', - style: theme.textTheme.headlineSmall, - ), - ], - ), - ), - ), - BlocBuilder( - builder: (context, state) { - return Column( - children: e.values! - .map((e) => DigitCheckbox( - label: e, - value: controller[index] - .text - .split('.') - .contains(e), - onChanged: (value) { - context - .read() - .add( - ServiceSurveyFormEvent( - value: e.toString(), - submitTriggered: - submitTriggered, - ), - ); - final String ele; - var val = controller[index] - .text - .split('.'); - if (val.contains(e)) { - val.remove(e); - ele = val.join("."); - } else { - ele = - "${controller[index].text}.$e"; - } - controller[index].value = - TextEditingController - .fromValue( - TextEditingValue( - text: ele, - ), - ).value; - }, - )) - .toList(), ); - }, - ), - ] else if (e.dataType == 'SingleValueList') ...[ - if (!(e.code ?? '').contains('.')) - DigitCard( - cardType: CardType.primary, - children: [ - _buildSurveyForm( - e, - index, - value.selectedServiceDefinition, - context, - ), - ]), - ] else if (e.dataType == 'Boolean') ...[ - if (!(e.code ?? '').contains('.')) - DigitCard( - cardType: CardType.primary, - children: [ - Column( - children: [ - Align( - alignment: Alignment.topLeft, - child: Padding( - padding: - const EdgeInsets.all(8), - child: Column( - children: [ - Text( - '${localizations.translate( - '${selectedServiceDefinition?.code}.${e.code}', - )} ${e.required == true ? '*' : ''}', - style: theme.textTheme - .headlineSmall, - ), - ], - ), - ), - ), - BlocBuilder( - builder: (context, state) { - return SelectionBox( - //label: e, - allowMultipleSelection: false, - // width: 110, - // initialSelection: controller[index].text=='true' ? [true] : controller[index].text=='false' ?[false] : [], - options: [ - SelectionOption( - name: localizations - .translate( - i18.common - .coreCommonYes, - ), - code: 'true', - ), - SelectionOption( - name: localizations - .translate( - i18.common.coreCommonNo, - ), - code: 'false', - ) - ], - onSelectionChanged: - (curValue) { - if (curValue.isNotEmpty) { + }), + ] else if (e.dataType == 'MultiValueList' && + !(e.code ?? '').contains('.')) ...[ + Align( + alignment: Alignment.topLeft, + child: Padding( + padding: const EdgeInsets.all(spacer2), + child: LabeledField( + label: localizations.translate( + '${value.selectedServiceDefinition?.code}.${e.code}', + ), + isRequired: e.required ?? false, + child: + BlocBuilder( + builder: (context, state) { + return Column( + children: e.values! + .map((e) => DigitCheckbox( + label: e, + value: controller[index] + .text + .split('.') + .contains(e), + onChanged: (value) { context .read() .add( ServiceSurveyFormEvent( - value: curValue - .last.code, + value: + e.toString(), submitTriggered: submitTriggered, ), ); + final String ele; + var val = + controller[index] + .text + .split('.'); + if (val.contains(e)) { + val.remove(e); + ele = val.join("."); + } else { + ele = + "${controller[index].text}.$e"; + } controller[index].value = - TextEditingValue( - text: curValue.first - .toString(), + TextEditingController + .fromValue( + TextEditingValue( + text: ele, + ), + ).value; + }, + )) + .toList(), + ); + }, + ), + ), + ), + ), + ] else if (e.dataType == 'SingleValueList') ...[ + if (!(e.code ?? '').contains('.')) + DigitCard( + cardType: CardType.primary, + children: [ + _buildSurveyForm( + e, + index, + value.selectedServiceDefinition, + context, + ), + ]), + ] else if (e.dataType == 'Boolean') ...[ + if (!(e.code ?? '').contains('.')) + DigitCard( + cardType: CardType.primary, + children: [ + Align( + alignment: Alignment.topLeft, + child: Padding( + padding: + const EdgeInsets.all(spacer2), + child: LabeledField( + label: localizations.translate( + '${selectedServiceDefinition?.code}.${e.code}', + ), + isRequired: e.required ?? false, + child: BlocBuilder( + builder: (context, state) { + return FormField( + autovalidateMode: + AutovalidateMode + .onUserInteraction, + validator: (value) { + if (e.required == true && + (controller[index] + .text == + null || + controller[index] + .text == + '')) { + return localizations + .translate( + i18.common + .coreCommonReasonRequired, ); } + + return null; }, + builder: (field) => + SelectionBox( + errorMessage: + field.errorText, + allowMultipleSelection: + false, + valueMapper: (value) { + return value + ? localizations + .translate( + i18.common + .coreCommonYes, + ) + : localizations + .translate( + i18.common + .coreCommonNo, + ); + }, + initialSelection: + controller[index] + .text == + 'true' + ? [true] + : controller[index] + .text == + 'false' + ? [false] + : [], + options: const [ + true, + false + ], + onSelectionChanged: + (curValue) { + field.didChange( + curValue.first); + if (curValue.isNotEmpty) { + context + .read() + .add( + ServiceSurveyFormEvent( + value: curValue + .toString(), + submitTriggered: + submitTriggered, + ), + ); + controller[index] + .value = + TextEditingValue( + text: curValue.first + .toString(), + ); + } + }, + ), ); }, ), - ], + ), ), - ]), - ], - ]); - }), - const SizedBox( - height: 15, - ), - ]), + ), + ]), + ], + ]); + }), + const SizedBox( + height: 15, + ), ]), ), ], @@ -637,6 +659,7 @@ class SurveyFormViewPageState extends LocalizedState { bool isHealthFacilityWorker = SurveyFormSingleton().isHealthFacilityWorker; final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); /* Check the data type of the attribute*/ if (item.dataType == 'SingleValueList') { final childItems = getNextQuestions( @@ -658,353 +681,361 @@ class SurveyFormViewPageState extends LocalizedState { } } - return Column( - children: [ - Align( - alignment: Alignment.topLeft, - child: Padding( - padding: const EdgeInsets.all(16.0), // Add padding here - child: Text( - '${localizations.translate( + return Align( + alignment: Alignment.topLeft, + child: Padding( + padding: const EdgeInsets.all(spacer4), // Add padding here + child: LabeledField( + label: localizations.translate( '${selectedServiceDefinition?.code}.${item.code}', - )} ${item.required == true ? '*' : ''}', - style: theme.textTheme.headlineSmall, - ), - ), - ), - Column( - children: [ - BlocBuilder( - builder: (context, state) { - return RadioGroup.builder( - groupValue: controller[index].text.trim(), - onChanged: (value) { - context.read().add( - ServiceSurveyFormEvent( - value: Random().nextInt(100).toString(), - submitTriggered: submitTriggered, - ), - ); - setState(() { - // Clear child controllers and update visibility - for (final matchingChildItem in childItems) { - final childIndex = - initialAttributes?.indexOf(matchingChildItem); - if (childIndex != null) { - // controller[childIndex].clear(); - visibleSurveyFormIndexes - .removeWhere((v) => v == childIndex); - } - } + ), + isRequired: item.required ?? false, + child: Column(children: [ + BlocBuilder( + builder: (context, state) { + return Align( + alignment: Alignment.topLeft, + child: FormField( + autovalidateMode: AutovalidateMode.onUserInteraction, + validator: (value1) { + if (item.required == true && + (controller[index].text == null || + controller[index].text == '')) { + return localizations.translate( + i18.common.coreCommonReasonRequired, + ); + } - // Update the current controller's value - controller[index].value = - TextEditingController.fromValue( - TextEditingValue( - text: value!, - ), - ).value; + return null; + }, + builder: (field) => RadioList( + radioButtons: item.values != null + ? item.values! + .where((e) => + e != i18.surveyForm.notSelectedKey) + .toList() + .map((item) => RadioButtonModel( + code: item, + name: localizations.translate( + 'CORE_COMMON_${item.trim().toUpperCase()}', + ), + )) + .toList() + : [], + errorMessage: field.errorText, + groupValue: controller[index].text.trim(), + onChanged: (value) { + field.didChange(value); + context.read().add( + ServiceSurveyFormEvent( + value: Random().nextInt(100).toString(), + submitTriggered: submitTriggered, + ), + ); + setState(() { + // Clear child controllers and update visibility + for (final matchingChildItem in childItems) { + final childIndex = initialAttributes + ?.indexOf(matchingChildItem); + if (childIndex != null) { + // controller[childIndex].clear(); + visibleSurveyFormIndexes + .removeWhere((v) => v == childIndex); + } + } - if (excludedIndexes.isNotEmpty) { - for (int i = 0; i < excludedIndexes.length; i++) { - // Clear excluded child controllers - if (item.dataType != 'SingleValueList') { - // controller[excludedIndexes[i]].value = - // TextEditingController.fromValue( - // const TextEditingValue( - // text: '', - // ), - // ).value; - } - } - } + // Update the current controller's value + controller[index].value = + TextEditingController.fromValue( + TextEditingValue( + text: value!.code, + ), + ).value; - // Remove corresponding controllers based on the removed attributes - }); - }, - items: item.values != null - ? item.values! - .where((e) => e != i18.surveyForm.notSelectedKey) - .toList() - : [], - itemBuilder: (item) => RadioButtonBuilder( - localizations.translate( - 'CORE_COMMON_${item.trim().toUpperCase()}', - ), - ), - ); - }, - ), - BlocBuilder( - builder: (context, state) { - return (controller[index].text == item.values?[1].trim() && - !(isHealthFacilityWorker && - widget.referralClientRefId != null)) - ? Padding( - padding: const EdgeInsets.only( - left: 4.0, - right: 4.0, - bottom: 16, - ), - child: LabeledField( - label: localizations.translate( - '${selectedServiceDefinition?.code}.${item.code}.ADDITIONAL_FIELD', - ), - child: DigitTextFormInput( - maxLength: 1000, - isRequired: true, - controller: additionalController[index], - validations: [ - Validator( - ValidatorType.customFunction, - additionalController[index].text, - customValidation: (value1) { - if (value1 == null || value1 == '') { - return localizations.translate( - i18.common.coreCommonReasonRequired, - ); - } + if (excludedIndexes.isNotEmpty) { + for (int i = 0; + i < excludedIndexes.length; + i++) { + // Clear excluded child controllers + if (item.dataType != 'SingleValueList') { + // controller[excludedIndexes[i]].value = + // TextEditingController.fromValue( + // const TextEditingValue( + // text: '', + // ), + // ).value; + } + } + } - return null; - }, - ) - ]), + // Remove corresponding controllers based on the removed attributes + }); + }, ), - ) - : const SizedBox(); - }, - ), - BlocBuilder( - builder: (context, state) { - final hasError = (item.required == true && - controller[index].text.isEmpty && - submitTriggered); - - return Offstage( - offstage: !hasError, - child: Align( - alignment: Alignment.centerLeft, - child: Text( - localizations.translate( - i18.common.corecommonRequired, - ), - style: TextStyle( - color: theme.colorScheme.error, ), - ), + ); + }, + ), + BlocBuilder( + builder: (context, state) { + return (controller[index].text == + item.values?[1].trim() && + !(isHealthFacilityWorker && + widget.referralClientRefId != null)) + ? Padding( + padding: const EdgeInsets.only( + left: spacer1, + right: spacer1, + bottom: spacer4, + ), + child: FormField( + autovalidateMode: + AutovalidateMode.onUserInteraction, + validator: (value1) { + if (item.required == true && + (additionalController[index].text == + null || + additionalController[index].text == + '')) { + return localizations.translate( + i18.common.coreCommonReasonRequired, + ); + } + + return null; + }, + builder: (field) { + return LabeledField( + label: localizations.translate( + '${selectedServiceDefinition?.code}.${item.code}.ADDITIONAL_FIELD', + ), + isRequired: item.required ?? false, + child: DigitTextFormInput( + onChange: (value) { + field.didChange(value); + additionalController[index].text = + value; + }, + errorMessage: field.errorText, + maxLength: 1000, + charCount: true, + controller: additionalController[index], + )); + }, + ), + ) + : const SizedBox(); + }, + ), + if (childItems.isNotEmpty && + controller[index].text.trim().isNotEmpty) ...[ + _buildNestedSurveyForm( + item.code.toString(), + index, + controller[index].text.trim(), + context, ), - ); - }, - ), - ], - ), - if (childItems.isNotEmpty && - controller[index].text.trim().isNotEmpty) ...[ - _buildNestedSurveyForm( - item.code.toString(), - index, - controller[index].text.trim(), - context, - ), - ], - ], + ], + ]))), ); } else if (item.dataType == 'String') { - return Padding( - padding: const EdgeInsets.all(8.0), - child: LabeledField( - label: localizations.translate( - '${selectedServiceDefinition?.code}.${item.code}', - ), - child: DigitTextFormInput( - maxLength: 1000, - onChange: (value) { - surveyFormFormKey.currentState?.validate(); - }, - isRequired: item.required ?? true, - controller: controller[index], - inputFormatters: [ - FilteringTextInputFormatter.allow(RegExp( - "[a-zA-Z0-9 ]", - )), - ], - validations: [ - Validator( - ValidatorType.customFunction, - controller[index].text, - customValidation: (value) { - if (((value == null || value == '') && - item.required == true)) { - return localizations.translate("${item.code}_REQUIRED"); - } - if (item.regex != null) { - return (RegExp(item.regex!).hasMatch(value!)) - ? null - : localizations.translate("${item.code}_REGEX"); - } + return FormField( + autovalidateMode: AutovalidateMode.onUserInteraction, + validator: (value) { + if (((controller[index].text == null || + controller[index].text == '') && + item.required == true)) { + return localizations.translate("${item.code}_REQUIRED"); + } + if (item.regex != null) { + return (RegExp(item.regex!).hasMatch(controller[index].text!)) + ? null + : localizations.translate("${item.code}_REGEX"); + } - return null; + return null; + }, + builder: (field) { + return LabeledField( + label: localizations.translate( + '${selectedServiceDefinition?.code}.${item.code}', + ), + isRequired: item.required ?? false, + child: DigitTextFormInput( + maxLength: 1000, + charCount: true, + onChange: (value) { + field.didChange(value); + controller[index].text = value; }, - ) - ], - ), - ), - ); + errorMessage: field.errorText, + controller: controller[index], + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp( + "[a-zA-Z0-9 ]", + )), + ], + ), + ); + }); } else if (item.dataType == 'Number') { - return LabeledField( - label: '${localizations.translate( - '${selectedServiceDefinition?.code}.${item.code}', - ).trim()} ${item.required == true ? '*' : ''}', - child: DigitTextFormInput( - onChange: (value) { - surveyFormFormKey.currentState?.validate(); - }, - keyboardType: TextInputType.number, - inputFormatters: [ - FilteringTextInputFormatter.allow(RegExp( - "[0-9]", - )), - ], - validations: [ - Validator( - ValidatorType.customFunction, - controller[index].text, - customValidation: (value) { - if (((value == null || value == '') && item.required == true)) { - return localizations.translate( - i18.common.corecommonRequired, - ); - } - if (item.regex != null) { - return (RegExp(item.regex!).hasMatch(value!)) - ? null - : localizations.translate("${item.code}_REGEX"); - } + return FormField( + autovalidateMode: AutovalidateMode.onUserInteraction, + validator: (value) { + if (((controller[index].text == null || + controller[index].text == '') && + item.required == true)) { + return localizations.translate( + i18.common.corecommonRequired, + ); + } + if (item.regex != null) { + return (RegExp(item.regex!).hasMatch(controller[index].text!)) + ? null + : localizations.translate("${item.code}_REGEX"); + } - return null; - }, - ) - ], - controller: controller[index], - ), - ); - } else if (item.dataType == 'MultiValueList') { - return Column( - children: [ - Align( - alignment: Alignment.topLeft, - child: Padding( - padding: const EdgeInsets.all(8), - child: Column( - children: [ - Text( - '${localizations.translate( - '${selectedServiceDefinition?.code}.${item.code}', - )} ${item.required == true ? '*' : ''}', - style: theme.textTheme.headlineSmall, - ), + return null; + }, + builder: (field) { + return LabeledField( + label: localizations + .translate( + '${selectedServiceDefinition?.code}.${item.code}', + ) + .trim(), + isRequired: item.required ?? false, + child: DigitTextFormInput( + onChange: (value) { + field.didChange(value); + controller[index].text = value; + }, + keyboardType: TextInputType.number, + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp( + "[0-9]", + )), ], + errorMessage: field.errorText, + controller: controller[index], ), + ); + }); + } else if (item.dataType == 'MultiValueList') { + return Align( + alignment: Alignment.topLeft, + child: Padding( + padding: const EdgeInsets.all(spacer2), + child: LabeledField( + label: localizations.translate( + '${selectedServiceDefinition?.code}.${item.code}', + ), + isRequired: item.required ?? false, + child: BlocBuilder( + builder: (context, state) { + return Column( + children: item.values! + .map((e) => DigitCheckbox( + label: e, + value: + controller[index].text.split('.').contains(e), + onChanged: (value) { + context.read().add( + ServiceSurveyFormEvent( + value: e.toString(), + submitTriggered: submitTriggered, + ), + ); + final String ele; + var val = controller[index].text.split('.'); + if (val.contains(e)) { + val.remove(e); + ele = val.join("."); + } else { + ele = "${controller[index].text}.$e"; + } + controller[index].value = + TextEditingController.fromValue( + TextEditingValue( + text: ele, + ), + ).value; + }, + )) + .toList(), + ); + }, ), ), - BlocBuilder( - builder: (context, state) { - return Column( - children: item.values! - .map((e) => DigitCheckbox( - label: e, - value: controller[index].text.split('.').contains(e), - onChanged: (value) { - context.read().add( - ServiceSurveyFormEvent( - value: e.toString(), - submitTriggered: submitTriggered, - ), - ); - final String ele; - var val = controller[index].text.split('.'); - if (val.contains(e)) { - val.remove(e); - ele = val.join("."); - } else { - ele = "${controller[index].text}.$e"; - } - controller[index].value = - TextEditingController.fromValue( - TextEditingValue( - text: ele, - ), - ).value; - }, - )) - .toList(), - ); - }, - ), - ], + ), ); } else if (item.dataType == 'Boolean') { - return Column( - children: [ - Align( - alignment: Alignment.topLeft, - child: Padding( - padding: const EdgeInsets.all(8), - child: Column( - children: [ - Text( - '${localizations.translate( - '${selectedServiceDefinition?.code}.${item.code}', - )} ${item.required == true ? '*' : ''}', - style: theme.textTheme.headlineSmall, - ), - ], - ), + return Align( + alignment: Alignment.topLeft, + child: Padding( + padding: const EdgeInsets.all(spacer2), + child: LabeledField( + label: localizations.translate( + '${selectedServiceDefinition?.code}.${item.code}', ), - ), - BlocBuilder( - builder: (context, state) { - return SelectionBox( - //label: e, - options: [ - SelectionOption( - name: localizations.translate( - i18.common.coreCommonYes, - ), - code: "true"), - SelectionOption( - name: localizations.translate( - i18.common.coreCommonNo, - ), - code: "false"), - ], - allowMultipleSelection: false, - width: 110, - onSelectionChanged: (value) { - context.read().add( - ServiceSurveyFormEvent( - value: value.last.code, - submitTriggered: submitTriggered, - ), + isRequired: item.required ?? false, + child: BlocBuilder( + builder: (context, state) { + return FormField( + autovalidateMode: AutovalidateMode.onUserInteraction, + validator: (value) { + if (item.required == true && + (controller[index].text == null || + controller[index].text == '')) { + return localizations.translate( + i18.common.coreCommonReasonRequired, ); - final String ele; - var val = controller[index].text.split('.'); - if (val.contains(e)) { - val.remove(e); - ele = val.join("."); - } else { - ele = "${controller[index].text}.$e"; - } - controller[index].value = TextEditingController.fromValue( - TextEditingValue( - text: ele, - ), - ).value; - }, - ); - }, + } + + return null; + }, + builder: (field) => SelectionBox( + errorMessage: field.errorText, + allowMultipleSelection: false, + valueMapper: (value) { + return value + ? localizations.translate( + i18.common.coreCommonYes, + ) + : localizations.translate( + i18.common.coreCommonNo, + ); + }, + initialSelection: const [false], + options: const [true, false], + onSelectionChanged: (value) { + field.didChange(value.first); + context.read().add( + ServiceSurveyFormEvent( + value: value.toString(), + submitTriggered: submitTriggered, + ), + ); + final String ele; + var val = controller[index].text.split('.'); + if (val.contains(e)) { + val.remove(e); + ele = val.join("."); + } else { + ele = "${controller[index].text}.$e"; + } + controller[index].value = TextEditingController.fromValue( + TextEditingValue( + text: ele, + ), + ).value; + }, + ), + ); + }, + ), ), - ], + ), ); } else { return const SizedBox.shrink(); @@ -1029,19 +1060,19 @@ class SurveyFormViewPageState extends LocalizedState { // Build cards for each matching child attribute for (final matchingChildItem in childItems.where((childItem) => childItem.code!.startsWith('$parentCode.$parentControllerValue.'))) - Card( - margin: const EdgeInsets.only(bottom: 8.0, left: 4.0, right: 4.0), - color: countDots(matchingChildItem.code ?? '') % 4 == 2 - ? const Color.fromRGBO(238, 238, 238, 1) - : const DigitColors().light.primary1Bg, - child: _buildSurveyForm( - matchingChildItem, - initialAttributes?.indexOf(matchingChildItem) ?? parentIndex, - // Pass parentIndex here as we're building at the same level - selectedServiceDefinition, - context, - ), - ), + DigitCard( + cardType: CardType.primary, + margin: const EdgeInsets.only( + bottom: spacer2, left: spacer1, right: spacer1), + children: [ + _buildSurveyForm( + matchingChildItem, + initialAttributes?.indexOf(matchingChildItem) ?? parentIndex, + // Pass parentIndex here as we're building at the same level + selectedServiceDefinition, + context, + ), + ]), ], ); } From 9923dea5736693c6499cf14b7fdf019485db0fe1 Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Mon, 9 Sep 2024 17:23:23 +0530 Subject: [PATCH 142/241] added label value pair --- .../pubspec.yaml | 1 + .../survey_form/lib/pages/survey_form.dart | 2 +- .../lib/pages/survey_form_boundary_view.dart | 1 + .../lib/pages/survey_form_preview.dart | 126 ++++++------------ packages/survey_form/pubspec.yaml | 2 +- 5 files changed, 42 insertions(+), 90 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index d5165c794..6027e44be 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -114,6 +114,7 @@ flutter: assets: - ./ - assets/icons/svg/ + - assets/animated_json/ fonts: - family: Roboto diff --git a/packages/survey_form/lib/pages/survey_form.dart b/packages/survey_form/lib/pages/survey_form.dart index e7f2ddf39..020fd0d57 100644 --- a/packages/survey_form/lib/pages/survey_form.dart +++ b/packages/survey_form/lib/pages/survey_form.dart @@ -81,7 +81,7 @@ class SurveyFormPageState extends State { padding: const EdgeInsets.only( left: spacer4, right: spacer4, - top: spacer2 + top: spacer4 ), child: MenuCard( icon: Icons.article, diff --git a/packages/survey_form/lib/pages/survey_form_boundary_view.dart b/packages/survey_form/lib/pages/survey_form_boundary_view.dart index 538424904..dc0a3c797 100644 --- a/packages/survey_form/lib/pages/survey_form_boundary_view.dart +++ b/packages/survey_form/lib/pages/survey_form_boundary_view.dart @@ -65,6 +65,7 @@ class SurveyFormBoundaryViewPageState ), child: DigitDateFormInput( readOnly: true, + editable: false, initialValue: DateFormat('dd MMMM yyyy').format(DateTime.now()), controller: TextEditingController( text: DateFormat('dd MMMM yyyy').format(DateTime.now()), diff --git a/packages/survey_form/lib/pages/survey_form_preview.dart b/packages/survey_form/lib/pages/survey_form_preview.dart index bc72a09ed..6f1061098 100644 --- a/packages/survey_form/lib/pages/survey_form_preview.dart +++ b/packages/survey_form/lib/pages/survey_form_preview.dart @@ -1,7 +1,7 @@ import 'package:auto_route/annotations.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; -import 'package:digit_ui_components/widgets/atoms/digit_divider.dart'; +import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:survey_form/survey_form.dart'; @@ -73,7 +73,6 @@ class SurveyFormPreviewPageState extends LocalizedState { return selectedService == null ? serviceList.isNotEmpty ? Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ ...serviceList .map((e) => e.serviceDefId != null @@ -154,17 +153,19 @@ class SurveyFormPreviewPageState extends LocalizedState { ) { return DigitCard( cardType: CardType.primary, - children: [Column( - mainAxisAlignment: MainAxisAlignment.start, + children: [ + Column( children: [ Align( - alignment: Alignment.centerLeft, - child: Text( - localizations.translate( - item2?.code ?? '', + alignment: Alignment.topLeft, + child: Padding( + padding: const EdgeInsets.all(spacer2), + child: Text( + localizations.translate( + item2?.code ?? '', + ), + style: textTheme.headingXl, ), - style: - theme.textTheme.displayMedium, ), ), ...(selectedService.attributes ?? []) @@ -175,88 +176,37 @@ class SurveyFormPreviewPageState extends LocalizedState { a.value != '') .map( (e) => Padding( - padding: - const EdgeInsets.all(spacer2), - child: Column( - mainAxisAlignment: - MainAxisAlignment.start, - children: [ - Align( - alignment: - Alignment.centerLeft, - child: Text( - localizations.translate( - "${item2?.code ?? ''}.${e.attributeCode!}", - ), - style: theme.textTheme - .headlineSmall, - ), - ), - Container( - margin: const EdgeInsets - .only() - .copyWith( - top: spacer2, - bottom: spacer2, - ), - child: Align( - alignment: Alignment - .centerLeft, - child: Text( - e.dataType == - 'SingleValueList' - ? localizations - .translate( - 'CORE_COMMON_${e.value.toString().toUpperCase()}', - ) - : e.value??"", - ), - ), - ), - e.additionalDetails != '' && - e.additionalDetails != - null - ? Container( - margin: - const EdgeInsets - .only() - .copyWith( - top: spacer2, - bottom: spacer2, - ), - child: Column( - children: [ - Align( - alignment: - Alignment - .centerLeft, - child: Text( - localizations - .translate( - "${item2?.code ?? ''}.${e.attributeCode!}.ADDITIONAL_FIELD", - ), - ), - ), - Align( - alignment: - Alignment - .centerLeft, - child: Text( - localizations - .translate( - e.additionalDetails, - ), - ), - ), - ], + padding: const EdgeInsets.all(spacer2), + child: Align( + alignment: AlignmentDirectional.topStart, + child: LabelValueList( + items: [ + LabelValuePair( + label: localizations.translate( + "${item2?.code ?? ''}.${e.attributeCode!}", ), + value: e.dataType == + 'SingleValueList' + ? localizations + .translate( + 'CORE_COMMON_${e.value.toString().toUpperCase()}', + ) + : e.value??"", + isInline: false, + ), + if(e.additionalDetails!='' && e.additionalDetails!=null)...[ + LabelValuePair( + label: localizations.translate("${item2?.code ?? ''}.${e.attributeCode!}.ADDITIONAL_FIELD",), + value: localizations.translate(e.additionalDetails,), + isInline: false, + labelTextStyle: textTheme.bodyL, ) - : const Offstage(), - const DigitDivider(), - ], + ] + ] + ), ), ), - ), + ) ].toList(), ),] ); diff --git a/packages/survey_form/pubspec.yaml b/packages/survey_form/pubspec.yaml index 171e7b3b4..b28cf6f90 100644 --- a/packages/survey_form/pubspec.yaml +++ b/packages/survey_form/pubspec.yaml @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0+2 + digit_ui_components: flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 From c36be9fd3f601139808485a6da0634451fc16aff Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Mon, 23 Sep 2024 10:51:59 +0530 Subject: [PATCH 143/241] digit ui component version update --- .../pubspec.lock | 34 ++++++++++++++----- .../lib/pages/survey_form_view.dart | 4 +-- packages/survey_form/pubspec.yaml | 2 +- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 0ec0517ab..2c628a5bb 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -37,15 +37,15 @@ packages: dependency: transitive description: name: ansicolor - sha256: "8bf17a8ff6ea17499e40a2d2542c2f481cd7615760c6d34065cb22bfd22e6880" + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.0.3" archive: dependency: transitive description: name: archive - sha256: "6bd38d335f0954f5fad9c79e614604fbf03a0e5b975923dd001b6ea965ef5b4b" + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d url: "https://pub.dev" source: hosted version: "3.6.0" @@ -517,9 +517,11 @@ packages: digit_firebase_services: dependency: "direct main" description: - path: "../../packages/digit_firebase_services" - relative: true - source: path + path: "packages/digit_firebase_services" + ref: checklist-tanishi + resolved-ref: a4fd63e10e76cec82675332689e344e309246e65 + url: "https://github.com/egovernments/health-campaign-field-worker-app" + source: git version: "0.0.1" digit_location_tracker: dependency: "direct main" @@ -534,7 +536,7 @@ packages: path: "../../packages/digit_scanner" relative: true source: path - version: "1.0.3+1" + version: "1.0.3" digit_showcase: dependency: "direct main" description: @@ -695,7 +697,7 @@ packages: dependency: "direct main" description: name: flutter_background_service - sha256: d32f078ec57647c9cfd6e1a8da9297f7d8f021d4dcc204a35aaad2cdbfe255f0 + sha256: "0686a4dbd4709d99109df21449ae1a9e873014e00d2c01de8402067f7640087d" url: "https://pub.dev" source: hosted version: "5.0.10" @@ -1922,6 +1924,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" upower: dependency: transitive description: diff --git a/packages/survey_form/lib/pages/survey_form_view.dart b/packages/survey_form/lib/pages/survey_form_view.dart index 412b32ea0..ea7323e94 100644 --- a/packages/survey_form/lib/pages/survey_form_view.dart +++ b/packages/survey_form/lib/pages/survey_form_view.dart @@ -569,7 +569,7 @@ class SurveyFormViewPageState extends LocalizedState { return null; }, builder: (field) => - SelectionBox( + SelectionCard( errorMessage: field.errorText, allowMultipleSelection: @@ -994,7 +994,7 @@ class SurveyFormViewPageState extends LocalizedState { return null; }, - builder: (field) => SelectionBox( + builder: (field) => SelectionCard( errorMessage: field.errorText, allowMultipleSelection: false, valueMapper: (value) { diff --git a/packages/survey_form/pubspec.yaml b/packages/survey_form/pubspec.yaml index b28cf6f90..a96e96ea8 100644 --- a/packages/survey_form/pubspec.yaml +++ b/packages/survey_form/pubspec.yaml @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_ui_components: + digit_ui_components: ^0.0.1+7 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 From 2a909029265c13b2558a8ff28084311c18ca04b0 Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Mon, 23 Sep 2024 11:52:22 +0530 Subject: [PATCH 144/241] panel card fix --- .../lib/pages/acknowledgement.dart | 33 +++++++++---------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/packages/survey_form/lib/pages/acknowledgement.dart b/packages/survey_form/lib/pages/acknowledgement.dart index 3e13923cf..6593d4dad 100644 --- a/packages/survey_form/lib/pages/acknowledgement.dart +++ b/packages/survey_form/lib/pages/acknowledgement.dart @@ -30,26 +30,23 @@ class AcknowledgementPageState extends LocalizedState context.router.popUntilRoot(), - type: ButtonType.primary, - size: ButtonSize.large, - ) - ], - ), + actions: [ + Button( + label: localizations.translate(i18.acknowledgementSuccess.actionLabelText), + onPressed: () => context.router.popUntilRoot(), + type: ButtonType.primary, + size: ButtonSize.large, + ) + ], ), bottomNavigationBar: Offstage( offstage: !widget.isDataRecordSuccess, From c3a55168d1ec90750b1fb4a1531d027dbd5d3013 Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Tue, 12 Nov 2024 11:09:50 +0530 Subject: [PATCH 145/241] fixed additionalDetails issue in survey_form_view --- .../survey_form/lib/pages/survey_form_view.dart | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/survey_form/lib/pages/survey_form_view.dart b/packages/survey_form/lib/pages/survey_form_view.dart index ea7323e94..ff6228d26 100644 --- a/packages/survey_form/lib/pages/survey_form_view.dart +++ b/packages/survey_form/lib/pages/survey_form_view.dart @@ -40,6 +40,7 @@ class SurveyFormViewPage extends LocalizedStatefulWidget { class SurveyFormViewPageState extends LocalizedState { String isStateChanged = ''; var submitTriggered = false; + bool triggerLocalization = false; List controller = []; List additionalController = []; List? initialAttributes; @@ -310,10 +311,14 @@ class SurveyFormViewPageState extends LocalizedState { lastModifiedTime: context .millisecondsSinceEpoch(), ), - additionalDetails: - SurveyFormSingleton() - .boundary - ?.code, + additionalDetails: { + "boundaryCode": + SurveyFormSingleton() + .boundary + ?.code, + 'lat': latitude, + 'lng': longitude, + }, ), ), ); From 0d00dec8cf01873c0cd26aa2fa8603603cbafacc Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Tue, 12 Nov 2024 12:14:15 +0530 Subject: [PATCH 146/241] fixed version conflicts data model --- .../pubspec.lock | 390 ++++++++++++++---- 1 file changed, 314 insertions(+), 76 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 2c628a5bb..9f1e16765 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -48,7 +48,7 @@ packages: sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d url: "https://pub.dev" source: hosted - version: "3.6.0" + version: "3.6.1" args: dependency: transitive description: @@ -156,10 +156,10 @@ packages: dependency: transitive description: name: battery_plus_platform_interface - sha256: "942707f90e2f7481dcb178df02e22a9c6971b3562b848d6a1b8c7cff9f1a1fec" + sha256: e8342c0f32de4b1dfd0223114b6785e48e579bfc398da9471c9179b907fa4910 url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "2.0.1" bloc: dependency: transitive description: @@ -284,18 +284,18 @@ packages: dependency: transitive description: name: camera_platform_interface - sha256: a250314a48ea337b35909a4c9d5416a208d736dcb01d0b02c6af122be66660b0 + sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 url: "https://pub.dev" source: hosted - version: "2.7.4" + version: "2.8.0" camera_web: dependency: transitive description: name: camera_web - sha256: "9e9aba2fbab77ce2472924196ff8ac4dd8f9126c4f9a3096171cd1d870d6b26c" + sha256: b9235ec0a2ce949daec546f1f3d86f05c3921ed31c7d9ab6b7c03214d152fc2d url: "https://pub.dev" source: hosted - version: "0.3.3" + version: "0.3.4" characters: dependency: transitive description: @@ -414,6 +414,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" + url: "https://pub.dev" + source: hosted + version: "1.0.2" cupertino_icons: dependency: "direct main" description: @@ -426,10 +434,10 @@ packages: dependency: "direct main" description: name: dart_mappable - sha256: "47269caf2060533c29b823ff7fa9706502355ffcb61e7f2a374e3a0fb2f2c3f0" + sha256: f69a961ae8589724ebb542e588f228ae844c5f78028899cbe2cc718977c1b382 url: "https://pub.dev" source: hosted - version: "4.2.2" + version: "4.3.0" dart_mappable_builder: dependency: "direct dev" description: @@ -481,10 +489,10 @@ packages: dependency: transitive description: name: device_info_plus_platform_interface - sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64 + sha256: "282d3cf731045a2feb66abfe61bbc40870ae50a3ed10a4d3d217556c35c8c2ba" url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "7.0.1" diff_match_patch: dependency: transitive description: @@ -513,15 +521,13 @@ packages: path: "../../packages/digit_dss" relative: true source: path - version: "1.0.1" + version: "1.0.2" digit_firebase_services: dependency: "direct main" description: - path: "packages/digit_firebase_services" - ref: checklist-tanishi - resolved-ref: a4fd63e10e76cec82675332689e344e309246e65 - url: "https://github.com/egovernments/health-campaign-field-worker-app" - source: git + path: "../../packages/digit_firebase_services" + relative: true + source: path version: "0.0.1" digit_location_tracker: dependency: "direct main" @@ -536,7 +542,7 @@ packages: path: "../../packages/digit_scanner" relative: true source: path - version: "1.0.3" + version: "1.0.3+1" digit_showcase: dependency: "direct main" description: @@ -544,14 +550,30 @@ packages: relative: true source: path version: "1.0.0" + digit_ui_components: + dependency: transitive + description: + name: digit_ui_components + sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae + url: "https://pub.dev" + source: hosted + version: "0.0.1+7" dio: dependency: "direct main" description: name: dio - sha256: "11e40df547d418cc0c4900a9318b26304e665da6fa4755399a9ff9efd09034b5" + sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" + url: "https://pub.dev" + source: hosted + version: "5.7.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac" url: "https://pub.dev" source: hosted - version: "5.4.3+1" + version: "1.0.1" disable_battery_optimization: dependency: "direct main" description: @@ -568,6 +590,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.1" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" drift: dependency: "direct main" description: @@ -640,6 +670,46 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 + url: "https://pub.dev" + source: hosted + version: "8.0.0+1" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + url: "https://pub.dev" + source: hosted + version: "0.9.2+1" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 + url: "https://pub.dev" + source: hosted + version: "0.9.4" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" firebase_core: dependency: transitive description: @@ -652,10 +722,10 @@ packages: dependency: transitive description: name: firebase_core_platform_interface - sha256: c437ae5d17e6b5cc7981cf6fd458a5db4d12979905f9aafd1fea930428a9fe63 + sha256: e30da58198a6d4b49d5bce4e852f985c32cb10db329ebef9473db2b9f09ce810 url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.3.0" firebase_core_web: dependency: transitive description: @@ -684,10 +754,10 @@ packages: dependency: transitive description: name: fixnum - sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" flutter: dependency: "direct main" description: flutter @@ -697,7 +767,7 @@ packages: dependency: "direct main" description: name: flutter_background_service - sha256: "0686a4dbd4709d99109df21449ae1a9e873014e00d2c01de8402067f7640087d" + sha256: d32f078ec57647c9cfd6e1a8da9297f7d8f021d4dcc204a35aaad2cdbfe255f0 url: "https://pub.dev" source: hosted version: "5.0.10" @@ -729,23 +799,47 @@ packages: dependency: "direct main" description: name: flutter_bloc - sha256: f0ecf6e6eb955193ca60af2d5ca39565a86b8a142452c5b24d96fb477428f4d2 + sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a url: "https://pub.dev" source: hosted - version: "8.1.5" + version: "8.1.6" flutter_dotenv: dependency: "direct main" description: name: flutter_dotenv - sha256: "9357883bdd153ab78cbf9ffa07656e336b8bbb2b5a3ca596b0b27e119f7c7d77" + sha256: b7c7be5cd9f6ef7a78429cabd2774d3c4af50e79cb2b7593e3d5d763ef95c61b url: "https://pub.dev" source: hosted - version: "5.1.0" + version: "5.2.1" flutter_driver: dependency: transitive description: flutter source: sdk version: "0.0.0" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" flutter_focus_watcher: dependency: transitive description: @@ -830,18 +924,18 @@ packages: dependency: transitive description: name: flutter_local_notifications_linux - sha256: "33f741ef47b5f63cc7f78fe75eeeac7e19f171ff3c3df054d84c1e38bedb6a03" + sha256: c49bd06165cad9beeb79090b18cd1eb0296f4bf4b23b84426e37dd7c027fc3af url: "https://pub.dev" source: hosted - version: "4.0.0+1" + version: "4.0.1" flutter_local_notifications_platform_interface: dependency: transitive description: name: flutter_local_notifications_platform_interface - sha256: "340abf67df238f7f0ef58f4a26d2a83e1ab74c77ab03cd2b2d5018ac64db30b7" + sha256: "85f8d07fe708c1bdcf45037f2c0109753b26ae077e9d9e899d55971711a4ea66" url: "https://pub.dev" source: hosted - version: "7.1.0" + version: "7.2.0" flutter_localizations: dependency: "direct main" description: flutter @@ -919,6 +1013,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" flutter_svg: dependency: "direct main" description: @@ -973,10 +1075,10 @@ packages: dependency: "direct main" description: name: freezed_annotation - sha256: c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d + sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.4" frontend_server_client: dependency: transitive description: @@ -990,6 +1092,54 @@ packages: description: flutter source: sdk version: "0.0.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + url: "https://pub.dev" + source: hosted + version: "4.3.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: bc2aca02423ad429cb0556121f56e60360a2b7d694c8570301d06ea0c00732fd + url: "https://pub.dev" + source: hosted + version: "2.3.7" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -1042,10 +1192,10 @@ packages: dependency: "direct main" description: name: gs1_barcode_parser - sha256: "9aaff47bdab7177deaf9248cc861ef41cf611d3f828498cb40b64bedcbf53391" + sha256: ff171bc40038de3f7178fbc32eaf9eebc3d35a3c4c00bb0281fe4a976d853a42 url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.1.0" horizontal_data_table: dependency: transitive description: @@ -1058,10 +1208,10 @@ packages: dependency: transitive description: name: hrk_batteries - sha256: "8ecfdee8268d480a700153a006f7c622c922fbfba4d8f576438c8c41ea9efdf2" + sha256: "35bc2be10bb64284b04d3cd944c24eecf304747fc64b34e2d27ef1a3ac75ab49" url: "https://pub.dev" source: hosted - version: "0.9.2" + version: "2.2.0" hrk_flutter_test_batteries: dependency: "direct dev" description: @@ -1074,10 +1224,18 @@ packages: dependency: transitive description: name: hrk_logging - sha256: "7ea3d02ed46f19533a8cae075cafe636757548a300a0e404193f6dd142c024b5" + sha256: "2e6501f4b78439bec4c367a94b14f792fd17fe1c94f18d903086c7b8a48402f5" + url: "https://pub.dev" + source: hosted + version: "0.3.1" + html: + dependency: transitive + description: + name: html + sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" url: "https://pub.dev" source: hosted - version: "0.1.3" + version: "0.15.5" http: dependency: transitive description: @@ -1106,10 +1264,74 @@ packages: dependency: transitive description: name: image - sha256: "4c68bfd5ae83e700b5204c1e74451e7bf3cf750e6843c6e158289cf56bda018e" + sha256: f31d52537dc417fdcde36088fdf11d191026fd5e4fae742491ebd40e5a8bea7d + url: "https://pub.dev" + source: hosted + version: "4.3.0" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" + url: "https://pub.dev" + source: hosted + version: "1.0.8" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" + url: "https://pub.dev" + source: hosted + version: "0.8.9+6" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 + url: "https://pub.dev" + source: hosted + version: "0.8.9+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b url: "https://pub.dev" source: hosted - version: "4.1.7" + version: "2.9.3" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" integration_test: dependency: "direct dev" description: flutter @@ -1270,18 +1492,18 @@ packages: dependency: transitive description: name: mime - sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.6" mocktail: dependency: "direct dev" description: name: mocktail - sha256: c4b5007d91ca4f67256e720cb1b6d704e79a510183a12fa551021f652577dce6 + sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" nested: dependency: "direct main" description: @@ -1346,6 +1568,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_parsing: dependency: transitive description: @@ -1358,10 +1588,10 @@ packages: dependency: "direct main" description: name: path_provider - sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" path_provider_android: dependency: transitive description: @@ -1398,10 +1628,10 @@ packages: dependency: transitive description: name: path_provider_windows - sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.3.0" pedantic: dependency: transitive description: @@ -1422,10 +1652,10 @@ packages: dependency: transitive description: name: permission_handler_android - sha256: "76e4ab092c1b240d31177bb64d2b0bea43f43d0e23541ec866151b9f7b2490fa" + sha256: "71bbecfee799e65aff7c744761a57e817e73b738fedf62ab7afd5593da21f9f1" url: "https://pub.dev" source: hosted - version: "12.0.12" + version: "12.0.13" permission_handler_apple: dependency: transitive description: @@ -1510,10 +1740,10 @@ packages: dependency: "direct main" description: name: pretty_dio_logger - sha256: "00b80053063935cf9a6190da344c5373b9d0e92da4c944c878ff2fbef0ef6dc2" + sha256: "36f2101299786d567869493e2f5731de61ce130faa14679473b26905a92b6407" url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.4.0" process: dependency: transitive description: @@ -1542,10 +1772,10 @@ packages: dependency: transitive description: name: pubspec_parse - sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 + sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 url: "https://pub.dev" source: hosted - version: "1.2.3" + version: "1.3.0" qr: dependency: transitive description: @@ -1644,18 +1874,18 @@ packages: dependency: transitive description: name: shared_preferences_linux - sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" + sha256: "2ba0510d3017f91655b7543e9ee46d48619de2a2af38e5c790423f7007c7ccc1" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.0" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b" + sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.1" shared_preferences_web: dependency: transitive description: @@ -1668,10 +1898,10 @@ packages: dependency: transitive description: name: shared_preferences_windows - sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" + sha256: "398084b47b7f92110683cac45c6dc4aae853db47e470e5ddcd52cab7f7196ab2" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.0" shelf: dependency: transitive description: @@ -1769,10 +1999,10 @@ packages: dependency: transitive description: name: speech_to_text_platform_interface - sha256: a0df1a907091ea09880077dc25aae02af9f79811264e6e97ddb08639b7f771c2 + sha256: a1935847704e41ee468aad83181ddd2423d0833abe55d769c59afca07adb5114 url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.0" sqlite3: dependency: transitive description: @@ -1785,10 +2015,10 @@ packages: dependency: "direct main" description: name: sqlite3_flutter_libs - sha256: fb2a106a2ea6042fe57de2c47074cc31539a941819c91e105b864744605da3f5 + sha256: "7ae52b23366e5295005022e62fa093f64bfe190810223ea0ebf733a4cd140bce" url: "https://pub.dev" source: hosted - version: "0.5.21" + version: "0.5.26" sqlparser: dependency: transitive description: @@ -1896,10 +2126,10 @@ packages: dependency: transitive description: name: timezone - sha256: a6ccda4a69a442098b602c44e61a1e2b4bf6f5516e875bbf0f427d5df14745d5 + sha256: "2236ec079a174ce07434e89fcd3fcda430025eb7692244139a9cf54fdcf1fc7d" url: "https://pub.dev" source: hosted - version: "0.9.3" + version: "0.9.4" timing: dependency: transitive description: @@ -1952,10 +2182,10 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: "6ce1e04375be4eed30548f10a315826fd933c1e493206eab82eed01f438c8d2e" + sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" url: "https://pub.dev" source: hosted - version: "6.2.6" + version: "6.3.0" url_launcher_android: dependency: transitive description: @@ -2008,10 +2238,10 @@ packages: dependency: transitive description: name: url_launcher_windows - sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7 + sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" uuid: dependency: "direct main" description: @@ -2052,6 +2282,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" vm_service: dependency: transitive description: @@ -2144,10 +2382,10 @@ packages: dependency: transitive description: name: xxh3 - sha256: a92b30944a9aeb4e3d4f3c3d4ddb3c7816ca73475cd603682c4f8149690f56d7 + sha256: cbeb0e1d10f4c6bf67b650f395eac0cc689425b5efc2ba0cc3d3e069a0beaeec url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.1.0" yaml: dependency: transitive description: @@ -2157,5 +2395,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <4.0.0" + dart: ">=3.2.0 <=3.9.0" flutter: ">=3.16.0" From 0aabe4880fb61d47057189557256e294e9e6587a Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Tue, 12 Nov 2024 12:41:55 +0530 Subject: [PATCH 147/241] version conflicts data model handled --- .../pubspec.lock | 398 ++++++++++++++---- 1 file changed, 327 insertions(+), 71 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index f87576f80..9f1e16765 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -40,15 +40,15 @@ packages: sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.0.3" archive: dependency: transitive description: name: archive - sha256: "6bd38d335f0954f5fad9c79e614604fbf03a0e5b975923dd001b6ea965ef5b4b" + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d url: "https://pub.dev" source: hosted - version: "3.6.0" + version: "3.6.1" args: dependency: transitive description: @@ -156,10 +156,10 @@ packages: dependency: transitive description: name: battery_plus_platform_interface - sha256: "942707f90e2f7481dcb178df02e22a9c6971b3562b848d6a1b8c7cff9f1a1fec" + sha256: e8342c0f32de4b1dfd0223114b6785e48e579bfc398da9471c9179b907fa4910 url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "2.0.1" bloc: dependency: transitive description: @@ -284,18 +284,18 @@ packages: dependency: transitive description: name: camera_platform_interface - sha256: a250314a48ea337b35909a4c9d5416a208d736dcb01d0b02c6af122be66660b0 + sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 url: "https://pub.dev" source: hosted - version: "2.7.4" + version: "2.8.0" camera_web: dependency: transitive description: name: camera_web - sha256: "9e9aba2fbab77ce2472924196ff8ac4dd8f9126c4f9a3096171cd1d870d6b26c" + sha256: b9235ec0a2ce949daec546f1f3d86f05c3921ed31c7d9ab6b7c03214d152fc2d url: "https://pub.dev" source: hosted - version: "0.3.3" + version: "0.3.4" characters: dependency: transitive description: @@ -414,6 +414,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" + url: "https://pub.dev" + source: hosted + version: "1.0.2" cupertino_icons: dependency: "direct main" description: @@ -426,10 +434,10 @@ packages: dependency: "direct main" description: name: dart_mappable - sha256: "47269caf2060533c29b823ff7fa9706502355ffcb61e7f2a374e3a0fb2f2c3f0" + sha256: f69a961ae8589724ebb542e588f228ae844c5f78028899cbe2cc718977c1b382 url: "https://pub.dev" source: hosted - version: "4.2.2" + version: "4.3.0" dart_mappable_builder: dependency: "direct dev" description: @@ -481,10 +489,10 @@ packages: dependency: transitive description: name: device_info_plus_platform_interface - sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64 + sha256: "282d3cf731045a2feb66abfe61bbc40870ae50a3ed10a4d3d217556c35c8c2ba" url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "7.0.1" diff_match_patch: dependency: transitive description: @@ -513,7 +521,7 @@ packages: path: "../../packages/digit_dss" relative: true source: path - version: "1.0.1" + version: "1.0.2" digit_firebase_services: dependency: "direct main" description: @@ -542,14 +550,30 @@ packages: relative: true source: path version: "1.0.0" + digit_ui_components: + dependency: transitive + description: + name: digit_ui_components + sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae + url: "https://pub.dev" + source: hosted + version: "0.0.1+7" dio: dependency: "direct main" description: name: dio - sha256: "11e40df547d418cc0c4900a9318b26304e665da6fa4755399a9ff9efd09034b5" + sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" + url: "https://pub.dev" + source: hosted + version: "5.7.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac" url: "https://pub.dev" source: hosted - version: "5.4.3+1" + version: "1.0.1" disable_battery_optimization: dependency: "direct main" description: @@ -566,6 +590,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.1" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" drift: dependency: "direct main" description: @@ -638,6 +670,46 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 + url: "https://pub.dev" + source: hosted + version: "8.0.0+1" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + url: "https://pub.dev" + source: hosted + version: "0.9.2+1" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 + url: "https://pub.dev" + source: hosted + version: "0.9.4" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" firebase_core: dependency: transitive description: @@ -650,10 +722,10 @@ packages: dependency: transitive description: name: firebase_core_platform_interface - sha256: c437ae5d17e6b5cc7981cf6fd458a5db4d12979905f9aafd1fea930428a9fe63 + sha256: e30da58198a6d4b49d5bce4e852f985c32cb10db329ebef9473db2b9f09ce810 url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.3.0" firebase_core_web: dependency: transitive description: @@ -682,10 +754,10 @@ packages: dependency: transitive description: name: fixnum - sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" flutter: dependency: "direct main" description: flutter @@ -727,23 +799,47 @@ packages: dependency: "direct main" description: name: flutter_bloc - sha256: f0ecf6e6eb955193ca60af2d5ca39565a86b8a142452c5b24d96fb477428f4d2 + sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a url: "https://pub.dev" source: hosted - version: "8.1.5" + version: "8.1.6" flutter_dotenv: dependency: "direct main" description: name: flutter_dotenv - sha256: "9357883bdd153ab78cbf9ffa07656e336b8bbb2b5a3ca596b0b27e119f7c7d77" + sha256: b7c7be5cd9f6ef7a78429cabd2774d3c4af50e79cb2b7593e3d5d763ef95c61b url: "https://pub.dev" source: hosted - version: "5.1.0" + version: "5.2.1" flutter_driver: dependency: transitive description: flutter source: sdk version: "0.0.0" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" flutter_focus_watcher: dependency: transitive description: @@ -828,18 +924,18 @@ packages: dependency: transitive description: name: flutter_local_notifications_linux - sha256: "33f741ef47b5f63cc7f78fe75eeeac7e19f171ff3c3df054d84c1e38bedb6a03" + sha256: c49bd06165cad9beeb79090b18cd1eb0296f4bf4b23b84426e37dd7c027fc3af url: "https://pub.dev" source: hosted - version: "4.0.0+1" + version: "4.0.1" flutter_local_notifications_platform_interface: dependency: transitive description: name: flutter_local_notifications_platform_interface - sha256: "340abf67df238f7f0ef58f4a26d2a83e1ab74c77ab03cd2b2d5018ac64db30b7" + sha256: "85f8d07fe708c1bdcf45037f2c0109753b26ae077e9d9e899d55971711a4ea66" url: "https://pub.dev" source: hosted - version: "7.1.0" + version: "7.2.0" flutter_localizations: dependency: "direct main" description: flutter @@ -917,6 +1013,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" flutter_svg: dependency: "direct main" description: @@ -971,10 +1075,10 @@ packages: dependency: "direct main" description: name: freezed_annotation - sha256: c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d + sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.4" frontend_server_client: dependency: transitive description: @@ -988,6 +1092,54 @@ packages: description: flutter source: sdk version: "0.0.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + url: "https://pub.dev" + source: hosted + version: "4.3.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: bc2aca02423ad429cb0556121f56e60360a2b7d694c8570301d06ea0c00732fd + url: "https://pub.dev" + source: hosted + version: "2.3.7" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -1040,10 +1192,10 @@ packages: dependency: "direct main" description: name: gs1_barcode_parser - sha256: "9aaff47bdab7177deaf9248cc861ef41cf611d3f828498cb40b64bedcbf53391" + sha256: ff171bc40038de3f7178fbc32eaf9eebc3d35a3c4c00bb0281fe4a976d853a42 url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.1.0" horizontal_data_table: dependency: transitive description: @@ -1056,10 +1208,10 @@ packages: dependency: transitive description: name: hrk_batteries - sha256: "8ecfdee8268d480a700153a006f7c622c922fbfba4d8f576438c8c41ea9efdf2" + sha256: "35bc2be10bb64284b04d3cd944c24eecf304747fc64b34e2d27ef1a3ac75ab49" url: "https://pub.dev" source: hosted - version: "0.9.2" + version: "2.2.0" hrk_flutter_test_batteries: dependency: "direct dev" description: @@ -1072,10 +1224,18 @@ packages: dependency: transitive description: name: hrk_logging - sha256: "7ea3d02ed46f19533a8cae075cafe636757548a300a0e404193f6dd142c024b5" + sha256: "2e6501f4b78439bec4c367a94b14f792fd17fe1c94f18d903086c7b8a48402f5" + url: "https://pub.dev" + source: hosted + version: "0.3.1" + html: + dependency: transitive + description: + name: html + sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" url: "https://pub.dev" source: hosted - version: "0.1.3" + version: "0.15.5" http: dependency: transitive description: @@ -1104,10 +1264,74 @@ packages: dependency: transitive description: name: image - sha256: "4c68bfd5ae83e700b5204c1e74451e7bf3cf750e6843c6e158289cf56bda018e" + sha256: f31d52537dc417fdcde36088fdf11d191026fd5e4fae742491ebd40e5a8bea7d url: "https://pub.dev" source: hosted - version: "4.1.7" + version: "4.3.0" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" + url: "https://pub.dev" + source: hosted + version: "1.0.8" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" + url: "https://pub.dev" + source: hosted + version: "0.8.9+6" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 + url: "https://pub.dev" + source: hosted + version: "0.8.9+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b + url: "https://pub.dev" + source: hosted + version: "2.9.3" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" integration_test: dependency: "direct dev" description: flutter @@ -1268,18 +1492,18 @@ packages: dependency: transitive description: name: mime - sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.6" mocktail: dependency: "direct dev" description: name: mocktail - sha256: c4b5007d91ca4f67256e720cb1b6d704e79a510183a12fa551021f652577dce6 + sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" nested: dependency: "direct main" description: @@ -1344,6 +1568,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_parsing: dependency: transitive description: @@ -1356,10 +1588,10 @@ packages: dependency: "direct main" description: name: path_provider - sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" path_provider_android: dependency: transitive description: @@ -1396,10 +1628,10 @@ packages: dependency: transitive description: name: path_provider_windows - sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.3.0" pedantic: dependency: transitive description: @@ -1420,10 +1652,10 @@ packages: dependency: transitive description: name: permission_handler_android - sha256: "76e4ab092c1b240d31177bb64d2b0bea43f43d0e23541ec866151b9f7b2490fa" + sha256: "71bbecfee799e65aff7c744761a57e817e73b738fedf62ab7afd5593da21f9f1" url: "https://pub.dev" source: hosted - version: "12.0.12" + version: "12.0.13" permission_handler_apple: dependency: transitive description: @@ -1508,10 +1740,10 @@ packages: dependency: "direct main" description: name: pretty_dio_logger - sha256: "00b80053063935cf9a6190da344c5373b9d0e92da4c944c878ff2fbef0ef6dc2" + sha256: "36f2101299786d567869493e2f5731de61ce130faa14679473b26905a92b6407" url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.4.0" process: dependency: transitive description: @@ -1540,10 +1772,10 @@ packages: dependency: transitive description: name: pubspec_parse - sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 + sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 url: "https://pub.dev" source: hosted - version: "1.2.3" + version: "1.3.0" qr: dependency: transitive description: @@ -1642,18 +1874,18 @@ packages: dependency: transitive description: name: shared_preferences_linux - sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" + sha256: "2ba0510d3017f91655b7543e9ee46d48619de2a2af38e5c790423f7007c7ccc1" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.0" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b" + sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.1" shared_preferences_web: dependency: transitive description: @@ -1666,10 +1898,10 @@ packages: dependency: transitive description: name: shared_preferences_windows - sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" + sha256: "398084b47b7f92110683cac45c6dc4aae853db47e470e5ddcd52cab7f7196ab2" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.0" shelf: dependency: transitive description: @@ -1767,10 +1999,10 @@ packages: dependency: transitive description: name: speech_to_text_platform_interface - sha256: a0df1a907091ea09880077dc25aae02af9f79811264e6e97ddb08639b7f771c2 + sha256: a1935847704e41ee468aad83181ddd2423d0833abe55d769c59afca07adb5114 url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.0" sqlite3: dependency: transitive description: @@ -1783,10 +2015,10 @@ packages: dependency: "direct main" description: name: sqlite3_flutter_libs - sha256: fb2a106a2ea6042fe57de2c47074cc31539a941819c91e105b864744605da3f5 + sha256: "7ae52b23366e5295005022e62fa093f64bfe190810223ea0ebf733a4cd140bce" url: "https://pub.dev" source: hosted - version: "0.5.21" + version: "0.5.26" sqlparser: dependency: transitive description: @@ -1894,10 +2126,10 @@ packages: dependency: transitive description: name: timezone - sha256: a6ccda4a69a442098b602c44e61a1e2b4bf6f5516e875bbf0f427d5df14745d5 + sha256: "2236ec079a174ce07434e89fcd3fcda430025eb7692244139a9cf54fdcf1fc7d" url: "https://pub.dev" source: hosted - version: "0.9.3" + version: "0.9.4" timing: dependency: transitive description: @@ -1922,6 +2154,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" upower: dependency: transitive description: @@ -1934,10 +2182,10 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: "6ce1e04375be4eed30548f10a315826fd933c1e493206eab82eed01f438c8d2e" + sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" url: "https://pub.dev" source: hosted - version: "6.2.6" + version: "6.3.0" url_launcher_android: dependency: transitive description: @@ -1990,10 +2238,10 @@ packages: dependency: transitive description: name: url_launcher_windows - sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7 + sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" uuid: dependency: "direct main" description: @@ -2034,6 +2282,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" vm_service: dependency: transitive description: @@ -2126,10 +2382,10 @@ packages: dependency: transitive description: name: xxh3 - sha256: a92b30944a9aeb4e3d4f3c3d4ddb3c7816ca73475cd603682c4f8149690f56d7 + sha256: cbeb0e1d10f4c6bf67b650f395eac0cc689425b5efc2ba0cc3d3e069a0beaeec url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.1.0" yaml: dependency: transitive description: @@ -2139,5 +2395,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <4.0.0" + dart: ">=3.2.0 <=3.9.0" flutter: ">=3.16.0" From 85f36000c4ab26ddb813006a08ce9bd16259c936 Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Tue, 12 Nov 2024 13:49:36 +0530 Subject: [PATCH 148/241] lock file added for survey_form --- packages/survey_form/.gitignore | 1 - packages/survey_form/pubspec.lock | 1566 +++++++++++++++++++++++++++++ 2 files changed, 1566 insertions(+), 1 deletion(-) create mode 100644 packages/survey_form/pubspec.lock diff --git a/packages/survey_form/.gitignore b/packages/survey_form/.gitignore index ac5aa9893..a68ac422a 100644 --- a/packages/survey_form/.gitignore +++ b/packages/survey_form/.gitignore @@ -23,7 +23,6 @@ migrate_working_dir/ # Flutter/Dart/Pub related # Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. -/pubspec.lock **/doc/api/ .dart_tool/ build/ diff --git a/packages/survey_form/pubspec.lock b/packages/survey_form/pubspec.lock new file mode 100644 index 000000000..36ad1f411 --- /dev/null +++ b/packages/survey_form/pubspec.lock @@ -0,0 +1,1566 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 + url: "https://pub.dev" + source: hosted + version: "64.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" + url: "https://pub.dev" + source: hosted + version: "6.2.0" + analyzer_plugin: + dependency: transitive + description: + name: analyzer_plugin + sha256: "9661b30b13a685efaee9f02e5d01ed9f2b423bd889d28a304d02d704aee69161" + url: "https://pub.dev" + source: hosted + version: "0.11.3" + ansicolor: + dependency: transitive + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + url: "https://pub.dev" + source: hosted + version: "2.0.3" + archive: + dependency: transitive + description: + name: archive + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d + url: "https://pub.dev" + source: hosted + version: "3.6.1" + args: + dependency: transitive + description: + name: args + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" + url: "https://pub.dev" + source: hosted + version: "2.5.0" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + auto_route: + dependency: "direct main" + description: + name: auto_route + sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 + url: "https://pub.dev" + source: hosted + version: "7.9.2" + auto_route_generator: + dependency: "direct dev" + description: + name: auto_route_generator + sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" + url: "https://pub.dev" + source: hosted + version: "7.3.2" + bloc: + dependency: transitive + description: + name: bloc + sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e" + url: "https://pub.dev" + source: hosted + version: "8.1.4" + bloc_test: + dependency: "direct dev" + description: + name: bloc_test + sha256: "165a6ec950d9252ebe36dc5335f2e6eb13055f33d56db0eeb7642768849b43d2" + url: "https://pub.dev" + source: hosted + version: "9.1.7" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + build: + dependency: transitive + description: + name: build + sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + build_config: + dependency: transitive + description: + name: build_config + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" + source: hosted + version: "1.1.1" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" + url: "https://pub.dev" + source: hosted + version: "4.0.1" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + build_runner: + dependency: "direct main" + description: + name: build_runner + sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" + url: "https://pub.dev" + source: hosted + version: "2.4.9" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" + url: "https://pub.dev" + source: hosted + version: "7.3.0" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb + url: "https://pub.dev" + source: hosted + version: "8.9.2" + camera: + dependency: transitive + description: + name: camera + sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" + url: "https://pub.dev" + source: hosted + version: "0.10.5+9" + camera_android: + dependency: transitive + description: + name: camera_android + sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 + url: "https://pub.dev" + source: hosted + version: "0.10.9+2" + camera_avfoundation: + dependency: transitive + description: + name: camera_avfoundation + sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" + url: "https://pub.dev" + source: hosted + version: "0.9.13+10" + camera_platform_interface: + dependency: transitive + description: + name: camera_platform_interface + sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 + url: "https://pub.dev" + source: hosted + version: "2.8.0" + camera_web: + dependency: transitive + description: + name: camera_web + sha256: b9235ec0a2ce949daec546f1f3d86f05c3921ed31c7d9ab6b7c03214d152fc2d + url: "https://pub.dev" + source: hosted + version: "0.3.4" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + charcode: + dependency: transitive + description: + name: charcode + sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 + url: "https://pub.dev" + source: hosted + version: "1.3.1" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 + url: "https://pub.dev" + source: hosted + version: "0.4.1" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 + url: "https://pub.dev" + source: hosted + version: "4.10.0" + collection: + dependency: "direct main" + description: + name: collection + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" + source: hosted + version: "1.18.0" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + coverage: + dependency: transitive + description: + name: coverage + sha256: "3945034e86ea203af7a056d98e98e42a5518fff200d6e8e6647e1886b07e936e" + url: "https://pub.dev" + source: hosted + version: "1.8.0" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e + url: "https://pub.dev" + source: hosted + version: "0.3.3+8" + crypto: + dependency: transitive + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://pub.dev" + source: hosted + version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + dart_mappable: + dependency: "direct main" + description: + name: dart_mappable + sha256: f69a961ae8589724ebb542e588f228ae844c5f78028899cbe2cc718977c1b382 + url: "https://pub.dev" + source: hosted + version: "4.3.0" + dart_mappable_builder: + dependency: "direct dev" + description: + name: dart_mappable_builder + sha256: "04a6e7117382f8a8689b3e363bee6c3de8c9ea4332e664148fe01bd576eb1126" + url: "https://pub.dev" + source: hosted + version: "4.3.0" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" + url: "https://pub.dev" + source: hosted + version: "2.3.6" + db_viewer: + dependency: transitive + description: + name: db_viewer + sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + diff_match_patch: + dependency: transitive + description: + name: diff_match_patch + sha256: "2efc9e6e8f449d0abe15be240e2c2a3bcd977c8d126cfd70598aee60af35c0a4" + url: "https://pub.dev" + source: hosted + version: "0.4.1" + digit_data_model: + dependency: "direct main" + description: + path: "../digit_data_model" + relative: true + source: path + version: "1.0.4" + digit_ui_components: + dependency: "direct main" + description: + name: digit_ui_components + sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae + url: "https://pub.dev" + source: hosted + version: "0.0.1+7" + dio: + dependency: "direct main" + description: + name: dio + sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" + url: "https://pub.dev" + source: hosted + version: "5.7.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + drift: + dependency: "direct main" + description: + name: drift + sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + url: "https://pub.dev" + source: hosted + version: "2.15.0" + drift_db_viewer: + dependency: transitive + description: + name: drift_db_viewer + sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + drift_dev: + dependency: "direct dev" + description: + name: drift_dev + sha256: c037d9431b6f8dc633652b1469e5f53aaec6e4eb405ed29dd232fa888ef10d88 + url: "https://pub.dev" + source: hosted + version: "2.15.0" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + file: + dependency: transitive + description: + name: file + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://pub.dev" + source: hosted + version: "7.0.1" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 + url: "https://pub.dev" + source: hosted + version: "8.0.0+1" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + url: "https://pub.dev" + source: hosted + version: "0.9.2+1" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 + url: "https://pub.dev" + source: hosted + version: "0.9.4" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be + url: "https://pub.dev" + source: hosted + version: "1.1.1" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_bloc: + dependency: "direct main" + description: + name: flutter_bloc + sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a + url: "https://pub.dev" + source: hosted + version: "8.1.6" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" + flutter_keyboard_visibility: + dependency: transitive + description: + name: flutter_keyboard_visibility + sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" + url: "https://pub.dev" + source: hosted + version: "5.4.1" + flutter_keyboard_visibility_linux: + dependency: transitive + description: + name: flutter_keyboard_visibility_linux + sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_macos: + dependency: transitive + description: + name: flutter_keyboard_visibility_macos + sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_platform_interface: + dependency: transitive + description: + name: flutter_keyboard_visibility_platform_interface + sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_web: + dependency: transitive + description: + name: flutter_keyboard_visibility_web + sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_windows: + dependency: transitive + description: + name: flutter_keyboard_visibility_windows + sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 + url: "https://pub.dev" + source: hosted + version: "2.0.3" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: "8cf40eebf5dec866a6d1956ad7b4f7016e6c0cc69847ab946833b7d43743809f" + url: "https://pub.dev" + source: hosted + version: "2.0.19" + flutter_spinkit: + dependency: transitive + description: + name: flutter_spinkit + sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 + url: "https://pub.dev" + source: hosted + version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + flutter_svg: + dependency: "direct main" + description: + name: flutter_svg + sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" + url: "https://pub.dev" + source: hosted + version: "2.0.10+1" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_typeahead: + dependency: transitive + description: + name: flutter_typeahead + sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 + url: "https://pub.dev" + source: hosted + version: "4.8.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + fluttertoast: + dependency: "direct main" + description: + name: fluttertoast + sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" + url: "https://pub.dev" + source: hosted + version: "8.2.5" + freezed: + dependency: "direct dev" + description: + name: freezed + sha256: a434911f643466d78462625df76fd9eb13e57348ff43fe1f77bbe909522c67a1 + url: "https://pub.dev" + source: hosted + version: "2.5.2" + freezed_annotation: + dependency: "direct main" + description: + name: freezed_annotation + sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 + url: "https://pub.dev" + source: hosted + version: "2.4.4" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + url: "https://pub.dev" + source: hosted + version: "4.3.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: bc2aca02423ad429cb0556121f56e60360a2b7d694c8570301d06ea0c00732fd + url: "https://pub.dev" + source: hosted + version: "2.3.7" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + google_fonts: + dependency: transitive + description: + name: google_fonts + sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + url: "https://pub.dev" + source: hosted + version: "4.0.5" + graphs: + dependency: transitive + description: + name: graphs + sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 + url: "https://pub.dev" + source: hosted + version: "2.3.1" + group_radio_button: + dependency: "direct main" + description: + name: group_radio_button + sha256: "204de8d16b224be7fc72dade0c3afd410ff5a34417d89f74f0fd8be7a8c2b4d6" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + horizontal_data_table: + dependency: transitive + description: + name: horizontal_data_table + sha256: c8ab5256bbced698a729f3e0ff2cb0e8e97416cdbb082860370eaf883badf722 + url: "https://pub.dev" + source: hosted + version: "4.3.1" + html: + dependency: transitive + description: + name: html + sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" + url: "https://pub.dev" + source: hosted + version: "0.15.5" + http: + dependency: transitive + description: + name: http + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + url: "https://pub.dev" + source: hosted + version: "1.2.0" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" + url: "https://pub.dev" + source: hosted + version: "1.0.8" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" + url: "https://pub.dev" + source: hosted + version: "0.8.9+6" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 + url: "https://pub.dev" + source: hosted + version: "0.8.9+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b + url: "https://pub.dev" + source: hosted + version: "2.9.3" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + intl: + dependency: "direct main" + description: + name: intl + sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + url: "https://pub.dev" + source: hosted + version: "0.18.1" + io: + dependency: transitive + description: + name: io + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + isar: + dependency: transitive + description: + name: isar + sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" + isar_flutter_libs: + dependency: transitive + description: + name: isar_flutter_libs + sha256: bc6768cc4b9c61aabff77152e7f33b4b17d2fc93134f7af1c3dd51500fe8d5e8 + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" + js: + dependency: transitive + description: + name: js + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + url: "https://pub.dev" + source: hosted + version: "0.6.7" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.dev" + source: hosted + version: "4.9.0" + json_serializable: + dependency: "direct dev" + description: + name: json_serializable + sha256: ea1432d167339ea9b5bb153f0571d0039607a873d6e04e0117af043f14a1fd4b + url: "https://pub.dev" + source: hosted + version: "6.8.0" + lints: + dependency: transitive + description: + name: lints + sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + location: + dependency: "direct main" + description: + name: location + sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + url: "https://pub.dev" + source: hosted + version: "5.0.3" + location_platform_interface: + dependency: transitive + description: + name: location_platform_interface + sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + url: "https://pub.dev" + source: hosted + version: "3.1.2" + location_web: + dependency: transitive + description: + name: location_web + sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + url: "https://pub.dev" + source: hosted + version: "4.2.0" + logging: + dependency: transitive + description: + name: logging + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + lottie: + dependency: transitive + description: + name: lottie + sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + url: "https://pub.dev" + source: hosted + version: "2.7.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + url: "https://pub.dev" + source: hosted + version: "0.12.16" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + url: "https://pub.dev" + source: hosted + version: "0.5.0" + meta: + dependency: transitive + description: + name: meta + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + url: "https://pub.dev" + source: hosted + version: "1.10.0" + mime: + dependency: transitive + description: + name: mime + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" + url: "https://pub.dev" + source: hosted + version: "1.0.6" + mocktail: + dependency: "direct dev" + description: + name: mocktail + sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + nested: + dependency: transitive + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + node_preamble: + dependency: transitive + description: + name: node_preamble + sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + overlay_builder: + dependency: "direct main" + description: + name: overlay_builder + sha256: "58b97bc5f67a2e2bb7006dd88e697ac757dfffc9dbd1e7dfc1917fb510a4b5c8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + path: + dependency: transitive + description: + name: path + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + url: "https://pub.dev" + source: hosted + version: "1.8.3" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + url: "https://pub.dev" + source: hosted + version: "1.0.1" + path_provider: + dependency: transitive + description: + name: path_provider + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 + url: "https://pub.dev" + source: hosted + version: "2.1.4" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d + url: "https://pub.dev" + source: hosted + version: "2.2.4" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 + url: "https://pub.dev" + source: hosted + version: "2.3.0" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + url: "https://pub.dev" + source: hosted + version: "6.0.2" + platform: + dependency: transitive + description: + name: platform + sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" + url: "https://pub.dev" + source: hosted + version: "3.1.6" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + pointer_interceptor: + dependency: transitive + description: + name: pointer_interceptor + sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 + url: "https://pub.dev" + source: hosted + version: "0.9.3+7" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" + provider: + dependency: transitive + description: + name: provider + sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c + url: "https://pub.dev" + source: hosted + version: "6.1.2" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 + url: "https://pub.dev" + source: hosted + version: "1.3.0" + reactive_flutter_typeahead: + dependency: transitive + description: + name: reactive_flutter_typeahead + sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 + url: "https://pub.dev" + source: hosted + version: "0.8.1" + reactive_forms: + dependency: "direct main" + description: + name: reactive_forms + sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + url: "https://pub.dev" + source: hosted + version: "14.3.0" + recase: + dependency: transitive + description: + name: recase + sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 + url: "https://pub.dev" + source: hosted + version: "4.1.0" + shelf: + dependency: transitive + description: + name: shelf + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 + url: "https://pub.dev" + source: hosted + version: "1.4.1" + shelf_packages_handler: + dependency: transitive + description: + name: shelf_packages_handler + sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + shelf_static: + dependency: transitive + description: + name: shelf_static + sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e + url: "https://pub.dev" + source: hosted + version: "1.1.2" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" + url: "https://pub.dev" + source: hosted + version: "1.5.0" + source_helper: + dependency: transitive + description: + name: source_helper + sha256: "6adebc0006c37dd63fe05bca0a929b99f06402fc95aa35bf36d67f5c06de01fd" + url: "https://pub.dev" + source: hosted + version: "1.3.4" + source_map_stack_trace: + dependency: transitive + description: + name: source_map_stack_trace + sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + source_maps: + dependency: transitive + description: + name: source_maps + sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" + url: "https://pub.dev" + source: hosted + version: "0.10.12" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + sqlite3: + dependency: transitive + description: + name: sqlite3 + sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" + url: "https://pub.dev" + source: hosted + version: "2.4.0" + sqlite3_flutter_libs: + dependency: transitive + description: + name: sqlite3_flutter_libs + sha256: "7ae52b23366e5295005022e62fa093f64bfe190810223ea0ebf733a4cd140bce" + url: "https://pub.dev" + source: hosted + version: "0.5.26" + sqlparser: + dependency: transitive + description: + name: sqlparser + sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" + url: "https://pub.dev" + source: hosted + version: "0.34.1" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://pub.dev" + source: hosted + version: "1.11.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" + source: hosted + version: "2.1.2" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test: + dependency: transitive + description: + name: test + sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + url: "https://pub.dev" + source: hosted + version: "1.24.9" + test_api: + dependency: transitive + description: + name: test_api + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + url: "https://pub.dev" + source: hosted + version: "0.6.1" + test_core: + dependency: transitive + description: + name: test_core + sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + url: "https://pub.dev" + source: hosted + version: "0.5.9" + timing: + dependency: transitive + description: + name: timing + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + type_plus: + dependency: transitive + description: + name: type_plus + sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 + url: "https://pub.dev" + source: hosted + version: "2.1.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + url_launcher: + dependency: transitive + description: + name: url_launcher + sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" + url: "https://pub.dev" + source: hosted + version: "6.3.0" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "17cd5e205ea615e2c6ea7a77323a11712dffa0720a8a90540db57a01347f9ad9" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" + url: "https://pub.dev" + source: hosted + version: "6.2.4" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 + url: "https://pub.dev" + source: hosted + version: "3.1.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + url: "https://pub.dev" + source: hosted + version: "2.2.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" + url: "https://pub.dev" + source: hosted + version: "3.1.2" + uuid: + dependency: transitive + description: + name: uuid + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + url: "https://pub.dev" + source: hosted + version: "3.0.7" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + url: "https://pub.dev" + source: hosted + version: "13.0.0" + watcher: + dependency: transitive + description: + name: watcher + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + web: + dependency: transitive + description: + name: web + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + url: "https://pub.dev" + source: hosted + version: "0.3.0" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + url: "https://pub.dev" + source: hosted + version: "2.4.0" + webkit_inspection_protocol: + dependency: transitive + description: + name: webkit_inspection_protocol + sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + win32: + dependency: transitive + description: + name: win32 + sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" + url: "https://pub.dev" + source: hosted + version: "5.2.0" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d + url: "https://pub.dev" + source: hosted + version: "1.0.4" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" +sdks: + dart: ">=3.2.0 <=3.9.0" + flutter: ">=3.16.0" From 7be2a61f6fd2098421ff3503dca65c272d533c5b Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Tue, 12 Nov 2024 13:52:11 +0530 Subject: [PATCH 149/241] pubspec.lock file added in survey_form --- packages/survey_form/.gitignore | 1 - packages/survey_form/pubspec.lock | 1249 +++++++++++++++++++++++++++++ 2 files changed, 1249 insertions(+), 1 deletion(-) create mode 100644 packages/survey_form/pubspec.lock diff --git a/packages/survey_form/.gitignore b/packages/survey_form/.gitignore index ac5aa9893..a68ac422a 100644 --- a/packages/survey_form/.gitignore +++ b/packages/survey_form/.gitignore @@ -23,7 +23,6 @@ migrate_working_dir/ # Flutter/Dart/Pub related # Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. -/pubspec.lock **/doc/api/ .dart_tool/ build/ diff --git a/packages/survey_form/pubspec.lock b/packages/survey_form/pubspec.lock new file mode 100644 index 000000000..26657729e --- /dev/null +++ b/packages/survey_form/pubspec.lock @@ -0,0 +1,1249 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 + url: "https://pub.dev" + source: hosted + version: "64.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" + url: "https://pub.dev" + source: hosted + version: "6.2.0" + analyzer_plugin: + dependency: transitive + description: + name: analyzer_plugin + sha256: "9661b30b13a685efaee9f02e5d01ed9f2b423bd889d28a304d02d704aee69161" + url: "https://pub.dev" + source: hosted + version: "0.11.3" + ansicolor: + dependency: transitive + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + url: "https://pub.dev" + source: hosted + version: "2.0.3" + archive: + dependency: transitive + description: + name: archive + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d + url: "https://pub.dev" + source: hosted + version: "3.6.1" + args: + dependency: transitive + description: + name: args + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" + url: "https://pub.dev" + source: hosted + version: "2.5.0" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + auto_route: + dependency: "direct main" + description: + name: auto_route + sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 + url: "https://pub.dev" + source: hosted + version: "7.9.2" + auto_route_generator: + dependency: "direct dev" + description: + name: auto_route_generator + sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" + url: "https://pub.dev" + source: hosted + version: "7.3.2" + bloc: + dependency: transitive + description: + name: bloc + sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e" + url: "https://pub.dev" + source: hosted + version: "8.1.4" + bloc_test: + dependency: "direct dev" + description: + name: bloc_test + sha256: "165a6ec950d9252ebe36dc5335f2e6eb13055f33d56db0eeb7642768849b43d2" + url: "https://pub.dev" + source: hosted + version: "9.1.7" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + build: + dependency: transitive + description: + name: build + sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + build_config: + dependency: transitive + description: + name: build_config + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" + source: hosted + version: "1.1.1" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" + url: "https://pub.dev" + source: hosted + version: "4.0.1" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + build_runner: + dependency: "direct main" + description: + name: build_runner + sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" + url: "https://pub.dev" + source: hosted + version: "2.4.9" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" + url: "https://pub.dev" + source: hosted + version: "7.3.0" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb + url: "https://pub.dev" + source: hosted + version: "8.9.2" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + charcode: + dependency: transitive + description: + name: charcode + sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 + url: "https://pub.dev" + source: hosted + version: "1.3.1" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 + url: "https://pub.dev" + source: hosted + version: "0.4.1" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 + url: "https://pub.dev" + source: hosted + version: "4.10.0" + collection: + dependency: "direct main" + description: + name: collection + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" + source: hosted + version: "1.18.0" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + coverage: + dependency: transitive + description: + name: coverage + sha256: "3945034e86ea203af7a056d98e98e42a5518fff200d6e8e6647e1886b07e936e" + url: "https://pub.dev" + source: hosted + version: "1.8.0" + crypto: + dependency: transitive + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://pub.dev" + source: hosted + version: "3.0.3" + cupertino_icons: + dependency: transitive + description: + name: cupertino_icons + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 + url: "https://pub.dev" + source: hosted + version: "1.0.8" + dart_mappable: + dependency: "direct main" + description: + name: dart_mappable + sha256: f69a961ae8589724ebb542e588f228ae844c5f78028899cbe2cc718977c1b382 + url: "https://pub.dev" + source: hosted + version: "4.3.0" + dart_mappable_builder: + dependency: "direct dev" + description: + name: dart_mappable_builder + sha256: "04a6e7117382f8a8689b3e363bee6c3de8c9ea4332e664148fe01bd576eb1126" + url: "https://pub.dev" + source: hosted + version: "4.3.0" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" + url: "https://pub.dev" + source: hosted + version: "2.3.6" + db_viewer: + dependency: transitive + description: + name: db_viewer + sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + diff_match_patch: + dependency: transitive + description: + name: diff_match_patch + sha256: "2efc9e6e8f449d0abe15be240e2c2a3bcd977c8d126cfd70598aee60af35c0a4" + url: "https://pub.dev" + source: hosted + version: "0.4.1" + digit_components: + dependency: "direct main" + description: + name: digit_components + sha256: "07b585e5d8010639366da72a4a8b215ce9b8790c75b2162b66af3cea57ca35d9" + url: "https://pub.dev" + source: hosted + version: "1.0.2+1" + digit_data_model: + dependency: "direct main" + description: + path: "../digit_data_model" + relative: true + source: path + version: "1.0.4" + dio: + dependency: "direct main" + description: + name: dio + sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" + url: "https://pub.dev" + source: hosted + version: "5.7.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + drift: + dependency: "direct main" + description: + name: drift + sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + url: "https://pub.dev" + source: hosted + version: "2.15.0" + drift_db_viewer: + dependency: transitive + description: + name: drift_db_viewer + sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + drift_dev: + dependency: "direct dev" + description: + name: drift_dev + sha256: c037d9431b6f8dc633652b1469e5f53aaec6e4eb405ed29dd232fa888ef10d88 + url: "https://pub.dev" + source: hosted + version: "2.15.0" + easy_stepper: + dependency: transitive + description: + name: easy_stepper + sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + url: "https://pub.dev" + source: hosted + version: "0.5.2+1" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + file: + dependency: transitive + description: + name: file + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://pub.dev" + source: hosted + version: "7.0.1" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be + url: "https://pub.dev" + source: hosted + version: "1.1.1" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_bloc: + dependency: "direct main" + description: + name: flutter_bloc + sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a + url: "https://pub.dev" + source: hosted + version: "8.1.6" + flutter_focus_watcher: + dependency: transitive + description: + name: flutter_focus_watcher + sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility: + dependency: transitive + description: + name: flutter_keyboard_visibility + sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" + url: "https://pub.dev" + source: hosted + version: "5.4.1" + flutter_keyboard_visibility_linux: + dependency: transitive + description: + name: flutter_keyboard_visibility_linux + sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_macos: + dependency: transitive + description: + name: flutter_keyboard_visibility_macos + sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_platform_interface: + dependency: transitive + description: + name: flutter_keyboard_visibility_platform_interface + sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_web: + dependency: transitive + description: + name: flutter_keyboard_visibility_web + sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_windows: + dependency: transitive + description: + name: flutter_keyboard_visibility_windows + sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 + url: "https://pub.dev" + source: hosted + version: "2.0.3" + flutter_spinkit: + dependency: transitive + description: + name: flutter_spinkit + sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 + url: "https://pub.dev" + source: hosted + version: "5.2.1" + flutter_svg: + dependency: "direct main" + description: + name: flutter_svg + sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" + url: "https://pub.dev" + source: hosted + version: "2.0.10+1" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_typeahead: + dependency: transitive + description: + name: flutter_typeahead + sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 + url: "https://pub.dev" + source: hosted + version: "4.8.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + fluttertoast: + dependency: "direct main" + description: + name: fluttertoast + sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" + url: "https://pub.dev" + source: hosted + version: "8.2.5" + freezed: + dependency: "direct dev" + description: + name: freezed + sha256: a434911f643466d78462625df76fd9eb13e57348ff43fe1f77bbe909522c67a1 + url: "https://pub.dev" + source: hosted + version: "2.5.2" + freezed_annotation: + dependency: "direct main" + description: + name: freezed_annotation + sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 + url: "https://pub.dev" + source: hosted + version: "2.4.4" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + google_fonts: + dependency: transitive + description: + name: google_fonts + sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + url: "https://pub.dev" + source: hosted + version: "4.0.5" + graphs: + dependency: transitive + description: + name: graphs + sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 + url: "https://pub.dev" + source: hosted + version: "2.3.1" + group_radio_button: + dependency: "direct main" + description: + name: group_radio_button + sha256: "204de8d16b224be7fc72dade0c3afd410ff5a34417d89f74f0fd8be7a8c2b4d6" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + horizontal_data_table: + dependency: transitive + description: + name: horizontal_data_table + sha256: c8ab5256bbced698a729f3e0ff2cb0e8e97416cdbb082860370eaf883badf722 + url: "https://pub.dev" + source: hosted + version: "4.3.1" + http: + dependency: transitive + description: + name: http + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + url: "https://pub.dev" + source: hosted + version: "1.2.0" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + intl: + dependency: "direct main" + description: + name: intl + sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + url: "https://pub.dev" + source: hosted + version: "0.18.1" + io: + dependency: transitive + description: + name: io + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + isar: + dependency: transitive + description: + name: isar + sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" + isar_flutter_libs: + dependency: transitive + description: + name: isar_flutter_libs + sha256: bc6768cc4b9c61aabff77152e7f33b4b17d2fc93134f7af1c3dd51500fe8d5e8 + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" + js: + dependency: transitive + description: + name: js + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + url: "https://pub.dev" + source: hosted + version: "0.6.7" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.dev" + source: hosted + version: "4.9.0" + json_serializable: + dependency: "direct dev" + description: + name: json_serializable + sha256: ea1432d167339ea9b5bb153f0571d0039607a873d6e04e0117af043f14a1fd4b + url: "https://pub.dev" + source: hosted + version: "6.8.0" + lints: + dependency: transitive + description: + name: lints + sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + location: + dependency: "direct main" + description: + name: location + sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + url: "https://pub.dev" + source: hosted + version: "5.0.3" + location_platform_interface: + dependency: transitive + description: + name: location_platform_interface + sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + url: "https://pub.dev" + source: hosted + version: "3.1.2" + location_web: + dependency: transitive + description: + name: location_web + sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + url: "https://pub.dev" + source: hosted + version: "4.2.0" + logging: + dependency: transitive + description: + name: logging + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + lottie: + dependency: transitive + description: + name: lottie + sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + url: "https://pub.dev" + source: hosted + version: "2.7.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + url: "https://pub.dev" + source: hosted + version: "0.12.16" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + url: "https://pub.dev" + source: hosted + version: "0.5.0" + meta: + dependency: transitive + description: + name: meta + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + url: "https://pub.dev" + source: hosted + version: "1.10.0" + mime: + dependency: transitive + description: + name: mime + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" + url: "https://pub.dev" + source: hosted + version: "1.0.6" + mocktail: + dependency: "direct dev" + description: + name: mocktail + sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + nested: + dependency: transitive + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + node_preamble: + dependency: transitive + description: + name: node_preamble + sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + overlay_builder: + dependency: "direct main" + description: + name: overlay_builder + sha256: "58b97bc5f67a2e2bb7006dd88e697ac757dfffc9dbd1e7dfc1917fb510a4b5c8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + package_info_plus: + dependency: transitive + description: + name: package_info_plus + sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + url: "https://pub.dev" + source: hosted + version: "5.0.1" + package_info_plus_platform_interface: + dependency: transitive + description: + name: package_info_plus_platform_interface + sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + path: + dependency: transitive + description: + name: path + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + url: "https://pub.dev" + source: hosted + version: "1.8.3" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + url: "https://pub.dev" + source: hosted + version: "1.0.1" + path_provider: + dependency: transitive + description: + name: path_provider + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 + url: "https://pub.dev" + source: hosted + version: "2.1.4" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d + url: "https://pub.dev" + source: hosted + version: "2.2.4" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 + url: "https://pub.dev" + source: hosted + version: "2.3.0" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + url: "https://pub.dev" + source: hosted + version: "6.0.2" + platform: + dependency: transitive + description: + name: platform + sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" + url: "https://pub.dev" + source: hosted + version: "3.1.6" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + pointer_interceptor: + dependency: transitive + description: + name: pointer_interceptor + sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 + url: "https://pub.dev" + source: hosted + version: "0.9.3+7" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" + provider: + dependency: transitive + description: + name: provider + sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c + url: "https://pub.dev" + source: hosted + version: "6.1.2" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 + url: "https://pub.dev" + source: hosted + version: "1.3.0" + reactive_flutter_typeahead: + dependency: transitive + description: + name: reactive_flutter_typeahead + sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 + url: "https://pub.dev" + source: hosted + version: "0.8.1" + reactive_forms: + dependency: "direct main" + description: + name: reactive_forms + sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + url: "https://pub.dev" + source: hosted + version: "14.3.0" + recase: + dependency: transitive + description: + name: recase + sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 + url: "https://pub.dev" + source: hosted + version: "4.1.0" + remove_emoji_input_formatter: + dependency: transitive + description: + name: remove_emoji_input_formatter + sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" + url: "https://pub.dev" + source: hosted + version: "0.0.1+1" + shelf: + dependency: transitive + description: + name: shelf + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 + url: "https://pub.dev" + source: hosted + version: "1.4.1" + shelf_packages_handler: + dependency: transitive + description: + name: shelf_packages_handler + sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + shelf_static: + dependency: transitive + description: + name: shelf_static + sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e + url: "https://pub.dev" + source: hosted + version: "1.1.2" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" + url: "https://pub.dev" + source: hosted + version: "1.5.0" + source_helper: + dependency: transitive + description: + name: source_helper + sha256: "6adebc0006c37dd63fe05bca0a929b99f06402fc95aa35bf36d67f5c06de01fd" + url: "https://pub.dev" + source: hosted + version: "1.3.4" + source_map_stack_trace: + dependency: transitive + description: + name: source_map_stack_trace + sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + source_maps: + dependency: transitive + description: + name: source_maps + sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" + url: "https://pub.dev" + source: hosted + version: "0.10.12" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + sqlite3: + dependency: transitive + description: + name: sqlite3 + sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" + url: "https://pub.dev" + source: hosted + version: "2.4.0" + sqlite3_flutter_libs: + dependency: transitive + description: + name: sqlite3_flutter_libs + sha256: "7ae52b23366e5295005022e62fa093f64bfe190810223ea0ebf733a4cd140bce" + url: "https://pub.dev" + source: hosted + version: "0.5.26" + sqlparser: + dependency: transitive + description: + name: sqlparser + sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" + url: "https://pub.dev" + source: hosted + version: "0.34.1" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://pub.dev" + source: hosted + version: "1.11.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" + source: hosted + version: "2.1.2" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test: + dependency: transitive + description: + name: test + sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + url: "https://pub.dev" + source: hosted + version: "1.24.9" + test_api: + dependency: transitive + description: + name: test_api + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + url: "https://pub.dev" + source: hosted + version: "0.6.1" + test_core: + dependency: transitive + description: + name: test_core + sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + url: "https://pub.dev" + source: hosted + version: "0.5.9" + timing: + dependency: transitive + description: + name: timing + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + type_plus: + dependency: transitive + description: + name: type_plus + sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 + url: "https://pub.dev" + source: hosted + version: "2.1.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" + uuid: + dependency: transitive + description: + name: uuid + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + url: "https://pub.dev" + source: hosted + version: "3.0.7" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + url: "https://pub.dev" + source: hosted + version: "13.0.0" + watcher: + dependency: transitive + description: + name: watcher + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + web: + dependency: transitive + description: + name: web + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + url: "https://pub.dev" + source: hosted + version: "0.3.0" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + url: "https://pub.dev" + source: hosted + version: "2.4.0" + webkit_inspection_protocol: + dependency: transitive + description: + name: webkit_inspection_protocol + sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + win32: + dependency: transitive + description: + name: win32 + sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" + url: "https://pub.dev" + source: hosted + version: "5.2.0" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d + url: "https://pub.dev" + source: hosted + version: "1.0.4" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" +sdks: + dart: ">=3.2.0 <3.9.0" + flutter: ">=3.16.0" From 0fcf0b1ac8f4ce80330e90c61342f0215a715d88 Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Tue, 12 Nov 2024 15:25:43 +0530 Subject: [PATCH 150/241] fix digit_data_model in survey-form --- packages/survey_form/example/pubspec.lock | 8 ++++---- packages/survey_form/example/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/survey_form/example/pubspec.lock b/packages/survey_form/example/pubspec.lock index b325ac022..f92ecd96b 100644 --- a/packages/survey_form/example/pubspec.lock +++ b/packages/survey_form/example/pubspec.lock @@ -229,10 +229,10 @@ packages: dependency: transitive description: name: digit_data_model - sha256: "058168c32c198f7c76ff8765f56827812f9c71cd269d5cb792afd77302b766ab" + sha256: "0e5a1f8c5f0548e573af9c0279942f2dbc332042865614e0b89fe5952002ef1f" url: "https://pub.dev" source: hosted - version: "1.0.4-dev.3" + version: "1.0.4" dio: dependency: transitive description: @@ -921,8 +921,8 @@ packages: dependency: "direct main" description: path: "packages/survey_form" - ref: checklist-package - resolved-ref: bbac302cdb35f380fb369faf3bc778ee0cbf1bbf + ref: develop + resolved-ref: fafde86e07aecb77bbfa48ed1f1f7e67c77d986d url: "https://github.com/egovernments/health-campaign-field-worker-app" source: git version: "0.0.1-dev.1" diff --git a/packages/survey_form/example/pubspec.yaml b/packages/survey_form/example/pubspec.yaml index bfd25c882..5e70eec48 100644 --- a/packages/survey_form/example/pubspec.yaml +++ b/packages/survey_form/example/pubspec.yaml @@ -32,7 +32,7 @@ dependencies: survey_form: git: url: https://github.com/egovernments/health-campaign-field-worker-app - ref: checklist-package + ref: develop path: ./packages/survey_form flutter: From cecd158a6c1417c835c8b70e475df6b6dffbb615 Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Tue, 12 Nov 2024 17:10:23 +0530 Subject: [PATCH 151/241] fix digit data model issue in complaints package --- packages/complaints/.gitignore | 1 - packages/complaints/example/pubspec.lock | 9 +- packages/complaints/pubspec.lock | 1218 ++++++++++++++++++++++ 3 files changed, 1222 insertions(+), 6 deletions(-) create mode 100644 packages/complaints/pubspec.lock diff --git a/packages/complaints/.gitignore b/packages/complaints/.gitignore index ac5aa9893..a68ac422a 100644 --- a/packages/complaints/.gitignore +++ b/packages/complaints/.gitignore @@ -23,7 +23,6 @@ migrate_working_dir/ # Flutter/Dart/Pub related # Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. -/pubspec.lock **/doc/api/ .dart_tool/ build/ diff --git a/packages/complaints/example/pubspec.lock b/packages/complaints/example/pubspec.lock index c30d8d54e..5dd22b18f 100644 --- a/packages/complaints/example/pubspec.lock +++ b/packages/complaints/example/pubspec.lock @@ -235,11 +235,10 @@ packages: digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "14ebea5f17921081025963b379efd5e16d155dd920d5a42ab2f2f392afb649de" - url: "https://pub.dev" - source: hosted - version: "1.0.4-dev.1" + path: "../../digit_data_model" + relative: true + source: path + version: "1.0.4" dio: dependency: transitive description: diff --git a/packages/complaints/pubspec.lock b/packages/complaints/pubspec.lock new file mode 100644 index 000000000..b7704263b --- /dev/null +++ b/packages/complaints/pubspec.lock @@ -0,0 +1,1218 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 + url: "https://pub.dev" + source: hosted + version: "64.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" + url: "https://pub.dev" + source: hosted + version: "6.2.0" + ansicolor: + dependency: transitive + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + url: "https://pub.dev" + source: hosted + version: "2.0.3" + archive: + dependency: transitive + description: + name: archive + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d + url: "https://pub.dev" + source: hosted + version: "3.6.1" + args: + dependency: transitive + description: + name: args + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" + url: "https://pub.dev" + source: hosted + version: "2.5.0" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + auto_route: + dependency: "direct main" + description: + name: auto_route + sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 + url: "https://pub.dev" + source: hosted + version: "7.9.2" + auto_route_generator: + dependency: "direct dev" + description: + name: auto_route_generator + sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" + url: "https://pub.dev" + source: hosted + version: "7.3.2" + bloc: + dependency: transitive + description: + name: bloc + sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e" + url: "https://pub.dev" + source: hosted + version: "8.1.4" + bloc_test: + dependency: "direct dev" + description: + name: bloc_test + sha256: "165a6ec950d9252ebe36dc5335f2e6eb13055f33d56db0eeb7642768849b43d2" + url: "https://pub.dev" + source: hosted + version: "9.1.7" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + build: + dependency: transitive + description: + name: build + sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + build_config: + dependency: transitive + description: + name: build_config + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" + source: hosted + version: "1.1.1" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" + url: "https://pub.dev" + source: hosted + version: "4.0.1" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + build_runner: + dependency: "direct main" + description: + name: build_runner + sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" + url: "https://pub.dev" + source: hosted + version: "2.4.9" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" + url: "https://pub.dev" + source: hosted + version: "7.3.0" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb + url: "https://pub.dev" + source: hosted + version: "8.9.2" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 + url: "https://pub.dev" + source: hosted + version: "4.10.0" + collection: + dependency: transitive + description: + name: collection + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" + source: hosted + version: "1.18.0" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + coverage: + dependency: transitive + description: + name: coverage + sha256: "3945034e86ea203af7a056d98e98e42a5518fff200d6e8e6647e1886b07e936e" + url: "https://pub.dev" + source: hosted + version: "1.8.0" + crypto: + dependency: transitive + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://pub.dev" + source: hosted + version: "3.0.3" + cupertino_icons: + dependency: transitive + description: + name: cupertino_icons + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 + url: "https://pub.dev" + source: hosted + version: "1.0.8" + dart_mappable: + dependency: "direct main" + description: + name: dart_mappable + sha256: f69a961ae8589724ebb542e588f228ae844c5f78028899cbe2cc718977c1b382 + url: "https://pub.dev" + source: hosted + version: "4.3.0" + dart_mappable_builder: + dependency: "direct dev" + description: + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git + version: "4.2.0" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" + url: "https://pub.dev" + source: hosted + version: "2.3.6" + db_viewer: + dependency: transitive + description: + name: db_viewer + sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + diff_match_patch: + dependency: transitive + description: + name: diff_match_patch + sha256: "2efc9e6e8f449d0abe15be240e2c2a3bcd977c8d126cfd70598aee60af35c0a4" + url: "https://pub.dev" + source: hosted + version: "0.4.1" + digit_components: + dependency: "direct main" + description: + name: digit_components + sha256: "07b585e5d8010639366da72a4a8b215ce9b8790c75b2162b66af3cea57ca35d9" + url: "https://pub.dev" + source: hosted + version: "1.0.2+1" + digit_data_model: + dependency: "direct main" + description: + path: "../digit_data_model" + relative: true + source: path + version: "1.0.4" + dio: + dependency: "direct main" + description: + name: dio + sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" + url: "https://pub.dev" + source: hosted + version: "5.7.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + drift: + dependency: "direct main" + description: + name: drift + sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + url: "https://pub.dev" + source: hosted + version: "2.15.0" + drift_db_viewer: + dependency: transitive + description: + name: drift_db_viewer + sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + easy_stepper: + dependency: transitive + description: + name: easy_stepper + sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + url: "https://pub.dev" + source: hosted + version: "0.5.2+1" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + file: + dependency: transitive + description: + name: file + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://pub.dev" + source: hosted + version: "7.0.1" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be + url: "https://pub.dev" + source: hosted + version: "1.1.1" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_bloc: + dependency: "direct main" + description: + name: flutter_bloc + sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a + url: "https://pub.dev" + source: hosted + version: "8.1.6" + flutter_dotenv: + dependency: "direct main" + description: + name: flutter_dotenv + sha256: b7c7be5cd9f6ef7a78429cabd2774d3c4af50e79cb2b7593e3d5d763ef95c61b + url: "https://pub.dev" + source: hosted + version: "5.2.1" + flutter_focus_watcher: + dependency: transitive + description: + name: flutter_focus_watcher + sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility: + dependency: transitive + description: + name: flutter_keyboard_visibility + sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" + url: "https://pub.dev" + source: hosted + version: "5.4.1" + flutter_keyboard_visibility_linux: + dependency: transitive + description: + name: flutter_keyboard_visibility_linux + sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_macos: + dependency: transitive + description: + name: flutter_keyboard_visibility_macos + sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_platform_interface: + dependency: transitive + description: + name: flutter_keyboard_visibility_platform_interface + sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_web: + dependency: transitive + description: + name: flutter_keyboard_visibility_web + sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_windows: + dependency: transitive + description: + name: flutter_keyboard_visibility_windows + sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 + url: "https://pub.dev" + source: hosted + version: "2.0.3" + flutter_spinkit: + dependency: transitive + description: + name: flutter_spinkit + sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 + url: "https://pub.dev" + source: hosted + version: "5.2.1" + flutter_svg: + dependency: "direct main" + description: + name: flutter_svg + sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" + url: "https://pub.dev" + source: hosted + version: "2.0.10+1" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_typeahead: + dependency: transitive + description: + name: flutter_typeahead + sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 + url: "https://pub.dev" + source: hosted + version: "4.8.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + fluttertoast: + dependency: transitive + description: + name: fluttertoast + sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" + url: "https://pub.dev" + source: hosted + version: "8.2.5" + freezed: + dependency: "direct dev" + description: + name: freezed + sha256: a434911f643466d78462625df76fd9eb13e57348ff43fe1f77bbe909522c67a1 + url: "https://pub.dev" + source: hosted + version: "2.5.2" + freezed_annotation: + dependency: "direct main" + description: + name: freezed_annotation + sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 + url: "https://pub.dev" + source: hosted + version: "2.4.4" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + google_fonts: + dependency: transitive + description: + name: google_fonts + sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + url: "https://pub.dev" + source: hosted + version: "4.0.5" + graphs: + dependency: transitive + description: + name: graphs + sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 + url: "https://pub.dev" + source: hosted + version: "2.3.1" + group_radio_button: + dependency: "direct main" + description: + name: group_radio_button + sha256: "204de8d16b224be7fc72dade0c3afd410ff5a34417d89f74f0fd8be7a8c2b4d6" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + horizontal_data_table: + dependency: transitive + description: + name: horizontal_data_table + sha256: c8ab5256bbced698a729f3e0ff2cb0e8e97416cdbb082860370eaf883badf722 + url: "https://pub.dev" + source: hosted + version: "4.3.1" + http: + dependency: transitive + description: + name: http + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + url: "https://pub.dev" + source: hosted + version: "1.2.0" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + intl: + dependency: "direct main" + description: + name: intl + sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + url: "https://pub.dev" + source: hosted + version: "0.18.1" + io: + dependency: transitive + description: + name: io + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + isar: + dependency: "direct main" + description: + name: isar + sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" + isar_flutter_libs: + dependency: transitive + description: + name: isar_flutter_libs + sha256: bc6768cc4b9c61aabff77152e7f33b4b17d2fc93134f7af1c3dd51500fe8d5e8 + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" + js: + dependency: transitive + description: + name: js + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + url: "https://pub.dev" + source: hosted + version: "0.6.7" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.dev" + source: hosted + version: "4.9.0" + json_serializable: + dependency: "direct dev" + description: + name: json_serializable + sha256: ea1432d167339ea9b5bb153f0571d0039607a873d6e04e0117af043f14a1fd4b + url: "https://pub.dev" + source: hosted + version: "6.8.0" + lints: + dependency: transitive + description: + name: lints + sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + location: + dependency: transitive + description: + name: location + sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + url: "https://pub.dev" + source: hosted + version: "5.0.3" + location_platform_interface: + dependency: transitive + description: + name: location_platform_interface + sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + url: "https://pub.dev" + source: hosted + version: "3.1.2" + location_web: + dependency: transitive + description: + name: location_web + sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + url: "https://pub.dev" + source: hosted + version: "4.2.0" + logging: + dependency: transitive + description: + name: logging + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + lottie: + dependency: transitive + description: + name: lottie + sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + url: "https://pub.dev" + source: hosted + version: "2.7.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + url: "https://pub.dev" + source: hosted + version: "0.12.16" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + url: "https://pub.dev" + source: hosted + version: "0.5.0" + meta: + dependency: transitive + description: + name: meta + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + url: "https://pub.dev" + source: hosted + version: "1.10.0" + mime: + dependency: transitive + description: + name: mime + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" + url: "https://pub.dev" + source: hosted + version: "1.0.6" + mocktail: + dependency: "direct dev" + description: + name: mocktail + sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + nested: + dependency: transitive + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + node_preamble: + dependency: transitive + description: + name: node_preamble + sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + overlay_builder: + dependency: transitive + description: + name: overlay_builder + sha256: "58b97bc5f67a2e2bb7006dd88e697ac757dfffc9dbd1e7dfc1917fb510a4b5c8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + package_info_plus: + dependency: transitive + description: + name: package_info_plus + sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + url: "https://pub.dev" + source: hosted + version: "5.0.1" + package_info_plus_platform_interface: + dependency: transitive + description: + name: package_info_plus_platform_interface + sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + path: + dependency: transitive + description: + name: path + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + url: "https://pub.dev" + source: hosted + version: "1.8.3" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + url: "https://pub.dev" + source: hosted + version: "1.0.1" + path_provider: + dependency: "direct main" + description: + name: path_provider + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 + url: "https://pub.dev" + source: hosted + version: "2.1.4" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d + url: "https://pub.dev" + source: hosted + version: "2.2.4" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 + url: "https://pub.dev" + source: hosted + version: "2.3.0" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + url: "https://pub.dev" + source: hosted + version: "6.0.2" + platform: + dependency: transitive + description: + name: platform + sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" + url: "https://pub.dev" + source: hosted + version: "3.1.6" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + pointer_interceptor: + dependency: transitive + description: + name: pointer_interceptor + sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 + url: "https://pub.dev" + source: hosted + version: "0.9.3+7" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" + provider: + dependency: transitive + description: + name: provider + sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c + url: "https://pub.dev" + source: hosted + version: "6.1.2" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 + url: "https://pub.dev" + source: hosted + version: "1.3.0" + reactive_flutter_typeahead: + dependency: transitive + description: + name: reactive_flutter_typeahead + sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 + url: "https://pub.dev" + source: hosted + version: "0.8.1" + reactive_forms: + dependency: "direct main" + description: + name: reactive_forms + sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + url: "https://pub.dev" + source: hosted + version: "14.3.0" + recase: + dependency: "direct main" + description: + name: recase + sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 + url: "https://pub.dev" + source: hosted + version: "4.1.0" + remove_emoji_input_formatter: + dependency: transitive + description: + name: remove_emoji_input_formatter + sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" + url: "https://pub.dev" + source: hosted + version: "0.0.1+1" + shelf: + dependency: transitive + description: + name: shelf + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 + url: "https://pub.dev" + source: hosted + version: "1.4.1" + shelf_packages_handler: + dependency: transitive + description: + name: shelf_packages_handler + sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + shelf_static: + dependency: transitive + description: + name: shelf_static + sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e + url: "https://pub.dev" + source: hosted + version: "1.1.2" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" + url: "https://pub.dev" + source: hosted + version: "1.5.0" + source_helper: + dependency: transitive + description: + name: source_helper + sha256: "6adebc0006c37dd63fe05bca0a929b99f06402fc95aa35bf36d67f5c06de01fd" + url: "https://pub.dev" + source: hosted + version: "1.3.4" + source_map_stack_trace: + dependency: transitive + description: + name: source_map_stack_trace + sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + source_maps: + dependency: transitive + description: + name: source_maps + sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" + url: "https://pub.dev" + source: hosted + version: "0.10.12" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + sqlite3: + dependency: transitive + description: + name: sqlite3 + sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" + url: "https://pub.dev" + source: hosted + version: "2.4.0" + sqlite3_flutter_libs: + dependency: transitive + description: + name: sqlite3_flutter_libs + sha256: "7ae52b23366e5295005022e62fa093f64bfe190810223ea0ebf733a4cd140bce" + url: "https://pub.dev" + source: hosted + version: "0.5.26" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://pub.dev" + source: hosted + version: "1.11.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" + source: hosted + version: "2.1.2" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test: + dependency: transitive + description: + name: test + sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + url: "https://pub.dev" + source: hosted + version: "1.24.9" + test_api: + dependency: transitive + description: + name: test_api + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + url: "https://pub.dev" + source: hosted + version: "0.6.1" + test_core: + dependency: transitive + description: + name: test_core + sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + url: "https://pub.dev" + source: hosted + version: "0.5.9" + timing: + dependency: transitive + description: + name: timing + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + type_plus: + dependency: transitive + description: + name: type_plus + sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 + url: "https://pub.dev" + source: hosted + version: "2.1.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" + uuid: + dependency: transitive + description: + name: uuid + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + url: "https://pub.dev" + source: hosted + version: "3.0.7" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + url: "https://pub.dev" + source: hosted + version: "13.0.0" + watcher: + dependency: transitive + description: + name: watcher + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + web: + dependency: transitive + description: + name: web + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + url: "https://pub.dev" + source: hosted + version: "0.3.0" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + url: "https://pub.dev" + source: hosted + version: "2.4.0" + webkit_inspection_protocol: + dependency: transitive + description: + name: webkit_inspection_protocol + sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + win32: + dependency: transitive + description: + name: win32 + sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" + url: "https://pub.dev" + source: hosted + version: "5.2.0" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d + url: "https://pub.dev" + source: hosted + version: "1.0.4" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" +sdks: + dart: ">=3.2.0 <3.9.0" + flutter: ">=3.16.0" From 082a211c269445a06a65b366ffb1c6e012d85265 Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Thu, 14 Nov 2024 11:30:38 +0530 Subject: [PATCH 152/241] fix digit data model in example (survey-form) --- packages/survey_form/example/pubspec.lock | 17 +++++++---------- packages/survey_form/example/pubspec.yaml | 5 +---- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/packages/survey_form/example/pubspec.lock b/packages/survey_form/example/pubspec.lock index f92ecd96b..b11c2eb79 100644 --- a/packages/survey_form/example/pubspec.lock +++ b/packages/survey_form/example/pubspec.lock @@ -226,12 +226,11 @@ packages: source: hosted version: "1.0.1" digit_data_model: - dependency: transitive + dependency: "direct overridden" description: - name: digit_data_model - sha256: "0e5a1f8c5f0548e573af9c0279942f2dbc332042865614e0b89fe5952002ef1f" - url: "https://pub.dev" - source: hosted + path: "../../digit_data_model" + relative: true + source: path version: "1.0.4" dio: dependency: transitive @@ -920,11 +919,9 @@ packages: survey_form: dependency: "direct main" description: - path: "packages/survey_form" - ref: develop - resolved-ref: fafde86e07aecb77bbfa48ed1f1f7e67c77d986d - url: "https://github.com/egovernments/health-campaign-field-worker-app" - source: git + path: ".." + relative: true + source: path version: "0.0.1-dev.1" term_glyph: dependency: transitive diff --git a/packages/survey_form/example/pubspec.yaml b/packages/survey_form/example/pubspec.yaml index 5e70eec48..2c953d27a 100644 --- a/packages/survey_form/example/pubspec.yaml +++ b/packages/survey_form/example/pubspec.yaml @@ -30,10 +30,7 @@ environment: dependencies: digit_components: ^1.0.0+2 survey_form: - git: - url: https://github.com/egovernments/health-campaign-field-worker-app - ref: develop - path: ./packages/survey_form + path: ../ flutter: sdk: flutter From b7ea977a4f68dcfbc305c0290400bb34bd411150 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Thu, 14 Nov 2024 17:12:21 +0530 Subject: [PATCH 153/241] modified MainActivity.kt and location_service.kt to update accuracy updated regex to handle negative latitude, longitude and accuracy changed accuracy to dynamic --- .../src/main/kotlin/com/digit/hcm/MainActivity.kt | 10 ++++++++-- .../main/kotlin/com/digit/hcm/location_service.kt | 9 ++++++--- .../health_campaign_field_worker_app/pubspec.lock | 15 ++++++++------- .../health_campaign_field_worker_app/pubspec.yaml | 2 +- packages/digit_location_tracker/CHANGELOG.md | 5 +++++ packages/digit_location_tracker/README.md | 6 ++++-- .../digit_location_tracker/lib/utils/utils.dart | 9 +++++---- packages/digit_location_tracker/pubspec.yaml | 2 +- 8 files changed, 38 insertions(+), 20 deletions(-) diff --git a/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/MainActivity.kt b/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/MainActivity.kt index 9e7d8c4c5..23b645978 100644 --- a/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/MainActivity.kt +++ b/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/MainActivity.kt @@ -20,11 +20,17 @@ class MainActivity : FlutterActivity() { override fun onReceive(context: Context?, intent: Intent?) { val latitude = intent?.getDoubleExtra("latitude", 0.0) val longitude = intent?.getDoubleExtra("longitude", 0.0) + val accuracy = intent?.getFloatExtra("accuracy", 0.0f) // Retrieve accuracy here + // Handle the location data here - Toast.makeText(context, "Latitude: $latitude, Longitude: $longitude", Toast.LENGTH_LONG).show() + Toast.makeText(context, "Latitude: $latitude, Longitude: $longitude, Accuracy: $accuracy", Toast.LENGTH_LONG).show() // Optionally, you can send this data to Flutter via MethodChannel flutterEngine?.dartExecutor?.binaryMessenger?.let { - MethodChannel(it, CHANNEL).invokeMethod("locationUpdate", mapOf("latitude" to latitude, "longitude" to longitude)) + MethodChannel(it, CHANNEL).invokeMethod("locationUpdate", mapOf( + "latitude" to latitude, + "longitude" to longitude, + "accuracy" to accuracy + )) } } } diff --git a/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/location_service.kt b/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/location_service.kt index 930d4a408..23756ee0e 100644 --- a/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/location_service.kt +++ b/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/location_service.kt @@ -92,10 +92,11 @@ class LocationService : Service() { val intent = Intent("LocationUpdate") intent.putExtra("latitude", location.latitude) intent.putExtra("longitude", location.longitude) + intent.putExtra("accuracy", location.accuracy) sendBroadcast(intent) - Log.d("LocationSharing", "Location sent to MainActivity: Latitude ${location.latitude}, Longitude ${location.longitude}") + Log.d("LocationSharing", "Location sent to MainActivity: Latitude ${location.latitude}, Longitude ${location.longitude}, Accuracy ${location.accuracy}") } override fun onDestroy() { @@ -129,8 +130,10 @@ class LocationService : Service() { val notificationIntent = Intent(this, MainActivity::class.java) val pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_IMMUTABLE) val timestamp = System.currentTimeMillis() - val notificationContent = "Latitude: ${location.latitude}, Longitude: ${location.longitude}," - writeToFile("Latitude: ${location.latitude}, Longitude: ${location.longitude}, isSync: false, timestamp: $timestamp") + val notificationContent = "Latitude: ${location.latitude}, Longitude: ${location.longitude}, Accuracy: ${location.accuracy}" // Include accuracy + + // Write location and accuracy to file + writeToFile("Latitude: ${location.latitude}, Longitude: ${location.longitude}, Accuracy: ${location.accuracy}, isSync: false, timestamp: $timestamp") val notification = NotificationCompat.Builder(this, CHANNEL_ID) .setContentTitle("Location Service") diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index c47910a9c..a4d1893aa 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -69,10 +69,10 @@ packages: dependency: "direct main" description: name: attendance_management - sha256: f1b4373e8d0d9f8227ede0d25d4141f0d16d18ac2525c0347b844098cdab080f + sha256: "8a09814ca11cca736d771be70fb6174303ea0cb3525aa72e7239cbc14b915303" url: "https://pub.dev" source: hosted - version: "1.0.2+1" + version: "1.0.2+4" audioplayers: dependency: "direct main" description: @@ -517,18 +517,19 @@ packages: digit_firebase_services: dependency: "direct main" description: - path: "../../packages/digit_firebase_services" - relative: true - source: path + name: digit_firebase_services + sha256: ce76521d797e123b6fc95c9dfad7d4a918a93b97f57aecd0e1d517b46190909d + url: "https://pub.dev" + source: hosted version: "0.0.1" digit_location_tracker: dependency: "direct main" description: name: digit_location_tracker - sha256: "1ea40a1373cac2c90659432a5531cd96489d2bd4d9a719f2ae3978ea60662ab6" + sha256: ee5531b9b9442820d48d1ddd86177602eb425f742b0d9c29b57325ef157fa886 url: "https://pub.dev" source: hosted - version: "0.0.1-dev.1" + version: "0.0.1-dev.2" digit_scanner: dependency: "direct main" description: diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 06d188a41..f86b903a0 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -74,7 +74,7 @@ dependencies: disable_battery_optimization: ^1.1.1 digit_dss: ^1.0.1 closed_household: ^1.0.1+1 - digit_location_tracker: ^0.0.1-dev.1 + digit_location_tracker: ^0.0.1-dev.2 permission_handler: ^11.3.1 dev_dependencies: diff --git a/packages/digit_location_tracker/CHANGELOG.md b/packages/digit_location_tracker/CHANGELOG.md index e0452a61f..0493f2b49 100644 --- a/packages/digit_location_tracker/CHANGELOG.md +++ b/packages/digit_location_tracker/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.0.1-dev.2 + +* Modified Regex for handling negative latitude, longitude and added new accuracy field +* Added new accuracy field to fetch precise location + ## 0.0.1-dev.1 * Init release of digit_location_tracker diff --git a/packages/digit_location_tracker/README.md b/packages/digit_location_tracker/README.md index be133cdd4..0b6fb25b3 100644 --- a/packages/digit_location_tracker/README.md +++ b/packages/digit_location_tracker/README.md @@ -34,6 +34,8 @@ triggerLocationTracker( now.add(const Duration(hours: 8)).millisecondsSinceEpoch, ); -## Additional information +## Additional Required information -Create location service file in your android folder and replace main activity similar to this https://github.com/egovernments/health-campaign-field-worker-app/blob/location_tracker/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/MainActivity.kt and https://github.com/egovernments/health-campaign-field-worker-app/blob/location_tracker/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/location_service.kt +Create location service file in your android folder and replace main activity similar to this +1. https://github.com/egovernments/health-campaign-field-worker-app/blob/location_tracker/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/MainActivity.kt +2. https://github.com/egovernments/health-campaign-field-worker-app/blob/location_tracker/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/location_service.kt diff --git a/packages/digit_location_tracker/lib/utils/utils.dart b/packages/digit_location_tracker/lib/utils/utils.dart index 8fc217297..dcc22740e 100644 --- a/packages/digit_location_tracker/lib/utils/utils.dart +++ b/packages/digit_location_tracker/lib/utils/utils.dart @@ -30,19 +30,20 @@ Future> parseLocationData(List logs) async { for (var log in logs) { final pattern = RegExp( - r'Latitude:\s*(\d+\.\d+),\s*Longitude:\s*(\d+\.\d+),\s*isSync:\s*(\w+),\s*timestamp:\s*(\d+)'); + r'Latitude:\s*(-?\d+\.\d+),\s*Longitude:\s*(-?\d+\.\d+),\s*Accuracy:\s*(\d+\.\d+),\s*isSync:\s*(\w+),\s*timestamp:\s*(\d+)'); final match = pattern.firstMatch(log); if (match != null) { final latitude = double.parse(match.group(1)!); final longitude = double.parse(match.group(2)!); - final isSync = match.group(3)!.toLowerCase() == 'true'; - final timestamp = int.parse(match.group(4)!); + final accuracy = double.parse(match.group(3)!); + final isSync = match.group(4)!.toLowerCase() == 'true'; + final timestamp = int.parse(match.group(5)!); locationDataList.add(UserActionModel( latitude: latitude, longitude: longitude, - locationAccuracy: 1.3, + locationAccuracy: accuracy, tenantId: LocationTrackerSingleton().tenantId, clientReferenceId: IdGen.instance.identifier, isSync: isSync, diff --git a/packages/digit_location_tracker/pubspec.yaml b/packages/digit_location_tracker/pubspec.yaml index 8b8c120c7..e1a343baa 100644 --- a/packages/digit_location_tracker/pubspec.yaml +++ b/packages/digit_location_tracker/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_location_tracker description: "A comprehensive package to enable location_tracking in the application" -version: 0.0.1-dev.1 +version: 0.0.1-dev.2 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_location_tracker repository: https://github.com/egovernments/health-campaign-field-worker-app From 827888075e43d2cf1c9f2168fcaf27fc464abc7a Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Fri, 15 Nov 2024 10:46:34 +0530 Subject: [PATCH 154/241] added retry to localization.dart local repo --- .../data/repositories/local/localization.dart | 168 +++++++++--------- 1 file changed, 87 insertions(+), 81 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart index bd9fc1e08..0d8244287 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart @@ -10,98 +10,104 @@ import '../../local_store/no_sql/schema/localization.dart'; class LocalizationLocalRepository { FutureOr> returnLocalizationFromSQL( LocalSqlDataStore sql) async { - final selectQuery = sql.select(sql.localization).join([]); - - // List to hold the AND conditions - final andConditions = >[]; - - // Add condition for locale if provided - if (LocalizationParams().locale != null) { - final localeString = '${LocalizationParams().locale!}'; - andConditions.add(sql.localization.locale.equals(localeString)); - } - - // Add conditions for modules and codes - if (LocalizationParams().module != null && - LocalizationParams().module!.isNotEmpty) { - final moduleToExclude = LocalizationParams().module!; - - if (LocalizationParams().exclude == true) { - // Exclude modules but include records where the code matches - final moduleCondition = - sql.localization.module.contains(moduleToExclude).not(); - final codeCondition = LocalizationParams().code != null && - LocalizationParams().code!.isNotEmpty - ? sql.localization.code.isIn(LocalizationParams().code!.toList()) - : const Constant(false); // True if no code filter - - // Combine conditions: exclude module unless code matches - andConditions.add(buildAnd([moduleCondition | codeCondition])); - } else { - // Include specified modules and optionally filter by code - final moduleCondition = - sql.localization.module.contains(moduleToExclude); - final codeCondition = LocalizationParams().code != null && - LocalizationParams().code!.isNotEmpty - ? sql.localization.code.isIn(LocalizationParams().code!.toList()) - : const Constant(false); - - // Combine conditions: module matches and optionally code filter - andConditions.add(buildAnd([moduleCondition | codeCondition])); + return retryLocalCallOperation(() async { + final selectQuery = sql.select(sql.localization).join([]); + + // List to hold the AND conditions + final andConditions = >[]; + + // Add condition for locale if provided + if (LocalizationParams().locale != null) { + final localeString = '${LocalizationParams().locale!}'; + andConditions.add(sql.localization.locale.equals(localeString)); + } + + // Add conditions for modules and codes + if (LocalizationParams().module != null && + LocalizationParams().module!.isNotEmpty) { + final moduleToExclude = LocalizationParams().module!; + + if (LocalizationParams().exclude == true) { + // Exclude modules but include records where the code matches + final moduleCondition = + sql.localization.module.contains(moduleToExclude).not(); + final codeCondition = LocalizationParams().code != null && + LocalizationParams().code!.isNotEmpty + ? sql.localization.code.isIn(LocalizationParams().code!.toList()) + : const Constant(false); // True if no code filter + + // Combine conditions: exclude module unless code matches + andConditions.add(buildAnd([moduleCondition | codeCondition])); + } else { + // Include specified modules and optionally filter by code + final moduleCondition = + sql.localization.module.contains(moduleToExclude); + final codeCondition = LocalizationParams().code != null && + LocalizationParams().code!.isNotEmpty + ? sql.localization.code.isIn(LocalizationParams().code!.toList()) + : const Constant(false); + + // Combine conditions: module matches and optionally code filter + andConditions.add(buildAnd([moduleCondition | codeCondition])); + } + } else if (LocalizationParams().code != null && + LocalizationParams().code!.isNotEmpty) { + // If no module filter, just apply code filter + andConditions.add( + sql.localization.code.isIn(LocalizationParams().code!.toList())); + } + + // Apply the combined conditions to the query + if (andConditions.isNotEmpty) { + selectQuery.where(buildAnd(andConditions)); } - } else if (LocalizationParams().code != null && - LocalizationParams().code!.isNotEmpty) { - // If no module filter, just apply code filter - andConditions - .add(sql.localization.code.isIn(LocalizationParams().code!.toList())); - } - - // Apply the combined conditions to the query - if (andConditions.isNotEmpty) { - selectQuery.where(buildAnd(andConditions)); - } - - final result = await selectQuery.get(); - - return result.map((row) { - final data = row.readTableOrNull(sql.localization); - - return Localization() - ..code = data!.code - ..locale = data.locale - ..module = data.module - ..message = data.message; - }).toList(); + + final result = await selectQuery.get(); + + return result.map((row) { + final data = row.readTableOrNull(sql.localization); + + return Localization() + ..code = data!.code + ..locale = data.locale + ..module = data.module + ..message = data.message; + }).toList(); + }); } FutureOr> fetchLocalization( {required LocalSqlDataStore sql, required String locale, required String module}) async { - final query = sql.select(sql.localization).join([]) - ..where( - buildOr([ - sql.localization.locale.equals(locale), - sql.localization.module.contains(module), - ]), - ); - - final results = await query.get(); - - return results.map((e) { - final data = e.readTableOrNull(sql.localization); - return Localization() - ..code = data!.code - ..locale = data.locale - ..module = data.module - ..message = data.message; - }).toList(); + return retryLocalCallOperation(() async { + final query = sql.select(sql.localization).join([]) + ..where( + buildOr([ + sql.localization.locale.equals(locale), + sql.localization.module.contains(module), + ]), + ); + + final results = await query.get(); + + return results.map((e) { + final data = e.readTableOrNull(sql.localization); + return Localization() + ..code = data!.code + ..locale = data.locale + ..module = data.module + ..message = data.message; + }).toList(); + }); } FutureOr create( List result, LocalSqlDataStore sql) async { - return sql.batch((batch) { - batch.insertAll(sql.localization, result); + return retryLocalCallOperation(() async { + return sql.batch((batch) { + batch.insertAll(sql.localization, result); + }); }); } } From e1daea0a01abc614ad3d1f72a3381ed8db8a89a6 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Fri, 15 Nov 2024 17:58:20 +0530 Subject: [PATCH 155/241] Solved the scroll issue and additional fields in checklist --- .../lib/app.dart | 9 +- .../lib/widgets/sidebar/side_bar.dart | 383 +++++++------- .../pubspec.lock | 294 +---------- packages/attendance_management/pubspec.lock | 15 +- packages/closed_household/pubspec.lock | 40 +- packages/complaints/pubspec.lock | 17 +- packages/digit_components/pubspec.lock | 31 -- packages/digit_data_model/pubspec.lock | 494 +----------------- packages/digit_dss/pubspec.lock | 15 +- packages/digit_firebase_services/pubspec.lock | 392 +------------- packages/digit_location_tracker/pubspec.lock | 126 +---- packages/inventory_management/pubspec.lock | 39 +- .../reason_checklist_preview.dart | 2 +- .../lib/pages/survey_form_preview.dart | 2 +- .../lib/pages/survey_form_view.dart | 40 +- packages/survey_form/pubspec.lock | 9 +- 16 files changed, 312 insertions(+), 1596 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/app.dart b/apps/health_campaign_field_worker_app/lib/app.dart index 531d0295c..2213f21b2 100644 --- a/apps/health_campaign_field_worker_app/lib/app.dart +++ b/apps/health_campaign_field_worker_app/lib/app.dart @@ -184,13 +184,8 @@ class MainApplicationState extends State widget.sql) ..add( LocalizationEvent.onLoadLocalization( - module: localizationModulesList.interfaces - .where((element) => - element.type == - Modules.localizationModule) - .map((e) => e.name.toString()) - .join(',') - .toString(), + module: + "hcm-boundary-${envConfig.variables.hierarchyType.toLowerCase()},${localizationModulesList.interfaces.where((element) => element.type == Modules.localizationModule).map((e) => e.name.toString()).join(',')}", tenantId: appConfig.tenantId.toString(), locale: firstLanguage, path: Constants.localizationApiPath, diff --git a/apps/health_campaign_field_worker_app/lib/widgets/sidebar/side_bar.dart b/apps/health_campaign_field_worker_app/lib/widgets/sidebar/side_bar.dart index 07530a05d..1fc7fc0ac 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/sidebar/side_bar.dart +++ b/apps/health_campaign_field_worker_app/lib/widgets/sidebar/side_bar.dart @@ -33,217 +33,222 @@ class SideBar extends StatelessWidget { : false; return BlocBuilder(builder: (context, state) { - return Column( - children: [ - Container( - color: theme.colorScheme.secondary.withOpacity(0.12), - child: SizedBox( - width: MediaQuery.of(context).size.width, - height: 280, - child: state.maybeMap( - authenticated: (value) => Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const SizedBox( - height: 16.0, - ), - Text( - value.userModel.name.toString(), - style: theme.textTheme.displayMedium, - ), - Text( - value.userModel.mobileNumber.toString(), - style: theme.textTheme.labelSmall, - ), - const SizedBox( - height: 16.0, - ), - GestureDetector( - onTap: () { - Navigator.of(context, rootNavigator: true).pop(); - context.router.push(UserQRDetailsRoute()); - }, - child: Container( - height: 155, - width: 155, - alignment: Alignment.center, - decoration: BoxDecoration( - border: Border.all( - width: 2, - color: DigitTheme.instance.colorScheme.secondary, + return Stack(children: [ + SingleChildScrollView( + child: Column(children: [ + Container( + color: theme.colorScheme.secondary.withOpacity(0.12), + child: SizedBox( + width: MediaQuery.of(context).size.width, + child: state.maybeMap( + authenticated: (value) => Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const SizedBox( + height: 16.0, + ), + Text( + value.userModel.name.toString(), + style: theme.textTheme.displayMedium, + ), + Text( + value.userModel.mobileNumber.toString(), + style: theme.textTheme.labelSmall, + ), + const SizedBox( + height: 16.0, + ), + GestureDetector( + onTap: () { + Navigator.of(context, rootNavigator: true).pop(); + context.router.push(UserQRDetailsRoute()); + }, + child: Container( + height: 155, + width: 155, + alignment: Alignment.center, + decoration: BoxDecoration( + border: Border.all( + width: 2, + color: DigitTheme.instance.colorScheme.secondary, + ), + ), + child: QrImageView( + data: context.loggedInUserUuid, + version: QrVersions.auto, + size: 150.0, ), - ), - child: QrImageView( - data: context.loggedInUserUuid, - version: QrVersions.auto, - size: 150.0, ), ), - ), - ], + ], + ), + orElse: () => const Offstage(), ), - orElse: () => const Offstage(), ), ), - ), - DigitIconTile( - title: AppLocalizations.of(context).translate( - i18.common.coreCommonHome, + DigitIconTile( + title: AppLocalizations.of(context).translate( + i18.common.coreCommonHome, + ), + icon: Icons.home, + onPressed: () { + Navigator.of(context, rootNavigator: true).pop(); + context.router.replaceAll([HomeRoute()]); + }, ), - icon: Icons.home, - onPressed: () { - Navigator.of(context, rootNavigator: true).pop(); - context.router.replaceAll([HomeRoute()]); - }, - ), - BlocBuilder( - builder: (context, state) { - if (state is! AppInitialized) return const Offstage(); - - final appConfig = state.appConfiguration; - final languages = state.appConfiguration.languages; - final localizationModulesList = - state.appConfiguration.backendInterface; + BlocBuilder( + builder: (context, state) { + if (state is! AppInitialized) return const Offstage(); - return DigitIconTile( - title: AppLocalizations.of(context).translate( - i18.common.coreCommonlanguage, - ), - icon: Icons.language, - onPressed: () { + final appConfig = state.appConfiguration; + final languages = state.appConfiguration.languages; + final localizationModulesList = + state.appConfiguration.backendInterface; - }, - content: Offstage( - offstage: languages == null, - child: BlocBuilder( - builder: (context, localizationState) { - return localizationModulesList != null - ? Padding( - padding: const EdgeInsets.only(top: 16), - child: DigitRowCard( - onChanged: (value) { - int index = languages.indexWhere( - (ele) => - ele.value.toString() == - value.value.toString(), - ); - context - .read() - .add(LocalizationEvent.onLoadLocalization( - module: localizationModulesList - .interfaces - .where((element) => - element.type == - Modules.localizationModule) - .map((e) => e.name.toString()) - .join(',') - .toString(), - tenantId: - appConfig.tenantId ?? "default", - locale: value.value.toString(), - path: Constants.localizationApiPath, - )); + return DigitIconTile( + title: AppLocalizations.of(context).translate( + i18.common.coreCommonlanguage, + ), + icon: Icons.language, + onPressed: () {}, + content: Offstage( + offstage: languages == null, + child: BlocBuilder( + builder: (context, localizationState) { + return localizationModulesList != null + ? Padding( + padding: const EdgeInsets.only(top: 16), + child: DigitRowCard( + onChanged: (value) { + int index = languages.indexWhere( + (ele) => + ele.value.toString() == + value.value.toString(), + ); + context.read().add( + LocalizationEvent + .onLoadLocalization( + module: localizationModulesList + .interfaces + .where((element) => + element.type == + Modules.localizationModule) + .map((e) => e.name.toString()) + .join(',') + .toString(), + tenantId: + appConfig.tenantId ?? "default", + locale: value.value.toString(), + path: Constants.localizationApiPath, + )); - context.read().add( - OnUpdateLocalizationIndexEvent( - index: index, - code: value.value.toString(), - ), - ); - }, - rowItems: languages!.map((e) { - var index = languages.indexOf(e); + context.read().add( + OnUpdateLocalizationIndexEvent( + index: index, + code: value.value.toString(), + ), + ); + }, + rowItems: languages!.map((e) { + var index = languages.indexOf(e); - return DigitRowCardModel( - label: e.label, - value: e.value, - isSelected: getSelectedLanguage( - state, - index, - ), - ); - }).toList(), - width: (MediaQuery.of(context).size.width * - 0.56 / - languages.length) - - (4 * languages.length), - ), - ) - : const Offstage(); - }, + return DigitRowCardModel( + label: e.label, + value: e.value, + isSelected: getSelectedLanguage( + state, + index, + ), + ); + }).toList(), + width: (MediaQuery.of(context).size.width * + 0.56 / + languages.length) - + (4 * languages.length), + ), + ) + : const Offstage(); + }, + ), ), + ); + }, + ), + BlocBuilder(builder: (ctx, state) { + return DigitIconTile( + title: AppLocalizations.of(context).translate( + i18.common.coreCommonProfile, ), - ); - }, - ), - BlocBuilder(builder: (ctx, state) { - return DigitIconTile( - title: AppLocalizations.of(context).translate( - i18.common.coreCommonProfile, - ), - icon: Icons.person, - onPressed: () async { - final connectivityResult = - await (Connectivity().checkConnectivity()); - final isOnline = - connectivityResult == ConnectivityResult.wifi || - connectivityResult == ConnectivityResult.mobile; + icon: Icons.person, + onPressed: () async { + final connectivityResult = + await (Connectivity().checkConnectivity()); + final isOnline = + connectivityResult == ConnectivityResult.wifi || + connectivityResult == ConnectivityResult.mobile; - if (isOnline) { - if (context.mounted) { - Navigator.of(context, rootNavigator: true).pop(); - context.router.push(ProfileRoute()); - } - } else { - if (context.mounted) { - DigitDialog.show( - context, - options: DigitDialogOptions( - titleText: AppLocalizations.of(context).translate( - i18.common.connectionLabel, - ), - contentText: AppLocalizations.of(context).translate( - i18.common.connectionContent, - ), - primaryAction: DigitDialogActions( - label: AppLocalizations.of(context).translate( - i18.common.coreCommonOk, + if (isOnline) { + if (context.mounted) { + Navigator.of(context, rootNavigator: true).pop(); + context.router.push(ProfileRoute()); + } + } else { + if (context.mounted) { + DigitDialog.show( + context, + options: DigitDialogOptions( + titleText: AppLocalizations.of(context).translate( + i18.common.connectionLabel, + ), + contentText: AppLocalizations.of(context).translate( + i18.common.connectionContent, + ), + primaryAction: DigitDialogActions( + label: AppLocalizations.of(context).translate( + i18.common.coreCommonOk, + ), + action: (ctx) => + Navigator.of(context, rootNavigator: true) + .pop(), ), - action: (ctx) => - Navigator.of(context, rootNavigator: true).pop(), ), - ), - ); + ); + } } - } - }, - ); - }), - if (isDistributor) - DigitIconTile( - title: AppLocalizations.of(context).translate( - i18.common.coreCommonViewDownloadedData, + }, + ); + }), + if (isDistributor) + DigitIconTile( + title: AppLocalizations.of(context).translate( + i18.common.coreCommonViewDownloadedData, + ), + icon: Icons.download, + onPressed: () { + Navigator.of(context, rootNavigator: true).pop(); + context.router.push(const BeneficiariesReportRoute()); + }, ), - icon: Icons.download, + DigitIconTile( + title: AppLocalizations.of(context) + .translate(i18.common.coreCommonLogout), + icon: Icons.logout, onPressed: () { - Navigator.of(context, rootNavigator: true).pop(); - context.router.push(const BeneficiariesReportRoute()); + context.read().add(const BoundaryResetEvent()); + context.read().add(const AuthLogoutEvent()); }, - ), - DigitIconTile( - title: AppLocalizations.of(context) - .translate(i18.common.coreCommonLogout), - icon: Icons.logout, - onPressed: () { - context.read().add(const BoundaryResetEvent()); - context.read().add(const AuthLogoutEvent()); - }, - ), - PoweredByDigit( + ) + ]), + ), + Positioned( + bottom: 20, + left: 0, + right: 0, + child: PoweredByDigit( version: Constants().version, ), - ], - ); + ), + ]); }); } } diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index a657b321c..c2db111d0 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -68,9 +68,10 @@ packages: attendance_management: dependency: "direct main" description: - path: "../../packages/attendance_management" - relative: true - source: path + name: attendance_management + sha256: "8a09814ca11cca736d771be70fb6174303ea0cb3525aa72e7239cbc14b915303" + url: "https://pub.dev" + source: hosted version: "1.0.2+4" audioplayers: dependency: "direct main" @@ -339,9 +340,10 @@ packages: closed_household: dependency: "direct main" description: - path: "../../packages/closed_household" - relative: true - source: path + name: closed_household + sha256: d216dbc8e263c9be576e3747ceee9715a6a96e6056a7a812847fb44589f515e8 + url: "https://pub.dev" + source: hosted version: "1.0.1+1" code_builder: dependency: transitive @@ -362,9 +364,10 @@ packages: complaints: dependency: "direct main" description: - path: "../../packages/complaints" - relative: true - source: path + name: complaints + sha256: "6e38cfdc9dd463b1fbe4c73913f011685453675583225a890370abee5f6a43a9" + url: "https://pub.dev" + source: hosted version: "0.0.1-dev.1" connectivity_plus: dependency: "direct main" @@ -414,14 +417,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" - csslib: - dependency: transitive - description: - name: csslib - sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" - url: "https://pub.dev" - source: hosted - version: "1.0.0" cupertino_icons: dependency: "direct main" description: @@ -504,9 +499,10 @@ packages: digit_components: dependency: "direct main" description: - path: "../../packages/digit_components" - relative: true - source: path + name: digit_components + sha256: "07b585e5d8010639366da72a4a8b215ce9b8790c75b2162b66af3cea57ca35d9" + url: "https://pub.dev" + source: hosted version: "1.0.2+1" digit_data_model: dependency: "direct main" @@ -525,11 +521,10 @@ packages: digit_firebase_services: dependency: "direct main" description: - path: "packages/digit_firebase_services" - ref: checklist-tanishi - resolved-ref: a4fd63e10e76cec82675332689e344e309246e65 - url: "https://github.com/egovernments/health-campaign-field-worker-app" - source: git + name: digit_firebase_services + sha256: ce76521d797e123b6fc95c9dfad7d4a918a93b97f57aecd0e1d517b46190909d + url: "https://pub.dev" + source: hosted version: "0.0.1" digit_location_tracker: dependency: "direct main" @@ -541,9 +536,10 @@ packages: digit_scanner: dependency: "direct main" description: - path: "../../packages/digit_scanner" - relative: true - source: path + name: digit_scanner + sha256: "9862c4885465bb1942e36dc9b42596c201648db9b0f5ffb8ad768e2409fc2742" + url: "https://pub.dev" + source: hosted version: "1.0.3+1" digit_showcase: dependency: "direct main" @@ -553,14 +549,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" - digit_ui_components: - dependency: transitive - description: - name: digit_ui_components - sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae - url: "https://pub.dev" - source: hosted - version: "0.0.1+7" dio: dependency: "direct main" description: @@ -593,14 +581,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.1" - dotted_border: - dependency: transitive - description: - name: dotted_border - sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" - url: "https://pub.dev" - source: hosted - version: "2.1.0" drift: dependency: "direct main" description: @@ -673,46 +653,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" - file_picker: - dependency: transitive - description: - name: file_picker - sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 - url: "https://pub.dev" - source: hosted - version: "8.0.0+1" - file_selector_linux: - dependency: transitive - description: - name: file_selector_linux - sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" - url: "https://pub.dev" - source: hosted - version: "0.9.2+1" - file_selector_macos: - dependency: transitive - description: - name: file_selector_macos - sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 - url: "https://pub.dev" - source: hosted - version: "0.9.4" - file_selector_platform_interface: - dependency: transitive - description: - name: file_selector_platform_interface - sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b - url: "https://pub.dev" - source: hosted - version: "2.6.2" - file_selector_windows: - dependency: transitive - description: - name: file_selector_windows - sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" - url: "https://pub.dev" - source: hosted - version: "0.9.3+2" firebase_core: dependency: transitive description: @@ -819,30 +759,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_dropzone: - dependency: transitive - description: - name: flutter_dropzone - sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 - url: "https://pub.dev" - source: hosted - version: "3.0.7" - flutter_dropzone_platform_interface: - dependency: transitive - description: - name: flutter_dropzone_platform_interface - sha256: b4e2df75364bab2f4c3ca32b87193267d786b6e158c3f345c3a1daeb911d82b9 - url: "https://pub.dev" - source: hosted - version: "2.0.6" - flutter_dropzone_web: - dependency: transitive - description: - name: flutter_dropzone_web - sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 - url: "https://pub.dev" - source: hosted - version: "3.0.13" flutter_focus_watcher: dependency: transitive description: @@ -1016,14 +932,6 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" - flutter_styled_toast: - dependency: transitive - description: - name: flutter_styled_toast - sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 - url: "https://pub.dev" - source: hosted - version: "2.2.1" flutter_svg: dependency: "direct main" description: @@ -1095,54 +1003,6 @@ packages: description: flutter source: sdk version: "0.0.0" - geolocator: - dependency: transitive - description: - name: geolocator - sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 - url: "https://pub.dev" - source: hosted - version: "10.1.1" - geolocator_android: - dependency: transitive - description: - name: geolocator_android - sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" - url: "https://pub.dev" - source: hosted - version: "4.3.1" - geolocator_apple: - dependency: transitive - description: - name: geolocator_apple - sha256: bc2aca02423ad429cb0556121f56e60360a2b7d694c8570301d06ea0c00732fd - url: "https://pub.dev" - source: hosted - version: "2.3.7" - geolocator_platform_interface: - dependency: transitive - description: - name: geolocator_platform_interface - sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" - url: "https://pub.dev" - source: hosted - version: "4.2.4" - geolocator_web: - dependency: transitive - description: - name: geolocator_web - sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" - url: "https://pub.dev" - source: hosted - version: "2.2.1" - geolocator_windows: - dependency: transitive - description: - name: geolocator_windows - sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" - url: "https://pub.dev" - source: hosted - version: "0.2.3" glob: dependency: transitive description: @@ -1231,14 +1091,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.3.1" - html: - dependency: transitive - description: - name: html - sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" - url: "https://pub.dev" - source: hosted - version: "0.15.4" http: dependency: transitive description: @@ -1271,70 +1123,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.2.0" - image_picker: - dependency: transitive - description: - name: image_picker - sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" - url: "https://pub.dev" - source: hosted - version: "1.0.8" - image_picker_android: - dependency: transitive - description: - name: image_picker_android - sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" - url: "https://pub.dev" - source: hosted - version: "0.8.9+6" - image_picker_for_web: - dependency: transitive - description: - name: image_picker_for_web - sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 - url: "https://pub.dev" - source: hosted - version: "3.0.2" - image_picker_ios: - dependency: transitive - description: - name: image_picker_ios - sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 - url: "https://pub.dev" - source: hosted - version: "0.8.9+1" - image_picker_linux: - dependency: transitive - description: - name: image_picker_linux - sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" - url: "https://pub.dev" - source: hosted - version: "0.2.1+1" - image_picker_macos: - dependency: transitive - description: - name: image_picker_macos - sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" - url: "https://pub.dev" - source: hosted - version: "0.2.1+1" - image_picker_platform_interface: - dependency: transitive - description: - name: image_picker_platform_interface - sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b - url: "https://pub.dev" - source: hosted - version: "2.9.3" - image_picker_windows: - dependency: transitive - description: - name: image_picker_windows - sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" - url: "https://pub.dev" - source: hosted - version: "0.2.1+1" integration_test: dependency: "direct dev" description: flutter @@ -1572,14 +1360,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" - path_drawing: - dependency: transitive - description: - name: path_drawing - sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 - url: "https://pub.dev" - source: hosted - version: "1.0.1" path_parsing: dependency: transitive description: @@ -2158,22 +1938,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" - universal_html: - dependency: transitive - description: - name: universal_html - sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" - url: "https://pub.dev" - source: hosted - version: "2.2.4" - universal_io: - dependency: transitive - description: - name: universal_io - sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" - url: "https://pub.dev" - source: hosted - version: "2.2.2" upower: dependency: transitive description: @@ -2286,14 +2050,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - visibility_detector: - dependency: transitive - description: - name: visibility_detector - sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 - url: "https://pub.dev" - source: hosted - version: "0.4.0+2" vm_service: dependency: transitive description: @@ -2399,5 +2155,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <=3.9.0" + dart: ">=3.2.0 <3.9.0" flutter: ">=3.16.0" diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index 526b55b3c..589ecfd8f 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -324,9 +324,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -363,9 +365,10 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path + name: digit_data_model + sha256: "0e5a1f8c5f0548e573af9c0279942f2dbc332042865614e0b89fe5952002ef1f" + url: "https://pub.dev" + source: hosted version: "1.0.4" digit_ui_components: dependency: "direct main" diff --git a/packages/closed_household/pubspec.lock b/packages/closed_household/pubspec.lock index 17a795bf9..4ce4d5380 100644 --- a/packages/closed_household/pubspec.lock +++ b/packages/closed_household/pubspec.lock @@ -388,9 +388,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -427,9 +429,10 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path + name: digit_data_model + sha256: "0e5a1f8c5f0548e573af9c0279942f2dbc332042865614e0b89fe5952002ef1f" + url: "https://pub.dev" + source: hosted version: "1.0.4" digit_scanner: dependency: "direct main" @@ -726,14 +729,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.1" - group_radio_button: - dependency: transitive - description: - name: group_radio_button - sha256: "204de8d16b224be7fc72dade0c3afd410ff5a34417d89f74f0fd8be7a8c2b4d6" - url: "https://pub.dev" - source: hosted - version: "1.3.0" gs1_barcode_parser: dependency: "direct main" description: @@ -1153,10 +1148,11 @@ packages: registration_delivery: dependency: "direct main" description: - path: "../registration_delivery" - relative: true - source: path - version: "1.0.4-dev.1" + name: registration_delivery + sha256: b7074bf7115e375b9df2ad2937891139fea163024a35958ff177af137574c047 + url: "https://pub.dev" + source: hosted + version: "1.0.3+3" remove_emoji_input_formatter: dependency: transitive description: @@ -1306,14 +1302,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" - survey_form: - dependency: transitive - description: - name: survey_form - sha256: b793c3356cbb1b659af2298bc7d34b2a04307331ee958d9fb2e1a0adf89479f3 - url: "https://pub.dev" - source: hosted - version: "0.0.1-dev.1" synchronized: dependency: transitive description: diff --git a/packages/complaints/pubspec.lock b/packages/complaints/pubspec.lock index 98d51ef4f..07d806930 100644 --- a/packages/complaints/pubspec.lock +++ b/packages/complaints/pubspec.lock @@ -236,9 +236,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -267,9 +269,10 @@ packages: digit_components: dependency: "direct main" description: - path: "../digit_components" - relative: true - source: path + name: digit_components + sha256: "07b585e5d8010639366da72a4a8b215ce9b8790c75b2162b66af3cea57ca35d9" + url: "https://pub.dev" + source: hosted version: "1.0.2+1" digit_data_model: dependency: "direct main" @@ -1211,5 +1214,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <4.0.0" + dart: ">=3.2.0 <3.9.0" flutter: ">=3.16.0" diff --git a/packages/digit_components/pubspec.lock b/packages/digit_components/pubspec.lock index e9d52e3a2..7c84c45c4 100644 --- a/packages/digit_components/pubspec.lock +++ b/packages/digit_components/pubspec.lock @@ -17,14 +17,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.2.0" - ansicolor: - dependency: transitive - description: - name: ansicolor - sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" - url: "https://pub.dev" - source: hosted - version: "2.0.3" archive: dependency: transitive description: @@ -209,21 +201,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_mappable: - dependency: transitive - description: - name: dart_mappable - sha256: "47269caf2060533c29b823ff7fa9706502355ffcb61e7f2a374e3a0fb2f2c3f0" - url: "https://pub.dev" - source: hosted - version: "4.2.2" - dart_mappable_builder: - dependency: "direct overridden" - description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.0" dart_style: dependency: transitive description: @@ -932,14 +909,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" - type_plus: - dependency: transitive - description: - name: type_plus - sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 - url: "https://pub.dev" - source: hosted - version: "2.1.1" typed_data: dependency: transitive description: diff --git a/packages/digit_data_model/pubspec.lock b/packages/digit_data_model/pubspec.lock index c03730aeb..0887d9b81 100644 --- a/packages/digit_data_model/pubspec.lock +++ b/packages/digit_data_model/pubspec.lock @@ -33,14 +33,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.2" - archive: - dependency: transitive - description: - name: archive - sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d - url: "https://pub.dev" - source: hosted - version: "3.6.1" args: dependency: transitive description: @@ -57,70 +49,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.11.0" - audioplayers: - dependency: transitive - description: - name: audioplayers - sha256: c05c6147124cd63e725e861335a8b4d57300b80e6e92cea7c145c739223bbaef - url: "https://pub.dev" - source: hosted - version: "5.2.1" - audioplayers_android: - dependency: transitive - description: - name: audioplayers_android - sha256: b00e1a0e11365d88576320ec2d8c192bc21f1afb6c0e5995d1c57ae63156acb5 - url: "https://pub.dev" - source: hosted - version: "4.0.3" - audioplayers_darwin: - dependency: transitive - description: - name: audioplayers_darwin - sha256: "3034e99a6df8d101da0f5082dcca0a2a99db62ab1d4ddb3277bed3f6f81afe08" - url: "https://pub.dev" - source: hosted - version: "5.0.2" - audioplayers_linux: - dependency: transitive - description: - name: audioplayers_linux - sha256: "60787e73fefc4d2e0b9c02c69885402177e818e4e27ef087074cf27c02246c9e" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - audioplayers_platform_interface: - dependency: transitive - description: - name: audioplayers_platform_interface - sha256: "365c547f1bb9e77d94dd1687903a668d8f7ac3409e48e6e6a3668a1ac2982adb" - url: "https://pub.dev" - source: hosted - version: "6.1.0" - audioplayers_web: - dependency: transitive - description: - name: audioplayers_web - sha256: "22cd0173e54d92bd9b2c80b1204eb1eb159ece87475ab58c9788a70ec43c2a62" - url: "https://pub.dev" - source: hosted - version: "4.1.0" - audioplayers_windows: - dependency: transitive - description: - name: audioplayers_windows - sha256: "9536812c9103563644ada2ef45ae523806b0745f7a78e89d1b5fb1951de90e1a" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - auto_route: - dependency: transitive - description: - name: auto_route - sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 - url: "https://pub.dev" - source: hosted - version: "7.9.2" bloc: dependency: transitive description: @@ -209,46 +137,6 @@ packages: url: "https://pub.dev" source: hosted version: "8.9.2" - camera: - dependency: transitive - description: - name: camera - sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" - url: "https://pub.dev" - source: hosted - version: "0.10.5+9" - camera_android: - dependency: transitive - description: - name: camera_android - sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 - url: "https://pub.dev" - source: hosted - version: "0.10.9+2" - camera_avfoundation: - dependency: transitive - description: - name: camera_avfoundation - sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" - url: "https://pub.dev" - source: hosted - version: "0.9.13+10" - camera_platform_interface: - dependency: transitive - description: - name: camera_platform_interface - sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 - url: "https://pub.dev" - source: hosted - version: "2.8.0" - camera_web: - dependency: transitive - description: - name: camera_web - sha256: b9235ec0a2ce949daec546f1f3d86f05c3921ed31c7d9ab6b7c03214d152fc2d - url: "https://pub.dev" - source: hosted - version: "0.3.4" characters: dependency: transitive description: @@ -321,14 +209,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.0" - cross_file: - dependency: transitive - description: - name: cross_file - sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e - url: "https://pub.dev" - source: hosted - version: "0.3.3+8" crypto: dependency: transitive description: @@ -345,14 +225,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" - cupertino_icons: - dependency: transitive - description: - name: cupertino_icons - sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 - url: "https://pub.dev" - source: hosted - version: "1.0.8" dart_code_metrics: dependency: "direct dev" description: @@ -380,9 +252,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -416,30 +290,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.1" - digit_components: - dependency: transitive - description: - name: digit_components - sha256: "07b585e5d8010639366da72a4a8b215ce9b8790c75b2162b66af3cea57ca35d9" - url: "https://pub.dev" - source: hosted - version: "1.0.2+1" - digit_scanner: - dependency: transitive - description: - name: digit_scanner - sha256: "9862c4885465bb1942e36dc9b42596c201648db9b0f5ffb8ad768e2409fc2742" - url: "https://pub.dev" - source: hosted - version: "1.0.3+1" - digit_showcase: - dependency: transitive - description: - name: digit_showcase - sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" - url: "https://pub.dev" - source: hosted - version: "1.0.0" dio: dependency: "direct main" description: @@ -472,14 +322,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.15.0" - easy_stepper: - dependency: transitive - description: - name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" - url: "https://pub.dev" - source: hosted - version: "0.5.2+1" fake_async: dependency: transitive description: @@ -525,62 +367,6 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.5" - flutter_focus_watcher: - dependency: transitive - description: - name: flutter_focus_watcher - sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility: - dependency: transitive - description: - name: flutter_keyboard_visibility - sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" - url: "https://pub.dev" - source: hosted - version: "5.4.1" - flutter_keyboard_visibility_linux: - dependency: transitive - description: - name: flutter_keyboard_visibility_linux - sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_macos: - dependency: transitive - description: - name: flutter_keyboard_visibility_macos - sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_platform_interface: - dependency: transitive - description: - name: flutter_keyboard_visibility_platform_interface - sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_web: - dependency: transitive - description: - name: flutter_keyboard_visibility_web - sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_windows: - dependency: transitive - description: - name: flutter_keyboard_visibility_windows - sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 - url: "https://pub.dev" - source: hosted - version: "1.0.0" flutter_lints: dependency: "direct dev" description: @@ -589,64 +375,11 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.2" - flutter_plugin_android_lifecycle: - dependency: transitive - description: - name: flutter_plugin_android_lifecycle - sha256: "8cf40eebf5dec866a6d1956ad7b4f7016e6c0cc69847ab946833b7d43743809f" - url: "https://pub.dev" - source: hosted - version: "2.0.19" - flutter_spinkit: - dependency: transitive - description: - name: flutter_spinkit - sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 - url: "https://pub.dev" - source: hosted - version: "5.2.1" - flutter_svg: - dependency: transitive - description: - name: flutter_svg - sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c - url: "https://pub.dev" - source: hosted - version: "2.0.9" flutter_test: dependency: "direct dev" description: flutter source: sdk version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" - flutter_web_plugins: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - fluttertoast: - dependency: transitive - description: - name: fluttertoast - sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" - url: "https://pub.dev" - source: hosted - version: "8.2.5" - formula_parser: - dependency: transitive - description: - name: formula_parser - sha256: af9e9ae2961ec1dab54c5de97d9a6bef0593ddb998720e3785bd91ef05353359 - url: "https://pub.dev" - source: hosted - version: "2.0.1" freezed: dependency: "direct dev" description: @@ -679,30 +412,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.2" - google_fonts: - dependency: transitive - description: - name: google_fonts - sha256: "6b6f10f0ce3c42f6552d1c70d2c28d764cf22bb487f50f66cca31dcd5194f4d6" - url: "https://pub.dev" - source: hosted - version: "4.0.4" - google_mlkit_barcode_scanning: - dependency: transitive - description: - name: google_mlkit_barcode_scanning - sha256: "965183a8cd5cef8477ceea5dbdf29c34a739cf0cfbf1bdad54cd3f9f1807afe5" - url: "https://pub.dev" - source: hosted - version: "0.10.0" - google_mlkit_commons: - dependency: transitive - description: - name: google_mlkit_commons - sha256: "046586b381cdd139f7f6a05ad6998f7e339d061bd70158249907358394b5f496" - url: "https://pub.dev" - source: hosted - version: "0.6.1" graphs: dependency: transitive description: @@ -711,30 +420,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.1" - group_radio_button: - dependency: transitive - description: - name: group_radio_button - sha256: "204de8d16b224be7fc72dade0c3afd410ff5a34417d89f74f0fd8be7a8c2b4d6" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - gs1_barcode_parser: - dependency: transitive - description: - name: gs1_barcode_parser - sha256: ff171bc40038de3f7178fbc32eaf9eebc3d35a3c4c00bb0281fe4a976d853a42 - url: "https://pub.dev" - source: hosted - version: "1.1.0" - horizontal_data_table: - dependency: transitive - description: - name: horizontal_data_table - sha256: c8ab5256bbced698a729f3e0ff2cb0e8e97416cdbb082860370eaf883badf722 - url: "https://pub.dev" - source: hosted - version: "4.3.1" html: dependency: transitive description: @@ -767,14 +452,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" - intl: - dependency: transitive - description: - name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" - url: "https://pub.dev" - source: hosted - version: "0.18.1" io: dependency: transitive description: @@ -839,30 +516,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.0" - location: - dependency: transitive - description: - name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" - url: "https://pub.dev" - source: hosted - version: "5.0.3" - location_platform_interface: - dependency: transitive - description: - name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" - url: "https://pub.dev" - source: hosted - version: "3.1.2" - location_web: - dependency: transitive - description: - name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b - url: "https://pub.dev" - source: hosted - version: "4.2.0" logging: dependency: transitive description: @@ -871,14 +524,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" - lottie: - dependency: transitive - description: - name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 - url: "https://pub.dev" - source: hosted - version: "2.7.0" matcher: dependency: transitive description: @@ -935,14 +580,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.2" - overlay_builder: - dependency: transitive - description: - name: overlay_builder - sha256: "58b97bc5f67a2e2bb7006dd88e697ac757dfffc9dbd1e7dfc1917fb510a4b5c8" - url: "https://pub.dev" - source: hosted - version: "1.1.0" package_config: dependency: transitive description: @@ -951,22 +588,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - package_info_plus: - dependency: transitive - description: - name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" - url: "https://pub.dev" - source: hosted - version: "5.0.1" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" - url: "https://pub.dev" - source: hosted - version: "2.0.1" path: dependency: "direct main" description: @@ -975,14 +596,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" - path_parsing: - dependency: transitive - description: - name: path_parsing - sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf - url: "https://pub.dev" - source: hosted - version: "1.0.1" path_provider: dependency: "direct main" description: @@ -1055,22 +668,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - pluto_grid: - dependency: transitive - description: - name: pluto_grid - sha256: e77c34a33dd9d74abbe20ba1df96474dded150dd042c7f7495be1bc2c26bd37f - url: "https://pub.dev" - source: hosted - version: "7.0.2" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" pool: dependency: transitive description: @@ -1119,22 +716,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.3" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 - url: "https://pub.dev" - source: hosted - version: "0.8.1" - reactive_forms: - dependency: transitive - description: - name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" - url: "https://pub.dev" - source: hosted - version: "14.3.0" recase: dependency: "direct main" description: @@ -1143,29 +724,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" - registration_delivery: - dependency: "direct overridden" - description: - path: "../registration_delivery" - relative: true - source: path - version: "1.0.4-dev.1" - remove_emoji_input_formatter: - dependency: transitive - description: - name: remove_emoji_input_formatter - sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" - url: "https://pub.dev" - source: hosted - version: "0.0.1+1" - rxdart: - dependency: transitive - description: - name: rxdart - sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" - url: "https://pub.dev" - source: hosted - version: "0.27.7" shelf: dependency: transitive description: @@ -1299,22 +857,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" - survey_form: - dependency: transitive - description: - name: survey_form - sha256: b793c3356cbb1b659af2298bc7d34b2a04307331ee958d9fb2e1a0adf89479f3 - url: "https://pub.dev" - source: hosted - version: "0.0.1-dev.1" - synchronized: - dependency: transitive - description: - name: synchronized - sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" term_glyph: dependency: transitive description: @@ -1387,30 +929,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.7" - vector_graphics: - dependency: transitive - description: - name: vector_graphics - sha256: "4ac59808bbfca6da38c99f415ff2d3a5d7ca0a6b4809c71d9cf30fba5daf9752" - url: "https://pub.dev" - source: hosted - version: "1.1.10+1" - vector_graphics_codec: - dependency: transitive - description: - name: vector_graphics_codec - sha256: f3247e7ab0ec77dc759263e68394990edc608fb2b480b80db8aa86ed09279e33 - url: "https://pub.dev" - source: hosted - version: "1.1.10+1" - vector_graphics_compiler: - dependency: transitive - description: - name: vector_graphics_compiler - sha256: "18489bdd8850de3dd7ca8a34e0c446f719ec63e2bab2e7a8cc66a9028dd76c5a" - url: "https://pub.dev" - source: hosted - version: "1.1.10+1" vector_math: dependency: transitive description: @@ -1500,5 +1018,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" + dart: ">=3.2.0 <4.0.0" flutter: ">=3.16.0" diff --git a/packages/digit_dss/pubspec.lock b/packages/digit_dss/pubspec.lock index cedd55147..d252cb0b6 100644 --- a/packages/digit_dss/pubspec.lock +++ b/packages/digit_dss/pubspec.lock @@ -284,9 +284,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -339,9 +341,10 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path + name: digit_data_model + sha256: "0e5a1f8c5f0548e573af9c0279942f2dbc332042865614e0b89fe5952002ef1f" + url: "https://pub.dev" + source: hosted version: "1.0.4" dio: dependency: "direct main" diff --git a/packages/digit_firebase_services/pubspec.lock b/packages/digit_firebase_services/pubspec.lock index bf1e0562e..cea3a2c32 100644 --- a/packages/digit_firebase_services/pubspec.lock +++ b/packages/digit_firebase_services/pubspec.lock @@ -1,14 +1,6 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 - url: "https://pub.dev" - source: hosted - version: "64.0.0" _flutterfire_internals: dependency: transitive description: @@ -17,30 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.25" - analyzer: - dependency: transitive - description: - name: analyzer - sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" - url: "https://pub.dev" - source: hosted - version: "6.2.0" - ansicolor: - dependency: transitive - description: - name: ansicolor - sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" - url: "https://pub.dev" - source: hosted - version: "2.0.3" - args: - dependency: transitive - description: - name: args - sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" - url: "https://pub.dev" - source: hosted - version: "2.5.0" async: dependency: transitive description: @@ -49,14 +17,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.11.0" - bloc: - dependency: transitive - description: - name: bloc - sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e" - url: "https://pub.dev" - source: hosted - version: "8.1.4" boolean_selector: dependency: transitive description: @@ -65,14 +25,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" - build: - dependency: transitive - description: - name: build - sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" - url: "https://pub.dev" - source: hosted - version: "2.4.1" characters: dependency: transitive description: @@ -97,92 +49,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.18.0" - convert: - dependency: transitive - description: - name: convert - sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" - url: "https://pub.dev" - source: hosted - version: "3.1.1" - crypto: - dependency: transitive - description: - name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab - url: "https://pub.dev" - source: hosted - version: "3.0.3" - dart_mappable: - dependency: transitive - description: - name: dart_mappable - sha256: f69a961ae8589724ebb542e588f228ae844c5f78028899cbe2cc718977c1b382 - url: "https://pub.dev" - source: hosted - version: "4.3.0" - dart_mappable_builder: - dependency: "direct overridden" - description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.0" - dart_style: - dependency: transitive - description: - name: dart_style - sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" - url: "https://pub.dev" - source: hosted - version: "2.3.6" - db_viewer: - dependency: transitive - description: - name: db_viewer - sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - digit_data_model: - dependency: "direct overridden" - description: - path: "../digit_data_model" - relative: true - source: path - version: "1.0.4" - dio: - dependency: transitive - description: - name: dio - sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" - url: "https://pub.dev" - source: hosted - version: "5.7.0" - dio_web_adapter: - dependency: transitive - description: - name: dio_web_adapter - sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - drift: - dependency: transitive - description: - name: drift - sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 - url: "https://pub.dev" - source: hosted - version: "2.15.0" - drift_db_viewer: - dependency: transitive - description: - name: drift_db_viewer - sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" fake_async: dependency: transitive description: @@ -191,22 +57,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.1" - ffi: - dependency: transitive - description: - name: ffi - sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - file: - dependency: transitive - description: - name: file - sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 - url: "https://pub.dev" - source: hosted - version: "7.0.1" firebase_core: dependency: "direct main" description: @@ -252,14 +102,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_bloc: - dependency: transitive - description: - name: flutter_bloc - sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a - url: "https://pub.dev" - source: hosted - version: "8.1.6" flutter_lints: dependency: "direct dev" description: @@ -278,46 +120,6 @@ packages: description: flutter source: sdk version: "0.0.0" - freezed_annotation: - dependency: transitive - description: - name: freezed_annotation - sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 - url: "https://pub.dev" - source: hosted - version: "2.4.4" - glob: - dependency: transitive - description: - name: glob - sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - isar: - dependency: transitive - description: - name: isar - sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - isar_flutter_libs: - dependency: transitive - description: - name: isar_flutter_libs - sha256: bc6768cc4b9c61aabff77152e7f33b4b17d2fc93134f7af1c3dd51500fe8d5e8 - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" js: dependency: transitive description: @@ -326,14 +128,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.7" - json_annotation: - dependency: transitive - description: - name: json_annotation - sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" - url: "https://pub.dev" - source: hosted - version: "4.9.0" lints: dependency: transitive description: @@ -342,14 +136,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" - logging: - dependency: transitive - description: - name: logging - sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" - url: "https://pub.dev" - source: hosted - version: "1.2.0" matcher: dependency: transitive description: @@ -374,30 +160,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" - mocktail: - dependency: transitive - description: - name: mocktail - sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8" - url: "https://pub.dev" - source: hosted - version: "1.0.4" - nested: - dependency: transitive - description: - name: nested - sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - package_config: - dependency: transitive - description: - name: package_config - sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" - url: "https://pub.dev" - source: hosted - version: "2.1.0" path: dependency: transitive description: @@ -406,62 +168,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" - path_provider: - dependency: transitive - description: - name: path_provider - sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 - url: "https://pub.dev" - source: hosted - version: "2.1.4" - path_provider_android: - dependency: transitive - description: - name: path_provider_android - sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d - url: "https://pub.dev" - source: hosted - version: "2.2.4" - path_provider_foundation: - dependency: transitive - description: - name: path_provider_foundation - sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - path_provider_linux: - dependency: transitive - description: - name: path_provider_linux - sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 - url: "https://pub.dev" - source: hosted - version: "2.2.1" - path_provider_platform_interface: - dependency: transitive - description: - name: path_provider_platform_interface - sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - path_provider_windows: - dependency: transitive - description: - name: path_provider_windows - sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 - url: "https://pub.dev" - source: hosted - version: "2.3.0" - platform: - dependency: transitive - description: - name: platform - sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" - url: "https://pub.dev" - source: hosted - version: "3.1.6" plugin_platform_interface: dependency: transitive description: @@ -470,43 +176,11 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - provider: - dependency: transitive - description: - name: provider - sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c - url: "https://pub.dev" - source: hosted - version: "6.1.2" - pub_semver: - dependency: transitive - description: - name: pub_semver - sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - recase: - dependency: transitive - description: - name: recase - sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 - url: "https://pub.dev" - source: hosted - version: "4.1.0" sky_engine: dependency: transitive description: flutter source: sdk version: "0.0.99" - source_gen: - dependency: transitive - description: - name: source_gen - sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" - url: "https://pub.dev" - source: hosted - version: "1.5.0" source_span: dependency: transitive description: @@ -515,22 +189,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" - sqlite3: - dependency: transitive - description: - name: sqlite3 - sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" - url: "https://pub.dev" - source: hosted - version: "2.4.0" - sqlite3_flutter_libs: - dependency: transitive - description: - name: sqlite3_flutter_libs - sha256: "7ae52b23366e5295005022e62fa093f64bfe190810223ea0ebf733a4cd140bce" - url: "https://pub.dev" - source: hosted - version: "0.5.26" stack_trace: dependency: transitive description: @@ -571,30 +229,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.1" - type_plus: - dependency: transitive - description: - name: type_plus - sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 - url: "https://pub.dev" - source: hosted - version: "2.1.1" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c - url: "https://pub.dev" - source: hosted - version: "1.3.2" - uuid: - dependency: transitive - description: - name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" - url: "https://pub.dev" - source: hosted - version: "3.0.7" vector_math: dependency: transitive description: @@ -603,14 +237,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - watcher: - dependency: transitive - description: - name: watcher - sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" - url: "https://pub.dev" - source: hosted - version: "1.1.0" web: dependency: transitive description: @@ -619,22 +245,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.3.0" - xdg_directories: - dependency: transitive - description: - name: xdg_directories - sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d - url: "https://pub.dev" - source: hosted - version: "1.0.4" - yaml: - dependency: transitive - description: - name: yaml - sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" - url: "https://pub.dev" - source: hosted - version: "3.1.2" sdks: dart: ">=3.2.0 <4.0.0" - flutter: ">=3.16.0" + flutter: ">=3.3.0" diff --git a/packages/digit_location_tracker/pubspec.lock b/packages/digit_location_tracker/pubspec.lock index ddd73fe05..09c994d99 100644 --- a/packages/digit_location_tracker/pubspec.lock +++ b/packages/digit_location_tracker/pubspec.lock @@ -1,38 +1,6 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 - url: "https://pub.dev" - source: hosted - version: "64.0.0" - analyzer: - dependency: transitive - description: - name: analyzer - sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" - url: "https://pub.dev" - source: hosted - version: "6.2.0" - ansicolor: - dependency: transitive - description: - name: ansicolor - sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" - url: "https://pub.dev" - source: hosted - version: "2.0.3" - args: - dependency: transitive - description: - name: args - sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" - url: "https://pub.dev" - source: hosted - version: "2.5.0" async: dependency: transitive description: @@ -57,14 +25,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" - build: - dependency: transitive - description: - name: build - sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" - url: "https://pub.dev" - source: hosted - version: "2.4.1" characters: dependency: transitive description: @@ -113,21 +73,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.3.0" - dart_mappable_builder: - dependency: "direct overridden" - description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.0" - dart_style: - dependency: transitive - description: - name: dart_style - sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" - url: "https://pub.dev" - source: hosted - version: "2.3.6" db_viewer: dependency: transitive description: @@ -139,9 +84,10 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path + name: digit_data_model + sha256: "0e5a1f8c5f0548e573af9c0279942f2dbc332042865614e0b89fe5952002ef1f" + url: "https://pub.dev" + source: hosted version: "1.0.4" dio: dependency: transitive @@ -191,14 +137,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - file: - dependency: transitive - description: - name: file - sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 - url: "https://pub.dev" - source: hosted - version: "7.0.1" flutter: dependency: "direct main" description: flutter @@ -270,14 +208,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.4.4" - glob: - dependency: transitive - description: - name: glob - sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" - url: "https://pub.dev" - source: hosted - version: "2.1.2" http_parser: dependency: transitive description: @@ -350,14 +280,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.2.0" - logging: - dependency: transitive - description: - name: logging - sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" - url: "https://pub.dev" - source: hosted - version: "1.2.0" matcher: dependency: transitive description: @@ -398,14 +320,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" - package_config: - dependency: transitive - description: - name: package_config - sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" - url: "https://pub.dev" - source: hosted - version: "2.1.0" path: dependency: transitive description: @@ -534,14 +448,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.2" - pub_semver: - dependency: transitive - description: - name: pub_semver - sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" - url: "https://pub.dev" - source: hosted - version: "2.1.4" recase: dependency: transitive description: @@ -555,14 +461,6 @@ packages: description: flutter source: sdk version: "0.0.99" - source_gen: - dependency: transitive - description: - name: source_gen - sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" - url: "https://pub.dev" - source: hosted - version: "1.5.0" source_span: dependency: transitive description: @@ -659,14 +557,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - watcher: - dependency: transitive - description: - name: watcher - sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" - url: "https://pub.dev" - source: hosted - version: "1.1.0" web: dependency: transitive description: @@ -683,14 +573,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" - yaml: - dependency: transitive - description: - name: yaml - sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" - url: "https://pub.dev" - source: hosted - version: "3.1.2" sdks: dart: ">=3.2.0 <4.0.0" flutter: ">=3.16.0" diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index 0d62855ae..a9068cd0c 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -388,11 +388,9 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git + path: "../dart_mappable_builder" + relative: true + source: path version: "4.2.0" dart_style: dependency: transitive @@ -421,9 +419,10 @@ packages: digit_components: dependency: "direct main" description: - path: "../digit_components" - relative: true - source: path + name: digit_components + sha256: "07b585e5d8010639366da72a4a8b215ce9b8790c75b2162b66af3cea57ca35d9" + url: "https://pub.dev" + source: hosted version: "1.0.2+1" digit_data_model: dependency: "direct main" @@ -435,9 +434,10 @@ packages: digit_scanner: dependency: "direct main" description: - path: "../digit_scanner" - relative: true - source: path + name: digit_scanner + sha256: "9862c4885465bb1942e36dc9b42596c201648db9b0f5ffb8ad768e2409fc2742" + url: "https://pub.dev" + source: hosted version: "1.0.3+1" dio: dependency: transitive @@ -702,6 +702,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.1" + group_radio_button: + dependency: transitive + description: + name: group_radio_button + sha256: "204de8d16b224be7fc72dade0c3afd410ff5a34417d89f74f0fd8be7a8c2b4d6" + url: "https://pub.dev" + source: hosted + version: "1.3.0" gs1_barcode_parser: dependency: "direct main" description: @@ -1267,6 +1275,13 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" + survey_form: + dependency: "direct overridden" + description: + path: "../survey_form" + relative: true + source: path + version: "0.0.1-dev.1" synchronized: dependency: transitive description: @@ -1444,5 +1459,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <4.0.0" + dart: ">=3.2.0 <3.9.0" flutter: ">=3.16.0" diff --git a/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart b/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart index 88c7b6847..2babed1e9 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart @@ -192,7 +192,7 @@ class _ReferralReasonChecklistPreviewPageState 'SingleValueList' ? localizations .translate( - 'CORE_COMMON_${e.value.toString().toUpperCase()}', + e.value.toString().toUpperCase(), ) : e.value ?? "", ), diff --git a/packages/survey_form/lib/pages/survey_form_preview.dart b/packages/survey_form/lib/pages/survey_form_preview.dart index aa4ffaa74..fa3959cbc 100644 --- a/packages/survey_form/lib/pages/survey_form_preview.dart +++ b/packages/survey_form/lib/pages/survey_form_preview.dart @@ -215,7 +215,7 @@ class SurveyFormPreviewPageState extends LocalizedState { 'SingleValueList' ? localizations .translate( - 'CORE_COMMON_${e.value.toString().toUpperCase()}', + e.value.toString().toUpperCase(), ) : e.value ?? "", ), diff --git a/packages/survey_form/lib/pages/survey_form_view.dart b/packages/survey_form/lib/pages/survey_form_view.dart index bedbaea6f..fa02949dc 100644 --- a/packages/survey_form/lib/pages/survey_form_view.dart +++ b/packages/survey_form/lib/pages/survey_form_view.dart @@ -379,7 +379,7 @@ class SurveyFormViewPageState extends LocalizedState { textAlign: TextAlign.left, ), ), - ...initialAttributes!.map(( + ...initialAttributes!.where((att) => att.isActive.toString() == 'true').map(( e, ) { int index = (initialAttributes ?? []).indexOf(e); @@ -766,45 +766,13 @@ class SurveyFormViewPageState extends LocalizedState { .toList() : [], itemBuilder: (item) => RadioButtonBuilder( - localizations.translate( - item.trim().toUpperCase(), - ), + localizations.translate( + '${selectedServiceDefinition?.code}.${item.trim()}', + ) ), ); }, ), - BlocBuilder( - builder: (context, state) { - return (controller[index].text == item.values?[1].trim() && - !(isHealthFacilityWorker && - widget.referralClientRefId != null)) - ? Padding( - padding: const EdgeInsets.only( - left: 4.0, - right: 4.0, - bottom: 16, - ), - child: DigitTextField( - maxLength: 1000, - isRequired: true, - controller: additionalController[index], - label: localizations.translate( - '${selectedServiceDefinition?.code}.${item.code}.ADDITIONAL_FIELD', - ), - validator: (value1) { - if (value1 == null || value1 == '') { - return localizations.translate( - i18.common.coreCommonReasonRequired, - ); - } - - return null; - }, - ), - ) - : const SizedBox(); - }, - ), BlocBuilder( builder: (context, state) { final hasError = (item.required == true && diff --git a/packages/survey_form/pubspec.lock b/packages/survey_form/pubspec.lock index b7d22952d..83d341736 100644 --- a/packages/survey_form/pubspec.lock +++ b/packages/survey_form/pubspec.lock @@ -260,10 +260,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.0" + name: dart_mappable_builder + sha256: "04a6e7117382f8a8689b3e363bee6c3de8c9ea4332e664148fe01bd576eb1126" + url: "https://pub.dev" + source: hosted + version: "4.3.0" dart_style: dependency: transitive description: From 553f6c73025e24a60c234ec9a4ce36c65eeb22f8 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Mon, 18 Nov 2024 11:43:15 +0530 Subject: [PATCH 156/241] merge conflicts --- .../beneficiary/beneficiary_checklist.dart | 1 - .../lib/pages/search_beneficiary.dart | 2 +- packages/registration_delivery/pubspec.lock | 367 +++++++++++++++--- packages/registration_delivery/pubspec.yaml | 1 - 4 files changed, 320 insertions(+), 51 deletions(-) diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart index e9c8c80f3..3b7b19ea6 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart @@ -427,7 +427,6 @@ class _BeneficiaryChecklistPageState return Align( alignment: Alignment.topLeft, child: SelectionCard( - // label: e, title: localizations.translate( '${selectedServiceDefinition?.code}.${e.code}', ), diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index 12dade78e..cb2a671a7 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -324,7 +324,7 @@ class _SearchBeneficiaryPageState ?.lastOrNull : null, addressModel: i.headOfHousehold! - .address!.lastOrNull, + .address!.lastOrNull!, headOfHousehold: i.headOfHousehold), ), diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 5a691e594..b8f7a3c49 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -361,22 +361,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_code_metrics: - dependency: "direct dev" - description: - name: dart_code_metrics - sha256: "3dede3f7abc077a4181ec7445448a289a9ce08e2981e6a4d49a3fb5099d47e1f" - url: "https://pub.dev" - source: hosted - version: "5.7.6" - dart_code_metrics_presets: - dependency: transitive - description: - name: dart_code_metrics_presets - sha256: b71eadf02a3787ebd5c887623f83f6fdc204d45c75a081bd636c4104b3fd8b73 - url: "https://pub.dev" - source: hosted - version: "1.8.0" dart_mappable: dependency: "direct main" description: @@ -388,9 +372,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -417,7 +403,7 @@ packages: source: hosted version: "0.4.1" digit_components: - dependency: "direct main" + dependency: transitive description: name: digit_components sha256: "07b585e5d8010639366da72a4a8b215ce9b8790c75b2162b66af3cea57ca35d9" @@ -471,6 +457,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" drift: dependency: "direct main" description: @@ -527,6 +521,46 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 + url: "https://pub.dev" + source: hosted + version: "8.0.0+1" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + url: "https://pub.dev" + source: hosted + version: "0.9.2+1" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 + url: "https://pub.dev" + source: hosted + version: "0.9.4" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" fixnum: dependency: transitive description: @@ -548,6 +582,30 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.6" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" flutter_focus_watcher: dependency: transitive description: @@ -612,6 +670,11 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.2" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -628,14 +691,22 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" flutter_svg: dependency: "direct main" description: name: flutter_svg - sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c + sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" url: "https://pub.dev" source: hosted - version: "2.0.9" + version: "2.0.10+1" flutter_test: dependency: "direct dev" description: flutter @@ -694,6 +765,54 @@ packages: url: "https://pub.dev" source: hosted version: "3.2.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + url: "https://pub.dev" + source: hosted + version: "4.3.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" + url: "https://pub.dev" + source: hosted + version: "2.3.8+1" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -706,10 +825,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: "6b6f10f0ce3c42f6552d1c70d2c28d764cf22bb487f50f66cca31dcd5194f4d6" + sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" url: "https://pub.dev" source: hosted - version: "4.0.4" + version: "4.0.5" google_mlkit_barcode_scanning: dependency: transitive description: @@ -734,6 +853,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.1" + group_radio_button: + dependency: transitive + description: + name: group_radio_button + sha256: "204de8d16b224be7fc72dade0c3afd410ff5a34417d89f74f0fd8be7a8c2b4d6" + url: "https://pub.dev" + source: hosted + version: "1.3.0" gs1_barcode_parser: dependency: "direct main" description: @@ -762,10 +889,10 @@ packages: dependency: transitive description: name: http - sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba url: "https://pub.dev" source: hosted - version: "0.13.6" + version: "1.2.0" http_multi_server: dependency: transitive description: @@ -782,6 +909,70 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" + url: "https://pub.dev" + source: hosted + version: "1.0.8" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" + url: "https://pub.dev" + source: hosted + version: "0.8.9+6" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 + url: "https://pub.dev" + source: hosted + version: "0.8.9+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b + url: "https://pub.dev" + source: hosted + version: "2.9.3" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" intl: dependency: "direct main" description: @@ -982,6 +1173,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_parsing: dependency: transitive description: @@ -1086,14 +1285,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.1" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" provider: dependency: transitive description: @@ -1110,14 +1301,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - pub_updater: - dependency: transitive - description: - name: pub_updater - sha256: "05ae70703e06f7fdeb05f7f02dd680b8aad810e87c756a618f33e1794635115c" - url: "https://pub.dev" - source: hosted - version: "0.3.0" pubspec_parse: dependency: transitive description: @@ -1370,6 +1553,86 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + url_launcher: + dependency: transitive + description: + name: url_launcher + sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" + url: "https://pub.dev" + source: hosted + version: "6.3.0" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "17cd5e205ea615e2c6ea7a77323a11712dffa0720a8a90540db57a01347f9ad9" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" + url: "https://pub.dev" + source: hosted + version: "6.2.4" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 + url: "https://pub.dev" + source: hosted + version: "3.1.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + url: "https://pub.dev" + source: hosted + version: "2.2.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" + url: "https://pub.dev" + source: hosted + version: "3.1.2" uuid: dependency: "direct main" description: @@ -1382,26 +1645,26 @@ packages: dependency: transitive description: name: vector_graphics - sha256: "4ac59808bbfca6da38c99f415ff2d3a5d7ca0a6b4809c71d9cf30fba5daf9752" + sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: f3247e7ab0ec77dc759263e68394990edc608fb2b480b80db8aa86ed09279e33 + sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "18489bdd8850de3dd7ca8a34e0c446f719ec63e2bab2e7a8cc66a9028dd76c5a" + sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_math: dependency: transitive description: @@ -1410,6 +1673,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" vm_service: dependency: transitive description: diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index 07e213f78..3268f2531 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -46,7 +46,6 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^3.0.1 - dart_code_metrics: ^5.7.6 freezed: ^2.1.0+1 json_serializable: ^6.4.0 drift_dev: ^2.14.1 From a7421d9c339b71fe2454a383e7f8ce452589fd07 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Mon, 18 Nov 2024 12:02:21 +0530 Subject: [PATCH 157/241] Solved the submitted checklist localization issue --- .../lib/widgets/sidebar/side_bar.dart | 381 +++++++++--------- .../lib/pages/survey_form_preview.dart | 2 +- 2 files changed, 188 insertions(+), 195 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/widgets/sidebar/side_bar.dart b/apps/health_campaign_field_worker_app/lib/widgets/sidebar/side_bar.dart index 1fc7fc0ac..f51d997b1 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/sidebar/side_bar.dart +++ b/apps/health_campaign_field_worker_app/lib/widgets/sidebar/side_bar.dart @@ -33,222 +33,215 @@ class SideBar extends StatelessWidget { : false; return BlocBuilder(builder: (context, state) { - return Stack(children: [ - SingleChildScrollView( - child: Column(children: [ - Container( - color: theme.colorScheme.secondary.withOpacity(0.12), - child: SizedBox( - width: MediaQuery.of(context).size.width, - child: state.maybeMap( - authenticated: (value) => Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const SizedBox( - height: 16.0, - ), - Text( - value.userModel.name.toString(), - style: theme.textTheme.displayMedium, - ), - Text( - value.userModel.mobileNumber.toString(), - style: theme.textTheme.labelSmall, - ), - const SizedBox( - height: 16.0, - ), - GestureDetector( - onTap: () { - Navigator.of(context, rootNavigator: true).pop(); - context.router.push(UserQRDetailsRoute()); - }, - child: Container( - height: 155, - width: 155, - alignment: Alignment.center, - decoration: BoxDecoration( - border: Border.all( - width: 2, - color: DigitTheme.instance.colorScheme.secondary, - ), - ), - child: QrImageView( - data: context.loggedInUserUuid, - version: QrVersions.auto, - size: 150.0, + return SingleChildScrollView( + child: Column(children: [ + Container( + color: theme.colorScheme.secondary.withOpacity(0.12), + child: SizedBox( + width: MediaQuery.of(context).size.width, + child: state.maybeMap( + authenticated: (value) => Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const SizedBox( + height: 16.0, + ), + Text( + value.userModel.name.toString(), + style: theme.textTheme.displayMedium, + ), + Text( + value.userModel.mobileNumber.toString(), + style: theme.textTheme.labelSmall, + ), + const SizedBox( + height: 16.0, + ), + GestureDetector( + onTap: () { + Navigator.of(context, rootNavigator: true).pop(); + context.router.push(UserQRDetailsRoute()); + }, + child: Container( + height: 155, + width: 155, + alignment: Alignment.center, + decoration: BoxDecoration( + border: Border.all( + width: 2, + color: DigitTheme.instance.colorScheme.secondary, ), ), + child: QrImageView( + data: context.loggedInUserUuid, + version: QrVersions.auto, + size: 150.0, + ), ), - ], - ), - orElse: () => const Offstage(), + ), + ], ), + orElse: () => const Offstage(), ), ), - DigitIconTile( - title: AppLocalizations.of(context).translate( - i18.common.coreCommonHome, - ), - icon: Icons.home, - onPressed: () { - Navigator.of(context, rootNavigator: true).pop(); - context.router.replaceAll([HomeRoute()]); - }, + ), + DigitIconTile( + title: AppLocalizations.of(context).translate( + i18.common.coreCommonHome, ), - BlocBuilder( - builder: (context, state) { - if (state is! AppInitialized) return const Offstage(); + icon: Icons.home, + onPressed: () { + Navigator.of(context, rootNavigator: true).pop(); + context.router.replaceAll([HomeRoute()]); + }, + ), + BlocBuilder( + builder: (context, state) { + if (state is! AppInitialized) return const Offstage(); - final appConfig = state.appConfiguration; - final languages = state.appConfiguration.languages; - final localizationModulesList = - state.appConfiguration.backendInterface; + final appConfig = state.appConfiguration; + final languages = state.appConfiguration.languages; + final localizationModulesList = + state.appConfiguration.backendInterface; - return DigitIconTile( - title: AppLocalizations.of(context).translate( - i18.common.coreCommonlanguage, - ), - icon: Icons.language, - onPressed: () {}, - content: Offstage( - offstage: languages == null, - child: BlocBuilder( - builder: (context, localizationState) { - return localizationModulesList != null - ? Padding( - padding: const EdgeInsets.only(top: 16), - child: DigitRowCard( - onChanged: (value) { - int index = languages.indexWhere( - (ele) => - ele.value.toString() == - value.value.toString(), - ); - context.read().add( - LocalizationEvent - .onLoadLocalization( - module: localizationModulesList - .interfaces - .where((element) => - element.type == - Modules.localizationModule) - .map((e) => e.name.toString()) - .join(',') - .toString(), - tenantId: - appConfig.tenantId ?? "default", - locale: value.value.toString(), - path: Constants.localizationApiPath, - )); + return DigitIconTile( + title: AppLocalizations.of(context).translate( + i18.common.coreCommonlanguage, + ), + icon: Icons.language, + onPressed: () {}, + content: Offstage( + offstage: languages == null, + child: BlocBuilder( + builder: (context, localizationState) { + return localizationModulesList != null + ? Padding( + padding: const EdgeInsets.only(top: 16), + child: DigitRowCard( + onChanged: (value) { + int index = languages.indexWhere( + (ele) => + ele.value.toString() == + value.value.toString(), + ); + context.read().add( + LocalizationEvent + .onLoadLocalization( + module: localizationModulesList + .interfaces + .where((element) => + element.type == + Modules.localizationModule) + .map((e) => e.name.toString()) + .join(',') + .toString(), + tenantId: + appConfig.tenantId ?? "default", + locale: value.value.toString(), + path: Constants.localizationApiPath, + )); - context.read().add( - OnUpdateLocalizationIndexEvent( - index: index, - code: value.value.toString(), - ), - ); - }, - rowItems: languages!.map((e) { - var index = languages.indexOf(e); + context.read().add( + OnUpdateLocalizationIndexEvent( + index: index, + code: value.value.toString(), + ), + ); + }, + rowItems: languages!.map((e) { + var index = languages.indexOf(e); - return DigitRowCardModel( - label: e.label, - value: e.value, - isSelected: getSelectedLanguage( - state, - index, - ), - ); - }).toList(), - width: (MediaQuery.of(context).size.width * - 0.56 / - languages.length) - - (4 * languages.length), - ), - ) - : const Offstage(); - }, - ), + return DigitRowCardModel( + label: e.label, + value: e.value, + isSelected: getSelectedLanguage( + state, + index, + ), + ); + }).toList(), + width: (MediaQuery.of(context).size.width * + 0.56 / + languages.length) - + (4 * languages.length), + ), + ) + : const Offstage(); + }, ), - ); - }, - ), - BlocBuilder(builder: (ctx, state) { - return DigitIconTile( - title: AppLocalizations.of(context).translate( - i18.common.coreCommonProfile, ), - icon: Icons.person, - onPressed: () async { - final connectivityResult = - await (Connectivity().checkConnectivity()); - final isOnline = - connectivityResult == ConnectivityResult.wifi || - connectivityResult == ConnectivityResult.mobile; + ); + }, + ), + BlocBuilder(builder: (ctx, state) { + return DigitIconTile( + title: AppLocalizations.of(context).translate( + i18.common.coreCommonProfile, + ), + icon: Icons.person, + onPressed: () async { + final connectivityResult = + await (Connectivity().checkConnectivity()); + final isOnline = + connectivityResult == ConnectivityResult.wifi || + connectivityResult == ConnectivityResult.mobile; - if (isOnline) { - if (context.mounted) { - Navigator.of(context, rootNavigator: true).pop(); - context.router.push(ProfileRoute()); - } - } else { - if (context.mounted) { - DigitDialog.show( - context, - options: DigitDialogOptions( - titleText: AppLocalizations.of(context).translate( - i18.common.connectionLabel, - ), - contentText: AppLocalizations.of(context).translate( - i18.common.connectionContent, - ), - primaryAction: DigitDialogActions( - label: AppLocalizations.of(context).translate( - i18.common.coreCommonOk, - ), - action: (ctx) => - Navigator.of(context, rootNavigator: true) - .pop(), + if (isOnline) { + if (context.mounted) { + Navigator.of(context, rootNavigator: true).pop(); + context.router.push(ProfileRoute()); + } + } else { + if (context.mounted) { + DigitDialog.show( + context, + options: DigitDialogOptions( + titleText: AppLocalizations.of(context).translate( + i18.common.connectionLabel, + ), + contentText: AppLocalizations.of(context).translate( + i18.common.connectionContent, + ), + primaryAction: DigitDialogActions( + label: AppLocalizations.of(context).translate( + i18.common.coreCommonOk, ), + action: (ctx) => + Navigator.of(context, rootNavigator: true) + .pop(), ), - ); - } + ), + ); } - }, - ); - }), - if (isDistributor) - DigitIconTile( - title: AppLocalizations.of(context).translate( - i18.common.coreCommonViewDownloadedData, - ), - icon: Icons.download, - onPressed: () { - Navigator.of(context, rootNavigator: true).pop(); - context.router.push(const BeneficiariesReportRoute()); - }, - ), + } + }, + ); + }), + if (isDistributor) DigitIconTile( - title: AppLocalizations.of(context) - .translate(i18.common.coreCommonLogout), - icon: Icons.logout, + title: AppLocalizations.of(context).translate( + i18.common.coreCommonViewDownloadedData, + ), + icon: Icons.download, onPressed: () { - context.read().add(const BoundaryResetEvent()); - context.read().add(const AuthLogoutEvent()); + Navigator.of(context, rootNavigator: true).pop(); + context.router.push(const BeneficiariesReportRoute()); }, - ) - ]), - ), - Positioned( - bottom: 20, - left: 0, - right: 0, - child: PoweredByDigit( + ), + DigitIconTile( + title: AppLocalizations.of(context) + .translate(i18.common.coreCommonLogout), + icon: Icons.logout, + onPressed: () { + context.read().add(const BoundaryResetEvent()); + context.read().add(const AuthLogoutEvent()); + }, + ), + PoweredByDigit( version: Constants().version, ), - ), - ]); + ]), + ); }); } } diff --git a/packages/survey_form/lib/pages/survey_form_preview.dart b/packages/survey_form/lib/pages/survey_form_preview.dart index fa3959cbc..fbc0bae7e 100644 --- a/packages/survey_form/lib/pages/survey_form_preview.dart +++ b/packages/survey_form/lib/pages/survey_form_preview.dart @@ -215,7 +215,7 @@ class SurveyFormPreviewPageState extends LocalizedState { 'SingleValueList' ? localizations .translate( - e.value.toString().toUpperCase(), + '${item2?.code ?? ''}.${e.value.toString().toUpperCase()}', ) : e.value ?? "", ), From 173fb983602c1f5a952c2dc3146af73a4e4401f1 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Mon, 18 Nov 2024 16:15:54 +0530 Subject: [PATCH 158/241] updated data_model and survey_form package --- .../pubspec.yaml | 6 +- packages/attendance_management/pubspec.lock | 17 +- packages/attendance_management/pubspec.yaml | 2 +- packages/closed_household/pubspec.lock | 42 +- packages/closed_household/pubspec.yaml | 2 +- packages/complaints/example/pubspec.yaml | 3 - packages/digit_data_model/CHANGELOG.md | 8 +- packages/digit_data_model/pubspec.lock | 566 +----------------- packages/digit_data_model/pubspec.yaml | 3 +- packages/inventory_management/pubspec.lock | 73 +-- packages/inventory_management/pubspec.yaml | 3 +- packages/referral_reconciliation/pubspec.lock | 383 ++++++++++-- packages/referral_reconciliation/pubspec.yaml | 5 +- packages/registration_delivery/pubspec.lock | 383 ++++++++++-- packages/registration_delivery/pubspec.yaml | 5 +- packages/survey_form/CHANGELOG.md | 5 + packages/survey_form/example/lib/main.dart | 56 +- packages/survey_form/example/pubspec.lock | 394 +++++++++++- packages/survey_form/example/pubspec.yaml | 2 - packages/survey_form/pubspec.lock | 21 +- packages/survey_form/pubspec.yaml | 5 +- 21 files changed, 1146 insertions(+), 838 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 062651723..2754e9509 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -69,15 +69,15 @@ dependencies: digit_scanner: ^1.0.3+1 inventory_management: ^1.0.3+4 referral_reconciliation: ^1.0.2+2 - digit_data_model: ^1.0.4 + digit_data_model: ^1.0.5-dev.1 registration_delivery: ^1.0.3+2 disable_battery_optimization: ^1.1.1 digit_dss: ^1.0.1 closed_household: ^1.0.1+1 digit_location_tracker: ^0.0.1-dev.1 permission_handler: ^11.3.1 - survey_form: ^0.0.1-dev.1 - complaints: ^0.0.1-dev.1 + survey_form: ^0.0.1-dev.2 + complaints: ^0.0.1-dev.2 dev_dependencies: flutter_test: diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index 526b55b3c..461317ac1 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -324,9 +324,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -363,10 +365,11 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path - version: "1.0.4" + name: digit_data_model + sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" + url: "https://pub.dev" + source: hosted + version: "1.0.5-dev.1" digit_ui_components: dependency: "direct main" description: diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index e6abcb47b..88b36c969 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -27,7 +27,7 @@ dependencies: path: ^1.8.2 drift_db_viewer: ^2.0.0 auto_route: ^7.8.4 - digit_data_model: ^1.0.3+1 + digit_data_model: ^1.0.5-dev.1 connectivity_plus: ^5.0.2 collection: ^1.16.0 location: ^5.0.0 diff --git a/packages/closed_household/pubspec.lock b/packages/closed_household/pubspec.lock index 17a795bf9..2a3b7b437 100644 --- a/packages/closed_household/pubspec.lock +++ b/packages/closed_household/pubspec.lock @@ -388,9 +388,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -427,10 +429,11 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path - version: "1.0.4" + name: digit_data_model + sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" + url: "https://pub.dev" + source: hosted + version: "1.0.5-dev.1" digit_scanner: dependency: "direct main" description: @@ -726,14 +729,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.1" - group_radio_button: - dependency: transitive - description: - name: group_radio_button - sha256: "204de8d16b224be7fc72dade0c3afd410ff5a34417d89f74f0fd8be7a8c2b4d6" - url: "https://pub.dev" - source: hosted - version: "1.3.0" gs1_barcode_parser: dependency: "direct main" description: @@ -1153,10 +1148,11 @@ packages: registration_delivery: dependency: "direct main" description: - path: "../registration_delivery" - relative: true - source: path - version: "1.0.4-dev.1" + name: registration_delivery + sha256: b7074bf7115e375b9df2ad2937891139fea163024a35958ff177af137574c047 + url: "https://pub.dev" + source: hosted + version: "1.0.3+3" remove_emoji_input_formatter: dependency: transitive description: @@ -1306,14 +1302,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" - survey_form: - dependency: transitive - description: - name: survey_form - sha256: b793c3356cbb1b659af2298bc7d34b2a04307331ee958d9fb2e1a0adf89479f3 - url: "https://pub.dev" - source: hosted - version: "0.0.1-dev.1" synchronized: dependency: transitive description: diff --git a/packages/closed_household/pubspec.yaml b/packages/closed_household/pubspec.yaml index 6dccba824..6bd13fc4c 100644 --- a/packages/closed_household/pubspec.yaml +++ b/packages/closed_household/pubspec.yaml @@ -32,7 +32,7 @@ dependencies: digit_scanner: ^1.0.2 gs1_barcode_parser: ^1.0.5 auto_route: ^7.8.4 - digit_data_model: ^1.0.3+1 + digit_data_model: ^1.0.5-dev.1 package_info_plus: ^5.0.1 digit_showcase: ^1.0.0 collection: ^1.16.0 diff --git a/packages/complaints/example/pubspec.yaml b/packages/complaints/example/pubspec.yaml index 8e16206d9..fe8d3212d 100644 --- a/packages/complaints/example/pubspec.yaml +++ b/packages/complaints/example/pubspec.yaml @@ -36,9 +36,6 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 digit_components: ^1.0.0+2 - digit_data_model: - path: ../../digit_data_model - flutter_bloc: complaints: path : ../ diff --git a/packages/digit_data_model/CHANGELOG.md b/packages/digit_data_model/CHANGELOG.md index 61340b65d..094746386 100644 --- a/packages/digit_data_model/CHANGELOG.md +++ b/packages/digit_data_model/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.5-dev.1 + +* Merged pgr and survey_form package changes + ## 1.0.4 * Added user_action entity for digit_location_tracker package @@ -13,10 +17,6 @@ * Updated beneficiary type target model and table to string * Updated project type beneficiary type model and table to BeneficiaryType enum -## 1.0.4-dev.5 - -* Merged pgr and checklist changes - ## 1.0.3+1 * Updated oplog transactions to synchronous - fix for write transaction lock diff --git a/packages/digit_data_model/pubspec.lock b/packages/digit_data_model/pubspec.lock index c03730aeb..cafc857b1 100644 --- a/packages/digit_data_model/pubspec.lock +++ b/packages/digit_data_model/pubspec.lock @@ -33,14 +33,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.2" - archive: - dependency: transitive - description: - name: archive - sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d - url: "https://pub.dev" - source: hosted - version: "3.6.1" args: dependency: transitive description: @@ -57,70 +49,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.11.0" - audioplayers: - dependency: transitive - description: - name: audioplayers - sha256: c05c6147124cd63e725e861335a8b4d57300b80e6e92cea7c145c739223bbaef - url: "https://pub.dev" - source: hosted - version: "5.2.1" - audioplayers_android: - dependency: transitive - description: - name: audioplayers_android - sha256: b00e1a0e11365d88576320ec2d8c192bc21f1afb6c0e5995d1c57ae63156acb5 - url: "https://pub.dev" - source: hosted - version: "4.0.3" - audioplayers_darwin: - dependency: transitive - description: - name: audioplayers_darwin - sha256: "3034e99a6df8d101da0f5082dcca0a2a99db62ab1d4ddb3277bed3f6f81afe08" - url: "https://pub.dev" - source: hosted - version: "5.0.2" - audioplayers_linux: - dependency: transitive - description: - name: audioplayers_linux - sha256: "60787e73fefc4d2e0b9c02c69885402177e818e4e27ef087074cf27c02246c9e" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - audioplayers_platform_interface: - dependency: transitive - description: - name: audioplayers_platform_interface - sha256: "365c547f1bb9e77d94dd1687903a668d8f7ac3409e48e6e6a3668a1ac2982adb" - url: "https://pub.dev" - source: hosted - version: "6.1.0" - audioplayers_web: - dependency: transitive - description: - name: audioplayers_web - sha256: "22cd0173e54d92bd9b2c80b1204eb1eb159ece87475ab58c9788a70ec43c2a62" - url: "https://pub.dev" - source: hosted - version: "4.1.0" - audioplayers_windows: - dependency: transitive - description: - name: audioplayers_windows - sha256: "9536812c9103563644ada2ef45ae523806b0745f7a78e89d1b5fb1951de90e1a" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - auto_route: - dependency: transitive - description: - name: auto_route - sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 - url: "https://pub.dev" - source: hosted - version: "7.9.2" bloc: dependency: transitive description: @@ -209,46 +137,6 @@ packages: url: "https://pub.dev" source: hosted version: "8.9.2" - camera: - dependency: transitive - description: - name: camera - sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" - url: "https://pub.dev" - source: hosted - version: "0.10.5+9" - camera_android: - dependency: transitive - description: - name: camera_android - sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 - url: "https://pub.dev" - source: hosted - version: "0.10.9+2" - camera_avfoundation: - dependency: transitive - description: - name: camera_avfoundation - sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" - url: "https://pub.dev" - source: hosted - version: "0.9.13+10" - camera_platform_interface: - dependency: transitive - description: - name: camera_platform_interface - sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 - url: "https://pub.dev" - source: hosted - version: "2.8.0" - camera_web: - dependency: transitive - description: - name: camera_web - sha256: b9235ec0a2ce949daec546f1f3d86f05c3921ed31c7d9ab6b7c03214d152fc2d - url: "https://pub.dev" - source: hosted - version: "0.3.4" characters: dependency: transitive description: @@ -321,14 +209,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.0" - cross_file: - dependency: transitive - description: - name: cross_file - sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e - url: "https://pub.dev" - source: hosted - version: "0.3.3+8" crypto: dependency: transitive description: @@ -337,38 +217,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" - csslib: - dependency: transitive - description: - name: csslib - sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - cupertino_icons: - dependency: transitive - description: - name: cupertino_icons - sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 - url: "https://pub.dev" - source: hosted - version: "1.0.8" - dart_code_metrics: - dependency: "direct dev" - description: - name: dart_code_metrics - sha256: "3dede3f7abc077a4181ec7445448a289a9ce08e2981e6a4d49a3fb5099d47e1f" - url: "https://pub.dev" - source: hosted - version: "5.7.6" - dart_code_metrics_presets: - dependency: transitive - description: - name: dart_code_metrics_presets - sha256: b71eadf02a3787ebd5c887623f83f6fdc204d45c75a081bd636c4104b3fd8b73 - url: "https://pub.dev" - source: hosted - version: "1.8.0" dart_mappable: dependency: "direct main" description: @@ -380,9 +228,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -416,30 +266,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.1" - digit_components: - dependency: transitive - description: - name: digit_components - sha256: "07b585e5d8010639366da72a4a8b215ce9b8790c75b2162b66af3cea57ca35d9" - url: "https://pub.dev" - source: hosted - version: "1.0.2+1" - digit_scanner: - dependency: transitive - description: - name: digit_scanner - sha256: "9862c4885465bb1942e36dc9b42596c201648db9b0f5ffb8ad768e2409fc2742" - url: "https://pub.dev" - source: hosted - version: "1.0.3+1" - digit_showcase: - dependency: transitive - description: - name: digit_showcase - sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" - url: "https://pub.dev" - source: hosted - version: "1.0.0" dio: dependency: "direct main" description: @@ -472,14 +298,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.15.0" - easy_stepper: - dependency: transitive - description: - name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" - url: "https://pub.dev" - source: hosted - version: "0.5.2+1" fake_async: dependency: transitive description: @@ -525,62 +343,6 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.5" - flutter_focus_watcher: - dependency: transitive - description: - name: flutter_focus_watcher - sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility: - dependency: transitive - description: - name: flutter_keyboard_visibility - sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" - url: "https://pub.dev" - source: hosted - version: "5.4.1" - flutter_keyboard_visibility_linux: - dependency: transitive - description: - name: flutter_keyboard_visibility_linux - sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_macos: - dependency: transitive - description: - name: flutter_keyboard_visibility_macos - sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_platform_interface: - dependency: transitive - description: - name: flutter_keyboard_visibility_platform_interface - sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_web: - dependency: transitive - description: - name: flutter_keyboard_visibility_web - sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_windows: - dependency: transitive - description: - name: flutter_keyboard_visibility_windows - sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 - url: "https://pub.dev" - source: hosted - version: "1.0.0" flutter_lints: dependency: "direct dev" description: @@ -589,64 +351,11 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.2" - flutter_plugin_android_lifecycle: - dependency: transitive - description: - name: flutter_plugin_android_lifecycle - sha256: "8cf40eebf5dec866a6d1956ad7b4f7016e6c0cc69847ab946833b7d43743809f" - url: "https://pub.dev" - source: hosted - version: "2.0.19" - flutter_spinkit: - dependency: transitive - description: - name: flutter_spinkit - sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 - url: "https://pub.dev" - source: hosted - version: "5.2.1" - flutter_svg: - dependency: transitive - description: - name: flutter_svg - sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c - url: "https://pub.dev" - source: hosted - version: "2.0.9" flutter_test: dependency: "direct dev" description: flutter source: sdk version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" - flutter_web_plugins: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - fluttertoast: - dependency: transitive - description: - name: fluttertoast - sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" - url: "https://pub.dev" - source: hosted - version: "8.2.5" - formula_parser: - dependency: transitive - description: - name: formula_parser - sha256: af9e9ae2961ec1dab54c5de97d9a6bef0593ddb998720e3785bd91ef05353359 - url: "https://pub.dev" - source: hosted - version: "2.0.1" freezed: dependency: "direct dev" description: @@ -679,30 +388,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.2" - google_fonts: - dependency: transitive - description: - name: google_fonts - sha256: "6b6f10f0ce3c42f6552d1c70d2c28d764cf22bb487f50f66cca31dcd5194f4d6" - url: "https://pub.dev" - source: hosted - version: "4.0.4" - google_mlkit_barcode_scanning: - dependency: transitive - description: - name: google_mlkit_barcode_scanning - sha256: "965183a8cd5cef8477ceea5dbdf29c34a739cf0cfbf1bdad54cd3f9f1807afe5" - url: "https://pub.dev" - source: hosted - version: "0.10.0" - google_mlkit_commons: - dependency: transitive - description: - name: google_mlkit_commons - sha256: "046586b381cdd139f7f6a05ad6998f7e339d061bd70158249907358394b5f496" - url: "https://pub.dev" - source: hosted - version: "0.6.1" graphs: dependency: transitive description: @@ -711,46 +396,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.1" - group_radio_button: - dependency: transitive - description: - name: group_radio_button - sha256: "204de8d16b224be7fc72dade0c3afd410ff5a34417d89f74f0fd8be7a8c2b4d6" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - gs1_barcode_parser: - dependency: transitive - description: - name: gs1_barcode_parser - sha256: ff171bc40038de3f7178fbc32eaf9eebc3d35a3c4c00bb0281fe4a976d853a42 - url: "https://pub.dev" - source: hosted - version: "1.1.0" - horizontal_data_table: - dependency: transitive - description: - name: horizontal_data_table - sha256: c8ab5256bbced698a729f3e0ff2cb0e8e97416cdbb082860370eaf883badf722 - url: "https://pub.dev" - source: hosted - version: "4.3.1" - html: - dependency: transitive - description: - name: html - sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" - url: "https://pub.dev" - source: hosted - version: "0.15.4" - http: - dependency: transitive - description: - name: http - sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" - url: "https://pub.dev" - source: hosted - version: "0.13.6" http_multi_server: dependency: transitive description: @@ -767,14 +412,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" - intl: - dependency: transitive - description: - name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" - url: "https://pub.dev" - source: hosted - version: "0.18.1" io: dependency: transitive description: @@ -839,30 +476,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.0" - location: - dependency: transitive - description: - name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" - url: "https://pub.dev" - source: hosted - version: "5.0.3" - location_platform_interface: - dependency: transitive - description: - name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" - url: "https://pub.dev" - source: hosted - version: "3.1.2" - location_web: - dependency: transitive - description: - name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b - url: "https://pub.dev" - source: hosted - version: "4.2.0" logging: dependency: transitive description: @@ -871,14 +484,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" - lottie: - dependency: transitive - description: - name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 - url: "https://pub.dev" - source: hosted - version: "2.7.0" matcher: dependency: transitive description: @@ -935,14 +540,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.2" - overlay_builder: - dependency: transitive - description: - name: overlay_builder - sha256: "58b97bc5f67a2e2bb7006dd88e697ac757dfffc9dbd1e7dfc1917fb510a4b5c8" - url: "https://pub.dev" - source: hosted - version: "1.1.0" package_config: dependency: transitive description: @@ -951,22 +548,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - package_info_plus: - dependency: transitive - description: - name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" - url: "https://pub.dev" - source: hosted - version: "5.0.1" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" - url: "https://pub.dev" - source: hosted - version: "2.0.1" path: dependency: "direct main" description: @@ -975,14 +556,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" - path_parsing: - dependency: transitive - description: - name: path_parsing - sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf - url: "https://pub.dev" - source: hosted - version: "1.0.1" path_provider: dependency: "direct main" description: @@ -1031,14 +604,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.2.1" - petitparser: - dependency: transitive - description: - name: petitparser - sha256: cb3798bef7fc021ac45b308f4b51208a152792445cce0448c9a4ba5879dd8750 - url: "https://pub.dev" - source: hosted - version: "5.4.0" platform: dependency: transitive description: @@ -1055,22 +620,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - pluto_grid: - dependency: transitive - description: - name: pluto_grid - sha256: e77c34a33dd9d74abbe20ba1df96474dded150dd042c7f7495be1bc2c26bd37f - url: "https://pub.dev" - source: hosted - version: "7.0.2" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" pool: dependency: transitive description: @@ -1079,14 +628,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.1" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" provider: dependency: transitive description: @@ -1103,14 +644,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - pub_updater: - dependency: transitive - description: - name: pub_updater - sha256: "05ae70703e06f7fdeb05f7f02dd680b8aad810e87c756a618f33e1794635115c" - url: "https://pub.dev" - source: hosted - version: "0.3.0" pubspec_parse: dependency: transitive description: @@ -1119,22 +652,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.3" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 - url: "https://pub.dev" - source: hosted - version: "0.8.1" - reactive_forms: - dependency: transitive - description: - name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" - url: "https://pub.dev" - source: hosted - version: "14.3.0" recase: dependency: "direct main" description: @@ -1143,29 +660,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" - registration_delivery: - dependency: "direct overridden" - description: - path: "../registration_delivery" - relative: true - source: path - version: "1.0.4-dev.1" - remove_emoji_input_formatter: - dependency: transitive - description: - name: remove_emoji_input_formatter - sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" - url: "https://pub.dev" - source: hosted - version: "0.0.1+1" - rxdart: - dependency: transitive - description: - name: rxdart - sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" - url: "https://pub.dev" - source: hosted - version: "0.27.7" shelf: dependency: transitive description: @@ -1299,22 +793,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" - survey_form: - dependency: transitive - description: - name: survey_form - sha256: b793c3356cbb1b659af2298bc7d34b2a04307331ee958d9fb2e1a0adf89479f3 - url: "https://pub.dev" - source: hosted - version: "0.0.1-dev.1" - synchronized: - dependency: transitive - description: - name: synchronized - sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" term_glyph: dependency: transitive description: @@ -1387,30 +865,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.7" - vector_graphics: - dependency: transitive - description: - name: vector_graphics - sha256: "4ac59808bbfca6da38c99f415ff2d3a5d7ca0a6b4809c71d9cf30fba5daf9752" - url: "https://pub.dev" - source: hosted - version: "1.1.10+1" - vector_graphics_codec: - dependency: transitive - description: - name: vector_graphics_codec - sha256: f3247e7ab0ec77dc759263e68394990edc608fb2b480b80db8aa86ed09279e33 - url: "https://pub.dev" - source: hosted - version: "1.1.10+1" - vector_graphics_compiler: - dependency: transitive - description: - name: vector_graphics_compiler - sha256: "18489bdd8850de3dd7ca8a34e0c446f719ec63e2bab2e7a8cc66a9028dd76c5a" - url: "https://pub.dev" - source: hosted - version: "1.1.10+1" vector_math: dependency: transitive description: @@ -1475,14 +929,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" - xml: - dependency: transitive - description: - name: xml - sha256: "5bc72e1e45e941d825fd7468b9b4cc3b9327942649aeb6fc5cdbf135f0a86e84" - url: "https://pub.dev" - source: hosted - version: "6.3.0" xxh3: dependency: transitive description: @@ -1500,5 +946,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" + dart: ">=3.2.0 <4.0.0" flutter: ">=3.16.0" diff --git a/packages/digit_data_model/pubspec.yaml b/packages/digit_data_model/pubspec.yaml index fd69a0da9..f0a627dfc 100644 --- a/packages/digit_data_model/pubspec.yaml +++ b/packages/digit_data_model/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_data_model description: The digit_data_model package is a data modeling library. It defines various classes, enums, and functions. -version: 1.0.4 +version: 1.0.5-dev.1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_data_model repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -31,7 +31,6 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^3.0.1 - dart_code_metrics: ^5.7.6 freezed: ^2.1.0+1 build_runner: ^2.4.9 json_serializable: ^6.4.0 diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index 0d62855ae..1bb76bac8 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -345,14 +345,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" - csslib: - dependency: transitive - description: - name: csslib - sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" - url: "https://pub.dev" - source: hosted - version: "1.0.0" cupertino_icons: dependency: transitive description: @@ -361,22 +353,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_code_metrics: - dependency: "direct dev" - description: - name: dart_code_metrics - sha256: "3dede3f7abc077a4181ec7445448a289a9ce08e2981e6a4d49a3fb5099d47e1f" - url: "https://pub.dev" - source: hosted - version: "5.7.6" - dart_code_metrics_presets: - dependency: transitive - description: - name: dart_code_metrics_presets - sha256: b71eadf02a3787ebd5c887623f83f6fdc204d45c75a081bd636c4104b3fd8b73 - url: "https://pub.dev" - source: hosted - version: "1.8.0" dart_mappable: dependency: "direct main" description: @@ -421,23 +397,26 @@ packages: digit_components: dependency: "direct main" description: - path: "../digit_components" - relative: true - source: path + name: digit_components + sha256: "07b585e5d8010639366da72a4a8b215ce9b8790c75b2162b66af3cea57ca35d9" + url: "https://pub.dev" + source: hosted version: "1.0.2+1" digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path - version: "1.0.4" + name: digit_data_model + sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" + url: "https://pub.dev" + source: hosted + version: "1.0.5-dev.1" digit_scanner: dependency: "direct main" description: - path: "../digit_scanner" - relative: true - source: path + name: digit_scanner + sha256: "9862c4885465bb1942e36dc9b42596c201648db9b0f5ffb8ad768e2409fc2742" + url: "https://pub.dev" + source: hosted version: "1.0.3+1" dio: dependency: transitive @@ -718,14 +697,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.3.1" - html: - dependency: transitive - description: - name: html - sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" - url: "https://pub.dev" - source: hosted - version: "0.15.4" http: dependency: transitive description: @@ -1054,14 +1025,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.1" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" provider: dependency: transitive description: @@ -1078,14 +1041,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - pub_updater: - dependency: transitive - description: - name: pub_updater - sha256: "05ae70703e06f7fdeb05f7f02dd680b8aad810e87c756a618f33e1794635115c" - url: "https://pub.dev" - source: hosted - version: "0.3.0" pubspec_parse: dependency: transitive description: @@ -1444,5 +1399,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <4.0.0" + dart: ">=3.2.0 <3.9.0" flutter: ">=3.16.0" diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index 75f1edbaf..2f2f75058 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -32,14 +32,13 @@ dependencies: digit_scanner: ^1.0.3+1 gs1_barcode_parser: ^1.0.5 auto_route: ^7.8.4 - digit_data_model: ^1.0.3+3 + digit_data_model: ^1.0.5-dev.1 collection: ^1.16.0 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^3.0.1 - dart_code_metrics: ^5.7.6 freezed: ^2.1.0+1 json_serializable: ^6.4.0 drift_dev: ^2.14.1 diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index 83c1c5ca7..ca5772040 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -361,22 +361,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_code_metrics: - dependency: "direct dev" - description: - name: dart_code_metrics - sha256: "3dede3f7abc077a4181ec7445448a289a9ce08e2981e6a4d49a3fb5099d47e1f" - url: "https://pub.dev" - source: hosted - version: "5.7.6" - dart_code_metrics_presets: - dependency: transitive - description: - name: dart_code_metrics_presets - sha256: b71eadf02a3787ebd5c887623f83f6fdc204d45c75a081bd636c4104b3fd8b73 - url: "https://pub.dev" - source: hosted - version: "1.8.0" dart_mappable: dependency: "direct main" description: @@ -388,9 +372,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -427,10 +413,11 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path - version: "1.0.4" + name: digit_data_model + sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" + url: "https://pub.dev" + source: hosted + version: "1.0.5-dev.1" digit_scanner: dependency: "direct main" description: @@ -439,6 +426,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.3+1" + digit_ui_components: + dependency: transitive + description: + name: digit_ui_components + sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae + url: "https://pub.dev" + source: hosted + version: "0.0.1+7" dio: dependency: transitive description: @@ -447,6 +442,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.4.3+1" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" drift: dependency: "direct main" description: @@ -503,6 +506,46 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 + url: "https://pub.dev" + source: hosted + version: "8.0.0+1" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + url: "https://pub.dev" + source: hosted + version: "0.9.2+1" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 + url: "https://pub.dev" + source: hosted + version: "0.9.4" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" fixnum: dependency: transitive description: @@ -524,6 +567,30 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.5" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" flutter_focus_watcher: dependency: transitive description: @@ -588,6 +655,11 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.2" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -604,14 +676,22 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" flutter_svg: dependency: "direct main" description: name: flutter_svg - sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c + sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" url: "https://pub.dev" source: hosted - version: "2.0.9" + version: "2.0.10+1" flutter_test: dependency: "direct dev" description: flutter @@ -662,6 +742,54 @@ packages: url: "https://pub.dev" source: hosted version: "3.2.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + url: "https://pub.dev" + source: hosted + version: "4.3.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" + url: "https://pub.dev" + source: hosted + version: "2.3.8+1" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -674,10 +802,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: "6b6f10f0ce3c42f6552d1c70d2c28d764cf22bb487f50f66cca31dcd5194f4d6" + sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" url: "https://pub.dev" source: hosted - version: "4.0.4" + version: "4.0.5" google_mlkit_barcode_scanning: dependency: transitive description: @@ -738,10 +866,10 @@ packages: dependency: transitive description: name: http - sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba url: "https://pub.dev" source: hosted - version: "0.13.6" + version: "1.2.0" http_multi_server: dependency: transitive description: @@ -758,6 +886,70 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" + url: "https://pub.dev" + source: hosted + version: "1.0.8" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" + url: "https://pub.dev" + source: hosted + version: "0.8.9+6" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 + url: "https://pub.dev" + source: hosted + version: "0.8.9+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b + url: "https://pub.dev" + source: hosted + version: "2.9.3" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" intl: dependency: "direct main" description: @@ -958,6 +1150,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_parsing: dependency: transitive description: @@ -1062,14 +1262,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.1" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" provider: dependency: transitive description: @@ -1086,14 +1278,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - pub_updater: - dependency: transitive - description: - name: pub_updater - sha256: "05ae70703e06f7fdeb05f7f02dd680b8aad810e87c756a618f33e1794635115c" - url: "https://pub.dev" - source: hosted - version: "0.3.0" pubspec_parse: dependency: transitive description: @@ -1278,10 +1462,11 @@ packages: survey_form: dependency: "direct main" description: - path: "../survey_form" - relative: true - source: path - version: "0.0.1-dev.1" + name: survey_form + sha256: "52532fb3fae06883828d22f870045587bf7122f67cb4de236c82ad4d6de1d7d7" + url: "https://pub.dev" + source: hosted + version: "0.0.1-dev.2" synchronized: dependency: transitive description: @@ -1346,6 +1531,86 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + url_launcher: + dependency: transitive + description: + name: url_launcher + sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" + url: "https://pub.dev" + source: hosted + version: "6.3.0" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "17cd5e205ea615e2c6ea7a77323a11712dffa0720a8a90540db57a01347f9ad9" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" + url: "https://pub.dev" + source: hosted + version: "6.2.4" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 + url: "https://pub.dev" + source: hosted + version: "3.1.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + url: "https://pub.dev" + source: hosted + version: "2.2.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" + url: "https://pub.dev" + source: hosted + version: "3.1.2" uuid: dependency: "direct main" description: @@ -1358,26 +1623,26 @@ packages: dependency: transitive description: name: vector_graphics - sha256: "4ac59808bbfca6da38c99f415ff2d3a5d7ca0a6b4809c71d9cf30fba5daf9752" + sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: f3247e7ab0ec77dc759263e68394990edc608fb2b480b80db8aa86ed09279e33 + sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "18489bdd8850de3dd7ca8a34e0c446f719ec63e2bab2e7a8cc66a9028dd76c5a" + sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_math: dependency: transitive description: @@ -1386,6 +1651,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" vm_service: dependency: transitive description: diff --git a/packages/referral_reconciliation/pubspec.yaml b/packages/referral_reconciliation/pubspec.yaml index e9cbcad1d..6d477a0e2 100644 --- a/packages/referral_reconciliation/pubspec.yaml +++ b/packages/referral_reconciliation/pubspec.yaml @@ -33,15 +33,14 @@ dependencies: flutter_keyboard_visibility: ^5.4.0 auto_route: ^7.8.4 collection: ^1.16.0 - digit_data_model: ^1.0.3+3 + digit_data_model: ^1.0.5-dev.1 stream_transform: ^2.1.0 - survey_form: ^0.0.1-dev.1 + survey_form: ^0.0.1-dev.2 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^3.0.1 - dart_code_metrics: ^5.7.6 freezed: ^2.1.0+1 build_runner: ^2.4.7 json_serializable: ^6.4.0 diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 6ac489b13..120cfe77e 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -361,22 +361,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_code_metrics: - dependency: "direct dev" - description: - name: dart_code_metrics - sha256: "3dede3f7abc077a4181ec7445448a289a9ce08e2981e6a4d49a3fb5099d47e1f" - url: "https://pub.dev" - source: hosted - version: "5.7.6" - dart_code_metrics_presets: - dependency: transitive - description: - name: dart_code_metrics_presets - sha256: b71eadf02a3787ebd5c887623f83f6fdc204d45c75a081bd636c4104b3fd8b73 - url: "https://pub.dev" - source: hosted - version: "1.8.0" dart_mappable: dependency: "direct main" description: @@ -388,9 +372,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -427,10 +413,11 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path - version: "1.0.4" + name: digit_data_model + sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" + url: "https://pub.dev" + source: hosted + version: "1.0.5-dev.1" digit_scanner: dependency: "direct main" description: @@ -447,6 +434,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" + digit_ui_components: + dependency: transitive + description: + name: digit_ui_components + sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae + url: "https://pub.dev" + source: hosted + version: "0.0.1+7" dio: dependency: transitive description: @@ -463,6 +458,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" drift: dependency: "direct main" description: @@ -519,6 +522,46 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 + url: "https://pub.dev" + source: hosted + version: "8.0.0+1" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + url: "https://pub.dev" + source: hosted + version: "0.9.2+1" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 + url: "https://pub.dev" + source: hosted + version: "0.9.4" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" fixnum: dependency: transitive description: @@ -540,6 +583,30 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.6" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" flutter_focus_watcher: dependency: transitive description: @@ -604,6 +671,11 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.2" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -620,14 +692,22 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" flutter_svg: dependency: "direct main" description: name: flutter_svg - sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c + sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" url: "https://pub.dev" source: hosted - version: "2.0.9" + version: "2.0.10+1" flutter_test: dependency: "direct dev" description: flutter @@ -686,6 +766,54 @@ packages: url: "https://pub.dev" source: hosted version: "3.2.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + url: "https://pub.dev" + source: hosted + version: "4.3.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" + url: "https://pub.dev" + source: hosted + version: "2.3.8+1" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -698,10 +826,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: "6b6f10f0ce3c42f6552d1c70d2c28d764cf22bb487f50f66cca31dcd5194f4d6" + sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" url: "https://pub.dev" source: hosted - version: "4.0.4" + version: "4.0.5" google_mlkit_barcode_scanning: dependency: transitive description: @@ -762,10 +890,10 @@ packages: dependency: transitive description: name: http - sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba url: "https://pub.dev" source: hosted - version: "0.13.6" + version: "1.2.0" http_multi_server: dependency: transitive description: @@ -782,6 +910,70 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" + url: "https://pub.dev" + source: hosted + version: "1.0.8" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" + url: "https://pub.dev" + source: hosted + version: "0.8.9+6" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 + url: "https://pub.dev" + source: hosted + version: "0.8.9+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b + url: "https://pub.dev" + source: hosted + version: "2.9.3" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" intl: dependency: "direct main" description: @@ -982,6 +1174,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_parsing: dependency: transitive description: @@ -1086,14 +1286,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.1" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" provider: dependency: transitive description: @@ -1110,14 +1302,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - pub_updater: - dependency: transitive - description: - name: pub_updater - sha256: "05ae70703e06f7fdeb05f7f02dd680b8aad810e87c756a618f33e1794635115c" - url: "https://pub.dev" - source: hosted - version: "0.3.0" pubspec_parse: dependency: transitive description: @@ -1302,10 +1486,11 @@ packages: survey_form: dependency: "direct main" description: - path: "../survey_form" - relative: true - source: path - version: "0.0.1-dev.1" + name: survey_form + sha256: "52532fb3fae06883828d22f870045587bf7122f67cb4de236c82ad4d6de1d7d7" + url: "https://pub.dev" + source: hosted + version: "0.0.1-dev.2" synchronized: dependency: transitive description: @@ -1370,6 +1555,86 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + url_launcher: + dependency: transitive + description: + name: url_launcher + sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" + url: "https://pub.dev" + source: hosted + version: "6.3.0" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "17cd5e205ea615e2c6ea7a77323a11712dffa0720a8a90540db57a01347f9ad9" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" + url: "https://pub.dev" + source: hosted + version: "6.2.4" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 + url: "https://pub.dev" + source: hosted + version: "3.1.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + url: "https://pub.dev" + source: hosted + version: "2.2.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" + url: "https://pub.dev" + source: hosted + version: "3.1.2" uuid: dependency: "direct main" description: @@ -1382,26 +1647,26 @@ packages: dependency: transitive description: name: vector_graphics - sha256: "4ac59808bbfca6da38c99f415ff2d3a5d7ca0a6b4809c71d9cf30fba5daf9752" + sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: f3247e7ab0ec77dc759263e68394990edc608fb2b480b80db8aa86ed09279e33 + sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "18489bdd8850de3dd7ca8a34e0c446f719ec63e2bab2e7a8cc66a9028dd76c5a" + sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_math: dependency: transitive description: @@ -1410,6 +1675,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" vm_service: dependency: transitive description: diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index 94bd90c5b..054a8ad42 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -32,7 +32,7 @@ dependencies: digit_scanner: ^1.0.3+1 gs1_barcode_parser: ^1.0.5 auto_route: ^7.8.4 - digit_data_model: ^1.0.3+3 + digit_data_model: ^1.0.5-dev.1 package_info_plus: ^5.0.1 digit_showcase: ^1.0.0 collection: ^1.16.0 @@ -40,13 +40,12 @@ dependencies: stream_transform: ^2.1.0 async: ^2.11.0 formula_parser: ^2.0.1 - survey_form: ^0.0.1-dev.1 + survey_form: ^0.0.1-dev.2 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^3.0.1 - dart_code_metrics: ^5.7.6 freezed: ^2.1.0+1 json_serializable: ^6.4.0 drift_dev: ^2.14.1 diff --git a/packages/survey_form/CHANGELOG.md b/packages/survey_form/CHANGELOG.md index 61d573b4a..a4b25e89c 100644 --- a/packages/survey_form/CHANGELOG.md +++ b/packages/survey_form/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.0.1-dev.2 + +* Migrated to digit_ui_components +* Updated digit_data_model to latest version + ## 0.0.1-dev.1 * Removed survey_form models, blocs and repositories from digit_data_model diff --git a/packages/survey_form/example/lib/main.dart b/packages/survey_form/example/lib/main.dart index b017e1dc9..fd1f0977e 100644 --- a/packages/survey_form/example/lib/main.dart +++ b/packages/survey_form/example/lib/main.dart @@ -1,11 +1,11 @@ import 'dart:convert'; -import 'package:survey_form/blocs/app_localization.dart'; -import 'package:survey_form/blocs/survey_form_localization_delegate.dart'; import 'package:digit_components/widgets/digit_elevated_button.dart'; import 'package:flutter/material.dart'; -import 'package:survey_form/pages/acknowledgement.dart'; import 'package:flutter/services.dart'; +import 'package:survey_form/blocs/app_localization.dart'; +import 'package:survey_form/blocs/survey_form_localization_delegate.dart'; +import 'package:survey_form/pages/acknowledgement.dart'; import 'localizedString.dart'; @@ -30,13 +30,15 @@ class MyApp extends StatelessWidget { } } -Future loadLocalizedStrings() async{ +Future loadLocalizedStrings() async { String jsonString = await rootBundle.loadString('lib/data.json'); - // Decode the JSON string - List jsonList = jsonDecode(jsonString); + // Decode the JSON string + List jsonList = jsonDecode(jsonString); - // Convert the dynamic list to a list of LocalizedString objects - return jsonList.map((jsonItem) => LocalizedString.fromJson(jsonItem)).toList(); + // Convert the dynamic list to a list of LocalizedString objects + return jsonList + .map((jsonItem) => LocalizedString.fromJson(jsonItem)) + .toList(); } class MyHomePage extends StatefulWidget { @@ -50,19 +52,10 @@ class MyHomePage extends StatefulWidget { class _MyHomePageState extends State { late Future localizedStrings; - final languages=[ - { - "label":"PORTUGUÊS", - "value":"pt_MZ" - }, - { - "label":"FRENCH", - "value":"fr_MZ" - }, - { - "label":"ENGLISH", - "value":"en_MZ" - } + final languages = [ + {"label": "PORTUGUÊS", "value": "pt_MZ"}, + {"label": "FRENCH", "value": "fr_MZ"}, + {"label": "ENGLISH", "value": "en_MZ"} ]; @override @@ -70,8 +63,9 @@ class _MyHomePageState extends State { super.initState(); localizedStrings = loadLocalizedStrings(); - SurveyFormLocalizationDelegate delegate = SurveyFormLocalizationDelegate(localizedStrings, languages); - delegate.load(const Locale("en","MZ")); + SurveyFormLocalizationDelegate delegate = + SurveyFormLocalizationDelegate(localizedStrings, languages); + delegate.load(const Locale("en", "MZ")); } @override @@ -82,21 +76,19 @@ class _MyHomePageState extends State { title: Text(widget.title), ), body: Center( - child:Container( + child: Container( width: 300, child: DigitElevatedButton( child: const Text("Acknowledgement Page"), onPressed: () { - Navigator.of(context).push( - MaterialPageRoute( - builder: (BuildContext context) => SurveyFormAcknowledgementPage( + Navigator.of(context).push(MaterialPageRoute( + builder: (BuildContext context) => + SurveyFormAcknowledgementPage( appLocalizations: SurveyFormLocalization( - const Locale("en","MZ"), + const Locale("en", "MZ"), localizedStrings, - languages - ), - )) - ); + languages), + ))); }, ), ), diff --git a/packages/survey_form/example/pubspec.lock b/packages/survey_form/example/pubspec.lock index 28d4c9981..096ab7ba9 100644 --- a/packages/survey_form/example/pubspec.lock +++ b/packages/survey_form/example/pubspec.lock @@ -129,6 +129,46 @@ packages: url: "https://pub.dev" source: hosted version: "8.9.2" + camera: + dependency: transitive + description: + name: camera + sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" + url: "https://pub.dev" + source: hosted + version: "0.10.5+9" + camera_android: + dependency: transitive + description: + name: camera_android + sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 + url: "https://pub.dev" + source: hosted + version: "0.10.9+2" + camera_avfoundation: + dependency: transitive + description: + name: camera_avfoundation + sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" + url: "https://pub.dev" + source: hosted + version: "0.9.13+10" + camera_platform_interface: + dependency: transitive + description: + name: camera_platform_interface + sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 + url: "https://pub.dev" + source: hosted + version: "2.8.0" + camera_web: + dependency: transitive + description: + name: camera_web + sha256: b9235ec0a2ce949daec546f1f3d86f05c3921ed31c7d9ab6b7c03214d152fc2d + url: "https://pub.dev" + source: hosted + version: "0.3.4" characters: dependency: transitive description: @@ -137,6 +177,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + charcode: + dependency: transitive + description: + name: charcode + sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 + url: "https://pub.dev" + source: hosted + version: "1.3.1" checked_yaml: dependency: transitive description: @@ -177,6 +225,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.1" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e + url: "https://pub.dev" + source: hosted + version: "0.3.3+8" crypto: dependency: transitive description: @@ -185,6 +241,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" + url: "https://pub.dev" + source: hosted + version: "1.0.2" cupertino_icons: dependency: "direct main" description: @@ -226,12 +290,21 @@ packages: source: hosted version: "1.0.2+1" digit_data_model: - dependency: "direct main" + dependency: transitive description: - path: "../../digit_data_model" - relative: true - source: path - version: "1.0.4" + name: digit_data_model + sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" + url: "https://pub.dev" + source: hosted + version: "1.0.5-dev.1" + digit_ui_components: + dependency: transitive + description: + name: digit_ui_components + sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae + url: "https://pub.dev" + source: hosted + version: "0.0.1+7" dio: dependency: transitive description: @@ -248,6 +321,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" drift: dependency: transitive description: @@ -296,6 +377,46 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.1" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 + url: "https://pub.dev" + source: hosted + version: "8.0.0+1" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + url: "https://pub.dev" + source: hosted + version: "0.9.2+1" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 + url: "https://pub.dev" + source: hosted + version: "0.9.4" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" fixnum: dependency: transitive description: @@ -317,6 +438,30 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.6" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" flutter_focus_watcher: dependency: transitive description: @@ -381,6 +526,19 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.3" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: "8cf40eebf5dec866a6d1956ad7b4f7016e6c0cc69847ab946833b7d43743809f" + url: "https://pub.dev" + source: hosted + version: "2.0.19" flutter_spinkit: dependency: transitive description: @@ -389,6 +547,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" flutter_svg: dependency: transitive description: @@ -439,6 +605,54 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + url: "https://pub.dev" + source: hosted + version: "4.3.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" + url: "https://pub.dev" + source: hosted + version: "2.3.8+1" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -479,6 +693,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.3.1" + html: + dependency: transitive + description: + name: html + sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" + url: "https://pub.dev" + source: hosted + version: "0.15.5" http: dependency: transitive description: @@ -503,6 +725,70 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" + url: "https://pub.dev" + source: hosted + version: "1.0.8" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" + url: "https://pub.dev" + source: hosted + version: "0.8.9+6" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 + url: "https://pub.dev" + source: hosted + version: "0.8.9+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b + url: "https://pub.dev" + source: hosted + version: "2.9.3" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" intl: dependency: transitive description: @@ -687,6 +973,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_parsing: dependency: transitive description: @@ -922,7 +1216,7 @@ packages: path: ".." relative: true source: path - version: "0.0.1-dev.1" + version: "0.0.1-dev.2" term_glyph: dependency: transitive description: @@ -963,6 +1257,86 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + url_launcher: + dependency: transitive + description: + name: url_launcher + sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" + url: "https://pub.dev" + source: hosted + version: "6.3.0" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "17cd5e205ea615e2c6ea7a77323a11712dffa0720a8a90540db57a01347f9ad9" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" + url: "https://pub.dev" + source: hosted + version: "6.2.4" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 + url: "https://pub.dev" + source: hosted + version: "3.1.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + url: "https://pub.dev" + source: hosted + version: "2.2.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" + url: "https://pub.dev" + source: hosted + version: "3.1.2" uuid: dependency: transitive description: @@ -1003,6 +1377,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" watcher: dependency: transitive description: diff --git a/packages/survey_form/example/pubspec.yaml b/packages/survey_form/example/pubspec.yaml index 446bc3f5b..2c953d27a 100644 --- a/packages/survey_form/example/pubspec.yaml +++ b/packages/survey_form/example/pubspec.yaml @@ -29,8 +29,6 @@ environment: # versions available, run `flutter pub outdated`. dependencies: digit_components: ^1.0.0+2 - digit_data_model: - path: ../../digit_data_model survey_form: path: ../ diff --git a/packages/survey_form/pubspec.lock b/packages/survey_form/pubspec.lock index 36ad1f411..d5cfd27b9 100644 --- a/packages/survey_form/pubspec.lock +++ b/packages/survey_form/pubspec.lock @@ -340,10 +340,11 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path - version: "1.0.4" + name: digit_data_model + sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" + url: "https://pub.dev" + source: hosted + version: "1.0.5-dev.1" digit_ui_components: dependency: "direct main" description: @@ -672,10 +673,10 @@ packages: dependency: transitive description: name: geolocator_apple - sha256: bc2aca02423ad429cb0556121f56e60360a2b7d694c8570301d06ea0c00732fd + sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" url: "https://pub.dev" source: hosted - version: "2.3.7" + version: "2.3.8+1" geolocator_platform_interface: dependency: transitive description: @@ -1088,10 +1089,10 @@ packages: dependency: transitive description: name: petitparser - sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + sha256: cb3798bef7fc021ac45b308f4b51208a152792445cce0448c9a4ba5879dd8750 url: "https://pub.dev" source: hosted - version: "6.0.2" + version: "5.4.0" platform: dependency: transitive description: @@ -1549,10 +1550,10 @@ packages: dependency: transitive description: name: xml - sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + sha256: "5bc72e1e45e941d825fd7468b9b4cc3b9327942649aeb6fc5cdbf135f0a86e84" url: "https://pub.dev" source: hosted - version: "6.5.0" + version: "6.3.0" yaml: dependency: transitive description: diff --git a/packages/survey_form/pubspec.yaml b/packages/survey_form/pubspec.yaml index ab4169fa8..b047e4923 100644 --- a/packages/survey_form/pubspec.yaml +++ b/packages/survey_form/pubspec.yaml @@ -1,6 +1,6 @@ name: survey_form description: "This package enables supervisors to monitor certain activities and record observations according to defined set of questions." -version: 0.0.1-dev.1 +version: 0.0.1-dev.2 homepage: "https://github.com/egovernments/health-campaign-field-worker-app/tree/checklist-package/packages/survey_form" repository: "https://github.com/egovernments/health-campaign-field-worker-app" @@ -23,8 +23,7 @@ dependencies: dart_mappable: ^4.2.0 drift: ^2.0.0 auto_route: ^7.8.4 - digit_data_model: - path: ../digit_data_model + digit_data_model: ^1.0.5-dev.1 collection: ^1.16.0 location: ^5.0.0 dio: ^5.1.2 From d5d643dc256a1f21802105641e19ef07bb0fdecc Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Mon, 18 Nov 2024 16:16:34 +0530 Subject: [PATCH 159/241] pub lock file changes --- apps/health_campaign_field_worker_app/pubspec.lock | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 9f1e16765..ffc8296dd 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -365,7 +365,7 @@ packages: path: "../../packages/complaints" relative: true source: path - version: "0.0.1-dev.1" + version: "0.0.1-dev.2" connectivity_plus: dependency: "direct main" description: @@ -441,9 +441,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../../packages/dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -514,7 +516,7 @@ packages: path: "../../packages/digit_data_model" relative: true source: path - version: "1.0.4" + version: "1.0.5-dev.1" digit_dss: dependency: "direct main" description: @@ -2065,7 +2067,7 @@ packages: path: "../../packages/survey_form" relative: true source: path - version: "0.0.1-dev.1" + version: "0.0.1-dev.2" sync_http: dependency: transitive description: From af150be5829b71d2e8a1521b3ae1db9224fbee3e Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Mon, 18 Nov 2024 16:18:30 +0530 Subject: [PATCH 160/241] complaints version change --- apps/health_campaign_field_worker_app/pubspec.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index ffc8296dd..81aafe1b5 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -365,7 +365,7 @@ packages: path: "../../packages/complaints" relative: true source: path - version: "0.0.1-dev.2" + version: "0.0.1-dev.1" connectivity_plus: dependency: "direct main" description: From 8dd1e47e16fb7037f2e6080687898c4e6e5490a4 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Mon, 18 Nov 2024 17:23:16 +0530 Subject: [PATCH 161/241] component upgrade version increments --- .../pubspec.lock | 66 +--- packages/attendance_management/CHANGELOG.md | 5 + packages/attendance_management/pubspec.yaml | 2 +- packages/closed_household/CHANGELOG.md | 4 + packages/closed_household/pubspec.lock | 369 +++++++++++++++--- packages/closed_household/pubspec.yaml | 2 +- packages/complaints/CHANGELOG.md | 4 +- packages/complaints/example/pubspec.lock | 13 +- packages/complaints/pubspec.lock | 17 +- packages/complaints/pubspec.yaml | 5 +- packages/referral_reconciliation/CHANGELOG.md | 5 + packages/referral_reconciliation/pubspec.lock | 28 +- packages/referral_reconciliation/pubspec.yaml | 2 +- packages/registration_delivery/CHANGELOG.md | 5 + packages/registration_delivery/pubspec.lock | 4 +- packages/registration_delivery/pubspec.yaml | 2 +- packages/survey_form/pubspec.lock | 11 +- packages/survey_form/pubspec.yaml | 6 +- 18 files changed, 397 insertions(+), 153 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 372d7545a..d096797b2 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -71,7 +71,7 @@ packages: path: "../../packages/attendance_management" relative: true source: path - version: "1.0.2+4" + version: "1.0.3-dev.1" audioplayers: dependency: "direct main" description: @@ -365,7 +365,7 @@ packages: path: "../../packages/complaints" relative: true source: path - version: "0.0.1-dev.1" + version: "0.0.1-dev.2" connectivity_plus: dependency: "direct main" description: @@ -553,7 +553,7 @@ packages: source: path version: "1.0.0" digit_ui_components: - dependency: transitive + dependency: "direct main" description: name: digit_ui_components sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae @@ -1318,62 +1318,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.1+1" - image_picker_platform_interface: - dependency: transitive - description: - name: image_picker_platform_interface - sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b - url: "https://pub.dev" - source: hosted - version: "4.1.7" - image_picker: - dependency: transitive - description: - name: image_picker - sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" - url: "https://pub.dev" - source: hosted - version: "1.0.8" - image_picker_android: - dependency: transitive - description: - name: image_picker_android - sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" - url: "https://pub.dev" - source: hosted - version: "0.8.9+6" - image_picker_for_web: - dependency: transitive - description: - name: image_picker_for_web - sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 - url: "https://pub.dev" - source: hosted - version: "3.0.2" - image_picker_ios: - dependency: transitive - description: - name: image_picker_ios - sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 - url: "https://pub.dev" - source: hosted - version: "0.8.9+1" - image_picker_linux: - dependency: transitive - description: - name: image_picker_linux - sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" - url: "https://pub.dev" - source: hosted - version: "0.2.1+1" - image_picker_macos: - dependency: transitive - description: - name: image_picker_macos - sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" - url: "https://pub.dev" - source: hosted - version: "0.2.1+1" image_picker_platform_interface: dependency: transitive description: @@ -1880,14 +1824,14 @@ packages: path: "../../packages/referral_reconciliation" relative: true source: path - version: "1.0.2" + version: "1.0.3-dev.1" registration_delivery: dependency: "direct main" description: path: "../../packages/registration_delivery" relative: true source: path - version: "1.0.4-dev.1" + version: "1.0.4-dev.5" remove_emoji_input_formatter: dependency: transitive description: diff --git a/packages/attendance_management/CHANGELOG.md b/packages/attendance_management/CHANGELOG.md index 297336973..3f8c6380a 100644 --- a/packages/attendance_management/CHANGELOG.md +++ b/packages/attendance_management/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.0.3-dev.1 +* Updated digit_data_model to latest version +* Updated survey_form to latest version +* Migrated to digit_ui_components + ## 1.0.2+4 * Fix for boundaryCode in attendance logs diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index 88b36c969..c7f3736ea 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -1,6 +1,6 @@ name: attendance_management description: Digit UI attendance management specification - This tool is designed for tracking user attendance with customizable session counts per day. -version: 1.0.2+4 +version: 1.0.3-dev.1 homepage: "https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/attendance_management" repository: "https://github.com/egovernments/health-campaign-field-worker-app" diff --git a/packages/closed_household/CHANGELOG.md b/packages/closed_household/CHANGELOG.md index a3f6ce26a..5d25ceb15 100644 --- a/packages/closed_household/CHANGELOG.md +++ b/packages/closed_household/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.2-dev.1 +* Updated digit_data_model to latest version +* Migrated to digit_ui_components + ## 1.0.1+1 * Updated digit_data_model, digit_components and registration_delivery diff --git a/packages/closed_household/pubspec.lock b/packages/closed_household/pubspec.lock index 2a3b7b437..76890865c 100644 --- a/packages/closed_household/pubspec.lock +++ b/packages/closed_household/pubspec.lock @@ -349,10 +349,10 @@ packages: dependency: transitive description: name: csslib - sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.0.2" cupertino_icons: dependency: transitive description: @@ -361,22 +361,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_code_metrics: - dependency: "direct dev" - description: - name: dart_code_metrics - sha256: "3dede3f7abc077a4181ec7445448a289a9ce08e2981e6a4d49a3fb5099d47e1f" - url: "https://pub.dev" - source: hosted - version: "5.7.6" - dart_code_metrics_presets: - dependency: transitive - description: - name: dart_code_metrics_presets - sha256: b71eadf02a3787ebd5c887623f83f6fdc204d45c75a081bd636c4104b3fd8b73 - url: "https://pub.dev" - source: hosted - version: "1.8.0" dart_mappable: dependency: "direct main" description: @@ -419,7 +403,7 @@ packages: source: hosted version: "0.4.1" digit_components: - dependency: "direct main" + dependency: transitive description: name: digit_components sha256: "07b585e5d8010639366da72a4a8b215ce9b8790c75b2162b66af3cea57ca35d9" @@ -450,6 +434,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" + digit_ui_components: + dependency: "direct main" + description: + name: digit_ui_components + sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae + url: "https://pub.dev" + source: hosted + version: "0.0.1+7" dio: dependency: transitive description: @@ -466,6 +458,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" drift: dependency: "direct main" description: @@ -522,6 +522,46 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 + url: "https://pub.dev" + source: hosted + version: "8.0.0+1" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + url: "https://pub.dev" + source: hosted + version: "0.9.2+1" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 + url: "https://pub.dev" + source: hosted + version: "0.9.4" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" fixnum: dependency: transitive description: @@ -543,6 +583,30 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.6" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" flutter_focus_watcher: dependency: transitive description: @@ -607,6 +671,11 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.2" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -623,14 +692,22 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" flutter_svg: dependency: "direct main" description: name: flutter_svg - sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c + sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" url: "https://pub.dev" source: hosted - version: "2.0.9" + version: "2.0.10+1" flutter_test: dependency: "direct dev" description: flutter @@ -689,6 +766,54 @@ packages: url: "https://pub.dev" source: hosted version: "3.2.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + url: "https://pub.dev" + source: hosted + version: "4.3.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" + url: "https://pub.dev" + source: hosted + version: "2.3.8+1" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -701,10 +826,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: "6b6f10f0ce3c42f6552d1c70d2c28d764cf22bb487f50f66cca31dcd5194f4d6" + sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" url: "https://pub.dev" source: hosted - version: "4.0.4" + version: "4.0.5" google_mlkit_barcode_scanning: dependency: transitive description: @@ -749,18 +874,18 @@ packages: dependency: transitive description: name: html - sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" + sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" url: "https://pub.dev" source: hosted - version: "0.15.4" + version: "0.15.5" http: dependency: transitive description: name: http - sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba url: "https://pub.dev" source: hosted - version: "0.13.6" + version: "1.2.0" http_multi_server: dependency: transitive description: @@ -777,6 +902,70 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" + url: "https://pub.dev" + source: hosted + version: "1.0.8" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" + url: "https://pub.dev" + source: hosted + version: "0.8.9+6" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 + url: "https://pub.dev" + source: hosted + version: "0.8.9+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b + url: "https://pub.dev" + source: hosted + version: "2.9.3" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" intl: dependency: "direct main" description: @@ -842,7 +1031,7 @@ packages: source: hosted version: "3.0.0" location: - dependency: transitive + dependency: "direct main" description: name: location sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" @@ -977,6 +1166,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_parsing: dependency: transitive description: @@ -1081,14 +1278,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.1" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" provider: dependency: transitive description: @@ -1105,14 +1294,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - pub_updater: - dependency: transitive - description: - name: pub_updater - sha256: "05ae70703e06f7fdeb05f7f02dd680b8aad810e87c756a618f33e1794635115c" - url: "https://pub.dev" - source: hosted - version: "0.3.0" pubspec_parse: dependency: transitive description: @@ -1366,6 +1547,86 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + url_launcher: + dependency: transitive + description: + name: url_launcher + sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" + url: "https://pub.dev" + source: hosted + version: "6.3.0" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "17cd5e205ea615e2c6ea7a77323a11712dffa0720a8a90540db57a01347f9ad9" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" + url: "https://pub.dev" + source: hosted + version: "6.2.4" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 + url: "https://pub.dev" + source: hosted + version: "3.1.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + url: "https://pub.dev" + source: hosted + version: "2.2.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" + url: "https://pub.dev" + source: hosted + version: "3.1.2" uuid: dependency: "direct main" description: @@ -1378,26 +1639,26 @@ packages: dependency: transitive description: name: vector_graphics - sha256: "4ac59808bbfca6da38c99f415ff2d3a5d7ca0a6b4809c71d9cf30fba5daf9752" + sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: f3247e7ab0ec77dc759263e68394990edc608fb2b480b80db8aa86ed09279e33 + sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "18489bdd8850de3dd7ca8a34e0c446f719ec63e2bab2e7a8cc66a9028dd76c5a" + sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_math: dependency: transitive description: @@ -1406,6 +1667,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" vm_service: dependency: transitive description: diff --git a/packages/closed_household/pubspec.yaml b/packages/closed_household/pubspec.yaml index 8ae04d39e..599577c6c 100644 --- a/packages/closed_household/pubspec.yaml +++ b/packages/closed_household/pubspec.yaml @@ -1,6 +1,6 @@ name: closed_household description: This package enables health facility workers to mark household closed and update. -version: 1.0.1+1 +version: 1.0.2-dev.1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/develop/packages/closed_household repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/complaints/CHANGELOG.md b/packages/complaints/CHANGELOG.md index 8cfb47136..315ba0fd9 100644 --- a/packages/complaints/CHANGELOG.md +++ b/packages/complaints/CHANGELOG.md @@ -1,6 +1,8 @@ - ## 0.0.1-dev.1 +* Migrated to digit_ui_components +* Updated digit_data_model to latest version +## 0.0.1-dev.1 * Moved pgr models, blocs, local remote repository from digit_data_model * Updated digit_data_model * PGR Complaints Initial Release \ No newline at end of file diff --git a/packages/complaints/example/pubspec.lock b/packages/complaints/example/pubspec.lock index 5dd22b18f..e78473cf3 100644 --- a/packages/complaints/example/pubspec.lock +++ b/packages/complaints/example/pubspec.lock @@ -233,12 +233,13 @@ packages: source: hosted version: "1.0.1" digit_data_model: - dependency: "direct main" + dependency: transitive description: - path: "../../digit_data_model" - relative: true - source: path - version: "1.0.4" + name: digit_data_model + sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" + url: "https://pub.dev" + source: hosted + version: "1.0.5-dev.1" dio: dependency: transitive description: @@ -317,7 +318,7 @@ packages: source: sdk version: "0.0.0" flutter_bloc: - dependency: "direct main" + dependency: transitive description: name: flutter_bloc sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a diff --git a/packages/complaints/pubspec.lock b/packages/complaints/pubspec.lock index b7704263b..e451fcd62 100644 --- a/packages/complaints/pubspec.lock +++ b/packages/complaints/pubspec.lock @@ -277,10 +277,11 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path - version: "1.0.4" + name: digit_data_model + sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" + url: "https://pub.dev" + source: hosted + version: "1.0.5-dev.1" dio: dependency: "direct main" description: @@ -828,10 +829,10 @@ packages: dependency: transitive description: name: petitparser - sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + sha256: cb3798bef7fc021ac45b308f4b51208a152792445cce0448c9a4ba5879dd8750 url: "https://pub.dev" source: hosted - version: "6.0.2" + version: "5.4.0" platform: dependency: transitive description: @@ -1201,10 +1202,10 @@ packages: dependency: transitive description: name: xml - sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + sha256: "5bc72e1e45e941d825fd7468b9b4cc3b9327942649aeb6fc5cdbf135f0a86e84" url: "https://pub.dev" source: hosted - version: "6.5.0" + version: "6.3.0" yaml: dependency: transitive description: diff --git a/packages/complaints/pubspec.yaml b/packages/complaints/pubspec.yaml index 390e4fee2..d3f9238e7 100644 --- a/packages/complaints/pubspec.yaml +++ b/packages/complaints/pubspec.yaml @@ -1,6 +1,6 @@ name: complaints description: This package offers filing complaints features, allowing users to file complaints. -version: 0.0.1-dev.1 +version: 0.0.1-dev.2 homepage: environment: @@ -15,8 +15,7 @@ dependencies: freezed_annotation: ^2.1.0 build_runner: ^2.2.1 auto_route: ^7.8.4 - digit_data_model: - path: ../digit_data_model + digit_data_model: ^1.0.5-dev.1 dart_mappable: ^4.2.0 group_radio_button: ^1.3.0 reactive_forms: ^14.1.0 diff --git a/packages/referral_reconciliation/CHANGELOG.md b/packages/referral_reconciliation/CHANGELOG.md index c90a0179d..7cff12142 100644 --- a/packages/referral_reconciliation/CHANGELOG.md +++ b/packages/referral_reconciliation/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.0.3-dev.1 +* Updated digit_data_model to latest version +* Updated survey_form to latest version +* Migrated to digit_ui_components + ## 1.0.2+2 * Updated digit_components, digit_data_model diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index 77d65eb29..61b85de94 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -372,9 +372,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -401,7 +403,7 @@ packages: source: hosted version: "0.4.1" digit_components: - dependency: "direct overridden" + dependency: transitive description: name: digit_components sha256: "07b585e5d8010639366da72a4a8b215ce9b8790c75b2162b66af3cea57ca35d9" @@ -411,10 +413,11 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path - version: "1.0.4" + name: digit_data_model + sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" + url: "https://pub.dev" + source: hosted + version: "1.0.5-dev.1" digit_scanner: dependency: "direct main" description: @@ -1459,10 +1462,11 @@ packages: survey_form: dependency: "direct main" description: - path: "../survey_form" - relative: true - source: path - version: "0.0.1-dev.1" + name: survey_form + sha256: "52532fb3fae06883828d22f870045587bf7122f67cb4de236c82ad4d6de1d7d7" + url: "https://pub.dev" + source: hosted + version: "0.0.1-dev.2" synchronized: dependency: transitive description: diff --git a/packages/referral_reconciliation/pubspec.yaml b/packages/referral_reconciliation/pubspec.yaml index 7081f8f04..bcec51690 100644 --- a/packages/referral_reconciliation/pubspec.yaml +++ b/packages/referral_reconciliation/pubspec.yaml @@ -1,6 +1,6 @@ name: referral_reconciliation description: "This module will enable the health facility supervisors to track referrals made by on-field health workers to different health facilities digitally via the Digit HCM app" -version: 1.0.2 +version: 1.0.3-dev.1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/referral_reconciliation repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration_delivery/CHANGELOG.md index 9308e3725..ddb41f002 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration_delivery/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.0.4-dev.5 +* Updated digit_data_model to latest version +* Updated survey_form to latest version +* Migrated to digit_ui_components + ## 1.0.3+3 * Updated Service model additionalDetails objectType in digit_data_model package diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 120cfe77e..f43c0acdf 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -403,7 +403,7 @@ packages: source: hosted version: "0.4.1" digit_components: - dependency: "direct main" + dependency: transitive description: name: digit_components sha256: "07b585e5d8010639366da72a4a8b215ce9b8790c75b2162b66af3cea57ca35d9" @@ -435,7 +435,7 @@ packages: source: hosted version: "1.0.0" digit_ui_components: - dependency: transitive + dependency: "direct main" description: name: digit_ui_components sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index ba021ef52..735ffc4a5 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -1,6 +1,6 @@ name: registration_delivery description: This package enables health facility workers to register a household and individual members and deliver the resources. -version: 1.0.4-dev.1 +version: 1.0.4-dev.5 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/registration_delivery repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/survey_form/pubspec.lock b/packages/survey_form/pubspec.lock index 11372abe6..ca017de05 100644 --- a/packages/survey_form/pubspec.lock +++ b/packages/survey_form/pubspec.lock @@ -308,11 +308,12 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - name: dart_mappable_builder - sha256: "04a6e7117382f8a8689b3e363bee6c3de8c9ea4332e664148fe01bd576eb1126" - url: "https://pub.dev" - source: hosted - version: "4.3.0" + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git + version: "4.2.0" dart_style: dependency: transitive description: diff --git a/packages/survey_form/pubspec.yaml b/packages/survey_form/pubspec.yaml index b047e4923..cd4bc2e25 100644 --- a/packages/survey_form/pubspec.yaml +++ b/packages/survey_form/pubspec.yaml @@ -37,7 +37,11 @@ dev_dependencies: freezed: ^2.2.0 bloc_test: ^9.1.0 mocktail: ^1.0.2 - dart_mappable_builder: ^4.2.0 + dart_mappable_builder: + git: + url: https://github.com/egovernments/health-campaign-field-worker-app/ + ref: master + path: ./packages/dart_mappable_builder drift_dev: ^2.14.1 auto_route_generator: ^7.3.2 From cb5fd0f4f50b2a70b029d544f0c37d31ced702fd Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Mon, 18 Nov 2024 18:26:21 +0530 Subject: [PATCH 162/241] merge conflicts --- packages/attendance_management/pubspec.lock | 15 +- packages/referral_reconciliation/pubspec.lock | 383 +++++++++++++++--- packages/referral_reconciliation/pubspec.yaml | 5 +- packages/registration_delivery/pubspec.lock | 374 ++++++++++++++--- packages/registration_delivery/pubspec.yaml | 5 +- packages/survey_form/pubspec.lock | 8 +- packages/survey_form/pubspec.yaml | 6 +- 7 files changed, 674 insertions(+), 122 deletions(-) diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index 526b55b3c..589ecfd8f 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -324,9 +324,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -363,9 +365,10 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path + name: digit_data_model + sha256: "0e5a1f8c5f0548e573af9c0279942f2dbc332042865614e0b89fe5952002ef1f" + url: "https://pub.dev" + source: hosted version: "1.0.4" digit_ui_components: dependency: "direct main" diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index 83c1c5ca7..ca5772040 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -361,22 +361,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_code_metrics: - dependency: "direct dev" - description: - name: dart_code_metrics - sha256: "3dede3f7abc077a4181ec7445448a289a9ce08e2981e6a4d49a3fb5099d47e1f" - url: "https://pub.dev" - source: hosted - version: "5.7.6" - dart_code_metrics_presets: - dependency: transitive - description: - name: dart_code_metrics_presets - sha256: b71eadf02a3787ebd5c887623f83f6fdc204d45c75a081bd636c4104b3fd8b73 - url: "https://pub.dev" - source: hosted - version: "1.8.0" dart_mappable: dependency: "direct main" description: @@ -388,9 +372,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -427,10 +413,11 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path - version: "1.0.4" + name: digit_data_model + sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" + url: "https://pub.dev" + source: hosted + version: "1.0.5-dev.1" digit_scanner: dependency: "direct main" description: @@ -439,6 +426,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.3+1" + digit_ui_components: + dependency: transitive + description: + name: digit_ui_components + sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae + url: "https://pub.dev" + source: hosted + version: "0.0.1+7" dio: dependency: transitive description: @@ -447,6 +442,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.4.3+1" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" drift: dependency: "direct main" description: @@ -503,6 +506,46 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 + url: "https://pub.dev" + source: hosted + version: "8.0.0+1" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + url: "https://pub.dev" + source: hosted + version: "0.9.2+1" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 + url: "https://pub.dev" + source: hosted + version: "0.9.4" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" fixnum: dependency: transitive description: @@ -524,6 +567,30 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.5" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" flutter_focus_watcher: dependency: transitive description: @@ -588,6 +655,11 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.2" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -604,14 +676,22 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" flutter_svg: dependency: "direct main" description: name: flutter_svg - sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c + sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" url: "https://pub.dev" source: hosted - version: "2.0.9" + version: "2.0.10+1" flutter_test: dependency: "direct dev" description: flutter @@ -662,6 +742,54 @@ packages: url: "https://pub.dev" source: hosted version: "3.2.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + url: "https://pub.dev" + source: hosted + version: "4.3.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" + url: "https://pub.dev" + source: hosted + version: "2.3.8+1" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -674,10 +802,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: "6b6f10f0ce3c42f6552d1c70d2c28d764cf22bb487f50f66cca31dcd5194f4d6" + sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" url: "https://pub.dev" source: hosted - version: "4.0.4" + version: "4.0.5" google_mlkit_barcode_scanning: dependency: transitive description: @@ -738,10 +866,10 @@ packages: dependency: transitive description: name: http - sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba url: "https://pub.dev" source: hosted - version: "0.13.6" + version: "1.2.0" http_multi_server: dependency: transitive description: @@ -758,6 +886,70 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" + url: "https://pub.dev" + source: hosted + version: "1.0.8" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" + url: "https://pub.dev" + source: hosted + version: "0.8.9+6" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 + url: "https://pub.dev" + source: hosted + version: "0.8.9+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b + url: "https://pub.dev" + source: hosted + version: "2.9.3" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" intl: dependency: "direct main" description: @@ -958,6 +1150,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_parsing: dependency: transitive description: @@ -1062,14 +1262,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.1" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" provider: dependency: transitive description: @@ -1086,14 +1278,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - pub_updater: - dependency: transitive - description: - name: pub_updater - sha256: "05ae70703e06f7fdeb05f7f02dd680b8aad810e87c756a618f33e1794635115c" - url: "https://pub.dev" - source: hosted - version: "0.3.0" pubspec_parse: dependency: transitive description: @@ -1278,10 +1462,11 @@ packages: survey_form: dependency: "direct main" description: - path: "../survey_form" - relative: true - source: path - version: "0.0.1-dev.1" + name: survey_form + sha256: "52532fb3fae06883828d22f870045587bf7122f67cb4de236c82ad4d6de1d7d7" + url: "https://pub.dev" + source: hosted + version: "0.0.1-dev.2" synchronized: dependency: transitive description: @@ -1346,6 +1531,86 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + url_launcher: + dependency: transitive + description: + name: url_launcher + sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" + url: "https://pub.dev" + source: hosted + version: "6.3.0" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "17cd5e205ea615e2c6ea7a77323a11712dffa0720a8a90540db57a01347f9ad9" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" + url: "https://pub.dev" + source: hosted + version: "6.2.4" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 + url: "https://pub.dev" + source: hosted + version: "3.1.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + url: "https://pub.dev" + source: hosted + version: "2.2.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" + url: "https://pub.dev" + source: hosted + version: "3.1.2" uuid: dependency: "direct main" description: @@ -1358,26 +1623,26 @@ packages: dependency: transitive description: name: vector_graphics - sha256: "4ac59808bbfca6da38c99f415ff2d3a5d7ca0a6b4809c71d9cf30fba5daf9752" + sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: f3247e7ab0ec77dc759263e68394990edc608fb2b480b80db8aa86ed09279e33 + sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "18489bdd8850de3dd7ca8a34e0c446f719ec63e2bab2e7a8cc66a9028dd76c5a" + sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_math: dependency: transitive description: @@ -1386,6 +1651,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" vm_service: dependency: transitive description: diff --git a/packages/referral_reconciliation/pubspec.yaml b/packages/referral_reconciliation/pubspec.yaml index e9cbcad1d..6d477a0e2 100644 --- a/packages/referral_reconciliation/pubspec.yaml +++ b/packages/referral_reconciliation/pubspec.yaml @@ -33,15 +33,14 @@ dependencies: flutter_keyboard_visibility: ^5.4.0 auto_route: ^7.8.4 collection: ^1.16.0 - digit_data_model: ^1.0.3+3 + digit_data_model: ^1.0.5-dev.1 stream_transform: ^2.1.0 - survey_form: ^0.0.1-dev.1 + survey_form: ^0.0.1-dev.2 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^3.0.1 - dart_code_metrics: ^5.7.6 freezed: ^2.1.0+1 build_runner: ^2.4.7 json_serializable: ^6.4.0 diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 6ac489b13..87858286a 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -361,22 +361,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_code_metrics: - dependency: "direct dev" - description: - name: dart_code_metrics - sha256: "3dede3f7abc077a4181ec7445448a289a9ce08e2981e6a4d49a3fb5099d47e1f" - url: "https://pub.dev" - source: hosted - version: "5.7.6" - dart_code_metrics_presets: - dependency: transitive - description: - name: dart_code_metrics_presets - sha256: b71eadf02a3787ebd5c887623f83f6fdc204d45c75a081bd636c4104b3fd8b73 - url: "https://pub.dev" - source: hosted - version: "1.8.0" dart_mappable: dependency: "direct main" description: @@ -388,9 +372,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive @@ -447,6 +433,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" + digit_ui_components: + dependency: transitive + description: + name: digit_ui_components + sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae + url: "https://pub.dev" + source: hosted + version: "0.0.1+7" dio: dependency: transitive description: @@ -463,6 +457,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" drift: dependency: "direct main" description: @@ -519,6 +521,46 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 + url: "https://pub.dev" + source: hosted + version: "8.0.0+1" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + url: "https://pub.dev" + source: hosted + version: "0.9.2+1" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 + url: "https://pub.dev" + source: hosted + version: "0.9.4" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" fixnum: dependency: transitive description: @@ -540,6 +582,30 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.6" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" flutter_focus_watcher: dependency: transitive description: @@ -604,6 +670,11 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.2" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -620,14 +691,22 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" flutter_svg: dependency: "direct main" description: name: flutter_svg - sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c + sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" url: "https://pub.dev" source: hosted - version: "2.0.9" + version: "2.0.10+1" flutter_test: dependency: "direct dev" description: flutter @@ -686,6 +765,54 @@ packages: url: "https://pub.dev" source: hosted version: "3.2.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + url: "https://pub.dev" + source: hosted + version: "4.3.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" + url: "https://pub.dev" + source: hosted + version: "2.3.8+1" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -698,10 +825,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: "6b6f10f0ce3c42f6552d1c70d2c28d764cf22bb487f50f66cca31dcd5194f4d6" + sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" url: "https://pub.dev" source: hosted - version: "4.0.4" + version: "4.0.5" google_mlkit_barcode_scanning: dependency: transitive description: @@ -762,10 +889,10 @@ packages: dependency: transitive description: name: http - sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba url: "https://pub.dev" source: hosted - version: "0.13.6" + version: "1.2.0" http_multi_server: dependency: transitive description: @@ -782,6 +909,70 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" + url: "https://pub.dev" + source: hosted + version: "1.0.8" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" + url: "https://pub.dev" + source: hosted + version: "0.8.9+6" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 + url: "https://pub.dev" + source: hosted + version: "0.8.9+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b + url: "https://pub.dev" + source: hosted + version: "2.9.3" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" intl: dependency: "direct main" description: @@ -982,6 +1173,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_parsing: dependency: transitive description: @@ -1086,14 +1285,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.1" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" provider: dependency: transitive description: @@ -1110,14 +1301,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - pub_updater: - dependency: transitive - description: - name: pub_updater - sha256: "05ae70703e06f7fdeb05f7f02dd680b8aad810e87c756a618f33e1794635115c" - url: "https://pub.dev" - source: hosted - version: "0.3.0" pubspec_parse: dependency: transitive description: @@ -1302,10 +1485,11 @@ packages: survey_form: dependency: "direct main" description: - path: "../survey_form" - relative: true - source: path - version: "0.0.1-dev.1" + name: survey_form + sha256: "52532fb3fae06883828d22f870045587bf7122f67cb4de236c82ad4d6de1d7d7" + url: "https://pub.dev" + source: hosted + version: "0.0.1-dev.2" synchronized: dependency: transitive description: @@ -1370,6 +1554,86 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + url_launcher: + dependency: transitive + description: + name: url_launcher + sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" + url: "https://pub.dev" + source: hosted + version: "6.3.0" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "17cd5e205ea615e2c6ea7a77323a11712dffa0720a8a90540db57a01347f9ad9" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" + url: "https://pub.dev" + source: hosted + version: "6.2.4" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 + url: "https://pub.dev" + source: hosted + version: "3.1.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + url: "https://pub.dev" + source: hosted + version: "2.2.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" + url: "https://pub.dev" + source: hosted + version: "3.1.2" uuid: dependency: "direct main" description: @@ -1382,26 +1646,26 @@ packages: dependency: transitive description: name: vector_graphics - sha256: "4ac59808bbfca6da38c99f415ff2d3a5d7ca0a6b4809c71d9cf30fba5daf9752" + sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: f3247e7ab0ec77dc759263e68394990edc608fb2b480b80db8aa86ed09279e33 + sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "18489bdd8850de3dd7ca8a34e0c446f719ec63e2bab2e7a8cc66a9028dd76c5a" + sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_math: dependency: transitive description: @@ -1410,6 +1674,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" vm_service: dependency: transitive description: diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index 94bd90c5b..054a8ad42 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -32,7 +32,7 @@ dependencies: digit_scanner: ^1.0.3+1 gs1_barcode_parser: ^1.0.5 auto_route: ^7.8.4 - digit_data_model: ^1.0.3+3 + digit_data_model: ^1.0.5-dev.1 package_info_plus: ^5.0.1 digit_showcase: ^1.0.0 collection: ^1.16.0 @@ -40,13 +40,12 @@ dependencies: stream_transform: ^2.1.0 async: ^2.11.0 formula_parser: ^2.0.1 - survey_form: ^0.0.1-dev.1 + survey_form: ^0.0.1-dev.2 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^3.0.1 - dart_code_metrics: ^5.7.6 freezed: ^2.1.0+1 json_serializable: ^6.4.0 drift_dev: ^2.14.1 diff --git a/packages/survey_form/pubspec.lock b/packages/survey_form/pubspec.lock index b7d22952d..6d3f52984 100644 --- a/packages/survey_form/pubspec.lock +++ b/packages/survey_form/pubspec.lock @@ -260,9 +260,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.0" dart_style: dependency: transitive diff --git a/packages/survey_form/pubspec.yaml b/packages/survey_form/pubspec.yaml index 20c60bcee..e6f725239 100644 --- a/packages/survey_form/pubspec.yaml +++ b/packages/survey_form/pubspec.yaml @@ -38,7 +38,11 @@ dev_dependencies: freezed: ^2.2.0 bloc_test: ^9.1.0 mocktail: ^1.0.2 - dart_mappable_builder: ^4.2.0 + dart_mappable_builder: + git: + url: https://github.com/egovernments/health-campaign-field-worker-app/ + ref: master + path: ./packages/dart_mappable_builder drift_dev: ^2.14.1 auto_route_generator: ^7.3.2 From 897435daa5e21539462324470ee2a27f6520d6f9 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Wed, 20 Nov 2024 16:33:43 +0530 Subject: [PATCH 163/241] Removing the additional fields if item is singlevaluelist. --- .../lib/pages/survey_form_view.dart | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/packages/survey_form/lib/pages/survey_form_view.dart b/packages/survey_form/lib/pages/survey_form_view.dart index fa02949dc..6f02544c9 100644 --- a/packages/survey_form/lib/pages/survey_form_view.dart +++ b/packages/survey_form/lib/pages/survey_form_view.dart @@ -773,6 +773,38 @@ class SurveyFormViewPageState extends LocalizedState { ); }, ), + BlocBuilder( + builder: (context, state) { + return (controller[index].text == item.values?[1].trim() && + !(isHealthFacilityWorker && + widget.referralClientRefId != null) && item.dataType != 'SingleValueList') + ? Padding( + padding: const EdgeInsets.only( + left: 4.0, + right: 4.0, + bottom: 16, + ), + child: DigitTextField( + maxLength: 1000, + isRequired: true, + controller: additionalController[index], + label: localizations.translate( + '${selectedServiceDefinition?.code}.${item.code}.ADDITIONAL_FIELD', + ), + validator: (value1) { + if (value1 == null || value1 == '') { + return localizations.translate( + i18.common.coreCommonReasonRequired, + ); + } + + return null; + }, + ), + ) + : const SizedBox(); + }, + ), BlocBuilder( builder: (context, state) { final hasError = (item.required == true && From d77c367e7ab8cb6fe4b165ef45b44ff424dcaccf Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Thu, 21 Nov 2024 12:37:42 +0530 Subject: [PATCH 164/241] merge conflicts --- .../lib/data/network_manager.dart | 1 - .../data/repositories/sync/remote_type.dart | 1 + .../lib/pages/home.dart | 27 +- .../lib/router/app_router.dart | 13 +- .../lib/utils/constants.dart | 2 +- .../lib/utils/extensions/extensions.dart | 4 +- .../lib/utils/utils.dart | 6 +- .../pubspec.lock | 7 +- .../lib/pages/closed_household_details.dart | 269 ++--- .../registration/complaints_location.dart | 3 +- packages/digit_data_model/pubspec.lock | 10 +- packages/digit_scanner/pubspec.lock | 174 +--- .../record_referral_details.dart | 4 +- .../beneficiary/beneficiary_details.dart | 502 ++++----- .../beneficiary/delivery_summary_page.dart | 588 ++++++----- .../pages/beneficiary/refused_delivery.dart | 325 +++--- .../individual_details.dart | 983 +++++++++--------- .../lib/utils/utils.dart | 5 +- .../lib/widgets/member_card/member_card.dart | 3 +- .../lib/models/entities/service.dart | 1 - .../models/entities/service_attributes.dart | 3 +- packages/survey_form/pubspec.lock | 416 ++------ 22 files changed, 1526 insertions(+), 1821 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/data/network_manager.dart b/apps/health_campaign_field_worker_app/lib/data/network_manager.dart index 77c232625..34125ce56 100644 --- a/apps/health_campaign_field_worker_app/lib/data/network_manager.dart +++ b/apps/health_campaign_field_worker_app/lib/data/network_manager.dart @@ -2,7 +2,6 @@ import 'package:digit_data_model/data_model.dart'; import 'package:flutter/cupertino.dart'; import 'package:provider/provider.dart'; - class NetworkManager { final NetworkManagerConfiguration configuration; diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/sync/remote_type.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/sync/remote_type.dart index e69de29bb..8b1378917 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/sync/remote_type.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/sync/remote_type.dart @@ -0,0 +1 @@ + diff --git a/apps/health_campaign_field_worker_app/lib/pages/home.dart b/apps/health_campaign_field_worker_app/lib/pages/home.dart index 185870547..c80634670 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/home.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/home.dart @@ -2,11 +2,10 @@ import 'dart:async'; import 'package:attendance_management/attendance_management.dart'; import 'package:attendance_management/router/attendance_router.gm.dart'; -import 'package:survey_form/survey_form.dart'; -import 'package:complaints/complaints.dart'; -import 'package:complaints/router/complaints_router.gm.dart'; import 'package:closed_household/closed_household.dart'; import 'package:closed_household/router/closed_household_router.gm.dart'; +import 'package:complaints/complaints.dart'; +import 'package:complaints/router/complaints_router.gm.dart'; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/widgets/atoms/digit_toaster.dart'; @@ -31,6 +30,7 @@ import 'package:referral_reconciliation/router/referral_reconciliation_router.gm import 'package:registration_delivery/registration_delivery.dart'; import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; import 'package:survey_form/router/survey_form_router.gm.dart'; +import 'package:survey_form/survey_form.dart'; import 'package:sync_service/blocs/sync/sync.dart'; import '../blocs/app_initialization/app_initialization.dart'; @@ -501,7 +501,8 @@ class _HomePageState extends LocalizedState { homeShowcaseData.warehouseManagerManageStock.showcaseKey, i18.home.stockReconciliationLabel: homeShowcaseData.wareHouseManagerStockReconciliation.showcaseKey, - i18.home.mySurveyForm: homeShowcaseData.supervisorMySurveyForm.showcaseKey, + i18.home.mySurveyForm: + homeShowcaseData.supervisorMySurveyForm.showcaseKey, i18.home.fileComplaint: homeShowcaseData.distributorFileComplaint.showcaseKey, i18.home.syncDataLabel: homeShowcaseData.distributorSyncData.showcaseKey, @@ -714,14 +715,18 @@ void setPackagesSingleton(BuildContext context) { loggedInIndividualId: context.loggedInIndividualId ?? '', loggedInUserUuid: context.loggedInUserUuid, appVersion: Constants().version, - isHealthFacilityWorker: context.loggedInUserRoles.where((role) => role.code == RolesType.healthFacilityWorker.toValue()).toList().isNotEmpty, + isHealthFacilityWorker: context.loggedInUserRoles + .where((role) => + role.code == RolesType.healthFacilityWorker.toValue()) + .toList() + .isNotEmpty, roles: context.read().state.maybeMap( - orElse: () => const Offstage(), - authenticated: (res) { - return res.userModel.roles - .map((e) => e.code.snakeCase.toUpperCase()) - .toList(); - }), + orElse: () => const Offstage(), + authenticated: (res) { + return res.userModel.roles + .map((e) => e.code.snakeCase.toUpperCase()) + .toList(); + }), ); ReferralReconSingleton().setInitialData( diff --git a/apps/health_campaign_field_worker_app/lib/router/app_router.dart b/apps/health_campaign_field_worker_app/lib/router/app_router.dart index 8ff4140a2..f588a1f49 100644 --- a/apps/health_campaign_field_worker_app/lib/router/app_router.dart +++ b/apps/health_campaign_field_worker_app/lib/router/app_router.dart @@ -6,20 +6,20 @@ import 'package:closed_household/router/closed_household_router.gm.dart'; import 'package:complaints/router/complaints_router.dart'; import 'package:complaints/router/complaints_router.gm.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_data_model/data_model.dart'; import 'package:digit_dss/router/dashboard_router.dart'; import 'package:digit_dss/router/dashboard_router.gm.dart'; import 'package:digit_scanner/router/digit_scanner_router.dart'; import 'package:digit_scanner/router/digit_scanner_router.gm.dart'; -import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:inventory_management/router/inventory_router.dart'; import 'package:inventory_management/router/inventory_router.gm.dart'; -import 'package:survey_form/router/survey_form_router.dart'; -import 'package:survey_form/router/survey_form_router.gm.dart'; import 'package:referral_reconciliation/router/referral_reconciliation_router.dart'; import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart'; import 'package:registration_delivery/router/registration_delivery_router.dart'; import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; +import 'package:survey_form/router/survey_form_router.dart'; +import 'package:survey_form/router/survey_form_router.gm.dart'; import '../blocs/localization/app_localization.dart'; import '../pages/acknowledgement.dart'; @@ -101,10 +101,13 @@ class AppRouter extends _$AppRouter { path: '', ), AutoRoute( - page: SurveyFormBoundaryViewRoute.page, path: 'view-boundary'), + page: SurveyFormBoundaryViewRoute.page, + path: 'view-boundary'), AutoRoute(page: SurveyFormViewRoute.page, path: 'view'), AutoRoute(page: SurveyFormPreviewRoute.page, path: 'preview'), - AutoRoute(page: SurveyFormAcknowledgementRoute.page, path: 'surveyForm-acknowledgement'), + AutoRoute( + page: SurveyFormAcknowledgementRoute.page, + path: 'surveyForm-acknowledgement'), ]), AutoRoute( page: BeneficiaryAcknowledgementRoute.page, diff --git a/apps/health_campaign_field_worker_app/lib/utils/constants.dart b/apps/health_campaign_field_worker_app/lib/utils/constants.dart index 25d324568..1b2eda364 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/constants.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/constants.dart @@ -25,8 +25,8 @@ import '../data/local_store/no_sql/schema/project_types.dart'; import '../data/local_store/no_sql/schema/row_versions.dart'; import '../data/local_store/no_sql/schema/service_registry.dart'; import '../data/repositories/remote/downsync.dart'; -import '../data/sync_service_mapper.dart'; import '../data/sync_registry.dart'; +import '../data/sync_service_mapper.dart'; import '../firebase_options.dart'; import 'environment_config.dart'; import 'utils.dart'; diff --git a/apps/health_campaign_field_worker_app/lib/utils/extensions/extensions.dart b/apps/health_campaign_field_worker_app/lib/utils/extensions/extensions.dart index db213625c..d2a24e841 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/extensions/extensions.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/extensions/extensions.dart @@ -1,7 +1,7 @@ -import 'package:attendance_management/attendance_management.dart'; -import 'package:closed_household/utils/utils.dart'; import 'dart:async'; +import 'package:attendance_management/attendance_management.dart'; +import 'package:closed_household/utils/utils.dart'; import 'package:collection/collection.dart'; import 'package:complaints/utils/utils.dart'; import 'package:digit_data_model/data_model.dart'; diff --git a/apps/health_campaign_field_worker_app/lib/utils/utils.dart b/apps/health_campaign_field_worker_app/lib/utils/utils.dart index a8568b8ad..a48608bd8 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/utils.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/utils.dart @@ -5,7 +5,6 @@ import 'dart:io'; import 'package:attendance_management/attendance_management.dart' as attendance_mappers; - import 'package:complaints/complaints.init.dart' as complaints_mappers; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:digit_components/theme/digit_theme.dart'; @@ -27,8 +26,7 @@ import 'package:referral_reconciliation/referral_reconciliation.dart' as referral_reconciliation_mappers; import 'package:registration_delivery/registration_delivery.init.dart' as registration_delivery_mappers; -import 'package:survey_form/survey_form.init.dart' - as survey_form_mappers; +import 'package:survey_form/survey_form.init.dart' as survey_form_mappers; import '../blocs/app_initialization/app_initialization.dart'; import '../blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart'; @@ -495,4 +493,4 @@ class LocalizationParams { Locale? get locale => _locale; bool? get exclude => _exclude; -} \ No newline at end of file +} diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index b262e66d0..533d29701 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -426,9 +426,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../../packages/dart_mappable_builder" - relative: true - source: path + name: dart_mappable_builder + sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e + url: "https://pub.dev" + source: hosted version: "4.2.3" dart_style: dependency: transitive diff --git a/packages/closed_household/lib/pages/closed_household_details.dart b/packages/closed_household/lib/pages/closed_household_details.dart index 040723869..9ee4fe3b7 100644 --- a/packages/closed_household/lib/pages/closed_household_details.dart +++ b/packages/closed_household/lib/pages/closed_household_details.dart @@ -95,147 +95,150 @@ class ClosedHouseholdDetailsPageState ], ), footer: DigitCard( - padding: EdgeInsets.all(theme.spacerTheme.spacer2), - children: [ - BlocBuilder( - builder: (context, locationState) { - return Button( - size: ButtonSize.large, - type: ButtonType.primary, - mainAxisSize: MainAxisSize.max, - onPressed: () { - if(!form.valid && form - .control( - _householdHeadNameKey,) - .value.length>0) { - return; - } - final String? householdHeadName = form - .control(_householdHeadNameKey) - .value as String?; + padding: EdgeInsets.all(theme.spacerTheme.spacer2), + children: [ + BlocBuilder( + builder: (context, locationState) { + return Button( + size: ButtonSize.large, + type: ButtonType.primary, + mainAxisSize: MainAxisSize.max, + onPressed: () { + if (!form.valid && + form + .control( + _householdHeadNameKey, + ) + .value + .length > + 0) { + return; + } + final String? householdHeadName = form + .control(_householdHeadNameKey) + .value as String?; - context.read().add( - ClosedHouseholdEvent.handleSummary( - latitude: locationState.latitude!, - longitude: locationState.longitude!, - locationAccuracy: locationState.accuracy!, - householdHeadName: householdHeadName != null && - householdHeadName.trim().isNotEmpty - ? householdHeadName - : null, - ), - ); + context.read().add( + ClosedHouseholdEvent.handleSummary( + latitude: locationState.latitude!, + longitude: locationState.longitude!, + locationAccuracy: locationState.accuracy!, + householdHeadName: householdHeadName != + null && + householdHeadName.trim().isNotEmpty + ? householdHeadName + : null, + ), + ); - context.router.push(ClosedHouseholdSummaryRoute()); - }, - label: localizations.translate( + context.router.push(ClosedHouseholdSummaryRoute()); + }, + label: localizations.translate( i18.common.coreCommonNext, - ), - ); - }, - ),] - ), + ), + ); + }, + ), + ]), slivers: [ SliverToBoxAdapter( - child: DigitCard( - children: [ - DigitTextBlock( - heading: localizations.translate( - i18.closeHousehold.closeHouseHoldDetailLabel, - ), - headingStyle: theme.textTheme.displayMedium, - description: localizations.translate( - i18.closeHousehold.closeHouseHoldDetailDescLabel, - ), + child: DigitCard(children: [ + DigitTextBlock( + heading: localizations.translate( + i18.closeHousehold.closeHouseHoldDetailLabel, ), - DigitCard(children: [ - ReactiveWrapperField( - formControlName: - _administrationAreaKey, - showErrors: (control) => - control.invalid && - control.touched, - // Ensures error is shown if invalid and touched - builder: (field) { - return LabeledField( - label: localizations.translate( - i18.closeHousehold.villageName, - ), - child: DigitTextFormInput( - errorMessage: field.errorText, - readOnly: true, - initialValue: form - .control( - _administrationAreaKey) - .value, - ), - ); - }), - ReactiveWrapperField( - formControlName: - _accuracyKey, - showErrors: (control) => - control.invalid && - control.touched, - // Ensures error is shown if invalid and touched - builder: (field) { - return LabeledField( - label: localizations.translate( - i18.closeHousehold.accuracyLabel, - ), - child: DigitTextFormInput( - errorMessage: field.errorText, - readOnly: true, - initialValue: (form - .control( - _accuracyKey,) - .value).toString(), - ), - ); - }), - ReactiveWrapperField( - validationMessages: { - 'maxLength': (_) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', maxLength.toString()), - 'minLength': (_) => localizations - .translate(i18.common.min2CharsRequired) - .replaceAll('{}', '2'), - }, - formControlName: - _householdHeadNameKey, - showErrors: (control) => - control.invalid && - control.touched && control.value != '', - // Ensures error is shown if invalid and touched - builder: (field) { - return LabeledField( - label: localizations.translate( - i18.closeHousehold.headNameLabel, - ), - child: DigitTextFormInput( - maxLength: 64, - charCount: true, - onChange: (val) => { - form - .control( - _householdHeadNameKey,) - .markAsTouched(), - form + headingStyle: theme.textTheme.displayMedium, + description: localizations.translate( + i18.closeHousehold.closeHouseHoldDetailDescLabel, + ), + ), + DigitCard(children: [ + ReactiveWrapperField( + formControlName: _administrationAreaKey, + showErrors: (control) => + control.invalid && control.touched, + // Ensures error is shown if invalid and touched + builder: (field) { + return LabeledField( + label: localizations.translate( + i18.closeHousehold.villageName, + ), + child: DigitTextFormInput( + errorMessage: field.errorText, + readOnly: true, + initialValue: + form.control(_administrationAreaKey).value, + ), + ); + }), + ReactiveWrapperField( + formControlName: _accuracyKey, + showErrors: (control) => + control.invalid && control.touched, + // Ensures error is shown if invalid and touched + builder: (field) { + return LabeledField( + label: localizations.translate( + i18.closeHousehold.accuracyLabel, + ), + child: DigitTextFormInput( + errorMessage: field.errorText, + readOnly: true, + initialValue: (form .control( - _householdHeadNameKey,) - .value = val, - }, - errorMessage: field.errorText, - initialValue: form + _accuracyKey, + ) + .value) + .toString(), + ), + ); + }), + ReactiveWrapperField( + validationMessages: { + 'maxLength': (_) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', maxLength.toString()), + 'minLength': (_) => localizations + .translate(i18.common.min2CharsRequired) + .replaceAll('{}', '2'), + }, + formControlName: _householdHeadNameKey, + showErrors: (control) => + control.invalid && + control.touched && + control.value != '', + // Ensures error is shown if invalid and touched + builder: (field) { + return LabeledField( + label: localizations.translate( + i18.closeHousehold.headNameLabel, + ), + child: DigitTextFormInput( + maxLength: 64, + charCount: true, + onChange: (val) => { + form .control( - _householdHeadNameKey,) - .value, - ), - ); - }), - ]),] - ), + _householdHeadNameKey, + ) + .markAsTouched(), + form + .control( + _householdHeadNameKey, + ) + .value = val, + }, + errorMessage: field.errorText, + initialValue: form + .control( + _householdHeadNameKey, + ) + .value, + ), + ); + }), + ]), + ]), ), ], ); diff --git a/packages/complaints/lib/pages/registration/complaints_location.dart b/packages/complaints/lib/pages/registration/complaints_location.dart index 653ca27d2..741515e4b 100644 --- a/packages/complaints/lib/pages/registration/complaints_location.dart +++ b/packages/complaints/lib/pages/registration/complaints_location.dart @@ -6,13 +6,12 @@ import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; -import '../../models/pgr_address.dart'; import '/blocs/complaints_registration/complaints_registration.dart'; import '/utils/i18_key_constants.dart' as i18; import '/utils/utils.dart'; import '/widgets/header/back_navigation_help_header.dart'; import '/widgets/localized.dart'; - +import '../../models/pgr_address.dart'; @RoutePage() class ComplaintsLocationPage extends LocalizedStatefulWidget { diff --git a/packages/digit_data_model/pubspec.lock b/packages/digit_data_model/pubspec.lock index 9708ad4af..7986e07c0 100644 --- a/packages/digit_data_model/pubspec.lock +++ b/packages/digit_data_model/pubspec.lock @@ -228,10 +228,12 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.3" + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git + version: "4.2.0" dart_style: dependency: transitive description: diff --git a/packages/digit_scanner/pubspec.lock b/packages/digit_scanner/pubspec.lock index 8c4dc66e6..5c9c14d25 100644 --- a/packages/digit_scanner/pubspec.lock +++ b/packages/digit_scanner/pubspec.lock @@ -17,14 +17,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.4.1" - ansicolor: - dependency: transitive - description: - name: ansicolor - sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" - url: "https://pub.dev" - source: hosted - version: "2.0.3" archive: dependency: transitive description: @@ -309,10 +301,10 @@ packages: dependency: transitive description: name: cross_file - sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" + sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e url: "https://pub.dev" source: hosted - version: "0.3.4+2" + version: "0.3.3+8" crypto: dependency: transitive description: @@ -329,21 +321,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_mappable: - dependency: transitive - description: - name: dart_mappable - sha256: "47269caf2060533c29b823ff7fa9706502355ffcb61e7f2a374e3a0fb2f2c3f0" - url: "https://pub.dev" - source: hosted - version: "4.2.2" - dart_mappable_builder: - dependency: "direct overridden" - description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.3" dart_style: dependency: transitive description: @@ -363,49 +340,19 @@ packages: digit_components: dependency: "direct main" description: - path: "../digit_components" - relative: true - source: path - version: "1.0.2" - digit_data_model: - dependency: "direct overridden" - description: - path: "../digit_data_model" - relative: true - source: path - version: "1.0.4" - dio: - dependency: transitive - description: - name: dio - sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" - url: "https://pub.dev" - source: hosted - version: "5.7.0" - dio_web_adapter: - dependency: transitive - description: - name: dio_web_adapter - sha256: "33259a9276d6cea88774a0000cfae0d861003497755969c92faa223108620dc8" + name: digit_components + sha256: "07b585e5d8010639366da72a4a8b215ce9b8790c75b2162b66af3cea57ca35d9" url: "https://pub.dev" source: hosted - version: "2.0.0" - drift: - dependency: transitive - description: - name: drift - sha256: "15b51e0ee1970455c0c3f7e560f3ac02ecb9c04711a9657586e470b234659dba" - url: "https://pub.dev" - source: hosted - version: "2.20.0" + version: "1.0.2+1" easy_stepper: dependency: transitive description: name: easy_stepper - sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" + sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" url: "https://pub.dev" source: hosted - version: "0.8.5+1" + version: "0.5.2+1" fake_async: dependency: transitive description: @@ -515,11 +462,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.0" - flutter_localizations: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -566,10 +508,10 @@ packages: dependency: transitive description: name: fluttertoast - sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" + sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" url: "https://pub.dev" source: hosted - version: "8.2.8" + version: "8.2.5" freezed: dependency: "direct dev" description: @@ -606,10 +548,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 + sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" url: "https://pub.dev" source: hosted - version: "6.2.1" + version: "4.0.5" google_mlkit_barcode_scanning: dependency: "direct main" description: @@ -654,10 +596,10 @@ packages: dependency: transitive description: name: http - sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba url: "https://pub.dev" source: hosted - version: "1.2.2" + version: "1.2.0" http_multi_server: dependency: transitive description: @@ -678,10 +620,10 @@ packages: dependency: transitive description: name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" url: "https://pub.dev" source: hosted - version: "0.19.0" + version: "0.18.1" io: dependency: transitive description: @@ -690,22 +632,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" - isar: - dependency: transitive - description: - name: isar - sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - isar_flutter_libs: - dependency: transitive - description: - name: isar_flutter_libs - sha256: bc6768cc4b9c61aabff77152e7f33b4b17d2fc93134f7af1c3dd51500fe8d5e8 - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" js: dependency: transitive description: @@ -766,26 +692,26 @@ packages: dependency: transitive description: name: location - sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" + sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" url: "https://pub.dev" source: hosted - version: "6.0.2" + version: "5.0.3" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" + sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "3.1.2" location_web: dependency: transitive description: name: location_web - sha256: "15ad7b4c8a9f55abee513373755e093a40c04d7e24fc1b4f89676fe99523d034" + sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "4.2.0" logging: dependency: transitive description: @@ -798,10 +724,10 @@ packages: dependency: transitive description: name: lottie - sha256: "6a24ade5d3d918c306bb1c21a6b9a04aab0489d51a2582522eea820b4093b62b" + sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "2.7.0" matcher: dependency: transitive description: @@ -878,18 +804,18 @@ packages: dependency: transitive description: name: package_info_plus - sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 + sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" url: "https://pub.dev" source: hosted - version: "8.0.2" + version: "5.0.1" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 + sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "2.0.1" path: dependency: "direct main" description: @@ -1022,26 +948,18 @@ packages: dependency: transitive description: name: reactive_flutter_typeahead - sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a + sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "0.8.1" reactive_forms: - dependency: "direct main" - description: - name: reactive_forms - sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" - url: "https://pub.dev" - source: hosted - version: "17.0.1" - recase: dependency: transitive description: - name: recase - sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 + name: reactive_forms + sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" url: "https://pub.dev" source: hosted - version: "4.1.0" + version: "14.3.0" remove_emoji_input_formatter: dependency: transitive description: @@ -1135,22 +1053,6 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.0" - sqlite3: - dependency: transitive - description: - name: sqlite3 - sha256: "45f168ae2213201b54e09429ed0c593dc2c88c924a1488d6f9c523a255d567cb" - url: "https://pub.dev" - source: hosted - version: "2.4.6" - sqlite3_flutter_libs: - dependency: transitive - description: - name: sqlite3_flutter_libs - sha256: "62bbb4073edbcdf53f40c80775f33eea01d301b7b81417e5b3fb7395416258c1" - url: "https://pub.dev" - source: hosted - version: "0.5.24" stack_trace: dependency: transitive description: @@ -1231,14 +1133,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" - type_plus: - dependency: transitive - description: - name: type_plus - sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 - url: "https://pub.dev" - source: hosted - version: "2.1.1" typed_data: dependency: transitive description: @@ -1307,10 +1201,10 @@ packages: dependency: transitive description: name: web - sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062 + sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05" url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "0.4.2" web_socket_channel: dependency: transitive description: diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart index 332fe102c..25f83dc37 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart @@ -1,10 +1,9 @@ import 'package:auto_route/auto_route.dart'; +import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/dropdown_wrapper.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; -import 'package:survey_form/survey_form.dart'; -import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -12,6 +11,7 @@ import 'package:reactive_forms/reactive_forms.dart'; import 'package:referral_reconciliation/models/entities/referral_recon_enums.dart'; import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart'; import 'package:referral_reconciliation/utils/extensions/extensions.dart'; +import 'package:survey_form/survey_form.dart'; import '../../../utils/i18_key_constants.dart' as i18; import '../../blocs/referral_recon_record.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart index 474ce176e..43e21e3c6 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart @@ -146,282 +146,288 @@ class BeneficiaryDetailsPageState return cycles != null && cycles.isNotEmpty ? deliverState.hasCycleArrived ? DigitCard( - margin: const EdgeInsets.only( - top: spacer2), + margin: + const EdgeInsets.only(top: spacer2), padding: const EdgeInsets.all(spacer2), - children: [Button( - label: '${localizations.translate(i18.beneficiaryDetails.recordCycle)} ' - '${(deliverState.cycle == 0 ? (deliverState.cycle + 1) - : deliverState.cycle).toString()} ${localizations.translate(i18.deliverIntervention.dose)} ' - '${(deliverState.dose).toString()}', - type: ButtonType.primary, - size: ButtonSize.large, - mainAxisSize: MainAxisSize.max, - onPressed: () async { - final selectedCycle = - cycles.firstWhereOrNull((c) => - c.id == deliverState.cycle); - if (selectedCycle != null) { - bloc.add( - DeliverInterventionEvent - .selectFutureCycleDose( - dose: deliverState.dose, - cycle: - RegistrationDeliverySingleton() - .projectType! - .cycles! - .firstWhere((c) => - c.id == - deliverState - .cycle), - individualModel: - state.selectedIndividual, - ), - ); - showPopup( - context: context, - title: localizations.translate(i18.beneficiaryDetails.resourcesTobeDelivered), - type: PopUpType.simple, - additionalWidgets: [ - buildTableContent( - deliverState, - context, - variant, - state.selectedIndividual, - state.householdMemberWrapper.household + children: [ + Button( + label: + '${localizations.translate(i18.beneficiaryDetails.recordCycle)} ' + '${(deliverState.cycle == 0 ? (deliverState.cycle + 1) : deliverState.cycle).toString()} ${localizations.translate(i18.deliverIntervention.dose)} ' + '${(deliverState.dose).toString()}', + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () async { + final selectedCycle = cycles + .firstWhereOrNull((c) => + c.id == + deliverState.cycle); + if (selectedCycle != null) { + bloc.add( + DeliverInterventionEvent + .selectFutureCycleDose( + dose: deliverState.dose, + cycle: + RegistrationDeliverySingleton() + .projectType! + .cycles! + .firstWhere((c) => + c.id == + deliverState + .cycle), + individualModel: state + .selectedIndividual, ), - ], - actions: [ - Button( - label: localizations.translate(i18.beneficiaryDetails.ctaProceed), - onPressed: () { - Navigator.of( + ); + showPopup( + context: context, + title: localizations + .translate(i18 + .beneficiaryDetails + .resourcesTobeDelivered), + type: PopUpType.simple, + additionalWidgets: [ + buildTableContent( + deliverState, context, - rootNavigator: true, - ).pop(); - router.push( - DeliverInterventionRoute(), - ); - }, - type: ButtonType.primary, - size: ButtonSize.large - ), - ] - ); - } - }, - ),] - ) + variant, + state + .selectedIndividual, + state + .householdMemberWrapper + .household), + ], + actions: [ + Button( + label: localizations + .translate(i18 + .beneficiaryDetails + .ctaProceed), + onPressed: () { + Navigator.of( + context, + rootNavigator: + true, + ).pop(); + router.push( + DeliverInterventionRoute(), + ); + }, + type: ButtonType + .primary, + size: ButtonSize + .large), + ]); + } + }, + ), + ]) : const SizedBox.shrink() : DigitCard( - margin: - const EdgeInsets.only(top: spacer2), - padding: const EdgeInsets.all( - spacer2), - children: [Button( - label: localizations.translate(i18.householdOverView - .householdOverViewActionText), - type: ButtonType.primary, - size: ButtonSize.large, - mainAxisSize: MainAxisSize.max, - onPressed: () { - context.router - .push(DeliverInterventionRoute()); - }, - ),] - ); + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [ + Button( + label: localizations.translate(i18 + .householdOverView + .householdOverViewActionText), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () { + context.router.push( + DeliverInterventionRoute()); + }, + ), + ]); }, ), children: [ DigitCard( - margin: const EdgeInsets.only( - top: spacer2,bottom: spacer2 - ), - children: [ - Text( - localizations.translate(i18 - .beneficiaryDetails - .beneficiarysDetailsLabelText), - style: textTheme.headingXl, - ), - DigitTableCard( - element: { - localizations.translate( - RegistrationDeliverySingleton() - .beneficiaryType != - BeneficiaryType.individual - ? i18.householdOverView - .householdOverViewHouseholdHeadLabel - : i18.common.coreCommonName, - ): RegistrationDeliverySingleton() - .beneficiaryType != - BeneficiaryType.individual - ? householdMemberWrapper - .headOfHousehold?.name?.givenName - : state.selectedIndividual?.name - ?.givenName ?? - '--', - localizations.translate( - i18.deliverIntervention.idTypeText, - ): () { - final identifiers = + margin: const EdgeInsets.only( + top: spacer2, bottom: spacer2), + children: [ + Text( + localizations.translate(i18.beneficiaryDetails + .beneficiarysDetailsLabelText), + style: textTheme.headingXl, + ), + DigitTableCard( + element: { + localizations.translate( RegistrationDeliverySingleton() .beneficiaryType != BeneficiaryType.individual - ? householdMemberWrapper - .headOfHousehold?.identifiers - : state.selectedIndividual - ?.identifiers; - if (identifiers == null || - identifiers.isEmpty) { - return '--'; - } + ? i18.householdOverView + .householdOverViewHouseholdHeadLabel + : i18.common.coreCommonName, + ): RegistrationDeliverySingleton() + .beneficiaryType != + BeneficiaryType.individual + ? householdMemberWrapper + .headOfHousehold?.name?.givenName + : state.selectedIndividual?.name + ?.givenName ?? + '--', + localizations.translate( + i18.deliverIntervention.idTypeText, + ): () { + final identifiers = + RegistrationDeliverySingleton() + .beneficiaryType != + BeneficiaryType.individual + ? householdMemberWrapper + .headOfHousehold?.identifiers + : state.selectedIndividual + ?.identifiers; + if (identifiers == null || + identifiers.isEmpty) { + return '--'; + } - return localizations.translate( - identifiers.first.identifierType ?? - '--'); - }(), - localizations.translate( - i18.deliverIntervention.idNumberText, - ): () { - final identifiers = - RegistrationDeliverySingleton() - .beneficiaryType != - BeneficiaryType.individual - ? householdMemberWrapper - .headOfHousehold?.identifiers - : state.selectedIndividual - ?.identifiers; - if (identifiers == null || - identifiers.isEmpty) { - return '--'; - } + return localizations.translate( + identifiers.first.identifierType ?? + '--'); + }(), + localizations.translate( + i18.deliverIntervention.idNumberText, + ): () { + final identifiers = + RegistrationDeliverySingleton() + .beneficiaryType != + BeneficiaryType.individual + ? householdMemberWrapper + .headOfHousehold?.identifiers + : state.selectedIndividual + ?.identifiers; + if (identifiers == null || + identifiers.isEmpty) { + return '--'; + } - return maskString(identifiers + return maskString(identifiers .first.identifierId .toString()); - }(), - localizations.translate( - i18.common.coreCommonAge, - ): () { - final dob = - RegistrationDeliverySingleton() - .beneficiaryType != - BeneficiaryType.individual - ? householdMemberWrapper - .headOfHousehold?.dateOfBirth - : state.selectedIndividual - ?.dateOfBirth; - if (dob == null || dob.isEmpty) { - return '--'; - } + }(), + localizations.translate( + i18.common.coreCommonAge, + ): () { + final dob = + RegistrationDeliverySingleton() + .beneficiaryType != + BeneficiaryType.individual + ? householdMemberWrapper + .headOfHousehold?.dateOfBirth + : state.selectedIndividual + ?.dateOfBirth; + if (dob == null || dob.isEmpty) { + return '--'; + } - final int years = - DigitDateUtils.calculateAge( - DigitDateUtils - .getFormattedDateToDateTime( - dob, - ) ?? - DateTime.now(), - ).years; - final int months = - DigitDateUtils.calculateAge( - DigitDateUtils - .getFormattedDateToDateTime( - dob, - ) ?? - DateTime.now(), - ).months; + final int years = + DigitDateUtils.calculateAge( + DigitDateUtils + .getFormattedDateToDateTime( + dob, + ) ?? + DateTime.now(), + ).years; + final int months = + DigitDateUtils.calculateAge( + DigitDateUtils + .getFormattedDateToDateTime( + dob, + ) ?? + DateTime.now(), + ).months; - return "$years ${localizations.translate(i18.memberCard.deliverDetailsYearText)} ${localizations.translate(months.toString().toUpperCase())} ${localizations.translate(i18.memberCard.deliverDetailsMonthsText)}"; - }(), - localizations.translate( - i18.common.coreCommonGender, - ): RegistrationDeliverySingleton() - .beneficiaryType != - BeneficiaryType.individual - ? householdMemberWrapper.headOfHousehold - ?.gender?.name.sentenceCase - : state.selectedIndividual?.gender?.name - .sentenceCase ?? - '--', - localizations.translate( - i18.common.coreCommonMobileNumber, - ): RegistrationDeliverySingleton() - .beneficiaryType != - BeneficiaryType.individual - ? householdMemberWrapper - .headOfHousehold?.mobileNumber - : state.selectedIndividual - ?.mobileNumber ?? - '--', - localizations.translate(i18 - .deliverIntervention - .dateOfRegistrationLabel): () { - final date = projectBeneficiary - ?.first?.dateOfRegistration; + return "$years ${localizations.translate(i18.memberCard.deliverDetailsYearText)} ${localizations.translate(months.toString().toUpperCase())} ${localizations.translate(i18.memberCard.deliverDetailsMonthsText)}"; + }(), + localizations.translate( + i18.common.coreCommonGender, + ): RegistrationDeliverySingleton() + .beneficiaryType != + BeneficiaryType.individual + ? householdMemberWrapper.headOfHousehold + ?.gender?.name.sentenceCase + : state.selectedIndividual?.gender?.name + .sentenceCase ?? + '--', + localizations.translate( + i18.common.coreCommonMobileNumber, + ): RegistrationDeliverySingleton() + .beneficiaryType != + BeneficiaryType.individual + ? householdMemberWrapper + .headOfHousehold?.mobileNumber + : state.selectedIndividual + ?.mobileNumber ?? + '--', + localizations.translate(i18 + .deliverIntervention + .dateOfRegistrationLabel): () { + final date = projectBeneficiary + ?.first?.dateOfRegistration; - final registrationDate = - DateTime.fromMillisecondsSinceEpoch( - date ?? - DateTime.now() - .millisecondsSinceEpoch, - ); + final registrationDate = + DateTime.fromMillisecondsSinceEpoch( + date ?? + DateTime.now() + .millisecondsSinceEpoch, + ); - return DateFormat('dd MMMM yyyy') - .format(registrationDate); - }(), - }, - ), - ] - ), + return DateFormat('dd MMMM yyyy') + .format(registrationDate); + }(), + }, + ), + ]), if ((RegistrationDeliverySingleton() .projectType ?.cycles ?? []) .isNotEmpty) DigitCard( - margin: const EdgeInsets.only( - top: spacer2,bottom: spacer2 - ), - children: [ - Column( - children: RegistrationDeliverySingleton() - .projectType - ?.cycles != - null - ? [ - BlocBuilder( - builder: (context, deliverState) { - return Column( - children: [ - (RegistrationDeliverySingleton() - .projectType - ?.cycles ?? - []) - .isNotEmpty - ? RecordDeliveryCycle( - projectCycles: - RegistrationDeliverySingleton() + margin: const EdgeInsets.only( + top: spacer2, bottom: spacer2), + children: [ + Column( + children: RegistrationDeliverySingleton() + .projectType + ?.cycles != + null + ? [ + BlocBuilder( + builder: (context, deliverState) { + return Column( + children: [ + (RegistrationDeliverySingleton() .projectType ?.cycles ?? - [], - taskData: - taskData ?? [], - individualModel: state - .selectedIndividual, - ) - : const Offstage(), - ], - ); - }, - ), - ] - : [], - ), - ] - ) + []) + .isNotEmpty + ? RecordDeliveryCycle( + projectCycles: + RegistrationDeliverySingleton() + .projectType + ?.cycles ?? + [], + taskData: + taskData ?? [], + individualModel: state + .selectedIndividual, + ) + : const Offstage(), + ], + ); + }, + ), + ] + : [], + ), + ]) ], ), ); diff --git a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart index 77f8d1c92..817f40fb1 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart @@ -44,351 +44,361 @@ class DeliverySummaryPageState extends LocalizedState { return ProductVariantBlocWrapper( child: Scaffold( body: BlocConsumer( - listener: (context, deliverState) { - final router = context.router; - }, - builder: (context, deliverState) { - return ScrollableContent( - enableFixedButton: true, - header: Column(children: [ - const BackNavigationHelpHeaderWidget( - showHelp: false, - showcaseButton: ShowcaseButton(), - ), - Padding( - padding: - const EdgeInsets.all(spacer2), - child: Align( - alignment: Alignment.centerLeft, - child: Text( - localizations.translate( - i18.common.coreCommonSummaryDetails, - ), - style: DigitTheme - .instance.mobileTheme.textTheme.displayMedium, - ), + listener: (context, deliverState) { + final router = context.router; + }, + builder: (context, deliverState) { + return ScrollableContent( + enableFixedButton: true, + header: Column(children: [ + const BackNavigationHelpHeaderWidget( + showHelp: false, + showcaseButton: ShowcaseButton(), + ), + Padding( + padding: const EdgeInsets.all(spacer2), + child: Align( + alignment: Alignment.centerLeft, + child: Text( + localizations.translate( + i18.common.coreCommonSummaryDetails, ), + style: DigitTheme + .instance.mobileTheme.textTheme.displayMedium, ), - ]), - footer: DigitCard( - margin: const EdgeInsets.only(top: spacer2), - padding: const EdgeInsets.all(spacer2), - children: [ - ValueListenableBuilder( - valueListenable: clickedStatus, - builder: (context, bool isClicked, _) { - return Button( - label: localizations.translate(i18.common.coreCommonNext), - type: ButtonType.primary, - size: ButtonSize.large, - mainAxisSize: MainAxisSize.max, - isDisabled: isClicked?true:false, - onPressed: () async { - final submit = await showDialog( - context: context, - builder: (ctx)=> Popup( - title: localizations.translate( - i18.deliverIntervention.dialogTitle), - description: localizations.translate( - i18.deliverIntervention.dialogContent), - actions: [ - Button( - label: localizations - .translate(i18.common.coreCommonSubmit), - onPressed: () { - clickedStatus.value = true; - Navigator.of(context, rootNavigator: true) - .pop(true); - }, - type: ButtonType.primary, - size: ButtonSize.large - ), - Button( - label: localizations - .translate(i18.common.coreCommonCancel), - onPressed:() => Navigator.of(context, + ), + ), + ]), + footer: DigitCard( + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [ + ValueListenableBuilder( + valueListenable: clickedStatus, + builder: (context, bool isClicked, _) { + return Button( + label: localizations + .translate(i18.common.coreCommonNext), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + isDisabled: isClicked ? true : false, + onPressed: () async { + final submit = await showDialog( + context: context, + builder: (ctx) => Popup( + title: localizations.translate( + i18.deliverIntervention.dialogTitle), + description: localizations.translate( + i18.deliverIntervention.dialogContent), + actions: [ + Button( + label: localizations.translate( + i18.common.coreCommonSubmit), + onPressed: () { + clickedStatus.value = true; + Navigator.of(context, + rootNavigator: true) + .pop(true); + }, + type: ButtonType.primary, + size: ButtonSize.large), + Button( + label: localizations.translate( + i18.common.coreCommonCancel), + onPressed: () => Navigator.of(context, rootNavigator: true) - .pop(false), - type: ButtonType.secondary, - size: ButtonSize.large - ), - ], - ), - ); - if (submit ?? false) { - if (context.mounted) { - context.read().add( + .pop(false), + type: ButtonType.secondary, + size: ButtonSize.large), + ], + ), + ); + if (submit ?? false) { + if (context.mounted) { + context.read().add( DeliverInterventionSubmitEvent( task: deliverState.oldTask!, isEditing: (deliverState.tasks ?? []) - .isNotEmpty && - RegistrationDeliverySingleton() - .beneficiaryType == - BeneficiaryType.household + .isNotEmpty && + RegistrationDeliverySingleton() + .beneficiaryType == + BeneficiaryType.household ? true : false, boundaryModel: - RegistrationDeliverySingleton() - .boundary!, + RegistrationDeliverySingleton() + .boundary!, ), ); - if (deliverState.futureDeliveries != null && - deliverState - .futureDeliveries!.isNotEmpty && - RegistrationDeliverySingleton() + if (deliverState.futureDeliveries != null && + deliverState.futureDeliveries!.isNotEmpty && + RegistrationDeliverySingleton() .projectType ?.cycles ?.isNotEmpty == - true) { - context.router.popUntilRouteWithName( - BeneficiaryWrapperRoute.name, - ); - context.router.push( - SplashAcknowledgementRoute( - enableBackToSearch: false, - ), - ); - } else { - final reloadState = + true) { + context.router.popUntilRouteWithName( + BeneficiaryWrapperRoute.name, + ); + context.router.push( + SplashAcknowledgementRoute( + enableBackToSearch: false, + ), + ); + } else { + final reloadState = context.read(); - reloadState.add( - HouseholdOverviewReloadEvent( - projectId: - RegistrationDeliverySingleton() - .projectId!, - projectBeneficiaryType: + reloadState.add( + HouseholdOverviewReloadEvent( + projectId: RegistrationDeliverySingleton() + .projectId!, + projectBeneficiaryType: RegistrationDeliverySingleton() .beneficiaryType!, - ), - ); - context.router.popAndPush( - HouseholdAcknowledgementRoute( - enableViewHousehold: true, - ), - ); - } - } + ), + ); + context.router.popAndPush( + HouseholdAcknowledgementRoute( + enableViewHousehold: true, + ), + ); } - }, - ); + } + } }, - ), - ] - ), - slivers: [ - SliverToBoxAdapter( - child: Column( - children: [ - DigitCard( - margin: const EdgeInsets.all(spacer2), - children: [ - LabelValueList( - heading: localizations.translate(i18 - .householdLocation.householdLocationLabelText), - withDivider: true, - labelFlex: 6, - items: [ - LabelValuePair( - label: localizations.translate( - i18.householdLocation.villageLabel), - value: deliverState.householdMemberWrapper - ?.household?.address?.locality?.code + ); + }, + ), + ]), + slivers: [ + SliverToBoxAdapter( + child: Column( + children: [ + DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ + LabelValueList( + heading: localizations.translate(i18 + .householdLocation + .householdLocationLabelText), + withDivider: true, + labelFlex: 6, + items: [ + LabelValuePair( + label: localizations.translate( + i18.householdLocation.villageLabel), + value: deliverState + .householdMemberWrapper + ?.household + ?.address + ?.locality + ?.code .split('_') .last .titleCase ?? - localizations - .translate(i18.common.coreCommonNA), - isInline: true), - LabelValuePair( - label: localizations.translate( - i18.householdLocation.landmarkFormLabel), - value: deliverState.householdMemberWrapper + localizations.translate( + i18.common.coreCommonNA), + isInline: true), + LabelValuePair( + label: localizations.translate(i18 + .householdLocation.landmarkFormLabel), + value: deliverState.householdMemberWrapper ?.household?.address?.landmark ?? - localizations - .translate(i18.common.coreCommonNA), - isInline: true), - ]), - ] - ), - DigitCard( - margin: const EdgeInsets.all(spacer2), - children: [ - LabelValueList( - heading: localizations.translate( - i18.householdDetails.householdDetailsLabel), - withDivider: true, - labelFlex: 6, - items: [ - LabelValuePair( - label: localizations.translate( - i18.beneficiaryDetails.totalMembers), - value: deliverState.householdMemberWrapper + localizations.translate( + i18.common.coreCommonNA), + isInline: true), + ]), + ]), + DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ + LabelValueList( + heading: localizations.translate( + i18.householdDetails.householdDetailsLabel), + withDivider: true, + labelFlex: 6, + items: [ + LabelValuePair( + label: localizations.translate( + i18.beneficiaryDetails.totalMembers), + value: deliverState.householdMemberWrapper ?.household?.memberCount .toString() ?? - '0', - isInline: true), - LabelValuePair( - label: localizations.translate(i18 - .householdDetails - .noOfPregnantWomenCountLabel), - value: deliverState.householdMemberWrapper - ?.household?.additionalFields?.fields - .where((h) => - h.key == - AdditionalFieldsType.pregnantWomen - .toValue()) - .firstOrNull - ?.value - .toString() ?? - '0', - isInline: true), - LabelValuePair( - label: localizations.translate(i18 - .householdDetails - .noOfChildrenBelow5YearsLabel), - value: deliverState.householdMemberWrapper - ?.household?.additionalFields?.fields + '0', + isInline: true), + LabelValuePair( + label: localizations.translate(i18 + .householdDetails + .noOfPregnantWomenCountLabel), + value: deliverState + .householdMemberWrapper + ?.household + ?.additionalFields + ?.fields .where((h) => - h.key == - AdditionalFieldsType.children - .toValue()) + h.key == + AdditionalFieldsType + .pregnantWomen + .toValue()) .firstOrNull ?.value .toString() ?? - '0', - isInline: true), - ]), - ] - ), - DigitCard( - margin: const EdgeInsets.all(spacer2), - children: [ - LabelValueList( - heading: localizations.translate( - i18.householdDetails.houseDetailsLabel), - withDivider: true, - labelFlex: 6, - items: [ - LabelValuePair( - label: localizations.translate( - i18.householdDetails.noOfRoomsLabel), - value: deliverState.householdMemberWrapper - ?.household?.additionalFields?.fields + '0', + isInline: true), + LabelValuePair( + label: localizations.translate(i18 + .householdDetails + .noOfChildrenBelow5YearsLabel), + value: deliverState + .householdMemberWrapper + ?.household + ?.additionalFields + ?.fields .where((h) => - h.key == - AdditionalFieldsType.noOfRooms - .toValue()) + h.key == + AdditionalFieldsType.children + .toValue()) .firstOrNull ?.value .toString() ?? - '0', - isInline: true), - LabelValuePair( - label: localizations.translate( - i18.householdDetails.typeOfStructure), - value: (deliverState + '0', + isInline: true), + ]), + ]), + DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ + LabelValueList( + heading: localizations.translate( + i18.householdDetails.houseDetailsLabel), + withDivider: true, + labelFlex: 6, + items: [ + LabelValuePair( + label: localizations.translate( + i18.householdDetails.noOfRoomsLabel), + value: deliverState .householdMemberWrapper ?.household ?.additionalFields ?.fields .where((h) => - h.key == - AdditionalFieldsType - .houseStructureTypes - .toValue()) + h.key == + AdditionalFieldsType.noOfRooms + .toValue()) .firstOrNull - ?.value ?? + ?.value + .toString() ?? + '0', + isInline: true), + LabelValuePair( + label: localizations.translate( + i18.householdDetails.typeOfStructure), + value: (deliverState + .householdMemberWrapper + ?.household + ?.additionalFields + ?.fields + .where((h) => + h.key == + AdditionalFieldsType + .houseStructureTypes + .toValue()) + .firstOrNull + ?.value ?? []) - .toString() - .split('|') - .map((item) => getLocalizedMessage(item)) - .toList() - .join(', '), - isInline: true), - ]), - ] - ), - BlocBuilder( - builder: (context, productState) { - final variants = productState.whenOrNull( - fetched: (productVariants) { - final resourcesDelivered = deliverState - .oldTask?.resources - ?.map((e) => TaskResourceInfo( - productVariants + .toString() + .split('|') + .map((item) => + getLocalizedMessage(item)) + .toList() + .join(', '), + isInline: true), + ]), + ]), + BlocBuilder( + builder: (context, productState) { + final variants = productState.whenOrNull( + fetched: (productVariants) { + final resourcesDelivered = deliverState + .oldTask?.resources + ?.map((e) => TaskResourceInfo( + productVariants .where((p) => - p.id == e.productVariantId) + p.id == e.productVariantId) .firstOrNull ?.sku ?? - productVariants - .where((p) => - p.id == e.productVariantId) - .firstOrNull - ?.variation ?? - i18.common.coreCommonNA, - e.quantity ?? '0')) - .toList(); - return resourcesDelivered; - }, - ); - return DigitCard( - margin: const EdgeInsets.all(spacer2), - children: [ - LabelValueList( - heading: localizations.translate( - '${RegistrationDeliverySingleton().selectedProject?.name.toUpperCase()}_${i18.deliverIntervention.deliveryDetailsLabel}_${deliverState.oldTask?.status}'), - withDivider: true, - labelFlex: 6, - items: [ - LabelValuePair( - label: localizations.translate(deliverState - .oldTask?.status == + productVariants + .where((p) => + p.id == e.productVariantId) + .firstOrNull + ?.variation ?? + i18.common.coreCommonNA, + e.quantity ?? '0')) + .toList(); + return resourcesDelivered; + }, + ); + return DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ + LabelValueList( + heading: localizations.translate( + '${RegistrationDeliverySingleton().selectedProject?.name.toUpperCase()}_${i18.deliverIntervention.deliveryDetailsLabel}_${deliverState.oldTask?.status}'), + withDivider: true, + labelFlex: 6, + items: [ + LabelValuePair( + label: localizations.translate(deliverState + .oldTask?.status == Status.administeredFailed .toValue() || - deliverState.oldTask?.status == - Status.beneficiaryRefused - .toValue() - ? i18.deliverIntervention - .reasonForRefusalLabel - : '${RegistrationDeliverySingleton().selectedProject?.name.toUpperCase()}_${i18.deliverIntervention.typeOfResourceUsed}'), - value: deliverState.oldTask?.status == + deliverState.oldTask?.status == + Status.beneficiaryRefused + .toValue() + ? i18.deliverIntervention + .reasonForRefusalLabel + : '${RegistrationDeliverySingleton().selectedProject?.name.toUpperCase()}_${i18.deliverIntervention.typeOfResourceUsed}'), + value: deliverState.oldTask?.status == Status.administeredFailed .toValue() || - deliverState.oldTask?.status == - Status.beneficiaryRefused - .toValue() - ? getLocalizedMessage(deliverState - .oldTask?.additionalFields?.fields + deliverState.oldTask?.status == + Status.beneficiaryRefused + .toValue() + ? getLocalizedMessage(deliverState + .oldTask + ?.additionalFields + ?.fields .where( (d) => - d.key == - AdditionalFieldsType - .reasonOfRefusal - .toValue(), - ) + d.key == + AdditionalFieldsType + .reasonOfRefusal + .toValue(), + ) .firstOrNull ?.value ?? - i18.common.coreCommonNA) - : variants + i18.common.coreCommonNA) + : variants ?.map((e) => - '${getLocalizedMessage(e.productName)} : ${e.quantityDelivered}') + '${getLocalizedMessage(e.productName)} : ${e.quantityDelivered}') .toList() .join('\n') ?? - localizations.translate( - i18.common.coreCommonNA), - ), - ]), - ] - ); - }), - ], - ), - ) - ]); - }, - )), + localizations.translate( + i18.common.coreCommonNA), + ), + ]), + ]); + }), + ], + ), + ) + ]); + }, + )), ); } } diff --git a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart index f82e5e753..3cbb32cde 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart @@ -65,197 +65,194 @@ class RefusedDeliveryPageState extends LocalizedState { ], ), footer: DigitCard( - margin: const EdgeInsets.only(top: spacer2), - padding: - const EdgeInsets.all(spacer2), - children: [ - Button( - label: localizations.translate( - i18.householdLocation.actionLabel, - ), - type: ButtonType.primary, - size: ButtonSize.large, - mainAxisSize: MainAxisSize.max, - onPressed: () { - form.markAllAsTouched(); + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [ + Button( + label: localizations.translate( + i18.householdLocation.actionLabel, + ), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () { + form.markAllAsTouched(); - if (form.control(_reasonOfRefusal).value == null) { - setState(() { - form - .control(_reasonOfRefusal) - .setErrors({'': true}); - }); - } + if (form.control(_reasonOfRefusal).value == + null) { + setState(() { + form + .control(_reasonOfRefusal) + .setErrors({'': true}); + }); + } - if (!form.valid) return; + if (!form.valid) return; - final reasonOfRefusal = - form.control(_reasonOfRefusal).value; + final reasonOfRefusal = + form.control(_reasonOfRefusal).value; - final refusalComment = - form.control(_deliveryCommentKey).value; + final refusalComment = + form.control(_deliveryCommentKey).value; - final projectBeneficiary = - RegistrationDeliverySingleton().beneficiaryType != - BeneficiaryType.individual - ? [ - registrationState.householdMemberWrapper - .projectBeneficiaries?.first - ] - : registrationState.householdMemberWrapper - .projectBeneficiaries - ?.where( - (element) => - element - .beneficiaryClientReferenceId == - registrationState.selectedIndividual - ?.clientReferenceId, - ) - .toList(); + final projectBeneficiary = + RegistrationDeliverySingleton() + .beneficiaryType != + BeneficiaryType.individual + ? [ + registrationState + .householdMemberWrapper + .projectBeneficiaries + ?.first + ] + : registrationState.householdMemberWrapper + .projectBeneficiaries + ?.where( + (element) => + element + .beneficiaryClientReferenceId == + registrationState + .selectedIndividual + ?.clientReferenceId, + ) + .toList(); - // Determine the status based on the reason of refusal - String status; - if (reasonOfRefusal == - Status.beneficiaryRefused.toValue()) { - status = Status.beneficiaryRefused.toValue(); - } else { - status = Status.administeredFailed.toValue(); - } - final oldTask = - RegistrationDeliverySingleton().beneficiaryType != + // Determine the status based on the reason of refusal + String status; + if (reasonOfRefusal == + Status.beneficiaryRefused.toValue()) { + status = Status.beneficiaryRefused.toValue(); + } else { + status = Status.administeredFailed.toValue(); + } + final oldTask = RegistrationDeliverySingleton() + .beneficiaryType != BeneficiaryType.individual ? registrationState .householdMemberWrapper.tasks?.last : null; - context.read().add( - DeliverInterventionSubmitEvent( - navigateToSummary: true, - householdMemberWrapper: - registrationState.householdMemberWrapper, - task: _getTaskModel( - oldTask, - projectBeneficiary - ?.first?.clientReferenceId, - status, - reasonOfRefusal, - refusalComment, - registrationState.householdMemberWrapper - .members?.first.address?.first), - isEditing: false, - boundaryModel: - RegistrationDeliverySingleton().boundary!, - ), - ); - context.router.push(DeliverySummaryRoute()); - }, - ), - ] - ), + context.read().add( + DeliverInterventionSubmitEvent( + navigateToSummary: true, + householdMemberWrapper: registrationState + .householdMemberWrapper, + task: _getTaskModel( + oldTask, + projectBeneficiary + ?.first?.clientReferenceId, + status, + reasonOfRefusal, + refusalComment, + registrationState + .householdMemberWrapper + .members + ?.first + .address + ?.first), + isEditing: false, + boundaryModel: + RegistrationDeliverySingleton() + .boundary!, + ), + ); + context.router.push(DeliverySummaryRoute()); + }, + ), + ]), slivers: [ SliverToBoxAdapter( - child: DigitCard( - children: [ - Padding( - padding: const EdgeInsets.all(spacer2), - child: Text( - localizations.translate( - i18.deliverIntervention - .refusedDeliveryLabel, - ), - style: textTheme.headingXl, + child: DigitCard(children: [ + Padding( + padding: const EdgeInsets.all(spacer2), + child: Text( + localizations.translate( + i18.deliverIntervention.refusedDeliveryLabel, ), + style: textTheme.headingXl, ), - refusedDeliveryShowcaseData.dateOfVisit - .buildWith( - child: ReactiveWrapperField( - formControlName: _dataOfRefusalKey, - builder: (field)=> LabeledField( - label: localizations.translate( - i18.deliverIntervention - .refusedDeliveryVisitDateLabel, + ), + refusedDeliveryShowcaseData.dateOfVisit.buildWith( + child: ReactiveWrapperField( + formControlName: _dataOfRefusalKey, + builder: (field) => LabeledField( + label: localizations.translate( + i18.deliverIntervention + .refusedDeliveryVisitDateLabel, + ), + child: DigitDateFormInput( + readOnly: true, + confirmText: localizations.translate( + i18.common.coreCommonOk, ), - child: DigitDateFormInput( - readOnly: true, - confirmText: localizations.translate( - i18.common.coreCommonOk, - ), - cancelText: localizations.translate( - i18.common.coreCommonCancel, - ), - initialValue: DateFormat('dd MMM yyyy') - .format(form.control(_dataOfRefusalKey).value), + cancelText: localizations.translate( + i18.common.coreCommonCancel, ), + initialValue: DateFormat('dd MMM yyyy') + .format(form + .control(_dataOfRefusalKey) + .value), ), ), ), - refusedDeliveryShowcaseData.reasonOfRefusal - .buildWith( - child: SelectionCard( - title: localizations.translate( - i18.deliverIntervention - .reasonForRefusalLabel, - ), - isRequired: true, - width: MediaQuery.of(context).size.width * - .36, - allowMultipleSelection: false, - options: RegistrationDeliverySingleton() - .refusalReasons ?? - [], - onSelectionChanged: (value) { - form - .control(_reasonOfRefusal) - .markAsTouched(); - setState(() { - if (value.isNotEmpty) { + ), + refusedDeliveryShowcaseData.reasonOfRefusal.buildWith( + child: SelectionCard( + title: localizations.translate( + i18.deliverIntervention.reasonForRefusalLabel, + ), + isRequired: true, + width: MediaQuery.of(context).size.width * .36, + allowMultipleSelection: false, + options: RegistrationDeliverySingleton() + .refusalReasons ?? + [], + onSelectionChanged: (value) { + form.control(_reasonOfRefusal).markAsTouched(); + setState(() { + if (value.isNotEmpty) { + form.control(_reasonOfRefusal).value = + value.first; + } else { + form.control(_reasonOfRefusal).value = null; + setState(() { form .control(_reasonOfRefusal) - .value = value.first; - } else { - form + .setErrors({'': true}); + }); + } + }); + }, + valueMapper: (value) { + return localizations + .translate('REASON_${value.toString()}'); + }, + errorMessage: form .control(_reasonOfRefusal) - .value = null; - setState(() { - form - .control(_reasonOfRefusal) - .setErrors({'': true}); - }); - } - }); - }, - valueMapper: (value) { - return localizations.translate( - 'REASON_${value.toString()}'); - }, - errorMessage: form - .control(_reasonOfRefusal) - .hasErrors && - form - .control(_reasonOfRefusal) - .touched - ? localizations.translate( - i18.common.corecommonRequired) - : null, - ), + .hasErrors && + form.control(_reasonOfRefusal).touched + ? localizations + .translate(i18.common.corecommonRequired) + : null, ), - refusedDeliveryShowcaseData.comments.buildWith( - child: ReactiveWrapperField( - formControlName: _deliveryCommentKey, - builder: (field)=> LabeledField( - label: localizations.translate(i18 - .deliverIntervention - .reasonForRefusalCommentLabel), - child: DigitTextFormInput( - onChange: (value){ - form.control(_deliveryCommentKey).value=value; - }, - ), + ), + refusedDeliveryShowcaseData.comments.buildWith( + child: ReactiveWrapperField( + formControlName: _deliveryCommentKey, + builder: (field) => LabeledField( + label: localizations.translate(i18 + .deliverIntervention + .reasonForRefusalCommentLabel), + child: DigitTextFormInput( + onChange: (value) { + form.control(_deliveryCommentKey).value = + value; + }, ), ), ), - ] - ), + ), + ]), ), ], ); diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index 3eba634f8..665cf06d5 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -75,15 +75,15 @@ class IndividualDetailsPageState extends LocalizedState { overviewBloc.add( HouseholdOverviewReloadEvent( projectId: - RegistrationDeliverySingleton().projectId.toString(), + RegistrationDeliverySingleton().projectId.toString(), projectBeneficiaryType: - RegistrationDeliverySingleton().beneficiaryType ?? - BeneficiaryType.household, + RegistrationDeliverySingleton().beneficiaryType ?? + BeneficiaryType.household, ), ); await overviewBloc.stream.firstWhere((element) => - element.loading == false && + element.loading == false && element.householdMemberWrapper.household != null); HouseholdMemberWrapper memberWrapper = overviewBloc.state.householdMemberWrapper; @@ -106,44 +106,45 @@ class IndividualDetailsPageState extends LocalizedState { footer: DigitCard( margin: const EdgeInsets.only(top: spacer2), padding: const EdgeInsets.all(spacer2), - children: [ValueListenableBuilder( - valueListenable: clickedStatus, - builder: (context, bool isClicked, _) { - return Button( - label: state.mapOrNull( - editIndividual: (value) => localizations - .translate(i18.common.coreCommonSave), - ) ?? - localizations - .translate(i18.common.coreCommonSubmit), - type: ButtonType.primary, - size: ButtonSize.large, - mainAxisSize: MainAxisSize.max, - onPressed: () async { - if(form.control(_dobKey).value==null){ - form.control(_dobKey).setErrors({'':true}); - } - if (form.control(_idTypeKey).value == null) { - form.control(_idTypeKey).setErrors({'': true}); - } - if (form.control(_genderKey).value == null) { - setState(() { - form.control(_genderKey).setErrors({'': true}); - }); - } - final userId = - RegistrationDeliverySingleton().loggedInUserUuid; - final projectId = - RegistrationDeliverySingleton().projectId; - form.markAllAsTouched(); - if (!form.valid) return; - FocusManager.instance.primaryFocus?.unfocus(); + children: [ + ValueListenableBuilder( + valueListenable: clickedStatus, + builder: (context, bool isClicked, _) { + return Button( + label: state.mapOrNull( + editIndividual: (value) => localizations + .translate(i18.common.coreCommonSave), + ) ?? + localizations + .translate(i18.common.coreCommonSubmit), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () async { + if (form.control(_dobKey).value == null) { + form.control(_dobKey).setErrors({'': true}); + } + if (form.control(_idTypeKey).value == null) { + form.control(_idTypeKey).setErrors({'': true}); + } + if (form.control(_genderKey).value == null) { + setState(() { + form.control(_genderKey).setErrors({'': true}); + }); + } + final userId = RegistrationDeliverySingleton() + .loggedInUserUuid; + final projectId = + RegistrationDeliverySingleton().projectId; + form.markAllAsTouched(); + if (!form.valid) return; + FocusManager.instance.primaryFocus?.unfocus(); - state.maybeWhen( - orElse: () { - return; - }, - create: ( + state.maybeWhen( + orElse: () { + return; + }, + create: ( addressModel, householdModel, individualModel, @@ -152,498 +153,498 @@ class IndividualDetailsPageState extends LocalizedState { searchQuery, loading, isHeadOfHousehold, - ) async { - final individual = _getIndividualModel( - context, - form: form, - oldIndividual: null, - ); + ) async { + final individual = _getIndividualModel( + context, + form: form, + oldIndividual: null, + ); - final boundary = - RegistrationDeliverySingleton().boundary; + final boundary = + RegistrationDeliverySingleton().boundary; - bloc.add( - BeneficiaryRegistrationSaveIndividualDetailsEvent( - model: individual, - isHeadOfHousehold: widget.isHeadOfHousehold, - ), - ); - final scannerBloc = - context.read(); - - if (scannerBloc.state.duplicate) { - Toast.showToast( - context, - message: localizations.translate( - i18.deliverIntervention - .resourceAlreadyScanned, - ), - type: ToastType.error - ); - } else { - clickedStatus.value = true; - final scannerBloc = - context.read(); bloc.add( - BeneficiaryRegistrationSummaryEvent( - projectId: projectId!, - userUuid: userId!, - boundary: boundary!, - tag: scannerBloc.state.qrCodes.isNotEmpty - ? scannerBloc.state.qrCodes.first - : null, + BeneficiaryRegistrationSaveIndividualDetailsEvent( + model: individual, + isHeadOfHousehold: widget.isHeadOfHousehold, ), ); - router.push(SummaryRoute()); - } - }, - editIndividual: ( - householdModel, - individualModel, - addressModel, - projectBeneficiaryModel, - loading, - ) { - final scannerBloc = - context.read(); - final individual = _getIndividualModel( - context, - form: form, - oldIndividual: individualModel, - ); - final tag = scannerBloc.state.qrCodes.isNotEmpty - ? scannerBloc.state.qrCodes.first - : null; + final scannerBloc = + context.read(); - if (tag != null && - tag != projectBeneficiaryModel?.tag && - scannerBloc.state.duplicate) { - Toast.showToast( - context, - message: localizations.translate( - i18.deliverIntervention - .resourceAlreadyScanned, - ), - type: ToastType.error - ); - } else { - bloc.add( - BeneficiaryRegistrationUpdateIndividualDetailsEvent( - addressModel: addressModel, - householdModel: householdModel, - model: individual.copyWith( - clientAuditDetails: (individual - .clientAuditDetails - ?.createdBy != - null && - individual.clientAuditDetails - ?.createdTime != - null) - ? ClientAuditDetails( - createdBy: individual - .clientAuditDetails!.createdBy, - createdTime: individual - .clientAuditDetails! - .createdTime, - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: context - .millisecondsSinceEpoch(), - ) + if (scannerBloc.state.duplicate) { + Toast.showToast(context, + message: localizations.translate( + i18.deliverIntervention + .resourceAlreadyScanned, + ), + type: ToastType.error); + } else { + clickedStatus.value = true; + final scannerBloc = + context.read(); + bloc.add( + BeneficiaryRegistrationSummaryEvent( + projectId: projectId!, + userUuid: userId!, + boundary: boundary!, + tag: scannerBloc.state.qrCodes.isNotEmpty + ? scannerBloc.state.qrCodes.first : null, ), - tag: scannerBloc.state.qrCodes.isNotEmpty - ? scannerBloc.state.qrCodes.first - : null, - ), - ); - } - }, - addMember: ( - addressModel, + ); + router.push(SummaryRoute()); + } + }, + editIndividual: ( householdModel, + individualModel, + addressModel, + projectBeneficiaryModel, loading, - ) { - final individual = _getIndividualModel( - context, - form: form, - ); - - if (context.mounted) { + ) { final scannerBloc = - context.read(); + context.read(); + final individual = _getIndividualModel( + context, + form: form, + oldIndividual: individualModel, + ); + final tag = scannerBloc.state.qrCodes.isNotEmpty + ? scannerBloc.state.qrCodes.first + : null; - if (scannerBloc.state.duplicate) { - Toast.showToast( - context, - message: localizations.translate( - i18.deliverIntervention - .resourceAlreadyScanned, - ), - type: ToastType.error, - ); + if (tag != null && + tag != projectBeneficiaryModel?.tag && + scannerBloc.state.duplicate) { + Toast.showToast(context, + message: localizations.translate( + i18.deliverIntervention + .resourceAlreadyScanned, + ), + type: ToastType.error); } else { bloc.add( - BeneficiaryRegistrationAddMemberEvent( - beneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, - householdModel: householdModel, - individualModel: individual, + BeneficiaryRegistrationUpdateIndividualDetailsEvent( addressModel: addressModel, - userUuid: RegistrationDeliverySingleton() - .loggedInUserUuid!, - projectId: RegistrationDeliverySingleton() - .projectId!, + householdModel: householdModel, + model: individual.copyWith( + clientAuditDetails: (individual + .clientAuditDetails + ?.createdBy != + null && + individual.clientAuditDetails + ?.createdTime != + null) + ? ClientAuditDetails( + createdBy: individual + .clientAuditDetails! + .createdBy, + createdTime: individual + .clientAuditDetails! + .createdTime, + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: context + .millisecondsSinceEpoch(), + ) + : null, + ), tag: scannerBloc.state.qrCodes.isNotEmpty ? scannerBloc.state.qrCodes.first : null, ), ); } - } - }, - ); - }, - ); - }, - ),] - ), + }, + addMember: ( + addressModel, + householdModel, + loading, + ) { + final individual = _getIndividualModel( + context, + form: form, + ); + + if (context.mounted) { + final scannerBloc = + context.read(); + + if (scannerBloc.state.duplicate) { + Toast.showToast( + context, + message: localizations.translate( + i18.deliverIntervention + .resourceAlreadyScanned, + ), + type: ToastType.error, + ); + } else { + bloc.add( + BeneficiaryRegistrationAddMemberEvent( + beneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType!, + householdModel: householdModel, + individualModel: individual, + addressModel: addressModel, + userUuid: + RegistrationDeliverySingleton() + .loggedInUserUuid!, + projectId: + RegistrationDeliverySingleton() + .projectId!, + tag: scannerBloc + .state.qrCodes.isNotEmpty + ? scannerBloc.state.qrCodes.first + : null, + ), + ); + } + } + }, + ); + }, + ); + }, + ), + ]), slivers: [ SliverToBoxAdapter( - child: DigitCard( - children: [ - Padding( - padding: const EdgeInsets.only(bottom: spacer2), - child: Text( - localizations.translate( - i18.individualDetails.individualsDetailsLabelText, - ), - style: textTheme.headingXl, - ), - ), - individualDetailsShowcaseData.nameOfIndividual - .buildWith( - child: ReactiveWrapperField( - formControlName: _individualNameKey, - validationMessages: { - 'required': (object) => localizations.translate( - '${i18.individualDetails.nameLabelText}_IS_REQUIRED', - ), - 'maxLength': (object) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', maxLength.toString()), - }, - builder: (field)=> LabeledField( - label: localizations.translate( - i18.individualDetails.nameLabelText, - ), - isRequired: true, - child: DigitTextFormInput( - initialValue: form.control(_individualNameKey).value, - onChange: (value){ - form.control(_individualNameKey).value=value; - }, - errorMessage: field.errorText, - ), - ), + child: DigitCard(children: [ + Padding( + padding: const EdgeInsets.only(bottom: spacer2), + child: Text( + localizations.translate( + i18.individualDetails.individualsDetailsLabelText, ), + style: textTheme.headingXl, ), - Offstage( - offstage: !widget.isHeadOfHousehold, - child: DigitCheckbox( - label: localizations.translate( - i18.individualDetails.checkboxLabelText, - ), - value: widget.isHeadOfHousehold, - readOnly: widget.isHeadOfHousehold, - onChanged: (_){}, - ), - ), - ReactiveWrapperField( - formControlName: _idTypeKey, + ), + individualDetailsShowcaseData.nameOfIndividual.buildWith( + child: ReactiveWrapperField( + formControlName: _individualNameKey, validationMessages: { - 'required': (_)=> localizations.translate( - i18.common.corecommonRequired, - ), + 'required': (object) => localizations.translate( + '${i18.individualDetails.nameLabelText}_IS_REQUIRED', + ), + 'maxLength': (object) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', maxLength.toString()), }, - builder: (field)=> LabeledField( + builder: (field) => LabeledField( label: localizations.translate( - i18.individualDetails.idTypeLabelText, + i18.individualDetails.nameLabelText, ), isRequired: true, - child: DigitDropdown( - selectedOption: (form.control(_idTypeKey).value!=null)? - DropdownItem( - name: localizations.translate(form.control(_idTypeKey).value), - code: form.control(_idTypeKey).value - ):const DropdownItem(name: '', code: ''), - items: RegistrationDeliverySingleton() - .idTypeOptions! - .map( - (e) => DropdownItem( - name: localizations.translate(e), - code: e - ), - ).toList(), - onSelect: (value) { - form.control(_idTypeKey).value=value.code; - setState(() { - if (value.code == 'DEFAULT') { - form.control(_idNumberKey).value = - IdGen.i.identifier.toString(); - } else { - form.control(_idNumberKey).value = null; - } - }); + child: DigitTextFormInput( + initialValue: + form.control(_individualNameKey).value, + onChange: (value) { + form.control(_individualNameKey).value = value; }, - emptyItemText: localizations - .translate(i18.common.noMatchFound), - errorMessage: form.control(_idTypeKey).hasErrors - ? localizations.translate( - i18.common.corecommonRequired, - ):null, + errorMessage: field.errorText, ), ), ), - if (form.control(_idTypeKey).value != 'DEFAULT') - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ReactiveFormConsumer( - builder: (context, formGroup, child) { - return ReactiveWrapperField( - formControlName: _idNumberKey, - validationMessages: { - 'required': (object) => - localizations.translate( - '${i18.individualDetails.idNumberLabelText}_IS_REQUIRED', - ), - }, - builder: (field)=> LabeledField( - label: localizations.translate( - i18.individualDetails.idNumberLabelText, - ), - isRequired: form.control(_idNumberKey).validators.isNotEmpty, - child: DigitTextFormInput( - readOnly: - form.control(_idTypeKey).value == - 'DEFAULT', - initialValue: form.control(_idNumberKey).value, - onChange: (value){ - form.control(_idNumberKey).value=value; - }, - errorMessage: field.errorText, - ), - ), - ); - }, - ), - const SizedBox(height: 4), - ], + ), + Offstage( + offstage: !widget.isHeadOfHousehold, + child: DigitCheckbox( + label: localizations.translate( + i18.individualDetails.checkboxLabelText, ), - if (form.control(_idTypeKey).value == 'DEFAULT') - const SizedBox( - height: spacer2, + value: widget.isHeadOfHousehold, + readOnly: widget.isHeadOfHousehold, + onChanged: (_) {}, + ), + ), + ReactiveWrapperField( + formControlName: _idTypeKey, + validationMessages: { + 'required': (_) => localizations.translate( + i18.common.corecommonRequired, + ), + }, + builder: (field) => LabeledField( + label: localizations.translate( + i18.individualDetails.idTypeLabelText, ), - individualDetailsShowcaseData.dateOfBirth.buildWith( - child: DigitDobPicker( - datePickerFormControl: _dobKey, - datePickerLabel: localizations.translate( - i18.individualDetails.dobLabelText, - ), - ageFieldLabel: localizations.translate( - i18.individualDetails.ageLabelText, - ), - yearsHintLabel: localizations.translate( - i18.individualDetails.yearsHintText, - ), - monthsHintLabel: localizations.translate( - i18.individualDetails.monthsHintText, - ), - separatorLabel: localizations.translate( - i18.individualDetails.separatorLabelText, - ), - yearsAndMonthsErrMsg: localizations.translate( - i18.individualDetails.yearsAndMonthsErrorText, - ), - errorMessage: form.control(_dobKey).hasErrors? - localizations.translate(i18.common.corecommonRequired):null, - initialDate: before150Years, - onChangeOfFormControl: (value) { - if(value!=null){ - setState(() { - form.control(_dobKey).setErrors({'' : false}); - }); - } - // Handle changes to the control's value here - form.control(_dobKey).value=value; + isRequired: true, + child: DigitDropdown( + selectedOption: + (form.control(_idTypeKey).value != null) + ? DropdownItem( + name: localizations.translate( + form.control(_idTypeKey).value), + code: form.control(_idTypeKey).value) + : const DropdownItem(name: '', code: ''), + items: RegistrationDeliverySingleton() + .idTypeOptions! + .map( + (e) => DropdownItem( + name: localizations.translate(e), code: e), + ) + .toList(), + onSelect: (value) { + form.control(_idTypeKey).value = value.code; + setState(() { + if (value.code == 'DEFAULT') { + form.control(_idNumberKey).value = + IdGen.i.identifier.toString(); + } else { + form.control(_idNumberKey).value = null; + } + }); }, - cancelText: localizations - .translate(i18.common.coreCommonCancel), - confirmText: localizations - .translate(i18.common.coreCommonOk), + emptyItemText: + localizations.translate(i18.common.noMatchFound), + errorMessage: form.control(_idTypeKey).hasErrors + ? localizations.translate( + i18.common.corecommonRequired, + ) + : null, ), ), - SelectionCard( - isRequired: true, - title: localizations.translate( - i18.individualDetails.genderLabelText, + ), + if (form.control(_idTypeKey).value != 'DEFAULT') + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ReactiveFormConsumer( + builder: (context, formGroup, child) { + return ReactiveWrapperField( + formControlName: _idNumberKey, + validationMessages: { + 'required': (object) => + localizations.translate( + '${i18.individualDetails.idNumberLabelText}_IS_REQUIRED', + ), + }, + builder: (field) => LabeledField( + label: localizations.translate( + i18.individualDetails.idNumberLabelText, + ), + isRequired: form + .control(_idNumberKey) + .validators + .isNotEmpty, + child: DigitTextFormInput( + readOnly: form.control(_idTypeKey).value == + 'DEFAULT', + initialValue: + form.control(_idNumberKey).value, + onChange: (value) { + form.control(_idNumberKey).value = value; + }, + errorMessage: field.errorText, + ), + ), + ); + }, + ), + const SizedBox(height: 4), + ], + ), + if (form.control(_idTypeKey).value == 'DEFAULT') + const SizedBox( + height: spacer2, + ), + individualDetailsShowcaseData.dateOfBirth.buildWith( + child: DigitDobPicker( + datePickerFormControl: _dobKey, + datePickerLabel: localizations.translate( + i18.individualDetails.dobLabelText, ), - allowMultipleSelection: false, - width: 126, - initialSelection: - form.control(_genderKey).value != null - ? [form.control(_genderKey).value] - : [], - options: RegistrationDeliverySingleton() - .genderOptions! - .map( - (e) => e, - ) - .toList(), - onSelectionChanged: (value) { - setState(() { - if (value.isNotEmpty) { - form.control(_genderKey).value = value.first; - } else { - form.control(_genderKey).value = null; - setState(() { - form - .control(_genderKey) - .setErrors({'': true}); - }); - } - }); - }, - valueMapper: (value) { - return localizations.translate(value); - }, - errorMessage: form.control(_genderKey).hasErrors + ageFieldLabel: localizations.translate( + i18.individualDetails.ageLabelText, + ), + yearsHintLabel: localizations.translate( + i18.individualDetails.yearsHintText, + ), + monthsHintLabel: localizations.translate( + i18.individualDetails.monthsHintText, + ), + separatorLabel: localizations.translate( + i18.individualDetails.separatorLabelText, + ), + yearsAndMonthsErrMsg: localizations.translate( + i18.individualDetails.yearsAndMonthsErrorText, + ), + errorMessage: form.control(_dobKey).hasErrors ? localizations - .translate(i18.common.corecommonRequired) + .translate(i18.common.corecommonRequired) : null, + initialDate: before150Years, + onChangeOfFormControl: (value) { + if (value != null) { + setState(() { + form.control(_dobKey).setErrors({'': false}); + }); + } + // Handle changes to the control's value here + form.control(_dobKey).value = value; + }, + cancelText: localizations + .translate(i18.common.coreCommonCancel), + confirmText: + localizations.translate(i18.common.coreCommonOk), ), - individualDetailsShowcaseData.mobile.buildWith( - child: ReactiveWrapperField( - formControlName: _mobileNumberKey, - validationMessages: { - 'maxLength': (object) => localizations.translate( - i18.individualDetails - .mobileNumberLengthValidationMessage), - 'minLength': (object) => localizations.translate( - i18.individualDetails - .mobileNumberLengthValidationMessage), - }, - builder: (field)=> LabeledField( - label: localizations.translate( - i18.individualDetails.mobileNumberLabelText, - ), - child: DigitTextFormInput( - keyboardType: TextInputType.number, - maxLength: 10, - inputFormatters: [ - FilteringTextInputFormatter.digitsOnly, - ], - initialValue: form.control(_mobileNumberKey).value, - onChange: (value){ - form.control(_mobileNumberKey).value=value; - }, - ), + ), + SelectionCard( + isRequired: true, + title: localizations.translate( + i18.individualDetails.genderLabelText, + ), + allowMultipleSelection: false, + width: 126, + initialSelection: form.control(_genderKey).value != null + ? [form.control(_genderKey).value] + : [], + options: RegistrationDeliverySingleton() + .genderOptions! + .map( + (e) => e, + ) + .toList(), + onSelectionChanged: (value) { + setState(() { + if (value.isNotEmpty) { + form.control(_genderKey).value = value.first; + } else { + form.control(_genderKey).value = null; + setState(() { + form.control(_genderKey).setErrors({'': true}); + }); + } + }); + }, + valueMapper: (value) { + return localizations.translate(value); + }, + errorMessage: form.control(_genderKey).hasErrors + ? localizations + .translate(i18.common.corecommonRequired) + : null, + ), + individualDetailsShowcaseData.mobile.buildWith( + child: ReactiveWrapperField( + formControlName: _mobileNumberKey, + validationMessages: { + 'maxLength': (object) => localizations.translate(i18 + .individualDetails + .mobileNumberLengthValidationMessage), + 'minLength': (object) => localizations.translate(i18 + .individualDetails + .mobileNumberLengthValidationMessage), + }, + builder: (field) => LabeledField( + label: localizations.translate( + i18.individualDetails.mobileNumberLabelText, + ), + child: DigitTextFormInput( + keyboardType: TextInputType.number, + maxLength: 10, + inputFormatters: [ + FilteringTextInputFormatter.digitsOnly, + ], + initialValue: form.control(_mobileNumberKey).value, + onChange: (value) { + form.control(_mobileNumberKey).value = value; + }, ), ), ), - const SizedBox(height: 16), - if ((RegistrationDeliverySingleton().beneficiaryType == - BeneficiaryType.household && - widget.isHeadOfHousehold) || - (RegistrationDeliverySingleton().beneficiaryType == - BeneficiaryType.individual)) - BlocBuilder( - buildWhen: (p, c) { - return true; - }, - builder: (context, state) => state - .qrCodes.isNotEmpty - ? Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - SizedBox( - width: - MediaQuery.of(context).size.width / - 3, - child: Text( - localizations.translate( - i18.deliverIntervention.voucherCode, + ), + const SizedBox(height: 16), + if ((RegistrationDeliverySingleton().beneficiaryType == + BeneficiaryType.household && + widget.isHeadOfHousehold) || + (RegistrationDeliverySingleton().beneficiaryType == + BeneficiaryType.individual)) + BlocBuilder( + buildWhen: (p, c) { + return true; + }, + builder: (context, state) => state.qrCodes.isNotEmpty + ? Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + SizedBox( + width: + MediaQuery.of(context).size.width / 3, + child: Text( + localizations.translate( + i18.deliverIntervention.voucherCode, + ), + style: theme.textTheme.headlineSmall, + ), ), - style: theme.textTheme.headlineSmall, - ), - ), - Flexible( - child: Text( - overflow: TextOverflow.ellipsis, - localizations - .translate(state.qrCodes.last), - ), - ), - Padding( - padding: const EdgeInsets.only( - bottom: spacer2 * 2, - ), - child: IconButton( - color: theme.colorScheme.secondary, - icon: const Icon(Icons.edit), - onPressed: () { - Navigator.of(context).push( - //[TODO: Add the route to auto_route] - MaterialPageRoute( - builder: (context) => - const DigitScannerPage( - quantity: 1, - isGS1code: false, - singleValue: true, - isEditEnabled: true, - ), - settings: const RouteSettings( - name: '/qr-scanner'), + Flexible( + child: Text( + overflow: TextOverflow.ellipsis, + localizations + .translate(state.qrCodes.last), + ), + ), + Padding( + padding: const EdgeInsets.only( + bottom: spacer2 * 2, + ), + child: IconButton( + color: theme.colorScheme.secondary, + icon: const Icon(Icons.edit), + onPressed: () { + Navigator.of(context).push( + //[TODO: Add the route to auto_route] + MaterialPageRoute( + builder: (context) => + const DigitScannerPage( + quantity: 1, + isGS1code: false, + singleValue: true, + isEditEnabled: true, + ), + settings: const RouteSettings( + name: '/qr-scanner'), + ), + ); + }, + ), + ), + ], + + // ignore: no-empty-block + ) + : Button( + type: ButtonType.secondary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () { + Navigator.of(context).push( + // [TODO: Add the route to auto_route] + MaterialPageRoute( + builder: (context) => + const DigitScannerPage( + quantity: 1, + isGS1code: false, + singleValue: true, ), - ); - }, + settings: const RouteSettings( + name: '/qr-scanner'), + ), + ); + }, + prefixIcon: Icons.qr_code, + label: localizations.translate( + i18.individualDetails.linkVoucherToIndividual, ), ), - ], - - // ignore: no-empty-block - ) - : Button( - type: ButtonType.secondary, - size: ButtonSize.large, - mainAxisSize: MainAxisSize.max, - onPressed: () { - Navigator.of(context).push( - // [TODO: Add the route to auto_route] - MaterialPageRoute( - builder: (context) => - const DigitScannerPage( - quantity: 1, - isGS1code: false, - singleValue: true, - ), - settings: const RouteSettings( - name: '/qr-scanner'), - ), - ); - }, - prefixIcon: Icons.qr_code, - label: localizations.translate( - i18.individualDetails - .linkVoucherToIndividual, - ), - ), - ),] - ), + ), + ]), ), ], ); @@ -654,10 +655,10 @@ class IndividualDetailsPageState extends LocalizedState { } IndividualModel _getIndividualModel( - BuildContext context, { - required FormGroup form, - IndividualModel? oldIndividual, - }) { + BuildContext context, { + required FormGroup form, + IndividualModel? oldIndividual, + }) { final dob = form.control(_dobKey).value as DateTime?; String? dobString; if (dob != null) { @@ -732,7 +733,7 @@ class IndividualDetailsPageState extends LocalizedState { gender: form.control(_genderKey).value == null ? null : Gender.values - .byName(form.control(_genderKey).value.toString().toLowerCase()), + .byName(form.control(_genderKey).value.toString().toLowerCase()), mobileNumber: form.control(_mobileNumberKey).value, dateOfBirth: dobString, identifiers: [ @@ -790,8 +791,8 @@ class IndividualDetailsPageState extends LocalizedState { _dobKey: FormControl( value: individual?.dateOfBirth != null ? DateFormat(Constants().dateFormat).parse( - individual!.dateOfBirth!, - ) + individual!.dateOfBirth!, + ) : null, ), _genderKey: FormControl(value: getGenderOptions(individual)), @@ -810,6 +811,6 @@ class IndividualDetailsPageState extends LocalizedState { return options?.map((e) => e).firstWhereOrNull( (element) => element.toLowerCase() == individual?.gender?.name, - ); + ); } } diff --git a/packages/registration_delivery/lib/utils/utils.dart b/packages/registration_delivery/lib/utils/utils.dart index 2ddd48adb..af751ea74 100644 --- a/packages/registration_delivery/lib/utils/utils.dart +++ b/packages/registration_delivery/lib/utils/utils.dart @@ -104,9 +104,10 @@ bool checkEligibilityForAgeAndSideEffect( : false : false; } else { - if(projectType?.validMaxAge!=null && projectType?.validMinAge!=null){ + if (projectType?.validMaxAge != null && + projectType?.validMinAge != null) { return totalAgeMonths >= projectType!.validMinAge! && - totalAgeMonths <= projectType.validMaxAge! + totalAgeMonths <= projectType.validMaxAge! ? true : false; } diff --git a/packages/registration_delivery/lib/widgets/member_card/member_card.dart b/packages/registration_delivery/lib/widgets/member_card/member_card.dart index f3334c9e8..65fcbd8d4 100644 --- a/packages/registration_delivery/lib/widgets/member_card/member_card.dart +++ b/packages/registration_delivery/lib/widgets/member_card/member_card.dart @@ -181,8 +181,7 @@ class MemberCard extends StatelessWidget { ), ), Padding( - padding: - const EdgeInsets.only(left: spacer1, bottom: spacer2), + padding: const EdgeInsets.only(left: spacer1, bottom: spacer2), child: Offstage( offstage: beneficiaryType != BeneficiaryType.individual, child: !isDelivered || diff --git a/packages/survey_form/lib/models/entities/service.dart b/packages/survey_form/lib/models/entities/service.dart index b8135e490..7d2c668d2 100644 --- a/packages/survey_form/lib/models/entities/service.dart +++ b/packages/survey_form/lib/models/entities/service.dart @@ -2,7 +2,6 @@ import 'dart:convert'; import 'package:dart_mappable/dart_mappable.dart'; -import 'package:drift/drift.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; diff --git a/packages/survey_form/lib/models/entities/service_attributes.dart b/packages/survey_form/lib/models/entities/service_attributes.dart index e9a671cbe..38f36cc12 100644 --- a/packages/survey_form/lib/models/entities/service_attributes.dart +++ b/packages/survey_form/lib/models/entities/service_attributes.dart @@ -1,7 +1,8 @@ // Generated using mason. Do not modify by hand import 'package:dart_mappable/dart_mappable.dart'; -import 'package:drift/drift.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:drift/drift.dart'; + part 'service_attributes.mapper.dart'; @MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) diff --git a/packages/survey_form/pubspec.lock b/packages/survey_form/pubspec.lock index ca017de05..04c009f02 100644 --- a/packages/survey_form/pubspec.lock +++ b/packages/survey_form/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "64.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "4eec93681221723a686ad580c2e7d960e1017cf1a4e0a263c2573c2c6b0bf5cd" + url: "https://pub.dev" + source: hosted + version: "1.3.25" analyzer: dependency: transitive description: @@ -161,46 +169,6 @@ packages: url: "https://pub.dev" source: hosted version: "8.9.2" - camera: - dependency: transitive - description: - name: camera - sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" - url: "https://pub.dev" - source: hosted - version: "0.10.5+9" - camera_android: - dependency: transitive - description: - name: camera_android - sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 - url: "https://pub.dev" - source: hosted - version: "0.10.9+2" - camera_avfoundation: - dependency: transitive - description: - name: camera_avfoundation - sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" - url: "https://pub.dev" - source: hosted - version: "0.9.13+10" - camera_platform_interface: - dependency: transitive - description: - name: camera_platform_interface - sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 - url: "https://pub.dev" - source: hosted - version: "2.8.0" - camera_web: - dependency: transitive - description: - name: camera_web - sha256: b9235ec0a2ce949daec546f1f3d86f05c3921ed31c7d9ab6b7c03214d152fc2d - url: "https://pub.dev" - source: hosted - version: "0.3.4" characters: dependency: transitive description: @@ -273,14 +241,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.0" - cross_file: - dependency: transitive - description: - name: cross_file - sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e - url: "https://pub.dev" - source: hosted - version: "0.3.3+8" crypto: dependency: transitive description: @@ -289,14 +249,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" - csslib: - dependency: transitive - description: - name: csslib - sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" - url: "https://pub.dev" - source: hosted - version: "1.0.2" dart_mappable: dependency: "direct main" description: @@ -346,14 +298,21 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.5-dev.1" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_ui_components: dependency: "direct main" description: name: digit_ui_components - sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae + sha256: d6720339263e48951e747aed31f45795ab7d7b4f0923e0fe13d63c4f83c41d97 url: "https://pub.dev" source: hosted - version: "0.0.1+7" + version: "0.0.3-beta" dio: dependency: "direct main" description: @@ -370,14 +329,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" - dotted_border: - dependency: transitive - description: - name: dotted_border - sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" - url: "https://pub.dev" - source: hosted - version: "2.1.0" drift: dependency: "direct main" description: @@ -402,6 +353,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.15.0" + easy_stepper: + dependency: transitive + description: + name: easy_stepper + sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + url: "https://pub.dev" + source: hosted + version: "0.5.2+1" fake_async: dependency: transitive description: @@ -426,46 +385,46 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.1" - file_picker: + firebase_core: dependency: transitive description: - name: file_picker - sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 + name: firebase_core + sha256: "53316975310c8af75a96e365f9fccb67d1c544ef0acdbf0d88bbe30eedd1c4f9" url: "https://pub.dev" source: hosted - version: "8.0.0+1" - file_selector_linux: + version: "2.27.0" + firebase_core_platform_interface: dependency: transitive description: - name: file_selector_linux - sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + name: firebase_core_platform_interface + sha256: e30da58198a6d4b49d5bce4e852f985c32cb10db329ebef9473db2b9f09ce810 url: "https://pub.dev" source: hosted - version: "0.9.2+1" - file_selector_macos: + version: "5.3.0" + firebase_core_web: dependency: transitive description: - name: file_selector_macos - sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 + name: firebase_core_web + sha256: c8e1d59385eee98de63c92f961d2a7062c5d9a65e7f45bdc7f1b0b205aab2492 url: "https://pub.dev" source: hosted - version: "0.9.4" - file_selector_platform_interface: + version: "2.11.5" + firebase_crashlytics: dependency: transitive description: - name: file_selector_platform_interface - sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + name: firebase_crashlytics + sha256: c4f1b723d417bc9c4774810e774ff91df8fb0032d33fb2888b2c887e865581b8 url: "https://pub.dev" source: hosted - version: "2.6.2" - file_selector_windows: + version: "3.4.18" + firebase_crashlytics_platform_interface: dependency: transitive description: - name: file_selector_windows - sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" + name: firebase_crashlytics_platform_interface + sha256: c5a11fca3df76a98e3fa68fde8b10a08aacb9a7639f619fbfd4dad6c67a08643 url: "https://pub.dev" source: hosted - version: "0.9.3+2" + version: "3.6.25" fixnum: dependency: transitive description: @@ -487,30 +446,6 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.6" - flutter_dropzone: - dependency: transitive - description: - name: flutter_dropzone - sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 - url: "https://pub.dev" - source: hosted - version: "3.0.7" - flutter_dropzone_platform_interface: - dependency: transitive - description: - name: flutter_dropzone_platform_interface - sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" - url: "https://pub.dev" - source: hosted - version: "2.2.0" - flutter_dropzone_web: - dependency: transitive - description: - name: flutter_dropzone_web - sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 - url: "https://pub.dev" - source: hosted - version: "3.0.13" flutter_keyboard_visibility: dependency: transitive description: @@ -567,19 +502,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.3" - flutter_localizations: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - flutter_plugin_android_lifecycle: - dependency: transitive - description: - name: flutter_plugin_android_lifecycle - sha256: "8cf40eebf5dec866a6d1956ad7b4f7016e6c0cc69847ab946833b7d43743809f" - url: "https://pub.dev" - source: hosted - version: "2.0.19" flutter_spinkit: dependency: transitive description: @@ -588,14 +510,6 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" - flutter_styled_toast: - dependency: transitive - description: - name: flutter_styled_toast - sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 - url: "https://pub.dev" - source: hosted - version: "2.2.1" flutter_svg: dependency: "direct main" description: @@ -742,14 +656,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.3.1" - html: - dependency: transitive - description: - name: html - sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" - url: "https://pub.dev" - source: hosted - version: "0.15.5" http: dependency: transitive description: @@ -774,70 +680,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" - image_picker: - dependency: transitive - description: - name: image_picker - sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" - url: "https://pub.dev" - source: hosted - version: "1.0.8" - image_picker_android: - dependency: transitive - description: - name: image_picker_android - sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" - url: "https://pub.dev" - source: hosted - version: "0.8.9+6" - image_picker_for_web: - dependency: transitive - description: - name: image_picker_for_web - sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 - url: "https://pub.dev" - source: hosted - version: "3.0.2" - image_picker_ios: - dependency: transitive - description: - name: image_picker_ios - sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 - url: "https://pub.dev" - source: hosted - version: "0.8.9+1" - image_picker_linux: - dependency: transitive - description: - name: image_picker_linux - sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" - url: "https://pub.dev" - source: hosted - version: "0.2.1+1" - image_picker_macos: - dependency: transitive - description: - name: image_picker_macos - sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" - url: "https://pub.dev" - source: hosted - version: "0.2.1+1" - image_picker_platform_interface: - dependency: transitive - description: - name: image_picker_platform_interface - sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b - url: "https://pub.dev" - source: hosted - version: "2.9.3" - image_picker_windows: - dependency: transitive - description: - name: image_picker_windows - sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" - url: "https://pub.dev" - source: hosted - version: "0.2.1+1" intl: dependency: "direct main" description: @@ -894,6 +736,30 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -946,26 +812,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -1014,22 +880,30 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - path: + package_info_plus: dependency: transitive description: - name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + name: package_info_plus + sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017" url: "https://pub.dev" source: hosted - version: "1.8.3" - path_drawing: + version: "4.2.0" + package_info_plus_platform_interface: dependency: transitive description: - name: path_drawing - sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + name: package_info_plus_platform_interface + sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "2.0.1" + path: + dependency: transitive + description: + name: path + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + url: "https://pub.dev" + source: hosted + version: "1.9.0" path_parsing: dependency: transitive description: @@ -1319,26 +1193,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" timing: dependency: transitive description: @@ -1363,86 +1237,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" - universal_html: - dependency: transitive - description: - name: universal_html - sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" - url: "https://pub.dev" - source: hosted - version: "2.2.4" - universal_io: - dependency: transitive - description: - name: universal_io - sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" - url: "https://pub.dev" - source: hosted - version: "2.2.2" - url_launcher: - dependency: transitive - description: - name: url_launcher - sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" - url: "https://pub.dev" - source: hosted - version: "6.3.0" - url_launcher_android: - dependency: transitive - description: - name: url_launcher_android - sha256: "17cd5e205ea615e2c6ea7a77323a11712dffa0720a8a90540db57a01347f9ad9" - url: "https://pub.dev" - source: hosted - version: "6.3.2" - url_launcher_ios: - dependency: transitive - description: - name: url_launcher_ios - sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" - url: "https://pub.dev" - source: hosted - version: "6.2.4" - url_launcher_linux: - dependency: transitive - description: - name: url_launcher_linux - sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 - url: "https://pub.dev" - source: hosted - version: "3.1.1" - url_launcher_macos: - dependency: transitive - description: - name: url_launcher_macos - sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" - url: "https://pub.dev" - source: hosted - version: "3.2.0" - url_launcher_platform_interface: - dependency: transitive - description: - name: url_launcher_platform_interface - sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - url_launcher_web: - dependency: transitive - description: - name: url_launcher_web - sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b - url: "https://pub.dev" - source: hosted - version: "2.2.3" - url_launcher_windows: - dependency: transitive - description: - name: url_launcher_windows - sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" - url: "https://pub.dev" - source: hosted - version: "3.1.2" uuid: dependency: transitive description: @@ -1483,22 +1277,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - visibility_detector: - dependency: transitive - description: - name: visibility_detector - sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 - url: "https://pub.dev" - source: hosted - version: "0.4.0+2" vm_service: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1564,5 +1350,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <=3.9.0" - flutter: ">=3.16.0" + dart: ">=3.3.0 <=3.9.0" + flutter: ">=3.18.0-18.0.pre.54" From 8e49242f696feb15f001d2a4b91e26f5ff064291 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Thu, 21 Nov 2024 14:20:07 +0530 Subject: [PATCH 165/241] version fixes and import fixes --- .../lib/data/sync_registry.dart | 3 + .../pubspec.yaml | 2 +- packages/complaints/example/pubspec.lock | 134 +++--- packages/complaints/example/pubspec.yaml | 1 - .../pages/inbox/complaints_inbox_search.dart | 8 +- .../registration/complaints_details.dart | 200 ++++----- packages/complaints/lib/utils/constants.dart | 8 +- .../no_result_card/no_result_card.dart | 2 +- packages/complaints/pubspec.lock | 230 +++++++---- packages/complaints/pubspec.yaml | 10 +- packages/digit_firebase_services/pubspec.lock | 56 +-- packages/digit_showcase/pubspec.lock | 8 +- packages/registration_delivery/pubspec.lock | 386 ++++++++++++------ packages/survey_form/pubspec.yaml | 4 +- packages/sync_service/pubspec.yaml | 10 +- 15 files changed, 615 insertions(+), 447 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/data/sync_registry.dart b/apps/health_campaign_field_worker_app/lib/data/sync_registry.dart index 90f3675dc..518f786b5 100644 --- a/apps/health_campaign_field_worker_app/lib/data/sync_registry.dart +++ b/apps/health_campaign_field_worker_app/lib/data/sync_registry.dart @@ -1,3 +1,6 @@ +import 'package:complaints/data/repositories/remote/pgr_service.dart'; +import 'package:complaints/models/pgr_complaints.dart'; +import 'package:complaints/models/pgr_complaints_response.dart'; import 'package:digit_components/utils/app_logger.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:sync_service/data/repositories/sync/sync_up.dart'; diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index f351884f6..29b6aeb3a 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -18,7 +18,7 @@ dependencies: sqlite3_flutter_libs: ^0.5.11+1 path_provider: ^2.1.3 path: ^1.9.0 - digit_ui_components: 0.0.1+7 + digit_ui_components: 0.0.2-dev digit_components: ^1.0.2 auto_route: ^8.3.0 flutter_bloc: ^8.1.5 diff --git a/packages/complaints/example/pubspec.lock b/packages/complaints/example/pubspec.lock index e78473cf3..39defc8b1 100644 --- a/packages/complaints/example/pubspec.lock +++ b/packages/complaints/example/pubspec.lock @@ -101,10 +101,10 @@ packages: dependency: transitive description: name: build_runner - sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" url: "https://pub.dev" source: hosted - version: "2.4.9" + version: "2.4.11" build_runner_core: dependency: transitive description: @@ -175,7 +175,7 @@ packages: path: ".." relative: true source: path - version: "0.0.1-dev.1" + version: "0.0.1-dev.2" convert: dependency: transitive description: @@ -225,13 +225,12 @@ packages: source: hosted version: "1.1.0" digit_components: - dependency: "direct main" + dependency: "direct overridden" description: - name: digit_components - sha256: "01320d4c72829045e789d1a56e23ff2bd85dad6a1831d27bd507a1acaceae17e" - url: "https://pub.dev" - source: hosted - version: "1.0.1" + path: "../../digit_components" + relative: true + source: path + version: "1.0.2+1" digit_data_model: dependency: transitive description: @@ -276,10 +275,10 @@ packages: dependency: transitive description: name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" url: "https://pub.dev" source: hosted - version: "0.5.2+1" + version: "0.8.5+1" fake_async: dependency: transitive description: @@ -397,6 +396,11 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.3" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" flutter_spinkit: dependency: transitive description: @@ -435,10 +439,10 @@ packages: dependency: transitive description: name: fluttertoast - sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" + sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" url: "https://pub.dev" source: hosted - version: "8.2.5" + version: "8.2.8" freezed_annotation: dependency: transitive description: @@ -467,10 +471,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 url: "https://pub.dev" source: hosted - version: "4.0.5" + version: "6.2.1" graphs: dependency: transitive description: @@ -499,10 +503,10 @@ packages: dependency: transitive description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -523,10 +527,10 @@ packages: dependency: transitive description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" io: dependency: transitive description: @@ -567,6 +571,30 @@ packages: url: "https://pub.dev" source: hosted version: "4.9.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -579,26 +607,26 @@ packages: dependency: transitive description: name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.0" location_web: dependency: transitive description: name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + sha256: "49dda13d415c4603c5775a33fb22f575e0aa3f0ec2916644ddcd722db31ee884" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "5.0.2" logging: dependency: transitive description: @@ -611,34 +639,34 @@ packages: dependency: transitive description: name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "3.1.3" matcher: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -683,26 +711,26 @@ packages: dependency: transitive description: name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "8.0.2" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.1" path: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_parsing: dependency: transitive description: @@ -827,18 +855,18 @@ packages: dependency: transitive description: name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 + sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a url: "https://pub.dev" source: hosted - version: "0.8.1" + version: "2.1.1" reactive_forms: dependency: transitive description: name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "17.0.1" recase: dependency: transitive description: @@ -944,10 +972,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" timing: dependency: transitive description: @@ -1012,6 +1040,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + url: "https://pub.dev" + source: hosted + version: "14.2.1" watcher: dependency: transitive description: @@ -1024,10 +1060,10 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.5.1" web_socket_channel: dependency: transitive description: @@ -1069,5 +1105,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.22.0" diff --git a/packages/complaints/example/pubspec.yaml b/packages/complaints/example/pubspec.yaml index fe8d3212d..24c455ff6 100644 --- a/packages/complaints/example/pubspec.yaml +++ b/packages/complaints/example/pubspec.yaml @@ -35,7 +35,6 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 - digit_components: ^1.0.0+2 complaints: path : ../ diff --git a/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart b/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart index a3e3eae65..4482a62e9 100644 --- a/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart +++ b/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart @@ -1,16 +1,15 @@ - import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; import '/blocs/complaints_inbox/complaints_inbox.dart'; - import '/utils/i18_key_constants.dart' as i18; import '/utils/utils.dart'; import '/widgets/localized.dart'; -import 'package:flutter/services.dart'; +import '../../utils/constants.dart'; @RoutePage() class ComplaintsInboxSearchPage extends LocalizedStatefulWidget { @@ -108,7 +107,8 @@ class ComplaintsInboxSearchPageState complaintNumber: complaintNumberValue == "" ? null : complaintNumberValue, - createdByUserId: ComplaintsSingleton().loggedInUserUuid, + createdByUserId: + ComplaintsSingleton().loggedInUserUuid, ), ); diff --git a/packages/complaints/lib/pages/registration/complaints_details.dart b/packages/complaints/lib/pages/registration/complaints_details.dart index 00577b806..7f08bdf02 100644 --- a/packages/complaints/lib/pages/registration/complaints_details.dart +++ b/packages/complaints/lib/pages/registration/complaints_details.dart @@ -1,6 +1,4 @@ - import 'package:auto_route/auto_route.dart'; - import 'package:complaints/router/complaints_router.gm.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; @@ -12,12 +10,11 @@ import 'package:reactive_forms/reactive_forms.dart'; import '../../../blocs/complaints_registration/complaints_registration.dart'; import '../../../models/complaints.dart'; - - import '../../../utils/i18_key_constants.dart' as i18; import '../../../utils/utils.dart'; import '../../../widgets/header/back_navigation_help_header.dart'; import '../../../widgets/localized.dart'; +import '../../utils/constants.dart'; @RoutePage() class ComplaintsDetailsPage extends LocalizedStatefulWidget { @@ -30,8 +27,7 @@ class ComplaintsDetailsPage extends LocalizedStatefulWidget { State createState() => ComplaintsDetailsPageState(); } -class ComplaintsDetailsPageState - extends LocalizedState { +class ComplaintsDetailsPageState extends LocalizedState { static const _dateOfComplaint = 'dateOfComplaint'; static const _administrativeArea = 'administrativeArea'; static const _complaintRaisedFor = 'complaintRaisedFor'; @@ -57,15 +53,13 @@ class ComplaintsDetailsPageState form: () => bloc.state.map( create: (value) => buildForm(value), persisted: (value) => - - throw const InvalidComplaintsRegistrationStateException(), + throw const InvalidComplaintsRegistrationStateException(), view: (value) => buildForm(value), ), builder: (_, form, __) => BlocListener( listener: (context, state) { context.navigateTo(const ComplaintsInboxWrapperRoute()); }, - child: BlocConsumer( listener: (context, complaintState) { @@ -79,7 +73,6 @@ class ComplaintsDetailsPageState final isRaisedForSelf = form.control(_complaintRaisedFor).value == i18.complaints.raisedForMyself; - return ScrollableContent( enableFixedButton: true, header: const Column( @@ -91,8 +84,7 @@ class ComplaintsDetailsPageState child: DigitCard( margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), padding: - - const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), + const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), child: DigitElevatedButton( onPressed: () async { setState(() { @@ -103,61 +95,59 @@ class ComplaintsDetailsPageState router.parent()?.maybePop(); } - if (!form.valid){ + if (!form.valid) { return; } FocusManager.instance.primaryFocus?.unfocus(); final dateOfComplaint = - form.control(_dateOfComplaint).value as DateTime; + form.control(_dateOfComplaint).value as DateTime; final complaintRaisedFor = - form.control(_complaintRaisedFor).value as String; + form.control(_complaintRaisedFor).value as String; final complainantName = - form.control(_complainantName).value as String; + form.control(_complainantName).value as String; final complainantContactNumber = form .control(_complainantContactNumber) .value as String; final supervisorName = - form.control(_supervisorName).value as String?; - + form.control(_supervisorName).value as String?; final supervisorContactNumber = form .control(_supervisorContactNumber) .value as String?; final complaintDescription = - - form.control(_complaintDescription).value as String; - + form.control(_complaintDescription).value as String; state.whenOrNull( create: ( - loading, - complaintType, - _, - addressModel, - complaintsDetailsModel, - ) { + loading, + complaintType, + _, + addressModel, + complaintsDetailsModel, + ) { bloc.add( ComplaintsRegistrationEvent.saveComplaintDetails( boundaryModel: ComplaintsSingleton().boundary, complaintsDetailsModel: ComplaintsDetailsModel( - administrativeArea: - ComplaintsSingleton().boundary.code.toString(), + administrativeArea: ComplaintsSingleton() + .boundary + .code + .toString(), dateOfComplaint: dateOfComplaint, complaintRaisedFor: complaintRaisedFor, complainantName: complainantName, complainantContactNumber: - complainantContactNumber, + complainantContactNumber, supervisorName: supervisorName, supervisorContactNumber: - supervisorContactNumber, - + supervisorContactNumber, complaintDescription: complaintDescription, ), ), @@ -165,10 +155,8 @@ class ComplaintsDetailsPageState }, ); - final userId = ComplaintsSingleton().loggedInUserUuid; - final submit = await DigitDialog.show( context, options: DigitDialogOptions( @@ -183,7 +171,6 @@ class ComplaintsDetailsPageState i18.common.coreCommonSubmit, ), action: (context) { - Navigator.of( context, rootNavigator: true, @@ -195,7 +182,6 @@ class ComplaintsDetailsPageState i18.common.coreCommonCancel, ), action: (context) { - Navigator.of( context, rootNavigator: true, @@ -207,23 +193,19 @@ class ComplaintsDetailsPageState if (submit != true) return; - bloc.add( ComplaintsRegistrationSubmitComplaintEvent( userId: userId, ), ); - }, child: Center( child: Text( form.control(_complaintDetailsForm).disabled ? localizations - - .translate(i18.complaints.backToInbox) + .translate(i18.complaints.backToInbox) : localizations - .translate(i18.common.coreCommonSubmit), - + .translate(i18.common.coreCommonSubmit), ), ), ), @@ -273,10 +255,8 @@ class ComplaintsDetailsPageState children: [ RadioGroup.builder( groupValue: - - form.control(_complaintRaisedFor).value ?? - "", - + form.control(_complaintRaisedFor).value ?? + "", onChanged: (changedValue) { if (form .control(_complaintRaisedFor) @@ -288,14 +268,14 @@ class ComplaintsDetailsPageState form .control(_complainantContactNumber) .value = ""; - } - - else{ - form.control(_complainantName).value = - ComplaintsSingleton().userName; - form.control(_complainantContactNumber).value = - ComplaintsSingleton().userMobileNumber; - + } else { + form.control(_complainantName).value = + ComplaintsSingleton().userName; + form + .control(_complainantContactNumber) + .value = + ComplaintsSingleton() + .userMobileNumber; } setState(() { @@ -305,10 +285,8 @@ class ComplaintsDetailsPageState }, textStyle: TextStyle( color: form - - .control(_complaintRaisedFor) - .disabled - + .control(_complaintRaisedFor) + .disabled ? theme.colorScheme.shadow : theme.colorScheme.onBackground, ), @@ -342,57 +320,53 @@ class ComplaintsDetailsPageState ], ), ), - Column( - children: [ - DigitTextFormField( - formControlName: _complainantName, - label: localizations.translate( - i18.complaints.complainantName, - ), - readOnly: isRaisedForSelf, - isRequired: true, - validationMessages: { - 'required': (object) => - localizations.translate(i18.complaints - .validationRequiredError), - 'maxLength': (object) => localizations - .translate( - i18.common.maxCharsRequired) - .replaceAll('{}', '64'), - }, - ), - DigitTextFormField( - formControlName: _complainantContactNumber, - label: localizations.translate( - i18.complaints.complainantContactNumber, - ), - readOnly: isRaisedForSelf, - isRequired: true, - keyboardType: TextInputType.number, - inputFormatters: [ - FilteringTextInputFormatter.digitsOnly, - ], - validationMessages: { - 'mobileNumber': (object) => - localizations.translate(i18 - .individualDetails - .mobileNumberInvalidFormatValidationMessage), - 'required': (object) => - localizations.translate(i18.complaints - .validationRequiredError), - 'minLength': (object) => - localizations.translate(i18.complaints - .validationMinLengthError), - 'maxLength': (object) => localizations - .translate( - i18.common.maxCharsRequired) - .replaceAll('{}', '10'), - }, - ), + children: [ + DigitTextFormField( + formControlName: _complainantName, + label: localizations.translate( + i18.complaints.complainantName, + ), + readOnly: isRaisedForSelf, + isRequired: true, + validationMessages: { + 'required': (object) => + localizations.translate(i18 + .complaints.validationRequiredError), + 'maxLength': (object) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', '64'), + }, + ), + DigitTextFormField( + formControlName: _complainantContactNumber, + label: localizations.translate( + i18.complaints.complainantContactNumber, + ), + readOnly: isRaisedForSelf, + isRequired: true, + keyboardType: TextInputType.number, + inputFormatters: [ + FilteringTextInputFormatter.digitsOnly, ], + validationMessages: { + 'mobileNumber': (object) => + localizations.translate(i18 + .individualDetails + .mobileNumberInvalidFormatValidationMessage), + 'required': (object) => + localizations.translate(i18 + .complaints.validationRequiredError), + 'minLength': (object) => + localizations.translate(i18 + .complaints.validationMinLengthError), + 'maxLength': (object) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', '10'), + }, ), - + ], + ), DigitTextFormField( formControlName: _supervisorName, label: localizations.translate( @@ -436,10 +410,8 @@ class ComplaintsDetailsPageState isRequired: true, validationMessages: { 'required': (object) => localizations.translate( - - i18.complaints.validationRequiredError, - ), - + i18.complaints.validationRequiredError, + ), 'maxLength': (object) => localizations .translate(i18.common.maxCharsRequired) .replaceAll('{}', '1000'), @@ -472,11 +444,9 @@ class ComplaintsDetailsPageState validators: [], ), _administrativeArea: FormControl( - - value: localizations.translate( - (complaintDetails?.administrativeArea ?? ComplaintsSingleton().boundary.name) - .toString()), - + value: localizations.translate((complaintDetails?.administrativeArea ?? + ComplaintsSingleton().boundary.name) + .toString()), disabled: shouldDisableForm, validators: [Validators.required], ), diff --git a/packages/complaints/lib/utils/constants.dart b/packages/complaints/lib/utils/constants.dart index 3186df232..2f23f6f43 100644 --- a/packages/complaints/lib/utils/constants.dart +++ b/packages/complaints/lib/utils/constants.dart @@ -1,3 +1,5 @@ - - -const String noResultSvg = 'assets/icons/svg/no_result.svg'; \ No newline at end of file +class Constants { + static String noResultSvg = 'assets/icons/svg/no_result.svg'; + static RegExp mobileNumberRegExp = + RegExp(r'^(?=.{10}$)[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\./0-9]*$'); +} diff --git a/packages/complaints/lib/widgets/no_result_card/no_result_card.dart b/packages/complaints/lib/widgets/no_result_card/no_result_card.dart index fc7d52119..f7b27c178 100644 --- a/packages/complaints/lib/widgets/no_result_card/no_result_card.dart +++ b/packages/complaints/lib/widgets/no_result_card/no_result_card.dart @@ -23,7 +23,7 @@ class NoResultCard extends StatelessWidget { child: Column( children: [ SvgPicture.asset( - noResultSvg, + Constants.noResultSvg, width: 340, height: 200, ), diff --git a/packages/complaints/pubspec.lock b/packages/complaints/pubspec.lock index e451fcd62..a446fecf4 100644 --- a/packages/complaints/pubspec.lock +++ b/packages/complaints/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "64.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -125,10 +133,10 @@ packages: dependency: "direct main" description: name: build_runner - sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" url: "https://pub.dev" source: hosted - version: "2.4.9" + version: "2.4.11" build_runner_core: dependency: transitive description: @@ -250,14 +258,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.6" - db_viewer: - dependency: transitive - description: - name: db_viewer - sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" - url: "https://pub.dev" - source: hosted - version: "1.1.0" diff_match_patch: dependency: transitive description: @@ -269,19 +269,24 @@ packages: digit_components: dependency: "direct main" description: - name: digit_components - sha256: "07b585e5d8010639366da72a4a8b215ce9b8790c75b2162b66af3cea57ca35d9" - url: "https://pub.dev" - source: hosted + path: "../digit_components" + relative: true + source: path version: "1.0.2+1" digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" - url: "https://pub.dev" - source: hosted + path: "../digit_data_model" + relative: true + source: path version: "1.0.5-dev.1" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" dio: dependency: "direct main" description: @@ -302,26 +307,18 @@ packages: dependency: "direct main" description: name: drift - sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + sha256: "4e0ffee40d23f0b809e6cff1ad202886f51d629649073ed42d9cd1d194ea943e" url: "https://pub.dev" source: hosted - version: "2.15.0" - drift_db_viewer: - dependency: transitive - description: - name: drift_db_viewer - sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" + version: "2.19.1+1" easy_stepper: dependency: transitive description: name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" url: "https://pub.dev" source: hosted - version: "0.5.2+1" + version: "0.8.5+1" fake_async: dependency: transitive description: @@ -346,6 +343,46 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.1" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: e30da58198a6d4b49d5bce4e852f985c32cb10db329ebef9473db2b9f09ce810 + url: "https://pub.dev" + source: hosted + version: "5.3.0" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: @@ -439,6 +476,11 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.3" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" flutter_spinkit: dependency: transitive description: @@ -477,10 +519,10 @@ packages: dependency: transitive description: name: fluttertoast - sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" + sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" url: "https://pub.dev" source: hosted - version: "8.2.5" + version: "8.2.8" freezed: dependency: "direct dev" description: @@ -517,10 +559,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 url: "https://pub.dev" source: hosted - version: "4.0.5" + version: "6.2.1" graphs: dependency: transitive description: @@ -549,10 +591,10 @@ packages: dependency: transitive description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -573,10 +615,10 @@ packages: dependency: "direct main" description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" io: dependency: transitive description: @@ -625,6 +667,30 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -637,26 +703,26 @@ packages: dependency: transitive description: name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.0" location_web: dependency: transitive description: name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + sha256: "49dda13d415c4603c5775a33fb22f575e0aa3f0ec2916644ddcd722db31ee884" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "5.0.2" logging: dependency: transitive description: @@ -669,34 +735,34 @@ packages: dependency: transitive description: name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "3.1.3" matcher: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -749,26 +815,26 @@ packages: dependency: transitive description: name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "8.0.2" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.1" path: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_parsing: dependency: transitive description: @@ -893,18 +959,18 @@ packages: dependency: transitive description: name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 + sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a url: "https://pub.dev" source: hosted - version: "0.8.1" + version: "2.1.1" reactive_forms: dependency: "direct main" description: name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "17.0.1" recase: dependency: "direct main" description: @@ -998,14 +1064,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqlite3: dependency: transitive description: name: sqlite3 - sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" + sha256: fde692580bee3379374af1f624eb3e113ab2865ecb161dbe2d8ac2de9735dbdb url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.5" sqlite3_flutter_libs: dependency: transitive description: @@ -1058,26 +1132,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" timing: dependency: transitive description: @@ -1106,10 +1180,10 @@ packages: dependency: transitive description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.5.1" vector_graphics: dependency: transitive description: @@ -1146,10 +1220,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1162,10 +1236,10 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.5.1" web_socket_channel: dependency: transitive description: @@ -1215,5 +1289,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.22.0" diff --git a/packages/complaints/pubspec.yaml b/packages/complaints/pubspec.yaml index d3f9238e7..caa246c50 100644 --- a/packages/complaints/pubspec.yaml +++ b/packages/complaints/pubspec.yaml @@ -14,27 +14,25 @@ dependencies: flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 - auto_route: ^7.8.4 + auto_route: ^8.3.0 digit_data_model: ^1.0.5-dev.1 dart_mappable: ^4.2.0 group_radio_button: ^1.3.0 - reactive_forms: ^14.1.0 + reactive_forms: ^17.0.0 recase: ^4.1.0 flutter_dotenv: ^5.0.2 flutter_svg: ^2.0.8 path_provider: ^2.0.11 - intl: ^0.18.0 + intl: ^0.19.0 drift: ^2.0.0 dio: ^5.1.2 isar: ^3.0.5 - - dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^2.0.0 - auto_route_generator: ^7.3.2 + auto_route_generator: ^8.0.0 freezed: ^2.1.0+1 json_serializable: ^6.4.0 dart_mappable_builder: diff --git a/packages/digit_firebase_services/pubspec.lock b/packages/digit_firebase_services/pubspec.lock index 7b890a488..20c7bd06b 100644 --- a/packages/digit_firebase_services/pubspec.lock +++ b/packages/digit_firebase_services/pubspec.lock @@ -128,30 +128,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.7" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" - url: "https://pub.dev" - source: hosted - version: "10.0.4" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" - url: "https://pub.dev" - source: hosted - version: "3.0.3" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://pub.dev" - source: hosted - version: "3.0.1" lints: dependency: transitive description: @@ -164,34 +140,34 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.5.0" meta: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.10.0" path: dependency: transitive description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.8.3" plugin_platform_interface: dependency: transitive description: @@ -249,10 +225,10 @@ packages: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.6.1" vector_math: dependency: transitive description: @@ -261,14 +237,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - vm_service: - dependency: transitive - description: - name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" - url: "https://pub.dev" - source: hosted - version: "14.2.1" web: dependency: transitive description: @@ -278,5 +246,5 @@ packages: source: hosted version: "0.3.0" sdks: - dart: ">=3.3.0 <4.0.0" - flutter: ">=3.18.0-18.0.pre.54" + dart: ">=3.2.0 <4.0.0" + flutter: ">=3.3.0" diff --git a/packages/digit_showcase/pubspec.lock b/packages/digit_showcase/pubspec.lock index d994e77f0..c4c977b97 100644 --- a/packages/digit_showcase/pubspec.lock +++ b/packages/digit_showcase/pubspec.lock @@ -58,10 +58,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 + sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" url: "https://pub.dev" source: hosted - version: "2.0.3" + version: "4.0.0" flutter_test: dependency: "direct dev" description: flutter @@ -71,10 +71,10 @@ packages: dependency: transitive description: name: lints - sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "4.0.0" matcher: dependency: transitive description: diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 74c6979f2..dfee402ee 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "4eec93681221723a686ad580c2e7d960e1017cf1a4e0a263c2573c2c6b0bf5cd" + url: "https://pub.dev" + source: hosted + version: "1.3.25" analyzer: dependency: transitive description: @@ -29,18 +37,18 @@ packages: dependency: transitive description: name: ansicolor - sha256: "8bf17a8ff6ea17499e40a2d2542c2f481cd7615760c6d34065cb22bfd22e6880" + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.0.3" archive: dependency: transitive description: name: archive - sha256: "6bd38d335f0954f5fad9c79e614604fbf03a0e5b975923dd001b6ea965ef5b4b" + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d url: "https://pub.dev" source: hosted - version: "3.6.0" + version: "3.6.1" args: dependency: transitive description: @@ -117,18 +125,18 @@ packages: dependency: "direct main" description: name: auto_route - sha256: "6cad3f408863ffff2b5757967c802b18415dac4acb1b40c5cdd45d0a26e5080f" + sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 url: "https://pub.dev" source: hosted - version: "8.1.3" + version: "7.9.2" auto_route_generator: dependency: "direct dev" description: name: auto_route_generator - sha256: ba28133d3a3bf0a66772bcc98dade5843753cd9f1a8fb4802b842895515b67d3 + sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" url: "https://pub.dev" source: hosted - version: "8.0.0" + version: "7.3.2" bloc: dependency: transitive description: @@ -186,13 +194,13 @@ packages: source: hosted version: "2.4.2" build_runner: - dependency: "direct dev" + dependency: "direct main" description: name: build_runner - sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" + sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" url: "https://pub.dev" source: hosted - version: "2.4.11" + version: "2.4.9" build_runner_core: dependency: transitive description: @@ -221,42 +229,42 @@ packages: dependency: transitive description: name: camera - sha256: "2170a943dcb67be2af2c6bcda8775e74b41d4c02d6a4eb10bdc832ee185c4eea" + sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" url: "https://pub.dev" source: hosted - version: "0.11.0+1" - camera_android_camerax: + version: "0.10.5+9" + camera_android: dependency: transitive description: - name: camera_android_camerax - sha256: "7d84815edbb8304b51c10deba3c20f44eef80aa46ff156ec45428ed16600b49a" + name: camera_android + sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 url: "https://pub.dev" source: hosted - version: "0.6.5+5" + version: "0.10.9+2" camera_avfoundation: dependency: transitive description: name: camera_avfoundation - sha256: "7d021e8cd30d9b71b8b92b4ad669e80af432d722d18d6aac338572754a786c15" + sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" url: "https://pub.dev" source: hosted - version: "0.9.16" + version: "0.9.13+10" camera_platform_interface: dependency: transitive description: name: camera_platform_interface - sha256: a250314a48ea337b35909a4c9d5416a208d736dcb01d0b02c6af122be66660b0 + sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 url: "https://pub.dev" source: hosted - version: "2.7.4" + version: "2.8.0" camera_web: dependency: transitive description: name: camera_web - sha256: "9e9aba2fbab77ce2472924196ff8ac4dd8f9126c4f9a3096171cd1d870d6b26c" + sha256: b9235ec0a2ce949daec546f1f3d86f05c3921ed31c7d9ab6b7c03214d152fc2d url: "https://pub.dev" source: hosted - version: "0.3.3" + version: "0.3.4" characters: dependency: transitive description: @@ -333,10 +341,10 @@ packages: dependency: transitive description: name: cross_file - sha256: "55d7b444feb71301ef6b8838dbc1ae02e63dd48c8773f3810ff53bb1e2945b32" + sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e url: "https://pub.dev" source: hosted - version: "0.3.4+1" + version: "0.3.3+8" crypto: dependency: transitive description: @@ -345,6 +353,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" + url: "https://pub.dev" + source: hosted + version: "1.0.0" cupertino_icons: dependency: transitive description: @@ -353,6 +369,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" + dart_code_metrics: + dependency: "direct dev" + description: + name: dart_code_metrics + sha256: "3dede3f7abc077a4181ec7445448a289a9ce08e2981e6a4d49a3fb5099d47e1f" + url: "https://pub.dev" + source: hosted + version: "5.7.6" + dart_code_metrics_presets: + dependency: transitive + description: + name: dart_code_metrics_presets + sha256: b71eadf02a3787ebd5c887623f83f6fdc204d45c75a081bd636c4104b3fd8b73 + url: "https://pub.dev" + source: hosted + version: "1.8.0" dart_mappable: dependency: "direct main" description: @@ -364,10 +396,12 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.3" + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git + version: "4.2.0" dart_style: dependency: transitive description: @@ -395,10 +429,11 @@ packages: digit_components: dependency: "direct main" description: - path: "../digit_components" - relative: true - source: path - version: "1.0.2" + name: digit_components + sha256: "07b585e5d8010639366da72a4a8b215ce9b8790c75b2162b66af3cea57ca35d9" + url: "https://pub.dev" + source: hosted + version: "1.0.2+1" digit_data_model: dependency: "direct main" description: @@ -406,36 +441,53 @@ packages: relative: true source: path version: "1.0.4" - digit_scanner: - dependency: "direct main" + digit_firebase_services: + dependency: "direct overridden" description: - path: "../digit_scanner" + path: "../digit_firebase_services" relative: true source: path - version: "1.0.4" + version: "0.0.1" + digit_scanner: + dependency: "direct main" + description: + name: digit_scanner + sha256: "9862c4885465bb1942e36dc9b42596c201648db9b0f5ffb8ad768e2409fc2742" + url: "https://pub.dev" + source: hosted + version: "1.0.3+1" digit_showcase: dependency: "direct main" description: - path: "../digit_showcase" - relative: true - source: path - version: "1.0.1" + name: digit_showcase + sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" + url: "https://pub.dev" + source: hosted + version: "1.0.0" dio: - dependency: "direct main" + dependency: transitive description: name: dio - sha256: "11e40df547d418cc0c4900a9318b26304e665da6fa4755399a9ff9efd09034b5" + sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" url: "https://pub.dev" source: hosted - version: "5.4.3+1" + version: "5.7.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac" + url: "https://pub.dev" + source: hosted + version: "1.0.1" drift: dependency: "direct main" description: name: drift - sha256: "6acedc562ffeed308049f78fb1906abad3d65714580b6745441ee6d50ec564cd" + sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 url: "https://pub.dev" source: hosted - version: "2.18.0" + version: "2.15.0" drift_db_viewer: dependency: "direct main" description: @@ -448,18 +500,18 @@ packages: dependency: "direct dev" description: name: drift_dev - sha256: d9b020736ea85fff1568699ce18b89fabb3f0f042e8a7a05e84a3ec20d39acde + sha256: c037d9431b6f8dc633652b1469e5f53aaec6e4eb405ed29dd232fa888ef10d88 url: "https://pub.dev" source: hosted - version: "2.18.0" + version: "2.15.0" easy_stepper: dependency: transitive description: name: easy_stepper - sha256: d09e974ec9148480072f8a7d3b0779dfdbc1a3ec1ff7daa7fbda95b0c1fe7453 + sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" url: "https://pub.dev" source: hosted - version: "0.8.5" + version: "0.5.2+1" fake_async: dependency: transitive description: @@ -484,6 +536,46 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "53316975310c8af75a96e365f9fccb67d1c544ef0acdbf0d88bbe30eedd1c4f9" + url: "https://pub.dev" + source: hosted + version: "2.27.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: e30da58198a6d4b49d5bce4e852f985c32cb10db329ebef9473db2b9f09ce810 + url: "https://pub.dev" + source: hosted + version: "5.3.0" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: c8e1d59385eee98de63c92f961d2a7062c5d9a65e7f45bdc7f1b0b205aab2492 + url: "https://pub.dev" + source: hosted + version: "2.11.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: c4f1b723d417bc9c4774810e774ff91df8fb0032d33fb2888b2c887e865581b8 + url: "https://pub.dev" + source: hosted + version: "3.4.18" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: c5a11fca3df76a98e3fa68fde8b10a08aacb9a7639f619fbfd4dad6c67a08643 + url: "https://pub.dev" + source: hosted + version: "3.6.25" fixnum: dependency: transitive description: @@ -501,10 +593,10 @@ packages: dependency: "direct main" description: name: flutter_bloc - sha256: f0ecf6e6eb955193ca60af2d5ca39565a86b8a142452c5b24d96fb477428f4d2 + sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a url: "https://pub.dev" source: hosted - version: "8.1.5" + version: "8.1.6" flutter_focus_watcher: dependency: transitive description: @@ -565,15 +657,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" + sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" url: "https://pub.dev" source: hosted - version: "4.0.0" - flutter_localizations: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" + version: "3.0.2" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -594,10 +681,10 @@ packages: dependency: "direct main" description: name: flutter_svg - sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" + sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c url: "https://pub.dev" source: hosted - version: "2.0.10+1" + version: "2.0.9" flutter_test: dependency: "direct dev" description: flutter @@ -620,10 +707,10 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: "7eae679e596a44fdf761853a706f74979f8dd3cd92cf4e23cae161fda091b847" + sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" url: "https://pub.dev" source: hosted - version: "8.2.6" + version: "8.2.5" formula_parser: dependency: "direct main" description: @@ -644,10 +731,10 @@ packages: dependency: "direct main" description: name: freezed_annotation - sha256: c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d + sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.4" frontend_server_client: dependency: transitive description: @@ -668,26 +755,26 @@ packages: dependency: transitive description: name: google_fonts - sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 + sha256: "6b6f10f0ce3c42f6552d1c70d2c28d764cf22bb487f50f66cca31dcd5194f4d6" url: "https://pub.dev" source: hosted - version: "6.2.1" + version: "4.0.4" google_mlkit_barcode_scanning: dependency: transitive description: name: google_mlkit_barcode_scanning - sha256: f1a2a39cf1730b9a5e2784a07efa1ca5bfdfdde6aa00b193b3f8cd1953c638ec + sha256: "965183a8cd5cef8477ceea5dbdf29c34a739cf0cfbf1bdad54cd3f9f1807afe5" url: "https://pub.dev" source: hosted - version: "0.12.0" + version: "0.10.0" google_mlkit_commons: dependency: transitive description: name: google_mlkit_commons - sha256: "27d626c66a181351a953eba5b6ff1ff123aadb891b4dab085b292118f039d6ac" + sha256: "046586b381cdd139f7f6a05ad6998f7e339d061bd70158249907358394b5f496" url: "https://pub.dev" source: hosted - version: "0.7.1" + version: "0.6.1" graphs: dependency: transitive description: @@ -696,14 +783,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.1" + group_radio_button: + dependency: "direct main" + description: + name: group_radio_button + sha256: "204de8d16b224be7fc72dade0c3afd410ff5a34417d89f74f0fd8be7a8c2b4d6" + url: "https://pub.dev" + source: hosted + version: "1.3.0" gs1_barcode_parser: dependency: "direct main" description: name: gs1_barcode_parser - sha256: "9aaff47bdab7177deaf9248cc861ef41cf611d3f828498cb40b64bedcbf53391" + sha256: ff171bc40038de3f7178fbc32eaf9eebc3d35a3c4c00bb0281fe4a976d853a42 url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.1.0" horizontal_data_table: dependency: transitive description: @@ -712,14 +807,22 @@ packages: url: "https://pub.dev" source: hosted version: "4.3.1" + html: + dependency: transitive + description: + name: html + sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" + url: "https://pub.dev" + source: hosted + version: "0.15.4" http: dependency: transitive description: name: http - sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" + sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "0.13.6" http_multi_server: dependency: transitive description: @@ -740,10 +843,10 @@ packages: dependency: "direct main" description: name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" url: "https://pub.dev" source: hosted - version: "0.19.0" + version: "0.18.1" io: dependency: transitive description: @@ -820,34 +923,34 @@ packages: dependency: transitive description: name: lints - sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" + sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "3.0.0" location: - dependency: "direct main" + dependency: transitive description: name: location - sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" + sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" url: "https://pub.dev" source: hosted - version: "6.0.2" + version: "5.0.3" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" + sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "3.1.2" location_web: dependency: transitive description: name: location_web - sha256: "15ad7b4c8a9f55abee513373755e093a40c04d7e24fc1b4f89676fe99523d034" + sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "4.2.0" logging: dependency: transitive description: @@ -860,10 +963,10 @@ packages: dependency: transitive description: name: lottie - sha256: "6a24ade5d3d918c306bb1c21a6b9a04aab0489d51a2582522eea820b4093b62b" + sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "2.7.0" matcher: dependency: transitive description: @@ -892,18 +995,18 @@ packages: dependency: transitive description: name: mime - sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.6" mocktail: dependency: "direct dev" description: name: mocktail - sha256: c4b5007d91ca4f67256e720cb1b6d704e79a510183a12fa551021f652577dce6 + sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" nested: dependency: transitive description: @@ -940,18 +1043,18 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: b93d8b4d624b4ea19b0a5a208b2d6eff06004bc3ce74c06040b120eeadd00ce0 + sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" url: "https://pub.dev" source: hosted - version: "8.0.0" + version: "5.0.1" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: f49918f3433a3146047372f9d4f1f847511f2acd5cd030e1f44fe5a50036b70e + sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "2.0.1" path: dependency: "direct main" description: @@ -972,10 +1075,10 @@ packages: dependency: "direct main" description: name: path_provider - sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" path_provider_android: dependency: transitive description: @@ -1012,10 +1115,10 @@ packages: dependency: transitive description: name: path_provider_windows - sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.3.0" petitparser: dependency: transitive description: @@ -1028,10 +1131,10 @@ packages: dependency: transitive description: name: platform - sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" + sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" url: "https://pub.dev" source: hosted - version: "3.1.4" + version: "3.1.5" plugin_platform_interface: dependency: transitive description: @@ -1044,10 +1147,10 @@ packages: dependency: "direct main" description: name: pluto_grid - sha256: "1d4cd9d2652742b556aa9b3230cc64672a3f63c34a9acc80fef794ab36ad903b" + sha256: e77c34a33dd9d74abbe20ba1df96474dded150dd042c7f7495be1bc2c26bd37f url: "https://pub.dev" source: hosted - version: "8.0.0" + version: "7.0.2" pointer_interceptor: dependency: transitive description: @@ -1064,6 +1167,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.1" + process: + dependency: transitive + description: + name: process + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + url: "https://pub.dev" + source: hosted + version: "4.2.4" provider: dependency: transitive description: @@ -1080,30 +1191,38 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + pub_updater: + dependency: transitive + description: + name: pub_updater + sha256: "05ae70703e06f7fdeb05f7f02dd680b8aad810e87c756a618f33e1794635115c" + url: "https://pub.dev" + source: hosted + version: "0.3.0" pubspec_parse: dependency: transitive description: name: pubspec_parse - sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 + sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 url: "https://pub.dev" source: hosted - version: "1.2.3" + version: "1.3.0" reactive_flutter_typeahead: dependency: transitive description: name: reactive_flutter_typeahead - sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a + sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "0.8.1" reactive_forms: dependency: "direct main" description: name: reactive_forms - sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" + sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" url: "https://pub.dev" source: hosted - version: "17.0.1" + version: "14.3.0" recase: dependency: "direct main" description: @@ -1205,14 +1324,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" - sprintf: - dependency: transitive - description: - name: sprintf - sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" - url: "https://pub.dev" - source: hosted - version: "7.0.0" sqlite3: dependency: transitive description: @@ -1225,18 +1336,18 @@ packages: dependency: "direct main" description: name: sqlite3_flutter_libs - sha256: "9f89a7e7dc36eac2035808427eba1c3fbd79e59c3a22093d8dace6d36b1fe89e" + sha256: "62bbb4073edbcdf53f40c80775f33eea01d301b7b81417e5b3fb7395416258c1" url: "https://pub.dev" source: hosted - version: "0.5.23" + version: "0.5.24" sqlparser: dependency: transitive description: name: sqlparser - sha256: ade9a67fd70d0369329ed3373208de7ebd8662470e8c396fc8d0d60f9acdfc9f + sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" url: "https://pub.dev" source: hosted - version: "0.36.0" + version: "0.34.1" stack_trace: dependency: transitive description: @@ -1269,6 +1380,13 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" + survey_form: + dependency: "direct main" + description: + path: "../survey_form" + relative: true + source: path + version: "0.0.1-dev.1" synchronized: dependency: transitive description: @@ -1337,34 +1455,34 @@ packages: dependency: "direct main" description: name: uuid - sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8" + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" url: "https://pub.dev" source: hosted - version: "4.4.0" + version: "3.0.7" vector_graphics: dependency: transitive description: name: vector_graphics - sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" + sha256: "4ac59808bbfca6da38c99f415ff2d3a5d7ca0a6b4809c71d9cf30fba5daf9752" url: "https://pub.dev" source: hosted - version: "1.1.11+1" + version: "1.1.10+1" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da + sha256: f3247e7ab0ec77dc759263e68394990edc608fb2b480b80db8aa86ed09279e33 url: "https://pub.dev" source: hosted - version: "1.1.11+1" + version: "1.1.10+1" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" + sha256: "18489bdd8850de3dd7ca8a34e0c446f719ec63e2bab2e7a8cc66a9028dd76c5a" url: "https://pub.dev" source: hosted - version: "1.1.11+1" + version: "1.1.10+1" vector_math: dependency: transitive description: @@ -1393,10 +1511,10 @@ packages: dependency: transitive description: name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "0.3.0" web_socket_channel: dependency: transitive description: @@ -1446,5 +1564,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <4.0.0" - flutter: ">=3.22.0" + dart: ">=3.3.0 <3.9.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/survey_form/pubspec.yaml b/packages/survey_form/pubspec.yaml index cd4bc2e25..3558f96fd 100644 --- a/packages/survey_form/pubspec.yaml +++ b/packages/survey_form/pubspec.yaml @@ -11,11 +11,11 @@ environment: dependencies: flutter: sdk: flutter - digit_ui_components: ^0.0.1+7 + digit_ui_components: ^0.0.2-dev flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 - reactive_forms: ^14.1.0 + reactive_forms: ^17.0.0 fluttertoast: ^8.1.2 overlay_builder: ^1.1.0 intl: ^0.18.0 diff --git a/packages/sync_service/pubspec.yaml b/packages/sync_service/pubspec.yaml index b2e23550f..80597006c 100644 --- a/packages/sync_service/pubspec.yaml +++ b/packages/sync_service/pubspec.yaml @@ -13,9 +13,9 @@ dependencies: sdk: flutter flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 - dart_mappable: ^4.2.0 + dart_mappable: ^4.2.2 drift: ^2.18.0 - sqlite3_flutter_libs: ^0.5.23 + sqlite3_flutter_libs: ^0.5.11+1 path_provider: ^2.1.3 path: ^1.9.0 uuid: ^4.4.0 @@ -23,7 +23,6 @@ dependencies: isar: ^3.1.0+1 isar_flutter_libs: ^3.1.0+1 dio: ^5.4.3+1 - mocktail: ^1.0.3 collection: ^1.18.0 flutter_background_service: ^5.0.5 provider: ^6.1.2 @@ -35,10 +34,11 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter + mocktail: ^1.0.3 flutter_lints: ^4.0.0 freezed: ^2.1.0+1 build_runner: ^2.4.11 - json_serializable: ^6.4.0 + json_serializable: ^6.8.0 drift_dev: ^2.18.0 bloc_test: ^9.1.0 dart_mappable_builder: @@ -46,7 +46,7 @@ dev_dependencies: url: https://github.com/egovernments/health-campaign-field-worker-app/ ref: master path: ./packages/dart_mappable_builder - isar_generator: ^3.0.5 + isar_generator: ^3.1.0+1 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec From acf5c799ec441aafade984b8343842a81ad39729 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Fri, 22 Nov 2024 16:03:03 +0530 Subject: [PATCH 166/241] Solved the checklist localization issue --- .../lib/pages/language_selection.dart | 13 ++++++++---- .../lib/widgets/sidebar/side_bar.dart | 20 +++++++------------ .../lib/pages/survey_form_preview.dart | 1 + .../lib/pages/survey_form_view.dart | 4 ++-- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart b/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart index d14118731..9ec5f06df 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/language_selection.dart @@ -12,6 +12,7 @@ import '../data/local_store/app_shared_preferences.dart'; import '../data/local_store/no_sql/schema/app_configuration.dart'; import '../router/app_router.dart'; import '../utils/constants.dart'; +import '../utils/environment_config.dart'; import '../utils/i18_key_constants.dart' as i18; import '../utils/utils.dart'; @@ -154,10 +155,14 @@ class _LanguageSelectionPageState extends State { setState(() {}); context.read().add( LocalizationEvent.onLoadLocalization( - module: localizationModulesList - .map((e) => e.name.toString()) - .join(',') - .toString(), + module: 'hcm-boundary-${envConfig.variables.hierarchyType.toLowerCase()},${localizationModulesList + .map((e) + => + e.name.toString() + ) + .join(',') + .toString() + }', tenantId: tenantId, locale: locale, path: Constants.localizationApiPath, diff --git a/apps/health_campaign_field_worker_app/lib/widgets/sidebar/side_bar.dart b/apps/health_campaign_field_worker_app/lib/widgets/sidebar/side_bar.dart index f51d997b1..6d7be2b68 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/sidebar/side_bar.dart +++ b/apps/health_campaign_field_worker_app/lib/widgets/sidebar/side_bar.dart @@ -13,6 +13,7 @@ import '../../blocs/localization/localization.dart'; import '../../models/data_model.dart'; import '../../models/entities/roles_type.dart'; import '../../router/app_router.dart'; +import '../../utils/environment_config.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; @@ -124,17 +125,11 @@ class SideBar extends StatelessWidget { ele.value.toString() == value.value.toString(), ); - context.read().add( - LocalizationEvent - .onLoadLocalization( - module: localizationModulesList - .interfaces - .where((element) => - element.type == - Modules.localizationModule) - .map((e) => e.name.toString()) - .join(',') - .toString(), + context + .read() + .add(LocalizationEvent.onLoadLocalization( + module: + "hcm-boundary-${envConfig.variables.hierarchyType.toLowerCase()},${localizationModulesList.interfaces.where((element) => element.type == Modules.localizationModule).map((e) => e.name.toString()).join(',')}", tenantId: appConfig.tenantId ?? "default", locale: value.value.toString(), @@ -207,8 +202,7 @@ class SideBar extends StatelessWidget { i18.common.coreCommonOk, ), action: (ctx) => - Navigator.of(context, rootNavigator: true) - .pop(), + Navigator.of(context, rootNavigator: true).pop(), ), ), ); diff --git a/packages/survey_form/lib/pages/survey_form_preview.dart b/packages/survey_form/lib/pages/survey_form_preview.dart index fbc0bae7e..671a357b9 100644 --- a/packages/survey_form/lib/pages/survey_form_preview.dart +++ b/packages/survey_form/lib/pages/survey_form_preview.dart @@ -37,6 +37,7 @@ class SurveyFormPreviewPageState extends LocalizedState { header: const Column(children: [ BackNavigationHelpHeaderWidget(), ]), + enableFixedButton: true, footer: BlocBuilder( builder: (context, state) { return state.maybeWhen( diff --git a/packages/survey_form/lib/pages/survey_form_view.dart b/packages/survey_form/lib/pages/survey_form_view.dart index 6f02544c9..cb98f1730 100644 --- a/packages/survey_form/lib/pages/survey_form_view.dart +++ b/packages/survey_form/lib/pages/survey_form_view.dart @@ -487,7 +487,7 @@ class SurveyFormViewPageState extends LocalizedState { const EdgeInsets.only( left: kPadding * 2), child: DigitCheckboxTile( - label: item, + label: localizations.translate('${selectedServiceDefinition?.code}.${item}'), value: controller[index] .text .split('.') @@ -927,7 +927,7 @@ class SurveyFormViewPageState extends LocalizedState { return Column( children: item.values! .map((e) => DigitCheckboxTile( - label: e, + label: localizations.translate('${selectedServiceDefinition?.code}.${e}'), value: controller[index].text.split('.').contains(e), onChanged: (value) { context.read().add( From 2fc780e66b67f14a2f37179fbde48710d521688e Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Fri, 22 Nov 2024 16:22:15 +0530 Subject: [PATCH 167/241] Changed the attribute datatype from string to bool in digit data model package --- .../local_store/sql_store/sql_store.g.dart | 27 ++++++++++--------- .../sql_store/tables/attributes.dart | 2 +- .../lib/models/entities/attributes.dart | 4 +-- .../models/entities/attributes.mapper.dart | 12 ++++----- .../lib/pages/survey_form_view.dart | 2 +- .../test/constants/test_constants.dart | 4 +-- 6 files changed, 27 insertions(+), 24 deletions(-) diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart index 37daa8c69..d7b3f9bbf 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart @@ -25164,9 +25164,12 @@ class $AttributesTable extends Attributes static const VerificationMeta _isActiveMeta = const VerificationMeta('isActive'); @override - late final GeneratedColumn isActive = GeneratedColumn( + late final GeneratedColumn isActive = GeneratedColumn( 'is_active', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false); + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('CHECK ("is_active" IN (0, 1))')); static const VerificationMeta _requiredMeta = const VerificationMeta('required'); @override @@ -25447,7 +25450,7 @@ class $AttributesTable extends Attributes values: attachedDatabase.typeMapping .read(DriftSqlType.string, data['${effectivePrefix}values']), isActive: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}is_active']), + .read(DriftSqlType.bool, data['${effectivePrefix}is_active']), required: attachedDatabase.typeMapping .read(DriftSqlType.bool, data['${effectivePrefix}required']), regex: attachedDatabase.typeMapping @@ -25496,7 +25499,7 @@ class Attribute extends DataClass implements Insertable { final String? tenantId; final String? code; final String? values; - final String? isActive; + final bool? isActive; final bool? required; final String? regex; final int? order; @@ -25559,7 +25562,7 @@ class Attribute extends DataClass implements Insertable { map['values'] = Variable(values); } if (!nullToAbsent || isActive != null) { - map['is_active'] = Variable(isActive); + map['is_active'] = Variable(isActive); } if (!nullToAbsent || required != null) { map['required'] = Variable(required); @@ -25689,7 +25692,7 @@ class Attribute extends DataClass implements Insertable { tenantId: serializer.fromJson(json['tenantId']), code: serializer.fromJson(json['code']), values: serializer.fromJson(json['values']), - isActive: serializer.fromJson(json['isActive']), + isActive: serializer.fromJson(json['isActive']), required: serializer.fromJson(json['required']), regex: serializer.fromJson(json['regex']), order: serializer.fromJson(json['order']), @@ -25720,7 +25723,7 @@ class Attribute extends DataClass implements Insertable { 'tenantId': serializer.toJson(tenantId), 'code': serializer.toJson(code), 'values': serializer.toJson(values), - 'isActive': serializer.toJson(isActive), + 'isActive': serializer.toJson(isActive), 'required': serializer.toJson(required), 'regex': serializer.toJson(regex), 'order': serializer.toJson(order), @@ -25747,7 +25750,7 @@ class Attribute extends DataClass implements Insertable { Value tenantId = const Value.absent(), Value code = const Value.absent(), Value values = const Value.absent(), - Value isActive = const Value.absent(), + Value isActive = const Value.absent(), Value required = const Value.absent(), Value regex = const Value.absent(), Value order = const Value.absent(), @@ -25902,7 +25905,7 @@ class AttributesCompanion extends UpdateCompanion { final Value tenantId; final Value code; final Value values; - final Value isActive; + final Value isActive; final Value required; final Value regex; final Value order; @@ -25979,7 +25982,7 @@ class AttributesCompanion extends UpdateCompanion { Expression? tenantId, Expression? code, Expression? values, - Expression? isActive, + Expression? isActive, Expression? required, Expression? regex, Expression? order, @@ -26035,7 +26038,7 @@ class AttributesCompanion extends UpdateCompanion { Value? tenantId, Value? code, Value? values, - Value? isActive, + Value? isActive, Value? required, Value? regex, Value? order, @@ -26103,7 +26106,7 @@ class AttributesCompanion extends UpdateCompanion { map['values'] = Variable(values.value); } if (isActive.present) { - map['is_active'] = Variable(isActive.value); + map['is_active'] = Variable(isActive.value); } if (required.present) { map['required'] = Variable(required.value); diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/tables/attributes.dart b/packages/digit_data_model/lib/data/local_store/sql_store/tables/attributes.dart index 82d1ecdb3..18e330a5c 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/tables/attributes.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/tables/attributes.dart @@ -9,7 +9,7 @@ class Attributes extends Table { TextColumn get tenantId => text().nullable()(); TextColumn get code => text().nullable()(); TextColumn get values => text().nullable()(); - TextColumn get isActive => text().nullable()(); + BoolColumn get isActive => boolean().nullable()(); BoolColumn get required => boolean().nullable()(); TextColumn get regex => text().nullable()(); IntColumn get order => integer().nullable()(); diff --git a/packages/digit_data_model/lib/models/entities/attributes.dart b/packages/digit_data_model/lib/models/entities/attributes.dart index 29f317708..1af0a9f29 100644 --- a/packages/digit_data_model/lib/models/entities/attributes.dart +++ b/packages/digit_data_model/lib/models/entities/attributes.dart @@ -18,7 +18,7 @@ class AttributesSearchModel extends EntitySearchModel final String? referenceId; final String? tenantId; final String? code; - final String? isActive; + final bool? isActive; final bool? required; final String? regex; final int? order; @@ -62,7 +62,7 @@ class AttributesModel extends EntityModel with AttributesModelMappable { final String? tenantId; final String? code; final List? values; - final String? isActive; + final bool? isActive; final bool? required; final String? regex; final int? order; diff --git a/packages/digit_data_model/lib/models/entities/attributes.mapper.dart b/packages/digit_data_model/lib/models/entities/attributes.mapper.dart index 2b9f5e138..b5f207866 100644 --- a/packages/digit_data_model/lib/models/entities/attributes.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/attributes.mapper.dart @@ -36,8 +36,8 @@ class AttributesSearchModelMapper static String? _$code(AttributesSearchModel v) => v.code; static const Field _f$code = Field('code', _$code, opt: true); - static String? _$isActive(AttributesSearchModel v) => v.isActive; - static const Field _f$isActive = + static bool? _$isActive(AttributesSearchModel v) => v.isActive; + static const Field _f$isActive = Field('isActive', _$isActive, opt: true); static bool? _$required(AttributesSearchModel v) => v.required; static const Field _f$required = @@ -167,7 +167,7 @@ abstract class AttributesSearchModelCopyWith< String? referenceId, String? tenantId, String? code, - String? isActive, + bool? isActive, bool? required, String? regex, int? order, @@ -270,8 +270,8 @@ class AttributesModelMapper extends SubClassMapperBase { static List? _$values(AttributesModel v) => v.values; static const Field> _f$values = Field('values', _$values, opt: true); - static String? _$isActive(AttributesModel v) => v.isActive; - static const Field _f$isActive = + static bool? _$isActive(AttributesModel v) => v.isActive; + static const Field _f$isActive = Field('isActive', _$isActive, opt: true); static bool? _$required(AttributesModel v) => v.required; static const Field _f$required = @@ -429,7 +429,7 @@ abstract class AttributesModelCopyWith<$R, $In extends AttributesModel, $Out> String? tenantId, String? code, List? values, - String? isActive, + bool? isActive, bool? required, String? regex, int? order, diff --git a/packages/survey_form/lib/pages/survey_form_view.dart b/packages/survey_form/lib/pages/survey_form_view.dart index cb98f1730..d43db2d6d 100644 --- a/packages/survey_form/lib/pages/survey_form_view.dart +++ b/packages/survey_form/lib/pages/survey_form_view.dart @@ -379,7 +379,7 @@ class SurveyFormViewPageState extends LocalizedState { textAlign: TextAlign.left, ), ), - ...initialAttributes!.where((att) => att.isActive.toString() == 'true').map(( + ...initialAttributes!.where((att) => att.isActive == true).map(( e, ) { int index = (initialAttributes ?? []).indexOf(e); diff --git a/packages/survey_form/test/constants/test_constants.dart b/packages/survey_form/test/constants/test_constants.dart index ad95b6b5a..1e51fd3f1 100644 --- a/packages/survey_form/test/constants/test_constants.dart +++ b/packages/survey_form/test/constants/test_constants.dart @@ -46,7 +46,7 @@ class ServiceTestConstants { dataType: testDataType, values: null, required: true, - isActive: 'true', + isActive: true, regex: null, order: 1, ); @@ -57,7 +57,7 @@ class ServiceTestConstants { dataType: testDataType, values: null, required: true, - isActive: 'true', + isActive: true, regex: null, order: 1, ); From 3112dd691d663f32b33fcb038f4c1f7d935487e5 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Tue, 26 Nov 2024 11:50:26 +0530 Subject: [PATCH 168/241] HCMPRE-1310 and HCMPRE-1319 apk issues --- .../record_reason_checklist.dart | 29 +++++++++++++++++++ .../record_referral_details.dart | 2 ++ .../pages/beneficiary/refer_beneficiary.dart | 1 + .../lib/pages/beneficiary/side_effects.dart | 6 ++++ .../lib/utils/utils.dart | 24 ++++++++++----- 5 files changed, 54 insertions(+), 8 deletions(-) diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart index 628ee0f19..c1763e635 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart @@ -2,6 +2,7 @@ import 'dart:math'; import 'package:auto_route/auto_route.dart'; import 'package:digit_components/digit_components.dart'; +import 'package:referral_reconciliation/utils/extensions/extensions.dart'; import 'package:survey_form/survey_form.dart'; import 'package:digit_components/utils/date_utils.dart'; import 'package:digit_data_model/data_model.dart'; @@ -182,6 +183,34 @@ class _ReferralReasonChecklistPageState rowVersion: 1, accountId: ReferralReconSingleton() .projectId, + auditDetails: + AuditDetails( + createdBy: + ReferralReconSingleton() + .userUUid, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: + ReferralReconSingleton() + .userUUid, + lastModifiedTime: + context + .millisecondsSinceEpoch(), + ), + clientAuditDetails: + ClientAuditDetails( + createdBy: + ReferralReconSingleton() + .userUUid, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: + ReferralReconSingleton() + .userUUid, + lastModifiedTime: + context + .millisecondsSinceEpoch(), + ), additionalDetails: { "boundaryCode": ReferralReconSingleton() diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart index d281a5f81..9e0a071e1 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart @@ -291,6 +291,7 @@ class _RecordReferralDetailsPageState HFReferralAdditionalFields( version: 1, fields: [ + AdditionalField("boundaryCode",ReferralReconSingleton().boundary?.code), if (hfCoordinator != null && hfCoordinator @@ -631,6 +632,7 @@ class _RecordReferralDetailsPageState HFReferralAdditionalFields( version: 1, fields: [ + AdditionalField("boundaryCode",ReferralReconSingleton().boundary?.code), if (hfCoordinator != null && hfCoordinator diff --git a/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart b/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart index 256fb74ef..8ca2b4d3c 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart @@ -176,6 +176,7 @@ class ReferBeneficiaryPageState extends LocalizedState { additionalFields: ReferralAdditionalFields( version: 1, fields: [ + AdditionalField("boundaryCode",RegistrationDeliverySingleton().boundary?.code), if (referralComment != null && referralComment .toString() diff --git a/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart b/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart index 3f479f68c..c8f36fbda 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart @@ -128,6 +128,12 @@ class SideEffectsPageState extends LocalizedState { SideEffectsSubmitEvent( SideEffectModel( id: null, + additionalFields: SideEffectAdditionalFields( + version: 1, + fields: [ + AdditionalField("boundaryCode",RegistrationDeliverySingleton().boundary?.code), + ], + ), taskClientReferenceId: widget.tasks.last .clientReferenceId, diff --git a/packages/registration_delivery/lib/utils/utils.dart b/packages/registration_delivery/lib/utils/utils.dart index c9fc6d2a9..cbf396b0b 100644 --- a/packages/registration_delivery/lib/utils/utils.dart +++ b/packages/registration_delivery/lib/utils/utils.dart @@ -189,12 +189,13 @@ DeliveryDoseCriteria? fetchProductVariant(ProjectCycleDelivery? currentDelivery, var gender; var roomCount; var memberCount; + String? structureType; if (individualModel != null) { final individualAge = DigitDateUtils.calculateAge( DigitDateUtils.getFormattedDateToDateTime( - individualModel.dateOfBirth!, - ) ?? + individualModel.dateOfBirth!, + ) ?? DateTime.now(), ); individualAgeInMonths = individualAge.years * 12 + individualAge.months; @@ -204,11 +205,16 @@ DeliveryDoseCriteria? fetchProductVariant(ProjectCycleDelivery? currentDelivery, if (householdModel != null && householdModel.additionalFields != null) { memberCount = householdModel.memberCount; roomCount = int.tryParse(householdModel.additionalFields?.fields - .where((h) => h.key == AdditionalFieldsType.noOfRooms.toValue()) - .firstOrNull - ?.value - .toString() ?? + .where((h) => h.key == AdditionalFieldsType.noOfRooms.toValue()) + .firstOrNull + ?.value + .toString() ?? '1')!; + structureType = householdModel.additionalFields?.fields + .where((h) => + h.key == AdditionalFieldsType.houseStructureTypes.toValue()) + .firstOrNull + ?.value; } final filteredCriteria = currentDelivery.doseCriteria?.where((criteria) { @@ -221,10 +227,12 @@ DeliveryDoseCriteria? fetchProductVariant(ProjectCycleDelivery? currentDelivery, final expression = FormulaParser( element, { - 'age': individualAgeInMonths, + if (individualModel != null && individualAgeInMonths != 0) + 'age': individualAgeInMonths, if (gender != null) 'gender': gender, if (memberCount != null) 'memberCount': memberCount, - if (roomCount != null) 'roomCount': roomCount + if (roomCount != null) 'roomCount': roomCount, + if (structureType != null) 'structure': structureType }, ); final error = expression.parse; From 386f8a1ab31a8f6bcedf1bcc14c56395018f2e29 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Tue, 26 Nov 2024 14:49:35 +0530 Subject: [PATCH 169/241] Wrote the migration script --- .../data/local_store/sql_store/sql_store.dart | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart index 3bb9ed6c1..09b6d7e4a 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart @@ -108,7 +108,41 @@ class LocalSqlDataStore extends _$LocalSqlDataStore { /// The `schemaVersion` getter returns the schema version of the database. @override - int get schemaVersion => 4; + int get schemaVersion => 5; // Increment schema version + + @override + MigrationStrategy get migration => MigrationStrategy( + onUpgrade: (migrator, from, to) async { + if (from < 5) { + // Step 1: Create the new table + await migrator.createTable(attributes); + + // Step 2: Copy data from the old table to the new table + await customStatement(''' + INSERT INTO attributes ( + id, dataType, referenceId, tenantId, code, values, isActive, required, regex, "order", + auditCreatedBy, nonRecoverableError, auditCreatedTime, clientCreatedTime, + clientModifiedBy, clientCreatedBy, clientModifiedTime, auditModifiedBy, + auditModifiedTime, isDeleted, rowVersion, additionalFields, additionalDetails + ) + SELECT + id, dataType, referenceId, tenantId, code, values, + CASE isActive WHEN 'true' THEN 1 WHEN 'false' THEN 0 ELSE NULL END, -- Convert String to Boolean + required, regex, "order", + auditCreatedBy, nonRecoverableError, auditCreatedTime, clientCreatedTime, + clientModifiedBy, clientCreatedBy, clientModifiedTime, auditModifiedBy, + auditModifiedTime, isDeleted, rowVersion, additionalFields, additionalDetails + FROM attributes; + '''); + + // Step 3: Drop the old table + await migrator.deleteTable('attributes'); + + // Step 4: Rename the new table to the old table's name + await customStatement('ALTER TABLE attributes RENAME TO attributes;'); + } + }, + ); /// The `_openConnection` method opens a connection to the database. /// It returns a `LazyDatabase` that opens the database when it is first accessed. From 48d6fe9700dcc6a2e4d14a336ab421a93f62ef43 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Tue, 26 Nov 2024 15:13:31 +0530 Subject: [PATCH 170/241] Wrote the migration script --- .../data/local_store/sql_store/sql_store.dart | 61 +++++++++++++------ 1 file changed, 43 insertions(+), 18 deletions(-) diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart index 09b6d7e4a..dd1fd0d02 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart @@ -114,32 +114,57 @@ class LocalSqlDataStore extends _$LocalSqlDataStore { MigrationStrategy get migration => MigrationStrategy( onUpgrade: (migrator, from, to) async { if (from < 5) { - // Step 1: Create the new table - await migrator.createTable(attributes); + await customStatement(''' + CREATE TABLE attributes_temp ( + id TEXT, + dataType TEXT, + referenceId TEXT, + tenantId TEXT, + code TEXT, + values TEXT, + isActive BOOLEAN, + required BOOLEAN, + regex TEXT, + "order" INTEGER, + auditCreatedBy TEXT, + nonRecoverableError BOOLEAN DEFAULT 0, + auditCreatedTime INTEGER, + clientCreatedTime INTEGER, + clientModifiedBy TEXT, + clientCreatedBy TEXT, + clientModifiedTime INTEGER, + auditModifiedBy TEXT, + auditModifiedTime INTEGER, + isDeleted BOOLEAN DEFAULT 0, + rowVersion INTEGER, + additionalFields TEXT, + additionalDetails TEXT + ); + '''); // Step 2: Copy data from the old table to the new table await customStatement(''' - INSERT INTO attributes ( - id, dataType, referenceId, tenantId, code, values, isActive, required, regex, "order", - auditCreatedBy, nonRecoverableError, auditCreatedTime, clientCreatedTime, - clientModifiedBy, clientCreatedBy, clientModifiedTime, auditModifiedBy, - auditModifiedTime, isDeleted, rowVersion, additionalFields, additionalDetails - ) - SELECT - id, dataType, referenceId, tenantId, code, values, - CASE isActive WHEN 'true' THEN 1 WHEN 'false' THEN 0 ELSE NULL END, -- Convert String to Boolean - required, regex, "order", - auditCreatedBy, nonRecoverableError, auditCreatedTime, clientCreatedTime, - clientModifiedBy, clientCreatedBy, clientModifiedTime, auditModifiedBy, - auditModifiedTime, isDeleted, rowVersion, additionalFields, additionalDetails - FROM attributes; - '''); + INSERT INTO attributes_temp ( + id, dataType, referenceId, tenantId, code, values, isActive, required, regex, "order", + auditCreatedBy, nonRecoverableError, auditCreatedTime, clientCreatedTime, + clientModifiedBy, clientCreatedBy, clientModifiedTime, auditModifiedBy, + auditModifiedTime, isDeleted, rowVersion, additionalFields, additionalDetails + ) + SELECT + id, dataType, referenceId, tenantId, code, values, + CASE isActive WHEN 'true' THEN 1 WHEN 'false' THEN 0 ELSE NULL END, + required, regex, "order", + auditCreatedBy, nonRecoverableError, auditCreatedTime, clientCreatedTime, + clientModifiedBy, clientCreatedBy, clientModifiedTime, auditModifiedBy, + auditModifiedTime, isDeleted, rowVersion, additionalFields, additionalDetails + FROM attributes; + '''); // Step 3: Drop the old table await migrator.deleteTable('attributes'); // Step 4: Rename the new table to the old table's name - await customStatement('ALTER TABLE attributes RENAME TO attributes;'); + await customStatement('ALTER TABLE attributes_temp RENAME TO attributes;'); } }, ); From 5375c95f2d56644afe27bc89e44d9b143608b24d Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Tue, 26 Nov 2024 15:20:47 +0530 Subject: [PATCH 171/241] HCMPRE-1310 and HCMPRE-1319 apk issues --- .../lib/pages/beneficiary/deliver_intervention.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart index 29e580d8a..ec984b22c 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart @@ -805,8 +805,8 @@ class DeliverInterventionPageState ?.cycles![bloc.cycle - 1] .deliveries?[bloc.dose - 1], overViewbloc.selectedIndividual, - overViewbloc.householdMemberWrapper.household)! - .productVariants + overViewbloc.householdMemberWrapper.household) + ?.productVariants ?.length ?? 0; From e1b40d1e23b8778d557175e3ad056506ba46b12e Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Tue, 26 Nov 2024 17:13:46 +0530 Subject: [PATCH 172/241] HCMPRE-1310 and HCMPRE-1319 apk issues --- .../lib/utils/utils.dart | 73 +++++++++++++++---- 1 file changed, 60 insertions(+), 13 deletions(-) diff --git a/packages/registration_delivery/lib/utils/utils.dart b/packages/registration_delivery/lib/utils/utils.dart index cbf396b0b..5f9747c66 100644 --- a/packages/registration_delivery/lib/utils/utils.dart +++ b/packages/registration_delivery/lib/utils/utils.dart @@ -214,7 +214,8 @@ DeliveryDoseCriteria? fetchProductVariant(ProjectCycleDelivery? currentDelivery, .where((h) => h.key == AdditionalFieldsType.houseStructureTypes.toValue()) .firstOrNull - ?.value; + ?.value + .toString(); } final filteredCriteria = currentDelivery.doseCriteria?.where((criteria) { @@ -224,18 +225,17 @@ DeliveryDoseCriteria? fetchProductVariant(ProjectCycleDelivery? currentDelivery, List expressionParser = []; for (var element in conditions) { - final expression = FormulaParser( - element, - { - if (individualModel != null && individualAgeInMonths != 0) - 'age': individualAgeInMonths, - if (gender != null) 'gender': gender, - if (memberCount != null) 'memberCount': memberCount, - if (roomCount != null) 'roomCount': roomCount, - if (structureType != null) 'structure': structureType - }, - ); - final error = expression.parse; + final expression = CustomFormulaParser.parseCondition(element, { + if (individualModel != null && individualAgeInMonths != 0) + 'age': individualAgeInMonths, + if (gender != null) 'gender': gender, + if (memberCount != null) 'memberCount': memberCount, + if (roomCount != null) 'roomCount': roomCount, + if (structureType != null) 'type_of_structure': structureType + }, stringKeys: [ + 'type_of_structure' + ]); + final error = expression; expressionParser.add(error["value"]); } @@ -262,6 +262,53 @@ String maskString(String input) { return maskedString; } +class CustomFormulaParser { + // Modify the function to accept stringKeys as nullable + static Map parseCondition( + String condition, + Map variables, { + List? stringKeys, + } // Accept stringKeys as nullable + ) { + // If stringKeys is null or empty, default to FormulaParser for all conditions + if (stringKeys == null || stringKeys.isEmpty) { + return _parseAsFormula(condition, variables); + } + + // Loop through stringKeys and check for string comparison in the condition + for (var key in stringKeys) { + if (condition.contains('$key==')) { + // Extract the expected value after '==' for string comparison + var value = condition.split('==')[1].trim(); + if (variables.containsKey(key) && variables[key] is String) { + return _compareString(condition, value, variables[key]); + } + } + } + + // If no string-specific comparison, use FormulaParser for numeric evaluation + return _parseAsFormula(condition, variables); + } + + // Handle string comparison + static Map _compareString( + String condition, String expectedValue, String actualValue) { + // Compare string values directly + bool comparisonResult = actualValue == expectedValue; + return {'value': comparisonResult}; + } + + // Handle numeric evaluation using FormulaParser + static Map _parseAsFormula( + String condition, Map variables) { + final expression = FormulaParser( + condition, + variables, + ); + final error = expression.parse; + return error; // Parsing the numeric expression + } +} class Coordinate { final double? latitude; From 700627a01e1796dc607548f9cbdb9998e89b331a Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Tue, 10 Dec 2024 15:34:03 +0530 Subject: [PATCH 173/241] Added additional field in service.dart and survey_form_view.dart --- .../lib/data/repositories/local/service.dart | 23 +++-- .../lib/pages/survey_form_view.dart | 98 ++++++++++--------- 2 files changed, 67 insertions(+), 54 deletions(-) diff --git a/packages/survey_form/lib/data/repositories/local/service.dart b/packages/survey_form/lib/data/repositories/local/service.dart index 522308291..670202b09 100644 --- a/packages/survey_form/lib/data/repositories/local/service.dart +++ b/packages/survey_form/lib/data/repositories/local/service.dart @@ -129,16 +129,19 @@ class ServiceLocalRepository final attribute = e.readTableOrNull(sql.serviceAttributes); if (attribute != null) { return ServiceAttributesModel( - clientReferenceId: attribute.clientReferenceId, - attributeCode: attribute.attributeCode, - value: attribute.value, - referenceId: attribute.referenceId, - dataType: attribute.dataType, - additionalDetails: attribute.additionalDetails, - tenantId: attribute.tenantId, - isDeleted: attribute.isDeleted, - rowVersion: attribute.rowVersion, - ); + clientReferenceId: attribute.clientReferenceId, + attributeCode: attribute.attributeCode, + value: attribute.value, + referenceId: attribute.referenceId, + dataType: attribute.dataType, + additionalDetails: attribute.additionalDetails, + tenantId: attribute.tenantId, + isDeleted: attribute.isDeleted, + rowVersion: attribute.rowVersion, + additionalFields: attribute.additionalFields != null + ? ServiceAttributesAdditionalFieldsMapper.fromJson( + attribute.additionalFields!) + : null); } }).toList(); diff --git a/packages/survey_form/lib/pages/survey_form_view.dart b/packages/survey_form/lib/pages/survey_form_view.dart index d43db2d6d..7b0928456 100644 --- a/packages/survey_form/lib/pages/survey_form_view.dart +++ b/packages/survey_form/lib/pages/survey_form_view.dart @@ -190,18 +190,23 @@ class SurveyFormViewPageState extends LocalizedState { : null, additionalFields: ServiceAttributesAdditionalFields( - version: 1, - fields: [ - AdditionalField( - 'latitude', - latitude, - ), - AdditionalField( - 'longitude', - longitude, - ), - ], - ), + version: 1, + fields: [ + AdditionalField( + 'lat', + latitude, + ), + AdditionalField( + 'lng', + longitude, + ), + AdditionalField( + 'boundaryCode', + SurveyFormSingleton() + .boundary + ?.code, + ), + ]), )); } @@ -379,7 +384,9 @@ class SurveyFormViewPageState extends LocalizedState { textAlign: TextAlign.left, ), ), - ...initialAttributes!.where((att) => att.isActive == true).map(( + ...initialAttributes! + .where((att) => att.isActive == true) + .map(( e, ) { int index = (initialAttributes ?? []).indexOf(e); @@ -487,7 +494,9 @@ class SurveyFormViewPageState extends LocalizedState { const EdgeInsets.only( left: kPadding * 2), child: DigitCheckboxTile( - label: localizations.translate('${selectedServiceDefinition?.code}.${item}'), + label: localizations + .translate( + '${selectedServiceDefinition?.code}.${item}'), value: controller[index] .text .split('.') @@ -765,43 +774,43 @@ class SurveyFormViewPageState extends LocalizedState { .where((e) => e != i18.surveyForm.notSelectedKey) .toList() : [], - itemBuilder: (item) => RadioButtonBuilder( - localizations.translate( - '${selectedServiceDefinition?.code}.${item.trim()}', - ) - ), + itemBuilder: (item) => + RadioButtonBuilder(localizations.translate( + '${selectedServiceDefinition?.code}.${item.trim()}', + )), ); }, ), BlocBuilder( builder: (context, state) { return (controller[index].text == item.values?[1].trim() && - !(isHealthFacilityWorker && - widget.referralClientRefId != null) && item.dataType != 'SingleValueList') + !(isHealthFacilityWorker && + widget.referralClientRefId != null) && + item.dataType != 'SingleValueList') ? Padding( - padding: const EdgeInsets.only( - left: 4.0, - right: 4.0, - bottom: 16, - ), - child: DigitTextField( - maxLength: 1000, - isRequired: true, - controller: additionalController[index], - label: localizations.translate( - '${selectedServiceDefinition?.code}.${item.code}.ADDITIONAL_FIELD', - ), - validator: (value1) { - if (value1 == null || value1 == '') { - return localizations.translate( - i18.common.coreCommonReasonRequired, - ); - } + padding: const EdgeInsets.only( + left: 4.0, + right: 4.0, + bottom: 16, + ), + child: DigitTextField( + maxLength: 1000, + isRequired: true, + controller: additionalController[index], + label: localizations.translate( + '${selectedServiceDefinition?.code}.${item.code}.ADDITIONAL_FIELD', + ), + validator: (value1) { + if (value1 == null || value1 == '') { + return localizations.translate( + i18.common.coreCommonReasonRequired, + ); + } - return null; - }, - ), - ) + return null; + }, + ), + ) : const SizedBox(); }, ), @@ -927,7 +936,8 @@ class SurveyFormViewPageState extends LocalizedState { return Column( children: item.values! .map((e) => DigitCheckboxTile( - label: localizations.translate('${selectedServiceDefinition?.code}.${e}'), + label: localizations.translate( + '${selectedServiceDefinition?.code}.${e}'), value: controller[index].text.split('.').contains(e), onChanged: (value) { context.read().add( From 17730961ffc06f353ce757c8a5eec1a4da00964b Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Tue, 10 Dec 2024 16:24:28 +0530 Subject: [PATCH 174/241] merge conflicts --- packages/attendance_management/pubspec.yaml | 2 +- .../digit_components/example/pubspec.lock | 2 +- .../data/local_store/sql_store/sql_store.dart | 6 - .../local_store/sql_store/sql_store.g.dart | 134 +++- .../local_store/sql_store/tables/target.dart | 4 +- .../lib/models/entities/project.mapper.dart | 13 +- .../lib/models/entities/target.dart | 16 +- .../lib/models/entities/target.mapper.dart | 6 +- .../models/entities/user_action.mapper.dart | 20 +- packages/digit_data_model/pubspec.lock | 648 +++++++++++++++--- packages/digit_data_model/pubspec.yaml | 2 +- packages/digit_scanner/pubspec.lock | 76 +- packages/inventory_management/pubspec.yaml | 2 +- .../beneficiary/beneficiary_details.dart | 209 +++--- .../beneficiary/delivery_summary_page.dart | 4 +- .../individual_details.dart | 20 +- packages/registration_delivery/pubspec.yaml | 2 +- packages/survey_form/example/pubspec.lock | 190 ++--- packages/survey_form/example/pubspec.yaml | 2 +- .../lib/pages/survey_form_view.dart | 15 +- packages/survey_form/pubspec.lock | 278 ++++---- packages/survey_form/pubspec.yaml | 13 +- packages/sync_service/pubspec.yaml | 3 +- 23 files changed, 1066 insertions(+), 601 deletions(-) diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index 3b9e52f05..cb788b814 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_ui_components: 0.0.1+7 + digit_ui_components: 0.0.2-dev.2 flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 intl: ^0.19.0 diff --git a/packages/digit_components/example/pubspec.lock b/packages/digit_components/example/pubspec.lock index e6efc5e1b..d3c1ce88c 100644 --- a/packages/digit_components/example/pubspec.lock +++ b/packages/digit_components/example/pubspec.lock @@ -231,7 +231,7 @@ packages: path: ".." relative: true source: path - version: "1.0.2" + version: "1.0.2+1" easy_stepper: dependency: transitive description: diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart index 9a3b48ace..b7aca5f29 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart @@ -6,7 +6,6 @@ import 'package:drift/drift.dart'; import 'package:drift/native.dart'; import 'package:path/path.dart' as p; import 'package:path_provider/path_provider.dart'; -import 'package:digit_components/digit_components.dart'; import '../../../models/entities/address_type.dart'; import '../../../models/entities/beneficiary_type.dart'; @@ -133,13 +132,8 @@ class LocalSqlDataStore extends _$LocalSqlDataStore { if (from < 5) { //Add column for projectType in Project Table try { - AppLogger.instance.info('Applying migration $from to $to'); await m.addColumn(project, project.projectType); } catch (e) { - AppLogger.instance.error( - title: 'migration', - message: e.toString(), - ); } } }); diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart index e731a674e..c44f50457 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart @@ -20618,9 +20618,12 @@ class $TargetTable extends Target with TableInfo<$TargetTable, TargetData> { static const VerificationMeta _beneficiaryTypeMeta = const VerificationMeta('beneficiaryType'); @override - late final GeneratedColumn beneficiaryType = GeneratedColumn( - 'beneficiary_type', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumnWithTypeConverter + beneficiaryType = GeneratedColumn( + 'beneficiary_type', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false) + .withConverter( + $TargetTable.$converterbeneficiaryTypen); static const VerificationMeta _additionalFieldsMeta = const VerificationMeta('additionalFields'); @override @@ -20745,12 +20748,7 @@ class $TargetTable extends Target with TableInfo<$TargetTable, TargetData> { rowVersion.isAcceptableOrUnknown( data['row_version']!, _rowVersionMeta)); } - if (data.containsKey('beneficiary_type')) { - context.handle( - _beneficiaryTypeMeta, - beneficiaryType.isAcceptableOrUnknown( - data['beneficiary_type']!, _beneficiaryTypeMeta)); - } + context.handle(_beneficiaryTypeMeta, const VerificationResult.success()); if (data.containsKey('additional_fields')) { context.handle( _additionalFieldsMeta, @@ -20798,8 +20796,9 @@ class $TargetTable extends Target with TableInfo<$TargetTable, TargetData> { .read(DriftSqlType.bool, data['${effectivePrefix}is_deleted']), rowVersion: attachedDatabase.typeMapping .read(DriftSqlType.int, data['${effectivePrefix}row_version']), - beneficiaryType: attachedDatabase.typeMapping.read( - DriftSqlType.string, data['${effectivePrefix}beneficiary_type']), + beneficiaryType: $TargetTable.$converterbeneficiaryTypen.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.int, data['${effectivePrefix}beneficiary_type'])), additionalFields: attachedDatabase.typeMapping.read( DriftSqlType.string, data['${effectivePrefix}additional_fields']), ); @@ -20809,6 +20808,13 @@ class $TargetTable extends Target with TableInfo<$TargetTable, TargetData> { $TargetTable createAlias(String alias) { return $TargetTable(attachedDatabase, alias); } + + static JsonTypeConverter2 + $converterbeneficiaryType = + const EnumIndexConverter(BeneficiaryType.values); + static JsonTypeConverter2 + $converterbeneficiaryTypen = + JsonTypeConverter2.asNullable($converterbeneficiaryType); } class TargetData extends DataClass implements Insertable { @@ -20828,7 +20834,7 @@ class TargetData extends DataClass implements Insertable { final String? tenantId; final bool? isDeleted; final int? rowVersion; - final String? beneficiaryType; + final BeneficiaryType? beneficiaryType; final String? additionalFields; const TargetData( {required this.id, @@ -20899,7 +20905,8 @@ class TargetData extends DataClass implements Insertable { map['row_version'] = Variable(rowVersion); } if (!nullToAbsent || beneficiaryType != null) { - map['beneficiary_type'] = Variable(beneficiaryType); + map['beneficiary_type'] = Variable( + $TargetTable.$converterbeneficiaryTypen.toSql(beneficiaryType)); } if (!nullToAbsent || additionalFields != null) { map['additional_fields'] = Variable(additionalFields); @@ -20986,7 +20993,8 @@ class TargetData extends DataClass implements Insertable { tenantId: serializer.fromJson(json['tenantId']), isDeleted: serializer.fromJson(json['isDeleted']), rowVersion: serializer.fromJson(json['rowVersion']), - beneficiaryType: serializer.fromJson(json['beneficiaryType']), + beneficiaryType: $TargetTable.$converterbeneficiaryTypen + .fromJson(serializer.fromJson(json['beneficiaryType'])), additionalFields: serializer.fromJson(json['additionalFields']), ); } @@ -21010,7 +21018,8 @@ class TargetData extends DataClass implements Insertable { 'tenantId': serializer.toJson(tenantId), 'isDeleted': serializer.toJson(isDeleted), 'rowVersion': serializer.toJson(rowVersion), - 'beneficiaryType': serializer.toJson(beneficiaryType), + 'beneficiaryType': serializer.toJson( + $TargetTable.$converterbeneficiaryTypen.toJson(beneficiaryType)), 'additionalFields': serializer.toJson(additionalFields), }; } @@ -21032,7 +21041,7 @@ class TargetData extends DataClass implements Insertable { Value tenantId = const Value.absent(), Value isDeleted = const Value.absent(), Value rowVersion = const Value.absent(), - Value beneficiaryType = const Value.absent(), + Value beneficiaryType = const Value.absent(), Value additionalFields = const Value.absent()}) => TargetData( id: id ?? this.id, @@ -21163,7 +21172,7 @@ class TargetCompanion extends UpdateCompanion { final Value tenantId; final Value isDeleted; final Value rowVersion; - final Value beneficiaryType; + final Value beneficiaryType; final Value additionalFields; final Value rowid; const TargetCompanion({ @@ -21225,7 +21234,7 @@ class TargetCompanion extends UpdateCompanion { Expression? tenantId, Expression? isDeleted, Expression? rowVersion, - Expression? beneficiaryType, + Expression? beneficiaryType, Expression? additionalFields, Expression? rowid, }) { @@ -21271,7 +21280,7 @@ class TargetCompanion extends UpdateCompanion { Value? tenantId, Value? isDeleted, Value? rowVersion, - Value? beneficiaryType, + Value? beneficiaryType, Value? additionalFields, Value? rowid}) { return TargetCompanion( @@ -21349,7 +21358,8 @@ class TargetCompanion extends UpdateCompanion { map['row_version'] = Variable(rowVersion.value); } if (beneficiaryType.present) { - map['beneficiary_type'] = Variable(beneficiaryType.value); + map['beneficiary_type'] = Variable( + $TargetTable.$converterbeneficiaryTypen.toSql(beneficiaryType.value)); } if (additionalFields.present) { map['additional_fields'] = Variable(additionalFields.value); @@ -42051,6 +42061,7 @@ typedef $$FacilityTableInsertCompanionBuilder = FacilityCompanion Function({ Value auditModifiedBy, Value auditModifiedTime, Value tenantId, + Value name, Value isDeleted, Value rowVersion, Value additionalFields, @@ -42071,6 +42082,7 @@ typedef $$FacilityTableUpdateCompanionBuilder = FacilityCompanion Function({ Value auditModifiedBy, Value auditModifiedTime, Value tenantId, + Value name, Value isDeleted, Value rowVersion, Value additionalFields, @@ -42111,6 +42123,7 @@ class $$FacilityTableTableManager extends RootTableManager< Value auditModifiedBy = const Value.absent(), Value auditModifiedTime = const Value.absent(), Value tenantId = const Value.absent(), + Value name = const Value.absent(), Value isDeleted = const Value.absent(), Value rowVersion = const Value.absent(), Value additionalFields = const Value.absent(), @@ -42131,6 +42144,7 @@ class $$FacilityTableTableManager extends RootTableManager< auditModifiedBy: auditModifiedBy, auditModifiedTime: auditModifiedTime, tenantId: tenantId, + name: name, isDeleted: isDeleted, rowVersion: rowVersion, additionalFields: additionalFields, @@ -42151,6 +42165,7 @@ class $$FacilityTableTableManager extends RootTableManager< Value auditModifiedBy = const Value.absent(), Value auditModifiedTime = const Value.absent(), Value tenantId = const Value.absent(), + Value name = const Value.absent(), Value isDeleted = const Value.absent(), Value rowVersion = const Value.absent(), Value additionalFields = const Value.absent(), @@ -42171,6 +42186,7 @@ class $$FacilityTableTableManager extends RootTableManager< auditModifiedBy: auditModifiedBy, auditModifiedTime: auditModifiedTime, tenantId: tenantId, + name: name, isDeleted: isDeleted, rowVersion: rowVersion, additionalFields: additionalFields, @@ -42264,6 +42280,11 @@ class $$FacilityTableFilterComposer builder: (column, joinBuilders) => ColumnFilters(column, joinBuilders: joinBuilders)); + ColumnFilters get name => $state.composableBuilder( + column: $state.table.name, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + ColumnFilters get isDeleted => $state.composableBuilder( column: $state.table.isDeleted, builder: (column, joinBuilders) => @@ -42353,6 +42374,11 @@ class $$FacilityTableOrderingComposer builder: (column, joinBuilders) => ColumnOrderings(column, joinBuilders: joinBuilders)); + ColumnOrderings get name => $state.composableBuilder( + column: $state.table.name, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + ColumnOrderings get isDeleted => $state.composableBuilder( column: $state.table.isDeleted, builder: (column, joinBuilders) => @@ -43054,6 +43080,7 @@ class $$ProductVariantTableOrderingComposer } typedef $$ProjectTableInsertCompanionBuilder = ProjectCompanion Function({ + Value projectType, required String id, Value projectTypeId, Value projectNumber, @@ -43083,6 +43110,7 @@ typedef $$ProjectTableInsertCompanionBuilder = ProjectCompanion Function({ Value rowid, }); typedef $$ProjectTableUpdateCompanionBuilder = ProjectCompanion Function({ + Value projectType, Value id, Value projectTypeId, Value projectNumber, @@ -43131,6 +43159,7 @@ class $$ProjectTableTableManager extends RootTableManager< $$ProjectTableOrderingComposer(ComposerState(db, table)), getChildManagerBuilder: (p) => $$ProjectTableProcessedTableManager(p), getUpdateCompanionBuilder: ({ + Value projectType = const Value.absent(), Value id = const Value.absent(), Value projectTypeId = const Value.absent(), Value projectNumber = const Value.absent(), @@ -43160,6 +43189,7 @@ class $$ProjectTableTableManager extends RootTableManager< Value rowid = const Value.absent(), }) => ProjectCompanion( + projectType: projectType, id: id, projectTypeId: projectTypeId, projectNumber: projectNumber, @@ -43189,6 +43219,7 @@ class $$ProjectTableTableManager extends RootTableManager< rowid: rowid, ), getInsertCompanionBuilder: ({ + Value projectType = const Value.absent(), required String id, Value projectTypeId = const Value.absent(), Value projectNumber = const Value.absent(), @@ -43218,6 +43249,7 @@ class $$ProjectTableTableManager extends RootTableManager< Value rowid = const Value.absent(), }) => ProjectCompanion.insert( + projectType: projectType, id: id, projectTypeId: projectTypeId, projectNumber: projectNumber, @@ -43264,6 +43296,11 @@ class $$ProjectTableProcessedTableManager extends ProcessedTableManager< class $$ProjectTableFilterComposer extends FilterComposer<_$LocalSqlDataStore, $ProjectTable> { $$ProjectTableFilterComposer(super.$state); + ColumnFilters get projectType => $state.composableBuilder( + column: $state.table.projectType, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + ColumnFilters get id => $state.composableBuilder( column: $state.table.id, builder: (column, joinBuilders) => @@ -43398,6 +43435,11 @@ class $$ProjectTableFilterComposer class $$ProjectTableOrderingComposer extends OrderingComposer<_$LocalSqlDataStore, $ProjectTable> { $$ProjectTableOrderingComposer(super.$state); + ColumnOrderings get projectType => $state.composableBuilder( + column: $state.table.projectType, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + ColumnOrderings get id => $state.composableBuilder( column: $state.table.id, builder: (column, joinBuilders) => @@ -45303,7 +45345,7 @@ typedef $$ProjectTypeTableInsertCompanionBuilder = ProjectTypeCompanion Value name, Value code, Value group, - Value beneficiaryType, + Value beneficiaryType, Value eligibilityCriteria, Value taskProcedure, Value auditCreatedBy, @@ -45328,7 +45370,7 @@ typedef $$ProjectTypeTableUpdateCompanionBuilder = ProjectTypeCompanion Value name, Value code, Value group, - Value beneficiaryType, + Value beneficiaryType, Value eligibilityCriteria, Value taskProcedure, Value auditCreatedBy, @@ -45373,7 +45415,7 @@ class $$ProjectTypeTableTableManager extends RootTableManager< Value name = const Value.absent(), Value code = const Value.absent(), Value group = const Value.absent(), - Value beneficiaryType = const Value.absent(), + Value beneficiaryType = const Value.absent(), Value eligibilityCriteria = const Value.absent(), Value taskProcedure = const Value.absent(), Value auditCreatedBy = const Value.absent(), @@ -45421,7 +45463,7 @@ class $$ProjectTypeTableTableManager extends RootTableManager< Value name = const Value.absent(), Value code = const Value.absent(), Value group = const Value.absent(), - Value beneficiaryType = const Value.absent(), + Value beneficiaryType = const Value.absent(), Value eligibilityCriteria = const Value.absent(), Value taskProcedure = const Value.absent(), Value auditCreatedBy = const Value.absent(), @@ -45502,10 +45544,12 @@ class $$ProjectTypeTableFilterComposer builder: (column, joinBuilders) => ColumnFilters(column, joinBuilders: joinBuilders)); - ColumnFilters get beneficiaryType => $state.composableBuilder( - column: $state.table.beneficiaryType, - builder: (column, joinBuilders) => - ColumnFilters(column, joinBuilders: joinBuilders)); + ColumnWithTypeConverterFilters + get beneficiaryType => $state.composableBuilder( + column: $state.table.beneficiaryType, + builder: (column, joinBuilders) => ColumnWithTypeConverterFilters( + column, + joinBuilders: joinBuilders)); ColumnFilters get eligibilityCriteria => $state.composableBuilder( column: $state.table.eligibilityCriteria, @@ -45611,7 +45655,7 @@ class $$ProjectTypeTableOrderingComposer builder: (column, joinBuilders) => ColumnOrderings(column, joinBuilders: joinBuilders)); - ColumnOrderings get beneficiaryType => $state.composableBuilder( + ColumnOrderings get beneficiaryType => $state.composableBuilder( column: $state.table.beneficiaryType, builder: (column, joinBuilders) => ColumnOrderings(column, joinBuilders: joinBuilders)); @@ -46542,6 +46586,7 @@ typedef $$StockTableInsertCompanionBuilder = StockCompanion Function({ Value receiverType, Value senderId, Value senderType, + Value dateOfEntry, Value auditCreatedBy, Value nonRecoverableError, Value auditCreatedTime, @@ -46574,6 +46619,7 @@ typedef $$StockTableUpdateCompanionBuilder = StockCompanion Function({ Value receiverType, Value senderId, Value senderType, + Value dateOfEntry, Value auditCreatedBy, Value nonRecoverableError, Value auditCreatedTime, @@ -46625,6 +46671,7 @@ class $$StockTableTableManager extends RootTableManager< Value receiverType = const Value.absent(), Value senderId = const Value.absent(), Value senderType = const Value.absent(), + Value dateOfEntry = const Value.absent(), Value auditCreatedBy = const Value.absent(), Value nonRecoverableError = const Value.absent(), Value auditCreatedTime = const Value.absent(), @@ -46657,6 +46704,7 @@ class $$StockTableTableManager extends RootTableManager< receiverType: receiverType, senderId: senderId, senderType: senderType, + dateOfEntry: dateOfEntry, auditCreatedBy: auditCreatedBy, nonRecoverableError: nonRecoverableError, auditCreatedTime: auditCreatedTime, @@ -46689,6 +46737,7 @@ class $$StockTableTableManager extends RootTableManager< Value receiverType = const Value.absent(), Value senderId = const Value.absent(), Value senderType = const Value.absent(), + Value dateOfEntry = const Value.absent(), Value auditCreatedBy = const Value.absent(), Value nonRecoverableError = const Value.absent(), Value auditCreatedTime = const Value.absent(), @@ -46721,6 +46770,7 @@ class $$StockTableTableManager extends RootTableManager< receiverType: receiverType, senderId: senderId, senderType: senderType, + dateOfEntry: dateOfEntry, auditCreatedBy: auditCreatedBy, nonRecoverableError: nonRecoverableError, auditCreatedTime: auditCreatedTime, @@ -46826,6 +46876,11 @@ class $$StockTableFilterComposer builder: (column, joinBuilders) => ColumnFilters(column, joinBuilders: joinBuilders)); + ColumnFilters get dateOfEntry => $state.composableBuilder( + column: $state.table.dateOfEntry, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + ColumnFilters get auditCreatedBy => $state.composableBuilder( column: $state.table.auditCreatedBy, builder: (column, joinBuilders) => @@ -46975,6 +47030,11 @@ class $$StockTableOrderingComposer builder: (column, joinBuilders) => ColumnOrderings(column, joinBuilders: joinBuilders)); + ColumnOrderings get dateOfEntry => $state.composableBuilder( + column: $state.table.dateOfEntry, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + ColumnOrderings get auditCreatedBy => $state.composableBuilder( column: $state.table.auditCreatedBy, builder: (column, joinBuilders) => @@ -49386,6 +49446,7 @@ typedef $$AttributesTableInsertCompanionBuilder = AttributesCompanion Function({ Value isDeleted, Value rowVersion, Value additionalFields, + Value additionalDetails, Value rowid, }); typedef $$AttributesTableUpdateCompanionBuilder = AttributesCompanion Function({ @@ -49411,6 +49472,7 @@ typedef $$AttributesTableUpdateCompanionBuilder = AttributesCompanion Function({ Value isDeleted, Value rowVersion, Value additionalFields, + Value additionalDetails, Value rowid, }); @@ -49456,6 +49518,7 @@ class $$AttributesTableTableManager extends RootTableManager< Value isDeleted = const Value.absent(), Value rowVersion = const Value.absent(), Value additionalFields = const Value.absent(), + Value additionalDetails = const Value.absent(), Value rowid = const Value.absent(), }) => AttributesCompanion( @@ -49481,6 +49544,7 @@ class $$AttributesTableTableManager extends RootTableManager< isDeleted: isDeleted, rowVersion: rowVersion, additionalFields: additionalFields, + additionalDetails: additionalDetails, rowid: rowid, ), getInsertCompanionBuilder: ({ @@ -49506,6 +49570,7 @@ class $$AttributesTableTableManager extends RootTableManager< Value isDeleted = const Value.absent(), Value rowVersion = const Value.absent(), Value additionalFields = const Value.absent(), + Value additionalDetails = const Value.absent(), Value rowid = const Value.absent(), }) => AttributesCompanion.insert( @@ -49531,6 +49596,7 @@ class $$AttributesTableTableManager extends RootTableManager< isDeleted: isDeleted, rowVersion: rowVersion, additionalFields: additionalFields, + additionalDetails: additionalDetails, rowid: rowid, ), )); @@ -49660,6 +49726,11 @@ class $$AttributesTableFilterComposer column: $state.table.additionalFields, builder: (column, joinBuilders) => ColumnFilters(column, joinBuilders: joinBuilders)); + + ColumnFilters get additionalDetails => $state.composableBuilder( + column: $state.table.additionalDetails, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); } class $$AttributesTableOrderingComposer @@ -49774,6 +49845,11 @@ class $$AttributesTableOrderingComposer column: $state.table.additionalFields, builder: (column, joinBuilders) => ColumnOrderings(column, joinBuilders: joinBuilders)); + + ColumnOrderings get additionalDetails => $state.composableBuilder( + column: $state.table.additionalDetails, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); } typedef $$PgrServiceTableInsertCompanionBuilder = PgrServiceCompanion Function({ diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/tables/target.dart b/packages/digit_data_model/lib/data/local_store/sql_store/tables/target.dart index 09140859b..604debbf3 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/tables/target.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/tables/target.dart @@ -1,6 +1,7 @@ // Generated using mason. Do not modify by hand import 'package:drift/drift.dart'; +import '../../../../models/entities/beneficiary_type.dart'; class Target extends Table { TextColumn get id => text()(); @@ -21,8 +22,7 @@ class Target extends Table { BoolColumn get isDeleted => boolean().nullable().withDefault(const Constant(false))(); IntColumn get rowVersion => integer().nullable()(); - TextColumn get beneficiaryType => text().nullable()(); - + IntColumn get beneficiaryType => intEnum().nullable()(); TextColumn get additionalFields => text().nullable()(); @override diff --git a/packages/digit_data_model/lib/models/entities/project.mapper.dart b/packages/digit_data_model/lib/models/entities/project.mapper.dart index 1e4ab3d22..93b01d581 100644 --- a/packages/digit_data_model/lib/models/entities/project.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/project.mapper.dart @@ -47,6 +47,9 @@ class ProjectSearchModelMapper extends SubClassMapperBase { static String? _$tenantId(ProjectSearchModel v) => v.tenantId; static const Field _f$tenantId = Field('tenantId', _$tenantId, opt: true); + static String? _$projectType(ProjectSearchModel v) => v.projectType; + static const Field _f$projectType = + Field('projectType', _$projectType, opt: true); static int? _$startDate(ProjectSearchModel v) => v.startDate; static const Field _f$startDate = Field('startDate', _$startDate, opt: true); @@ -69,9 +72,6 @@ class ProjectSearchModelMapper extends SubClassMapperBase { static DateTime? _$endDateTime(ProjectSearchModel v) => v.endDateTime; static const Field _f$endDateTime = Field('endDateTime', _$endDateTime, mode: FieldMode.member); - static String? _$projectType(ProjectSearchModel v) => v.projectType; - static const Field _f$projectType = - Field('projectType', _$projectType, mode: FieldMode.member); @override final MappableFields fields = const { @@ -84,6 +84,7 @@ class ProjectSearchModelMapper extends SubClassMapperBase { #department: _f$department, #referenceId: _f$referenceId, #tenantId: _f$tenantId, + #projectType: _f$projectType, #startDate: _f$startDate, #endDate: _f$endDate, #boundaryCode: _f$boundaryCode, @@ -91,7 +92,6 @@ class ProjectSearchModelMapper extends SubClassMapperBase { #additionalFields: _f$additionalFields, #startDateTime: _f$startDateTime, #endDateTime: _f$endDateTime, - #projectType: _f$projectType, }; @override final bool ignoreNull = true; @@ -115,6 +115,7 @@ class ProjectSearchModelMapper extends SubClassMapperBase { department: data.dec(_f$department), referenceId: data.dec(_f$referenceId), tenantId: data.dec(_f$tenantId), + projectType: data.dec(_f$projectType), startDate: data.dec(_f$startDate), endDate: data.dec(_f$endDate), boundaryCode: data.dec(_f$boundaryCode)); @@ -186,6 +187,7 @@ abstract class ProjectSearchModelCopyWith<$R, $In extends ProjectSearchModel, String? department, String? referenceId, String? tenantId, + String? projectType, int? startDate, int? endDate, String? boundaryCode}); @@ -212,6 +214,7 @@ class _ProjectSearchModelCopyWithImpl<$R, $Out> Object? department = $none, Object? referenceId = $none, Object? tenantId = $none, + Object? projectType = $none, Object? startDate = $none, Object? endDate = $none, Object? boundaryCode = $none}) => @@ -225,6 +228,7 @@ class _ProjectSearchModelCopyWithImpl<$R, $Out> if (department != $none) #department: department, if (referenceId != $none) #referenceId: referenceId, if (tenantId != $none) #tenantId: tenantId, + if (projectType != $none) #projectType: projectType, if (startDate != $none) #startDate: startDate, if (endDate != $none) #endDate: endDate, if (boundaryCode != $none) #boundaryCode: boundaryCode @@ -242,6 +246,7 @@ class _ProjectSearchModelCopyWithImpl<$R, $Out> department: data.get(#department, or: $value.department), referenceId: data.get(#referenceId, or: $value.referenceId), tenantId: data.get(#tenantId, or: $value.tenantId), + projectType: data.get(#projectType, or: $value.projectType), startDate: data.get(#startDate, or: $value.startDate), endDate: data.get(#endDate, or: $value.endDate), boundaryCode: data.get(#boundaryCode, or: $value.boundaryCode)); diff --git a/packages/digit_data_model/lib/models/entities/target.dart b/packages/digit_data_model/lib/models/entities/target.dart index a06cd8e5c..461309bb1 100644 --- a/packages/digit_data_model/lib/models/entities/target.dart +++ b/packages/digit_data_model/lib/models/entities/target.dart @@ -1,7 +1,9 @@ // Generated using mason. Do not modify by hand import 'package:dart_mappable/dart_mappable.dart'; import 'package:digit_data_model/data_model.dart'; -import 'package:drift/driftt'; +import 'package:drift/drift.dart'; + +part 'target.mapper.dart'; @MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) class TargetSearchModel extends EntitySearchModel @@ -83,15 +85,3 @@ class TargetAdditionalFields extends AdditionalFields super.fields, }); } -class TargetSearchModel extends EntitySearchModel - with TargetSearchModelMappable { - - }) : super(); - }) : super(isDeleted: false); - final String? beneficiaryType; - super.auditDetails, - super.clientAuditDetails, - }) : super(); - ); -class TargetAdditionalFields extends AdditionalFields - with TargetAdditionalFieldsMappable { \ No newline at end of file diff --git a/packages/digit_data_model/lib/models/entities/target.mapper.dart b/packages/digit_data_model/lib/models/entities/target.mapper.dart index c351cde3e..968b78a98 100644 --- a/packages/digit_data_model/lib/models/entities/target.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/target.mapper.dart @@ -183,8 +183,8 @@ class TargetModelMapper extends SubClassMapperBase { static int? _$rowVersion(TargetModel v) => v.rowVersion; static const Field _f$rowVersion = Field('rowVersion', _$rowVersion, opt: true); - static String? _$beneficiaryType(TargetModel v) => v.beneficiaryType; - static const Field _f$beneficiaryType = + static BeneficiaryType? _$beneficiaryType(TargetModel v) => v.beneficiaryType; + static const Field _f$beneficiaryType = Field('beneficiaryType', _$beneficiaryType, opt: true); static AuditDetails? _$auditDetails(TargetModel v) => v.auditDetails; static const Field _f$auditDetails = @@ -307,7 +307,7 @@ abstract class TargetModelCopyWith<$R, $In extends TargetModel, $Out> bool? nonRecoverableError, String? tenantId, int? rowVersion, - String? beneficiaryType, + BeneficiaryType? beneficiaryType, AuditDetails? auditDetails, ClientAuditDetails? clientAuditDetails, bool? isDeleted}); diff --git a/packages/digit_data_model/lib/models/entities/user_action.mapper.dart b/packages/digit_data_model/lib/models/entities/user_action.mapper.dart index 172de3356..8d078e2d5 100644 --- a/packages/digit_data_model/lib/models/entities/user_action.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/user_action.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'user_action.dart'; @@ -111,10 +111,8 @@ mixin UserActionSearchModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - UserActionSearchModelMapper.ensureInitialized() - .isValueEqual(this as UserActionSearchModel, other)); + return UserActionSearchModelMapper.ensureInitialized() + .equalsValue(this as UserActionSearchModel, other); } @override @@ -336,10 +334,8 @@ mixin UserActionModelMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - UserActionModelMapper.ensureInitialized() - .isValueEqual(this as UserActionModel, other)); + return UserActionModelMapper.ensureInitialized() + .equalsValue(this as UserActionModel, other); } @override @@ -562,10 +558,8 @@ mixin UserActionAdditionalFieldsMappable { @override bool operator ==(Object other) { - return identical(this, other) || - (runtimeType == other.runtimeType && - UserActionAdditionalFieldsMapper.ensureInitialized() - .isValueEqual(this as UserActionAdditionalFields, other)); + return UserActionAdditionalFieldsMapper.ensureInitialized() + .equalsValue(this as UserActionAdditionalFields, other); } @override diff --git a/packages/digit_data_model/pubspec.lock b/packages/digit_data_model/pubspec.lock index c005c2793..e7a3af779 100644 --- a/packages/digit_data_model/pubspec.lock +++ b/packages/digit_data_model/pubspec.lock @@ -33,6 +33,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.2" + archive: + dependency: transitive + description: + name: archive + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d + url: "https://pub.dev" + source: hosted + version: "3.6.1" args: dependency: transitive description: @@ -109,10 +117,10 @@ packages: dependency: "direct dev" description: name: build_runner - sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" url: "https://pub.dev" source: hosted - version: "2.4.9" + version: "2.4.11" build_runner_core: dependency: transitive description: @@ -137,6 +145,46 @@ packages: url: "https://pub.dev" source: hosted version: "8.9.2" + camera: + dependency: transitive + description: + name: camera + sha256: dfa8fc5a1adaeb95e7a54d86a5bd56f4bb0e035515354c8ac6d262e35cec2ec8 + url: "https://pub.dev" + source: hosted + version: "0.10.6" + camera_android: + dependency: transitive + description: + name: camera_android + sha256: "32f04948a284b71d938fe275616faf4957d07f9b3aab8021bfc8c418301a289e" + url: "https://pub.dev" + source: hosted + version: "0.10.9+11" + camera_avfoundation: + dependency: transitive + description: + name: camera_avfoundation + sha256: "2e4c568f70e406ccb87376bc06b53d2f5bebaab71e2fbcc1a950e31449381bcf" + url: "https://pub.dev" + source: hosted + version: "0.9.17+5" + camera_platform_interface: + dependency: transitive + description: + name: camera_platform_interface + sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 + url: "https://pub.dev" + source: hosted + version: "2.8.0" + camera_web: + dependency: transitive + description: + name: camera_web + sha256: "595f28c89d1fb62d77c73c633193755b781c6d2e0ebcd8dc25b763b514e6ba8f" + url: "https://pub.dev" + source: hosted + version: "0.3.5" characters: dependency: transitive description: @@ -209,6 +257,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.0" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" + url: "https://pub.dev" + source: hosted + version: "0.3.4+2" crypto: dependency: transitive description: @@ -217,6 +273,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" + url: "https://pub.dev" + source: hosted + version: "1.0.2" dart_mappable: dependency: "direct main" description: @@ -228,12 +292,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git - version: "4.2.0" + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.3" dart_style: dependency: transitive description: @@ -250,14 +312,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" - db_viewer: - dependency: transitive - description: - name: db_viewer - sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" - url: "https://pub.dev" - source: hosted - version: "1.1.0" diff_match_patch: dependency: transitive description: @@ -266,13 +320,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.1" - digit_components: + digit_ui_components: dependency: "direct main" description: - path: "../digit_components" - relative: true - source: path - version: "1.0.2+1" + name: digit_ui_components + sha256: d2f065d59090616650a49e838889f12e1f9635c4f4f74a6b4cc25411a5e87a04 + url: "https://pub.dev" + source: hosted + version: "0.0.2-dev.2" dio: dependency: "direct main" description: @@ -281,30 +336,30 @@ packages: url: "https://pub.dev" source: hosted version: "5.4.3+1" - drift: - dependency: "direct main" + dotted_border: + dependency: transitive description: - name: drift - sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" url: "https://pub.dev" source: hosted - version: "2.15.0" - drift_db_viewer: + version: "2.1.0" + drift: dependency: "direct main" description: - name: drift_db_viewer - sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" + name: drift + sha256: "6acedc562ffeed308049f78fb1906abad3d65714580b6745441ee6d50ec564cd" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.18.0" drift_dev: dependency: "direct dev" description: name: drift_dev - sha256: c037d9431b6f8dc633652b1469e5f53aaec6e4eb405ed29dd232fa888ef10d88 + sha256: d9b020736ea85fff1568699ce18b89fabb3f0f042e8a7a05e84a3ec20d39acde url: "https://pub.dev" source: hosted - version: "2.15.0" + version: "2.18.0" fake_async: dependency: transitive description: @@ -329,6 +384,46 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: "2ca051989f69d1b2ca012b2cf3ccf78c70d40144f0861ff2c063493f7c8c3d45" + url: "https://pub.dev" + source: hosted + version: "8.0.5" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc" + url: "https://pub.dev" + source: hosted + version: "0.9.4+2" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "8f5d2f6590d51ecd9179ba39c64f722edc15226cc93dcc8698466ad36a4a85a4" + url: "https://pub.dev" + source: hosted + version: "0.9.3+3" fixnum: dependency: transitive description: @@ -350,14 +445,51 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.5" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" flutter_lints: dependency: "direct dev" description: name: flutter_lints - sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" + sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "4.0.0" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda" + url: "https://pub.dev" + source: hosted + version: "2.0.22" flutter_spinkit: dependency: transitive description: @@ -366,19 +498,27 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + flutter_svg: + dependency: transitive + description: + name: flutter_svg + sha256: "54900a1a1243f3c4a5506d853a2b5c2dbc38d5f27e52a52618a8054401431123" + url: "https://pub.dev" + source: hosted + version: "2.0.16" flutter_test: dependency: "direct dev" description: flutter source: sdk version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" flutter_web_plugins: dependency: transitive description: flutter @@ -416,6 +556,54 @@ packages: url: "https://pub.dev" source: hosted version: "3.2.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" + url: "https://pub.dev" + source: hosted + version: "4.6.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" + url: "https://pub.dev" + source: hosted + version: "2.3.8+1" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -428,10 +616,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: "6b6f10f0ce3c42f6552d1c70d2c28d764cf22bb487f50f66cca31dcd5194f4d6" + sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" url: "https://pub.dev" source: hosted - version: "4.0.4" + version: "4.0.5" graphs: dependency: transitive description: @@ -460,10 +648,10 @@ packages: dependency: transitive description: name: http - sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "0.13.6" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -480,6 +668,78 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a" + url: "https://pub.dev" + source: hosted + version: "1.1.2" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "8c5abf0dcc24fe6e8e0b4a5c0b51a5cf30cefdf6407a3213dae61edc75a70f56" + url: "https://pub.dev" + source: hosted + version: "0.8.12+12" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83" + url: "https://pub.dev" + source: hosted + version: "3.0.6" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: "4f0568120c6fcc0aaa04511cb9f9f4d29fc3d0139884b1d06be88dcec7641d6b" + url: "https://pub.dev" + source: hosted + version: "0.8.12+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: "9ec26d410ff46f483c5519c29c02ef0e02e13a543f882b152d4bfd2f06802f80" + url: "https://pub.dev" + source: hosted + version: "2.10.0" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + intl: + dependency: transitive + description: + name: intl + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + url: "https://pub.dev" + source: hosted + version: "0.19.0" io: dependency: transitive description: @@ -536,14 +796,62 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: name: lints - sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "4.0.0" + location: + dependency: transitive + description: + name: location + sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + url: "https://pub.dev" + source: hosted + version: "5.0.3" + location_platform_interface: + dependency: transitive + description: + name: location_platform_interface + sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + url: "https://pub.dev" + source: hosted + version: "3.1.2" + location_web: + dependency: transitive + description: + name: location_web + sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + url: "https://pub.dev" + source: hosted + version: "4.2.0" logging: dependency: transitive description: @@ -552,30 +860,38 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" + lottie: + dependency: transitive + description: + name: lottie + sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + url: "https://pub.dev" + source: hosted + version: "2.7.0" matcher: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -608,6 +924,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.2" + overlay_builder: + dependency: transitive + description: + name: overlay_builder + sha256: "58b97bc5f67a2e2bb7006dd88e697ac757dfffc9dbd1e7dfc1917fb510a4b5c8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" package_config: dependency: transitive description: @@ -620,10 +944,26 @@ packages: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" + url: "https://pub.dev" + source: hosted + version: "1.1.0" path_provider: dependency: "direct main" description: @@ -672,6 +1012,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.2.1" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + url: "https://pub.dev" + source: hosted + version: "6.0.2" platform: dependency: transitive description: @@ -688,14 +1036,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" pool: dependency: transitive description: @@ -728,6 +1068,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.3" + reactive_forms: + dependency: transitive + description: + name: reactive_forms + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" + url: "https://pub.dev" + source: hosted + version: "17.0.1" recase: dependency: "direct main" description: @@ -736,14 +1084,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" - remove_emoji_input_formatter: - dependency: transitive - description: - name: remove_emoji_input_formatter - sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" - url: "https://pub.dev" - source: hosted - version: "0.0.1+1" shelf: dependency: transitive description: @@ -821,6 +1161,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqlite3: dependency: transitive description: @@ -833,18 +1181,18 @@ packages: dependency: "direct main" description: name: sqlite3_flutter_libs - sha256: fb2a106a2ea6042fe57de2c47074cc31539a941819c91e105b864744605da3f5 + sha256: "636b0fe8a2de894e5455572f6cbbc458f4ffecfe9f860b79439e27041ea4f0b9" url: "https://pub.dev" source: hosted - version: "0.5.21" + version: "0.5.27" sqlparser: dependency: transitive description: name: sqlparser - sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" + sha256: ade9a67fd70d0369329ed3373208de7ebd8662470e8c396fc8d0d60f9acdfc9f url: "https://pub.dev" source: hosted - version: "0.34.1" + version: "0.36.0" stack_trace: dependency: transitive description: @@ -889,26 +1237,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" time: dependency: transitive description: @@ -941,14 +1289,118 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + url_launcher: + dependency: transitive + description: + name: url_launcher + sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" + url: "https://pub.dev" + source: hosted + version: "6.3.1" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79 + url: "https://pub.dev" + source: hosted + version: "6.3.9" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2" + url: "https://pub.dev" + source: hosted + version: "3.2.2" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" + url: "https://pub.dev" + source: hosted + version: "2.3.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4" + url: "https://pub.dev" + source: hosted + version: "3.1.3" uuid: dependency: "direct main" description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.5.1" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: "27d5fefe86fb9aace4a9f8375b56b3c292b64d8c04510df230f849850d912cb7" + url: "https://pub.dev" + source: hosted + version: "1.1.15" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: "2430b973a4ca3c4dbc9999b62b8c719a160100dcbae5c819bae0cacce32c9cdb" + url: "https://pub.dev" + source: hosted + version: "1.1.12" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "1b4b9e706a10294258727674a340ae0d6e64a7231980f9f9a3d12e4b42407aad" + url: "https://pub.dev" + source: hosted + version: "1.1.16" vector_math: dependency: transitive description: @@ -957,14 +1409,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" vm_service: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -977,10 +1437,10 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.5.1" web_socket_channel: dependency: transitive description: @@ -1013,6 +1473,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" xxh3: dependency: transitive description: @@ -1030,5 +1498,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <4.0.0" - flutter: ">=3.16.0" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.22.0" diff --git a/packages/digit_data_model/pubspec.yaml b/packages/digit_data_model/pubspec.yaml index 0e672ff95..e4bfa60a6 100644 --- a/packages/digit_data_model/pubspec.yaml +++ b/packages/digit_data_model/pubspec.yaml @@ -25,7 +25,7 @@ dependencies: dio: ^5.4.3+1 mocktail: ^1.0.3 collection: ^1.18.0 - digit_components: ^1.0.2 + digit_ui_components: 0.0.2-dev.2 dev_dependencies: flutter_test: diff --git a/packages/digit_scanner/pubspec.lock b/packages/digit_scanner/pubspec.lock index 5c9c14d25..7b431c97a 100644 --- a/packages/digit_scanner/pubspec.lock +++ b/packages/digit_scanner/pubspec.lock @@ -337,14 +337,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.1" - digit_components: + digit_ui_components: dependency: "direct main" description: - name: digit_components - sha256: "07b585e5d8010639366da72a4a8b215ce9b8790c75b2162b66af3cea57ca35d9" + name: digit_ui_components + sha256: d6720339263e48951e747aed31f45795ab7d7b4f0923e0fe13d63c4f83c41d97 url: "https://pub.dev" source: hosted - version: "1.0.2+1" + version: "0.0.3-beta" easy_stepper: dependency: transitive description: @@ -398,14 +398,6 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.6" - flutter_focus_watcher: - dependency: transitive - description: - name: flutter_focus_watcher - sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 - url: "https://pub.dev" - source: hosted - version: "2.0.0" flutter_keyboard_visibility: dependency: transitive description: @@ -536,6 +528,54 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" + url: "https://pub.dev" + source: hosted + version: "4.6.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" + url: "https://pub.dev" + source: hosted + version: "2.3.8+1" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -804,10 +844,10 @@ packages: dependency: transitive description: name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017" url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "4.2.0" package_info_plus_platform_interface: dependency: transitive description: @@ -960,14 +1000,6 @@ packages: url: "https://pub.dev" source: hosted version: "14.3.0" - remove_emoji_input_formatter: - dependency: transitive - description: - name: remove_emoji_input_formatter - sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" - url: "https://pub.dev" - source: hosted - version: "0.0.1+1" shelf: dependency: transitive description: diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index 2341bd17d..e013f7bda 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0+1 + digit_components: ^0.0.2-dev flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 reactive_forms: ^17.0.0 diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart index 66739a98d..43e21e3c6 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart @@ -252,59 +252,59 @@ class BeneficiaryDetailsPageState localizations.translate(i18.beneficiaryDetails .beneficiarysDetailsLabelText), style: textTheme.headingXl, - ), - DigitTableCard( - element: { - localizations.translate( - RegistrationDeliverySingleton() - .beneficiaryType != - BeneficiaryType.individual - ? i18.householdOverView - .householdOverViewHouseholdHeadLabel - : i18.common.coreCommonName, - ): RegistrationDeliverySingleton() - .beneficiaryType != - BeneficiaryType.individual - ? householdMemberWrapper - .headOfHousehold?.name?.givenName - : state.selectedIndividual?.name - ?.givenName ?? - '--', - localizations.translate( - i18.deliverIntervention.idTypeText, - ): () { - final identifiers = + ), + DigitTableCard( + element: { + localizations.translate( RegistrationDeliverySingleton() .beneficiaryType != BeneficiaryType.individual - ? householdMemberWrapper - .headOfHousehold?.identifiers - : state.selectedIndividual - ?.identifiers; - if (identifiers == null || - identifiers.isEmpty) { - return '--'; - } + ? i18.householdOverView + .householdOverViewHouseholdHeadLabel + : i18.common.coreCommonName, + ): RegistrationDeliverySingleton() + .beneficiaryType != + BeneficiaryType.individual + ? householdMemberWrapper + .headOfHousehold?.name?.givenName + : state.selectedIndividual?.name + ?.givenName ?? + '--', + localizations.translate( + i18.deliverIntervention.idTypeText, + ): () { + final identifiers = + RegistrationDeliverySingleton() + .beneficiaryType != + BeneficiaryType.individual + ? householdMemberWrapper + .headOfHousehold?.identifiers + : state.selectedIndividual + ?.identifiers; + if (identifiers == null || + identifiers.isEmpty) { + return '--'; + } - return localizations.translate( - identifiers.first.identifierType ?? - '--'); - }(), - localizations.translate( - i18.deliverIntervention.idNumberText, - ): () { - final identifiers = - RegistrationDeliverySingleton() - .beneficiaryType != - BeneficiaryType.individual - ? householdMemberWrapper - .headOfHousehold?.identifiers - : state.selectedIndividual - ?.identifiers; - if (identifiers == null || - identifiers.isEmpty) { - return '--'; - } + return localizations.translate( + identifiers.first.identifierType ?? + '--'); + }(), + localizations.translate( + i18.deliverIntervention.idNumberText, + ): () { + final identifiers = + RegistrationDeliverySingleton() + .beneficiaryType != + BeneficiaryType.individual + ? householdMemberWrapper + .headOfHousehold?.identifiers + : state.selectedIndividual + ?.identifiers; + if (identifiers == null || + identifiers.isEmpty) { + return '--'; + } return maskString(identifiers .first.identifierId @@ -325,65 +325,64 @@ class BeneficiaryDetailsPageState return '--'; } - final int years = - DigitDateUtils.calculateAge( - DigitDateUtils - .getFormattedDateToDateTime( - dob, - ) ?? - DateTime.now(), - ).years; - final int months = - DigitDateUtils.calculateAge( - DigitDateUtils - .getFormattedDateToDateTime( - dob, - ) ?? - DateTime.now(), - ).months; + final int years = + DigitDateUtils.calculateAge( + DigitDateUtils + .getFormattedDateToDateTime( + dob, + ) ?? + DateTime.now(), + ).years; + final int months = + DigitDateUtils.calculateAge( + DigitDateUtils + .getFormattedDateToDateTime( + dob, + ) ?? + DateTime.now(), + ).months; - return "$years ${localizations.translate(i18.memberCard.deliverDetailsYearText)} ${localizations.translate(months.toString().toUpperCase())} ${localizations.translate(i18.memberCard.deliverDetailsMonthsText)}"; - }(), - localizations.translate( - i18.common.coreCommonGender, - ): RegistrationDeliverySingleton() - .beneficiaryType != - BeneficiaryType.individual - ? householdMemberWrapper.headOfHousehold - ?.gender?.name.sentenceCase - : state.selectedIndividual?.gender?.name - .sentenceCase ?? - '--', - localizations.translate( - i18.common.coreCommonMobileNumber, - ): RegistrationDeliverySingleton() - .beneficiaryType != - BeneficiaryType.individual - ? householdMemberWrapper - .headOfHousehold?.mobileNumber - : state.selectedIndividual - ?.mobileNumber ?? - '--', - localizations.translate(i18 - .deliverIntervention - .dateOfRegistrationLabel): () { - final date = projectBeneficiary - ?.first?.dateOfRegistration; + return "$years ${localizations.translate(i18.memberCard.deliverDetailsYearText)} ${localizations.translate(months.toString().toUpperCase())} ${localizations.translate(i18.memberCard.deliverDetailsMonthsText)}"; + }(), + localizations.translate( + i18.common.coreCommonGender, + ): RegistrationDeliverySingleton() + .beneficiaryType != + BeneficiaryType.individual + ? householdMemberWrapper.headOfHousehold + ?.gender?.name.sentenceCase + : state.selectedIndividual?.gender?.name + .sentenceCase ?? + '--', + localizations.translate( + i18.common.coreCommonMobileNumber, + ): RegistrationDeliverySingleton() + .beneficiaryType != + BeneficiaryType.individual + ? householdMemberWrapper + .headOfHousehold?.mobileNumber + : state.selectedIndividual + ?.mobileNumber ?? + '--', + localizations.translate(i18 + .deliverIntervention + .dateOfRegistrationLabel): () { + final date = projectBeneficiary + ?.first?.dateOfRegistration; - final registrationDate = - DateTime.fromMillisecondsSinceEpoch( - date ?? - DateTime.now() - .millisecondsSinceEpoch, - ); + final registrationDate = + DateTime.fromMillisecondsSinceEpoch( + date ?? + DateTime.now() + .millisecondsSinceEpoch, + ); - return DateFormat('dd MMMM yyyy') - .format(registrationDate); - }(), - }, - ), - ] - ), + return DateFormat('dd MMMM yyyy') + .format(registrationDate); + }(), + }, + ), + ]), if ((RegistrationDeliverySingleton() .projectType ?.cycles ?? diff --git a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart index 717d3fa59..fceabab4c 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart @@ -13,13 +13,13 @@ import 'package:registration_delivery/models/entities/additional_fields_type.dar import 'package:registration_delivery/models/entities/status.dart'; import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; import 'package:registration_delivery/utils/constants.dart'; -import 'package:registration_delivery/utils/utils.dart'; import 'package:registration_delivery/widgets/back_navigation_help_header.dart'; import 'package:registration_delivery/widgets/component_wrapper/product_variant_bloc_wrapper.dart'; import 'package:registration_delivery/widgets/showcase/showcase_button.dart'; import '../../../widgets/localized.dart'; import '../../utils/i18_key_constants.dart' as i18; +import '../../utils/utils.dart'; @RoutePage() class DeliverySummaryPage extends LocalizedStatefulWidget { @@ -328,7 +328,7 @@ class DeliverySummaryPageState extends LocalizedState { ?.map((e) => TaskResourceInfo( productVariants .where((p) => - p.id == e.productVariantId) + p.id == e.productVariantId) .firstOrNull ?.sku ?? productVariants diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index d27cfebe9..665cf06d5 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -309,7 +309,7 @@ class IndividualDetailsPageState extends LocalizedState { }, ); }, - ),] + ), ]), slivers: [ SliverToBoxAdapter( @@ -655,10 +655,10 @@ class IndividualDetailsPageState extends LocalizedState { } IndividualModel _getIndividualModel( - BuildContext context, { - required FormGroup form, - IndividualModel? oldIndividual, - }) { + BuildContext context, { + required FormGroup form, + IndividualModel? oldIndividual, + }) { final dob = form.control(_dobKey).value as DateTime?; String? dobString; if (dob != null) { @@ -733,7 +733,7 @@ class IndividualDetailsPageState extends LocalizedState { gender: form.control(_genderKey).value == null ? null : Gender.values - .byName(form.control(_genderKey).value.toString().toLowerCase()), + .byName(form.control(_genderKey).value.toString().toLowerCase()), mobileNumber: form.control(_mobileNumberKey).value, dateOfBirth: dobString, identifiers: [ @@ -791,13 +791,13 @@ class IndividualDetailsPageState extends LocalizedState { _dobKey: FormControl( value: individual?.dateOfBirth != null ? DateFormat(Constants().dateFormat).parse( - individual!.dateOfBirth!, - ) + individual!.dateOfBirth!, + ) : null, ), _genderKey: FormControl(value: getGenderOptions(individual)), _mobileNumberKey: - FormControl(value: individual?.mobileNumber, validators: [ + FormControl(value: individual?.mobileNumber, validators: [ Validators.pattern(Constants.mobileNumberRegExp, validationMessage: localizations.translate(i18.common.coreCommonMobileNumber)), @@ -811,6 +811,6 @@ class IndividualDetailsPageState extends LocalizedState { return options?.map((e) => e).firstWhereOrNull( (element) => element.toLowerCase() == individual?.gender?.name, - ); + ); } } diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index 34cea5718..846d0b8a6 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_ui_components: ^0.0.1+7 + digit_ui_components: ^0.0.2-dev flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 reactive_forms: ^17.0.0 diff --git a/packages/survey_form/example/pubspec.lock b/packages/survey_form/example/pubspec.lock index 096ab7ba9..cb9c72d91 100644 --- a/packages/survey_form/example/pubspec.lock +++ b/packages/survey_form/example/pubspec.lock @@ -281,14 +281,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" - digit_components: - dependency: "direct main" - description: - name: digit_components - sha256: "07b585e5d8010639366da72a4a8b215ce9b8790c75b2162b66af3cea57ca35d9" - url: "https://pub.dev" - source: hosted - version: "1.0.2+1" digit_data_model: dependency: transitive description: @@ -298,13 +290,13 @@ packages: source: hosted version: "1.0.5-dev.1" digit_ui_components: - dependency: transitive + dependency: "direct main" description: name: digit_ui_components - sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae + sha256: d2f065d59090616650a49e838889f12e1f9635c4f4f74a6b4cc25411a5e87a04 url: "https://pub.dev" source: hosted - version: "0.0.1+7" + version: "0.0.2-dev.2" dio: dependency: transitive description: @@ -345,14 +337,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - easy_stepper: - dependency: transitive - description: - name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" - url: "https://pub.dev" - source: hosted - version: "0.5.2+1" fake_async: dependency: transitive description: @@ -462,62 +446,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.13" - flutter_focus_watcher: - dependency: transitive - description: - name: flutter_focus_watcher - sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility: - dependency: transitive - description: - name: flutter_keyboard_visibility - sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" - url: "https://pub.dev" - source: hosted - version: "5.4.1" - flutter_keyboard_visibility_linux: - dependency: transitive - description: - name: flutter_keyboard_visibility_linux - sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_macos: - dependency: transitive - description: - name: flutter_keyboard_visibility_macos - sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_platform_interface: - dependency: transitive - description: - name: flutter_keyboard_visibility_platform_interface - sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_web: - dependency: transitive - description: - name: flutter_keyboard_visibility_web - sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_windows: - dependency: transitive - description: - name: flutter_keyboard_visibility_windows - sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 - url: "https://pub.dev" - source: hosted - version: "1.0.0" flutter_lints: dependency: "direct dev" description: @@ -568,14 +496,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" flutter_web_plugins: dependency: transitive description: flutter @@ -793,10 +713,10 @@ packages: dependency: transitive description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" io: dependency: transitive description: @@ -837,6 +757,30 @@ packages: url: "https://pub.dev" source: hosted version: "4.9.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -889,26 +833,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -949,30 +893,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - package_info_plus: - dependency: transitive - description: - name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" - url: "https://pub.dev" - source: hosted - version: "5.0.1" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" - url: "https://pub.dev" - source: hosted - version: "2.0.1" path: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_drawing: dependency: transitive description: @@ -1061,14 +989,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" pool: dependency: transitive description: @@ -1101,22 +1021,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 - url: "https://pub.dev" - source: hosted - version: "0.8.1" reactive_forms: dependency: transitive description: name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "17.0.1" recase: dependency: transitive description: @@ -1125,14 +1037,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" - remove_emoji_input_formatter: - dependency: transitive - description: - name: remove_emoji_input_formatter - sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" - url: "https://pub.dev" - source: hosted - version: "0.0.1+1" shelf: dependency: transitive description: @@ -1229,10 +1133,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" timing: dependency: transitive description: @@ -1385,6 +1289,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.0+2" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + url: "https://pub.dev" + source: hosted + version: "14.2.1" watcher: dependency: transitive description: @@ -1442,5 +1354,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.3.0 <4.0.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/survey_form/example/pubspec.yaml b/packages/survey_form/example/pubspec.yaml index 2c953d27a..eb3dc683a 100644 --- a/packages/survey_form/example/pubspec.yaml +++ b/packages/survey_form/example/pubspec.yaml @@ -28,7 +28,7 @@ environment: # the latest version available on pub.dev. To see which dependencies have newer # versions available, run `flutter pub outdated`. dependencies: - digit_components: ^1.0.0+2 + digit_ui_components: ^0.0.2-dev survey_form: path: ../ diff --git a/packages/survey_form/lib/pages/survey_form_view.dart b/packages/survey_form/lib/pages/survey_form_view.dart index 5139a3868..a186de49e 100644 --- a/packages/survey_form/lib/pages/survey_form_view.dart +++ b/packages/survey_form/lib/pages/survey_form_view.dart @@ -1,27 +1,28 @@ import 'dart:math'; import 'package:auto_route/auto_route.dart'; -import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/models/RadioButtonModel.dart'; +import 'package:digit_ui_components/services/location_bloc.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/utils/date_utils.dart'; import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:digit_ui_components/widgets/atoms/selection_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; -import 'package:survey_form/survey_form.dart'; -import 'package:survey_form/utils/extensions/context_utility.dart'; -import 'package:digit_data_model/data_model.dart'; - import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:survey_form/survey_form.dart'; +import 'package:survey_form/utils/extensions/context_utility.dart'; import '../router/survey_form_router.gm.dart'; import '../utils/constants.dart'; +import '../utils/i18_key_constants.dart' as i18; import '../widgets/back_navigation_help_header.dart'; import '../widgets/localized.dart'; -import '../utils/i18_key_constants.dart' as i18; @RoutePage() class SurveyFormViewPage extends LocalizedStatefulWidget { @@ -720,7 +721,7 @@ class SurveyFormViewPageState extends LocalizedState { return null; }, builder: (field) => RadioList( - radioButtons: item.values != null + radioDigitButtons: item.values != null ? item.values! .where((e) => e != i18.surveyForm.notSelectedKey) diff --git a/packages/survey_form/pubspec.lock b/packages/survey_form/pubspec.lock index ca017de05..678c3b8fc 100644 --- a/packages/survey_form/pubspec.lock +++ b/packages/survey_form/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "64.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -130,7 +138,7 @@ packages: source: hosted version: "2.4.2" build_runner: - dependency: "direct main" + dependency: transitive description: name: build_runner sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" @@ -277,10 +285,10 @@ packages: dependency: transitive description: name: cross_file - sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" url: "https://pub.dev" source: hosted - version: "0.3.3+8" + version: "0.3.4+2" crypto: dependency: transitive description: @@ -308,12 +316,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git - version: "4.2.0" + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.3" dart_style: dependency: transitive description: @@ -322,14 +328,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.6" - db_viewer: - dependency: transitive - description: - name: db_viewer - sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" - url: "https://pub.dev" - source: hosted - version: "1.1.0" diff_match_patch: dependency: transitive description: @@ -341,19 +339,25 @@ packages: digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" - url: "https://pub.dev" - source: hosted + path: "../digit_data_model" + relative: true + source: path version: "1.0.5-dev.1" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_ui_components: dependency: "direct main" description: name: digit_ui_components - sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae + sha256: d2f065d59090616650a49e838889f12e1f9635c4f4f74a6b4cc25411a5e87a04 url: "https://pub.dev" source: hosted - version: "0.0.1+7" + version: "0.0.2-dev.2" dio: dependency: "direct main" description: @@ -382,26 +386,18 @@ packages: dependency: "direct main" description: name: drift - sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 - url: "https://pub.dev" - source: hosted - version: "2.15.0" - drift_db_viewer: - dependency: transitive - description: - name: drift_db_viewer - sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" + sha256: "6acedc562ffeed308049f78fb1906abad3d65714580b6745441ee6d50ec564cd" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.18.0" drift_dev: dependency: "direct dev" description: name: drift_dev - sha256: c037d9431b6f8dc633652b1469e5f53aaec6e4eb405ed29dd232fa888ef10d88 + sha256: d9b020736ea85fff1568699ce18b89fabb3f0f042e8a7a05e84a3ec20d39acde url: "https://pub.dev" source: hosted - version: "2.15.0" + version: "2.18.0" fake_async: dependency: transitive description: @@ -466,6 +462,46 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: @@ -511,54 +547,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.13" - flutter_keyboard_visibility: - dependency: transitive - description: - name: flutter_keyboard_visibility - sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" - url: "https://pub.dev" - source: hosted - version: "5.4.1" - flutter_keyboard_visibility_linux: - dependency: transitive - description: - name: flutter_keyboard_visibility_linux - sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_macos: - dependency: transitive - description: - name: flutter_keyboard_visibility_macos - sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_platform_interface: - dependency: transitive - description: - name: flutter_keyboard_visibility_platform_interface - sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_web: - dependency: transitive - description: - name: flutter_keyboard_visibility_web - sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_windows: - dependency: transitive - description: - name: flutter_keyboard_visibility_windows - sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 - url: "https://pub.dev" - source: hosted - version: "1.0.0" flutter_lints: dependency: "direct dev" description: @@ -609,14 +597,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" flutter_web_plugins: dependency: transitive description: flutter @@ -666,10 +646,10 @@ packages: dependency: transitive description: name: geolocator_android - sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" url: "https://pub.dev" source: hosted - version: "4.3.1" + version: "4.6.1" geolocator_apple: dependency: transitive description: @@ -754,10 +734,10 @@ packages: dependency: transitive description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -842,10 +822,10 @@ packages: dependency: "direct main" description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" io: dependency: transitive description: @@ -894,6 +874,30 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -946,26 +950,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -1018,10 +1022,10 @@ packages: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_drawing: dependency: transitive description: @@ -1110,14 +1114,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" pool: dependency: transitive description: @@ -1150,22 +1146,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 - url: "https://pub.dev" - source: hosted - version: "0.8.1" reactive_forms: dependency: "direct main" description: name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "17.0.1" recase: dependency: transitive description: @@ -1251,6 +1239,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqlite3: dependency: transitive description: @@ -1271,10 +1267,10 @@ packages: dependency: transitive description: name: sqlparser - sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" + sha256: ade9a67fd70d0369329ed3373208de7ebd8662470e8c396fc8d0d60f9acdfc9f url: "https://pub.dev" source: hosted - version: "0.34.1" + version: "0.36.0" stack_trace: dependency: transitive description: @@ -1319,26 +1315,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" timing: dependency: transitive description: @@ -1431,10 +1427,10 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.3.3" url_launcher_windows: dependency: transitive description: @@ -1447,10 +1443,10 @@ packages: dependency: transitive description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.5.1" vector_graphics: dependency: transitive description: @@ -1495,10 +1491,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1511,10 +1507,10 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.5.1" web_socket_channel: dependency: transitive description: @@ -1564,5 +1560,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <=3.9.0" - flutter: ">=3.16.0" + dart: ">=3.3.0 <4.0.0" + flutter: ">=3.19.0" diff --git a/packages/survey_form/pubspec.yaml b/packages/survey_form/pubspec.yaml index 3558f96fd..e32e8c2a1 100644 --- a/packages/survey_form/pubspec.yaml +++ b/packages/survey_form/pubspec.yaml @@ -12,20 +12,19 @@ dependencies: flutter: sdk: flutter digit_ui_components: ^0.0.2-dev - flutter_bloc: ^8.1.1 - freezed_annotation: ^2.1.0 - build_runner: ^2.2.1 + flutter_bloc: ^8.1.5 + freezed_annotation: ^2.4.1 reactive_forms: ^17.0.0 fluttertoast: ^8.1.2 overlay_builder: ^1.1.0 - intl: ^0.18.0 + intl: ^0.19.0 flutter_svg: ^2.0.8 dart_mappable: ^4.2.0 drift: ^2.0.0 - auto_route: ^7.8.4 + auto_route: ^8.1.3 digit_data_model: ^1.0.5-dev.1 collection: ^1.16.0 - location: ^5.0.0 + location: ^6.0.2 dio: ^5.1.2 group_radio_button: ^1.3.0 @@ -43,7 +42,7 @@ dev_dependencies: ref: master path: ./packages/dart_mappable_builder drift_dev: ^2.14.1 - auto_route_generator: ^7.3.2 + auto_route_generator: ^8.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/packages/sync_service/pubspec.yaml b/packages/sync_service/pubspec.yaml index 80597006c..9528e2d35 100644 --- a/packages/sync_service/pubspec.yaml +++ b/packages/sync_service/pubspec.yaml @@ -28,7 +28,7 @@ dependencies: provider: ^6.1.2 flutter_secure_storage: ^9.2.2 digit_data_model: ^1.0.4 - digit_components: ^1.0.2 + digit_ui_components: 0.0.2-dev.2 super_annotations: ^0.8.1 dev_dependencies: @@ -46,7 +46,6 @@ dev_dependencies: url: https://github.com/egovernments/health-campaign-field-worker-app/ ref: master path: ./packages/dart_mappable_builder - isar_generator: ^3.1.0+1 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec From 61faf9836bec90249b9bd2da9d751a758edeabeb Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Mon, 2 Sep 2024 10:29:07 +0530 Subject: [PATCH 175/241] cherry picked complaints changes --- .../assets/animated_json/alert.json | 1127 +++++++++++++++++ .../assets/animated_json/error.json | 728 +++++++++++ .../assets/animated_json/success.json | 917 ++++++++++++++ packages/complaints/example/pubspec.lock | 476 +++++-- .../lib/pages/complaints_acknowledgement.dart | 39 +- .../pages/inbox/complaints_details_view.dart | 404 +++--- .../lib/pages/inbox/complaints_inbox.dart | 454 ++++--- .../pages/inbox/complaints_inbox_filter.dart | 145 ++- .../pages/inbox/complaints_inbox_search.dart | 154 ++- .../pages/inbox/complaints_inbox_sort.dart | 88 +- .../pages/registration/complaint_type.dart | 238 ++-- .../registration/complaints_details.dart | 668 +++++----- .../registration/complaints_location.dart | 260 ++-- .../complaints_registration_wrapper.dart | 92 +- .../widgets/boundary_selection_wrapper.dart | 2 +- .../header/back_navigation_help_header.dart | 6 +- packages/complaints/pubspec.lock | 520 +++++--- packages/complaints/pubspec.yaml | 7 +- 18 files changed, 4813 insertions(+), 1512 deletions(-) create mode 100644 packages/complaints/assets/animated_json/alert.json create mode 100644 packages/complaints/assets/animated_json/error.json create mode 100644 packages/complaints/assets/animated_json/success.json diff --git a/packages/complaints/assets/animated_json/alert.json b/packages/complaints/assets/animated_json/alert.json new file mode 100644 index 000000000..171b416cd --- /dev/null +++ b/packages/complaints/assets/animated_json/alert.json @@ -0,0 +1,1127 @@ +{ + "nm": "48 - Warning", + "ddd": 0, + "h": 500, + "w": 500, + "meta": { + "g": "LottieFiles AE " + }, + "layers": [ + { + "ty": 3, + "nm": "48 - Warning", + "sr": 1, + "st": 0, + "op": 144, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 60, + 60, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 180, + 180, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 250.045, + 290.339, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 0, + "ix": 11 + } + }, + "ef": [], + "ind": 1 + }, + { + "ty": 4, + "nm": "Line", + "sr": 1, + "st": 0, + "op": 144, + "ip": 12, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + -1, + 21.25, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 12 + }, + { + "s": [ + 55.556, + 55.556, + 100 + ], + "t": 32 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 85.533, + 85.887, + 0 + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 180 + ], + "t": 12 + }, + { + "s": [ + 0 + ], + "t": 32 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Shape 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1, + 80 + ], + [ + -1, + -37.5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 2, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 28, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 100, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0, + "y": 1 + }, + "s": [ + 0 + ], + "t": 22 + }, + { + "s": [ + 40 + ], + "t": 42 + } + ], + "ix": 1 + }, + "m": 1 + } + ], + "ind": 2, + "parent": 5 + }, + { + "ty": 4, + "nm": "Dot", + "sr": 1, + "st": 0, + "op": 144, + "ip": 12, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Shape 1", + "ix": 1, + "cix": 2, + "np": 4, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1, + 80 + ], + [ + -1, + -37.5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 0.1, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 0, + "k": 0, + "ix": 1 + }, + "m": 1 + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 2, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 33, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 3, + "parent": 2 + }, + { + "ty": 4, + "nm": "Tri Outlines", + "sr": 1, + "st": 0, + "op": 144, + "ip": 10, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 85.513, + 72.848, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 10 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 15 + } + ], + "ix": 6, + "x": "var $bm_rt;\nvar amp, freq, decay, n, t, v;\ntry {\n amp = $bm_div(effect('Scale - Overshoot')('ADBE Slider Control-0001'), 2.5), freq = $bm_div(effect('Scale - Bounce')('ADBE Slider Control-0001'), 20), decay = $bm_div(effect('Scale - Friction')('ADBE Slider Control-0001'), 20), n = 0, 0 < numKeys && (n = nearestKey(time).index, key(n).time > time && n--), t = 0 === n ? 0 : $bm_sub(time, key(n).time), $bm_rt = 0 < n ? (v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10))), $bm_sum(value, $bm_div($bm_mul($bm_mul($bm_div(v, 100), amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))))) : value;\n} catch (e$$4) {\n $bm_rt = value = value;\n}" + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 59.955, + 37.467, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [ + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Overshoot", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 10, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Bounce", + "ix": 2, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 35, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Friction", + "ix": 3, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 65, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + } + ], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Group 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + -3.315, + 5.634 + ], + [ + 0, + 0 + ], + [ + -3.267, + -5.554 + ], + [ + 0, + 0 + ], + [ + 6.537, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 3.268, + -5.554 + ], + [ + 0, + 0 + ], + [ + 3.315, + 5.634 + ], + [ + 0, + 0 + ], + [ + -6.536, + 0 + ] + ], + "v": [ + [ + -81.948, + 59.861 + ], + [ + -7.284, + -67.044 + ], + [ + 7.284, + -67.044 + ], + [ + 81.948, + 59.861 + ], + [ + 74.664, + 72.598 + ], + [ + -74.664, + 72.598 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 0.7255, + 0.098, + 0 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 85.513, + 72.848 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 4, + "parent": 1 + }, + { + "ty": 3, + "nm": "Tri", + "sr": 1, + "st": 0, + "op": 144, + "ip": 10, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 85.513, + 72.848, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0, + 0, + 100 + ], + "t": 10 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 15 + } + ], + "ix": 6, + "x": "var $bm_rt;\nvar amp, freq, decay, n, t, v;\ntry {\n amp = $bm_div(effect('Scale - Overshoot')('ADBE Slider Control-0001'), 2.5), freq = $bm_div(effect('Scale - Bounce')('ADBE Slider Control-0001'), 20), decay = $bm_div(effect('Scale - Friction')('ADBE Slider Control-0001'), 20), n = 0, 0 < numKeys && (n = nearestKey(time).index, key(n).time > time && n--), t = 0 === n ? 0 : $bm_sub(time, key(n).time), $bm_rt = 0 < n ? (v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10))), $bm_sum(value, $bm_div($bm_mul($bm_mul($bm_div(v, 100), amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))))) : value;\n} catch (e$$4) {\n $bm_rt = value = value;\n}" + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 59.955, + 37.467, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [ + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Overshoot", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 10, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Bounce", + "ix": 2, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 35, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + }, + { + "ty": 5, + "mn": "ADBE Slider Control", + "nm": "Scale - Friction", + "ix": 3, + "en": 1, + "ef": [ + { + "ty": 0, + "mn": "ADBE Slider Control-0001", + "nm": "Slider", + "ix": 1, + "v": { + "a": 0, + "k": 65, + "ix": 1, + "x": "var $bm_rt;\n$bm_rt = clamp(value, 0, 100);" + } + } + ] + } + ], + "ind": 5, + "parent": 1 + }, + { + "ty": 1, + "nm": "Plate_white", + "sr": 1, + "st": 0, + "op": 144, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 250, + 250, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 250, + 250, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "sc": "#ffffff", + "sh": 500, + "sw": 500, + "ind": 6 + } + ], + "v": "5.5.7", + "fr": 48, + "op": 144, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/packages/complaints/assets/animated_json/error.json b/packages/complaints/assets/animated_json/error.json new file mode 100644 index 000000000..96b4f9626 --- /dev/null +++ b/packages/complaints/assets/animated_json/error.json @@ -0,0 +1,728 @@ +{ + "nm": "ckeck", + "ddd": 0, + "h": 50, + "w": 50, + "meta": { + "g": "@lottiefiles/toolkit-js 0.33.2" + }, + "layers": [ + { + "ty": 4, + "nm": "! Outlines", + "sr": 1, + "st": 0, + "op": 213, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 2, + 12, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.653, + "y": -0.834 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 60 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 73 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.127, + "y": 1.695 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 83 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 90 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 25, + 25, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Group 1", + "ix": 1, + "cix": 2, + "np": 4, + "it": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 1.104 + ], + [ + -1.104, + 0 + ], + [ + 0, + -1.104 + ], + [ + 1.104, + 0 + ] + ], + "o": [ + [ + 0, + -1.104 + ], + [ + 1.104, + 0 + ], + [ + 0, + 1.104 + ], + [ + -1.104, + 0 + ] + ], + "v": [ + [ + -2, + 10 + ], + [ + 0, + 8 + ], + [ + 2, + 10 + ], + [ + 0, + 12 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 2", + "ix": 2, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1.036, + 5 + ], + [ + -2, + -6.625 + ], + [ + -2, + -12 + ], + [ + 2, + -12 + ], + [ + 2, + -6.625 + ], + [ + 1.052, + 5 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "mm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Merge", + "nm": "Merge Paths 1", + "mm": 1 + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0.099, + 9.982 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 2.099, + 21.982 + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 10 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 12 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 14 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 16 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 18 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5 + ], + "t": 20 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + -5 + ], + "t": 22 + }, + { + "s": [ + 0 + ], + "t": 24 + } + ], + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 1 + }, + { + "ty": 4, + "nm": "Shape Layer 1", + "sr": 1, + "st": 0, + "op": 193, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 10, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.41, + "y": -0.602 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 60 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.436, + "y": 1.492 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 83 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 90 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 25, + 35, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Ellipse 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "el", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Ellipse", + "nm": "Ellipse Path 1", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 3 + }, + "s": { + "a": 0, + "k": [ + 40, + 40 + ], + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 2, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ], + "ix": 3 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 100, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 0, + "k": 0, + "ix": 1 + }, + "m": 1 + } + ], + "ind": 2 + } + ], + "v": "5.6.5", + "fr": 60, + "op": 180, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/packages/complaints/assets/animated_json/success.json b/packages/complaints/assets/animated_json/success.json new file mode 100644 index 000000000..43192f708 --- /dev/null +++ b/packages/complaints/assets/animated_json/success.json @@ -0,0 +1,917 @@ +{ + "nm": "sucess", + "ddd": 0, + "h": 120, + "w": 120, + "meta": { + "g": "LottieFiles AE 0.1.21" + }, + "layers": [ + { + "ty": 3, + "nm": "scale up null", + "sr": 1, + "st": 0, + "op": 300.00001221925, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0 + }, + "i": { + "x": 0.833, + "y": 1 + }, + "s": [ + 111, + 111, + 100 + ], + "t": 27 + }, + { + "o": { + "x": 0.167, + "y": 0 + }, + "i": { + "x": 0.833, + "y": 1 + }, + "s": [ + 101, + 101, + 100 + ], + "t": 36 + }, + { + "s": [ + 121, + 121, + 100 + ], + "t": 42.0000017106951 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 60, + 60, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 0, + "ix": 11 + } + }, + "ef": [], + "ind": 1 + }, + { + "ty": 4, + "nm": "spark", + "sr": 1, + "st": 35.0000014255792, + "op": 335.00001364483, + "ip": 35.0000014255792, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0.5, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Rectangle 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 1", + "d": 1, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 0, + -21 + ], + "t": 35, + "ti": [ + 0, + 1.5 + ], + "to": [ + 0, + -1.5 + ] + }, + { + "s": [ + 0, + -30 + ], + "t": 53.0000021587343 + } + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 4 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.976, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 2, + 0 + ], + "t": 35 + }, + { + "o": { + "x": 0.33299999999999996, + "y": 0 + }, + "i": { + "x": 0.15355432054499818, + "y": 0.9999999999999999 + }, + "s": [ + 2, + 8 + ], + "t": 42 + }, + { + "s": [ + 1.633, + 0 + ], + "t": 53.0000021587343 + } + ], + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 0, + -8 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + }, + { + "ty": "rp", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Repeater", + "nm": "Repeater 1", + "ix": 2, + "m": 1, + "c": { + "a": 0, + "k": 8, + "ix": 1 + }, + "o": { + "a": 0, + "k": 0, + "ix": 2 + }, + "tr": { + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 45, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0 + }, + "so": { + "a": 0, + "k": 100, + "ix": 5 + }, + "eo": { + "a": 0, + "k": 100, + "ix": 6 + } + } + } + ], + "ind": 2, + "parent": 1 + }, + { + "ty": 4, + "nm": "check", + "sr": 1, + "st": 10.0000004073083, + "op": 310.000012626559, + "ip": 22.0000008960784, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": false, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 3.5, + 3.75 + ], + [ + -12.973, + 5.349 + ], + [ + -6.124, + -9.992 + ], + [ + 12.125, + -7.431 + ], + [ + 7.431, + 12.125 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -3.5, + -3.75 + ], + [ + 10.764, + -2.941 + ], + [ + 7.431, + 12.125 + ], + [ + -12.125, + 7.431 + ], + [ + -7.431, + -12.125 + ] + ], + "v": [ + [ + 15.25, + -9.688 + ], + [ + -5.75, + 10.062 + ], + [ + -16, + 0.25 + ], + [ + -6.777, + -24.849 + ], + [ + 21.955, + -13.456 + ], + [ + 13.456, + 21.955 + ], + [ + -21.955, + 13.456 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 1, + "k": [ + { + "o": { + "x": 0.714, + "y": 0 + }, + "i": { + "x": 0.351, + "y": 1 + }, + "s": [ + 100 + ], + "t": 10 + }, + { + "s": [ + 23 + ], + "t": 40.0000016292334 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.742, + "y": 0 + }, + "i": { + "x": 0.363, + "y": 1 + }, + "s": [ + 100 + ], + "t": 17 + }, + { + "s": [ + 0 + ], + "t": 45.0000018328876 + } + ], + "ix": 1 + }, + "m": 1 + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 4, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 3 + } + } + ], + "ind": 3, + "parent": 1 + }, + { + "ty": 4, + "nm": "circle", + "sr": 1, + "st": 0, + "op": 300.00001221925, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "sh", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Path 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + -14.221, + 0 + ], + [ + 0, + -14.221 + ], + [ + 14.221, + 0 + ], + [ + 0, + 14.221 + ] + ], + "o": [ + [ + 14.221, + 0 + ], + [ + 0, + 14.221 + ], + [ + -14.221, + 0 + ], + [ + 0, + -14.221 + ] + ], + "v": [ + [ + 0, + -25.75 + ], + [ + 25.75, + 0 + ], + [ + 0, + 25.75 + ], + [ + -25.75, + 0 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 2, + "ix": 5 + }, + "c": { + "a": 0, + "k": [ + 0.9804, + 0.9804, + 0.9804 + ], + "ix": 3 + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 3, + "e": { + "a": 1, + "k": [ + { + "o": { + "x": 0.714, + "y": 0 + }, + "i": { + "x": 0.351, + "y": 1 + }, + "s": [ + 100 + ], + "t": 0 + }, + { + "s": [ + 100 + ], + "t": 30.0000012219251 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.742, + "y": 0 + }, + "i": { + "x": 0.363, + "y": 1 + }, + "s": [ + 100 + ], + "t": 7 + }, + { + "s": [ + 0 + ], + "t": 33.0000013441176 + } + ], + "ix": 1 + }, + "m": 1 + } + ], + "ind": 4, + "parent": 1 + } + ], + "v": "5.5.7", + "fr": 29.9700012207031, + "op": 60.0000024438501, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/packages/complaints/example/pubspec.lock b/packages/complaints/example/pubspec.lock index 39defc8b1..5c7feeae0 100644 --- a/packages/complaints/example/pubspec.lock +++ b/packages/complaints/example/pubspec.lock @@ -45,10 +45,10 @@ packages: dependency: transitive description: name: auto_route - sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 + sha256: a9001a90539ca3effc168f7e1029a5885c7326b9032c09ac895e303c1d137704 url: "https://pub.dev" source: hosted - version: "7.9.2" + version: "8.3.0" bloc: dependency: transitive description: @@ -129,6 +129,46 @@ packages: url: "https://pub.dev" source: hosted version: "8.9.2" + camera: + dependency: transitive + description: + name: camera + sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167" + url: "https://pub.dev" + source: hosted + version: "0.11.0+2" + camera_android_camerax: + dependency: transitive + description: + name: camera_android_camerax + sha256: "011be2ab0e5b3e3aa8094413fa890f8c5c5afd7cfdaef353a992047d4dab5780" + url: "https://pub.dev" + source: hosted + version: "0.6.8+2" + camera_avfoundation: + dependency: transitive + description: + name: camera_avfoundation + sha256: "2e4c568f70e406ccb87376bc06b53d2f5bebaab71e2fbcc1a950e31449381bcf" + url: "https://pub.dev" + source: hosted + version: "0.9.17+5" + camera_platform_interface: + dependency: transitive + description: + name: camera_platform_interface + sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 + url: "https://pub.dev" + source: hosted + version: "2.8.0" + camera_web: + dependency: transitive + description: + name: camera_web + sha256: "595f28c89d1fb62d77c73c633193755b781c6d2e0ebcd8dc25b763b514e6ba8f" + url: "https://pub.dev" + source: hosted + version: "0.3.5" characters: dependency: transitive description: @@ -137,6 +177,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + charcode: + dependency: transitive + description: + name: charcode + sha256: fb0f1107cac15a5ea6ef0a6ef71a807b9e4267c713bb93e00e92d737cc8dbd8a + url: "https://pub.dev" + source: hosted + version: "1.4.0" checked_yaml: dependency: transitive description: @@ -184,6 +232,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.1" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" + url: "https://pub.dev" + source: hosted + version: "0.3.4+2" crypto: dependency: transitive description: @@ -192,6 +248,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" + url: "https://pub.dev" + source: hosted + version: "1.0.2" cupertino_icons: dependency: "direct main" description: @@ -224,13 +288,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" - digit_components: - dependency: "direct overridden" - description: - path: "../../digit_components" - relative: true - source: path - version: "1.0.2+1" digit_data_model: dependency: transitive description: @@ -239,6 +296,15 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.5-dev.1" + digit_ui_components: + dependency: transitive + description: + path: "flutter/digit-ui-components/digit_components" + ref: version_update + resolved-ref: ad45e31f470630b5876f38c0bc7744c5bf05b02b + url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" + source: git + version: "0.0.1+7" dio: dependency: transitive description: @@ -255,6 +321,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" drift: dependency: transitive description: @@ -271,14 +345,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - easy_stepper: - dependency: transitive - description: - name: easy_stepper - sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" - url: "https://pub.dev" - source: hosted - version: "0.8.5+1" fake_async: dependency: transitive description: @@ -303,6 +369,46 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.0" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: "2ca051989f69d1b2ca012b2cf3ccf78c70d40144f0861ff2c063493f7c8c3d45" + url: "https://pub.dev" + source: hosted + version: "8.0.5" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc" + url: "https://pub.dev" + source: hosted + version: "0.9.4+2" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "8f5d2f6590d51ecd9179ba39c64f722edc15226cc93dcc8698466ad36a4a85a4" + url: "https://pub.dev" + source: hosted + version: "0.9.3+3" fixnum: dependency: transitive description: @@ -332,62 +438,30 @@ packages: url: "https://pub.dev" source: hosted version: "5.1.0" - flutter_focus_watcher: - dependency: transitive - description: - name: flutter_focus_watcher - sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility: - dependency: transitive - description: - name: flutter_keyboard_visibility - sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" - url: "https://pub.dev" - source: hosted - version: "5.4.1" - flutter_keyboard_visibility_linux: + flutter_dropzone: dependency: transitive description: - name: flutter_keyboard_visibility_linux - sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 url: "https://pub.dev" source: hosted - version: "1.0.0" - flutter_keyboard_visibility_macos: - dependency: transitive - description: - name: flutter_keyboard_visibility_macos - sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_platform_interface: - dependency: transitive - description: - name: flutter_keyboard_visibility_platform_interface - sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_web: + version: "3.0.7" + flutter_dropzone_platform_interface: dependency: transitive description: - name: flutter_keyboard_visibility_web - sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 + name: flutter_dropzone_platform_interface + sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" url: "https://pub.dev" source: hosted - version: "2.0.0" - flutter_keyboard_visibility_windows: + version: "2.2.0" + flutter_dropzone_web: dependency: transitive description: - name: flutter_keyboard_visibility_windows - sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "3.0.13" flutter_lints: dependency: "direct dev" description: @@ -401,6 +475,14 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda" + url: "https://pub.dev" + source: hosted + version: "2.0.22" flutter_spinkit: dependency: transitive description: @@ -409,6 +491,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" flutter_svg: dependency: transitive description: @@ -422,14 +512,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" flutter_web_plugins: dependency: transitive description: flutter @@ -459,6 +541,54 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + url: "https://pub.dev" + source: hosted + version: "4.3.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" + url: "https://pub.dev" + source: hosted + version: "2.3.8+1" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -499,6 +629,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.3.1" + html: + dependency: transitive + description: + name: html + sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" + url: "https://pub.dev" + source: hosted + version: "0.15.5" http: dependency: transitive description: @@ -523,6 +661,70 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a" + url: "https://pub.dev" + source: hosted + version: "1.1.2" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "8c5abf0dcc24fe6e8e0b4a5c0b51a5cf30cefdf6407a3213dae61edc75a70f56" + url: "https://pub.dev" + source: hosted + version: "0.8.12+12" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83" + url: "https://pub.dev" + source: hosted + version: "3.0.6" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: "4f0568120c6fcc0aaa04511cb9f9f4d29fc3d0139884b1d06be88dcec7641d6b" + url: "https://pub.dev" + source: hosted + version: "0.8.12+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: "9ec26d410ff46f483c5519c29c02ef0e02e13a543f882b152d4bfd2f06802f80" + url: "https://pub.dev" + source: hosted + version: "2.10.0" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" intl: dependency: transitive description: @@ -707,22 +909,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - package_info_plus: - dependency: transitive - description: - name: package_info_plus - sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 - url: "https://pub.dev" - source: hosted - version: "8.0.2" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 - url: "https://pub.dev" - source: hosted - version: "3.0.1" path: dependency: transitive description: @@ -731,6 +917,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.0" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_parsing: dependency: transitive description: @@ -811,14 +1005,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" pool: dependency: transitive description: @@ -851,14 +1037,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a - url: "https://pub.dev" - source: hosted - version: "2.1.1" reactive_forms: dependency: transitive description: @@ -875,14 +1053,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" - remove_emoji_input_formatter: - dependency: transitive - description: - name: remove_emoji_input_formatter - sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" - url: "https://pub.dev" - source: hosted - version: "0.0.1+1" shelf: dependency: transitive description: @@ -1000,6 +1170,86 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + url_launcher: + dependency: transitive + description: + name: url_launcher + sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" + url: "https://pub.dev" + source: hosted + version: "6.3.1" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79 + url: "https://pub.dev" + source: hosted + version: "6.3.9" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2" + url: "https://pub.dev" + source: hosted + version: "3.2.2" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" + url: "https://pub.dev" + source: hosted + version: "2.3.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4" + url: "https://pub.dev" + source: hosted + version: "3.1.3" uuid: dependency: transitive description: @@ -1040,6 +1290,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" vm_service: dependency: transitive description: diff --git a/packages/complaints/lib/pages/complaints_acknowledgement.dart b/packages/complaints/lib/pages/complaints_acknowledgement.dart index 968a452e6..9d1e6b808 100644 --- a/packages/complaints/lib/pages/complaints_acknowledgement.dart +++ b/packages/complaints/lib/pages/complaints_acknowledgement.dart @@ -1,8 +1,8 @@ - import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:flutter/material.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/molecules/panel_cards.dart'; +import 'package:flutter/material.dart'; import '../utils/i18_key_constants.dart' as i18; @@ -25,18 +25,27 @@ class ComplaintsAcknowledgementPageState @override Widget build(BuildContext context) { return Scaffold( - body: DigitAcknowledgement.success( - action: () { - context.router.maybePop(); - }, - actionLabel: - localizations.translate(i18.complaints.acknowledgementAction), - description: localizations.translate( - i18.complaints.acknowledgementDescription, - ), - label: localizations.translate(i18.complaints.acknowledgementLabel), - subLabel: - "${localizations.translate(i18.complaints.acknowledgementSubLabelMain)}\n${localizations.translate(i18.complaints.acknowledgementSubLabelSub)}", + body: PanelCard( + title: localizations.translate(i18.complaints.acknowledgementLabel), + type: PanelType.success, + additionalDetails: [ + Text("${localizations.translate( + i18.complaints.acknowledgementSubLabelMain)}" + "\n${localizations.translate( + i18.complaints.acknowledgementSubLabelSub)}"), + ], + description: localizations.translate( + i18.complaints.acknowledgementDescription, + ), + actions: [ + Button( + label: localizations.translate( + i18.complaints.acknowledgementAction), + onPressed: () => context.router.maybePop(), + type: ButtonType.primary, + size: ButtonSize.large, + ) + ], ), ); } diff --git a/packages/complaints/lib/pages/inbox/complaints_details_view.dart b/packages/complaints/lib/pages/inbox/complaints_details_view.dart index 368a8c8df..dcec4f356 100644 --- a/packages/complaints/lib/pages/inbox/complaints_details_view.dart +++ b/packages/complaints/lib/pages/inbox/complaints_details_view.dart @@ -1,7 +1,9 @@ import 'package:auto_route/annotations.dart'; import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/atoms/digit_divider.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:recase/recase.dart'; @@ -28,14 +30,14 @@ class ComplaintsDetailsViewPage extends StatelessWidget { return Scaffold( body: ScrollableContent( - enableFixedButton: true, + enableFixedDigitButton: true, header: Column( children: [ const BackNavigationHelpHeaderWidget(), Align( alignment: Alignment.centerLeft, child: Padding( - padding: const EdgeInsets.only(left: 8.0, top: 20.0), + padding: const EdgeInsets.only(left: spacer2, top: spacer5), child: Text( localizations .translate(i18.complaints.complaintsDetailsLabel), @@ -45,229 +47,209 @@ class ComplaintsDetailsViewPage extends StatelessWidget { ), ], ), - footer: SizedBox( - child: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: DigitElevatedButton( - onPressed: () { - router.pop(); - }, - child: Center( - child: Text( - localizations.translate(i18.common.corecommonclose), - ), + footer: DigitCard( + cardType: CardType.primary, + margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), + padding: const EdgeInsets.all(spacer2), + children: [ + DigitButton( + onPressed: () { + router.pop(); + }, + label: localizations.translate(i18.common.corecommonclose), + type: DigitButtonType.primary, + size: DigitButtonSize.large, + mainAxisSize: MainAxisSize.max, ), - ), - ), - ), + ]), children: [ - DigitCard( - child: Column( - children: [ - Padding( - padding: const EdgeInsets.only(top: 16, bottom: 16), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 3, - child: Text( - localizations - .translate(i18.complaints.inboxNumberLabel), - style: theme.textTheme.headlineSmall, - ), - ), - Expanded( - flex: 2, - child: Text( - complaint.serviceRequestId ?? - "${localizations.translate(i18.complaints.inboxNotGeneratedLabel)}\n${localizations.translate(i18.complaints.inboxSyncRequiredLabel)}", - style: TextStyle( - color: complaint.serviceRequestId != null - ? theme.colorScheme.secondary - : const DigitColors().woodsmokeBlack, - ), - ), - ), - ], + DigitCard(cardType: CardType.primary, children: [ + Padding( + padding: const EdgeInsets.only(top: spacer4, bottom: spacer4), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 3, + child: Text( + localizations.translate(i18.complaints.inboxNumberLabel), + style: theme.textTheme.headlineSmall, + ), ), - ), - const DigitDivider(), - Padding( - padding: const EdgeInsets.only(top: 16, bottom: 16), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 3, - child: Text( - localizations - .translate(i18.complaints.inboxTypeLabel), - style: theme.textTheme.headlineSmall, - ), - ), - Expanded( - flex: 2, - child: Text( - localizations.translate( - complaint.serviceCode.snakeCase - .toUpperCase() - .trim(), - ), - ), + Expanded( + flex: 2, + child: Text( + complaint.serviceRequestId ?? + "${localizations.translate(i18.complaints.inboxNotGeneratedLabel)}\n${localizations.translate(i18.complaints.inboxSyncRequiredLabel)}", + style: TextStyle( + color: complaint.serviceRequestId != null + ? theme.colorScheme.secondary + : theme.colorTheme.text.primary, ), - ], + ), ), - ), - const DigitDivider(), - Padding( - padding: const EdgeInsets.only(top: 16, bottom: 16), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Expanded( - flex: 3, - child: Text( - localizations - .translate(i18.complaints.inboxDateLabel), - style: theme.textTheme.headlineSmall, - ), - ), - Expanded( - flex: 2, - child: Text( - complaint.auditDetails?.createdTime.toDateTime - .getFormattedDate() ?? - "", - ), - ), - ], + ], + ), + ), + Padding( + padding: const EdgeInsets.only(top: spacer4, bottom: spacer4), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 3, + child: Text( + localizations.translate(i18.complaints.inboxTypeLabel), + style: theme.textTheme.headlineSmall, + ), ), - ), - const DigitDivider(), - Padding( - padding: const EdgeInsets.only(top: 16, bottom: 16), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Expanded( - flex: 3, - child: Text( - localizations - .translate(i18.complaints.complainantName), - style: theme.textTheme.headlineSmall, - ), - ), - Expanded( - flex: 2, - child: Text( - complaint.user.name ?? "", - ), + Expanded( + flex: 2, + child: Text( + localizations.translate( + complaint.serviceCode.snakeCase.toUpperCase().trim(), ), - ], + ), ), - ), - const DigitDivider(), - Padding( - padding: const EdgeInsets.only(top: 16, bottom: 16), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Expanded( - flex: 3, - child: Text( - localizations - .translate(i18.complaints.inboxAreaLabel), - style: theme.textTheme.headlineSmall, - ), - ), - Expanded( - flex: 2, - child: Text( - complaint.address.locality?.name ?? "", - ), - ), - ], + ], + ), + ), + Padding( + padding: const EdgeInsets.only(top: spacer4, bottom: spacer4), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Expanded( + flex: 3, + child: Text( + localizations.translate(i18.complaints.inboxDateLabel), + style: theme.textTheme.headlineSmall, + ), ), - ), - const DigitDivider(), - Padding( - padding: const EdgeInsets.only(top: 16, bottom: 16), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Expanded( - flex: 3, - child: Text( - localizations.translate( - i18.complaints.complainantContactNumber, - ), - style: theme.textTheme.headlineSmall, - ), - ), - Expanded( - flex: 2, - child: Text( - complaint.user.mobileNumber ?? "", - ), - ), - ], + Expanded( + flex: 2, + child: Text( + complaint.auditDetails?.createdTime.toDateTime + .getFormattedDate() ?? + "", + ), ), - ), - const DigitDivider(), - Padding( - padding: const EdgeInsets.only(top: 16, bottom: 16), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Expanded( - flex: 3, - child: Text( - localizations - .translate(i18.complaints.inboxStatusLabel), - style: theme.textTheme.headlineSmall, - ), - ), - Expanded( - flex: 2, - child: Text( - localizations.translate( - "COMPLAINTS_STATUS_${complaint.applicationStatus.name.snakeCase.toUpperCase()}", - ), - ), + ], + ), + ), + Padding( + padding: const EdgeInsets.only(top: spacer4, bottom: spacer4), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Expanded( + flex: 3, + child: Text( + localizations.translate(i18.complaints.complainantName), + style: theme.textTheme.headlineSmall, + ), + ), + Expanded( + flex: 2, + child: Text( + complaint.user.name ?? "", + ), + ), + ], + ), + ), + Padding( + padding: const EdgeInsets.only(top: spacer4, bottom: spacer4), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Expanded( + flex: 3, + child: Text( + localizations.translate(i18.complaints.inboxAreaLabel), + style: theme.textTheme.headlineSmall, + ), + ), + Expanded( + flex: 2, + child: Text( + complaint.address.locality?.name ?? "", + ), + ), + ], + ), + ), + Padding( + padding: const EdgeInsets.only(top: spacer4, bottom: spacer4), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Expanded( + flex: 3, + child: Text( + localizations.translate( + i18.complaints.complainantContactNumber, ), - ], + style: theme.textTheme.headlineSmall, + ), ), - ), - const DigitDivider(), - Padding( - padding: const EdgeInsets.only(top: 16, bottom: 16), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Expanded( - flex: 3, - child: Text( - localizations - .translate(i18.complaints.complaintDescription), - style: theme.textTheme.headlineSmall, - ), + Expanded( + flex: 2, + child: Text( + complaint.user.mobileNumber ?? "", + ), + ), + ], + ), + ), + Padding( + padding: const EdgeInsets.only(top: spacer4, bottom: spacer4), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Expanded( + flex: 3, + child: Text( + localizations.translate(i18.complaints.inboxStatusLabel), + style: theme.textTheme.headlineSmall, + ), + ), + Expanded( + flex: 2, + child: Text( + localizations.translate( + "COMPLAINTS_STATUS_${complaint.applicationStatus.name.snakeCase.toUpperCase()}", ), - Expanded( - flex: 2, - child: Text( - localizations.translate( - complaint.description, - ), - ), + ), + ), + ], + ), + ), + Padding( + padding: const EdgeInsets.only(top: spacer4, bottom: spacer4), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Expanded( + flex: 3, + child: Text( + localizations + .translate(i18.complaints.complaintDescription), + style: theme.textTheme.headlineSmall, + ), + ), + Expanded( + flex: 2, + child: Text( + localizations.translate( + complaint.description, ), - ], + ), ), - ), - ], + ], + ), ), - ), + ]), ], ), ); diff --git a/packages/complaints/lib/pages/inbox/complaints_inbox.dart b/packages/complaints/lib/pages/inbox/complaints_inbox.dart index ed04baa35..827f5a349 100644 --- a/packages/complaints/lib/pages/inbox/complaints_inbox.dart +++ b/packages/complaints/lib/pages/inbox/complaints_inbox.dart @@ -1,7 +1,9 @@ -import 'package:auto_route/annotations.dart'; import 'package:auto_route/auto_route.dart'; import 'package:complaints/router/complaints_router.gm.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/utils/app_logger.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:recase/recase.dart'; @@ -30,6 +32,7 @@ class ComplaintsInboxPageState extends LocalizedState { @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); final router = context.router; return Scaffold( @@ -38,7 +41,6 @@ class ComplaintsInboxPageState extends LocalizedState { final inboxItems = state.isFiltered ? state.filteredComplaints : state.complaints; - // TODO(ajil): Fix this scrollable component return Column( children: [ Expanded( @@ -52,14 +54,14 @@ class ComplaintsInboxPageState extends LocalizedState { SliverToBoxAdapter( child: Padding( padding: const EdgeInsets.only( - left: kPadding * 2, - bottom: kPadding, + left: spacer2 * 2, + bottom: spacer2, ), child: Text( localizations.translate( i18.complaints.inboxHeading, ), - style: theme.textTheme.displayMedium, + style: textTheme.headingXl, ), ), ), @@ -68,66 +70,46 @@ class ComplaintsInboxPageState extends LocalizedState { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - TextButton( - style: TextButton.styleFrom( - foregroundColor: theme.colorScheme.secondary, - padding: - const EdgeInsets.only(left: kPadding * 2), - ), - onPressed: () { - router.push(ComplaintsInboxSearchRoute()); - }, - child: Row( - children: [ - const Icon(Icons.search), - const SizedBox( - width: 5, - ), - Text(localizations.translate( - i18.complaints.searchCTA, - )), - ], + Padding( + padding: const EdgeInsets.only(left: spacer2*2), + child: Button( + type: ButtonType.tertiary, + size: ButtonSize.medium, + prefixIcon: Icons.search, + label: localizations.translate( + i18.complaints.searchCTA, + ), + onPressed: () { + router.push(ComplaintsInboxSearchRoute()); + }, ), ), - TextButton( - style: TextButton.styleFrom( - foregroundColor: theme.colorScheme.secondary, - padding: EdgeInsets.zero, - ), - onPressed: () { - router.push(ComplaintsInboxFilterRoute()); - }, - child: Row( - children: [ - const Icon(Icons.filter_list_alt), - const SizedBox( - width: 5, - ), - Text(localizations.translate( + Padding( + padding: EdgeInsets.zero, + child: Button( + type: ButtonType.tertiary, + size: ButtonSize.medium, + label: localizations.translate( i18.complaints.filterCTA, - )), - ], + ), + prefixIcon: Icons.filter_list_alt, + onPressed: () { + router.push(ComplaintsInboxFilterRoute()); + }, ), ), - TextButton( - style: TextButton.styleFrom( - foregroundColor: theme.colorScheme.secondary, - padding: - const EdgeInsets.only(right: kPadding * 2), - ), - onPressed: () { - router.push(ComplaintsInboxSortRoute()); - }, - child: Row( - children: [ - const Icon(Icons.segment), - const SizedBox( - width: 5, - ), - Text(localizations.translate( - i18.complaints.sortCTA, - )), - ], + Padding( + padding: const EdgeInsets.only(right: spacer2*2), + child: Button( + type: ButtonType.tertiary, + size: ButtonSize.medium, + label: localizations.translate( + i18.complaints.sortCTA, + ), + prefixIcon: Icons.segment, + onPressed: () { + router.push(ComplaintsInboxSortRoute()); + }, ), ), ], @@ -165,43 +147,42 @@ class ComplaintsInboxPageState extends LocalizedState { ], ), ), - SizedBox( - child: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: DigitElevatedButton( - onPressed: () async { - var loggedInUserUuid = - ComplaintsSingleton().loggedInUserUuid; - final bloc = context.read(); - - await router.push( - ComplaintsRegistrationWrapperRoute(), - ); + DigitCard( + cardType: CardType.primary, + margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), + padding: const EdgeInsets.all(spacer2), + children: [ + Button( + label: localizations.translate( + i18.complaints.fileComplaintAction, + ), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () async { + var loggedInUserUuid = + ComplaintsSingleton().loggedInUserUuid; + final bloc = context.read(); - try { - bloc.add( - ComplaintInboxLoadComplaintsEvent( - createdByUserId: loggedInUserUuid, - ), - ); - } catch (error) { - AppLogger.instance.error( - title: 'Error', - message: 'Error while loading complaints', + await router.push( + ComplaintsRegistrationWrapperRoute(), ); - } - }, - child: Center( - child: Text( - localizations.translate( - i18.complaints.fileComplaintAction, - ), - ), + + try { + bloc.add( + ComplaintInboxLoadComplaintsEvent( + createdByUserId: loggedInUserUuid, + ), + ); + } catch (error) { + AppLogger.instance.error( + title: 'Error', + message: 'Error while loading complaints', + ); + } + }, ), - ), - ), - ), + ]), ], ); }, @@ -223,163 +204,160 @@ class _ComplaintsInboxItem extends StatelessWidget { @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); - return DigitCard( - child: Column( - children: [ - Padding( - padding: const EdgeInsets.only(top: kPadding, bottom: kPadding), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 2, - child: Text( - localizations.translate(i18.complaints.inboxNumberLabel), - style: theme.textTheme.headlineSmall, - ), - ), - Expanded( - flex: 3, - child: Text( - item.serviceRequestId ?? - "${localizations.translate(i18.complaints.inboxNotGeneratedLabel)}\n${localizations.translate(i18.complaints.inboxSyncRequiredLabel)}", - style: TextStyle( - color: item.serviceRequestId != null - ? theme.colorScheme.secondary - : const DigitColors().woodsmokeBlack, - ), - ), - ), - ], + return DigitCard(cardType: CardType.primary, children: [ + Padding( + padding: const EdgeInsets.only(top: spacer2, bottom: spacer2), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 2, + child: Text( + localizations.translate(i18.complaints.inboxNumberLabel), + style: textTheme.headingS + ), ), - ), - Padding( - padding: const EdgeInsets.only(top: kPadding, bottom: kPadding), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 2, - child: Text( - localizations.translate(i18.complaints.inboxTypeLabel), - style: theme.textTheme.headlineSmall, - ), + Expanded( + flex: 3, + child: Text( + item.serviceRequestId ?? + "${localizations.translate(i18.complaints.inboxNotGeneratedLabel)}\n${localizations.translate(i18.complaints.inboxSyncRequiredLabel)}", + style: TextStyle( + color: item.serviceRequestId != null + ? theme.colorScheme.secondary + : theme.colorTheme.text.primary, ), - Expanded( - flex: 3, - child: Text( - localizations.translate( - item.serviceCode.snakeCase.toUpperCase().trim(), - ), - ), - ), - ], + ), ), - ), - Padding( - padding: const EdgeInsets.only(top: kPadding, bottom: kPadding), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Expanded( - flex: 2, - child: Text( - localizations.translate(i18.complaints.inboxDateLabel), - style: theme.textTheme.headlineSmall, - ), - ), - Expanded( - flex: 3, - child: Text( - item.auditDetails?.createdTime.toDateTime - .getFormattedDate() ?? - "", - ), - ), - ], + ], + ), + ), + Padding( + padding: const EdgeInsets.only(top: spacer2, bottom: spacer2), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 2, + child: Text( + localizations.translate(i18.complaints.inboxTypeLabel), + style: theme.textTheme.headlineSmall, + ), ), - ), - Padding( - padding: const EdgeInsets.only(top: kPadding, bottom: kPadding), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Expanded( - flex: 2, - child: Text( - localizations.translate(i18.complaints.inboxAreaLabel), - style: theme.textTheme.headlineSmall, - ), + Expanded( + flex: 3, + child: Text( + localizations.translate( + item.serviceCode.snakeCase.toUpperCase().trim(), ), - Expanded( - flex: 3, - child: Text( - item.address.locality?.name ?? "", - ), + ), + ), + ], + ), + ), + Padding( + padding: const EdgeInsets.only(top: spacer2, bottom: spacer2), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Expanded( + flex: 2, + child: Text( + localizations.translate(i18.complaints.inboxDateLabel), + style: theme.textTheme.headlineSmall, + ), + ), + Expanded( + flex: 3, + child: Text( + item.auditDetails?.createdTime.toDateTime + .getFormattedDate() ?? + "", + ), + ), + ], + ), + ), + Padding( + padding: const EdgeInsets.only(top: spacer2, bottom: spacer2), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Expanded( + flex: 2, + child: Text( + localizations.translate(i18.complaints.inboxAreaLabel), + style: theme.textTheme.headlineSmall, + ), + ), + Expanded( + flex: 3, + child: Text( + item.address.locality?.name ?? "", + ), + ), + ], + ), + ), + Padding( + padding: const EdgeInsets.only(top: spacer2, bottom: 8), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Expanded( + flex: 2, + child: Text( + localizations.translate(i18.complaints.inboxStatusLabel), + style: theme.textTheme.headlineSmall, + ), + ), + Expanded( + flex: 3, + child: Text( + localizations.translate( + "COMPLAINTS_STATUS_${item.applicationStatus.name.snakeCase.toUpperCase()}", ), - ], + ), ), - ), - Padding( - padding: const EdgeInsets.only(top: kPadding, bottom: 8), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Expanded( - flex: 2, - child: Text( - localizations.translate(i18.complaints.inboxStatusLabel), - style: theme.textTheme.headlineSmall, + ], + ), + ), + Padding( + padding: const EdgeInsets.only(top: spacer2 * 2), + child: Row( + children: [ + Expanded( + flex: 1, + child: OutlinedButton( + onPressed: () { + context.router.push(ComplaintsDetailsViewRoute( + complaint: item, + )); + }, + style: OutlinedButton.styleFrom( + side: BorderSide( + width: 1.0, + color: theme.colorScheme.secondary, ), - ), - Expanded( - flex: 3, - child: Text( - localizations.translate( - "COMPLAINTS_STATUS_${item.applicationStatus.name.snakeCase.toUpperCase()}", - ), + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.zero, ), ), - ], - ), - ), - Padding( - padding: const EdgeInsets.only(top: kPadding * 2), - child: Row( - children: [ - Expanded( - flex: 1, - child: OutlinedButton( - onPressed: () { - context.router.push(ComplaintsDetailsViewRoute( - complaint: item, - )); - }, - style: OutlinedButton.styleFrom( - side: BorderSide( - width: 1.0, - color: theme.colorScheme.secondary, - ), - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.zero, - ), - ), - child: Text( - localizations.translate(i18.searchBeneficiary.iconLabel), - style: DigitTheme - .instance.mobileTheme.textTheme.headlineSmall - ?.apply( - color: theme.colorScheme.secondary, - ), - ), + child: Text( + localizations.translate(i18.searchBeneficiary.iconLabel), + style: DigitTheme + .instance.mobileTheme.textTheme.headlineSmall + ?.apply( + color: theme.colorScheme.secondary, ), ), - ], + ), ), - ), - ], + ], + ), ), - ); + ]); } } diff --git a/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart b/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart index 64afb6256..7336c5333 100644 --- a/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart +++ b/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart @@ -1,14 +1,11 @@ import 'dart:collection'; - - import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/atoms/digit_checkbox.dart'; - import 'package:digit_data_model/models/entities/pgr_application_status.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:group_radio_button/group_radio_button.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:recase/recase.dart'; @@ -93,7 +90,7 @@ class ComplaintsInboxFilterPageState ], ), Padding( - padding: const EdgeInsets.only(left: 16), + padding: const EdgeInsets.only(left: spacer4), child: Row( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, @@ -137,36 +134,34 @@ class ComplaintsInboxFilterPageState enableFixedButton: true, footer: SizedBox( child: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: - const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: Row( + cardType: CardType.primary, + margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), + padding: const EdgeInsets.all(spacer2), + children: [Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded( flex: 1, - child: DigitOutLineButton( + child: Button( + type: ButtonType.secondary, + size: ButtonSize.large, label: localizations.translate( i18.complaints.complaintsFilterClearAll, ), onPressed: () { clearFilters(formGroup); }, - buttonStyle: OutlinedButton.styleFrom( - shape: const BeveledRectangleBorder(), - padding: const EdgeInsets.all(14), - side: BorderSide( - width: 1.0, - color: theme.colorScheme.secondary, - ), - ), ), ), const SizedBox(width: 10), Expanded( flex: 1, - child: DigitElevatedButton( + child: Button( + label: localizations + .translate(i18.complaints.filterCTA), + type: ButtonType.primary, + size: ButtonSize.large, onPressed: () { if (!formGroup.valid) return; @@ -199,21 +194,15 @@ class ComplaintsInboxFilterPageState context.router.pop(); }, - child: Center( - child: Text( - localizations - .translate(i18.complaints.filterCTA), - ), - ), ), ), ], - ), + ),] ), ), children: [ Padding( - padding: const EdgeInsets.all(16), + padding: const EdgeInsets.all(spacer4), child: Column( children: [ BlocBuilder( @@ -263,54 +252,76 @@ class ComplaintsInboxFilterPageState BlocBuilder( builder: (context, state) { - return RadioGroup.builder( - groupValue: formGroup - .control(_complaintAssignmentType) - .value ?? - "", - onChanged: (changedValue) { - setState(() { - formGroup - .control(_complaintAssignmentType) - .value = changedValue; - }); - }, - items: _complaintAssignmentTypes, - itemBuilder: (item) => RadioButtonBuilder( - localizations.translate(item.trim()), + return Align( + alignment: Alignment.topLeft, + child: RadioList( + radioButtons: _complaintAssignmentTypes + .asMap() + .entries + .map( + (item)=>RadioButtonModel( + code: item.value, + name: localizations.translate(item.value.trim()), + ) + ).toList(), + + groupValue: formGroup + .control(_complaintAssignmentType) + .value ?? + "", + onChanged: (changedValue) { + setState(() { + formGroup + .control(_complaintAssignmentType) + .value = changedValue.code; + }); + }, ), ); }, ), - DigitReactiveSearchDropdown( + LabeledField( label: localizations.translate( i18.complaints.complaintsTypeHeading, ), - form: formGroup, - menuItems: complaintTypes.toList(), - formControlName: _complaintType, - valueMapper: (value) { - return localizations.translate( - value - .toString() - .trim() - .snakeCase - .toUpperCase(), - ); - }, - emptyText: localizations - .translate(i18.common.noMatchFound), + child: DigitDropdown( + items: complaintTypes.toList() + .asMap() + .entries + .map( + (item) => DropdownItem( + name: localizations.translate( + item.value.toString() + .trim() + .snakeCase + .toUpperCase() + ), + code: item.value, + ) + ).toList(), + emptyItemText: localizations + .translate(i18.common.noMatchFound), + isSearchable: true, + onSelect: (value)=>formGroup.control(_complaintType).value=value.code, + ), ), - DigitReactiveSearchDropdown( + LabeledField( label: localizations .translate(i18.complaints.locality), - form: formGroup, - menuItems: locality.toList(), - formControlName: _complaintLocality, - valueMapper: (value) => localizations - .translate(value.toString().trim()), - emptyText: localizations - .translate(i18.common.noMatchFound), + child: DigitDropdown( + items: locality.toList() + .asMap() + .entries + .map((item)=> DropdownItem( + name: localizations + .translate(item.value.toString().trim()), + code: item.value, + ) + ).toList(), + emptyItemText: localizations + .translate(i18.common.noMatchFound), + onSelect: (value)=>formGroup.control(_complaintLocality).value=value.code, + ), ), if (uniqueStatuses.isNotEmpty) ...[ LabeledField( diff --git a/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart b/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart index 4482a62e9..1b26c06a4 100644 --- a/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart +++ b/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart @@ -1,15 +1,20 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/utils/validators/validator.dart' + as component_validator; +import 'package:digit_ui_components/widgets/atoms/input_wrapper.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; import '/blocs/complaints_inbox/complaints_inbox.dart'; + import '/utils/i18_key_constants.dart' as i18; import '/utils/utils.dart'; import '/widgets/localized.dart'; -import '../../utils/constants.dart'; +import 'package:flutter/services.dart'; @RoutePage() class ComplaintsInboxSearchPage extends LocalizedStatefulWidget { @@ -79,52 +84,44 @@ class ComplaintsInboxSearchPageState ), footer: SizedBox( child: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: - const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, + cardType: CardType.primary, + margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), + padding: const EdgeInsets.all(spacer2), children: [ - Expanded( - flex: 1, - child: DigitElevatedButton( - onPressed: () { - formGroup.markAllAsTouched(); + Button( + mainAxisSize: MainAxisSize.max, + type: ButtonType.primary, + size: ButtonSize.large, + label: localizations + .translate(i18.complaints.searchCTA), + onPressed: () { + formGroup.markAllAsTouched(); - if (!formGroup.valid) return; + if (!formGroup.valid) return; - final complaintNumberValue = - formGroup.control(_complaintNumber).value; - final mobileNumberValue = - formGroup.control(_mobileNumber).value; + final complaintNumberValue = + formGroup.control(_complaintNumber).value; + final mobileNumberValue = + formGroup.control(_mobileNumber).value; - bloc.add( - ComplaintInboxSearchComplaintsEvent( - mobileNumber: mobileNumberValue == "" - ? null - : mobileNumberValue, - complaintNumber: complaintNumberValue == "" - ? null - : complaintNumberValue, - createdByUserId: - ComplaintsSingleton().loggedInUserUuid, - ), - ); - - context.router.pop(); - }, - child: Center( - child: Text( - localizations - .translate(i18.complaints.searchCTA), + bloc.add( + ComplaintInboxSearchComplaintsEvent( + mobileNumber: mobileNumberValue == "" + ? null + : mobileNumberValue, + complaintNumber: + complaintNumberValue == "" + ? null + : complaintNumberValue, + createdByUserId: ComplaintsSingleton() + .loggedInUserUuid, ), - ), - ), + ); + + context.router.pop(); + }, ), - ], - ), - ), + ]), ), children: [ Column( @@ -132,33 +129,52 @@ class ComplaintsInboxSearchPageState BlocBuilder( builder: (context, state) { return Padding( - padding: const EdgeInsets.all(kPadding * 2), + padding: const EdgeInsets.all(spacer2 * 2), child: Column( children: [ - DigitTextFormField( - formControlName: _complaintNumber, - label: localizations.translate( - i18.complaints.inboxNumberLabel, - ), - maxLength: 65, - ), - DigitTextFormField( - formControlName: _mobileNumber, - label: localizations.translate( - i18.common.coreCommonMobileNumber, - ), - maxLength: 10, - keyboardType: TextInputType.number, - inputFormatters: [ - FilteringTextInputFormatter.digitsOnly, - ], - validationMessages: { - 'mobileNumber': (object) => - localizations.translate(i18 - .individualDetails - .mobileNumberInvalidFormatValidationMessage), - }, - ), + ReactiveWrapperField( + formControlName: _complaintNumber, + builder: (context) { + return LabeledField( + label: localizations.translate( + i18.complaints.inboxNumberLabel, + ), + child: DigitTextFormInput( + onChange: (value){ + formGroup.control(_complaintNumber).value = value; + }, + charCount: true, + maxLength: 65, + ), + ); + }), + ReactiveWrapperField( + formControlName: _mobileNumber, + showErrors: (control) => control.invalid && control.touched, + validationMessages: { + 'mobileNumber': (object) => + localizations.translate(i18 + .individualDetails + .mobileNumberInvalidFormatValidationMessage), + }, + builder: (field) { + return LabeledField( + label: localizations.translate( + i18.common.coreCommonMobileNumber, + ), + child: DigitTextFormInput( + charCount: true, + keyboardType: TextInputType.number, + inputFormatters: [ + FilteringTextInputFormatter + .digitsOnly, + ], + onChange: (value)=>formGroup.control(_mobileNumber).value=value, + errorMessage: field.errorText, + maxLength: 10, + ), + ); + }), ], ), ); @@ -182,7 +198,7 @@ class ComplaintsInboxSearchPageState value: state.searchKeys?.complaintNumber, ), _mobileNumber: FormControl( - validators: [Validators.pattern(Constants.mobileNumberRegExp)], + validators: [CustomValidator.validMobileNumber], value: state.searchKeys?.complainantMobileNumber, ), }); diff --git a/packages/complaints/lib/pages/inbox/complaints_inbox_sort.dart b/packages/complaints/lib/pages/inbox/complaints_inbox_sort.dart index 8a512e36e..a193b2239 100644 --- a/packages/complaints/lib/pages/inbox/complaints_inbox_sort.dart +++ b/packages/complaints/lib/pages/inbox/complaints_inbox_sort.dart @@ -1,9 +1,10 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:group_radio_button/group_radio_button.dart'; import 'package:reactive_forms/reactive_forms.dart'; import '/blocs/complaints_inbox/complaints_inbox.dart'; @@ -67,7 +68,7 @@ class ComplaintsInboxSortPageState ], ), Padding( - padding: const EdgeInsets.only(left: 20), + padding: const EdgeInsets.only(left: spacer5), child: Row( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, @@ -83,45 +84,34 @@ class ComplaintsInboxSortPageState ), ], ), - footer: SizedBox( - child: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Expanded( - flex: 1, - child: DigitElevatedButton( - onPressed: () { - formGroup.markAllAsTouched(); + footer: DigitCard( + cardType: CardType.primary, + margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), + padding: const EdgeInsets.all(spacer2), + children: [Button( + type: ButtonType.primary, + size: ButtonSize.large, + label: localizations + .translate(i18.complaints.sortCTA), + mainAxisSize: MainAxisSize.max, + onPressed: () { + formGroup.markAllAsTouched(); - var sortOrder = - formGroup.control(_sortOrder).value; + var sortOrder = + formGroup.control(_sortOrder).value; - if (!formGroup.valid || sortOrder == null) { - return; - } + if (!formGroup.valid || sortOrder == null) { + return; + } - bloc.add( - ComplaintInboxSortComplaintsEvent( - sortOrder, - ), - ); - router.pop(); - }, - child: Center( - child: Text( - localizations - .translate(i18.complaints.sortCTA), - ), - ), - ), + bloc.add( + ComplaintInboxSortComplaintsEvent( + sortOrder, ), - ], - ), - ), + ); + router.pop(); + }, + ),] ), children: [ Column( @@ -131,22 +121,24 @@ class ComplaintsInboxSortPageState BlocBuilder( builder: (context, state) { - // TODO(neel): Use Reactive components if possible - return RadioGroup.builder( + return RadioList( + radioButtons: sortOrders + .asMap() + .entries + .map( + (item)=>RadioButtonModel( + code: item.value, + name: localizations.translate(item.value.trim()), + ) + ).toList(), groupValue: formGroup.control(_sortOrder).value ?? "", onChanged: (changedValue) { - setState(() { - formGroup.control(_sortOrder).value = - changedValue; - }); + formGroup.control(_sortOrder).value = + changedValue.code; }, - items: sortOrders, - itemBuilder: (item) => RadioButtonBuilder( - localizations.translate(item.trim()), - ), ); }, ), diff --git a/packages/complaints/lib/pages/registration/complaint_type.dart b/packages/complaints/lib/pages/registration/complaint_type.dart index f20cc19f1..f4ac2fcaf 100644 --- a/packages/complaints/lib/pages/registration/complaint_type.dart +++ b/packages/complaints/lib/pages/registration/complaint_type.dart @@ -2,7 +2,11 @@ import 'package:auto_route/auto_route.dart'; import 'package:complaints/complaints.dart'; import 'package:complaints/router/complaints_router.gm.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/enum/app_enums.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:group_radio_button/group_radio_button.dart'; @@ -10,12 +14,10 @@ import 'package:reactive_forms/reactive_forms.dart'; import 'package:recase/recase.dart'; - import '/utils/i18_key_constants.dart' as i18; import '/widgets/header/back_navigation_help_header.dart'; import '/widgets/localized.dart'; - @RoutePage() class ComplaintTypePage extends LocalizedStatefulWidget { const ComplaintTypePage({ @@ -57,145 +59,137 @@ class ComplaintTypePageState extends LocalizedState { ]), enableFixedButton: true, footer: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: DigitElevatedButton( - onPressed: () async { - var complaintType = form.control(_complaintType).value; - var otherComplaintTypeValue = - form.control(_otherComplaintType).value; - - if (complaintType == "Other") { - form.control(_otherComplaintType).setValidators( - [Validators.required], - autoValidate: true, - ); - } else { - form.control(_otherComplaintType).setValidators( - [], - autoValidate: true, - ); - } - - setState(() { - form.markAllAsTouched(); - }); - - if (!form.valid) return; - - state.whenOrNull( - create: ( - - loading, - complaintType, - _, - addressModel, - complaintsDetailsModel, + cardType: CardType.primary, + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [ + Button( + mainAxisSize: MainAxisSize.max, + label: localizations.translate(i18.complaints.actionLabel), + type: ButtonType.primary, + size: ButtonSize.large, + onPressed: () async { + var complaintType = form.control(_complaintType).value; + var otherComplaintTypeValue = + form.control(_otherComplaintType).value; + + if (complaintType == "Other") { + form.control(_otherComplaintType).setValidators( + [Validators.required], + autoValidate: true, + ); + } else { + form.control(_otherComplaintType).setValidators( + [], + autoValidate: true, + ); + } + + setState(() { + form.markAllAsTouched(); + }); + + if (!form.valid) return; + + state.whenOrNull( + create: ( + loading, + complaintType, + _, + addressModel, + complaintsDetailsModel, ) { - - bloc.add( - ComplaintsRegistrationEvent.saveComplaintType( - complaintType: form.control(_complaintType).value, - otherComplaintDescription: otherComplaintTypeValue, - ), + bloc.add( + ComplaintsRegistrationEvent.saveComplaintType( + complaintType: + form.control(_complaintType).value, + otherComplaintDescription: + otherComplaintTypeValue, + ), + ); + }, ); - }, - ); - router.push(ComplaintsLocationRoute()); - }, - child: Center( - child: Text( - localizations.translate(i18.complaints.actionLabel), + router.push(ComplaintsLocationRoute()); + }, ), - ), - ), - ), + ]), slivers: [ SliverToBoxAdapter( - child: DigitCard( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: const EdgeInsets.only(bottom: kPadding), - child: Text( - localizations.translate( - i18.complaints.complaintsTypeHeading, - ), - style: theme.textTheme.displayMedium, + child: DigitCard(cardType: CardType.primary, children: [ + Padding( + padding: const EdgeInsets.only(bottom: spacer2), + child: Text( + localizations.translate( + i18.complaints.complaintsTypeHeading, ), + style: theme.textTheme.displayMedium, ), - LabeledField( - label: localizations.translate( - i18.complaints.complaintsTypeLabel, - ), - child: RadioGroup.builder( - - groupValue: - form.control(_complaintType).value ?? "", - - onChanged: (changedValue) { - if (form.control(_complaintType).disabled) return; - - setState(() { - - form.control(_complaintType).value = - changedValue; - }); - }, - textStyle: TextStyle( - color: form.control(_complaintType).disabled - ? theme.colorScheme.shadow - : theme.colorScheme.onBackground, - - ), - items: ComplaintsSingleton().complaintTypes ?? [], - itemBuilder: (item) => RadioButtonBuilder( - localizations.translate( - item.snakeCase.toUpperCase().trim(), + ), + LabeledField( + label: localizations.translate( + i18.complaints.complaintsTypeLabel, + ), + child: RadioList( + radioButtons: (ComplaintsSingleton().complaintTypes?.isNotEmpty ?? false) + ? ComplaintsSingleton().complaintTypes! + .map( + (item) => RadioButtonModel( + code: item, + name: localizations.translate( + item.replaceAll('_',' ').toUpperCase().trim(), ), ), - ), + ).toList(): + [], + groupValue: + form.control(_complaintType).value ?? "", + onChanged: (changedValue) { + if (form.control(_complaintType).disabled) return; + form.control(_complaintType).value = + changedValue.code; + }, ), - if (form.control(_complaintType).value == "Other") ...[ - DigitTextFormField( + ), + if (form.control(_complaintType).value == "Other") ...[ + ReactiveWrapperField( formControlName: _otherComplaintType, - label: "", - maxLength: 100, validationMessages: { 'required': (object) => localizations.translate( - i18.complaints.validationRequiredError, - ), - + i18.complaints.validationRequiredError, + ), }, - ), - ], - if (form.touched && - form.control(_complaintType).invalid) ...[ - Align( - alignment: Alignment.topLeft, - child: Padding( - padding: const EdgeInsets.only( - top: 5, - bottom: 5, + showErrors: (control)=>control.invalid && control.touched, + builder: (field) { + return DigitTextFormInput( + charCount: true, + errorMessage: field.errorText, + onChange: (value) => form.control(_otherComplaintType).value=value, + ); + }), + ], + if (form.touched && + form.control(_complaintType).invalid) ...[ + Align( + alignment: Alignment.topLeft, + child: Padding( + padding: const EdgeInsets.only( + top: spacer1, + bottom: spacer1, + ), + child: Text( + localizations.translate( + i18.complaints.validationRadioRequiredError, ), - child: Text( - localizations.translate( - i18.complaints.validationRadioRequiredError, - ), - style: TextStyle( - color: DigitTheme.instance.colors.lavaRed, - ), + style: TextStyle( + color: theme.colorTheme.alert.error, ), ), ), - ], - const SizedBox(height: 16), + ), ], - ), - ), + const SizedBox(height: spacer4), + ]), ), ], ); diff --git a/packages/complaints/lib/pages/registration/complaints_details.dart b/packages/complaints/lib/pages/registration/complaints_details.dart index 7f08bdf02..31c3030d3 100644 --- a/packages/complaints/lib/pages/registration/complaints_details.dart +++ b/packages/complaints/lib/pages/registration/complaints_details.dart @@ -1,7 +1,13 @@ import 'package:auto_route/auto_route.dart'; + import 'package:complaints/router/complaints_router.gm.dart'; -import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/enum/app_enums.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; +import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -10,11 +16,11 @@ import 'package:reactive_forms/reactive_forms.dart'; import '../../../blocs/complaints_registration/complaints_registration.dart'; import '../../../models/complaints.dart'; + import '../../../utils/i18_key_constants.dart' as i18; import '../../../utils/utils.dart'; import '../../../widgets/header/back_navigation_help_header.dart'; import '../../../widgets/localized.dart'; -import '../../utils/constants.dart'; @RoutePage() class ComplaintsDetailsPage extends LocalizedStatefulWidget { @@ -58,7 +64,7 @@ class ComplaintsDetailsPageState extends LocalizedState { ), builder: (_, form, __) => BlocListener( listener: (context, state) { - context.navigateTo(const ComplaintsInboxWrapperRoute()); + context.navigateTo(ComplaintsInboxWrapperRoute()); }, child: BlocConsumer( @@ -82,345 +88,399 @@ class ComplaintsDetailsPageState extends LocalizedState { ), footer: SizedBox( child: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: - const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: DigitElevatedButton( - onPressed: () async { - setState(() { - form.markAllAsTouched(); - }); - - if (form.control(_complaintDetailsForm).disabled) { - router.parent()?.maybePop(); - } + cardType: CardType.primary, + margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), + padding: const EdgeInsets.all(spacer2), + children: [ + Button( + label: form.control(_complaintDetailsForm).disabled + ? localizations + .translate(i18.complaints.backToInbox) + : localizations + .translate(i18.common.coreCommonSubmit), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () async { + setState(() { + form.markAllAsTouched(); + }); - if (!form.valid) { - return; - } + if (form.control(_complaintDetailsForm).disabled) { + router.parent()?.maybePop(); + } - FocusManager.instance.primaryFocus?.unfocus(); + if (!form.valid) { + return; + } - final dateOfComplaint = - form.control(_dateOfComplaint).value as DateTime; + FocusManager.instance.primaryFocus?.unfocus(); - final complaintRaisedFor = - form.control(_complaintRaisedFor).value as String; + final dateOfComplaint = form + .control(_dateOfComplaint) + .value as DateTime; - final complainantName = - form.control(_complainantName).value as String; + final complaintRaisedFor = form + .control(_complaintRaisedFor) + .value as String; - final complainantContactNumber = form - .control(_complainantContactNumber) - .value as String; + final administrativeArea = form + .control(_administrativeArea) + .value as String; - final supervisorName = - form.control(_supervisorName).value as String?; + final complainantName = + form.control(_complainantName).value as String; - final supervisorContactNumber = form - .control(_supervisorContactNumber) - .value as String?; + final complainantContactNumber = form + .control(_complainantContactNumber) + .value as String; - final complaintDescription = - form.control(_complaintDescription).value as String; + final supervisorName = + form.control(_supervisorName).value as String?; - state.whenOrNull( - create: ( - loading, - complaintType, - _, - addressModel, - complaintsDetailsModel, - ) { - bloc.add( - ComplaintsRegistrationEvent.saveComplaintDetails( - boundaryModel: ComplaintsSingleton().boundary, - complaintsDetailsModel: ComplaintsDetailsModel( - administrativeArea: ComplaintsSingleton() - .boundary - .code - .toString(), - dateOfComplaint: dateOfComplaint, - complaintRaisedFor: complaintRaisedFor, - complainantName: complainantName, - complainantContactNumber: - complainantContactNumber, - supervisorName: supervisorName, - supervisorContactNumber: - supervisorContactNumber, - complaintDescription: complaintDescription, - ), - ), - ); - }, - ); + final supervisorContactNumber = form + .control(_supervisorContactNumber) + .value as String?; - final userId = ComplaintsSingleton().loggedInUserUuid; + final complaintDescription = form + .control(_complaintDescription) + .value as String; - final submit = await DigitDialog.show( - context, - options: DigitDialogOptions( - titleText: localizations.translate( - i18.complaints.dialogTitle, - ), - contentText: localizations.translate( - i18.complaints.dialogContent, - ), - primaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonSubmit, - ), - action: (context) { - Navigator.of( - context, - rootNavigator: true, - ).pop(true); - }, - ), - secondaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonCancel, - ), - action: (context) { - Navigator.of( - context, - rootNavigator: true, - ).pop(false); + state.whenOrNull( + create: ( + loading, + complaintType, + _, + addressModel, + complaintsDetailsModel, + ) { + bloc.add( + ComplaintsRegistrationEvent + .saveComplaintDetails( + boundaryModel: + ComplaintsSingleton().boundary, + complaintsDetailsModel: + ComplaintsDetailsModel( + administrativeArea: ComplaintsSingleton() + .boundary + .code + .toString(), + dateOfComplaint: dateOfComplaint, + complaintRaisedFor: complaintRaisedFor, + complainantName: complainantName, + complainantContactNumber: + complainantContactNumber, + supervisorName: supervisorName, + supervisorContactNumber: + supervisorContactNumber, + complaintDescription: + complaintDescription, + ), + ), + ); }, - ), - ), - ); + ); - if (submit != true) return; + final userId = + ComplaintsSingleton().loggedInUserUuid; - bloc.add( - ComplaintsRegistrationSubmitComplaintEvent( - userId: userId, - ), - ); - }, - child: Center( - child: Text( - form.control(_complaintDetailsForm).disabled - ? localizations - .translate(i18.complaints.backToInbox) - : localizations - .translate(i18.common.coreCommonSubmit), + showPopup( + context: context, + title: localizations.translate( + i18.complaints.dialogTitle, + ), + type: PopUpType.simple, + description: localizations.translate( + i18.complaints.dialogContent, + ), + actions: [ + Button( + label: localizations.translate( + i18.common.coreCommonSubmit, + ), + onPressed: () { + bloc.add( + ComplaintsRegistrationSubmitComplaintEvent( + userId: userId, + ), + ); + Navigator.of(context, rootNavigator: true) + .pop(); + }, + type: ButtonType.primary, + size: ButtonSize.large, + ), + Button( + label: localizations.translate( + i18.common.coreCommonCancel, + ), + onPressed: () { + Navigator.of( + context, + rootNavigator: true, + ).pop(); + }, + type: ButtonType.secondary, + size: ButtonSize.large), + ]); + }, ), - ), - ), - ), + ]), ), children: [ - DigitCard( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - localizations.translate( - i18.complaints.complaintsDetailsLabel, - ), - style: theme.textTheme.displayMedium, + DigitCard(cardType: CardType.primary, children: [ + Text( + localizations.translate( + i18.complaints.complaintsDetailsLabel, + ), + style: theme.textTheme.displayMedium, + ), + LabeledField( + label: localizations.translate( + i18.complaints.dateOfComplaint, + ), + child: DigitDateFormInput( + isRequired: true, + readOnly: true, + initialValue: + form.control(_dateOfComplaint).value?.toString(), + initialDate: DateTime.now(), + confirmText: localizations.translate( + i18.common.coreCommonOk, ), - Column(children: [ - DigitDateFormPicker( - label: localizations.translate( - i18.complaints.dateOfComplaint, - ), - formControlName: _dateOfComplaint, - isRequired: true, - isEnabled: false, - initialDate: DateTime.now(), - confirmText: localizations.translate( - i18.common.coreCommonOk, - ), - cancelText: localizations.translate( - i18.common.coreCommonCancel, - ), - ), - DigitTextFormField( - formControlName: _administrativeArea, - label: localizations.translate( - i18.householdLocation.administrationAreaFormLabel, - ), - isRequired: true, - readOnly: true, - ), - LabeledField( - label: "${localizations.translate( - i18.complaints.complainantTypeQuestion, - )} *", - child: Column( - children: [ - RadioGroup.builder( - groupValue: - form.control(_complaintRaisedFor).value ?? - "", - onChanged: (changedValue) { - if (form - .control(_complaintRaisedFor) - .disabled) return; + cancelText: localizations.translate( + i18.common.coreCommonCancel, + ), + ), + ), + LabeledField( + label: localizations.translate( + i18.householdLocation.administrationAreaFormLabel, + ), + child: DigitTextFormInput( + isRequired: true, + readOnly: true, + initialValue: form.control(_administrativeArea).value, + ), + ), + LabeledField( + label: "${localizations.translate( + i18.complaints.complainantTypeQuestion, + )} *", + child: Column( + children: [ + RadioGroup.builder( + groupValue: + form.control(_complaintRaisedFor).value ?? "", + onChanged: (changedValue) { + if (form.control(_complaintRaisedFor).disabled) + return; - if (changedValue == - i18.complaints.raisedForAnotherUser) { - form.control(_complainantName).value = ""; - form - .control(_complainantContactNumber) - .value = ""; - } else { - form.control(_complainantName).value = - ComplaintsSingleton().userName; - form - .control(_complainantContactNumber) - .value = - ComplaintsSingleton() - .userMobileNumber; - } + if (changedValue == + i18.complaints.raisedForAnotherUser) { + form.control(_complainantName).value = ""; + form.control(_complainantContactNumber).value = + ""; + } else { + form.control(_complainantName).value = + ComplaintsSingleton().userName; + form.control(_complainantContactNumber).value = + ComplaintsSingleton().userMobileNumber; + } - setState(() { - form.control(_complaintRaisedFor).value = - changedValue; - }); - }, - textStyle: TextStyle( - color: form - .control(_complaintRaisedFor) - .disabled - ? theme.colorScheme.shadow - : theme.colorScheme.onBackground, - ), - items: complainantRaisedFor, - itemBuilder: (item) => RadioButtonBuilder( - localizations.translate(item.trim()), - ), - ), - if (form.touched && - form - .control(_complaintRaisedFor) - .invalid) ...[ - Align( - alignment: Alignment.topLeft, - child: Padding( - padding: const EdgeInsets.only( - top: 5, - bottom: 5, - ), - child: Text( - localizations.translate(i18.complaints - .validationRadioRequiredError), - style: TextStyle( - color: DigitTheme - .instance.colors.lavaRed, - ), - ), - ), - ), - ], - ], + setState(() { + form.control(_complaintRaisedFor).value = + changedValue; + }); + }, + textStyle: TextStyle( + color: form.control(_complaintRaisedFor).disabled + ? theme.colorScheme.shadow + : theme.colorScheme.onBackground, + ), + items: complainantRaisedFor, + itemBuilder: (item) => RadioButtonBuilder( + localizations.translate(item.trim()), ), ), - Column( - children: [ - DigitTextFormField( - formControlName: _complainantName, - label: localizations.translate( - i18.complaints.complainantName, + if (form.touched && + form.control(_complaintRaisedFor).invalid) ...[ + Align( + alignment: Alignment.topLeft, + child: Padding( + padding: const EdgeInsets.only( + top: 5, + bottom: 5, ), - readOnly: isRaisedForSelf, - isRequired: true, - validationMessages: { - 'required': (object) => - localizations.translate(i18 - .complaints.validationRequiredError), - 'maxLength': (object) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', '64'), - }, - ), - DigitTextFormField( - formControlName: _complainantContactNumber, - label: localizations.translate( - i18.complaints.complainantContactNumber, + child: Text( + localizations.translate(i18 + .complaints.validationRadioRequiredError), + style: TextStyle( + color: theme.colorTheme.alert.error, + ), ), - readOnly: isRaisedForSelf, - isRequired: true, - keyboardType: TextInputType.number, - inputFormatters: [ - FilteringTextInputFormatter.digitsOnly, - ], - validationMessages: { - 'mobileNumber': (object) => - localizations.translate(i18 - .individualDetails - .mobileNumberInvalidFormatValidationMessage), - 'required': (object) => - localizations.translate(i18 - .complaints.validationRequiredError), - 'minLength': (object) => - localizations.translate(i18 - .complaints.validationMinLengthError), - 'maxLength': (object) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', '10'), - }, ), - ], - ), - DigitTextFormField( - formControlName: _supervisorName, - label: localizations.translate( - i18.complaints.supervisorName, ), + ], + ], + ), + ), + Column( + children: [ + ReactiveWrapperField( + formControlName: _complainantName, + showErrors: (control)=>control.invalid, validationMessages: { + 'required': (object) => localizations.translate( + i18.complaints.validationRequiredError), 'maxLength': (object) => localizations .translate(i18.common.maxCharsRequired) .replaceAll('{}', '64'), }, - ), - DigitTextFormField( - formControlName: _supervisorContactNumber, - label: localizations.translate( - i18.complaints.supervisorContactNumber, - ), - keyboardType: TextInputType.number, - inputFormatters: [ - FilteringTextInputFormatter.digitsOnly, - ], + builder: (field) { + return ReactiveWrapperField( + formControlName: _complainantName, + validationMessages: { + 'required': (object) => + localizations.translate(i18.complaints + .validationRequiredError), + 'maxLength': (object) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', '64'), + }, + builder: (field) { + return LabeledField( + label: localizations.translate( + i18.complaints.complainantName, + ), + child: DigitTextFormInput( + readOnly: (form.control(_complainantName).value==null || + form.control(_complainantName).value.isEmpty())? + false:true, + initialValue: form.control(_complainantName).value, + isRequired: true, + errorMessage: field.errorText, + onChange: (value) => form + .control(_complainantName) + .value = value, + ), + ); + }); + }), + ReactiveWrapperField( + formControlName: _complainantContactNumber, + showErrors: (control)=>control.invalid, validationMessages: { 'mobileNumber': (object) => - localizations.translate( - i18.individualDetails - .mobileNumberInvalidFormatValidationMessage, - ), + localizations.translate(i18.individualDetails + .mobileNumberInvalidFormatValidationMessage), + 'required': (object) => localizations.translate( + i18.complaints.validationRequiredError), 'minLength': (object) => localizations.translate( i18.complaints.validationMinLengthError), 'maxLength': (object) => localizations .translate(i18.common.maxCharsRequired) .replaceAll('{}', '10'), }, - ), - DigitTextFormField( - formControlName: _complaintDescription, + builder: (field) { + return LabeledField( + label: localizations.translate( + i18.complaints.complainantContactNumber, + ), + child: DigitTextFormInput( + readOnly: (form.control(_complainantContactNumber).value==null || + form.control(_complainantContactNumber).value.isEmpty())? + false:true, + initialValue: form.control(_complainantContactNumber).value, + isRequired: true, + keyboardType: TextInputType.number, + inputFormatters: [ + FilteringTextInputFormatter.digitsOnly, + ], + errorMessage: field.errorText, + onChange: (value) => form + .control(_complainantContactNumber) + .value = value, + ), + ); + }), + ], + ), + ReactiveWrapperField( + formControlName: _supervisorName, + validationMessages: { + 'maxLength': (object) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', '64'), + }, + builder: (field) { + return LabeledField( + label: localizations.translate( + i18.complaints.supervisorName, + ), + child: DigitTextFormInput( + errorMessage: field.errorText, + onChange: (value) => + form.control(_supervisorName).value = value, + ), + ); + }), + ReactiveWrapperField( + formControlName: _supervisorContactNumber, + validationMessages: { + 'mobileNumber': (object) => localizations.translate( + i18.individualDetails + .mobileNumberInvalidFormatValidationMessage, + ), + 'minLength': (object) => localizations.translate( + i18.complaints.validationMinLengthError), + 'maxLength': (object) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', '10'), + }, + builder: (field) { + return LabeledField( + label: localizations.translate( + i18.complaints.supervisorContactNumber, + ), + child: DigitTextFormInput( + keyboardType: TextInputType.number, + inputFormatters: [ + FilteringTextInputFormatter.digitsOnly, + ], + errorMessage: field.errorText, + onChange: (value) => form + .control(_supervisorContactNumber) + .value = value, + ), + ); + }), + ReactiveWrapperField( + formControlName: _complaintDescription, + validationMessages: { + 'required': (object) => localizations.translate( + i18.complaints.validationRequiredError, + ), + 'maxLength': (object) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', '1000'), + }, + builder: (field) { + return LabeledField( label: localizations.translate( i18.complaints.complaintDescription, ), - minLines: 3, - maxLines: 3, - isRequired: true, - validationMessages: { - 'required': (object) => localizations.translate( - i18.complaints.validationRequiredError, - ), - 'maxLength': (object) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', '1000'), - }, - ), - ]), - ], - ), - ), + child: DigitTextAreaFormInput( + maxLine: 3, + errorMessage: field.errorText, + isRequired: true, + onChange: (value) => form + .control(_complaintDescription) + .value = value, + ), + ); + }), + ]), ], ); }, @@ -465,7 +525,9 @@ class ComplaintsDetailsPageState extends LocalizedState { disabled: shouldDisableForm, validators: [ Validators.required, - Validators.pattern(Constants.mobileNumberRegExp) + CustomValidator.validMobileNumber, + Validators.minLength(10), + Validators.maxLength(10) ], ), _supervisorName: FormControl( @@ -476,7 +538,11 @@ class ComplaintsDetailsPageState extends LocalizedState { _supervisorContactNumber: FormControl( value: complaintDetails?.supervisorContactNumber, disabled: shouldDisableForm, - validators: [Validators.pattern(Constants.mobileNumberRegExp)], + validators: [ + CustomValidator.validMobileNumber, + Validators.maxLength(10), + Validators.minLength(10), + ], ), _complaintDescription: FormControl( value: complaintDetails?.complaintDescription, diff --git a/packages/complaints/lib/pages/registration/complaints_location.dart b/packages/complaints/lib/pages/registration/complaints_location.dart index 741515e4b..e4f1dce35 100644 --- a/packages/complaints/lib/pages/registration/complaints_location.dart +++ b/packages/complaints/lib/pages/registration/complaints_location.dart @@ -1,17 +1,23 @@ +import 'dart:math'; + import 'package:auto_route/auto_route.dart'; import 'package:complaints/router/complaints_router.gm.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/scrollable_content.dart'; +import 'package:drift/remote.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; +import '../../models/pgr_address.dart'; import '/blocs/complaints_registration/complaints_registration.dart'; import '/utils/i18_key_constants.dart' as i18; import '/utils/utils.dart'; import '/widgets/header/back_navigation_help_header.dart'; import '/widgets/localized.dart'; -import '../../models/pgr_address.dart'; @RoutePage() class ComplaintsLocationPage extends LocalizedStatefulWidget { @@ -79,141 +85,148 @@ class ComplaintsLocationPageState ], ), footer: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: DigitElevatedButton( - onPressed: () { - form.markAllAsTouched(); + cardType: CardType.primary, + margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), + padding: const EdgeInsets.all(spacer2), + children: [ + Button( + label: + localizations.translate(i18.complaints.actionLabel), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () { + form.markAllAsTouched(); - if (!form.valid) return; - FocusManager.instance.primaryFocus?.unfocus(); + if (!form.valid) return; + FocusManager.instance.primaryFocus?.unfocus(); - final addressLine1 = - form.control(_addressLine1Key).value as String?; - final addressLine2 = - form.control(_addressLine2Key).value as String?; - final landmark = - form.control(_landmarkKey).value as String?; - final postalCode = - form.control(_postalCodeKey).value as String?; + final addressLine1 = + form.control(_addressLine1Key).value as String?; + final addressLine2 = + form.control(_addressLine2Key).value as String?; + final landmark = + form.control(_landmarkKey).value as String?; + final postalCode = + form.control(_postalCodeKey).value as String?; - state.whenOrNull( - create: ( - loading, - complaintType, - _, - addressModel, - complaintsDetailsModel, - ) { - bloc.add(ComplaintsRegistrationEvent.saveAddress( - addressModel: PgrAddressModel( - buildingName: addressLine1, - street: addressLine2, - landmark: landmark, - pincode: postalCode, - geoLocation: GeoLocation( - latitude: form.control(_latKey).value, - longitude: form.control(_lngKey).value, - ), - ), - )); - }, - ); + state.whenOrNull( + create: ( + loading, + complaintType, + _, + addressModel, + complaintsDetailsModel, + ) { + bloc.add(ComplaintsRegistrationEvent.saveAddress( + addressModel: PgrAddressModel( + buildingName: addressLine1, + street: addressLine2, + landmark: landmark, + pincode: postalCode, + geoLocation: GeoLocation( + latitude: form.control(_latKey).value, + longitude: form.control(_lngKey).value, + ), + ), + )); + }, + ); - router.push(ComplaintsDetailsRoute()); - }, - child: Center( - child: Text( - localizations.translate(i18.complaints.actionLabel), + router.push(ComplaintsDetailsRoute()); + }, ), - ), - ), - ), + ]), children: [ - DigitCard( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: const EdgeInsets.only(bottom: kPadding), - child: Text( - localizations.translate( - i18.complaints.complaintsLocationLabel, - ), - style: theme.textTheme.displayMedium, - ), + DigitCard(cardType: CardType.primary, children: [ + Padding( + padding: const EdgeInsets.only(bottom: spacer2), + child: Text( + localizations.translate( + i18.complaints.complaintsLocationLabel, ), - Column(children: [ - DigitTextFormField( - formControlName: _addressLine1Key, + style: theme.textTheme.displayMedium, + ), + ), + ReactiveWrapperField( + formControlName: _addressLine1Key, + showErrors: (control) => control.invalid, + validationMessages: { + 'required': (_) => localizations.translate( + i18.common.min2CharsRequired, + ), + 'maxLength': (object) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', maxLength.toString()), + }, + builder: (field) { + return LabeledField( label: localizations.translate( i18.householdLocation .householdAddressLine1LabelText, ), - validationMessages: { - 'required': (_) => localizations.translate( - i18.common.min2CharsRequired, - ), - 'maxLength': (object) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', maxLength.toString()), - }, - ), - DigitTextFormField( - formControlName: _addressLine2Key, + child: DigitTextFormInput( + errorMessage: field.errorText, + onChange: (value) => form + .control(_addressLine1Key) + .value = value, + ), + ); + }), + ReactiveWrapperField( + formControlName: _addressLine2Key, + builder: (field) { + return LabeledField( label: localizations.translate( i18.householdLocation .householdAddressLine2LabelText, ), - validationMessages: { - 'required': (_) => localizations.translate( - i18.common.min2CharsRequired, - ), - 'maxLength': (object) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', maxLength.toString()), - }, - padding: const EdgeInsets.only(top: kPadding / 2), - ), - DigitTextFormField( - formControlName: _landmarkKey, + padding: const EdgeInsets.only(top: spacer2 / 2), + child: DigitTextFormInput( + maxLength: maxLength, + onChange: (value) => form + .control(_addressLine2Key) + .value = value, + errorMessage: field.errorText, + ), + ); + }), + ReactiveWrapperField( + formControlName: _landmarkKey, + builder: (field) { + return LabeledField( label: localizations.translate( i18.householdLocation.landmarkFormLabel, ), - validationMessages: { - 'required': (_) => localizations.translate( - i18.common.min2CharsRequired, - ), - 'maxLength': (object) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', maxLength.toString()), - }, - padding: const EdgeInsets.only(top: kPadding / 2), - ), - DigitTextFormField( - keyboardType: TextInputType.text, - formControlName: _postalCodeKey, + padding: const EdgeInsets.only(top: spacer2 / 2), + child: DigitTextFormInput( + onChange: (value) => form + .control(_landmarkKey) + .value = value, + errorMessage: field.errorText, + ), + ); + }), + ReactiveWrapperField( + formControlName: _postalCodeKey, + builder: (field) { + return LabeledField( label: localizations.translate( i18.householdLocation.postalCodeFormLabel, ), - inputFormatters: [ - FilteringTextInputFormatter.digitsOnly, - ], - validationMessages: { - 'required': (_) => localizations.translate( - i18.common.min2CharsRequired, - ), - 'maxLength': (object) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', '6'), - }, - padding: const EdgeInsets.only(top: kPadding / 3.5), - ), - ]), - ], - ), - ), + padding: const EdgeInsets.only(top: spacer2 / 3.5), + child: DigitTextFormInput( + keyboardType: TextInputType.text, + inputFormatters: [ + FilteringTextInputFormatter.digitsOnly, + ], + onChange: (value) => form + .control(_postalCodeKey) + .value = value, + ), + ); + }), + ]), ], ); }, @@ -235,8 +248,7 @@ class ComplaintsLocationPageState value: addressModel?.buildingName, disabled: shouldDisableForm, validators: [ - Validators.delegate( - (validator) => CustomValidator.requiredMin(validator)), + CustomValidator.requiredMin, Validators.maxLength(maxLength), ], ), @@ -244,8 +256,7 @@ class ComplaintsLocationPageState value: addressModel?.street, disabled: shouldDisableForm, validators: [ - Validators.delegate( - (validator) => CustomValidator.requiredMin(validator)), + CustomValidator.requiredMin, Validators.maxLength(maxLength), ], ), @@ -253,8 +264,7 @@ class ComplaintsLocationPageState value: addressModel?.landmark, disabled: shouldDisableForm, validators: [ - Validators.delegate( - (validator) => CustomValidator.requiredMin(validator)), + CustomValidator.requiredMin, Validators.maxLength(maxLength), ], ), @@ -262,16 +272,14 @@ class ComplaintsLocationPageState value: addressModel?.pincode, disabled: shouldDisableForm, validators: [ - Validators.delegate( - (validator) => CustomValidator.requiredMin(validator)), + CustomValidator.requiredMin, Validators.maxLength(6), ], ), _latKey: FormControl( value: addressModel?.geoLocation?.latitude, validators: [ - Validators.delegate( - (validator) => CustomValidator.requiredMin(validator)), + CustomValidator.requiredMin, ], ), _lngKey: FormControl( diff --git a/packages/complaints/lib/pages/registration/complaints_registration_wrapper.dart b/packages/complaints/lib/pages/registration/complaints_registration_wrapper.dart index 4e722115d..af0b7e7b6 100644 --- a/packages/complaints/lib/pages/registration/complaints_registration_wrapper.dart +++ b/packages/complaints/lib/pages/registration/complaints_registration_wrapper.dart @@ -1,7 +1,8 @@ import 'dart:convert'; import 'package:auto_route/auto_route.dart'; - +import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; +import 'package:location/location.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -35,50 +36,55 @@ class ComplaintsRegistrationWrapperPage extends StatelessWidget @override Widget wrappedRoute(BuildContext context) { - return BlocProvider( - create: (context) { - ComplaintsRegistrationState initialState; - - final pgrItem = pgrServiceModel; - - if (pgrItem != null) { - final additionalDetails = PgrAdditionalDetails.fromJson( - jsonDecode(pgrItem.additionalDetail!), - ); - - initialState = ComplaintsRegistrationViewState( - complaintType: pgrItem.serviceCode, - addressModel: pgrItem.address, - complaintsDetailsModel: ComplaintsDetailsModel( - administrativeArea: pgrItem.address.locality?.name ?? '', - complainantContactNumber: pgrItem.user.mobileNumber ?? '', - complainantName: pgrItem.user.name ?? '', - complaintDescription: pgrItem.description, - complaintRaisedFor: - - ComplaintsSingleton().userMobileNumber != pgrItem.user.mobileNumber - ? 'Another user' - : 'Myself', - - dateOfComplaint: pgrItem.auditDetails?.createdTime.toDateTime ?? - DateTime.now(), - supervisorContactNumber: - additionalDetails.supervisorContactNumber ?? '', - supervisorName: additionalDetails.supervisorName ?? '', - ), - ); - } else { - initialState = const ComplaintsRegistrationCreateState(); - } - - return ComplaintsRegistrationBloc( - initialState, - - pgrServiceRepository: - context.repository(context), + return MultiBlocProvider( + providers: [ + BlocProvider(create: (context) => LocationBloc(location: Location()),), + BlocProvider(create: (context) { + ComplaintsRegistrationState initialState; + + final pgrItem = pgrServiceModel; + + if (pgrItem != null) { + final additionalDetails = PgrAdditionalDetails.fromJson( + jsonDecode(pgrItem.additionalDetail!), + ); + initialState = ComplaintsRegistrationViewState( + complaintType: pgrItem.serviceCode, + addressModel: pgrItem.address, + complaintsDetailsModel: ComplaintsDetailsModel( + administrativeArea: pgrItem.address.locality?.name ?? '', + complainantContactNumber: pgrItem.user.mobileNumber ?? '', + complainantName: pgrItem.user.name ?? '', + complaintDescription: pgrItem.description, + complaintRaisedFor: + + ComplaintsSingleton().userMobileNumber != pgrItem.user.mobileNumber + ? 'Another user' + : 'Myself', + + dateOfComplaint: pgrItem.auditDetails?.createdTime.toDateTime ?? + DateTime.now(), + supervisorContactNumber: + additionalDetails.supervisorContactNumber ?? '', + supervisorName: additionalDetails.supervisorName ?? '', + ), ); - }, + } else { + initialState = const ComplaintsRegistrationCreateState(); + } + + return ComplaintsRegistrationBloc( + initialState, + + pgrServiceRepository: + context.repository(context), + + ); + }, + ) + ], + child: this, ); } diff --git a/packages/complaints/lib/widgets/boundary_selection_wrapper.dart b/packages/complaints/lib/widgets/boundary_selection_wrapper.dart index 5489b088f..176bbb9eb 100644 --- a/packages/complaints/lib/widgets/boundary_selection_wrapper.dart +++ b/packages/complaints/lib/widgets/boundary_selection_wrapper.dart @@ -1,7 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:complaints/router/complaints_router.gm.dart'; -import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/blocs/boundary/boundary.dart'; +import 'package:digit_ui_components/utils/app_logger.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; diff --git a/packages/complaints/lib/widgets/header/back_navigation_help_header.dart b/packages/complaints/lib/widgets/header/back_navigation_help_header.dart index 3bb5b41c3..529fe20f9 100644 --- a/packages/complaints/lib/widgets/header/back_navigation_help_header.dart +++ b/packages/complaints/lib/widgets/header/back_navigation_help_header.dart @@ -1,5 +1,5 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/digit_components.dart'; import 'package:flutter/material.dart'; import '/blocs/localization/app_localization.dart'; @@ -26,7 +26,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { final theme = Theme.of(context); return Padding( - padding: const EdgeInsets.all(kPadding / 2), + padding: const EdgeInsets.all(spacer2 / 2), child: Row( children: [ Expanded( @@ -55,7 +55,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { ], ), ), - SizedBox(width: showHelp ? kPadding * 2 : 0), + SizedBox(width: showHelp ? spacer2 * 2 : 0), if (showHelp) TextButton( style: TextButton.styleFrom(padding: EdgeInsets.zero), diff --git a/packages/complaints/pubspec.lock b/packages/complaints/pubspec.lock index a446fecf4..c175d4c4b 100644 --- a/packages/complaints/pubspec.lock +++ b/packages/complaints/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "64.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -61,18 +53,18 @@ packages: dependency: "direct main" description: name: auto_route - sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 + sha256: a9001a90539ca3effc168f7e1029a5885c7326b9032c09ac895e303c1d137704 url: "https://pub.dev" source: hosted - version: "7.9.2" + version: "8.3.0" auto_route_generator: dependency: "direct dev" description: name: auto_route_generator - sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" + sha256: ba28133d3a3bf0a66772bcc98dade5843753cd9f1a8fb4802b842895515b67d3 url: "https://pub.dev" source: hosted - version: "7.3.2" + version: "8.0.0" bloc: dependency: transitive description: @@ -161,6 +153,46 @@ packages: url: "https://pub.dev" source: hosted version: "8.9.2" + camera: + dependency: transitive + description: + name: camera + sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167" + url: "https://pub.dev" + source: hosted + version: "0.11.0+2" + camera_android_camerax: + dependency: transitive + description: + name: camera_android_camerax + sha256: "011be2ab0e5b3e3aa8094413fa890f8c5c5afd7cfdaef353a992047d4dab5780" + url: "https://pub.dev" + source: hosted + version: "0.6.8+2" + camera_avfoundation: + dependency: transitive + description: + name: camera_avfoundation + sha256: "2e4c568f70e406ccb87376bc06b53d2f5bebaab71e2fbcc1a950e31449381bcf" + url: "https://pub.dev" + source: hosted + version: "0.9.17+5" + camera_platform_interface: + dependency: transitive + description: + name: camera_platform_interface + sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 + url: "https://pub.dev" + source: hosted + version: "2.8.0" + camera_web: + dependency: transitive + description: + name: camera_web + sha256: "595f28c89d1fb62d77c73c633193755b781c6d2e0ebcd8dc25b763b514e6ba8f" + url: "https://pub.dev" + source: hosted + version: "0.3.5" characters: dependency: transitive description: @@ -169,6 +201,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + charcode: + dependency: transitive + description: + name: charcode + sha256: fb0f1107cac15a5ea6ef0a6ef71a807b9e4267c713bb93e00e92d737cc8dbd8a + url: "https://pub.dev" + source: hosted + version: "1.4.0" checked_yaml: dependency: transitive description: @@ -217,6 +257,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.0" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" + url: "https://pub.dev" + source: hosted + version: "0.3.4+2" crypto: dependency: transitive description: @@ -225,14 +273,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" - cupertino_icons: + csslib: dependency: transitive description: - name: cupertino_icons - sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" url: "https://pub.dev" source: hosted - version: "1.0.8" + version: "1.0.2" dart_mappable: dependency: "direct main" description: @@ -258,6 +306,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.6" + db_viewer: + dependency: transitive + description: + name: db_viewer + sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" + url: "https://pub.dev" + source: hosted + version: "1.1.0" diff_match_patch: dependency: transitive description: @@ -266,27 +322,23 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.1" - digit_components: - dependency: "direct main" - description: - path: "../digit_components" - relative: true - source: path - version: "1.0.2+1" digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path + name: digit_data_model + sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" + url: "https://pub.dev" + source: hosted version: "1.0.5-dev.1" - digit_firebase_services: - dependency: "direct overridden" + digit_ui_components: + dependency: "direct main" description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" + path: "flutter/digit-ui-components/digit_components" + ref: version_update + resolved-ref: ad45e31f470630b5876f38c0bc7744c5bf05b02b + url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" + source: git + version: "0.0.1+7" dio: dependency: "direct main" description: @@ -303,6 +355,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" drift: dependency: "direct main" description: @@ -311,14 +371,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.19.1+1" - easy_stepper: + drift_db_viewer: dependency: transitive description: - name: easy_stepper - sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" + name: drift_db_viewer + sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" url: "https://pub.dev" source: hosted - version: "0.8.5+1" + version: "2.1.0" fake_async: dependency: transitive description: @@ -343,46 +403,46 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.1" - firebase_core: + file_picker: dependency: transitive description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + name: file_picker + sha256: "2ca051989f69d1b2ca012b2cf3ccf78c70d40144f0861ff2c063493f7c8c3d45" url: "https://pub.dev" source: hosted - version: "2.32.0" - firebase_core_platform_interface: + version: "8.0.5" + file_selector_linux: dependency: transitive description: - name: firebase_core_platform_interface - sha256: e30da58198a6d4b49d5bce4e852f985c32cb10db329ebef9473db2b9f09ce810 + name: file_selector_linux + sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" url: "https://pub.dev" source: hosted - version: "5.3.0" - firebase_core_web: + version: "0.9.3+2" + file_selector_macos: dependency: transitive description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + name: file_selector_macos + sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc" url: "https://pub.dev" source: hosted - version: "2.17.5" - firebase_crashlytics: + version: "0.9.4+2" + file_selector_platform_interface: dependency: transitive description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b url: "https://pub.dev" source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: + version: "2.6.2" + file_selector_windows: dependency: transitive description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + name: file_selector_windows + sha256: "8f5d2f6590d51ecd9179ba39c64f722edc15226cc93dcc8698466ad36a4a85a4" url: "https://pub.dev" source: hosted - version: "3.6.35" + version: "0.9.3+3" fixnum: dependency: transitive description: @@ -412,62 +472,30 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" - flutter_focus_watcher: - dependency: transitive - description: - name: flutter_focus_watcher - sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility: - dependency: transitive - description: - name: flutter_keyboard_visibility - sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" - url: "https://pub.dev" - source: hosted - version: "5.4.1" - flutter_keyboard_visibility_linux: - dependency: transitive - description: - name: flutter_keyboard_visibility_linux - sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_macos: - dependency: transitive - description: - name: flutter_keyboard_visibility_macos - sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_platform_interface: + flutter_dropzone: dependency: transitive description: - name: flutter_keyboard_visibility_platform_interface - sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 url: "https://pub.dev" source: hosted - version: "2.0.0" - flutter_keyboard_visibility_web: + version: "3.0.7" + flutter_dropzone_platform_interface: dependency: transitive description: - name: flutter_keyboard_visibility_web - sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 + name: flutter_dropzone_platform_interface + sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" url: "https://pub.dev" source: hosted - version: "2.0.0" - flutter_keyboard_visibility_windows: + version: "2.2.0" + flutter_dropzone_web: dependency: transitive description: - name: flutter_keyboard_visibility_windows - sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "3.0.13" flutter_lints: dependency: "direct dev" description: @@ -481,6 +509,14 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda" + url: "https://pub.dev" + source: hosted + version: "2.0.22" flutter_spinkit: dependency: transitive description: @@ -489,6 +525,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" flutter_svg: dependency: "direct main" description: @@ -502,14 +546,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" flutter_web_plugins: dependency: transitive description: flutter @@ -547,6 +583,54 @@ packages: url: "https://pub.dev" source: hosted version: "3.2.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + url: "https://pub.dev" + source: hosted + version: "4.3.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" + url: "https://pub.dev" + source: hosted + version: "2.3.8+1" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -587,6 +671,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.3.1" + html: + dependency: transitive + description: + name: html + sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" + url: "https://pub.dev" + source: hosted + version: "0.15.5" http: dependency: transitive description: @@ -611,6 +703,70 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a" + url: "https://pub.dev" + source: hosted + version: "1.1.2" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "8c5abf0dcc24fe6e8e0b4a5c0b51a5cf30cefdf6407a3213dae61edc75a70f56" + url: "https://pub.dev" + source: hosted + version: "0.8.12+12" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83" + url: "https://pub.dev" + source: hosted + version: "3.0.6" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: "4f0568120c6fcc0aaa04511cb9f9f4d29fc3d0139884b1d06be88dcec7641d6b" + url: "https://pub.dev" + source: hosted + version: "0.8.12+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: "9ec26d410ff46f483c5519c29c02ef0e02e13a543f882b152d4bfd2f06802f80" + url: "https://pub.dev" + source: hosted + version: "2.10.0" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" intl: dependency: "direct main" description: @@ -811,22 +967,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - package_info_plus: - dependency: transitive - description: - name: package_info_plus - sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 - url: "https://pub.dev" - source: hosted - version: "8.0.2" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 - url: "https://pub.dev" - source: hosted - version: "3.0.1" path: dependency: transitive description: @@ -835,6 +975,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.0" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_parsing: dependency: transitive description: @@ -915,14 +1063,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" pool: dependency: transitive description: @@ -955,14 +1095,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a - url: "https://pub.dev" - source: hosted - version: "2.1.1" reactive_forms: dependency: "direct main" description: @@ -979,14 +1111,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" - remove_emoji_input_formatter: - dependency: transitive - description: - name: remove_emoji_input_formatter - sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" - url: "https://pub.dev" - source: hosted - version: "0.0.1+1" shelf: dependency: transitive description: @@ -1064,14 +1188,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" - sprintf: - dependency: transitive - description: - name: sprintf - sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" - url: "https://pub.dev" - source: hosted - version: "7.0.0" sqlite3: dependency: transitive description: @@ -1176,14 +1292,94 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + url_launcher: + dependency: transitive + description: + name: url_launcher + sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" + url: "https://pub.dev" + source: hosted + version: "6.3.1" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79 + url: "https://pub.dev" + source: hosted + version: "6.3.9" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2" + url: "https://pub.dev" + source: hosted + version: "3.2.2" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" + url: "https://pub.dev" + source: hosted + version: "2.3.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4" + url: "https://pub.dev" + source: hosted + version: "3.1.3" uuid: dependency: transitive description: name: uuid - sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" url: "https://pub.dev" source: hosted - version: "4.5.1" + version: "3.0.7" vector_graphics: dependency: transitive description: @@ -1216,6 +1412,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" vm_service: dependency: transitive description: diff --git a/packages/complaints/pubspec.yaml b/packages/complaints/pubspec.yaml index caa246c50..d66d6ac49 100644 --- a/packages/complaints/pubspec.yaml +++ b/packages/complaints/pubspec.yaml @@ -10,7 +10,12 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.0+2 +# digit_components: ^1.0.0+2 + digit_ui_components: + git: + url: https://github.com/egovernments/DIGIT-UI-LIBRARIES + ref: version_update + path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 From b537319ceaa8c8198f73713158aff58388efa7fe Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Mon, 2 Sep 2024 17:31:30 +0530 Subject: [PATCH 176/241] updated theme --- .../pages/inbox/complaints_details_view.dart | 226 +++-------- .../lib/pages/inbox/complaints_inbox.dart | 213 +++------- .../pages/inbox/complaints_inbox_filter.dart | 283 ++++++------- .../pages/inbox/complaints_inbox_search.dart | 101 +++-- .../pages/inbox/complaints_inbox_sort.dart | 77 ++-- .../pages/registration/complaint_type.dart | 12 +- .../registration/complaints_details.dart | 374 +++++++++--------- .../registration/complaints_location.dart | 5 +- .../header/back_navigation_help_header.dart | 26 +- 9 files changed, 545 insertions(+), 772 deletions(-) diff --git a/packages/complaints/lib/pages/inbox/complaints_details_view.dart b/packages/complaints/lib/pages/inbox/complaints_details_view.dart index dcec4f356..3effa5ebd 100644 --- a/packages/complaints/lib/pages/inbox/complaints_details_view.dart +++ b/packages/complaints/lib/pages/inbox/complaints_details_view.dart @@ -2,6 +2,7 @@ import 'package:auto_route/annotations.dart'; import 'package:auto_route/auto_route.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; @@ -27,6 +28,7 @@ class ComplaintsDetailsViewPage extends StatelessWidget { final router = context.router; final theme = Theme.of(context); final localizations = ComplaintsLocalization.of(context); + final textTheme = theme.digitTextTheme(context); return Scaffold( body: ScrollableContent( @@ -41,7 +43,7 @@ class ComplaintsDetailsViewPage extends StatelessWidget { child: Text( localizations .translate(i18.complaints.complaintsDetailsLabel), - style: theme.textTheme.displayMedium, + style: textTheme.headingXl, ), ), ), @@ -63,193 +65,63 @@ class ComplaintsDetailsViewPage extends StatelessWidget { ), ]), children: [ - DigitCard(cardType: CardType.primary, children: [ - Padding( - padding: const EdgeInsets.only(top: spacer4, bottom: spacer4), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, + Padding( + padding: EdgeInsets.only(top: spacer4), + child: DigitCard( + cardType: CardType.primary, children: [ - Expanded( - flex: 3, - child: Text( - localizations.translate(i18.complaints.inboxNumberLabel), - style: theme.textTheme.headlineSmall, - ), - ), - Expanded( - flex: 2, - child: Text( - complaint.serviceRequestId ?? - "${localizations.translate(i18.complaints.inboxNotGeneratedLabel)}\n${localizations.translate(i18.complaints.inboxSyncRequiredLabel)}", - style: TextStyle( - color: complaint.serviceRequestId != null - ? theme.colorScheme.secondary - : theme.colorTheme.text.primary, - ), - ), - ), - ], - ), - ), - Padding( - padding: const EdgeInsets.only(top: spacer4, bottom: spacer4), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 3, - child: Text( - localizations.translate(i18.complaints.inboxTypeLabel), - style: theme.textTheme.headlineSmall, - ), - ), - Expanded( - flex: 2, - child: Text( - localizations.translate( - complaint.serviceCode.snakeCase.toUpperCase().trim(), - ), - ), - ), - ], - ), - ), - Padding( - padding: const EdgeInsets.only(top: spacer4, bottom: spacer4), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Expanded( - flex: 3, - child: Text( - localizations.translate(i18.complaints.inboxDateLabel), - style: theme.textTheme.headlineSmall, - ), - ), - Expanded( - flex: 2, - child: Text( - complaint.auditDetails?.createdTime.toDateTime - .getFormattedDate() ?? - "", - ), - ), - ], - ), - ), - Padding( - padding: const EdgeInsets.only(top: spacer4, bottom: spacer4), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Expanded( - flex: 3, - child: Text( - localizations.translate(i18.complaints.complainantName), - style: theme.textTheme.headlineSmall, - ), - ), - Expanded( - flex: 2, - child: Text( - complaint.user.name ?? "", - ), - ), - ], - ), - ), - Padding( - padding: const EdgeInsets.only(top: spacer4, bottom: spacer4), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Expanded( - flex: 3, - child: Text( - localizations.translate(i18.complaints.inboxAreaLabel), - style: theme.textTheme.headlineSmall, - ), - ), - Expanded( - flex: 2, - child: Text( - complaint.address.locality?.name ?? "", - ), - ), - ], - ), - ), - Padding( - padding: const EdgeInsets.only(top: spacer4, bottom: spacer4), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Expanded( - flex: 3, - child: Text( - localizations.translate( + LabelValueList( + padding: EdgeInsets.only(top: spacer4, bottom: spacer4), + labelFlex: 6, + items: [ + LabelValuePair( + label: localizations.translate(i18.complaints.inboxNumberLabel), + value: complaint.serviceRequestId ?? + "${localizations.translate(i18.complaints.inboxNotGeneratedLabel)}\n${localizations.translate(i18.complaints.inboxSyncRequiredLabel)}" + ), + LabelValuePair( + label: localizations.translate(i18.complaints.inboxTypeLabel), + value: localizations.translate( + complaint.serviceCode.snakeCase.toUpperCase().trim(), + ) + ), + LabelValuePair( + label: localizations.translate(i18.complaints.inboxDateLabel), + value: complaint.auditDetails?.createdTime.toDateTime + .getFormattedDate() ?? + "", + ), + LabelValuePair( + label: localizations.translate(i18.complaints.complainantName), + value: complaint.user.name ?? "", + ), + LabelValuePair( + label: localizations.translate(i18.complaints.inboxAreaLabel), + value: complaint.address.locality?.name ?? "", + ), + LabelValuePair( + label: localizations.translate( i18.complaints.complainantContactNumber, ), - style: theme.textTheme.headlineSmall, - ), - ), - Expanded( - flex: 2, - child: Text( - complaint.user.mobileNumber ?? "", + value: complaint.user.mobileNumber ?? "", ), - ), - ], - ), - ), - Padding( - padding: const EdgeInsets.only(top: spacer4, bottom: spacer4), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Expanded( - flex: 3, - child: Text( - localizations.translate(i18.complaints.inboxStatusLabel), - style: theme.textTheme.headlineSmall, - ), - ), - Expanded( - flex: 2, - child: Text( - localizations.translate( + LabelValuePair( + label: localizations.translate(i18.complaints.inboxStatusLabel), + value: localizations.translate( "COMPLAINTS_STATUS_${complaint.applicationStatus.name.snakeCase.toUpperCase()}", ), ), - ), - ], - ), - ), - Padding( - padding: const EdgeInsets.only(top: spacer4, bottom: spacer4), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Expanded( - flex: 3, - child: Text( - localizations + LabelValuePair( + label: localizations .translate(i18.complaints.complaintDescription), - style: theme.textTheme.headlineSmall, - ), - ), - Expanded( - flex: 2, - child: Text( - localizations.translate( + value: localizations.translate( complaint.description, ), ), - ), - ], - ), - ), - ]), + ] + ) + ]), + ), ], ), ); diff --git a/packages/complaints/lib/pages/inbox/complaints_inbox.dart b/packages/complaints/lib/pages/inbox/complaints_inbox.dart index 827f5a349..ac99d1675 100644 --- a/packages/complaints/lib/pages/inbox/complaints_inbox.dart +++ b/packages/complaints/lib/pages/inbox/complaints_inbox.dart @@ -3,6 +3,7 @@ import 'package:complaints/router/complaints_router.gm.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/utils/app_logger.dart'; +import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -71,7 +72,7 @@ class ComplaintsInboxPageState extends LocalizedState { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Padding( - padding: const EdgeInsets.only(left: spacer2*2), + padding: const EdgeInsets.only(left: spacer2 * 2), child: Button( type: ButtonType.tertiary, size: ButtonSize.medium, @@ -90,7 +91,7 @@ class ComplaintsInboxPageState extends LocalizedState { type: ButtonType.tertiary, size: ButtonSize.medium, label: localizations.translate( - i18.complaints.filterCTA, + i18.complaints.filterCTA, ), prefixIcon: Icons.filter_list_alt, onPressed: () { @@ -99,12 +100,13 @@ class ComplaintsInboxPageState extends LocalizedState { ), ), Padding( - padding: const EdgeInsets.only(right: spacer2*2), + padding: + const EdgeInsets.only(right: spacer2 * 2), child: Button( type: ButtonType.tertiary, size: ButtonSize.medium, label: localizations.translate( - i18.complaints.sortCTA, + i18.complaints.sortCTA, ), prefixIcon: Icons.segment, onPressed: () { @@ -206,158 +208,67 @@ class _ComplaintsInboxItem extends StatelessWidget { final theme = Theme.of(context); final textTheme = theme.digitTextTheme(context); - return DigitCard(cardType: CardType.primary, children: [ - Padding( - padding: const EdgeInsets.only(top: spacer2, bottom: spacer2), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 2, - child: Text( - localizations.translate(i18.complaints.inboxNumberLabel), - style: textTheme.headingS - ), - ), - Expanded( - flex: 3, - child: Text( - item.serviceRequestId ?? - "${localizations.translate(i18.complaints.inboxNotGeneratedLabel)}\n${localizations.translate(i18.complaints.inboxSyncRequiredLabel)}", - style: TextStyle( - color: item.serviceRequestId != null - ? theme.colorScheme.secondary - : theme.colorTheme.text.primary, - ), - ), - ), - ], - ), - ), - Padding( - padding: const EdgeInsets.only(top: spacer2, bottom: spacer2), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 2, - child: Text( - localizations.translate(i18.complaints.inboxTypeLabel), - style: theme.textTheme.headlineSmall, - ), - ), - Expanded( - flex: 3, - child: Text( - localizations.translate( - item.serviceCode.snakeCase.toUpperCase().trim(), + return Padding( + padding: EdgeInsets.only(top: spacer3), + child: DigitCard(cardType: CardType.primary, children: [ + Padding( + padding: const EdgeInsets.only(top: spacer2, bottom: spacer2), + child: LabelValueList( + padding: const EdgeInsets.only(top: spacer2, bottom: spacer2), + labelFlex: 6, + items: [ + LabelValuePair( + label: localizations + .translate(i18.complaints.inboxNumberLabel), + value: item.serviceRequestId ?? + "${localizations.translate(i18.complaints.inboxNotGeneratedLabel)}\n${localizations.translate(i18.complaints.inboxSyncRequiredLabel)}" ), - ), - ), - ], - ), - ), - Padding( - padding: const EdgeInsets.only(top: spacer2, bottom: spacer2), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Expanded( - flex: 2, - child: Text( - localizations.translate(i18.complaints.inboxDateLabel), - style: theme.textTheme.headlineSmall, - ), - ), - Expanded( - flex: 3, - child: Text( - item.auditDetails?.createdTime.toDateTime - .getFormattedDate() ?? - "", - ), - ), - ], - ), - ), - Padding( - padding: const EdgeInsets.only(top: spacer2, bottom: spacer2), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Expanded( - flex: 2, - child: Text( - localizations.translate(i18.complaints.inboxAreaLabel), - style: theme.textTheme.headlineSmall, - ), - ), - Expanded( - flex: 3, - child: Text( - item.address.locality?.name ?? "", - ), - ), - ], - ), - ), - Padding( - padding: const EdgeInsets.only(top: spacer2, bottom: 8), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Expanded( - flex: 2, - child: Text( - localizations.translate(i18.complaints.inboxStatusLabel), - style: theme.textTheme.headlineSmall, - ), - ), - Expanded( - flex: 3, - child: Text( - localizations.translate( - "COMPLAINTS_STATUS_${item.applicationStatus.name.snakeCase.toUpperCase()}", - ), - ), - ), - ], - ), - ), - Padding( - padding: const EdgeInsets.only(top: spacer2 * 2), - child: Row( - children: [ - Expanded( - flex: 1, - child: OutlinedButton( - onPressed: () { - context.router.push(ComplaintsDetailsViewRoute( - complaint: item, - )); - }, - style: OutlinedButton.styleFrom( - side: BorderSide( - width: 1.0, - color: theme.colorScheme.secondary, - ), - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.zero, + LabelValuePair( + label: localizations.translate(i18.complaints.inboxTypeLabel), + value: localizations.translate( + item.serviceCode.snakeCase.toUpperCase().trim(), ), ), - child: Text( - localizations.translate(i18.searchBeneficiary.iconLabel), - style: DigitTheme - .instance.mobileTheme.textTheme.headlineSmall - ?.apply( - color: theme.colorScheme.secondary, - ), + LabelValuePair( + label: + localizations.translate(i18.complaints.inboxDateLabel), + value: item.auditDetails?.createdTime.toDateTime + .getFormattedDate() ?? + ""), + LabelValuePair( + label: + localizations.translate(i18.complaints.inboxAreaLabel), + value: item.address.locality?.name ?? ""), + LabelValuePair( + label: localizations + .translate(i18.complaints.inboxStatusLabel), + value: localizations.translate( + "COMPLAINTS_STATUS_${item.applicationStatus.name.snakeCase.toUpperCase()}", + )), + ], + )), + Padding( + padding: const EdgeInsets.only(top: spacer2 * 2), + child: Row( + children: [ + Expanded( + flex: 1, + child: Button( + label: + localizations.translate(i18.searchBeneficiary.iconLabel), + type: ButtonType.secondary, + size: ButtonSize.large, + onPressed: () { + context.router.push(ComplaintsDetailsViewRoute( + complaint: item, + )); + }, ), ), - ), - ], + ], + ), ), - ), - ]); + ]), + ); } } diff --git a/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart b/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart index 7336c5333..a6fc2440d 100644 --- a/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart +++ b/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart @@ -2,6 +2,7 @@ import 'dart:collection'; import 'package:auto_route/auto_route.dart'; import 'package:digit_data_model/models/entities/pgr_application_status.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; @@ -50,6 +51,7 @@ class ComplaintsInboxFilterPageState @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); return Scaffold( backgroundColor: theme.colorScheme.onPrimary, @@ -75,18 +77,27 @@ class ComplaintsInboxFilterPageState Row( mainAxisAlignment: MainAxisAlignment.end, children: [ - TextButton( - style: TextButton.styleFrom( - foregroundColor: theme.colorScheme.onBackground, - padding: EdgeInsets.zero, - ), - onPressed: () => context.router.maybePop(), - child: const Row( - children: [ - Icon(Icons.close), - ], + // TextButton( + // style: TextButton.styleFrom( + // foregroundColor: theme.colorScheme.onBackground, + // padding: EdgeInsets.zero, + // ), + // onPressed: () => context.router.maybePop(), + // child: const Row( + // children: [ + // Icon(Icons.close), + // ], + // ), + Padding( + padding: EdgeInsets.zero, + child: Button( + label: "", + type: ButtonType.tertiary, + size: ButtonSize.large, + onPressed: () => context.router.maybePop(), + prefixIcon: Icons.close, ), - ), + ) ], ), Padding( @@ -103,103 +114,93 @@ class ComplaintsInboxFilterPageState localizations.translate( i18.complaints.complaintInboxFilterHeading, ), - style: theme.textTheme.displayMedium, + style: textTheme.headingXl, ), Padding( - padding: const EdgeInsets.only(left: 5), - child: TextButton( - onPressed: () { - clearFilters(formGroup); - }, - style: TextButton.styleFrom( - foregroundColor: theme.colorScheme.onBackground, - padding: const EdgeInsets.all(9), - side: BorderSide( - width: 1, - color: theme.colorScheme.outline, - ), - ), - child: const Column( - children: [ - Icon(Icons.autorenew), - ], - ), - ), - ), + padding: const EdgeInsets.only(left: spacer1), + child: Button( + label: "", + type: ButtonType.tertiary, + size: ButtonSize.large, + onPressed: () { + clearFilters(formGroup); + }, + prefixIcon: Icons.autorenew, + )), ], ), ), ], ), enableFixedButton: true, - footer: SizedBox( - child: DigitCard( + footer: DigitCard( cardType: CardType.primary, margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), padding: const EdgeInsets.all(spacer2), - children: [Row( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Expanded( - flex: 1, - child: Button( - type: ButtonType.secondary, - size: ButtonSize.large, - label: localizations.translate( - i18.complaints.complaintsFilterClearAll, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + flex: 1, + child: Button( + type: ButtonType.secondary, + size: ButtonSize.large, + label: localizations.translate( + i18.complaints.complaintsFilterClearAll, + ), + onPressed: () { + clearFilters(formGroup); + }, ), - onPressed: () { - clearFilters(formGroup); - }, ), - ), - const SizedBox(width: 10), - Expanded( - flex: 1, - child: Button( - label: localizations - .translate(i18.complaints.filterCTA), - type: ButtonType.primary, - size: ButtonSize.large, - onPressed: () { - if (!formGroup.valid) return; + const SizedBox(width: 10), + Expanded( + flex: 1, + child: Button( + label: localizations + .translate(i18.complaints.filterCTA), + type: ButtonType.primary, + size: ButtonSize.large, + onPressed: () { + if (!formGroup.valid) return; - final bloc = context.read(); + final bloc = + context.read(); - final assignedTo = formGroup - .control(_complaintAssignmentType) - .value as String?; + final assignedTo = formGroup + .control(_complaintAssignmentType) + .value as String?; - final complaintType = formGroup - .control(_complaintType) - .value as String?; + final complaintType = formGroup + .control(_complaintType) + .value as String?; - final locality = formGroup - .control(_complaintLocality) - .value as String?; + final locality = formGroup + .control(_complaintLocality) + .value as String?; - bloc.add( - ComplaintInboxFilterComplaintsEvent( - complaintAssignedTo: assignedTo, - currentUserName: - ComplaintsSingleton().loggedInUserName, - complaintTypeCode: complaintType, - locality: locality, - complaintStatus: statuses.toList(), - createdByUserId: - ComplaintsSingleton().loggedInUserUuid, - ), - ); + bloc.add( + ComplaintInboxFilterComplaintsEvent( + complaintAssignedTo: assignedTo, + currentUserName: + ComplaintsSingleton().loggedInUserName, + complaintTypeCode: complaintType, + locality: locality, + complaintStatus: statuses.toList(), + createdByUserId: + ComplaintsSingleton().loggedInUserUuid, + ), + ); - context.router.pop(); - }, + context.router.pop(); + }, + ), ), - ), - ], - ),] - ), - ), + ], + ), + ]), children: [ Padding( padding: const EdgeInsets.all(spacer4), @@ -256,23 +257,24 @@ class ComplaintsInboxFilterPageState alignment: Alignment.topLeft, child: RadioList( radioButtons: _complaintAssignmentTypes - .asMap() - .entries - .map( - (item)=>RadioButtonModel( - code: item.value, - name: localizations.translate(item.value.trim()), - ) - ).toList(), - + .asMap() + .entries + .map((item) => RadioButtonModel( + code: item.value, + name: localizations.translate( + item.value.trim()), + )) + .toList(), groupValue: formGroup - .control(_complaintAssignmentType) + .control( + _complaintAssignmentType) .value ?? "", onChanged: (changedValue) { setState(() { formGroup - .control(_complaintAssignmentType) + .control( + _complaintAssignmentType) .value = changedValue.code; }); }, @@ -280,48 +282,61 @@ class ComplaintsInboxFilterPageState ); }, ), - LabeledField( - label: localizations.translate( - i18.complaints.complaintsTypeHeading, - ), - child: DigitDropdown( - items: complaintTypes.toList() + Padding( + padding: EdgeInsets.only(top: spacer2), + child: LabeledField( + label: localizations.translate( + i18.complaints.complaintsTypeHeading, + ), + child: DigitDropdown( + items: complaintTypes + .toList() .asMap() .entries - .map( - (item) => DropdownItem( + .map((item) => DropdownItem( name: localizations.translate( - item.value.toString() + item.value + .toString() .trim() .snakeCase - .toUpperCase() - ), + .toUpperCase()), code: item.value, - ) - ).toList(), - emptyItemText: localizations - .translate(i18.common.noMatchFound), - isSearchable: true, - onSelect: (value)=>formGroup.control(_complaintType).value=value.code, + )) + .toList(), + emptyItemText: localizations + .translate(i18.common.noMatchFound), + isSearchable: true, + onSelect: (value) => formGroup + .control(_complaintType) + .value = value.code, + ), ), ), - LabeledField( - label: localizations - .translate(i18.complaints.locality), - child: DigitDropdown( - items: locality.toList() - .asMap() - .entries - .map((item)=> DropdownItem( - name: localizations - .translate(item.value.toString().trim()), - code: item.value, - ) - ).toList(), - emptyItemText: localizations - .translate(i18.common.noMatchFound), - onSelect: (value)=>formGroup.control(_complaintLocality).value=value.code, - ), + Padding( + padding: EdgeInsets.only(top: spacer2), + child: LabeledField( + label: localizations + .translate(i18.complaints.locality), + child: DigitDropdown( + items: locality + .toList() + .asMap() + .entries + .map((item) => DropdownItem( + name: localizations.translate( + item.value + .toString() + .trim()), + code: item.value, + )) + .toList(), + emptyItemText: localizations + .translate(i18.common.noMatchFound), + onSelect: (value) => formGroup + .control(_complaintLocality) + .value = value.code, + ), + ), ), if (uniqueStatuses.isNotEmpty) ...[ LabeledField( @@ -332,7 +347,7 @@ class ComplaintsInboxFilterPageState children: [ ...uniqueStatuses.map((e) => Padding( padding: const EdgeInsets.only( - top: 16, + top: spacer4, ), child: DigitCheckbox( label: diff --git a/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart b/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart index 1b26c06a4..5a8c6629a 100644 --- a/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart +++ b/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart @@ -1,8 +1,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_ui_components/digit_components.dart'; -import 'package:digit_ui_components/utils/validators/validator.dart' - as component_validator; -import 'package:digit_ui_components/widgets/atoms/input_wrapper.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; @@ -36,6 +34,7 @@ class ComplaintsInboxSearchPageState @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); final bloc = context.read(); return Scaffold( @@ -51,22 +50,20 @@ class ComplaintsInboxSearchPageState Row( mainAxisAlignment: MainAxisAlignment.end, children: [ - TextButton( - style: TextButton.styleFrom( - foregroundColor: theme.colorScheme.onBackground, - padding: EdgeInsets.zero, + Padding( + padding: EdgeInsets.zero, + child: Button( + label: "", + onPressed: () => context.router.pop(), + type: ButtonType.tertiary, + size: ButtonSize.large, + prefixIcon: Icons.close, ), - onPressed: () => context.router.pop(), - child: const Row( - children: [ - Icon(Icons.close), - ], - ), - ), + ) ], ), Padding( - padding: const EdgeInsets.only(left: 20), + padding: const EdgeInsets.only(left: spacer5), child: Row( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, @@ -75,54 +72,52 @@ class ComplaintsInboxSearchPageState localizations.translate( i18.complaints.complaintInboxSearchHeading, ), - style: theme.textTheme.displayMedium, + style: textTheme.headingXl, ), ], ), ), ], ), - footer: SizedBox( - child: DigitCard( - cardType: CardType.primary, - margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), - padding: const EdgeInsets.all(spacer2), - children: [ - Button( - mainAxisSize: MainAxisSize.max, - type: ButtonType.primary, - size: ButtonSize.large, - label: localizations - .translate(i18.complaints.searchCTA), - onPressed: () { - formGroup.markAllAsTouched(); + footer: DigitCard( + cardType: CardType.primary, + margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), + padding: const EdgeInsets.all(spacer2), + children: [ + Button( + mainAxisSize: MainAxisSize.max, + type: ButtonType.primary, + size: ButtonSize.large, + label: localizations + .translate(i18.complaints.searchCTA), + onPressed: () { + formGroup.markAllAsTouched(); - if (!formGroup.valid) return; + if (!formGroup.valid) return; - final complaintNumberValue = - formGroup.control(_complaintNumber).value; - final mobileNumberValue = - formGroup.control(_mobileNumber).value; + final complaintNumberValue = + formGroup.control(_complaintNumber).value; + final mobileNumberValue = + formGroup.control(_mobileNumber).value; - bloc.add( - ComplaintInboxSearchComplaintsEvent( - mobileNumber: mobileNumberValue == "" - ? null - : mobileNumberValue, - complaintNumber: - complaintNumberValue == "" - ? null - : complaintNumberValue, - createdByUserId: ComplaintsSingleton() - .loggedInUserUuid, - ), - ); + bloc.add( + ComplaintInboxSearchComplaintsEvent( + mobileNumber: mobileNumberValue == "" + ? null + : mobileNumberValue, + complaintNumber: + complaintNumberValue == "" + ? null + : complaintNumberValue, + createdByUserId: ComplaintsSingleton() + .loggedInUserUuid, + ), + ); - context.router.pop(); - }, - ), - ]), - ), + context.router.pop(); + }, + ), + ]), children: [ Column( children: [ diff --git a/packages/complaints/lib/pages/inbox/complaints_inbox_sort.dart b/packages/complaints/lib/pages/inbox/complaints_inbox_sort.dart index a193b2239..c3c6f9ab3 100644 --- a/packages/complaints/lib/pages/inbox/complaints_inbox_sort.dart +++ b/packages/complaints/lib/pages/inbox/complaints_inbox_sort.dart @@ -1,6 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; @@ -37,6 +38,7 @@ class ComplaintsInboxSortPageState final theme = Theme.of(context); final bloc = context.read(); final router = context.router; + final textTheme = theme.digitTextTheme(context); return Scaffold( backgroundColor: theme.colorScheme.onPrimary, @@ -53,16 +55,14 @@ class ComplaintsInboxSortPageState Row( mainAxisAlignment: MainAxisAlignment.end, children: [ - TextButton( - style: TextButton.styleFrom( - foregroundColor: theme.colorScheme.onBackground, - padding: EdgeInsets.zero, - ), - onPressed: () => context.router.pop(), - child: const Row( - children: [ - Icon(Icons.close), - ], + Padding( + padding: EdgeInsets.zero, + child: Button( + label: "", + onPressed: () => context.router.pop(), + type: ButtonType.tertiary, + size: ButtonSize.large, + prefixIcon: Icons.close, ), ), ], @@ -77,7 +77,7 @@ class ComplaintsInboxSortPageState localizations.translate( i18.complaints.complaintInboxSortHeading, ), - style: theme.textTheme.displayMedium, + style: textTheme.headingXl, ), ], ), @@ -114,37 +114,32 @@ class ComplaintsInboxSortPageState ),] ), children: [ - Column( - children: [ - Column( - children: [ - BlocBuilder( - builder: (context, state) { + BlocBuilder( + builder: (context, state) { - return RadioList( - radioButtons: sortOrders - .asMap() - .entries - .map( - (item)=>RadioButtonModel( - code: item.value, - name: localizations.translate(item.value.trim()), - ) - ).toList(), - groupValue: - formGroup.control(_sortOrder).value ?? - "", - onChanged: (changedValue) { - formGroup.control(_sortOrder).value = - changedValue.code; - }, - ); - }, - ), - ], - ), - ], + return Padding( + padding: EdgeInsets.only(top: spacer2), + child: RadioList( + radioButtons: sortOrders + .asMap() + .entries + .map( + (item)=>RadioButtonModel( + code: item.value, + name: localizations.translate(item.value.trim()), + ) + ).toList(), + groupValue: + formGroup.control(_sortOrder).value ?? + "", + onChanged: (changedValue) { + formGroup.control(_sortOrder).value = + changedValue.code; + }, + ), + ); + }, ), ], ); diff --git a/packages/complaints/lib/pages/registration/complaint_type.dart b/packages/complaints/lib/pages/registration/complaint_type.dart index f4ac2fcaf..6ef019cd8 100644 --- a/packages/complaints/lib/pages/registration/complaint_type.dart +++ b/packages/complaints/lib/pages/registration/complaint_type.dart @@ -9,7 +9,6 @@ import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:group_radio_button/group_radio_button.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:recase/recase.dart'; @@ -38,6 +37,7 @@ class ComplaintTypePageState extends LocalizedState { final bloc = context.read(); final router = context.router; final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); return Scaffold( body: ReactiveFormBuilder( @@ -123,7 +123,7 @@ class ComplaintTypePageState extends LocalizedState { localizations.translate( i18.complaints.complaintsTypeHeading, ), - style: theme.textTheme.displayMedium, + style: textTheme.headingXl, ), ), LabeledField( @@ -137,7 +137,7 @@ class ComplaintTypePageState extends LocalizedState { (item) => RadioButtonModel( code: item, name: localizations.translate( - item.replaceAll('_',' ').toUpperCase().trim(), + item.toString().snakeCase.toUpperCase().trim(), ), ), ).toList(): @@ -146,8 +146,10 @@ class ComplaintTypePageState extends LocalizedState { form.control(_complaintType).value ?? "", onChanged: (changedValue) { if (form.control(_complaintType).disabled) return; - form.control(_complaintType).value = - changedValue.code; + setState(() { + form.control(_complaintType).value = + changedValue.code; + }); }, ), ), diff --git a/packages/complaints/lib/pages/registration/complaints_details.dart b/packages/complaints/lib/pages/registration/complaints_details.dart index 31c3030d3..14162bd94 100644 --- a/packages/complaints/lib/pages/registration/complaints_details.dart +++ b/packages/complaints/lib/pages/registration/complaints_details.dart @@ -11,7 +11,7 @@ import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:group_radio_button/group_radio_button.dart'; +import 'package:intl/intl.dart'; import 'package:reactive_forms/reactive_forms.dart'; import '../../../blocs/complaints_registration/complaints_registration.dart'; @@ -53,6 +53,7 @@ class ComplaintsDetailsPageState extends LocalizedState { i18.complaints.raisedForMyself, i18.complaints.raisedForAnotherUser, ]; + final textTheme = theme.digitTextTheme(context); return Scaffold( body: ReactiveFormBuilder( @@ -86,154 +87,146 @@ class ComplaintsDetailsPageState extends LocalizedState { BackNavigationHelpHeaderWidget(), ], ), - footer: SizedBox( - child: DigitCard( - cardType: CardType.primary, - margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), - padding: const EdgeInsets.all(spacer2), - children: [ - Button( - label: form.control(_complaintDetailsForm).disabled - ? localizations - .translate(i18.complaints.backToInbox) - : localizations - .translate(i18.common.coreCommonSubmit), - type: ButtonType.primary, - size: ButtonSize.large, - mainAxisSize: MainAxisSize.max, - onPressed: () async { - setState(() { - form.markAllAsTouched(); - }); + footer: DigitCard( + cardType: CardType.primary, + margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), + padding: const EdgeInsets.all(spacer2), + children: [ + Button( + label: form.control(_complaintDetailsForm).disabled + ? localizations + .translate(i18.complaints.backToInbox) + : localizations + .translate(i18.common.coreCommonSubmit), + type: ButtonType.primary, + size: ButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () async { + setState(() { + form.markAllAsTouched(); + }); - if (form.control(_complaintDetailsForm).disabled) { - router.parent()?.maybePop(); - } + if (form.control(_complaintDetailsForm).disabled) { + router.parent()?.maybePop(); + } - if (!form.valid) { - return; - } + if (!form.valid) { + return; + } - FocusManager.instance.primaryFocus?.unfocus(); + FocusManager.instance.primaryFocus?.unfocus(); - final dateOfComplaint = form - .control(_dateOfComplaint) - .value as DateTime; + final dateOfComplaint = + form.control(_dateOfComplaint).value as DateTime; - final complaintRaisedFor = form - .control(_complaintRaisedFor) - .value as String; + final complaintRaisedFor = + form.control(_complaintRaisedFor).value as String; - final administrativeArea = form - .control(_administrativeArea) - .value as String; + final administrativeArea = + form.control(_administrativeArea).value as String; - final complainantName = - form.control(_complainantName).value as String; + final complainantName = + form.control(_complainantName).value as String; - final complainantContactNumber = form - .control(_complainantContactNumber) - .value as String; + final complainantContactNumber = form + .control(_complainantContactNumber) + .value as String; - final supervisorName = - form.control(_supervisorName).value as String?; + final supervisorName = + form.control(_supervisorName).value as String?; - final supervisorContactNumber = form - .control(_supervisorContactNumber) - .value as String?; + final supervisorContactNumber = form + .control(_supervisorContactNumber) + .value as String?; - final complaintDescription = form - .control(_complaintDescription) - .value as String; + final complaintDescription = form + .control(_complaintDescription) + .value as String; - state.whenOrNull( - create: ( - loading, - complaintType, - _, - addressModel, - complaintsDetailsModel, - ) { - bloc.add( - ComplaintsRegistrationEvent - .saveComplaintDetails( - boundaryModel: - ComplaintsSingleton().boundary, - complaintsDetailsModel: - ComplaintsDetailsModel( - administrativeArea: ComplaintsSingleton() - .boundary - .code - .toString(), - dateOfComplaint: dateOfComplaint, - complaintRaisedFor: complaintRaisedFor, - complainantName: complainantName, - complainantContactNumber: - complainantContactNumber, - supervisorName: supervisorName, - supervisorContactNumber: - supervisorContactNumber, - complaintDescription: - complaintDescription, - ), + state.whenOrNull( + create: ( + loading, + complaintType, + _, + addressModel, + complaintsDetailsModel, + ) { + bloc.add( + ComplaintsRegistrationEvent + .saveComplaintDetails( + boundaryModel: ComplaintsSingleton().boundary, + complaintsDetailsModel: + ComplaintsDetailsModel( + administrativeArea: ComplaintsSingleton() + .boundary + .code + .toString(), + dateOfComplaint: dateOfComplaint, + complaintRaisedFor: complaintRaisedFor, + complainantName: complainantName, + complainantContactNumber: + complainantContactNumber, + supervisorName: supervisorName, + supervisorContactNumber: + supervisorContactNumber, + complaintDescription: complaintDescription, ), - ); - }, - ); + ), + ); + }, + ); - final userId = - ComplaintsSingleton().loggedInUserUuid; + final userId = ComplaintsSingleton().loggedInUserUuid; - showPopup( - context: context, - title: localizations.translate( - i18.complaints.dialogTitle, - ), - type: PopUpType.simple, - description: localizations.translate( - i18.complaints.dialogContent, + showPopup( + context: context, + title: localizations.translate( + i18.complaints.dialogTitle, + ), + type: PopUpType.simple, + description: localizations.translate( + i18.complaints.dialogContent, + ), + actions: [ + Button( + label: localizations.translate( + i18.common.coreCommonSubmit, + ), + onPressed: () { + bloc.add( + ComplaintsRegistrationSubmitComplaintEvent( + userId: userId, + ), + ); + Navigator.of(context, rootNavigator: true) + .pop(); + }, + type: ButtonType.primary, + size: ButtonSize.large, ), - actions: [ - Button( + Button( label: localizations.translate( - i18.common.coreCommonSubmit, + i18.common.coreCommonCancel, ), onPressed: () { - bloc.add( - ComplaintsRegistrationSubmitComplaintEvent( - userId: userId, - ), - ); - Navigator.of(context, rootNavigator: true) - .pop(); + Navigator.of( + context, + rootNavigator: true, + ).pop(); }, - type: ButtonType.primary, - size: ButtonSize.large, - ), - Button( - label: localizations.translate( - i18.common.coreCommonCancel, - ), - onPressed: () { - Navigator.of( - context, - rootNavigator: true, - ).pop(); - }, - type: ButtonType.secondary, - size: ButtonSize.large), - ]); - }, - ), - ]), - ), + type: ButtonType.secondary, + size: ButtonSize.large), + ]); + }, + ), + ]), children: [ DigitCard(cardType: CardType.primary, children: [ Text( localizations.translate( i18.complaints.complaintsDetailsLabel, ), - style: theme.textTheme.displayMedium, + style: textTheme.headingXl, ), LabeledField( label: localizations.translate( @@ -242,8 +235,8 @@ class ComplaintsDetailsPageState extends LocalizedState { child: DigitDateFormInput( isRequired: true, readOnly: true, - initialValue: - form.control(_dateOfComplaint).value?.toString(), + initialValue: DateFormat('yyyy-MM-dd') + .format(form.control(_dateOfComplaint).value), initialDate: DateTime.now(), confirmText: localizations.translate( i18.common.coreCommonOk, @@ -264,43 +257,45 @@ class ComplaintsDetailsPageState extends LocalizedState { ), ), LabeledField( - label: "${localizations.translate( + label: localizations.translate( i18.complaints.complainantTypeQuestion, - )} *", + ), + isRequired: true, child: Column( children: [ - RadioGroup.builder( - groupValue: - form.control(_complaintRaisedFor).value ?? "", - onChanged: (changedValue) { - if (form.control(_complaintRaisedFor).disabled) - return; + Align( + alignment: AlignmentDirectional.topStart, + child: RadioList( + radioButtons: complainantRaisedFor + .map((item) => RadioButtonModel( + code: item, + name: + localizations.translate(item.trim()), + )) + .toList(), + groupValue: + form.control(_complaintRaisedFor).value ?? "", + onChanged: (changedValue) { + if (form.control(_complaintRaisedFor).disabled) + return; - if (changedValue == - i18.complaints.raisedForAnotherUser) { - form.control(_complainantName).value = ""; - form.control(_complainantContactNumber).value = - ""; - } else { - form.control(_complainantName).value = - ComplaintsSingleton().userName; - form.control(_complainantContactNumber).value = - ComplaintsSingleton().userMobileNumber; - } + if (changedValue.code == + i18.complaints.raisedForAnotherUser) { + form.control(_complainantName).value = ""; + form.control(_complainantContactNumber).value = + ""; + } else { + form.control(_complainantName).value = + ComplaintsSingleton().userName; + form.control(_complainantContactNumber).value = + ComplaintsSingleton().userMobileNumber; + } - setState(() { - form.control(_complaintRaisedFor).value = - changedValue; - }); - }, - textStyle: TextStyle( - color: form.control(_complaintRaisedFor).disabled - ? theme.colorScheme.shadow - : theme.colorScheme.onBackground, - ), - items: complainantRaisedFor, - itemBuilder: (item) => RadioButtonBuilder( - localizations.translate(item.trim()), + setState(() { + form.control(_complaintRaisedFor).value = + changedValue.code; + }); + }, ), ), if (form.touched && @@ -309,8 +304,8 @@ class ComplaintsDetailsPageState extends LocalizedState { alignment: Alignment.topLeft, child: Padding( padding: const EdgeInsets.only( - top: 5, - bottom: 5, + top: spacer1, + bottom: spacer1, ), child: Text( localizations.translate(i18 @@ -329,7 +324,6 @@ class ComplaintsDetailsPageState extends LocalizedState { children: [ ReactiveWrapperField( formControlName: _complainantName, - showErrors: (control)=>control.invalid, validationMessages: { 'required': (object) => localizations.translate( i18.complaints.validationRequiredError), @@ -338,38 +332,27 @@ class ComplaintsDetailsPageState extends LocalizedState { .replaceAll('{}', '64'), }, builder: (field) { - return ReactiveWrapperField( - formControlName: _complainantName, - validationMessages: { - 'required': (object) => - localizations.translate(i18.complaints - .validationRequiredError), - 'maxLength': (object) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', '64'), - }, - builder: (field) { - return LabeledField( - label: localizations.translate( - i18.complaints.complainantName, - ), - child: DigitTextFormInput( - readOnly: (form.control(_complainantName).value==null || - form.control(_complainantName).value.isEmpty())? - false:true, - initialValue: form.control(_complainantName).value, - isRequired: true, - errorMessage: field.errorText, - onChange: (value) => form - .control(_complainantName) - .value = value, - ), - ); - }); + return LabeledField( + label: localizations.translate( + i18.complaints.complainantName, + ), + isRequired: true, + child: DigitTextFormInput( + readOnly:(isRaisedForSelf)? + (field.value == null || field.value.isEmpty) + ? false + : true:false, + initialValue: field.value, + isRequired: true, + errorMessage: field.errorText, + onChange: (value) => form + .control(_complainantName) + .value = value, + ), + ); }), ReactiveWrapperField( formControlName: _complainantContactNumber, - showErrors: (control)=>control.invalid, validationMessages: { 'mobileNumber': (object) => localizations.translate(i18.individualDetails @@ -387,11 +370,14 @@ class ComplaintsDetailsPageState extends LocalizedState { label: localizations.translate( i18.complaints.complainantContactNumber, ), + isRequired: true, child: DigitTextFormInput( - readOnly: (form.control(_complainantContactNumber).value==null || - form.control(_complainantContactNumber).value.isEmpty())? - false:true, - initialValue: form.control(_complainantContactNumber).value, + readOnly: (isRaisedForSelf)?(field.value == + null || + field.value.isEmpty) + ? false + : true:false, + initialValue: field.value, isRequired: true, keyboardType: TextInputType.number, inputFormatters: [ @@ -427,6 +413,7 @@ class ComplaintsDetailsPageState extends LocalizedState { }), ReactiveWrapperField( formControlName: _supervisorContactNumber, + showErrors: (control)=>control.touched, validationMessages: { 'mobileNumber': (object) => localizations.translate( i18.individualDetails @@ -470,6 +457,7 @@ class ComplaintsDetailsPageState extends LocalizedState { label: localizations.translate( i18.complaints.complaintDescription, ), + isRequired: true, child: DigitTextAreaFormInput( maxLine: 3, errorMessage: field.errorText, diff --git a/packages/complaints/lib/pages/registration/complaints_location.dart b/packages/complaints/lib/pages/registration/complaints_location.dart index e4f1dce35..430f8a420 100644 --- a/packages/complaints/lib/pages/registration/complaints_location.dart +++ b/packages/complaints/lib/pages/registration/complaints_location.dart @@ -4,9 +4,9 @@ import 'package:auto_route/auto_route.dart'; import 'package:complaints/router/complaints_router.gm.dart'; import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/scrollable_content.dart'; -import 'package:drift/remote.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -46,6 +46,7 @@ class ComplaintsLocationPageState final theme = Theme.of(context); final bloc = context.read(); final router = context.router; + final textTheme = theme.digitTextTheme(context); return Scaffold( body: ReactiveFormBuilder( @@ -145,7 +146,7 @@ class ComplaintsLocationPageState localizations.translate( i18.complaints.complaintsLocationLabel, ), - style: theme.textTheme.displayMedium, + style: textTheme.headingXl, ), ), ReactiveWrapperField( diff --git a/packages/complaints/lib/widgets/header/back_navigation_help_header.dart b/packages/complaints/lib/widgets/header/back_navigation_help_header.dart index 529fe20f9..e9c3a7e78 100644 --- a/packages/complaints/lib/widgets/header/back_navigation_help_header.dart +++ b/packages/complaints/lib/widgets/header/back_navigation_help_header.dart @@ -1,5 +1,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_back_button.dart'; import 'package:flutter/material.dart'; import '/blocs/localization/app_localization.dart'; @@ -33,22 +34,15 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { child: Row( children: [ if (showBackNavigation) - Flexible( - child: TextButton.icon( - style: TextButton.styleFrom( - foregroundColor: theme.colorScheme.onSurface, - padding: EdgeInsets.zero, - ), - onPressed: () { - context.router.maybePop(); - handleBack != null ? handleBack!() : null; - }, - icon: const Icon(Icons.arrow_left_sharp), - label: Text( - ComplaintsLocalization.of(context).translate( - i18.common.coreCommonBack, - ), - overflow: TextOverflow.ellipsis, + Align( + alignment: Alignment.topLeft, + child: Padding( + padding: EdgeInsets.all(spacer2), + child: BackNavigationButton( + handleBack: () { + context.router.maybePop(); + handleBack != null ? handleBack!() : null; + }, ), ), ), From fe478dba6d4aa067566efc4458f46b9f02f4e283 Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Tue, 3 Sep 2024 10:46:06 +0530 Subject: [PATCH 177/241] cherry picked complaints changes --- packages/complaints/example/pubspec.lock | 385 ++++++++++-------- .../lib/pages/complaints_acknowledgement.dart | 57 ++- .../pages/inbox/complaints_details_view.dart | 9 +- .../lib/pages/inbox/complaints_inbox.dart | 5 +- .../pages/inbox/complaints_inbox_filter.dart | 14 +- .../pages/inbox/complaints_inbox_search.dart | 1 - .../pages/inbox/complaints_inbox_sort.dart | 3 +- .../pages/registration/complaint_type.dart | 3 +- .../registration/complaints_details.dart | 5 +- .../registration/complaints_location.dart | 5 +- packages/complaints/pubspec.yaml | 20 +- 11 files changed, 278 insertions(+), 229 deletions(-) diff --git a/packages/complaints/example/pubspec.lock b/packages/complaints/example/pubspec.lock index 5c7feeae0..7fe2c9f5a 100644 --- a/packages/complaints/example/pubspec.lock +++ b/packages/complaints/example/pubspec.lock @@ -45,10 +45,10 @@ packages: dependency: transitive description: name: auto_route - sha256: a9001a90539ca3effc168f7e1029a5885c7326b9032c09ac895e303c1d137704 + sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 url: "https://pub.dev" source: hosted - version: "8.3.0" + version: "7.9.2" bloc: dependency: transitive description: @@ -101,10 +101,10 @@ packages: dependency: transitive description: name: build_runner - sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" + sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" url: "https://pub.dev" source: hosted - version: "2.4.11" + version: "2.4.9" build_runner_core: dependency: transitive description: @@ -133,26 +133,26 @@ packages: dependency: transitive description: name: camera - sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167" + sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" url: "https://pub.dev" source: hosted - version: "0.11.0+2" - camera_android_camerax: + version: "0.10.5+9" + camera_android: dependency: transitive description: - name: camera_android_camerax - sha256: "011be2ab0e5b3e3aa8094413fa890f8c5c5afd7cfdaef353a992047d4dab5780" + name: camera_android + sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 url: "https://pub.dev" source: hosted - version: "0.6.8+2" + version: "0.10.9+2" camera_avfoundation: dependency: transitive description: name: camera_avfoundation - sha256: "2e4c568f70e406ccb87376bc06b53d2f5bebaab71e2fbcc1a950e31449381bcf" + sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" url: "https://pub.dev" source: hosted - version: "0.9.17+5" + version: "0.9.13+10" camera_platform_interface: dependency: transitive description: @@ -165,10 +165,10 @@ packages: dependency: transitive description: name: camera_web - sha256: "595f28c89d1fb62d77c73c633193755b781c6d2e0ebcd8dc25b763b514e6ba8f" + sha256: b9235ec0a2ce949daec546f1f3d86f05c3921ed31c7d9ab6b7c03214d152fc2d url: "https://pub.dev" source: hosted - version: "0.3.5" + version: "0.3.4" characters: dependency: transitive description: @@ -177,14 +177,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" - charcode: - dependency: transitive - description: - name: charcode - sha256: fb0f1107cac15a5ea6ef0a6ef71a807b9e4267c713bb93e00e92d737cc8dbd8a - url: "https://pub.dev" - source: hosted - version: "1.4.0" checked_yaml: dependency: transitive description: @@ -223,7 +215,7 @@ packages: path: ".." relative: true source: path - version: "0.0.1-dev.2" + version: "0.0.1-dev.1" convert: dependency: transitive description: @@ -236,10 +228,10 @@ packages: dependency: transitive description: name: cross_file - sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" + sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e url: "https://pub.dev" source: hosted - version: "0.3.4+2" + version: "0.3.3+8" crypto: dependency: transitive description: @@ -248,14 +240,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" - csslib: - dependency: transitive - description: - name: csslib - sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" - url: "https://pub.dev" - source: hosted - version: "1.0.2" cupertino_icons: dependency: "direct main" description: @@ -288,23 +272,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" + digit_components: + dependency: "direct main" + description: + name: digit_components + sha256: "01320d4c72829045e789d1a56e23ff2bd85dad6a1831d27bd507a1acaceae17e" + url: "https://pub.dev" + source: hosted + version: "1.0.1" digit_data_model: - dependency: transitive + dependency: "direct main" description: name: digit_data_model - sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" + sha256: "14ebea5f17921081025963b379efd5e16d155dd920d5a42ab2f2f392afb649de" url: "https://pub.dev" source: hosted - version: "1.0.5-dev.1" + version: "1.0.4-dev.1" digit_ui_components: dependency: transitive description: - path: "flutter/digit-ui-components/digit_components" - ref: version_update - resolved-ref: ad45e31f470630b5876f38c0bc7744c5bf05b02b - url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" - source: git - version: "0.0.1+7" + name: digit_ui_components + sha256: aa46a59b17726208827e6d474f0f78f38c7c8c47fa5093106aea7e1b8042cc0c + url: "https://pub.dev" + source: hosted + version: "0.0.1+5" dio: dependency: transitive description: @@ -345,6 +336,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" + easy_stepper: + dependency: transitive + description: + name: easy_stepper + sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + url: "https://pub.dev" + source: hosted + version: "0.5.2+1" fake_async: dependency: transitive description: @@ -373,26 +372,26 @@ packages: dependency: transitive description: name: file_picker - sha256: "2ca051989f69d1b2ca012b2cf3ccf78c70d40144f0861ff2c063493f7c8c3d45" + sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 url: "https://pub.dev" source: hosted - version: "8.0.5" + version: "8.0.0+1" file_selector_linux: dependency: transitive description: name: file_selector_linux - sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" url: "https://pub.dev" source: hosted - version: "0.9.3+2" + version: "0.9.2+1" file_selector_macos: dependency: transitive description: name: file_selector_macos - sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc" + sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 url: "https://pub.dev" source: hosted - version: "0.9.4+2" + version: "0.9.4" file_selector_platform_interface: dependency: transitive description: @@ -405,10 +404,10 @@ packages: dependency: transitive description: name: file_selector_windows - sha256: "8f5d2f6590d51ecd9179ba39c64f722edc15226cc93dcc8698466ad36a4a85a4" + sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" url: "https://pub.dev" source: hosted - version: "0.9.3+3" + version: "0.9.3+2" fixnum: dependency: transitive description: @@ -423,7 +422,7 @@ packages: source: sdk version: "0.0.0" flutter_bloc: - dependency: transitive + dependency: "direct main" description: name: flutter_bloc sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a @@ -450,10 +449,10 @@ packages: dependency: transitive description: name: flutter_dropzone_platform_interface - sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" + sha256: b4e2df75364bab2f4c3ca32b87193267d786b6e158c3f345c3a1daeb911d82b9 url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.0.6" flutter_dropzone_web: dependency: transitive description: @@ -462,6 +461,62 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.13" + flutter_focus_watcher: + dependency: transitive + description: + name: flutter_focus_watcher + sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility: + dependency: transitive + description: + name: flutter_keyboard_visibility + sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" + url: "https://pub.dev" + source: hosted + version: "5.4.1" + flutter_keyboard_visibility_linux: + dependency: transitive + description: + name: flutter_keyboard_visibility_linux + sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_macos: + dependency: transitive + description: + name: flutter_keyboard_visibility_macos + sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_platform_interface: + dependency: transitive + description: + name: flutter_keyboard_visibility_platform_interface + sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_web: + dependency: transitive + description: + name: flutter_keyboard_visibility_web + sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_windows: + dependency: transitive + description: + name: flutter_keyboard_visibility_windows + sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 + url: "https://pub.dev" + source: hosted + version: "1.0.0" flutter_lints: dependency: "direct dev" description: @@ -479,10 +534,10 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda" + sha256: "8cf40eebf5dec866a6d1956ad7b4f7016e6c0cc69847ab946833b7d43743809f" url: "https://pub.dev" source: hosted - version: "2.0.22" + version: "2.0.19" flutter_spinkit: dependency: transitive description: @@ -512,6 +567,14 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_typeahead: + dependency: transitive + description: + name: flutter_typeahead + sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 + url: "https://pub.dev" + source: hosted + version: "4.8.0" flutter_web_plugins: dependency: transitive description: flutter @@ -521,10 +584,10 @@ packages: dependency: transitive description: name: fluttertoast - sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" + sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" url: "https://pub.dev" source: hosted - version: "8.2.8" + version: "8.2.5" freezed_annotation: dependency: transitive description: @@ -561,10 +624,10 @@ packages: dependency: transitive description: name: geolocator_apple - sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" + sha256: bc2aca02423ad429cb0556121f56e60360a2b7d694c8570301d06ea0c00732fd url: "https://pub.dev" source: hosted - version: "2.3.8+1" + version: "2.3.7" geolocator_platform_interface: dependency: transitive description: @@ -601,10 +664,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 + sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" url: "https://pub.dev" source: hosted - version: "6.2.1" + version: "4.0.5" graphs: dependency: transitive description: @@ -629,22 +692,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.3.1" - html: - dependency: transitive - description: - name: html - sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" - url: "https://pub.dev" - source: hosted - version: "0.15.5" http: dependency: transitive description: name: http - sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba url: "https://pub.dev" source: hosted - version: "1.2.2" + version: "1.2.0" http_multi_server: dependency: transitive description: @@ -665,34 +720,34 @@ packages: dependency: transitive description: name: image_picker - sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a" + sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.0.8" image_picker_android: dependency: transitive description: name: image_picker_android - sha256: "8c5abf0dcc24fe6e8e0b4a5c0b51a5cf30cefdf6407a3213dae61edc75a70f56" + sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" url: "https://pub.dev" source: hosted - version: "0.8.12+12" + version: "0.8.9+6" image_picker_for_web: dependency: transitive description: name: image_picker_for_web - sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83" + sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 url: "https://pub.dev" source: hosted - version: "3.0.6" + version: "3.0.2" image_picker_ios: dependency: transitive description: name: image_picker_ios - sha256: "4f0568120c6fcc0aaa04511cb9f9f4d29fc3d0139884b1d06be88dcec7641d6b" + sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 url: "https://pub.dev" source: hosted - version: "0.8.12+1" + version: "0.8.9+1" image_picker_linux: dependency: transitive description: @@ -713,10 +768,10 @@ packages: dependency: transitive description: name: image_picker_platform_interface - sha256: "9ec26d410ff46f483c5519c29c02ef0e02e13a543f882b152d4bfd2f06802f80" + sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b url: "https://pub.dev" source: hosted - version: "2.10.0" + version: "2.9.3" image_picker_windows: dependency: transitive description: @@ -729,10 +784,10 @@ packages: dependency: transitive description: name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" url: "https://pub.dev" source: hosted - version: "0.19.0" + version: "0.18.1" io: dependency: transitive description: @@ -773,30 +828,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.9.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" - url: "https://pub.dev" - source: hosted - version: "10.0.4" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" - url: "https://pub.dev" - source: hosted - version: "3.0.3" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://pub.dev" - source: hosted - version: "3.0.1" lints: dependency: transitive description: @@ -809,26 +840,26 @@ packages: dependency: transitive description: name: location - sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" + sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" url: "https://pub.dev" source: hosted - version: "6.0.2" + version: "5.0.3" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" + sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "3.1.2" location_web: dependency: transitive description: name: location_web - sha256: "49dda13d415c4603c5775a33fb22f575e0aa3f0ec2916644ddcd722db31ee884" + sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b url: "https://pub.dev" source: hosted - version: "5.0.2" + version: "4.2.0" logging: dependency: transitive description: @@ -841,34 +872,34 @@ packages: dependency: transitive description: name: lottie - sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" + sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 url: "https://pub.dev" source: hosted - version: "3.1.3" + version: "2.7.0" matcher: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.5.0" meta: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.10.0" mime: dependency: transitive description: @@ -909,14 +940,30 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" + package_info_plus: + dependency: transitive + description: + name: package_info_plus + sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + url: "https://pub.dev" + source: hosted + version: "5.0.1" + package_info_plus_platform_interface: + dependency: transitive + description: + name: package_info_plus_platform_interface + sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + url: "https://pub.dev" + source: hosted + version: "2.0.1" path: dependency: transitive description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.8.3" path_drawing: dependency: transitive description: @@ -1005,6 +1052,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" + pointer_interceptor: + dependency: transitive + description: + name: pointer_interceptor + sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 + url: "https://pub.dev" + source: hosted + version: "0.9.3+7" pool: dependency: transitive description: @@ -1037,14 +1092,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + reactive_flutter_typeahead: + dependency: transitive + description: + name: reactive_flutter_typeahead + sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 + url: "https://pub.dev" + source: hosted + version: "0.8.1" reactive_forms: dependency: transitive description: name: reactive_forms - sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" + sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" url: "https://pub.dev" source: hosted - version: "17.0.1" + version: "14.3.0" recase: dependency: transitive description: @@ -1053,6 +1116,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" + remove_emoji_input_formatter: + dependency: transitive + description: + name: remove_emoji_input_formatter + sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" + url: "https://pub.dev" + source: hosted + version: "0.0.1+1" shelf: dependency: transitive description: @@ -1142,10 +1213,10 @@ packages: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.6.1" timing: dependency: transitive description: @@ -1170,62 +1241,46 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" - universal_html: - dependency: transitive - description: - name: universal_html - sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" - url: "https://pub.dev" - source: hosted - version: "2.2.4" - universal_io: - dependency: transitive - description: - name: universal_io - sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" - url: "https://pub.dev" - source: hosted - version: "2.2.2" url_launcher: dependency: transitive description: name: url_launcher - sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" + sha256: "6ce1e04375be4eed30548f10a315826fd933c1e493206eab82eed01f438c8d2e" url: "https://pub.dev" source: hosted - version: "6.3.1" + version: "6.2.6" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79 + sha256: "17cd5e205ea615e2c6ea7a77323a11712dffa0720a8a90540db57a01347f9ad9" url: "https://pub.dev" source: hosted - version: "6.3.9" + version: "6.3.2" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626" + sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" url: "https://pub.dev" source: hosted - version: "6.3.2" + version: "6.2.4" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 url: "https://pub.dev" source: hosted - version: "3.2.1" + version: "3.1.1" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2" + sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" url: "https://pub.dev" source: hosted - version: "3.2.2" + version: "3.2.0" url_launcher_platform_interface: dependency: transitive description: @@ -1238,18 +1293,18 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" + sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b url: "https://pub.dev" source: hosted - version: "2.3.3" + version: "2.2.3" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4" + sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" url: "https://pub.dev" source: hosted - version: "3.1.3" + version: "3.1.2" uuid: dependency: transitive description: @@ -1298,14 +1353,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.0+2" - vm_service: - dependency: transitive - description: - name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" - url: "https://pub.dev" - source: hosted - version: "14.2.1" watcher: dependency: transitive description: @@ -1318,10 +1365,10 @@ packages: dependency: transitive description: name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "0.3.0" web_socket_channel: dependency: transitive description: @@ -1363,5 +1410,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <4.0.0" - flutter: ">=3.22.0" + dart: ">=3.2.0 <3.9.0" + flutter: ">=3.16.0" diff --git a/packages/complaints/lib/pages/complaints_acknowledgement.dart b/packages/complaints/lib/pages/complaints_acknowledgement.dart index 9d1e6b808..bafe4b5dc 100644 --- a/packages/complaints/lib/pages/complaints_acknowledgement.dart +++ b/packages/complaints/lib/pages/complaints_acknowledgement.dart @@ -1,5 +1,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/molecules/panel_cards.dart'; import 'package:flutter/material.dart'; @@ -24,28 +25,42 @@ class ComplaintsAcknowledgementPageState extends LocalizedState { @override Widget build(BuildContext context) { + final theme= Theme.of(context); + final textTheme =theme.digitTextTheme(context); return Scaffold( - body: PanelCard( - title: localizations.translate(i18.complaints.acknowledgementLabel), - type: PanelType.success, - additionalDetails: [ - Text("${localizations.translate( - i18.complaints.acknowledgementSubLabelMain)}" - "\n${localizations.translate( - i18.complaints.acknowledgementSubLabelSub)}"), - ], - description: localizations.translate( - i18.complaints.acknowledgementDescription, - ), - actions: [ - Button( - label: localizations.translate( - i18.complaints.acknowledgementAction), - onPressed: () => context.router.maybePop(), - type: ButtonType.primary, - size: ButtonSize.large, - ) - ], + body: Padding( + padding: const EdgeInsets.all(spacer4), + child: PanelCard( + title: localizations.translate(i18.complaints.acknowledgementLabel), + type: PanelType.success, + additionalDetails: [ + Text(localizations.translate( + i18.complaints.acknowledgementSubLabelMain) + , + style: textTheme.bodyS.copyWith( + color: theme.colorTheme.paper.primary + ), + ), + Text(localizations.translate( + i18.complaints.acknowledgementSubLabelSub), + style: textTheme.bodyS.copyWith( + color: theme.colorTheme.paper.primary + ), + ), + ], + description: localizations.translate( + i18.complaints.acknowledgementDescription, + ), + actions: [ + Button( + label: localizations.translate( + i18.complaints.acknowledgementAction), + onPressed: () => context.router.maybePop(), + type: ButtonType.primary, + size: ButtonSize.large, + ) + ], + ), ), ); } diff --git a/packages/complaints/lib/pages/inbox/complaints_details_view.dart b/packages/complaints/lib/pages/inbox/complaints_details_view.dart index 3effa5ebd..ffd3112ed 100644 --- a/packages/complaints/lib/pages/inbox/complaints_details_view.dart +++ b/packages/complaints/lib/pages/inbox/complaints_details_view.dart @@ -1,10 +1,8 @@ -import 'package:auto_route/annotations.dart'; import 'package:auto_route/auto_route.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; -import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:recase/recase.dart'; @@ -66,18 +64,19 @@ class ComplaintsDetailsViewPage extends StatelessWidget { ]), children: [ Padding( - padding: EdgeInsets.only(top: spacer4), + padding: const EdgeInsets.only(top: spacer4), child: DigitCard( cardType: CardType.primary, children: [ LabelValueList( - padding: EdgeInsets.only(top: spacer4, bottom: spacer4), + padding: const EdgeInsets.only(top: spacer4, bottom: spacer4), labelFlex: 6, items: [ LabelValuePair( label: localizations.translate(i18.complaints.inboxNumberLabel), value: complaint.serviceRequestId ?? - "${localizations.translate(i18.complaints.inboxNotGeneratedLabel)}\n${localizations.translate(i18.complaints.inboxSyncRequiredLabel)}" + "${localizations.translate(i18.complaints.inboxNotGeneratedLabel)}\n${localizations.translate(i18.complaints.inboxSyncRequiredLabel)}", + valueTextStyle: complaint.serviceRequestId !=null ? textTheme.bodyS.copyWith(color: theme.colorTheme.primary.primary1) : null , ), LabelValuePair( label: localizations.translate(i18.complaints.inboxTypeLabel), diff --git a/packages/complaints/lib/pages/inbox/complaints_inbox.dart b/packages/complaints/lib/pages/inbox/complaints_inbox.dart index ac99d1675..4802b4135 100644 --- a/packages/complaints/lib/pages/inbox/complaints_inbox.dart +++ b/packages/complaints/lib/pages/inbox/complaints_inbox.dart @@ -215,13 +215,14 @@ class _ComplaintsInboxItem extends StatelessWidget { padding: const EdgeInsets.only(top: spacer2, bottom: spacer2), child: LabelValueList( padding: const EdgeInsets.only(top: spacer2, bottom: spacer2), - labelFlex: 6, + labelFlex: 5, items: [ LabelValuePair( label: localizations .translate(i18.complaints.inboxNumberLabel), value: item.serviceRequestId ?? - "${localizations.translate(i18.complaints.inboxNotGeneratedLabel)}\n${localizations.translate(i18.complaints.inboxSyncRequiredLabel)}" + "${localizations.translate(i18.complaints.inboxNotGeneratedLabel)}\n${localizations.translate(i18.complaints.inboxSyncRequiredLabel)}", + valueTextStyle: item.serviceRequestId !=null ? textTheme.bodyS.copyWith(color: theme.colorTheme.primary.primary1) : null , ), LabelValuePair( label: localizations.translate(i18.complaints.inboxTypeLabel), diff --git a/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart b/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart index a6fc2440d..d43acd97c 100644 --- a/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart +++ b/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart @@ -4,7 +4,6 @@ import 'package:digit_data_model/models/entities/pgr_application_status.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; -import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; @@ -77,17 +76,6 @@ class ComplaintsInboxFilterPageState Row( mainAxisAlignment: MainAxisAlignment.end, children: [ - // TextButton( - // style: TextButton.styleFrom( - // foregroundColor: theme.colorScheme.onBackground, - // padding: EdgeInsets.zero, - // ), - // onPressed: () => context.router.maybePop(), - // child: const Row( - // children: [ - // Icon(Icons.close), - // ], - // ), Padding( padding: EdgeInsets.zero, child: Button( @@ -313,7 +301,7 @@ class ComplaintsInboxFilterPageState ), ), Padding( - padding: EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.only(top: spacer2), child: LabeledField( label: localizations .translate(i18.complaints.locality), diff --git a/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart b/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart index 5a8c6629a..279e5ddf1 100644 --- a/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart +++ b/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart @@ -2,7 +2,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; -import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; diff --git a/packages/complaints/lib/pages/inbox/complaints_inbox_sort.dart b/packages/complaints/lib/pages/inbox/complaints_inbox_sort.dart index c3c6f9ab3..58e1f4b9d 100644 --- a/packages/complaints/lib/pages/inbox/complaints_inbox_sort.dart +++ b/packages/complaints/lib/pages/inbox/complaints_inbox_sort.dart @@ -3,7 +3,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; -import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; @@ -119,7 +118,7 @@ class ComplaintsInboxSortPageState builder: (context, state) { return Padding( - padding: EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.only(top: spacer2), child: RadioList( radioButtons: sortOrders .asMap() diff --git a/packages/complaints/lib/pages/registration/complaint_type.dart b/packages/complaints/lib/pages/registration/complaint_type.dart index 6ef019cd8..6ad89b471 100644 --- a/packages/complaints/lib/pages/registration/complaint_type.dart +++ b/packages/complaints/lib/pages/registration/complaint_type.dart @@ -3,10 +3,8 @@ import 'package:auto_route/auto_route.dart'; import 'package:complaints/complaints.dart'; import 'package:complaints/router/complaints_router.gm.dart'; import 'package:digit_ui_components/digit_components.dart'; -import 'package:digit_ui_components/enum/app_enums.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; -import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; @@ -166,6 +164,7 @@ class ComplaintTypePageState extends LocalizedState { return DigitTextFormInput( charCount: true, errorMessage: field.errorText, + initialValue: field.value, onChange: (value) => form.control(_otherComplaintType).value=value, ); }), diff --git a/packages/complaints/lib/pages/registration/complaints_details.dart b/packages/complaints/lib/pages/registration/complaints_details.dart index 14162bd94..e4f3b071b 100644 --- a/packages/complaints/lib/pages/registration/complaints_details.dart +++ b/packages/complaints/lib/pages/registration/complaints_details.dart @@ -3,11 +3,9 @@ import 'package:auto_route/auto_route.dart'; import 'package:complaints/router/complaints_router.gm.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; -import 'package:digit_ui_components/enum/app_enums.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; -import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -406,6 +404,7 @@ class ComplaintsDetailsPageState extends LocalizedState { ), child: DigitTextFormInput( errorMessage: field.errorText, + initialValue: field.value, onChange: (value) => form.control(_supervisorName).value = value, ), @@ -432,6 +431,7 @@ class ComplaintsDetailsPageState extends LocalizedState { ), child: DigitTextFormInput( keyboardType: TextInputType.number, + initialValue: field.value, inputFormatters: [ FilteringTextInputFormatter.digitsOnly, ], @@ -459,6 +459,7 @@ class ComplaintsDetailsPageState extends LocalizedState { ), isRequired: true, child: DigitTextAreaFormInput( + initialValue: field.value, maxLine: 3, errorMessage: field.errorText, isRequired: true, diff --git a/packages/complaints/lib/pages/registration/complaints_location.dart b/packages/complaints/lib/pages/registration/complaints_location.dart index 430f8a420..ada15be00 100644 --- a/packages/complaints/lib/pages/registration/complaints_location.dart +++ b/packages/complaints/lib/pages/registration/complaints_location.dart @@ -6,7 +6,6 @@ import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; -import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -168,6 +167,7 @@ class ComplaintsLocationPageState ), child: DigitTextFormInput( errorMessage: field.errorText, + initialValue: field.value, onChange: (value) => form .control(_addressLine1Key) .value = value, @@ -185,6 +185,7 @@ class ComplaintsLocationPageState padding: const EdgeInsets.only(top: spacer2 / 2), child: DigitTextFormInput( maxLength: maxLength, + initialValue: field.value, onChange: (value) => form .control(_addressLine2Key) .value = value, @@ -201,6 +202,7 @@ class ComplaintsLocationPageState ), padding: const EdgeInsets.only(top: spacer2 / 2), child: DigitTextFormInput( + initialValue: field.value, onChange: (value) => form .control(_landmarkKey) .value = value, @@ -218,6 +220,7 @@ class ComplaintsLocationPageState padding: const EdgeInsets.only(top: spacer2 / 3.5), child: DigitTextFormInput( keyboardType: TextInputType.text, + initialValue: field.value, inputFormatters: [ FilteringTextInputFormatter.digitsOnly, ], diff --git a/packages/complaints/pubspec.yaml b/packages/complaints/pubspec.yaml index d66d6ac49..e97073e00 100644 --- a/packages/complaints/pubspec.yaml +++ b/packages/complaints/pubspec.yaml @@ -1,6 +1,6 @@ name: complaints description: This package offers filing complaints features, allowing users to file complaints. -version: 0.0.1-dev.2 +version: 0.0.1-dev.1 homepage: environment: @@ -10,34 +10,31 @@ environment: dependencies: flutter: sdk: flutter -# digit_components: ^1.0.0+2 digit_ui_components: - git: - url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: version_update - path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 - auto_route: ^8.3.0 - digit_data_model: ^1.0.5-dev.1 + auto_route: ^7.8.4 + digit_data_model: 1.0.4-dev.1 dart_mappable: ^4.2.0 group_radio_button: ^1.3.0 - reactive_forms: ^17.0.0 + reactive_forms: ^14.1.0 recase: ^4.1.0 flutter_dotenv: ^5.0.2 flutter_svg: ^2.0.8 path_provider: ^2.0.11 - intl: ^0.19.0 + intl: ^0.18.0 drift: ^2.0.0 dio: ^5.1.2 isar: ^3.0.5 + + dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^2.0.0 - auto_route_generator: ^8.0.0 + auto_route_generator: ^7.3.2 freezed: ^2.1.0+1 json_serializable: ^6.4.0 dart_mappable_builder: @@ -55,6 +52,7 @@ dev_dependencies: flutter: assets: - assets/icons/svg/ + - assets/animated_json/ # To add assets to your package, add an assets section, like this: # assets: From f65a80517c26770cb4df4f8599949471f711447c Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Mon, 23 Sep 2024 11:32:56 +0530 Subject: [PATCH 178/241] cherry picked complaints changes --- .../pubspec.lock | 851 ++++++++++++------ packages/complaints/example/pubspec.lock | 44 +- .../lib/pages/inbox/complaints_inbox.dart | 2 +- .../pages/inbox/complaints_inbox_filter.dart | 2 +- packages/complaints/pubspec.yaml | 2 +- 5 files changed, 627 insertions(+), 274 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 533d29701..5f8aa71e6 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -13,10 +13,10 @@ packages: dependency: transitive description: name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + sha256: "4eec93681221723a686ad580c2e7d960e1017cf1a4e0a263c2573c2c6b0bf5cd" url: "https://pub.dev" source: hosted - version: "1.3.35" + version: "1.3.25" analyzer: dependency: transitive description: @@ -37,10 +37,10 @@ packages: dependency: transitive description: name: ansicolor - sha256: "8bf17a8ff6ea17499e40a2d2542c2f481cd7615760c6d34065cb22bfd22e6880" + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.0.3" archive: dependency: transitive description: @@ -71,9 +71,9 @@ packages: path: "../../packages/attendance_management" relative: true source: path - version: "1.0.3" + version: "1.0.2" audioplayers: - dependency: transitive + dependency: "direct main" description: name: audioplayers sha256: c05c6147124cd63e725e861335a8b4d57300b80e6e92cea7c145c739223bbaef @@ -132,34 +132,34 @@ packages: dependency: "direct main" description: name: auto_route - sha256: a9001a90539ca3effc168f7e1029a5885c7326b9032c09ac895e303c1d137704 + sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 url: "https://pub.dev" source: hosted - version: "8.3.0" + version: "7.9.2" auto_route_generator: dependency: "direct dev" description: name: auto_route_generator - sha256: ba28133d3a3bf0a66772bcc98dade5843753cd9f1a8fb4802b842895515b67d3 + sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" url: "https://pub.dev" source: hosted - version: "8.0.0" + version: "7.3.2" battery_plus: dependency: "direct main" description: name: battery_plus - sha256: ca67f5457a473f132fec42a4445c8c19a98205c1bc20f8feaa5a7f50d42f750f + sha256: ba605aeafd6609cb5f8020c609a51941803a5fb2b6a7576f7c7eeeb52d29e750 url: "https://pub.dev" source: hosted - version: "6.0.1" + version: "5.0.3" battery_plus_platform_interface: dependency: transitive description: name: battery_plus_platform_interface - sha256: "942707f90e2f7481dcb178df02e22a9c6971b3562b848d6a1b8c7cff9f1a1fec" + sha256: e8342c0f32de4b1dfd0223114b6785e48e579bfc398da9471c9179b907fa4910 url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "2.0.1" bloc: dependency: transitive description: @@ -212,10 +212,10 @@ packages: dependency: transitive description: name: build_daemon - sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9" + sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" url: "https://pub.dev" source: hosted - version: "4.0.2" + version: "4.0.1" build_resolvers: dependency: transitive description: @@ -228,18 +228,18 @@ packages: dependency: "direct dev" description: name: build_runner - sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" + sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" url: "https://pub.dev" source: hosted - version: "2.4.11" + version: "2.4.9" build_runner_core: dependency: transitive description: name: build_runner_core - sha256: e3c79f69a64bdfcd8a776a3c28db4eb6e3fb5356d013ae5eb2e52007706d5dbe + sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" url: "https://pub.dev" source: hosted - version: "7.3.1" + version: "7.3.0" built_collection: dependency: transitive description: @@ -257,45 +257,45 @@ packages: source: hosted version: "8.9.2" camera: - dependency: transitive + dependency: "direct main" description: name: camera - sha256: "2170a943dcb67be2af2c6bcda8775e74b41d4c02d6a4eb10bdc832ee185c4eea" + sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" url: "https://pub.dev" source: hosted - version: "0.11.0+1" - camera_android_camerax: + version: "0.10.5+9" + camera_android: dependency: transitive description: - name: camera_android_camerax - sha256: "7d84815edbb8304b51c10deba3c20f44eef80aa46ff156ec45428ed16600b49a" + name: camera_android + sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 url: "https://pub.dev" source: hosted - version: "0.6.5+5" + version: "0.10.9+2" camera_avfoundation: dependency: transitive description: name: camera_avfoundation - sha256: "7d021e8cd30d9b71b8b92b4ad669e80af432d722d18d6aac338572754a786c15" + sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" url: "https://pub.dev" source: hosted - version: "0.9.16" + version: "0.9.13+10" camera_platform_interface: dependency: transitive description: name: camera_platform_interface - sha256: a250314a48ea337b35909a4c9d5416a208d736dcb01d0b02c6af122be66660b0 + sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 url: "https://pub.dev" source: hosted - version: "2.7.4" + version: "2.8.0" camera_web: dependency: transitive description: name: camera_web - sha256: "9e9aba2fbab77ce2472924196ff8ac4dd8f9126c4f9a3096171cd1d870d6b26c" + sha256: b9235ec0a2ce949daec546f1f3d86f05c3921ed31c7d9ab6b7c03214d152fc2d url: "https://pub.dev" source: hosted - version: "0.3.3" + version: "0.3.4" characters: dependency: transitive description: @@ -342,7 +342,7 @@ packages: path: "../../packages/closed_household" relative: true source: path - version: "1.0.2" + version: "1.0.1" code_builder: dependency: transitive description: @@ -359,22 +359,29 @@ packages: url: "https://pub.dev" source: hosted version: "1.18.0" + complaints: + dependency: "direct main" + description: + path: "../../packages/complaints" + relative: true + source: path + version: "0.0.1-dev.1" connectivity_plus: dependency: "direct main" description: name: connectivity_plus - sha256: db7a4e143dc72cc3cb2044ef9b052a7ebfe729513e6a82943bc3526f784365b8 + sha256: "224a77051d52a11fbad53dd57827594d3bd24f945af28bd70bab376d68d437f0" url: "https://pub.dev" source: hosted - version: "6.0.3" + version: "5.0.2" connectivity_plus_platform_interface: dependency: transitive description: name: connectivity_plus_platform_interface - sha256: b6a56efe1e6675be240de39107281d4034b64ac23438026355b4234042a35adb + sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "1.2.4" convert: dependency: transitive description: @@ -387,18 +394,18 @@ packages: dependency: transitive description: name: coverage - sha256: "3945034e86ea203af7a056d98e98e42a5518fff200d6e8e6647e1886b07e936e" + sha256: "595a29b55ce82d53398e1bcc2cba525d7bd7c59faeb2d2540e9d42c390cfeeeb" url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.6.4" cross_file: dependency: transitive description: name: cross_file - sha256: "55d7b444feb71301ef6b8838dbc1ae02e63dd48c8773f3810ff53bb1e2945b32" + sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e url: "https://pub.dev" source: hosted - version: "0.3.4+1" + version: "0.3.3+8" crypto: dependency: transitive description: @@ -407,6 +414,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" + url: "https://pub.dev" + source: hosted + version: "1.0.0" cupertino_icons: dependency: "direct main" description: @@ -426,11 +441,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - name: dart_mappable_builder - sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e - url: "https://pub.dev" - source: hosted - version: "4.2.3" + path: "../../packages/dart_mappable_builder" + relative: true + source: path + version: "4.2.0" dart_style: dependency: transitive description: @@ -467,18 +481,18 @@ packages: dependency: "direct main" description: name: device_info_plus - sha256: eead12d1a1ed83d8283ab4c2f3fca23ac4082f29f25f29dff0f758f57d06ec91 + sha256: "77f757b789ff68e4eaf9c56d1752309bd9f7ad557cb105b938a7f8eb89e59110" url: "https://pub.dev" source: hosted - version: "10.1.0" + version: "9.1.2" device_info_plus_platform_interface: dependency: transitive description: name: device_info_plus_platform_interface - sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64 + sha256: "282d3cf731045a2feb66abfe61bbc40870ae50a3ed10a4d3d217556c35c8c2ba" url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "7.0.1" diff_match_patch: dependency: transitive description: @@ -493,21 +507,22 @@ packages: path: "../../packages/digit_components" relative: true source: path - version: "1.0.2" + version: "1.0.1" digit_data_model: dependency: "direct main" description: path: "../../packages/digit_data_model" relative: true source: path - version: "1.0.4" + version: "1.0.4-dev.1" digit_dss: dependency: "direct main" description: - path: "../../packages/digit_dss" - relative: true - source: path - version: "1.0.2" + name: digit_dss + sha256: "32e2173ae52e7fd9fb53fa435fb21466248029366584f44a0c0f2c6836267a98" + url: "https://pub.dev" + source: hosted + version: "1.0.1" digit_firebase_services: dependency: "direct main" description: @@ -521,22 +536,38 @@ packages: path: "../../packages/digit_scanner" relative: true source: path - version: "1.0.4" + version: "1.0.3" digit_showcase: dependency: "direct main" description: path: "../../packages/digit_showcase" relative: true source: path - version: "1.0.1" + version: "1.0.0" + digit_ui_components: + dependency: transitive + description: + name: digit_ui_components + sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae + url: "https://pub.dev" + source: hosted + version: "0.0.1+7" dio: dependency: "direct main" description: name: dio - sha256: "11e40df547d418cc0c4900a9318b26304e665da6fa4755399a9ff9efd09034b5" + sha256: "0dfb6b6a1979dac1c1245e17cef824d7b452ea29bd33d3467269f9bef3715fb0" + url: "https://pub.dev" + source: hosted + version: "5.6.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac" url: "https://pub.dev" source: hosted - version: "5.4.3+1" + version: "1.0.1" disable_battery_optimization: dependency: "direct main" description: @@ -545,22 +576,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" - disk_space_update: + disk_space: dependency: "direct main" description: - name: disk_space_update - sha256: "65e19384334779537f7ec83a939c5991bf56bfe016672335ea47d62374f08a3c" + name: disk_space + sha256: fb27eb2d09ac04784f45b95b1355538b2355c76a081eeaa8439d1a5cfa263888 + url: "https://pub.dev" + source: hosted + version: "0.2.1" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" url: "https://pub.dev" source: hosted - version: "0.0.2" + version: "2.1.0" drift: dependency: "direct main" description: name: drift - sha256: "6acedc562ffeed308049f78fb1906abad3d65714580b6745441ee6d50ec564cd" + sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 url: "https://pub.dev" source: hosted - version: "2.18.0" + version: "2.15.0" drift_db_viewer: dependency: "direct main" description: @@ -573,18 +612,18 @@ packages: dependency: "direct dev" description: name: drift_dev - sha256: d9b020736ea85fff1568699ce18b89fabb3f0f042e8a7a05e84a3ec20d39acde + sha256: c037d9431b6f8dc633652b1469e5f53aaec6e4eb405ed29dd232fa888ef10d88 url: "https://pub.dev" source: hosted - version: "2.18.0" + version: "2.15.0" easy_stepper: dependency: transitive description: name: easy_stepper - sha256: d09e974ec9148480072f8a7d3b0779dfdbc1a3ec1ff7daa7fbda95b0c1fe7453 + sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" url: "https://pub.dev" source: hosted - version: "0.8.5" + version: "0.5.2+1" equatable: dependency: transitive description: @@ -613,58 +652,98 @@ packages: dependency: transitive description: name: ffi - sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" + sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.0" file: dependency: transitive description: name: file - sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" + source: hosted + version: "6.1.4" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 + url: "https://pub.dev" + source: hosted + version: "8.0.0+1" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + url: "https://pub.dev" + source: hosted + version: "0.9.2+1" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 + url: "https://pub.dev" + source: hosted + version: "0.9.4" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "0.9.3+2" firebase_core: dependency: transitive description: name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + sha256: "53316975310c8af75a96e365f9fccb67d1c544ef0acdbf0d88bbe30eedd1c4f9" url: "https://pub.dev" source: hosted - version: "2.32.0" + version: "2.27.0" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface - sha256: c437ae5d17e6b5cc7981cf6fd458a5db4d12979905f9aafd1fea930428a9fe63 + sha256: f7d7180c7f99babd4b4c517754d41a09a4943a0f7a69b65c894ca5c68ba66315 url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.2.1" firebase_core_web: dependency: transitive description: name: firebase_core_web - sha256: "22fcb352744908224fc7be3caae254836099786acfe5df6e9fe901e9c2575a41" + sha256: c8e1d59385eee98de63c92f961d2a7062c5d9a65e7f45bdc7f1b0b205aab2492 url: "https://pub.dev" source: hosted - version: "2.17.1" + version: "2.11.5" firebase_crashlytics: dependency: transitive description: name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + sha256: c4f1b723d417bc9c4774810e774ff91df8fb0032d33fb2888b2c887e865581b8 url: "https://pub.dev" source: hosted - version: "3.5.7" + version: "3.4.18" firebase_crashlytics_platform_interface: dependency: transitive description: name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + sha256: c5a11fca3df76a98e3fa68fde8b10a08aacb9a7639f619fbfd4dad6c67a08643 url: "https://pub.dev" source: hosted - version: "3.6.35" + version: "3.6.25" fixnum: dependency: transitive description: @@ -682,42 +761,42 @@ packages: dependency: "direct main" description: name: flutter_background_service - sha256: "94d9a143852729140e17254a53769383b03738cd92b6e588a8762003e6cd9dd9" + sha256: d32f078ec57647c9cfd6e1a8da9297f7d8f021d4dcc204a35aaad2cdbfe255f0 url: "https://pub.dev" source: hosted - version: "5.0.5" + version: "5.0.10" flutter_background_service_android: dependency: transitive description: name: flutter_background_service_android - sha256: "30863ebafd8214b8e76d5e5c9f27887dc5cc303fcf3e89f71534f621fc486782" + sha256: "39da42dddf877beeef82bc2583130d8bedb4d0765e99ca9e7b4a32e8c6abd239" url: "https://pub.dev" source: hosted - version: "6.2.2" + version: "6.2.7" flutter_background_service_ios: dependency: transitive description: name: flutter_background_service_ios - sha256: ab73657535876e16abc89e40f924df3e92ad3dee83f64d187081417e824709ed + sha256: "6037ffd45c4d019dab0975c7feb1d31012dd697e25edc05505a4a9b0c7dc9fba" url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.0.3" flutter_background_service_platform_interface: dependency: transitive description: name: flutter_background_service_platform_interface - sha256: cd5720ff5b051d551a4734fae16683aace779bd0425e8d3f15d84a0cdcc2d8d9 + sha256: ca74aa95789a8304f4d3f57f07ba404faa86bed6e415f83e8edea6ad8b904a41 url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.1.2" flutter_bloc: dependency: "direct main" description: name: flutter_bloc - sha256: f0ecf6e6eb955193ca60af2d5ca39565a86b8a142452c5b24d96fb477428f4d2 + sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a url: "https://pub.dev" source: hosted - version: "8.1.5" + version: "8.1.6" flutter_dotenv: dependency: "direct main" description: @@ -731,6 +810,30 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: b4e2df75364bab2f4c3ca32b87193267d786b6e158c3f345c3a1daeb911d82b9 + url: "https://pub.dev" + source: hosted + version: "2.0.6" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" flutter_focus_watcher: dependency: transitive description: @@ -799,34 +902,34 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" + sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "3.0.2" flutter_local_notifications: dependency: "direct main" description: name: flutter_local_notifications - sha256: "40e6fbd2da7dcc7ed78432c5cdab1559674b4af035fddbfb2f9a8f9c2112fcef" + sha256: "55b9b229307a10974b26296ff29f2e132256ba4bd74266939118eaefa941cb00" url: "https://pub.dev" source: hosted - version: "17.1.2" + version: "16.3.3" flutter_local_notifications_linux: dependency: transitive description: name: flutter_local_notifications_linux - sha256: "33f741ef47b5f63cc7f78fe75eeeac7e19f171ff3c3df054d84c1e38bedb6a03" + sha256: c49bd06165cad9beeb79090b18cd1eb0296f4bf4b23b84426e37dd7c027fc3af url: "https://pub.dev" source: hosted - version: "4.0.0+1" + version: "4.0.1" flutter_local_notifications_platform_interface: dependency: transitive description: name: flutter_local_notifications_platform_interface - sha256: "340abf67df238f7f0ef58f4a26d2a83e1ab74c77ab03cd2b2d5018ac64db30b7" + sha256: "85f8d07fe708c1bdcf45037f2c0109753b26ae077e9d9e899d55971711a4ea66" url: "https://pub.dev" source: hosted - version: "7.1.0" + version: "7.2.0" flutter_localizations: dependency: "direct main" description: flutter @@ -836,10 +939,10 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: c6b0b4c05c458e1c01ad9bcc14041dd7b1f6783d487be4386f793f47a8a4d03e + sha256: "8cf40eebf5dec866a6d1956ad7b4f7016e6c0cc69847ab946833b7d43743809f" url: "https://pub.dev" source: hosted - version: "2.0.20" + version: "2.0.19" flutter_portal: dependency: "direct main" description: @@ -904,6 +1007,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" flutter_svg: dependency: "direct main" description: @@ -931,13 +1042,13 @@ packages: source: sdk version: "0.0.0" fluttertoast: - dependency: transitive + dependency: "direct main" description: name: fluttertoast - sha256: "7eae679e596a44fdf761853a706f74979f8dd3cd92cf4e23cae161fda091b847" + sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" url: "https://pub.dev" source: hosted - version: "8.2.6" + version: "8.2.5" formula_parser: dependency: transitive description: @@ -958,23 +1069,71 @@ packages: dependency: "direct main" description: name: freezed_annotation - sha256: c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d + sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.4" frontend_server_client: dependency: transitive description: name: frontend_server_client - sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "3.2.0" fuchsia_remote_debug_protocol: dependency: transitive description: flutter source: sdk version: "0.0.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + url: "https://pub.dev" + source: hosted + version: "4.3.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: bc2aca02423ad429cb0556121f56e60360a2b7d694c8570301d06ea0c00732fd + url: "https://pub.dev" + source: hosted + version: "2.3.7" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -987,26 +1146,26 @@ packages: dependency: transitive description: name: google_fonts - sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 + sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" url: "https://pub.dev" source: hosted - version: "6.2.1" + version: "4.0.5" google_mlkit_barcode_scanning: - dependency: transitive + dependency: "direct main" description: name: google_mlkit_barcode_scanning - sha256: f1a2a39cf1730b9a5e2784a07efa1ca5bfdfdde6aa00b193b3f8cd1953c638ec + sha256: "965183a8cd5cef8477ceea5dbdf29c34a739cf0cfbf1bdad54cd3f9f1807afe5" url: "https://pub.dev" source: hosted - version: "0.12.0" + version: "0.10.0" google_mlkit_commons: dependency: transitive description: name: google_mlkit_commons - sha256: "27d626c66a181351a953eba5b6ff1ff123aadb891b4dab085b292118f039d6ac" + sha256: "046586b381cdd139f7f6a05ad6998f7e339d061bd70158249907358394b5f496" url: "https://pub.dev" source: hosted - version: "0.7.1" + version: "0.6.1" graphs: dependency: transitive description: @@ -1016,7 +1175,7 @@ packages: source: hosted version: "2.3.1" group_radio_button: - dependency: transitive + dependency: "direct main" description: name: group_radio_button sha256: "204de8d16b224be7fc72dade0c3afd410ff5a34417d89f74f0fd8be7a8c2b4d6" @@ -1024,13 +1183,13 @@ packages: source: hosted version: "1.3.0" gs1_barcode_parser: - dependency: transitive + dependency: "direct main" description: name: gs1_barcode_parser - sha256: "9aaff47bdab7177deaf9248cc861ef41cf611d3f828498cb40b64bedcbf53391" + sha256: ff171bc40038de3f7178fbc32eaf9eebc3d35a3c4c00bb0281fe4a976d853a42 url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.1.0" horizontal_data_table: dependency: transitive description: @@ -1043,10 +1202,10 @@ packages: dependency: transitive description: name: hrk_batteries - sha256: "8ecfdee8268d480a700153a006f7c622c922fbfba4d8f576438c8c41ea9efdf2" + sha256: "437324250c9b157654c9bb6c374170b8fa940f0f11dd9d019833e2731689272b" url: "https://pub.dev" source: hosted - version: "0.9.2" + version: "2.0.0" hrk_flutter_test_batteries: dependency: "direct dev" description: @@ -1059,18 +1218,26 @@ packages: dependency: transitive description: name: hrk_logging - sha256: "7ea3d02ed46f19533a8cae075cafe636757548a300a0e404193f6dd142c024b5" + sha256: "2e6501f4b78439bec4c367a94b14f792fd17fe1c94f18d903086c7b8a48402f5" url: "https://pub.dev" source: hosted - version: "0.1.3" + version: "0.3.1" + html: + dependency: transitive + description: + name: html + sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" + url: "https://pub.dev" + source: hosted + version: "0.15.4" http: dependency: transitive description: name: http - sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.0" http_multi_server: dependency: transitive description: @@ -1095,6 +1262,70 @@ packages: url: "https://pub.dev" source: hosted version: "4.2.0" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" + url: "https://pub.dev" + source: hosted + version: "1.0.8" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" + url: "https://pub.dev" + source: hosted + version: "0.8.9+6" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 + url: "https://pub.dev" + source: hosted + version: "0.8.9+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b + url: "https://pub.dev" + source: hosted + version: "2.9.3" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" integration_test: dependency: "direct dev" description: flutter @@ -1104,17 +1335,17 @@ packages: dependency: "direct main" description: name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" url: "https://pub.dev" source: hosted - version: "0.19.0" + version: "0.18.1" inventory_management: dependency: "direct main" description: path: "../../packages/inventory_management" relative: true source: path - version: "1.0.4" + version: "1.0.3+1" io: dependency: transitive description: @@ -1171,62 +1402,38 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" - url: "https://pub.dev" - source: hosted - version: "10.0.4" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" - url: "https://pub.dev" - source: hosted - version: "3.0.3" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://pub.dev" - source: hosted - version: "3.0.1" lints: dependency: transitive description: name: lints - sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" + sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "3.0.0" location: dependency: "direct main" description: name: location - sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" + sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" url: "https://pub.dev" source: hosted - version: "6.0.2" + version: "5.0.3" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" + sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "3.1.2" location_web: dependency: transitive description: name: location_web - sha256: "15ad7b4c8a9f55abee513373755e093a40c04d7e24fc1b4f89676fe99523d034" + sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "4.2.0" logging: dependency: transitive description: @@ -1239,26 +1446,26 @@ packages: dependency: transitive description: name: lottie - sha256: "6a24ade5d3d918c306bb1c21a6b9a04aab0489d51a2582522eea820b4093b62b" + sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "2.7.0" matcher: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.5.0" material_design_icons_flutter: dependency: "direct main" description: @@ -1271,26 +1478,26 @@ packages: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.10.0" mime: dependency: transitive description: name: mime - sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.6" mocktail: dependency: "direct dev" description: name: mocktail - sha256: c4b5007d91ca4f67256e720cb1b6d704e79a510183a12fa551021f652577dce6 + sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" nested: dependency: "direct main" description: @@ -1335,26 +1542,34 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: b93d8b4d624b4ea19b0a5a208b2d6eff06004bc3ce74c06040b120eeadd00ce0 + sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" url: "https://pub.dev" source: hosted - version: "8.0.0" + version: "5.0.1" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: f49918f3433a3146047372f9d4f1f847511f2acd5cd030e1f44fe5a50036b70e + sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "2.0.1" path: dependency: "direct main" description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + url: "https://pub.dev" + source: hosted + version: "1.8.3" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.0.1" path_parsing: dependency: transitive description: @@ -1367,26 +1582,26 @@ packages: dependency: "direct main" description: name: path_provider - sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "9c96da072b421e98183f9ea7464898428e764bc0ce5567f27ec8693442e72514" + sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d url: "https://pub.dev" source: hosted - version: "2.2.5" + version: "2.2.4" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16 + sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.3.2" path_provider_linux: dependency: transitive description: @@ -1407,10 +1622,18 @@ packages: dependency: transitive description: name: path_provider_windows - sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.3.0" + pedantic: + dependency: transitive + description: + name: pedantic + sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" + url: "https://pub.dev" + source: hosted + version: "1.11.1" petitparser: dependency: transitive description: @@ -1423,10 +1646,10 @@ packages: dependency: transitive description: name: platform - sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" + sha256: ae68c7bfcd7383af3629daafb32fb4e8681c7154428da4febcff06200585f102 url: "https://pub.dev" source: hosted - version: "3.1.4" + version: "3.1.2" plugin_platform_interface: dependency: transitive description: @@ -1439,10 +1662,10 @@ packages: dependency: "direct main" description: name: pluto_grid - sha256: "1d4cd9d2652742b556aa9b3230cc64672a3f63c34a9acc80fef794ab36ad903b" + sha256: e77c34a33dd9d74abbe20ba1df96474dded150dd042c7f7495be1bc2c26bd37f url: "https://pub.dev" source: hosted - version: "8.0.0" + version: "7.0.2" pointer_interceptor: dependency: transitive description: @@ -1463,18 +1686,18 @@ packages: dependency: "direct main" description: name: pretty_dio_logger - sha256: "00b80053063935cf9a6190da344c5373b9d0e92da4c944c878ff2fbef0ef6dc2" + sha256: "36f2101299786d567869493e2f5731de61ce130faa14679473b26905a92b6407" url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.4.0" process: dependency: transitive description: name: process - sha256: "21e54fd2faf1b5bdd5102afd25012184a6793927648ea81eea80552ac9405b32" + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" url: "https://pub.dev" source: hosted - version: "5.0.2" + version: "4.2.4" provider: dependency: "direct main" description: @@ -1519,18 +1742,18 @@ packages: dependency: transitive description: name: reactive_flutter_typeahead - sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a + sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "0.8.1" reactive_forms: dependency: "direct main" description: name: reactive_forms - sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" + sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" url: "https://pub.dev" source: hosted - version: "17.0.1" + version: "14.3.0" recase: dependency: "direct main" description: @@ -1542,17 +1765,18 @@ packages: referral_reconciliation: dependency: "direct main" description: - path: "../../packages/referral_reconciliation" - relative: true - source: path - version: "1.0.3" + name: referral_reconciliation + sha256: "80d5b93164e4f8337fa757fcb75a1e85b88ffbb760e731ca24496a0cae2aef38" + url: "https://pub.dev" + source: hosted + version: "1.0.2+1" registration_delivery: dependency: "direct main" description: path: "../../packages/registration_delivery" relative: true source: path - version: "1.0.4" + version: "1.0.3" remove_emoji_input_formatter: dependency: transitive description: @@ -1581,50 +1805,50 @@ packages: dependency: transitive description: name: shared_preferences_android - sha256: "93d0ec9dd902d85f326068e6a899487d1f65ffcd5798721a95330b26c8131577" + sha256: "1ee8bf911094a1b592de7ab29add6f826a7331fb854273d55918693d5364a1f2" url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.2.2" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "0a8a893bf4fd1152f93fec03a415d11c27c74454d96e2318a7ac38dd18683ab7" + sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.3.5" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" + sha256: "2ba0510d3017f91655b7543e9ee46d48619de2a2af38e5c790423f7007c7ccc1" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.0" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b" + sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.1" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a" + sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21" url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.2.2" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" + sha256: "398084b47b7f92110683cac45c6dc4aae853db47e470e5ddcd52cab7f7196ab2" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.0" shelf: dependency: transitive description: @@ -1702,38 +1926,54 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" - sprintf: + speech_to_text: + dependency: "direct main" + description: + name: speech_to_text + sha256: "57fef1d41bdebe298e84842c89bb4ac91f31cdbec7830c8cb1fc6b91d03abd42" + url: "https://pub.dev" + source: hosted + version: "6.6.0" + speech_to_text_macos: + dependency: transitive + description: + name: speech_to_text_macos + sha256: e685750f7542fcaa087a5396ee471e727ec648bf681f4da83c84d086322173f6 + url: "https://pub.dev" + source: hosted + version: "1.1.0" + speech_to_text_platform_interface: dependency: transitive description: - name: sprintf - sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + name: speech_to_text_platform_interface + sha256: a0df1a907091ea09880077dc25aae02af9f79811264e6e97ddb08639b7f771c2 url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "2.2.0" sqlite3: dependency: transitive description: name: sqlite3 - sha256: b384f598b813b347c5a7e5ffad82cbaff1bec3d1561af267041e66f6f0899295 + sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" url: "https://pub.dev" source: hosted - version: "2.4.3" + version: "2.4.0" sqlite3_flutter_libs: dependency: "direct main" description: name: sqlite3_flutter_libs - sha256: "9f89a7e7dc36eac2035808427eba1c3fbd79e59c3a22093d8dace6d36b1fe89e" + sha256: "62bbb4073edbcdf53f40c80775f33eea01d301b7b81417e5b3fb7395416258c1" url: "https://pub.dev" source: hosted - version: "0.5.23" + version: "0.5.24" sqlparser: dependency: transitive description: name: sqlparser - sha256: ade9a67fd70d0369329ed3373208de7ebd8662470e8c396fc8d0d60f9acdfc9f + sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" url: "https://pub.dev" source: hosted - version: "0.36.0" + version: "0.34.1" stack_trace: dependency: transitive description: @@ -1751,7 +1991,7 @@ packages: source: hosted version: "2.1.2" stream_transform: - dependency: transitive + dependency: "direct main" description: name: stream_transform sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" @@ -1766,14 +2006,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" - super_annotations: - dependency: "direct main" - description: - name: super_annotations - sha256: "6ccb4a2066de1ae3d1869184350b641b0b66fa6b98e158abeffdc9c47a3bf49c" - url: "https://pub.dev" - source: hosted - version: "0.8.1" sync_http: dependency: transitive description: @@ -1782,13 +2014,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.3.1" - sync_service: - dependency: "direct main" - description: - path: "../../packages/sync_service" - relative: true - source: path - version: "0.0.1-dev.1" synchronized: dependency: transitive description: @@ -1809,26 +2034,26 @@ packages: dependency: transitive description: name: test - sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" + sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f url: "https://pub.dev" source: hosted - version: "1.25.2" + version: "1.24.9" test_api: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.6.1" test_core: dependency: transitive description: name: test_core - sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" + sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.5.9" time: dependency: transitive description: @@ -1841,10 +2066,10 @@ packages: dependency: transitive description: name: timezone - sha256: a6ccda4a69a442098b602c44e61a1e2b4bf6f5516e875bbf0f427d5df14745d5 + sha256: "2236ec079a174ce07434e89fcd3fcda430025eb7692244139a9cf54fdcf1fc7d" url: "https://pub.dev" source: hosted - version: "0.9.3" + version: "0.9.4" timing: dependency: transitive description: @@ -1869,6 +2094,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" upower: dependency: transitive description: @@ -1877,14 +2118,78 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.0" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" + url: "https://pub.dev" + source: hosted + version: "6.3.0" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "17cd5e205ea615e2c6ea7a77323a11712dffa0720a8a90540db57a01347f9ad9" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" + url: "https://pub.dev" + source: hosted + version: "6.2.4" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 + url: "https://pub.dev" + source: hosted + version: "3.1.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + url: "https://pub.dev" + source: hosted + version: "2.2.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" + url: "https://pub.dev" + source: hosted + version: "3.1.2" uuid: dependency: "direct main" description: name: uuid - sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8" + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" url: "https://pub.dev" source: hosted - version: "4.4.0" + version: "3.0.7" vector_graphics: dependency: transitive description: @@ -1917,14 +2222,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" vm_service: dependency: transitive description: name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + sha256: c538be99af830f478718b51630ec1b6bee5e74e52c8a802d328d9e71d35d2583 url: "https://pub.dev" source: hosted - version: "14.2.1" + version: "11.10.0" watcher: dependency: transitive description: @@ -1937,26 +2250,26 @@ packages: dependency: transitive description: name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "0.3.0" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: "58c6666b342a38816b2e7e50ed0f1e261959630becd4c879c4f26bfa14aa5a42" + sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b url: "https://pub.dev" source: hosted - version: "2.4.5" + version: "2.4.0" webdriver: dependency: transitive description: name: webdriver - sha256: "003d7da9519e1e5f329422b36c4dcdf18d7d2978d1ba099ea4e45ba490ed845e" + sha256: "3c923e918918feeb90c4c9fdf1fe39220fa4c0e8e2c0fffaded174498ef86c49" url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.2" webkit_inspection_protocol: dependency: transitive description: @@ -1969,18 +2282,18 @@ packages: dependency: transitive description: name: win32 - sha256: a79dbe579cb51ecd6d30b17e0cae4e0ea15e2c0e66f69ad4198f22a6789e94f4 + sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" url: "https://pub.dev" source: hosted - version: "5.5.1" + version: "5.2.0" win32_registry: dependency: transitive description: name: win32_registry - sha256: "10589e0d7f4e053f2c61023a31c9ce01146656a70b7b7f0828c0b46d7da2a9bb" + sha256: "41fd8a189940d8696b1b810efb9abcf60827b6cbfab90b0c43e8439e3a39d85a" url: "https://pub.dev" source: hosted - version: "1.1.3" + version: "1.1.2" workmanager: dependency: "direct main" description: @@ -2022,5 +2335,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <4.0.0" - flutter: ">=3.22.0" + dart: ">=3.2.3 <3.9.0" + flutter: ">=3.16.0" diff --git a/packages/complaints/example/pubspec.lock b/packages/complaints/example/pubspec.lock index 7fe2c9f5a..67b469c03 100644 --- a/packages/complaints/example/pubspec.lock +++ b/packages/complaints/example/pubspec.lock @@ -177,6 +177,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + charcode: + dependency: transitive + description: + name: charcode + sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 + url: "https://pub.dev" + source: hosted + version: "1.3.1" checked_yaml: dependency: transitive description: @@ -240,6 +248,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" + url: "https://pub.dev" + source: hosted + version: "1.0.0" cupertino_icons: dependency: "direct main" description: @@ -292,10 +308,10 @@ packages: dependency: transitive description: name: digit_ui_components - sha256: aa46a59b17726208827e6d474f0f78f38c7c8c47fa5093106aea7e1b8042cc0c + sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae url: "https://pub.dev" source: hosted - version: "0.0.1+5" + version: "0.0.1+7" dio: dependency: transitive description: @@ -692,6 +708,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.3.1" + html: + dependency: transitive + description: + name: html + sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" + url: "https://pub.dev" + source: hosted + version: "0.15.4" http: dependency: transitive description: @@ -1241,6 +1265,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" url_launcher: dependency: transitive description: diff --git a/packages/complaints/lib/pages/inbox/complaints_inbox.dart b/packages/complaints/lib/pages/inbox/complaints_inbox.dart index 4802b4135..ca7834fa8 100644 --- a/packages/complaints/lib/pages/inbox/complaints_inbox.dart +++ b/packages/complaints/lib/pages/inbox/complaints_inbox.dart @@ -209,7 +209,7 @@ class _ComplaintsInboxItem extends StatelessWidget { final textTheme = theme.digitTextTheme(context); return Padding( - padding: EdgeInsets.only(top: spacer3), + padding: const EdgeInsets.only(top: spacer3), child: DigitCard(cardType: CardType.primary, children: [ Padding( padding: const EdgeInsets.only(top: spacer2, bottom: spacer2), diff --git a/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart b/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart index d43acd97c..c95eb7a94 100644 --- a/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart +++ b/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart @@ -271,7 +271,7 @@ class ComplaintsInboxFilterPageState }, ), Padding( - padding: EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.only(top: spacer2), child: LabeledField( label: localizations.translate( i18.complaints.complaintsTypeHeading, diff --git a/packages/complaints/pubspec.yaml b/packages/complaints/pubspec.yaml index e97073e00..c0f1d9971 100644 --- a/packages/complaints/pubspec.yaml +++ b/packages/complaints/pubspec.yaml @@ -10,7 +10,7 @@ environment: dependencies: flutter: sdk: flutter - digit_ui_components: + digit_ui_components: ^0.0.1+7 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 From b0599aa566010e093586ada0ca9e1573ef295fc6 Mon Sep 17 00:00:00 2001 From: yashita-egov Date: Mon, 23 Sep 2024 11:45:03 +0530 Subject: [PATCH 179/241] acknowledgment fixed --- .../lib/pages/complaints_acknowledgement.dart | 57 +++++++++---------- 1 file changed, 27 insertions(+), 30 deletions(-) diff --git a/packages/complaints/lib/pages/complaints_acknowledgement.dart b/packages/complaints/lib/pages/complaints_acknowledgement.dart index bafe4b5dc..0aa573b57 100644 --- a/packages/complaints/lib/pages/complaints_acknowledgement.dart +++ b/packages/complaints/lib/pages/complaints_acknowledgement.dart @@ -28,39 +28,36 @@ class ComplaintsAcknowledgementPageState final theme= Theme.of(context); final textTheme =theme.digitTextTheme(context); return Scaffold( - body: Padding( - padding: const EdgeInsets.all(spacer4), - child: PanelCard( - title: localizations.translate(i18.complaints.acknowledgementLabel), - type: PanelType.success, - additionalDetails: [ - Text(localizations.translate( - i18.complaints.acknowledgementSubLabelMain) - , - style: textTheme.bodyS.copyWith( - color: theme.colorTheme.paper.primary - ), + body: PanelCard( + title: localizations.translate(i18.complaints.acknowledgementLabel), + type: PanelType.success, + additionalDetails: [ + Text(localizations.translate( + i18.complaints.acknowledgementSubLabelMain) + , + style: textTheme.bodyS.copyWith( + color: theme.colorTheme.paper.primary ), - Text(localizations.translate( - i18.complaints.acknowledgementSubLabelSub), - style: textTheme.bodyS.copyWith( - color: theme.colorTheme.paper.primary - ), + ), + Text(localizations.translate( + i18.complaints.acknowledgementSubLabelSub), + style: textTheme.bodyS.copyWith( + color: theme.colorTheme.paper.primary ), - ], - description: localizations.translate( - i18.complaints.acknowledgementDescription, ), - actions: [ - Button( - label: localizations.translate( - i18.complaints.acknowledgementAction), - onPressed: () => context.router.maybePop(), - type: ButtonType.primary, - size: ButtonSize.large, - ) - ], - ), + ], + description: localizations.translate( + i18.complaints.acknowledgementDescription, + ), + actions: [ + Button( + label: localizations.translate( + i18.complaints.acknowledgementAction), + onPressed: () => context.router.maybePop(), + type: ButtonType.primary, + size: ButtonSize.large, + ) + ], ), ); } From ba347b02ef50996e7cf09eb1209b47d80d2155a2 Mon Sep 17 00:00:00 2001 From: rachana-egov Date: Wed, 11 Dec 2024 12:12:50 +0530 Subject: [PATCH 180/241] updated complaint with latest digit_ui_components --- packages/complaints/example/pubspec.lock | 233 ++++++------------ .../lib/pages/complaints_acknowledgement.dart | 6 +- .../pages/inbox/complaints_details_view.dart | 21 +- .../lib/pages/inbox/complaints_inbox.dart | 45 ++-- .../pages/inbox/complaints_inbox_filter.dart | 29 +-- .../pages/inbox/complaints_inbox_search.dart | 15 +- .../pages/inbox/complaints_inbox_sort.dart | 15 +- .../pages/registration/complaint_type.dart | 11 +- .../registration/complaints_details.dart | 88 ++++--- .../registration/complaints_location.dart | 25 +- .../complaints_registration_wrapper.dart | 2 +- .../header/back_navigation_help_header.dart | 4 +- packages/complaints/pubspec.lock | 142 +++++------ packages/complaints/pubspec.yaml | 9 +- 14 files changed, 289 insertions(+), 356 deletions(-) diff --git a/packages/complaints/example/pubspec.lock b/packages/complaints/example/pubspec.lock index 67b469c03..b12a18990 100644 --- a/packages/complaints/example/pubspec.lock +++ b/packages/complaints/example/pubspec.lock @@ -133,26 +133,26 @@ packages: dependency: transitive description: name: camera - sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" + sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167" url: "https://pub.dev" source: hosted - version: "0.10.5+9" - camera_android: + version: "0.11.0+2" + camera_android_camerax: dependency: transitive description: - name: camera_android - sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 + name: camera_android_camerax + sha256: "011be2ab0e5b3e3aa8094413fa890f8c5c5afd7cfdaef353a992047d4dab5780" url: "https://pub.dev" source: hosted - version: "0.10.9+2" + version: "0.6.8+2" camera_avfoundation: dependency: transitive description: name: camera_avfoundation - sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" + sha256: "2e4c568f70e406ccb87376bc06b53d2f5bebaab71e2fbcc1a950e31449381bcf" url: "https://pub.dev" source: hosted - version: "0.9.13+10" + version: "0.9.17+5" camera_platform_interface: dependency: transitive description: @@ -288,16 +288,8 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" - digit_components: - dependency: "direct main" - description: - name: digit_components - sha256: "01320d4c72829045e789d1a56e23ff2bd85dad6a1831d27bd507a1acaceae17e" - url: "https://pub.dev" - source: hosted - version: "1.0.1" digit_data_model: - dependency: "direct main" + dependency: transitive description: name: digit_data_model sha256: "14ebea5f17921081025963b379efd5e16d155dd920d5a42ab2f2f392afb649de" @@ -307,10 +299,11 @@ packages: digit_ui_components: dependency: transitive description: - name: digit_ui_components - sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae - url: "https://pub.dev" - source: hosted + path: "flutter/digit-ui-components/digit_components" + ref: version_update + resolved-ref: ad45e31f470630b5876f38c0bc7744c5bf05b02b + url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" + source: git version: "0.0.1+7" dio: dependency: transitive @@ -352,14 +345,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - easy_stepper: - dependency: transitive - description: - name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" - url: "https://pub.dev" - source: hosted - version: "0.5.2+1" fake_async: dependency: transitive description: @@ -438,7 +423,7 @@ packages: source: sdk version: "0.0.0" flutter_bloc: - dependency: "direct main" + dependency: transitive description: name: flutter_bloc sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a @@ -477,62 +462,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.13" - flutter_focus_watcher: - dependency: transitive - description: - name: flutter_focus_watcher - sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility: - dependency: transitive - description: - name: flutter_keyboard_visibility - sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" - url: "https://pub.dev" - source: hosted - version: "5.4.1" - flutter_keyboard_visibility_linux: - dependency: transitive - description: - name: flutter_keyboard_visibility_linux - sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_macos: - dependency: transitive - description: - name: flutter_keyboard_visibility_macos - sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_platform_interface: - dependency: transitive - description: - name: flutter_keyboard_visibility_platform_interface - sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_web: - dependency: transitive - description: - name: flutter_keyboard_visibility_web - sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_windows: - dependency: transitive - description: - name: flutter_keyboard_visibility_windows - sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 - url: "https://pub.dev" - source: hosted - version: "1.0.0" flutter_lints: dependency: "direct dev" description: @@ -583,14 +512,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" flutter_web_plugins: dependency: transitive description: flutter @@ -680,10 +601,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 url: "https://pub.dev" source: hosted - version: "4.0.5" + version: "6.2.1" graphs: dependency: transitive description: @@ -808,10 +729,10 @@ packages: dependency: transitive description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" io: dependency: transitive description: @@ -852,6 +773,30 @@ packages: url: "https://pub.dev" source: hosted version: "4.9.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -864,26 +809,26 @@ packages: dependency: transitive description: name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.0" location_web: dependency: transitive description: name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + sha256: "15ad7b4c8a9f55abee513373755e093a40c04d7e24fc1b4f89676fe99523d034" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "5.0.1" logging: dependency: transitive description: @@ -896,34 +841,34 @@ packages: dependency: transitive description: name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "3.1.3" matcher: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -964,30 +909,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - package_info_plus: - dependency: transitive - description: - name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" - url: "https://pub.dev" - source: hosted - version: "5.0.1" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" - url: "https://pub.dev" - source: hosted - version: "2.0.1" path: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_drawing: dependency: transitive description: @@ -1076,14 +1005,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" pool: dependency: transitive description: @@ -1116,22 +1037,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 - url: "https://pub.dev" - source: hosted - version: "0.8.1" reactive_forms: dependency: transitive description: name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "17.0.1" recase: dependency: transitive description: @@ -1140,14 +1053,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" - remove_emoji_input_formatter: - dependency: transitive - description: - name: remove_emoji_input_formatter - sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" - url: "https://pub.dev" - source: hosted - version: "0.0.1+1" shelf: dependency: transitive description: @@ -1237,10 +1142,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" timing: dependency: transitive description: @@ -1393,6 +1298,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.0+2" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + url: "https://pub.dev" + source: hosted + version: "14.2.1" watcher: dependency: transitive description: @@ -1450,5 +1363,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.22.0" diff --git a/packages/complaints/lib/pages/complaints_acknowledgement.dart b/packages/complaints/lib/pages/complaints_acknowledgement.dart index 0aa573b57..09bc70f70 100644 --- a/packages/complaints/lib/pages/complaints_acknowledgement.dart +++ b/packages/complaints/lib/pages/complaints_acknowledgement.dart @@ -50,12 +50,12 @@ class ComplaintsAcknowledgementPageState i18.complaints.acknowledgementDescription, ), actions: [ - Button( + DigitButton( label: localizations.translate( i18.complaints.acknowledgementAction), onPressed: () => context.router.maybePop(), - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, ) ], ), diff --git a/packages/complaints/lib/pages/inbox/complaints_details_view.dart b/packages/complaints/lib/pages/inbox/complaints_details_view.dart index ffd3112ed..ea5029e42 100644 --- a/packages/complaints/lib/pages/inbox/complaints_details_view.dart +++ b/packages/complaints/lib/pages/inbox/complaints_details_view.dart @@ -3,6 +3,7 @@ import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/label_value_summary.dart'; import 'package:flutter/material.dart'; import 'package:recase/recase.dart'; @@ -68,49 +69,49 @@ class ComplaintsDetailsViewPage extends StatelessWidget { child: DigitCard( cardType: CardType.primary, children: [ - LabelValueList( + LabelValueSummary( padding: const EdgeInsets.only(top: spacer4, bottom: spacer4), - labelFlex: 6, + // labelFlex: 6, items: [ - LabelValuePair( + LabelValueItem( label: localizations.translate(i18.complaints.inboxNumberLabel), value: complaint.serviceRequestId ?? "${localizations.translate(i18.complaints.inboxNotGeneratedLabel)}\n${localizations.translate(i18.complaints.inboxSyncRequiredLabel)}", valueTextStyle: complaint.serviceRequestId !=null ? textTheme.bodyS.copyWith(color: theme.colorTheme.primary.primary1) : null , ), - LabelValuePair( + LabelValueItem( label: localizations.translate(i18.complaints.inboxTypeLabel), value: localizations.translate( complaint.serviceCode.snakeCase.toUpperCase().trim(), ) ), - LabelValuePair( + LabelValueItem( label: localizations.translate(i18.complaints.inboxDateLabel), value: complaint.auditDetails?.createdTime.toDateTime .getFormattedDate() ?? "", ), - LabelValuePair( + LabelValueItem( label: localizations.translate(i18.complaints.complainantName), value: complaint.user.name ?? "", ), - LabelValuePair( + LabelValueItem( label: localizations.translate(i18.complaints.inboxAreaLabel), value: complaint.address.locality?.name ?? "", ), - LabelValuePair( + LabelValueItem( label: localizations.translate( i18.complaints.complainantContactNumber, ), value: complaint.user.mobileNumber ?? "", ), - LabelValuePair( + LabelValueItem( label: localizations.translate(i18.complaints.inboxStatusLabel), value: localizations.translate( "COMPLAINTS_STATUS_${complaint.applicationStatus.name.snakeCase.toUpperCase()}", ), ), - LabelValuePair( + LabelValueItem( label: localizations .translate(i18.complaints.complaintDescription), value: localizations.translate( diff --git a/packages/complaints/lib/pages/inbox/complaints_inbox.dart b/packages/complaints/lib/pages/inbox/complaints_inbox.dart index ca7834fa8..00a2d544c 100644 --- a/packages/complaints/lib/pages/inbox/complaints_inbox.dart +++ b/packages/complaints/lib/pages/inbox/complaints_inbox.dart @@ -5,6 +5,7 @@ import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/utils/app_logger.dart'; import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/label_value_summary.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:recase/recase.dart'; @@ -73,9 +74,9 @@ class ComplaintsInboxPageState extends LocalizedState { children: [ Padding( padding: const EdgeInsets.only(left: spacer2 * 2), - child: Button( - type: ButtonType.tertiary, - size: ButtonSize.medium, + child: DigitButton( + type: DigitButtonType.tertiary, + size: DigitButtonSize.medium, prefixIcon: Icons.search, label: localizations.translate( i18.complaints.searchCTA, @@ -87,9 +88,9 @@ class ComplaintsInboxPageState extends LocalizedState { ), Padding( padding: EdgeInsets.zero, - child: Button( - type: ButtonType.tertiary, - size: ButtonSize.medium, + child: DigitButton( + type: DigitButtonType.tertiary, + size: DigitButtonSize.medium, label: localizations.translate( i18.complaints.filterCTA, ), @@ -102,9 +103,9 @@ class ComplaintsInboxPageState extends LocalizedState { Padding( padding: const EdgeInsets.only(right: spacer2 * 2), - child: Button( - type: ButtonType.tertiary, - size: ButtonSize.medium, + child: DigitButton( + type: DigitButtonType.tertiary, + size: DigitButtonSize.medium, label: localizations.translate( i18.complaints.sortCTA, ), @@ -154,12 +155,12 @@ class ComplaintsInboxPageState extends LocalizedState { margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), padding: const EdgeInsets.all(spacer2), children: [ - Button( + DigitButton( label: localizations.translate( i18.complaints.fileComplaintAction, ), - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, onPressed: () async { var loggedInUserUuid = @@ -213,34 +214,34 @@ class _ComplaintsInboxItem extends StatelessWidget { child: DigitCard(cardType: CardType.primary, children: [ Padding( padding: const EdgeInsets.only(top: spacer2, bottom: spacer2), - child: LabelValueList( + child: LabelValueSummary( padding: const EdgeInsets.only(top: spacer2, bottom: spacer2), - labelFlex: 5, + // labelFlex: 5, items: [ - LabelValuePair( + LabelValueItem( label: localizations .translate(i18.complaints.inboxNumberLabel), value: item.serviceRequestId ?? "${localizations.translate(i18.complaints.inboxNotGeneratedLabel)}\n${localizations.translate(i18.complaints.inboxSyncRequiredLabel)}", valueTextStyle: item.serviceRequestId !=null ? textTheme.bodyS.copyWith(color: theme.colorTheme.primary.primary1) : null , ), - LabelValuePair( + LabelValueItem( label: localizations.translate(i18.complaints.inboxTypeLabel), value: localizations.translate( item.serviceCode.snakeCase.toUpperCase().trim(), ), ), - LabelValuePair( + LabelValueItem( label: localizations.translate(i18.complaints.inboxDateLabel), value: item.auditDetails?.createdTime.toDateTime .getFormattedDate() ?? ""), - LabelValuePair( + LabelValueItem( label: localizations.translate(i18.complaints.inboxAreaLabel), value: item.address.locality?.name ?? ""), - LabelValuePair( + LabelValueItem( label: localizations .translate(i18.complaints.inboxStatusLabel), value: localizations.translate( @@ -254,11 +255,11 @@ class _ComplaintsInboxItem extends StatelessWidget { children: [ Expanded( flex: 1, - child: Button( + child: DigitButton( label: localizations.translate(i18.searchBeneficiary.iconLabel), - type: ButtonType.secondary, - size: ButtonSize.large, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, onPressed: () { context.router.push(ComplaintsDetailsViewRoute( complaint: item, diff --git a/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart b/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart index c95eb7a94..abb84c0fa 100644 --- a/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart +++ b/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart @@ -2,6 +2,7 @@ import 'dart:collection'; import 'package:auto_route/auto_route.dart'; import 'package:digit_data_model/models/entities/pgr_application_status.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/models/RadioButtonModel.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; @@ -78,10 +79,10 @@ class ComplaintsInboxFilterPageState children: [ Padding( padding: EdgeInsets.zero, - child: Button( + child: DigitButton( label: "", - type: ButtonType.tertiary, - size: ButtonSize.large, + type: DigitButtonType.tertiary, + size: DigitButtonSize.large, onPressed: () => context.router.maybePop(), prefixIcon: Icons.close, ), @@ -106,10 +107,10 @@ class ComplaintsInboxFilterPageState ), Padding( padding: const EdgeInsets.only(left: spacer1), - child: Button( + child: DigitButton( label: "", - type: ButtonType.tertiary, - size: ButtonSize.large, + type: DigitButtonType.tertiary, + size: DigitButtonSize.large, onPressed: () { clearFilters(formGroup); }, @@ -120,7 +121,7 @@ class ComplaintsInboxFilterPageState ), ], ), - enableFixedButton: true, + enableFixedDigitButton: true, footer: DigitCard( cardType: CardType.primary, margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), @@ -132,9 +133,9 @@ class ComplaintsInboxFilterPageState children: [ Expanded( flex: 1, - child: Button( - type: ButtonType.secondary, - size: ButtonSize.large, + child: DigitButton( + type: DigitButtonType.secondary, + size: DigitButtonSize.large, label: localizations.translate( i18.complaints.complaintsFilterClearAll, ), @@ -146,11 +147,11 @@ class ComplaintsInboxFilterPageState const SizedBox(width: 10), Expanded( flex: 1, - child: Button( + child: DigitButton( label: localizations .translate(i18.complaints.filterCTA), - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, onPressed: () { if (!formGroup.valid) return; @@ -244,7 +245,7 @@ class ComplaintsInboxFilterPageState return Align( alignment: Alignment.topLeft, child: RadioList( - radioButtons: _complaintAssignmentTypes + radioDigitButtons: _complaintAssignmentTypes .asMap() .entries .map((item) => RadioButtonModel( diff --git a/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart b/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart index 279e5ddf1..79003ffd6 100644 --- a/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart +++ b/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart @@ -51,11 +51,11 @@ class ComplaintsInboxSearchPageState children: [ Padding( padding: EdgeInsets.zero, - child: Button( + child: DigitButton( label: "", onPressed: () => context.router.pop(), - type: ButtonType.tertiary, - size: ButtonSize.large, + type: DigitButtonType.tertiary, + size: DigitButtonSize.large, prefixIcon: Icons.close, ), ) @@ -83,10 +83,10 @@ class ComplaintsInboxSearchPageState margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), padding: const EdgeInsets.all(spacer2), children: [ - Button( + DigitButton( mainAxisSize: MainAxisSize.max, - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, label: localizations .translate(i18.complaints.searchCTA), onPressed: () { @@ -192,7 +192,8 @@ class ComplaintsInboxSearchPageState value: state.searchKeys?.complaintNumber, ), _mobileNumber: FormControl( - validators: [CustomValidator.validMobileNumber], + validators: [Validators.delegate( + (validator) => CustomValidator.validMobileNumber(validator))], value: state.searchKeys?.complainantMobileNumber, ), }); diff --git a/packages/complaints/lib/pages/inbox/complaints_inbox_sort.dart b/packages/complaints/lib/pages/inbox/complaints_inbox_sort.dart index 58e1f4b9d..57516c9fd 100644 --- a/packages/complaints/lib/pages/inbox/complaints_inbox_sort.dart +++ b/packages/complaints/lib/pages/inbox/complaints_inbox_sort.dart @@ -1,6 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/models/RadioButtonModel.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; @@ -56,11 +57,11 @@ class ComplaintsInboxSortPageState children: [ Padding( padding: EdgeInsets.zero, - child: Button( + child: DigitButton( label: "", onPressed: () => context.router.pop(), - type: ButtonType.tertiary, - size: ButtonSize.large, + type: DigitButtonType.tertiary, + size: DigitButtonSize.large, prefixIcon: Icons.close, ), ), @@ -87,9 +88,9 @@ class ComplaintsInboxSortPageState cardType: CardType.primary, margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), padding: const EdgeInsets.all(spacer2), - children: [Button( - type: ButtonType.primary, - size: ButtonSize.large, + children: [DigitButton( + type: DigitButtonType.primary, + size: DigitButtonSize.large, label: localizations .translate(i18.complaints.sortCTA), mainAxisSize: MainAxisSize.max, @@ -120,7 +121,7 @@ class ComplaintsInboxSortPageState return Padding( padding: const EdgeInsets.only(top: spacer2), child: RadioList( - radioButtons: sortOrders + radioDigitButtons: sortOrders .asMap() .entries .map( diff --git a/packages/complaints/lib/pages/registration/complaint_type.dart b/packages/complaints/lib/pages/registration/complaint_type.dart index 6ad89b471..924d27bda 100644 --- a/packages/complaints/lib/pages/registration/complaint_type.dart +++ b/packages/complaints/lib/pages/registration/complaint_type.dart @@ -3,6 +3,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:complaints/complaints.dart'; import 'package:complaints/router/complaints_router.gm.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/models/RadioButtonModel.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; @@ -55,17 +56,17 @@ class ComplaintTypePageState extends LocalizedState { header: const Column(children: [ BackNavigationHelpHeaderWidget(), ]), - enableFixedButton: true, + enableFixedDigitButton: true, footer: DigitCard( cardType: CardType.primary, margin: const EdgeInsets.only(top: spacer2), padding: const EdgeInsets.all(spacer2), children: [ - Button( + DigitButton( mainAxisSize: MainAxisSize.max, label: localizations.translate(i18.complaints.actionLabel), - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, onPressed: () async { var complaintType = form.control(_complaintType).value; var otherComplaintTypeValue = @@ -129,7 +130,7 @@ class ComplaintTypePageState extends LocalizedState { i18.complaints.complaintsTypeLabel, ), child: RadioList( - radioButtons: (ComplaintsSingleton().complaintTypes?.isNotEmpty ?? false) + radioDigitButtons: (ComplaintsSingleton().complaintTypes?.isNotEmpty ?? false) ? ComplaintsSingleton().complaintTypes! .map( (item) => RadioButtonModel( diff --git a/packages/complaints/lib/pages/registration/complaints_details.dart b/packages/complaints/lib/pages/registration/complaints_details.dart index e4f3b071b..3c5739d66 100644 --- a/packages/complaints/lib/pages/registration/complaints_details.dart +++ b/packages/complaints/lib/pages/registration/complaints_details.dart @@ -3,7 +3,9 @@ import 'package:auto_route/auto_route.dart'; import 'package:complaints/router/complaints_router.gm.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/models/RadioButtonModel.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; import 'package:flutter/material.dart'; @@ -79,7 +81,7 @@ class ComplaintsDetailsPageState extends LocalizedState { i18.complaints.raisedForMyself; return ScrollableContent( - enableFixedButton: true, + enableFixedDigitButton: true, header: const Column( children: [ BackNavigationHelpHeaderWidget(), @@ -90,14 +92,14 @@ class ComplaintsDetailsPageState extends LocalizedState { margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), padding: const EdgeInsets.all(spacer2), children: [ - Button( + DigitButton( label: form.control(_complaintDetailsForm).disabled ? localizations .translate(i18.complaints.backToInbox) : localizations .translate(i18.common.coreCommonSubmit), - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, onPressed: () async { setState(() { @@ -176,45 +178,47 @@ class ComplaintsDetailsPageState extends LocalizedState { final userId = ComplaintsSingleton().loggedInUserUuid; - showPopup( - context: context, - title: localizations.translate( - i18.complaints.dialogTitle, - ), - type: PopUpType.simple, - description: localizations.translate( - i18.complaints.dialogContent, - ), - actions: [ - Button( - label: localizations.translate( - i18.common.coreCommonSubmit, - ), - onPressed: () { - bloc.add( - ComplaintsRegistrationSubmitComplaintEvent( - userId: userId, - ), - ); - Navigator.of(context, rootNavigator: true) - .pop(); - }, - type: ButtonType.primary, - size: ButtonSize.large, + showCustomPopup( + context: context, + builder: (popupContext) => Popup( + title: localizations.translate( + i18.complaints.dialogTitle, ), - Button( + type: PopUpType.simple, + description: localizations.translate( + i18.complaints.dialogContent, + ), + actions: [ + DigitButton( label: localizations.translate( - i18.common.coreCommonCancel, + i18.common.coreCommonSubmit, ), onPressed: () { - Navigator.of( - context, - rootNavigator: true, - ).pop(); + bloc.add( + ComplaintsRegistrationSubmitComplaintEvent( + userId: userId, + ), + ); + Navigator.of(context, rootNavigator: true) + .pop(); }, - type: ButtonType.secondary, - size: ButtonSize.large), - ]); + type: DigitButtonType.primary, + size: DigitButtonSize.large, + ), + DigitButton( + label: localizations.translate( + i18.common.coreCommonCancel, + ), + onPressed: () { + Navigator.of( + context, + rootNavigator: true, + ).pop(); + }, + type: DigitButtonType.secondary, + size: DigitButtonSize.large), + ]), + ); }, ), ]), @@ -264,7 +268,7 @@ class ComplaintsDetailsPageState extends LocalizedState { Align( alignment: AlignmentDirectional.topStart, child: RadioList( - radioButtons: complainantRaisedFor + radioDigitButtons: complainantRaisedFor .map((item) => RadioButtonModel( code: item, name: @@ -514,7 +518,8 @@ class ComplaintsDetailsPageState extends LocalizedState { disabled: shouldDisableForm, validators: [ Validators.required, - CustomValidator.validMobileNumber, + Validators.delegate( + (validator) => CustomValidator.validMobileNumber(validator)), Validators.minLength(10), Validators.maxLength(10) ], @@ -528,7 +533,8 @@ class ComplaintsDetailsPageState extends LocalizedState { value: complaintDetails?.supervisorContactNumber, disabled: shouldDisableForm, validators: [ - CustomValidator.validMobileNumber, + Validators.delegate( + (validator) => CustomValidator.validMobileNumber(validator)), Validators.maxLength(10), Validators.minLength(10), ], diff --git a/packages/complaints/lib/pages/registration/complaints_location.dart b/packages/complaints/lib/pages/registration/complaints_location.dart index ada15be00..0d80236d9 100644 --- a/packages/complaints/lib/pages/registration/complaints_location.dart +++ b/packages/complaints/lib/pages/registration/complaints_location.dart @@ -2,8 +2,8 @@ import 'dart:math'; import 'package:auto_route/auto_route.dart'; import 'package:complaints/router/complaints_router.gm.dart'; -import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/services/location_bloc.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; @@ -78,7 +78,7 @@ class ComplaintsLocationPageState ComplaintsRegistrationState>( builder: (context, state) { return ScrollableContent( - enableFixedButton: true, + enableFixedDigitButton: true, header: const Column( children: [ BackNavigationHelpHeaderWidget(), @@ -89,11 +89,11 @@ class ComplaintsLocationPageState margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), padding: const EdgeInsets.all(spacer2), children: [ - Button( + DigitButton( label: localizations.translate(i18.complaints.actionLabel), - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, onPressed: () { form.markAllAsTouched(); @@ -252,7 +252,8 @@ class ComplaintsLocationPageState value: addressModel?.buildingName, disabled: shouldDisableForm, validators: [ - CustomValidator.requiredMin, + Validators.delegate( + (validator) => CustomValidator.requiredMin(validator)), Validators.maxLength(maxLength), ], ), @@ -260,7 +261,8 @@ class ComplaintsLocationPageState value: addressModel?.street, disabled: shouldDisableForm, validators: [ - CustomValidator.requiredMin, + Validators.delegate( + (validator) => CustomValidator.requiredMin(validator)), Validators.maxLength(maxLength), ], ), @@ -268,7 +270,8 @@ class ComplaintsLocationPageState value: addressModel?.landmark, disabled: shouldDisableForm, validators: [ - CustomValidator.requiredMin, + Validators.delegate( + (validator) => CustomValidator.requiredMin(validator)), Validators.maxLength(maxLength), ], ), @@ -276,14 +279,16 @@ class ComplaintsLocationPageState value: addressModel?.pincode, disabled: shouldDisableForm, validators: [ - CustomValidator.requiredMin, + Validators.delegate( + (validator) => CustomValidator.requiredMin(validator)), Validators.maxLength(6), ], ), _latKey: FormControl( value: addressModel?.geoLocation?.latitude, validators: [ - CustomValidator.requiredMin, + Validators.delegate( + (validator) => CustomValidator.requiredMin(validator)), ], ), _lngKey: FormControl( diff --git a/packages/complaints/lib/pages/registration/complaints_registration_wrapper.dart b/packages/complaints/lib/pages/registration/complaints_registration_wrapper.dart index af0b7e7b6..50dc872dc 100644 --- a/packages/complaints/lib/pages/registration/complaints_registration_wrapper.dart +++ b/packages/complaints/lib/pages/registration/complaints_registration_wrapper.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'package:auto_route/auto_route.dart'; -import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; +import 'package:digit_ui_components/services/location_bloc.dart'; import 'package:location/location.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; diff --git a/packages/complaints/lib/widgets/header/back_navigation_help_header.dart b/packages/complaints/lib/widgets/header/back_navigation_help_header.dart index e9c3a7e78..d9a9676e3 100644 --- a/packages/complaints/lib/widgets/header/back_navigation_help_header.dart +++ b/packages/complaints/lib/widgets/header/back_navigation_help_header.dart @@ -37,8 +37,8 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { Align( alignment: Alignment.topLeft, child: Padding( - padding: EdgeInsets.all(spacer2), - child: BackNavigationButton( + padding: const EdgeInsets.all(spacer2), + child: DigitBackButton( handleBack: () { context.router.maybePop(); handleBack != null ? handleBack!() : null; diff --git a/packages/complaints/pubspec.lock b/packages/complaints/pubspec.lock index c175d4c4b..1bb5bbd16 100644 --- a/packages/complaints/pubspec.lock +++ b/packages/complaints/pubspec.lock @@ -5,18 +5,18 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 + sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" url: "https://pub.dev" source: hosted - version: "64.0.0" + version: "67.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" + sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" url: "https://pub.dev" source: hosted - version: "6.2.0" + version: "6.4.1" ansicolor: dependency: transitive description: @@ -37,10 +37,10 @@ packages: dependency: transitive description: name: args - sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" + sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6 url: "https://pub.dev" source: hosted - version: "2.5.0" + version: "2.6.0" async: dependency: transitive description: @@ -53,18 +53,18 @@ packages: dependency: "direct main" description: name: auto_route - sha256: a9001a90539ca3effc168f7e1029a5885c7326b9032c09ac895e303c1d137704 + sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 url: "https://pub.dev" source: hosted - version: "8.3.0" + version: "7.9.2" auto_route_generator: dependency: "direct dev" description: name: auto_route_generator - sha256: ba28133d3a3bf0a66772bcc98dade5843753cd9f1a8fb4802b842895515b67d3 + sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" url: "https://pub.dev" source: hosted - version: "8.0.0" + version: "7.3.2" bloc: dependency: transitive description: @@ -109,10 +109,10 @@ packages: dependency: transitive description: name: build_daemon - sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" + sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9" url: "https://pub.dev" source: hosted - version: "4.0.1" + version: "4.0.2" build_resolvers: dependency: transitive description: @@ -133,10 +133,10 @@ packages: dependency: transitive description: name: build_runner_core - sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" + sha256: e3c79f69a64bdfcd8a776a3c28db4eb6e3fb5356d013ae5eb2e52007706d5dbe url: "https://pub.dev" source: hosted - version: "7.3.0" + version: "7.3.1" built_collection: dependency: transitive description: @@ -245,18 +245,18 @@ packages: dependency: transitive description: name: convert - sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" coverage: dependency: transitive description: name: coverage - sha256: "3945034e86ea203af7a056d98e98e42a5518fff200d6e8e6647e1886b07e936e" + sha256: e3493833ea012784c740e341952298f1cc77f1f01b1bbc3eb4eecf6984fb7f43 url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.11.1" cross_file: dependency: transitive description: @@ -269,10 +269,10 @@ packages: dependency: transitive description: name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.6" csslib: dependency: transitive description: @@ -294,7 +294,7 @@ packages: description: path: "packages/dart_mappable_builder" ref: master - resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" + resolved-ref: "5595f37310a63a92b2c1c7e386c74fe39df5555d" url: "https://github.com/egovernments/health-campaign-field-worker-app/" source: git version: "4.2.0" @@ -326,16 +326,16 @@ packages: dependency: "direct main" description: name: digit_data_model - sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" + sha256: "14ebea5f17921081025963b379efd5e16d155dd920d5a42ab2f2f392afb649de" url: "https://pub.dev" source: hosted - version: "1.0.5-dev.1" + version: "1.0.4-dev.1" digit_ui_components: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" ref: version_update - resolved-ref: ad45e31f470630b5876f38c0bc7744c5bf05b02b + resolved-ref: c68a3ceb1f00c6128780c0cbeb58d9aa8c4d7a13 url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -351,10 +351,10 @@ packages: dependency: transitive description: name: dio_web_adapter - sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac" + sha256: "33259a9276d6cea88774a0000cfae0d861003497755969c92faa223108620dc8" url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "2.0.0" dotted_border: dependency: transitive description: @@ -391,10 +391,10 @@ packages: dependency: transitive description: name: ffi - sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.3" file: dependency: transitive description: @@ -407,10 +407,10 @@ packages: dependency: transitive description: name: file_picker - sha256: "2ca051989f69d1b2ca012b2cf3ccf78c70d40144f0861ff2c063493f7c8c3d45" + sha256: "825aec673606875c33cd8d3c4083f1a3c3999015a84178b317b7ef396b7384f3" url: "https://pub.dev" source: hosted - version: "8.0.5" + version: "8.0.7" file_selector_linux: dependency: transitive description: @@ -537,10 +537,10 @@ packages: dependency: "direct main" description: name: flutter_svg - sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" + sha256: "54900a1a1243f3c4a5506d853a2b5c2dbc38d5f27e52a52618a8054401431123" url: "https://pub.dev" source: hosted - version: "2.0.10+1" + version: "2.0.16" flutter_test: dependency: "direct dev" description: flutter @@ -579,10 +579,10 @@ packages: dependency: transitive description: name: frontend_server_client - sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "4.0.0" geolocator: dependency: transitive description: @@ -651,10 +651,10 @@ packages: dependency: transitive description: name: graphs - sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 + sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" group_radio_button: dependency: "direct main" description: @@ -768,7 +768,7 @@ packages: source: hosted version: "0.2.1+1" intl: - dependency: "direct main" + dependency: transitive description: name: intl sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf @@ -779,10 +779,10 @@ packages: dependency: transitive description: name: io - sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "1.0.5" isar: dependency: "direct main" description: @@ -883,10 +883,10 @@ packages: dependency: transitive description: name: logging - sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.3.0" lottie: dependency: transitive description: @@ -987,34 +987,34 @@ packages: dependency: transitive description: name: path_parsing - sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.1.0" path_provider: dependency: "direct main" description: name: path_provider - sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 + sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.1.5" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d + sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7" url: "https://pub.dev" source: hosted - version: "2.2.4" + version: "2.2.10" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" + sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.1" path_provider_linux: dependency: transitive description: @@ -1043,10 +1043,10 @@ packages: dependency: transitive description: name: petitparser - sha256: cb3798bef7fc021ac45b308f4b51208a152792445cce0448c9a4ba5879dd8750 + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 url: "https://pub.dev" source: hosted - version: "5.4.0" + version: "6.0.2" platform: dependency: transitive description: @@ -1131,10 +1131,10 @@ packages: dependency: transitive description: name: shelf_static - sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e + sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3 url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.1.3" shelf_web_socket: dependency: transitive description: @@ -1168,10 +1168,10 @@ packages: dependency: transitive description: name: source_map_stack_trace - sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" + sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" source_maps: dependency: transitive description: @@ -1200,10 +1200,10 @@ packages: dependency: transitive description: name: sqlite3_flutter_libs - sha256: "7ae52b23366e5295005022e62fa093f64bfe190810223ea0ebf733a4cd140bce" + sha256: "636b0fe8a2de894e5455572f6cbbc458f4ffecfe9f860b79439e27041ea4f0b9" url: "https://pub.dev" source: hosted - version: "0.5.26" + version: "0.5.27" stack_trace: dependency: transitive description: @@ -1384,26 +1384,26 @@ packages: dependency: transitive description: name: vector_graphics - sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" + sha256: "27d5fefe86fb9aace4a9f8375b56b3c292b64d8c04510df230f849850d912cb7" url: "https://pub.dev" source: hosted - version: "1.1.11+1" + version: "1.1.15" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da + sha256: "2430b973a4ca3c4dbc9999b62b8c719a160100dcbae5c819bae0cacce32c9cdb" url: "https://pub.dev" source: hosted - version: "1.1.11+1" + version: "1.1.12" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" + sha256: "1b4b9e706a10294258727674a340ae0d6e64a7231980f9f9a3d12e4b42407aad" url: "https://pub.dev" source: hosted - version: "1.1.11+1" + version: "1.1.16" vector_math: dependency: transitive description: @@ -1448,10 +1448,10 @@ packages: dependency: transitive description: name: web_socket_channel - sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + sha256: "58c6666b342a38816b2e7e50ed0f1e261959630becd4c879c4f26bfa14aa5a42" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.5" webkit_inspection_protocol: dependency: transitive description: @@ -1464,26 +1464,26 @@ packages: dependency: transitive description: name: win32 - sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" + sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a" url: "https://pub.dev" source: hosted - version: "5.2.0" + version: "5.5.4" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "1.1.0" xml: dependency: transitive description: name: xml - sha256: "5bc72e1e45e941d825fd7468b9b4cc3b9327942649aeb6fc5cdbf135f0a86e84" + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 url: "https://pub.dev" source: hosted - version: "6.3.0" + version: "6.5.0" yaml: dependency: transitive description: diff --git a/packages/complaints/pubspec.yaml b/packages/complaints/pubspec.yaml index c0f1d9971..d7f9b86ee 100644 --- a/packages/complaints/pubspec.yaml +++ b/packages/complaints/pubspec.yaml @@ -10,7 +10,11 @@ environment: dependencies: flutter: sdk: flutter - digit_ui_components: ^0.0.1+7 + digit_ui_components: + git: + url: https://github.com/egovernments/DIGIT-UI-LIBRARIES + ref: version_update + path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 @@ -18,12 +22,11 @@ dependencies: digit_data_model: 1.0.4-dev.1 dart_mappable: ^4.2.0 group_radio_button: ^1.3.0 - reactive_forms: ^14.1.0 + reactive_forms: ^17.0.0 recase: ^4.1.0 flutter_dotenv: ^5.0.2 flutter_svg: ^2.0.8 path_provider: ^2.0.11 - intl: ^0.18.0 drift: ^2.0.0 dio: ^5.1.2 isar: ^3.0.5 From 4b26ee962ee8c09c32e466a6abf445bc006bca77 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Wed, 11 Dec 2024 12:22:32 +0530 Subject: [PATCH 181/241] version upgrade digit_ui_components fixes related to components --- packages/closed_household/pubspec.lock | 347 ++++++--- packages/closed_household/pubspec.yaml | 8 +- packages/digit_data_model/pubspec.lock | 23 +- packages/digit_data_model/pubspec.yaml | 6 +- packages/digit_scanner/example/pubspec.lock | 88 ++- packages/digit_scanner/example/pubspec.yaml | 2 + packages/digit_scanner/pubspec.lock | 226 +++--- packages/digit_scanner/pubspec.yaml | 3 +- packages/inventory_management/pubspec.lock | 626 ++++++++++++++--- packages/inventory_management/pubspec.yaml | 8 +- .../beneficiary/beneficiary_checklist.dart | 82 +-- .../beneficiary/beneficiary_details.dart | 97 +-- .../beneficiary/deliver_intervention.dart | 20 +- .../beneficiary/delivery_summary_page.dart | 49 +- .../pages/beneficiary/dose_administered.dart | 660 +++++++++--------- .../pages/beneficiary/household_overview.dart | 359 +++++----- .../record_past_delivery_details.dart | 374 +++++----- .../pages/beneficiary/refer_beneficiary.dart | 532 +++++++------- .../pages/beneficiary/refused_delivery.dart | 8 +- .../lib/pages/beneficiary/side_effects.dart | 25 +- .../widgets/household_acknowledgement.dart | 12 +- .../widgets/splash_acknowledgement.dart | 13 +- .../beneficiary_acknowledgement.dart | 23 +- .../house_details.dart | 288 ++++---- .../household_details.dart | 615 ++++++++-------- .../household_location.dart | 358 +++++----- .../individual_details.dart | 16 +- .../lib/pages/reason_for_deletion.dart | 6 +- .../pages/registration_delivery_wrapper.dart | 6 +- .../lib/pages/search_beneficiary.dart | 22 +- .../lib/pages/summary_page.dart | 393 ++++++----- .../lib/utils/utils.dart | 1 + .../widgets/beneficiary/beneficiary_card.dart | 12 +- .../resource_beneficiary_card.dart | 171 ++--- .../beneficiary/view_beneficiary_card.dart | 6 +- .../no_facilities_assigned_dialog.dart | 6 +- .../lib/widgets/member_card/member_card.dart | 70 +- .../widgets/status_filter/status_filter.dart | 14 +- .../lib/widgets/table_card/table_card.dart | 18 +- packages/registration_delivery/pubspec.lock | 310 +++++--- packages/registration_delivery/pubspec.yaml | 9 +- packages/survey_form/example/lib/main.dart | 10 +- packages/survey_form/example/pubspec.lock | 27 +- packages/survey_form/example/pubspec.yaml | 6 +- .../lib/data/repositories/remote/service.dart | 13 +- .../remote/service_attributes.dart | 13 +- .../remote/service_definition.dart | 13 +- .../lib/pages/acknowledgement.dart | 51 +- .../survey_form/lib/pages/survey_form.dart | 32 +- .../lib/pages/survey_form_boundary_view.dart | 10 +- .../lib/pages/survey_form_preview.dart | 152 ++-- .../lib/pages/survey_form_view.dart | 408 +++++------ .../lib/pages/survey_form_wrapper.dart | 19 +- .../survey_form/lib/widgets/action_card.dart | 45 -- .../widgets/back_navigation_help_header.dart | 9 +- packages/survey_form/pubspec.lock | 35 +- packages/survey_form/pubspec.yaml | 6 +- 57 files changed, 3784 insertions(+), 2977 deletions(-) delete mode 100644 packages/survey_form/lib/widgets/action_card.dart diff --git a/packages/closed_household/pubspec.lock b/packages/closed_household/pubspec.lock index 76890865c..411394314 100644 --- a/packages/closed_household/pubspec.lock +++ b/packages/closed_household/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -117,18 +125,18 @@ packages: dependency: "direct main" description: name: auto_route - sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 + sha256: a9001a90539ca3effc168f7e1029a5885c7326b9032c09ac895e303c1d137704 url: "https://pub.dev" source: hosted - version: "7.9.2" + version: "8.3.0" auto_route_generator: dependency: "direct dev" description: name: auto_route_generator - sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" + sha256: ba28133d3a3bf0a66772bcc98dade5843753cd9f1a8fb4802b842895515b67d3 url: "https://pub.dev" source: hosted - version: "7.3.2" + version: "8.0.0" bloc: dependency: transitive description: @@ -186,13 +194,13 @@ packages: source: hosted version: "2.4.2" build_runner: - dependency: "direct main" + dependency: "direct dev" description: name: build_runner - sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" url: "https://pub.dev" source: hosted - version: "2.4.9" + version: "2.4.11" build_runner_core: dependency: transitive description: @@ -221,26 +229,26 @@ packages: dependency: transitive description: name: camera - sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" + sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167" url: "https://pub.dev" source: hosted - version: "0.10.5+9" - camera_android: + version: "0.11.0+2" + camera_android_camerax: dependency: transitive description: - name: camera_android - sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 + name: camera_android_camerax + sha256: "011be2ab0e5b3e3aa8094413fa890f8c5c5afd7cfdaef353a992047d4dab5780" url: "https://pub.dev" source: hosted - version: "0.10.9+2" + version: "0.6.8+2" camera_avfoundation: dependency: transitive description: name: camera_avfoundation - sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" + sha256: "2e4c568f70e406ccb87376bc06b53d2f5bebaab71e2fbcc1a950e31449381bcf" url: "https://pub.dev" source: hosted - version: "0.9.13+10" + version: "0.9.17+5" camera_platform_interface: dependency: transitive description: @@ -333,10 +341,10 @@ packages: dependency: transitive description: name: cross_file - sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" url: "https://pub.dev" source: hosted - version: "0.3.3+8" + version: "0.3.4+2" crypto: dependency: transitive description: @@ -372,12 +380,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git - version: "4.2.0" + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.3" dart_style: dependency: transitive description: @@ -386,6 +392,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.2" + dartx: + dependency: transitive + description: + name: dartx + sha256: "8b25435617027257d43e6508b5fe061012880ddfdaa75a71d607c3de2a13d244" + url: "https://pub.dev" + source: hosted + version: "1.2.0" db_viewer: dependency: transitive description: @@ -405,27 +419,31 @@ packages: digit_components: dependency: transitive description: - name: digit_components - sha256: "07b585e5d8010639366da72a4a8b215ce9b8790c75b2162b66af3cea57ca35d9" - url: "https://pub.dev" - source: hosted + path: "../digit_components" + relative: true + source: path version: "1.0.2+1" digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" - url: "https://pub.dev" - source: hosted + path: "../digit_data_model" + relative: true + source: path version: "1.0.5-dev.1" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_scanner: dependency: "direct main" description: - name: digit_scanner - sha256: "9862c4885465bb1942e36dc9b42596c201648db9b0f5ffb8ad768e2409fc2742" - url: "https://pub.dev" - source: hosted - version: "1.0.3+1" + path: "../digit_scanner" + relative: true + source: path + version: "1.0.4" digit_showcase: dependency: "direct main" description: @@ -437,10 +455,11 @@ packages: digit_ui_components: dependency: "direct main" description: - name: digit_ui_components - sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae - url: "https://pub.dev" - source: hosted + path: "flutter/digit-ui-components/digit_components" + ref: version_update + resolved-ref: c68a3ceb1f00c6128780c0cbeb58d9aa8c4d7a13 + url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" + source: git version: "0.0.1+7" dio: dependency: transitive @@ -470,10 +489,10 @@ packages: dependency: "direct main" description: name: drift - sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + sha256: "6acedc562ffeed308049f78fb1906abad3d65714580b6745441ee6d50ec564cd" url: "https://pub.dev" source: hosted - version: "2.15.0" + version: "2.18.0" drift_db_viewer: dependency: "direct main" description: @@ -486,18 +505,18 @@ packages: dependency: "direct dev" description: name: drift_dev - sha256: c037d9431b6f8dc633652b1469e5f53aaec6e4eb405ed29dd232fa888ef10d88 + sha256: d9b020736ea85fff1568699ce18b89fabb3f0f042e8a7a05e84a3ec20d39acde url: "https://pub.dev" source: hosted - version: "2.15.0" + version: "2.18.0" easy_stepper: dependency: transitive description: name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" url: "https://pub.dev" source: hosted - version: "0.5.2+1" + version: "0.8.5+1" fake_async: dependency: transitive description: @@ -562,6 +581,46 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: @@ -730,10 +789,10 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" + sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" url: "https://pub.dev" source: hosted - version: "8.2.5" + version: "8.2.8" formula_parser: dependency: "direct main" description: @@ -778,10 +837,10 @@ packages: dependency: transitive description: name: geolocator_android - sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" url: "https://pub.dev" source: hosted - version: "4.3.1" + version: "4.6.1" geolocator_apple: dependency: transitive description: @@ -826,26 +885,26 @@ packages: dependency: transitive description: name: google_fonts - sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 url: "https://pub.dev" source: hosted - version: "4.0.5" + version: "6.2.1" google_mlkit_barcode_scanning: dependency: transitive description: name: google_mlkit_barcode_scanning - sha256: "965183a8cd5cef8477ceea5dbdf29c34a739cf0cfbf1bdad54cd3f9f1807afe5" + sha256: f1a2a39cf1730b9a5e2784a07efa1ca5bfdfdde6aa00b193b3f8cd1953c638ec url: "https://pub.dev" source: hosted - version: "0.10.0" + version: "0.12.0" google_mlkit_commons: dependency: transitive description: name: google_mlkit_commons - sha256: "046586b381cdd139f7f6a05ad6998f7e339d061bd70158249907358394b5f496" + sha256: "27d626c66a181351a953eba5b6ff1ff123aadb891b4dab085b292118f039d6ac" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.1" graphs: dependency: transitive description: @@ -854,6 +913,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.1" + group_radio_button: + dependency: transitive + description: + name: group_radio_button + sha256: "204de8d16b224be7fc72dade0c3afd410ff5a34417d89f74f0fd8be7a8c2b4d6" + url: "https://pub.dev" + source: hosted + version: "1.3.0" gs1_barcode_parser: dependency: "direct main" description: @@ -882,10 +949,10 @@ packages: dependency: transitive description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -970,10 +1037,10 @@ packages: dependency: "direct main" description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" io: dependency: transitive description: @@ -998,6 +1065,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.0+1" + isar_generator: + dependency: "direct dev" + description: + name: isar_generator + sha256: "76c121e1295a30423604f2f819bc255bc79f852f3bc8743a24017df6068ad133" + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" js: dependency: transitive description: @@ -1022,6 +1097,30 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -1034,26 +1133,26 @@ packages: dependency: "direct main" description: name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.0" location_web: dependency: transitive description: name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + sha256: "49dda13d415c4603c5775a33fb22f575e0aa3f0ec2916644ddcd722db31ee884" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "5.0.2" logging: dependency: transitive description: @@ -1066,34 +1165,34 @@ packages: dependency: transitive description: name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "3.1.3" matcher: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -1146,26 +1245,26 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "8.0.2" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.1" path: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_drawing: dependency: transitive description: @@ -1258,10 +1357,10 @@ packages: dependency: "direct main" description: name: pluto_grid - sha256: e77c34a33dd9d74abbe20ba1df96474dded150dd042c7f7495be1bc2c26bd37f + sha256: "1d4cd9d2652742b556aa9b3230cc64672a3f63c34a9acc80fef794ab36ad903b" url: "https://pub.dev" source: hosted - version: "7.0.2" + version: "8.0.0" pointer_interceptor: dependency: transitive description: @@ -1306,18 +1405,18 @@ packages: dependency: transitive description: name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 + sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a url: "https://pub.dev" source: hosted - version: "0.8.1" + version: "2.1.1" reactive_forms: dependency: "direct main" description: name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "17.0.1" recase: dependency: "direct main" description: @@ -1329,11 +1428,10 @@ packages: registration_delivery: dependency: "direct main" description: - name: registration_delivery - sha256: b7074bf7115e375b9df2ad2937891139fea163024a35958ff177af137574c047 - url: "https://pub.dev" - source: hosted - version: "1.0.3+3" + path: "../registration_delivery" + relative: true + source: path + version: "1.0.4-dev.5" remove_emoji_input_formatter: dependency: transitive description: @@ -1427,6 +1525,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqlite3: dependency: transitive description: @@ -1447,10 +1553,10 @@ packages: dependency: transitive description: name: sqlparser - sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" + sha256: ade9a67fd70d0369329ed3373208de7ebd8662470e8c396fc8d0d60f9acdfc9f url: "https://pub.dev" source: hosted - version: "0.34.1" + version: "0.36.0" stack_trace: dependency: transitive description: @@ -1483,6 +1589,13 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" + survey_form: + dependency: "direct overridden" + description: + path: "../survey_form" + relative: true + source: path + version: "0.0.1-dev.2" synchronized: dependency: transitive description: @@ -1503,26 +1616,34 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" + url: "https://pub.dev" + source: hosted + version: "0.6.0" + time: + dependency: transitive + description: + name: time + sha256: "370572cf5d1e58adcb3e354c47515da3f7469dac3a95b447117e728e7be6f461" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "2.1.5" timing: dependency: transitive description: @@ -1615,10 +1736,10 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.3.3" url_launcher_windows: dependency: transitive description: @@ -1631,10 +1752,10 @@ packages: dependency: "direct main" description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.5.1" vector_graphics: dependency: transitive description: @@ -1679,10 +1800,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1695,10 +1816,10 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.5.1" web_socket_channel: dependency: transitive description: @@ -1739,6 +1860,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.3.0" + xxh3: + dependency: transitive + description: + name: xxh3 + sha256: "399a0438f5d426785723c99da6b16e136f4953fb1e9db0bf270bd41dd4619916" + url: "https://pub.dev" + source: hosted + version: "1.2.0" yaml: dependency: transitive description: @@ -1748,5 +1877,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.4.0 <3.9.0" + flutter: ">=3.22.0" diff --git a/packages/closed_household/pubspec.yaml b/packages/closed_household/pubspec.yaml index 0df2df428..a5d2d1887 100644 --- a/packages/closed_household/pubspec.yaml +++ b/packages/closed_household/pubspec.yaml @@ -11,7 +11,11 @@ environment: dependencies: flutter: sdk: flutter - digit_ui_components: 0.0.1+7 + digit_ui_components: + git: + url: https://github.com/egovernments/DIGIT-UI-LIBRARIES + ref: version_update + path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 reactive_forms: ^17.0.0 @@ -40,7 +44,7 @@ dependencies: async: ^2.11.0 formula_parser: ^2.0.1 registration_delivery: ^1.0.3+1 - location: ^5.0.0 + location: ^6.0.2 dev_dependencies: diff --git a/packages/digit_data_model/pubspec.lock b/packages/digit_data_model/pubspec.lock index e7a3af779..65520d6db 100644 --- a/packages/digit_data_model/pubspec.lock +++ b/packages/digit_data_model/pubspec.lock @@ -323,11 +323,12 @@ packages: digit_ui_components: dependency: "direct main" description: - name: digit_ui_components - sha256: d2f065d59090616650a49e838889f12e1f9635c4f4f74a6b4cc25411a5e87a04 - url: "https://pub.dev" - source: hosted - version: "0.0.2-dev.2" + path: "flutter/digit-ui-components/digit_components" + ref: version_update + resolved-ref: "68e80b1a2f13e166698274cae5b1ca6a850c476b" + url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" + source: git + version: "0.0.1+7" dio: dependency: "direct main" description: @@ -832,26 +833,26 @@ packages: dependency: transitive description: name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.0" location_web: dependency: transitive description: name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + sha256: "49dda13d415c4603c5775a33fb22f575e0aa3f0ec2916644ddcd722db31ee884" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "5.0.2" logging: dependency: transitive description: diff --git a/packages/digit_data_model/pubspec.yaml b/packages/digit_data_model/pubspec.yaml index e4bfa60a6..8f0622488 100644 --- a/packages/digit_data_model/pubspec.yaml +++ b/packages/digit_data_model/pubspec.yaml @@ -25,7 +25,11 @@ dependencies: dio: ^5.4.3+1 mocktail: ^1.0.3 collection: ^1.18.0 - digit_ui_components: 0.0.2-dev.2 + digit_ui_components: + git: + url: https://github.com/egovernments/DIGIT-UI-LIBRARIES + ref: version_update + path: ./flutter/digit-ui-components/digit_components dev_dependencies: flutter_test: diff --git a/packages/digit_scanner/example/pubspec.lock b/packages/digit_scanner/example/pubspec.lock index c5667be46..7e0d04aeb 100644 --- a/packages/digit_scanner/example/pubspec.lock +++ b/packages/digit_scanner/example/pubspec.lock @@ -277,10 +277,10 @@ packages: dependency: transitive description: name: cross_file - sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" url: "https://pub.dev" source: hosted - version: "0.3.3+8" + version: "0.3.4+2" crypto: dependency: transitive description: @@ -306,13 +306,12 @@ packages: source: hosted version: "2.3.6" digit_components: - dependency: transitive + dependency: "direct main" description: - name: digit_components - sha256: "9cca4d9a546037080afe02b6ade82fdf01574e11f5656ad12120fd6966578616" - url: "https://pub.dev" - source: hosted - version: "1.0.1+1" + path: "../../digit_components" + relative: true + source: path + version: "1.0.2+1" digit_scanner: dependency: "direct main" description: @@ -324,10 +323,10 @@ packages: dependency: transitive description: name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" url: "https://pub.dev" source: hosted - version: "0.5.2+1" + version: "0.8.5+1" fake_async: dependency: transitive description: @@ -437,6 +436,11 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.0" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -483,10 +487,10 @@ packages: dependency: transitive description: name: fluttertoast - sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" + sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" url: "https://pub.dev" source: hosted - version: "8.2.5" + version: "8.2.8" freezed_annotation: dependency: transitive description: @@ -515,10 +519,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 url: "https://pub.dev" source: hosted - version: "4.0.5" + version: "6.2.1" google_mlkit_barcode_scanning: dependency: transitive description: @@ -563,10 +567,10 @@ packages: dependency: transitive description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -587,10 +591,10 @@ packages: dependency: transitive description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" io: dependency: transitive description: @@ -651,26 +655,26 @@ packages: dependency: transitive description: name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.0" location_web: dependency: transitive description: name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + sha256: "15ad7b4c8a9f55abee513373755e093a40c04d7e24fc1b4f89676fe99523d034" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "5.0.1" logging: dependency: transitive description: @@ -683,10 +687,10 @@ packages: dependency: transitive description: name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "3.1.3" matcher: dependency: transitive description: @@ -747,18 +751,18 @@ packages: dependency: transitive description: name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + sha256: da8d9ac8c4b1df253d1a328b7bf01ae77ef132833479ab40763334db13b91cce url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "8.1.1" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.1" path: dependency: transitive description: @@ -891,18 +895,18 @@ packages: dependency: transitive description: name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 + sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a url: "https://pub.dev" source: hosted - version: "0.8.1" + version: "2.1.1" reactive_forms: dependency: transitive description: name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "17.0.1" remove_emoji_input_formatter: dependency: transitive description: @@ -1080,18 +1084,26 @@ packages: dependency: transitive description: name: web - sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05" + sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb url: "https://pub.dev" source: hosted - version: "0.4.2" + version: "1.1.0" + web_socket: + dependency: transitive + description: + name: web_socket + sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83" + url: "https://pub.dev" + source: hosted + version: "0.1.6" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: "939ab60734a4f8fa95feacb55804fa278de28bdeef38e616dc08e44a84adea23" + sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f" url: "https://pub.dev" source: hosted - version: "2.4.3" + version: "3.0.1" win32: dependency: transitive description: diff --git a/packages/digit_scanner/example/pubspec.yaml b/packages/digit_scanner/example/pubspec.yaml index 651cc222e..cf8a316a8 100644 --- a/packages/digit_scanner/example/pubspec.yaml +++ b/packages/digit_scanner/example/pubspec.yaml @@ -38,6 +38,8 @@ dependencies: flutter_bloc: ^8.1.1 digit_scanner: path: ../../digit_scanner + digit_components: + path: ../../digit_components dev_dependencies: flutter_test: diff --git a/packages/digit_scanner/pubspec.lock b/packages/digit_scanner/pubspec.lock index 7b431c97a..734fc9e7d 100644 --- a/packages/digit_scanner/pubspec.lock +++ b/packages/digit_scanner/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "67.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -17,6 +25,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.4.1" + ansicolor: + dependency: transitive + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + url: "https://pub.dev" + source: hosted + version: "2.0.3" archive: dependency: transitive description: @@ -301,10 +317,10 @@ packages: dependency: transitive description: name: cross_file - sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" url: "https://pub.dev" source: hosted - version: "0.3.3+8" + version: "0.3.4+2" crypto: dependency: transitive description: @@ -321,6 +337,21 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" + dart_mappable: + dependency: transitive + description: + name: dart_mappable + sha256: f69a961ae8589724ebb542e588f228ae844c5f78028899cbe2cc718977c1b382 + url: "https://pub.dev" + source: hosted + version: "4.3.0" + dart_mappable_builder: + dependency: "direct overridden" + description: + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.3" dart_style: dependency: transitive description: @@ -337,22 +368,28 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.1" - digit_ui_components: + digit_components: dependency: "direct main" description: - name: digit_ui_components - sha256: d6720339263e48951e747aed31f45795ab7d7b4f0923e0fe13d63c4f83c41d97 - url: "https://pub.dev" - source: hosted - version: "0.0.3-beta" + path: "../digit_components" + relative: true + source: path + version: "1.0.2+1" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" easy_stepper: dependency: transitive description: name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" url: "https://pub.dev" source: hosted - version: "0.5.2+1" + version: "0.8.5+1" fake_async: dependency: transitive description: @@ -377,6 +414,46 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.0" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "9e69806bb3d905aeec3c1242e0e1475de6ea6d48f456af29d598fb229a2b4e5e" + url: "https://pub.dev" + source: hosted + version: "2.18.2" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: @@ -398,6 +475,14 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.6" + flutter_focus_watcher: + dependency: transitive + description: + name: flutter_focus_watcher + sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 + url: "https://pub.dev" + source: hosted + version: "2.0.0" flutter_keyboard_visibility: dependency: transitive description: @@ -454,6 +539,11 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.0" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -500,10 +590,10 @@ packages: dependency: transitive description: name: fluttertoast - sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" + sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" url: "https://pub.dev" source: hosted - version: "8.2.5" + version: "8.2.8" freezed: dependency: "direct dev" description: @@ -528,54 +618,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.0" - geolocator: - dependency: transitive - description: - name: geolocator - sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 - url: "https://pub.dev" - source: hosted - version: "10.1.1" - geolocator_android: - dependency: transitive - description: - name: geolocator_android - sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" - url: "https://pub.dev" - source: hosted - version: "4.6.1" - geolocator_apple: - dependency: transitive - description: - name: geolocator_apple - sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" - url: "https://pub.dev" - source: hosted - version: "2.3.8+1" - geolocator_platform_interface: - dependency: transitive - description: - name: geolocator_platform_interface - sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" - url: "https://pub.dev" - source: hosted - version: "4.2.4" - geolocator_web: - dependency: transitive - description: - name: geolocator_web - sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" - url: "https://pub.dev" - source: hosted - version: "2.2.1" - geolocator_windows: - dependency: transitive - description: - name: geolocator_windows - sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" - url: "https://pub.dev" - source: hosted - version: "0.2.3" glob: dependency: transitive description: @@ -588,10 +630,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 url: "https://pub.dev" source: hosted - version: "4.0.5" + version: "6.2.1" google_mlkit_barcode_scanning: dependency: "direct main" description: @@ -636,10 +678,10 @@ packages: dependency: transitive description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -660,10 +702,10 @@ packages: dependency: transitive description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" io: dependency: transitive description: @@ -732,26 +774,26 @@ packages: dependency: transitive description: name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.0" location_web: dependency: transitive description: name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + sha256: "15ad7b4c8a9f55abee513373755e093a40c04d7e24fc1b4f89676fe99523d034" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "5.0.1" logging: dependency: transitive description: @@ -764,10 +806,10 @@ packages: dependency: transitive description: name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "3.1.3" matcher: dependency: transitive description: @@ -844,18 +886,18 @@ packages: dependency: transitive description: name: package_info_plus - sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017" + sha256: da8d9ac8c4b1df253d1a328b7bf01ae77ef132833479ab40763334db13b91cce url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "8.1.1" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.1" path: dependency: "direct main" description: @@ -988,18 +1030,26 @@ packages: dependency: transitive description: name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 + sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a url: "https://pub.dev" source: hosted - version: "0.8.1" + version: "2.1.1" reactive_forms: dependency: transitive description: name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "17.0.1" + remove_emoji_input_formatter: + dependency: transitive + description: + name: remove_emoji_input_formatter + sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" + url: "https://pub.dev" + source: hosted + version: "0.0.1+1" shelf: dependency: transitive description: @@ -1165,6 +1215,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + type_plus: + dependency: transitive + description: + name: type_plus + sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 + url: "https://pub.dev" + source: hosted + version: "2.1.1" typed_data: dependency: transitive description: @@ -1233,10 +1291,10 @@ packages: dependency: transitive description: name: web - sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05" + sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb url: "https://pub.dev" source: hosted - version: "0.4.2" + version: "1.1.0" web_socket_channel: dependency: transitive description: diff --git a/packages/digit_scanner/pubspec.yaml b/packages/digit_scanner/pubspec.yaml index e1e5f961f..e0c17455f 100644 --- a/packages/digit_scanner/pubspec.yaml +++ b/packages/digit_scanner/pubspec.yaml @@ -38,7 +38,8 @@ dependencies: google_mlkit_barcode_scanning: ^0.12.0 camera: ^0.11.0+1 gs1_barcode_parser: ^1.0.5 - digit_components: ^1.0.1+1 + digit_components: + path: ../digit_components flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 overlay_builder: ^1.1.0 diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index 1bb76bac8..bda7b1fa2 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -117,18 +125,18 @@ packages: dependency: "direct main" description: name: auto_route - sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 + sha256: a9001a90539ca3effc168f7e1029a5885c7326b9032c09ac895e303c1d137704 url: "https://pub.dev" source: hosted - version: "7.9.2" + version: "8.3.0" auto_route_generator: dependency: "direct dev" description: name: auto_route_generator - sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" + sha256: ba28133d3a3bf0a66772bcc98dade5843753cd9f1a8fb4802b842895515b67d3 url: "https://pub.dev" source: hosted - version: "7.3.2" + version: "8.0.0" bloc: dependency: transitive description: @@ -186,13 +194,13 @@ packages: source: hosted version: "2.4.2" build_runner: - dependency: "direct main" + dependency: "direct dev" description: name: build_runner - sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" url: "https://pub.dev" source: hosted - version: "2.4.9" + version: "2.4.11" build_runner_core: dependency: transitive description: @@ -221,26 +229,26 @@ packages: dependency: transitive description: name: camera - sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" + sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167" url: "https://pub.dev" source: hosted - version: "0.10.5+9" - camera_android: + version: "0.11.0+2" + camera_android_camerax: dependency: transitive description: - name: camera_android - sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 + name: camera_android_camerax + sha256: "011be2ab0e5b3e3aa8094413fa890f8c5c5afd7cfdaef353a992047d4dab5780" url: "https://pub.dev" source: hosted - version: "0.10.9+2" + version: "0.6.8+2" camera_avfoundation: dependency: transitive description: name: camera_avfoundation - sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" + sha256: "2e4c568f70e406ccb87376bc06b53d2f5bebaab71e2fbcc1a950e31449381bcf" url: "https://pub.dev" source: hosted - version: "0.9.13+10" + version: "0.9.17+5" camera_platform_interface: dependency: transitive description: @@ -333,10 +341,10 @@ packages: dependency: transitive description: name: cross_file - sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" url: "https://pub.dev" source: hosted - version: "0.3.3+8" + version: "0.3.4+2" crypto: dependency: transitive description: @@ -345,6 +353,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" + url: "https://pub.dev" + source: hosted + version: "1.0.2" cupertino_icons: dependency: transitive description: @@ -364,12 +380,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git - version: "4.2.0" + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.3" dart_style: dependency: transitive description: @@ -395,45 +409,66 @@ packages: source: hosted version: "0.4.1" digit_components: - dependency: "direct main" + dependency: transitive description: - name: digit_components - sha256: "07b585e5d8010639366da72a4a8b215ce9b8790c75b2162b66af3cea57ca35d9" - url: "https://pub.dev" - source: hosted + path: "../digit_components" + relative: true + source: path version: "1.0.2+1" digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" - url: "https://pub.dev" - source: hosted + path: "../digit_data_model" + relative: true + source: path version: "1.0.5-dev.1" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_scanner: dependency: "direct main" description: - name: digit_scanner - sha256: "9862c4885465bb1942e36dc9b42596c201648db9b0f5ffb8ad768e2409fc2742" - url: "https://pub.dev" - source: hosted - version: "1.0.3+1" + path: "../digit_scanner" + relative: true + source: path + version: "1.0.4" + digit_ui_components: + dependency: "direct main" + description: + path: "flutter/digit-ui-components/digit_components" + ref: version_update + resolved-ref: c68a3ceb1f00c6128780c0cbeb58d9aa8c4d7a13 + url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" + source: git + version: "0.0.1+7" dio: - dependency: transitive + dependency: "direct main" description: name: dio sha256: "11e40df547d418cc0c4900a9318b26304e665da6fa4755399a9ff9efd09034b5" url: "https://pub.dev" source: hosted version: "5.4.3+1" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" drift: dependency: "direct main" description: name: drift - sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + sha256: "6acedc562ffeed308049f78fb1906abad3d65714580b6745441ee6d50ec564cd" url: "https://pub.dev" source: hosted - version: "2.15.0" + version: "2.18.0" drift_db_viewer: dependency: "direct main" description: @@ -446,18 +481,18 @@ packages: dependency: "direct dev" description: name: drift_dev - sha256: c037d9431b6f8dc633652b1469e5f53aaec6e4eb405ed29dd232fa888ef10d88 + sha256: d9b020736ea85fff1568699ce18b89fabb3f0f042e8a7a05e84a3ec20d39acde url: "https://pub.dev" source: hosted - version: "2.15.0" + version: "2.18.0" easy_stepper: dependency: transitive description: name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" url: "https://pub.dev" source: hosted - version: "0.5.2+1" + version: "0.8.5+1" fake_async: dependency: transitive description: @@ -482,6 +517,86 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: "2ca051989f69d1b2ca012b2cf3ccf78c70d40144f0861ff2c063493f7c8c3d45" + url: "https://pub.dev" + source: hosted + version: "8.0.5" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc" + url: "https://pub.dev" + source: hosted + version: "0.9.4+2" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "8f5d2f6590d51ecd9179ba39c64f722edc15226cc93dcc8698466ad36a4a85a4" + url: "https://pub.dev" + source: hosted + version: "0.9.3+3" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: @@ -503,6 +618,30 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.5" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" flutter_focus_watcher: dependency: transitive description: @@ -563,10 +702,15 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" + sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "4.0.0" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -583,14 +727,22 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" flutter_svg: dependency: "direct main" description: name: flutter_svg - sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c + sha256: "54900a1a1243f3c4a5506d853a2b5c2dbc38d5f27e52a52618a8054401431123" url: "https://pub.dev" source: hosted - version: "2.0.9" + version: "2.0.16" flutter_test: dependency: "direct dev" description: flutter @@ -613,10 +765,10 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" + sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" url: "https://pub.dev" source: hosted - version: "8.2.5" + version: "8.2.8" freezed: dependency: "direct dev" description: @@ -641,6 +793,54 @@ packages: url: "https://pub.dev" source: hosted version: "3.2.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" + url: "https://pub.dev" + source: hosted + version: "4.6.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" + url: "https://pub.dev" + source: hosted + version: "2.3.8+1" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -653,26 +853,26 @@ packages: dependency: transitive description: name: google_fonts - sha256: "6b6f10f0ce3c42f6552d1c70d2c28d764cf22bb487f50f66cca31dcd5194f4d6" + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 url: "https://pub.dev" source: hosted - version: "4.0.4" + version: "6.2.1" google_mlkit_barcode_scanning: dependency: transitive description: name: google_mlkit_barcode_scanning - sha256: "965183a8cd5cef8477ceea5dbdf29c34a739cf0cfbf1bdad54cd3f9f1807afe5" + sha256: f1a2a39cf1730b9a5e2784a07efa1ca5bfdfdde6aa00b193b3f8cd1953c638ec url: "https://pub.dev" source: hosted - version: "0.10.0" + version: "0.12.0" google_mlkit_commons: dependency: transitive description: name: google_mlkit_commons - sha256: "046586b381cdd139f7f6a05ad6998f7e339d061bd70158249907358394b5f496" + sha256: "27d626c66a181351a953eba5b6ff1ff123aadb891b4dab085b292118f039d6ac" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.1" graphs: dependency: transitive description: @@ -697,14 +897,22 @@ packages: url: "https://pub.dev" source: hosted version: "4.3.1" + html: + dependency: transitive + description: + name: html + sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" + url: "https://pub.dev" + source: hosted + version: "0.15.5" http: dependency: transitive description: name: http - sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "0.13.6" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -721,14 +929,78 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a" + url: "https://pub.dev" + source: hosted + version: "1.1.2" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "8c5abf0dcc24fe6e8e0b4a5c0b51a5cf30cefdf6407a3213dae61edc75a70f56" + url: "https://pub.dev" + source: hosted + version: "0.8.12+12" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83" + url: "https://pub.dev" + source: hosted + version: "3.0.6" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: "4f0568120c6fcc0aaa04511cb9f9f4d29fc3d0139884b1d06be88dcec7641d6b" + url: "https://pub.dev" + source: hosted + version: "0.8.12+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: "9ec26d410ff46f483c5519c29c02ef0e02e13a543f882b152d4bfd2f06802f80" + url: "https://pub.dev" + source: hosted + version: "2.10.0" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" intl: dependency: "direct main" description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" io: dependency: transitive description: @@ -777,38 +1049,62 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: name: lints - sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "4.0.0" location: - dependency: transitive + dependency: "direct main" description: name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.0" location_web: dependency: transitive description: name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + sha256: "49dda13d415c4603c5775a33fb22f575e0aa3f0ec2916644ddcd722db31ee884" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "5.0.2" logging: dependency: transitive description: @@ -821,34 +1117,34 @@ packages: dependency: transitive description: name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "3.1.3" matcher: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -901,26 +1197,34 @@ packages: dependency: transitive description: name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "8.0.2" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.1" path: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_parsing: dependency: transitive description: @@ -1005,10 +1309,10 @@ packages: dependency: "direct main" description: name: pluto_grid - sha256: e77c34a33dd9d74abbe20ba1df96474dded150dd042c7f7495be1bc2c26bd37f + sha256: "1d4cd9d2652742b556aa9b3230cc64672a3f63c34a9acc80fef794ab36ad903b" url: "https://pub.dev" source: hosted - version: "7.0.2" + version: "8.0.0" pointer_interceptor: dependency: transitive description: @@ -1053,18 +1357,18 @@ packages: dependency: transitive description: name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 + sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a url: "https://pub.dev" source: hosted - version: "0.8.1" + version: "2.1.1" reactive_forms: dependency: "direct main" description: name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "17.0.1" recase: dependency: "direct main" description: @@ -1166,6 +1470,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqlite3: dependency: transitive description: @@ -1178,18 +1490,18 @@ packages: dependency: "direct main" description: name: sqlite3_flutter_libs - sha256: fb2a106a2ea6042fe57de2c47074cc31539a941819c91e105b864744605da3f5 + sha256: "636b0fe8a2de894e5455572f6cbbc458f4ffecfe9f860b79439e27041ea4f0b9" url: "https://pub.dev" source: hosted - version: "0.5.21" + version: "0.5.27" sqlparser: dependency: transitive description: name: sqlparser - sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" + sha256: ade9a67fd70d0369329ed3373208de7ebd8662470e8c396fc8d0d60f9acdfc9f url: "https://pub.dev" source: hosted - version: "0.34.1" + version: "0.36.0" stack_trace: dependency: transitive description: @@ -1242,26 +1554,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" timing: dependency: transitive description: @@ -1286,38 +1598,118 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + url_launcher: + dependency: transitive + description: + name: url_launcher + sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" + url: "https://pub.dev" + source: hosted + version: "6.3.1" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79 + url: "https://pub.dev" + source: hosted + version: "6.3.9" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2" + url: "https://pub.dev" + source: hosted + version: "3.2.2" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" + url: "https://pub.dev" + source: hosted + version: "2.3.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4" + url: "https://pub.dev" + source: hosted + version: "3.1.3" uuid: dependency: "direct main" description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.5.1" vector_graphics: dependency: transitive description: name: vector_graphics - sha256: "4ac59808bbfca6da38c99f415ff2d3a5d7ca0a6b4809c71d9cf30fba5daf9752" + sha256: "27d5fefe86fb9aace4a9f8375b56b3c292b64d8c04510df230f849850d912cb7" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.15" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: f3247e7ab0ec77dc759263e68394990edc608fb2b480b80db8aa86ed09279e33 + sha256: "2430b973a4ca3c4dbc9999b62b8c719a160100dcbae5c819bae0cacce32c9cdb" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.12" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "18489bdd8850de3dd7ca8a34e0c446f719ec63e2bab2e7a8cc66a9028dd76c5a" + sha256: "1b4b9e706a10294258727674a340ae0d6e64a7231980f9f9a3d12e4b42407aad" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.16" vector_math: dependency: transitive description: @@ -1326,14 +1718,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" vm_service: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1346,10 +1746,10 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.5.1" web_socket_channel: dependency: transitive description: @@ -1399,5 +1799,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.4.0 <3.9.0" + flutter: ">=3.22.0" diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index e013f7bda..d3678b9ee 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -11,7 +11,11 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^0.0.2-dev + digit_ui_components: + git: + url: https://github.com/egovernments/DIGIT-UI-LIBRARIES + ref: version_update + path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 reactive_forms: ^17.0.0 @@ -35,8 +39,6 @@ dependencies: recase: ^4.1.0 digit_scanner: ^1.0.3+1 pluto_grid: ^8.0.0 - super_annotations: ^0.8.1 - sync_service: ^0.0.1-dev.1 dev_dependencies: flutter_test: diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart index 3b7b19ea6..df03d9c75 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart @@ -5,6 +5,7 @@ import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/utils/date_utils.dart'; +import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:digit_ui_components/widgets/atoms/selection_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; @@ -103,16 +104,16 @@ class _BeneficiaryChecklistPageState }, ), ]), - enableFixedButton: true, + enableFixedDigitButton: true, footer: DigitCard( margin: const EdgeInsets.only(top: spacer2), padding: const EdgeInsets.all(spacer2), children: [ - Button( + DigitButton( label: localizations .translate(i18.common.coreCommonSubmit), - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, onPressed: () async { // TODO: Submit checklist @@ -224,43 +225,44 @@ class _BeneficiaryChecklistPageState ), ); - showPopup( + showCustomPopup( context: context, - title: localizations.translate(i18 - .deliverIntervention - .beneficiaryChecklistDialogTitle), - type: PopUpType.simple, - actions: [ - Button( - label: localizations.translate( - i18.common.coreCommonYes, - ), - onPressed: () { - context.router.push( - DeliverInterventionRoute(), - ); - Navigator.of(context, - rootNavigator: true) - .pop(); - }, - type: ButtonType.primary, - size: ButtonSize.large), - Button( - label: localizations.translate( - i18.common.coreCommonNo, - ), - onPressed: () { - context.router.push( - RefusedDeliveryRoute(), - ); - Navigator.of( - context, - rootNavigator: true, - ).pop(); - }, - type: ButtonType.secondary, - size: ButtonSize.large) - ]); + builder: (popUpContext) => Popup( + title: localizations.translate(i18 + .deliverIntervention + .beneficiaryChecklistDialogTitle), + type: PopUpType.simple, + actions: [ + DigitButton( + label: localizations.translate( + i18.common.coreCommonYes, + ), + onPressed: () { + context.router.push( + DeliverInterventionRoute(), + ); + Navigator.of(context, + rootNavigator: true) + .pop(); + }, + type: DigitButtonType.primary, + size: DigitButtonSize.large), + DigitButton( + label: localizations.translate( + i18.common.coreCommonNo, + ), + onPressed: () { + context.router.push( + RefusedDeliveryRoute(), + ); + Navigator.of( + context, + rootNavigator: true, + ).pop(); + }, + type: DigitButtonType.secondary, + size: DigitButtonSize.large) + ])); }, ), ]), diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart index 43e21e3c6..2d70d3fd7 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart @@ -4,6 +4,7 @@ import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/utils/date_utils.dart'; +import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; import 'package:flutter/material.dart'; @@ -132,7 +133,7 @@ class BeneficiaryDetailsPageState return Scaffold( body: ScrollableContent( - enableFixedButton: true, + enableFixedDigitButton: true, header: const Column(children: [ BackNavigationHelpHeaderWidget(), ]), @@ -150,13 +151,13 @@ class BeneficiaryDetailsPageState const EdgeInsets.only(top: spacer2), padding: const EdgeInsets.all(spacer2), children: [ - Button( + DigitButton( label: '${localizations.translate(i18.beneficiaryDetails.recordCycle)} ' '${(deliverState.cycle == 0 ? (deliverState.cycle + 1) : deliverState.cycle).toString()} ${localizations.translate(i18.deliverIntervention.dose)} ' '${(deliverState.dose).toString()}', - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, onPressed: () async { final selectedCycle = cycles @@ -180,45 +181,49 @@ class BeneficiaryDetailsPageState .selectedIndividual, ), ); - showPopup( - context: context, - title: localizations - .translate(i18 - .beneficiaryDetails - .resourcesTobeDelivered), - type: PopUpType.simple, - additionalWidgets: [ - buildTableContent( - deliverState, - context, - variant, - state - .selectedIndividual, - state - .householdMemberWrapper - .household), - ], - actions: [ - Button( - label: localizations - .translate(i18 - .beneficiaryDetails - .ctaProceed), - onPressed: () { - Navigator.of( - context, - rootNavigator: - true, - ).pop(); - router.push( - DeliverInterventionRoute(), - ); - }, - type: ButtonType - .primary, - size: ButtonSize - .large), - ]); + showCustomPopup( + context: context, + builder: (popUpContext) => Popup( + title: localizations + .translate(i18 + .beneficiaryDetails + .resourcesTobeDelivered), + type: PopUpType.simple, + additionalWidgets: [ + buildTableContent( + deliverState, + context, + variant, + state + .selectedIndividual, + state + .householdMemberWrapper + .household), + ], + actions: [ + DigitButton( + label: localizations + .translate(i18 + .beneficiaryDetails + .ctaProceed), + onPressed: () { + Navigator.of( + context, + rootNavigator: + true, + ).pop(); + router.push( + DeliverInterventionRoute(), + ); + }, + type: + DigitButtonType + .primary, + size: + DigitButtonSize + .large), + ]), + ); } }, ), @@ -228,12 +233,12 @@ class BeneficiaryDetailsPageState margin: const EdgeInsets.only(top: spacer2), padding: const EdgeInsets.all(spacer2), children: [ - Button( + DigitButton( label: localizations.translate(i18 .householdOverView .householdOverViewActionText), - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, onPressed: () { context.router.push( diff --git a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart index 248024f29..2abebf36a 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart @@ -1,8 +1,8 @@ import 'package:auto_route/auto_route.dart'; import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; -import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/services/location_bloc.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/utils/component_utils.dart'; import 'package:digit_ui_components/widgets/atoms/digit_stepper.dart'; @@ -247,7 +247,7 @@ class DeliverInterventionPageState ), builder: (context, form, child) { return ScrollableContent( - enableFixedButton: true, + enableFixedDigitButton: true, footer: BlocBuilder( builder: (context, state) { @@ -266,14 +266,16 @@ class DeliverInterventionPageState LocationState>( builder: (context, locationState) { - return Button( + return DigitButton( label: localizations .translate( i18.common .coreCommonSubmit, ), - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType + .primary, + size: + DigitButtonSize.large, mainAxisSize: MainAxisSize.max, isDisabled: isClicked, @@ -476,14 +478,16 @@ class DeliverInterventionPageState }, )), Center( - child: Button( + child: DigitButton( label: localizations.translate( i18.deliverIntervention .resourceAddBeneficiary, ), - type: ButtonType.tertiary, - size: ButtonSize.medium, + type: DigitButtonType + .tertiary, + size: + DigitButtonSize.medium, isDisabled: ((form.control(_resourceDeliveredKey) as FormArray) .value ?? diff --git a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart index fceabab4c..d6e63cf92 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart @@ -4,6 +4,7 @@ import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/label_value_summary.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:recase/recase.dart'; @@ -49,7 +50,7 @@ class DeliverySummaryPageState extends LocalizedState { }, builder: (context, deliverState) { return ScrollableContent( - enableFixedButton: true, + enableFixedDigitButton: true, header: Column(children: [ const BackNavigationHelpHeaderWidget( showHelp: false, @@ -76,11 +77,11 @@ class DeliverySummaryPageState extends LocalizedState { ValueListenableBuilder( valueListenable: clickedStatus, builder: (context, bool isClicked, _) { - return Button( + return DigitButton( label: localizations .translate(i18.common.coreCommonNext), - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, isDisabled: isClicked ? true : false, onPressed: () async { @@ -92,7 +93,7 @@ class DeliverySummaryPageState extends LocalizedState { description: localizations.translate( i18.deliverIntervention.dialogContent), actions: [ - Button( + DigitButton( label: localizations.translate( i18.common.coreCommonSubmit), onPressed: () { @@ -101,16 +102,16 @@ class DeliverySummaryPageState extends LocalizedState { rootNavigator: true) .pop(true); }, - type: ButtonType.primary, - size: ButtonSize.large), - Button( + type: DigitButtonType.primary, + size: DigitButtonSize.large), + DigitButton( label: localizations.translate( i18.common.coreCommonCancel), onPressed: () => Navigator.of(context, rootNavigator: true) .pop(false), - type: ButtonType.secondary, - size: ButtonSize.large), + type: DigitButtonType.secondary, + size: DigitButtonSize.large), ], ), ); @@ -180,14 +181,13 @@ class DeliverySummaryPageState extends LocalizedState { DigitCard( margin: const EdgeInsets.all(spacer2), children: [ - LabelValueList( + LabelValueSummary( heading: localizations.translate(i18 .householdLocation .householdLocationLabelText), withDivider: true, - labelFlex: 6, items: [ - LabelValuePair( + LabelValueItem( label: localizations.translate( i18.householdLocation.villageLabel), value: deliverState @@ -202,7 +202,7 @@ class DeliverySummaryPageState extends LocalizedState { localizations.translate( i18.common.coreCommonNA), isInline: true), - LabelValuePair( + LabelValueItem( label: localizations.translate(i18 .householdLocation.landmarkFormLabel), value: deliverState.householdMemberWrapper @@ -215,13 +215,12 @@ class DeliverySummaryPageState extends LocalizedState { DigitCard( margin: const EdgeInsets.all(spacer2), children: [ - LabelValueList( + LabelValueSummary( heading: localizations.translate( i18.householdDetails.householdDetailsLabel), withDivider: true, - labelFlex: 6, items: [ - LabelValuePair( + LabelValueItem( label: localizations.translate( i18.beneficiaryDetails.totalMembers), value: deliverState.householdMemberWrapper @@ -229,7 +228,7 @@ class DeliverySummaryPageState extends LocalizedState { .toString() ?? '0', isInline: true), - LabelValuePair( + LabelValueItem( label: localizations.translate(i18 .householdDetails .noOfPregnantWomenCountLabel), @@ -248,7 +247,7 @@ class DeliverySummaryPageState extends LocalizedState { .toString() ?? '0', isInline: true), - LabelValuePair( + LabelValueItem( label: localizations.translate(i18 .householdDetails .noOfChildrenBelow5YearsLabel), @@ -271,13 +270,12 @@ class DeliverySummaryPageState extends LocalizedState { DigitCard( margin: const EdgeInsets.all(spacer2), children: [ - LabelValueList( + LabelValueSummary( heading: localizations.translate( i18.householdDetails.houseDetailsLabel), withDivider: true, - labelFlex: 6, items: [ - LabelValuePair( + LabelValueItem( label: localizations.translate( i18.householdDetails.noOfRoomsLabel), value: deliverState @@ -294,7 +292,7 @@ class DeliverySummaryPageState extends LocalizedState { .toString() ?? '0', isInline: true), - LabelValuePair( + LabelValueItem( label: localizations.translate( i18.householdDetails.typeOfStructure), value: (deliverState @@ -345,13 +343,12 @@ class DeliverySummaryPageState extends LocalizedState { return DigitCard( margin: const EdgeInsets.all(spacer2), children: [ - LabelValueList( + LabelValueSummary( heading: localizations.translate( '${RegistrationDeliverySingleton().selectedProject?.name.toUpperCase()}_${i18.deliverIntervention.deliveryDetailsLabel}_${deliverState.oldTask?.status}'), withDivider: true, - labelFlex: 6, items: [ - LabelValuePair( + LabelValueItem( label: localizations.translate(deliverState .oldTask?.status == Status.administeredFailed diff --git a/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart b/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart index 82b0af10e..863afeb32 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart @@ -1,7 +1,8 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_data_model/data_model.dart'; -import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/models/RadioButtonModel.dart'; +import 'package:digit_ui_components/services/location_bloc.dart'; import 'package:digit_ui_components/widgets/atoms/table_cell.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_table.dart'; @@ -60,14 +61,13 @@ class DoseAdministeredPageState extends LocalizedState { DigitTableColumn( header: localizations.translate(i18.beneficiaryDetails.beneficiaryDose), cellValue: 'dose', - width: MediaQuery.of(context).size.width / - 2.18, + width: MediaQuery.of(context).size.width / 2.18, ), DigitTableColumn( - header: localizations.translate(i18.beneficiaryDetails.beneficiaryResources), + header: localizations + .translate(i18.beneficiaryDetails.beneficiaryResources), cellValue: 'resources', - width: MediaQuery.of(context).size.width / - 2.18, + width: MediaQuery.of(context).size.width / 2.18, ), ]; @@ -80,7 +80,7 @@ class DoseAdministeredPageState extends LocalizedState { return ReactiveFormBuilder( form: () => buildForm(context), builder: (context, form, child) => ScrollableContent( - enableFixedButton: true, + enableFixedDigitButton: true, header: const Column(children: [ BackNavigationHelpHeaderWidget( showBackNavigation: false, @@ -88,258 +88,259 @@ class DoseAdministeredPageState extends LocalizedState { ), ]), footer: DigitCard( - margin: const EdgeInsets.only(top: spacer2), - padding: - const EdgeInsets.all(spacer2), - children: [ValueListenableBuilder( - valueListenable: clickedStatus, - builder: (context, bool isClicked, _) { - return Button( - label: localizations - .translate(i18.common.coreCommonNext), - type: ButtonType.primary, - size: ButtonSize.large, - mainAxisSize: MainAxisSize.max, - isDisabled: isClicked, - onPressed: () { - if (form - .control(_doseAdministeredKey) - .value == - null) { - clickedStatus.value = false; - form - .control(_doseAdministeredKey) - .setErrors({'': true}); - } - form.markAllAsTouched(); + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [ + ValueListenableBuilder( + valueListenable: clickedStatus, + builder: (context, bool isClicked, _) { + return DigitButton( + label: localizations + .translate(i18.common.coreCommonNext), + type: DigitButtonType.primary, + size: DigitButtonSize.large, + mainAxisSize: MainAxisSize.max, + isDisabled: isClicked, + onPressed: () { + if (form.control(_doseAdministeredKey).value == + null) { + clickedStatus.value = false; + form + .control(_doseAdministeredKey) + .setErrors({'': true}); + } + form.markAllAsTouched(); - if (!form.valid) { - return; - } else { - final doseAdministered = form - .control(_doseAdministeredKey) - .value as bool; - final lat = locationState.latitude; - final long = locationState.longitude; - clickedStatus.value = true; - final bloc = context - .read() - .state; - final event = - context.read(); + if (!form.valid) { + return; + } else { + final doseAdministered = form + .control(_doseAdministeredKey) + .value as bool; + final lat = locationState.latitude; + final long = locationState.longitude; + clickedStatus.value = true; + final bloc = context + .read() + .state; + final event = + context.read(); - if (doseAdministered == true && - context.mounted) { - // Iterate through future deliveries + if (doseAdministered == true && + context.mounted) { + // Iterate through future deliveries - for (var e in bloc.futureDeliveries!) { - int doseIndex = e.id; - final clientReferenceId = - IdGen.i.identifier; - final address = bloc.oldTask?.address; - // Create and dispatch a DeliverInterventionSubmitEvent with a new TaskModel - event - .add(DeliverInterventionSubmitEvent( - task: TaskModel( - projectId: - RegistrationDeliverySingleton() - .projectId, - address: address?.copyWith( - relatedClientReferenceId: - clientReferenceId, - id: null, - ), - status: Status.delivered.toValue(), - clientReferenceId: + for (var e in bloc.futureDeliveries!) { + int doseIndex = e.id; + final clientReferenceId = + IdGen.i.identifier; + final address = bloc.oldTask?.address; + // Create and dispatch a DeliverInterventionSubmitEvent with a new TaskModel + event.add(DeliverInterventionSubmitEvent( + task: TaskModel( + projectId: + RegistrationDeliverySingleton() + .projectId, + address: address?.copyWith( + relatedClientReferenceId: clientReferenceId, - projectBeneficiaryClientReferenceId: - bloc.oldTask - ?.projectBeneficiaryClientReferenceId, - tenantId: + id: null, + ), + status: Status.delivered.toValue(), + clientReferenceId: clientReferenceId, + projectBeneficiaryClientReferenceId: bloc + .oldTask + ?.projectBeneficiaryClientReferenceId, + tenantId: + RegistrationDeliverySingleton() + .tenantId, + rowVersion: 1, + auditDetails: AuditDetails( + createdBy: RegistrationDeliverySingleton() - .tenantId, - rowVersion: 1, - auditDetails: AuditDetails( - createdBy: - RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context - .millisecondsSinceEpoch(), - ), - clientAuditDetails: - ClientAuditDetails( - createdBy: - RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context - .millisecondsSinceEpoch(), - ), - resources: fetchProductVariant( - e, - overViewBloc - .selectedIndividual, - overViewBloc - .householdMemberWrapper - .household) - ?.productVariants - ?.map((variant) => - TaskResourceModel( - clientReferenceId: - IdGen.i.identifier, - tenantId: + .loggedInUserUuid!, + createdTime: context + .millisecondsSinceEpoch(), + ), + clientAuditDetails: + ClientAuditDetails( + createdBy: + RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: context + .millisecondsSinceEpoch(), + ), + resources: fetchProductVariant( + e, + overViewBloc + .selectedIndividual, + overViewBloc + .householdMemberWrapper + .household) + ?.productVariants + ?.map((variant) => + TaskResourceModel( + clientReferenceId: + IdGen.i.identifier, + tenantId: + RegistrationDeliverySingleton() + .tenantId, + taskclientReferenceId: + clientReferenceId, + quantity: variant.quantity + .toString(), + productVariantId: variant + .productVariantId, + isDelivered: true, + auditDetails: AuditDetails( + createdBy: RegistrationDeliverySingleton() - .tenantId, - taskclientReferenceId: - clientReferenceId, - quantity: variant.quantity - .toString(), - productVariantId: variant - .productVariantId, - isDelivered: true, - auditDetails: - AuditDetails( - createdBy: - RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context - .millisecondsSinceEpoch(), - ), - clientAuditDetails: - ClientAuditDetails( - createdBy: - RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context - .millisecondsSinceEpoch(), - ), - )) - .toList(), - additionalFields: - TaskAdditionalFields( - version: 1, - fields: [ - AdditionalField( - AdditionalFieldsType - .dateOfDelivery - .toValue(), - DateTime.now() - .millisecondsSinceEpoch - .toString(), - ), - AdditionalField( - AdditionalFieldsType - .dateOfAdministration - .toValue(), - DateTime.now() - .millisecondsSinceEpoch - .toString(), - ), - AdditionalField( - AdditionalFieldsType - .dateOfVerification - .toValue(), - DateTime.now() - .millisecondsSinceEpoch - .toString(), - ), - AdditionalField( - AdditionalFieldsType - .cycleIndex - .toValue(), - "0${bloc.cycle}", - ), + .loggedInUserUuid!, + createdTime: context + .millisecondsSinceEpoch(), + ), + clientAuditDetails: + ClientAuditDetails( + createdBy: + RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: context + .millisecondsSinceEpoch(), + ), + )) + .toList(), + additionalFields: + TaskAdditionalFields( + version: 1, + fields: [ + AdditionalField( + AdditionalFieldsType + .dateOfDelivery + .toValue(), + DateTime.now() + .millisecondsSinceEpoch + .toString(), + ), + AdditionalField( + AdditionalFieldsType + .dateOfAdministration + .toValue(), + DateTime.now() + .millisecondsSinceEpoch + .toString(), + ), + AdditionalField( + AdditionalFieldsType + .dateOfVerification + .toValue(), + DateTime.now() + .millisecondsSinceEpoch + .toString(), + ), + AdditionalField( + AdditionalFieldsType.cycleIndex + .toValue(), + "0${bloc.cycle}", + ), + AdditionalField( + AdditionalFieldsType.doseIndex + .toValue(), + "0$doseIndex", + ), + AdditionalField( + AdditionalFieldsType + .deliveryStrategy + .toValue(), + e.deliveryStrategy, + ), + if (lat != null) AdditionalField( - AdditionalFieldsType.doseIndex + AdditionalFieldsType.latitude .toValue(), - "0$doseIndex", + lat, ), + if (long != null) AdditionalField( - AdditionalFieldsType - .deliveryStrategy + AdditionalFieldsType.longitude .toValue(), - e.deliveryStrategy, + long, ), - if (lat != null) - AdditionalField( - AdditionalFieldsType - .latitude - .toValue(), - lat, - ), - if (long != null) - AdditionalField( - AdditionalFieldsType - .longitude - .toValue(), - long, - ), - ], - ), + ], ), - isEditing: false, - boundaryModel: - RegistrationDeliverySingleton() - .boundary!, - )); - } + ), + isEditing: false, + boundaryModel: + RegistrationDeliverySingleton() + .boundary!, + )); } + } - final reloadState = - context.read(); + final reloadState = + context.read(); - Future.delayed( - const Duration(milliseconds: 1000), - () { - reloadState - .add(HouseholdOverviewReloadEvent( - projectId: - RegistrationDeliverySingleton() - .projectId!, - projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, - )); - }, - ).then((value) => context.router.popAndPush( - HouseholdAcknowledgementRoute( - enableViewHousehold: true, - ), - )); - } - }, - ); - }, - ),] - ), - children: [ - DigitCard( - margin: const EdgeInsets.only( - top: spacer2, bottom: spacer2), - children: [Text( - localizations.translate( - i18.deliverIntervention.wasTheDoseAdministered, - ), - style: theme.textTheme.displayMedium, - ), - ReactiveWrapperField( - formControlName: _doseAdministeredKey, - builder: (field)=> RadioList( - radioButtons: Constants.yesNo - .map((e) => RadioButtonModel( - code: e.key.toString(), - name: localizations.translate(e.label), - )).toList(), - errorMessage: form.control(_doseAdministeredKey).hasErrors? - localizations.translate( - i18.common.corecommonRequired, - ):null, - groupValue: form.control(_doseAdministeredKey).value.toString()??'', - onChanged: (val) { - form.control(_doseAdministeredKey).value=val.code=='true'?true:false; + Future.delayed( + const Duration(milliseconds: 1000), + () { + reloadState + .add(HouseholdOverviewReloadEvent( + projectId: + RegistrationDeliverySingleton() + .projectId!, + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType!, + )); + }, + ).then((value) => context.router.popAndPush( + HouseholdAcknowledgementRoute( + enableViewHousehold: true, + ), + )); + } + }, + ); }, ), - ),] - ), + ]), + children: [ + DigitCard( + margin: const EdgeInsets.only( + top: spacer2, bottom: spacer2), + children: [ + Text( + localizations.translate( + i18.deliverIntervention.wasTheDoseAdministered, + ), + style: theme.textTheme.displayMedium, + ), + ReactiveWrapperField( + formControlName: _doseAdministeredKey, + builder: (field) => RadioList( + radioDigitButtons: Constants.yesNo + .map((e) => RadioButtonModel( + code: e.key.toString(), + name: localizations.translate(e.label), + )) + .toList(), + errorMessage: + form.control(_doseAdministeredKey).hasErrors + ? localizations.translate( + i18.common.corecommonRequired, + ) + : null, + groupValue: form + .control(_doseAdministeredKey) + .value + .toString() ?? + '', + onChanged: (val) { + form.control(_doseAdministeredKey).value = + val.code == 'true' ? true : false; + }, + ), + ), + ]), BlocBuilder( builder: (context, productState) { return productState.maybeWhen( @@ -352,97 +353,102 @@ class DoseAdministeredPageState extends LocalizedState { ); return DigitCard( - margin: const EdgeInsets.only( - top: spacer2, bottom: spacer2), - children: [BlocBuilder( - builder: (context, deliveryState) { - List tableDataRows = - deliveryState.futureDeliveries!.map((e) { - int doseIndex = deliveryState - .futureDeliveries! - .indexOf(e) + - deliveryState.dose + - 1; - List skus = fetchProductVariant( - e, - overViewBloc.selectedIndividual, - overViewBloc.householdMemberWrapper - .household)! - .productVariants! - .map((ele) { - final pv = variant!.firstWhere( - (element) => - element.id == ele.productVariantId, - ); + margin: const EdgeInsets.only( + top: spacer2, bottom: spacer2), + children: [ + BlocBuilder( + builder: (context, deliveryState) { + List tableDataRows = + deliveryState.futureDeliveries! + .map((e) { + int doseIndex = deliveryState + .futureDeliveries! + .indexOf(e) + + deliveryState.dose + + 1; + List skus = fetchProductVariant( + e, + overViewBloc.selectedIndividual, + overViewBloc + .householdMemberWrapper + .household)! + .productVariants! + .map((ele) { + final pv = variant!.firstWhere( + (element) => + element.id == + ele.productVariantId, + ); - return '${ele.quantity} - ${pv.sku.toString()}'; - }).toList(); + return '${ele.quantity} - ${pv.sku.toString()}'; + }).toList(); - return DigitTableRow(tableRow: [ - DigitTableData( - 'Dose $doseIndex', - cellKey: 'dose', - ), - DigitTableData( - skus.join(' + '), - cellKey: 'resources', - ), - ]); - }).toList(); - - return Column( - children: [ - Align( - alignment: Alignment.centerLeft, - child: Padding( - padding: const EdgeInsets.only( - bottom: spacer2 * 2, + return DigitTableRow(tableRow: [ + DigitTableData( + 'Dose $doseIndex', + cellKey: 'dose', + ), + DigitTableData( + skus.join(' + '), + cellKey: 'resources', ), - child: Text( - localizations.translate( - i18.beneficiaryDetails - .resourcesTobeProvided, + ]); + }).toList(); + + return Column( + children: [ + Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: const EdgeInsets.only( + bottom: spacer2 * 2, + ), + child: Text( + localizations.translate( + i18.beneficiaryDetails + .resourcesTobeProvided, + ), + style: theme + .textTheme.displayMedium, + ), ), - style: - theme.textTheme.displayMedium, ), - ), - ), - DigitTableCard( - element: { - localizations.translate( - i18.beneficiaryDetails - .beneficiaryAge, - ): localizations.translate( - fetchProductVariant( - deliveryState - .futureDeliveries - ?.first, - overViewBloc - .selectedIndividual, - overViewBloc - .householdMemberWrapper - .household)! - .condition!), - }, - ), - const Divider( - thickness: 2.0, - ), - DigitTable( - enableBorder: true, - showPagination: false, - columns: headerListResource, - rows: tableDataRows, - tableHeight: - (tableDataRows.length + 1) * 57.5, - ), - ], - ); - }, - ),] - ); + DigitTableCard( + element: { + localizations.translate( + i18.beneficiaryDetails + .beneficiaryAge, + ): localizations.translate( + fetchProductVariant( + deliveryState + .futureDeliveries + ?.first, + overViewBloc + .selectedIndividual, + overViewBloc + .householdMemberWrapper + .household)! + .condition!), + }, + ), + const Divider( + thickness: 2.0, + ), + DigitTable( + enableBorder: true, + showPagination: false, + columns: headerListResource, + rows: tableDataRows, + tableHeight: + (tableDataRows.length + 1) * + 57.5, + ), + ], + ); + }, + ), + ]); }, ); }, diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index d9728bc53..ee3422189 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -8,12 +8,13 @@ import 'package:digit_ui_components/theme/spacers.dart'; import 'package:digit_ui_components/utils/date_utils.dart'; import 'package:digit_ui_components/widgets/atoms/digit_action_card.dart'; import 'package:digit_ui_components/widgets/atoms/digit_button.dart'; +import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; -import 'package:survey_form/survey_form.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:survey_form/survey_form.dart'; import '../../blocs/beneficiary_registration/beneficiary_registration.dart'; import '../../blocs/delivery_intervention/deliver_intervention.dart'; @@ -74,94 +75,50 @@ class _HouseholdOverviewPageState body: state.loading ? const Center(child: CircularProgressIndicator()) : ScrollableContent( - header: BackNavigationHelpHeaderWidget( - handleBack: (){ - context.read().add(const SearchHouseholdsEvent.clear()); + header: BackNavigationHelpHeaderWidget( + handleBack: () { + context + .read() + .add(const SearchHouseholdsEvent.clear()); }, ), - enableFixedButton: true, + enableFixedDigitButton: true, footer: Offstage( - offstage: beneficiaryType == BeneficiaryType.individual || isOutsideProjectDateRange(), + offstage: beneficiaryType == BeneficiaryType.individual || + isOutsideProjectDateRange(), child: BlocBuilder( builder: (context, serviceDefinitionState) => BlocBuilder( builder: (ctx, deliverInterventionState) => DigitCard( - margin: - const EdgeInsets.only(top: spacer2), - padding: const EdgeInsets.all(spacer2), - children: [state.householdMemberWrapper.tasks?.lastOrNull?.status == - Status.administeredSuccess.toValue() - ? Padding( - padding: const EdgeInsets.symmetric( - vertical: spacer2), - child: Button( - label: localizations.translate( - i18.memberCard - .deliverDetailsUpdateLabel, - ), - isDisabled: state.householdMemberWrapper.tasks?.lastOrNull?.status == Status.administeredSuccess.toValue() - ? true : false, - type: ButtonType.secondary, - size: ButtonSize.large, - mainAxisSize: MainAxisSize.max, - onPressed: () { - serviceDefinitionState.when( - empty: () {}, - isloading: () {}, - serviceDefinitionFetch: - (value, model) { - if (value - .where((element) => element - .code - .toString() - .contains( - '${RegistrationDeliverySingleton().selectedProject?.name}.${RegistrationDeliveryEnums.iec.toValue()}')) - .toList() - .isEmpty) { - context.router.push( - DeliverInterventionRoute(), - ); - } else { - navigateToChecklist(ctx); - } - }); - }, - ), - ) - : Button( - label: localizations.translate( - i18.householdOverView - .householdOverViewActionText, - ), - type: ButtonType.primary, - size: ButtonSize.large, - mainAxisSize: MainAxisSize.max, - isDisabled: (state.householdMemberWrapper - .projectBeneficiaries ?? - []) - .isEmpty || - state.householdMemberWrapper.tasks - ?.lastOrNull?.status == - Status.closeHousehold.toValue() - ? true : false, - onPressed: () async { - final bloc = ctx - .read(); - - final projectId = - RegistrationDeliverySingleton() - .projectId!; - - bloc.add( - HouseholdOverviewReloadEvent( - projectId: projectId, - projectBeneficiaryType: - beneficiaryType, - ), - ); - + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [ + state.householdMemberWrapper.tasks?.lastOrNull + ?.status == + Status.administeredSuccess.toValue() + ? Padding( + padding: const EdgeInsets.symmetric( + vertical: spacer2), + child: DigitButton( + label: localizations.translate( + i18.memberCard + .deliverDetailsUpdateLabel, + ), + isDisabled: state + .householdMemberWrapper + .tasks + ?.lastOrNull + ?.status == + Status.administeredSuccess + .toValue() + ? true + : false, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () { serviceDefinitionState.when( empty: () {}, isloading: () {}, @@ -183,15 +140,75 @@ class _HouseholdOverviewPageState } }); }, - ),] - ), + ), + ) + : DigitButton( + label: localizations.translate( + i18.householdOverView + .householdOverViewActionText, + ), + type: DigitButtonType.primary, + size: DigitButtonSize.large, + mainAxisSize: MainAxisSize.max, + isDisabled: (state.householdMemberWrapper + .projectBeneficiaries ?? + []) + .isEmpty || + state + .householdMemberWrapper + .tasks + ?.lastOrNull + ?.status == + Status.closeHousehold + .toValue() + ? true + : false, + onPressed: () async { + final bloc = + ctx.read(); + + final projectId = + RegistrationDeliverySingleton() + .projectId!; + + bloc.add( + HouseholdOverviewReloadEvent( + projectId: projectId, + projectBeneficiaryType: + beneficiaryType, + ), + ); + + serviceDefinitionState.when( + empty: () {}, + isloading: () {}, + serviceDefinitionFetch: + (value, model) { + if (value + .where((element) => element + .code + .toString() + .contains( + '${RegistrationDeliverySingleton().selectedProject?.name}.${RegistrationDeliveryEnums.iec.toValue()}')) + .toList() + .isEmpty) { + context.router.push( + DeliverInterventionRoute(), + ); + } else { + navigateToChecklist(ctx); + } + }); + }, + ), + ]), ), ), ), slivers: [ SliverToBoxAdapter( - child: DigitCard( - children: [Column( + child: DigitCard(children: [ + Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.max, children: [ @@ -201,7 +218,7 @@ class _HouseholdOverviewPageState .isNotEmpty) Align( alignment: Alignment.centerLeft, - child: Button( + child: DigitButton( onPressed: () { final projectId = RegistrationDeliverySingleton() @@ -218,16 +235,16 @@ class _HouseholdOverviewPageState ); showDialog( context: context, - builder: (ctx)=> ActionCard( + builder: (ctx) => DigitActionCard( actions: [ - Button( + DigitButton( prefixIcon: Icons.edit, label: localizations.translate( i18.householdOverView .householdOverViewEditLabel, ), - type: ButtonType.secondary, - size: ButtonSize.large, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, onPressed: () async { Navigator.of( context, @@ -296,8 +313,8 @@ class _HouseholdOverviewPageState i18.householdOverView .householdOverViewEditIconText, ), - type: ButtonType.tertiary, - size: ButtonSize.medium, + type: DigitButtonType.tertiary, + size: DigitButtonSize.medium, prefixIcon: Icons.edit, ), ), @@ -326,9 +343,7 @@ class _HouseholdOverviewPageState // ), // ), Padding( - padding: const EdgeInsets.all( - spacer2 - ), + padding: const EdgeInsets.all(spacer2), child: Text( localizations.translate(i18.householdOverView .householdOverViewLabel), @@ -343,8 +358,8 @@ class _HouseholdOverviewPageState child: BlocBuilder( builder: (ctx, deliverInterventionState) { - - bool shouldShowStatus = beneficiaryType == BeneficiaryType.household; + bool shouldShowStatus = beneficiaryType == + BeneficiaryType.household; return Column( children: [ @@ -363,20 +378,26 @@ class _HouseholdOverviewPageState localizations.translate( i18.householdLocation .administrationAreaFormLabel, - ): state.householdMemberWrapper.headOfHousehold?.address?.first.locality?.code, + ): state + .householdMemberWrapper + .headOfHousehold + ?.address + ?.first + .locality + ?.code, localizations.translate( i18.deliverIntervention .memberCountText, ): state.householdMemberWrapper .household?.memberCount, - if(shouldShowStatus) - localizations.translate(i18 - .beneficiaryDetails - .status): localizations.translate( - getStatusAttributes(state, - deliverInterventionState)[ - 'textLabel'], - ) + if (shouldShowStatus) + localizations.translate(i18 + .beneficiaryDetails.status): + localizations.translate( + getStatusAttributes(state, + deliverInterventionState)[ + 'textLabel'], + ) }, ), ], @@ -446,7 +467,8 @@ class _HouseholdOverviewPageState .householdMemberWrapper.sideEffects ?.where((element) => element.taskClientReferenceId == - taskData.lastOrNull?.clientReferenceId) + taskData.lastOrNull + ?.clientReferenceId) .toList() : null; final ageInYears = e.dateOfBirth != null @@ -580,54 +602,65 @@ class _HouseholdOverviewPageState ).pop(); }, deleteMemberAction: () { - showPopup( - context: context, - title: localizations.translate(i18 - .householdOverView - .householdOverViewActionCardTitle), - type: PopUpType.simple, - actions: [ - Button( - label: localizations.translate(i18.householdOverView - .householdOverViewPrimaryActionLabel), - onPressed: () { - Navigator.of( - context, - rootNavigator: true, - ) - ..pop() - ..pop(); - context - .read< - HouseholdOverviewBloc>() - .add( - HouseholdOverviewEvent - .selectedIndividual( - individualModel: e, - ), - ); - context.router.push( - ReasonForDeletionRoute( - isHousholdDelete: false, - ), - ); - }, - type: ButtonType.primary, - size: ButtonSize.large - ), - Button( - label: localizations.translate(i18.householdOverView - .householdOverViewSecondaryActionLabel), - onPressed: () { - Navigator.of( - context, - rootNavigator: true, - ).pop(); - }, - type: ButtonType.tertiary, - size: ButtonSize.large - ) - ] + showCustomPopup( + context: context, + builder: (BuildContext) { + return Popup( + title: localizations.translate(i18 + .householdOverView + .householdOverViewActionCardTitle), + type: PopUpType.simple, + actions: [ + DigitButton( + label: localizations + .translate(i18 + .householdOverView + .householdOverViewPrimaryActionLabel), + onPressed: () { + Navigator.of( + context, + rootNavigator: true, + ) + ..pop() + ..pop(); + context + .read< + HouseholdOverviewBloc>() + .add( + HouseholdOverviewEvent + .selectedIndividual( + individualModel: + e, + ), + ); + context.router.push( + ReasonForDeletionRoute( + isHousholdDelete: + false, + ), + ); + }, + type: DigitButtonType + .primary, + size: DigitButtonSize + .large), + DigitButton( + label: localizations + .translate(i18 + .householdOverView + .householdOverViewSecondaryActionLabel), + onPressed: () { + Navigator.of( + context, + rootNavigator: true, + ).pop(); + }, + type: DigitButtonType + .tertiary, + size: + DigitButtonSize.large) + ]); + }, ); }, isNotEligible: RegistrationDeliverySingleton() @@ -695,31 +728,30 @@ class _HouseholdOverviewPageState height: spacer2, ), Center( - child: Button( + child: DigitButton( isDisabled: (state.householdMemberWrapper .projectBeneficiaries ?? []) .isEmpty, onPressed: () => addIndividual( - context, - state.householdMemberWrapper - .household!, - ), + context, + state.householdMemberWrapper.household!, + ), label: localizations.translate( i18.householdOverView .householdOverViewAddActionText, ), prefixIcon: Icons.add_circle, - type: ButtonType.tertiary, - size: ButtonSize.medium, + type: DigitButtonType.tertiary, + size: DigitButtonSize.medium, ), ), const SizedBox( height: spacer2, ), ], - ),] - ), + ), + ]), ), ], ), @@ -769,7 +801,6 @@ class _HouseholdOverviewPageState return false; } - getStatusAttributes(HouseholdOverviewState state, DeliverInterventionState deliverInterventionState) { var textLabel = diff --git a/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart b/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart index fd6ee168b..6ef4f4a4d 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart @@ -1,6 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:collection/collection.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/models/RadioButtonModel.dart'; import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; @@ -60,181 +61,189 @@ class RecordPastDeliveryDetailsPageState ), ]), footer: DigitCard( - margin: const EdgeInsets.only(top: spacer2), - padding: const EdgeInsets.all(spacer2), - children: [Button( - label: localizations.translate(i18.common.coreCommonNext), - type: ButtonType.primary, - size: ButtonSize.large, - mainAxisSize: MainAxisSize.max, - onPressed: () { - for (int i = 0; i < (futureTaskList ?? []).length; i++) { - if (form - .control("$_recordDoseAdministeredKey.$i") - .value == - null) { - form - .control("$_recordDoseAdministeredKey.$i") - .setErrors({'': true}); - } - } + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [ + DigitButton( + label: localizations.translate(i18.common.coreCommonNext), + type: DigitButtonType.primary, + size: DigitButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () { + for (int i = 0; + i < (futureTaskList ?? []).length; + i++) { + if (form + .control("$_recordDoseAdministeredKey.$i") + .value == + null) { + form + .control("$_recordDoseAdministeredKey.$i") + .setErrors({'': true}); + } + } - form.markAllAsTouched(); + form.markAllAsTouched(); - if (!form.valid) return; + if (!form.valid) return; - showDialog( - context: context, - barrierDismissible: false, - builder: (ctx)=> Popup( - title: localizations.translate(i18 - .deliverIntervention - .didYouObservePreviousAdvEventsTitle), - inlineActions: true, - actions: [ - Button( - label: localizations.translate( - i18.common.coreCommonYes, - ), - onPressed: () async { - router.maybePop(); - final event = - context.read(); - final bloc = context.read(); + showDialog( + context: context, + barrierDismissible: false, + builder: (ctx) => Popup( + title: localizations.translate(i18 + .deliverIntervention + .didYouObservePreviousAdvEventsTitle), + inlineActions: true, + actions: [ + DigitButton( + label: localizations.translate( + i18.common.coreCommonYes, + ), + onPressed: () async { + router.maybePop(); + final event = + context.read(); + final bloc = + context.read(); - for (int i = 0; - i < (futureTaskList ?? []).length; - i++) { - // Get the value of the form control for each task + for (int i = 0; + i < (futureTaskList ?? []).length; + i++) { + // Get the value of the form control for each task - final formControlValue = (form - .control( - "$_recordDoseAdministeredKey.$i", - ) - .value as bool); + final formControlValue = (form + .control( + "$_recordDoseAdministeredKey.$i", + ) + .value as bool); - // Determine the status based on the form control value - final status = formControlValue - ? Status.administeredSuccess.toValue() - : Status.administeredFailed.toValue(); + // Determine the status based on the form control value + final status = formControlValue + ? Status.administeredSuccess.toValue() + : Status.administeredFailed.toValue(); - // Create a new task with the updated status - final result = - futureTaskList![i].copyWith(status: status); + // Create a new task with the updated status + final result = futureTaskList![i] + .copyWith(status: status); - // Add the updated task to the event - event.add(DeliverInterventionSubmitEvent( - task: result, - isEditing: true, - boundaryModel: - RegistrationDeliverySingleton().boundary!, - )); - } - context.router.popUntilRouteWithName( - HouseholdOverviewRoute.name, - ); - Navigator.of(ctx).pop(); - final response = await router.push( - SideEffectsRoute( - tasks: [(futureTaskList ?? []).last], + // Add the updated task to the event + event.add(DeliverInterventionSubmitEvent( + task: result, + isEditing: true, + boundaryModel: + RegistrationDeliverySingleton() + .boundary!, + )); + } + context.router.popUntilRouteWithName( + HouseholdOverviewRoute.name, + ); + Navigator.of(ctx).pop(); + final response = await router.push( + SideEffectsRoute( + tasks: [(futureTaskList ?? []).last], + ), + ); + if (response == null) { + bloc.add(HouseholdOverviewReloadEvent( + projectId: + RegistrationDeliverySingleton() + .projectId!, + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType!, + )); + } + }, + type: DigitButtonType.secondary, + size: DigitButtonSize.medium), + DigitButton( + label: localizations.translate( + i18.common.coreCommonNo, ), - ); - if (response == null) { - bloc.add(HouseholdOverviewReloadEvent( - projectId: - RegistrationDeliverySingleton().projectId!, - projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, - )); - } - }, - type: ButtonType.secondary, - size: ButtonSize.medium - ), - Button( - label: localizations.translate( - i18.common.coreCommonNo, - ), - onPressed: () { - router.maybePop(); - final event = - context.read(); + onPressed: () { + router.maybePop(); + final event = + context.read(); - for (int i = 0; - i < (futureTaskList ?? []).length; - i++) { - // Get the value of the form control for each task + for (int i = 0; + i < (futureTaskList ?? []).length; + i++) { + // Get the value of the form control for each task - final formControllValue = (form - .control( - "$_recordDoseAdministeredKey.$i", - ) - .value as bool); + final formControllValue = (form + .control( + "$_recordDoseAdministeredKey.$i", + ) + .value as bool); - // Determine the status based on the form control value - final status = formControllValue - ? Status.administeredSuccess.toValue() - : Status.administeredFailed.toValue(); + // Determine the status based on the form control value + final status = formControllValue + ? Status.administeredSuccess.toValue() + : Status.administeredFailed.toValue(); - // Create a new task with the updated status - final result = - futureTaskList![i].copyWith(status: status); + // Create a new task with the updated status + final result = futureTaskList![i] + .copyWith(status: status); - // Add the updated task to the event - event.add(DeliverInterventionSubmitEvent( - task: result, - isEditing: true, - boundaryModel: - RegistrationDeliverySingleton().boundary!, - )); - } - final bloc = context.read(); + // Add the updated task to the event + event.add(DeliverInterventionSubmitEvent( + task: result, + isEditing: true, + boundaryModel: + RegistrationDeliverySingleton() + .boundary!, + )); + } + final bloc = + context.read(); - bloc.add(HouseholdOverviewReloadEvent( - projectId: - RegistrationDeliverySingleton().projectId!, - projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, - )); + bloc.add(HouseholdOverviewReloadEvent( + projectId: RegistrationDeliverySingleton() + .projectId!, + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType!, + )); - event.add(DeliverInterventionSearchEvent( - taskSearch: TaskSearchModel( - projectBeneficiaryClientReferenceId: bloc.state - .householdMemberWrapper.projectBeneficiaries - ?.map((e) => e.clientReferenceId) - .toList(), - ), - )); - context.router.popUntilRouteWithName( - SearchBeneficiaryRoute.name, - ); - bloc.add(HouseholdOverviewReloadEvent( - projectId: - RegistrationDeliverySingleton().projectId!, - projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, - )); - Navigator.of(ctx).pop(); + event.add(DeliverInterventionSearchEvent( + taskSearch: TaskSearchModel( + projectBeneficiaryClientReferenceId: + bloc.state.householdMemberWrapper + .projectBeneficiaries + ?.map( + (e) => e.clientReferenceId) + .toList(), + ), + )); + context.router.popUntilRouteWithName( + SearchBeneficiaryRoute.name, + ); + bloc.add(HouseholdOverviewReloadEvent( + projectId: RegistrationDeliverySingleton() + .projectId!, + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType!, + )); + Navigator.of(ctx).pop(); - router.push( - BeneficiaryDetailsRoute(), - ); - }, - type: ButtonType.primary, - size: ButtonSize.medium + router.push( + BeneficiaryDetailsRoute(), + ); + }, + type: DigitButtonType.primary, + size: DigitButtonSize.medium), + ], ), - ], - ), - ); - }, - ),] - ), + ); + }, + ), + ]), children: [ - DigitCard( - children: [Padding( + DigitCard(children: [ + Padding( padding: const EdgeInsets.symmetric( horizontal: spacer2, vertical: spacer2, @@ -268,10 +277,10 @@ class RecordPastDeliveryDetailsPageState children: [ ReactiveWrapperField( formControlName: - "$_recordDoseAdministeredKey.${futureTaskList.indexOf(entry.value)}", - builder: (field)=> LabeledField( + "$_recordDoseAdministeredKey.${futureTaskList.indexOf(entry.value)}", + builder: (field) => LabeledField( label: - "${localizations.translate(i18.deliverIntervention.wasDosePastDeliveryDetails)} $doseNumber ${localizations.translate(i18.deliverIntervention.wasDosePastRecordDeliveryDetails)} ${localizations.translate(i18.beneficiaryDetails.beneficiaryDose)} ${doseNumber - 1} ?", + "${localizations.translate(i18.deliverIntervention.wasDosePastDeliveryDetails)} $doseNumber ${localizations.translate(i18.deliverIntervention.wasDosePastRecordDeliveryDetails)} ${localizations.translate(i18.beneficiaryDetails.beneficiaryDose)} ${doseNumber - 1} ?", isRequired: true, labelStyle: DigitTheme .instance @@ -282,22 +291,37 @@ class RecordPastDeliveryDetailsPageState top: spacer2, ), child: RadioList( - radioButtons: Constants.yesNo - .map((e) => RadioButtonModel( - code: e.key.toString(), - name: localizations.translate(e.label), - )).toList(), - groupValue: form.control("$_recordDoseAdministeredKey.${futureTaskList.indexOf(entry.value)}") - .value.toString()??'', + radioDigitButtons: Constants.yesNo + .map((e) => RadioButtonModel( + code: e.key.toString(), + name: localizations + .translate(e.label), + )) + .toList(), + groupValue: form + .control( + "$_recordDoseAdministeredKey.${futureTaskList.indexOf(entry.value)}") + .value + .toString() ?? + '', onChanged: (val) { - form.control("$_recordDoseAdministeredKey.${futureTaskList.indexOf(entry.value)}") - .value=val.code=='true'?true:false; + form + .control( + "$_recordDoseAdministeredKey.${futureTaskList.indexOf(entry.value)}") + .value = val.code == + 'true' + ? true + : false; }, - errorMessage: form.control("$_recordDoseAdministeredKey.${futureTaskList.indexOf(entry.value)}") - .hasErrors? localizations.translate( - i18.common.corecommonRequired, - ):null, - + errorMessage: form + .control( + "$_recordDoseAdministeredKey.${futureTaskList.indexOf(entry.value)}") + .hasErrors + ? localizations.translate( + i18.common + .corecommonRequired, + ) + : null, ), ), ), @@ -314,8 +338,8 @@ class RecordPastDeliveryDetailsPageState []), ], ), - ),] - ), + ), + ]), ], ), ); diff --git a/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart b/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart index beb6657cb..bce9dc3c6 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart @@ -1,6 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/models/RadioButtonModel.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; @@ -96,305 +97,298 @@ class ReferBeneficiaryPageState extends LocalizedState { body: ReactiveFormBuilder( form: buildForm, builder: (context, form, child) => ScrollableContent( - enableFixedButton: true, + enableFixedDigitButton: true, header: const Column(children: [ BackNavigationHelpHeaderWidget(), ]), footer: DigitCard( - margin: const EdgeInsets.only(top: spacer2), - padding: const EdgeInsets.all(spacer2), - children: [ - ValueListenableBuilder( - valueListenable: clickedStatus, - builder: (context, bool isClicked, _) { - return Button( - label: localizations.translate(i18.common.coreCommonSubmit), - type: ButtonType.primary, - size: ButtonSize.large, - mainAxisSize: MainAxisSize.max, - isDisabled: isClicked?true:false, - onPressed: () { - if (form.control(_referralReason).value == null) { - clickedStatus.value = false; - } - form.markAllAsTouched(); + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [ + ValueListenableBuilder( + valueListenable: clickedStatus, + builder: (context, bool isClicked, _) { + return DigitButton( + label: localizations + .translate(i18.common.coreCommonSubmit), + type: DigitButtonType.primary, + size: DigitButtonSize.large, + mainAxisSize: MainAxisSize.max, + isDisabled: isClicked ? true : false, + onPressed: () { + if (form.control(_referralReason).value == null) { + clickedStatus.value = false; + } + form.markAllAsTouched(); - if (!form.valid) { - return; - } else { - clickedStatus.value = true; - final reason = form - .control(_referralReason) - .value as String; - final recipientType = - selectedProjectFacilityId == - 'Community Health Worker' - ? 'STAFF' - : 'FACILITY'; - final recipientId = selectedProjectFacilityId == - 'Community Health Worker' - ? RegistrationDeliverySingleton() - .loggedInUserUuid - : selectedProjectFacilityId; - final referralComment = - form.control(_referralComments).value; + if (!form.valid) { + return; + } else { + clickedStatus.value = true; + final reason = + form.control(_referralReason).value as String; + final recipientType = selectedProjectFacilityId == + 'Community Health Worker' + ? 'STAFF' + : 'FACILITY'; + final recipientId = selectedProjectFacilityId == + 'Community Health Worker' + ? RegistrationDeliverySingleton() + .loggedInUserUuid + : selectedProjectFacilityId; + final referralComment = + form.control(_referralComments).value; - final event = context.read(); - event.add(ReferralSubmitEvent( - ReferralModel( - clientReferenceId: IdGen.i.identifier, - projectId: RegistrationDeliverySingleton() - .projectId, - projectBeneficiaryClientReferenceId: - widget.projectBeneficiaryClientRefId, - referrerId: RegistrationDeliverySingleton() - .loggedInUserUuid, - recipientId: recipientId, - recipientType: recipientType, - reasons: [reason], - tenantId: RegistrationDeliverySingleton() - .tenantId, - rowVersion: 1, - auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: - context.millisecondsSinceEpoch(), - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: - context.millisecondsSinceEpoch(), - ), - clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: - context.millisecondsSinceEpoch(), - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid!, - lastModifiedTime: - context.millisecondsSinceEpoch(), - ), - additionalFields: ReferralAdditionalFields( - version: 1, - fields: [ - if (referralComment != null && - referralComment - .toString() - .trim() - .isNotEmpty) - AdditionalField( - AdditionalFieldsType - .referralComments - .toValue(), - referralComment, - ), - ], - ), + final event = context.read(); + event.add(ReferralSubmitEvent( + ReferralModel( + clientReferenceId: IdGen.i.identifier, + projectId: + RegistrationDeliverySingleton().projectId, + projectBeneficiaryClientReferenceId: + widget.projectBeneficiaryClientRefId, + referrerId: RegistrationDeliverySingleton() + .loggedInUserUuid, + recipientId: recipientId, + recipientType: recipientType, + reasons: [reason], + tenantId: + RegistrationDeliverySingleton().tenantId, + rowVersion: 1, + auditDetails: AuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: + context.millisecondsSinceEpoch(), + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: + context.millisecondsSinceEpoch(), + ), + clientAuditDetails: ClientAuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: + context.millisecondsSinceEpoch(), + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid!, + lastModifiedTime: + context.millisecondsSinceEpoch(), + ), + additionalFields: ReferralAdditionalFields( + version: 1, + fields: [ + if (referralComment != null && + referralComment + .toString() + .trim() + .isNotEmpty) + AdditionalField( + AdditionalFieldsType.referralComments + .toValue(), + referralComment, + ), + ], ), - false, - )); + ), + false, + )); - final reloadState = - context.read(); + final reloadState = + context.read(); - Future.delayed( - const Duration(milliseconds: 500), - () { - reloadState - .add(HouseholdOverviewReloadEvent( - projectId: RegistrationDeliverySingleton() - .projectId!, - projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, - )); - }, - ).then((value) => context.router.popAndPush( - HouseholdAcknowledgementRoute( - enableViewHousehold: true, - ), - )); - } - }, - ); - }, - ), - ] - ), + Future.delayed( + const Duration(milliseconds: 500), + () { + reloadState.add(HouseholdOverviewReloadEvent( + projectId: RegistrationDeliverySingleton() + .projectId!, + projectBeneficiaryType: + RegistrationDeliverySingleton() + .beneficiaryType!, + )); + }, + ).then((value) => context.router.popAndPush( + HouseholdAcknowledgementRoute( + enableViewHousehold: true, + ), + )); + } + }, + ); + }, + ), + ]), slivers: [ SliverToBoxAdapter( - child: DigitCard( - children: [ - Text( - localizations.translate( - i18.referBeneficiary.referralDetails, - ), - style: textTheme.headingXl, + child: DigitCard(children: [ + Text( + localizations.translate( + i18.referBeneficiary.referralDetails, ), - ReactiveWrapperField( - formControlName: _dateOfReferralKey, - builder: (field)=> LabeledField( - label: localizations.translate( - i18.referBeneficiary.dateOfReferralLabel, - ), - child: DigitDateFormInput( - readOnly: true, - isRequired: false, - initialValue: DateFormat('dd MMM yyyy') - .format(form.control(_dateOfReferralKey).value).toString(), - initialDate: DateTime.now(), - cancelText: localizations - .translate(i18.common.coreCommonCancel), - confirmText: localizations - .translate(i18.common.coreCommonOk), - ), + style: textTheme.headingXl, + ), + ReactiveWrapperField( + formControlName: _dateOfReferralKey, + builder: (field) => LabeledField( + label: localizations.translate( + i18.referBeneficiary.dateOfReferralLabel, ), - ), - ReactiveWrapperField( - formControlName: _administrativeUnitKey, - builder: (field)=> LabeledField( - label: localizations.translate( - i18.referBeneficiary.administrationUnitFormLabel, - ), - isRequired: true, - child: DigitTextFormInput( - readOnly: true, - initialValue: form.control(_administrativeUnitKey).value, - ), + child: DigitDateFormInput( + readOnly: true, + isRequired: false, + initialValue: DateFormat('dd MMM yyyy') + .format(form.control(_dateOfReferralKey).value) + .toString(), + initialDate: DateTime.now(), + cancelText: localizations + .translate(i18.common.coreCommonCancel), + confirmText: + localizations.translate(i18.common.coreCommonOk), ), ), - ReactiveWrapperField( - formControlName: _referredByKey, - validationMessages: { - 'required': (_) => localizations.translate( - i18.common.corecommonRequired, - ), - }, - builder: (field)=> LabeledField( - label: localizations.translate( - i18.referBeneficiary.referredByLabel, - ), - isRequired: true, - child: DigitTextFormInput( - errorMessage: field.errorText, - onChange: (value){ - form.control(_referredByKey).value=value; - }, - initialValue: form.control(_referredByKey).value, - ), + ), + ReactiveWrapperField( + formControlName: _administrativeUnitKey, + builder: (field) => LabeledField( + label: localizations.translate( + i18.referBeneficiary.administrationUnitFormLabel, + ), + isRequired: true, + child: DigitTextFormInput( + readOnly: true, + initialValue: + form.control(_administrativeUnitKey).value, ), ), - InkWell( - onTap: () async { - final parent = - context.router.parent() as StackRouter; - final facility = await parent.push( - FacilitySelectionRoute( - facilities: facilities, + ), + ReactiveWrapperField( + formControlName: _referredByKey, + validationMessages: { + 'required': (_) => localizations.translate( + i18.common.corecommonRequired, ), - ) as FacilityModel?; - - if (facility == null) return; - form.control(_referredToKey).value = - localizations.translate('FAC_${facility.id}'); - setState(() { - selectedProjectFacilityId = facility.id; - }); - }, - child: IgnorePointer( - child: ReactiveWrapperField( - formControlName: _referredToKey, - validationMessages: { - 'required': (_) => localizations.translate( - i18.referBeneficiary - .facilityValidationMessage, - ), - }, - builder: (field)=> LabeledField( - label: localizations.translate( - i18.referBeneficiary.referredToLabel, - ), - isRequired: true, - child: DigitSearchFormInput( - // hideKeyboard: true, - // readOnly: true,r - errorMessage: field.errorText, - initialValue: form.control(_referredToKey).value, - onSuffixTap: (value) async { - final parent = - context.router.parent() as StackRouter; - final facility = await parent.push( - FacilitySelectionRoute( - facilities: facilities, - ), - ) as FacilityModel?; - - if (facility == null) return; - form.control(_referredToKey).value = - localizations - .translate('FAC_${facility.id}'); - - setState(() { - selectedProjectFacilityId = facility.id; - }); - }, - ), - ), - ), + }, + builder: (field) => LabeledField( + label: localizations.translate( + i18.referBeneficiary.referredByLabel, + ), + isRequired: true, + child: DigitTextFormInput( + errorMessage: field.errorText, + onChange: (value) { + form.control(_referredByKey).value = value; + }, + initialValue: form.control(_referredByKey).value, ), ), - ReactiveWrapperField( - formControlName: _referralReason, - validationMessages: { - 'required': (_) => localizations.translate( - i18.common.corecommonRequired, + ), + InkWell( + onTap: () async { + final parent = context.router.parent() as StackRouter; + final facility = await parent.push( + FacilitySelectionRoute( + facilities: facilities, ), - }, + ) as FacilityModel?; - builder: (field)=> LabeledField( - label: localizations.translate( - i18.referBeneficiary.reasonForReferral, - ), - isRequired: true, - child: Align( - alignment: Alignment.topLeft, - child: RadioList( - radioButtons: reasons - .map((e)=> - RadioButtonModel( - code: e.key.toString(), - name: localizations.translate(e.label) - ) - ).toList(), + if (facility == null) return; + form.control(_referredToKey).value = + localizations.translate('FAC_${facility.id}'); + setState(() { + selectedProjectFacilityId = facility.id; + }); + }, + child: IgnorePointer( + child: ReactiveWrapperField( + formControlName: _referredToKey, + validationMessages: { + 'required': (_) => localizations.translate( + i18.referBeneficiary + .facilityValidationMessage, + ), + }, + builder: (field) => LabeledField( + label: localizations.translate( + i18.referBeneficiary.referredToLabel, + ), + isRequired: true, + child: DigitSearchFormInput( + // hideKeyboard: true, + // readOnly: true,r errorMessage: field.errorText, - groupValue: form.control(_referralReason).value??'', - onChanged: (val) { - form.control(_referralReason).value = val.code; + initialValue: form.control(_referredToKey).value, + onSuffixTap: (value) async { + final parent = + context.router.parent() as StackRouter; + final facility = await parent.push( + FacilitySelectionRoute( + facilities: facilities, + ), + ) as FacilityModel?; + + if (facility == null) return; + form.control(_referredToKey).value = + localizations + .translate('FAC_${facility.id}'); + + setState(() { + selectedProjectFacilityId = facility.id; + }); }, ), ), ), ), - ReactiveWrapperField( - formControlName: _referralComments, - builder: (field)=> LabeledField( - label: localizations.translate( - i18.referBeneficiary.referralComments, - ), - child: DigitTextAreaFormInput( - maxLine: 3, - initialValue: form.control(_referralComments).value, - onChange: (value){ - form.control(_referralComments).value=value; + ), + ReactiveWrapperField( + formControlName: _referralReason, + validationMessages: { + 'required': (_) => localizations.translate( + i18.common.corecommonRequired, + ), + }, + builder: (field) => LabeledField( + label: localizations.translate( + i18.referBeneficiary.reasonForReferral, + ), + isRequired: true, + child: Align( + alignment: Alignment.topLeft, + child: RadioList( + radioDigitButtons: reasons + .map((e) => RadioButtonModel( + code: e.key.toString(), + name: localizations.translate(e.label))) + .toList(), + errorMessage: field.errorText, + groupValue: + form.control(_referralReason).value ?? '', + onChanged: (val) { + form.control(_referralReason).value = val.code; }, ), ), ), - ] - ), + ), + ReactiveWrapperField( + formControlName: _referralComments, + builder: (field) => LabeledField( + label: localizations.translate( + i18.referBeneficiary.referralComments, + ), + child: DigitTextAreaFormInput( + maxLine: 3, + initialValue: form.control(_referralComments).value, + onChange: (value) { + form.control(_referralComments).value = value; + }, + ), + ), + ), + ]), ), ], ), @@ -416,8 +410,8 @@ class ReferBeneficiaryPageState extends LocalizedState { ), _referredToKey: FormControl(validators: [Validators.required]), _referralReason: FormControl( - value: null, - validators: [Validators.required], + value: null, + validators: [Validators.required], ), _referralComments: FormControl(value: null), }); diff --git a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart index 3cbb32cde..280f19b3b 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart @@ -55,7 +55,7 @@ class RefusedDeliveryPageState extends LocalizedState { BlocBuilder( builder: (context, registrationState) { return ScrollableContent( - enableFixedButton: true, + enableFixedDigitButton: true, header: const Column( children: [ BackNavigationHelpHeaderWidget( @@ -68,12 +68,12 @@ class RefusedDeliveryPageState extends LocalizedState { margin: const EdgeInsets.only(top: spacer2), padding: const EdgeInsets.all(spacer2), children: [ - Button( + DigitButton( label: localizations.translate( i18.householdLocation.actionLabel, ), - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, onPressed: () { form.markAllAsTouched(); diff --git a/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart b/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart index 540c1c802..ce2806027 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart @@ -19,8 +19,8 @@ import '../../utils/constants.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; -import '../../widgets/localized.dart'; import '../../widgets/component_wrapper/product_variant_bloc_wrapper.dart'; +import '../../widgets/localized.dart'; @RoutePage() class SideEffectsPage extends LocalizedStatefulWidget { @@ -85,12 +85,12 @@ class SideEffectsPageState extends LocalizedState { margin: const EdgeInsets.only(top: spacer2), padding: const EdgeInsets.all(spacer2), children: [ - Button( + DigitButton( label: localizations.translate( i18.common.coreCommonNext, ), - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, onPressed: () async { if (symptomsValues.any((e) => e)) { @@ -112,7 +112,7 @@ class SideEffectsPageState extends LocalizedState { .dialogContent, ), actions: [ - Button( + DigitButton( label: localizations .translate( i18.common @@ -199,9 +199,11 @@ class SideEffectsPageState extends LocalizedState { rootNavigator: true, ).pop(true); }, - type: ButtonType.primary, - size: ButtonSize.large), - Button( + type: DigitButtonType + .primary, + size: DigitButtonSize + .large), + DigitButton( label: localizations .translate( i18.common @@ -212,9 +214,10 @@ class SideEffectsPageState extends LocalizedState { context, rootNavigator: true, ).pop(false), - type: - ButtonType.secondary, - size: ButtonSize.large) + type: DigitButtonType + .secondary, + size: + DigitButtonSize.large) ], ), ); diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart index f886c21b0..726883908 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart @@ -42,7 +42,7 @@ class HouseholdAcknowledgementPageState i18.acknowledgementSuccess.acknowledgementLabelText, ), actions: [ - Button( + DigitButton( label: localizations.translate( i18.householdDetails.viewHouseHoldDetailsAction, ), @@ -57,9 +57,9 @@ class HouseholdAcknowledgementPageState BeneficiaryWrapperRoute(wrapper: wrapper), ); }, - type: ButtonType.primary, - size: ButtonSize.large), - Button( + type: DigitButtonType.primary, + size: DigitButtonSize.large), + DigitButton( label: localizations .translate(i18.acknowledgementSuccess.actionLabelText), onPressed: () { @@ -70,8 +70,8 @@ class HouseholdAcknowledgementPageState // Pop twice to navigate back to the previous screen parent.popUntilRoot(); }, - type: ButtonType.secondary, - size: ButtonSize.large), + type: DigitButtonType.secondary, + size: DigitButtonSize.large), ], ); }, diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart index 2b04ce656..71a8a21c0 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart @@ -7,8 +7,8 @@ import 'package:digit_ui_components/widgets/molecules/panel_cards.dart'; import 'package:flutter/material.dart'; import '../../../router/registration_delivery_router.gm.dart'; -import '../../../widgets/localized.dart'; import '../../../utils/i18_key_constants.dart' as i18; +import '../../../widgets/localized.dart'; @RoutePage() class SplashAcknowledgementPage extends LocalizedStatefulWidget { @@ -48,11 +48,12 @@ class SplashAcknowledgementPageState body: PanelCard( type: PanelType.success, actions: [ - Button( - label: localizations.translate(i18.acknowledgementSuccess.actionLabelText), - type: ButtonType.primary, - size: ButtonSize.large, - onPressed: (){ + DigitButton( + label: localizations + .translate(i18.acknowledgementSuccess.actionLabelText), + type: DigitButtonType.primary, + size: DigitButtonSize.large, + onPressed: () { context.router.maybePop(); }, ), diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart index 47f067cf4..8914963de 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart @@ -8,7 +8,6 @@ import '../../../utils/i18_key_constants.dart' as i18; import '../../../widgets/localized.dart'; import '../../blocs/search_households/search_bloc_common_wrapper.dart'; import '../../router/registration_delivery_router.gm.dart'; -import '../../utils/utils.dart'; @RoutePage() class BeneficiaryAcknowledgementPage extends LocalizedStatefulWidget { @@ -27,7 +26,6 @@ class BeneficiaryAcknowledgementPage extends LocalizedStatefulWidget { class BeneficiaryAcknowledgementPageState extends LocalizedState { - @override Widget build(BuildContext context) { return Scaffold( @@ -36,11 +34,11 @@ class BeneficiaryAcknowledgementPageState title: localizations .translate(i18.acknowledgementSuccess.acknowledgementLabelText), actions: [ - Button( + DigitButton( label: localizations.translate( i18.householdDetails.viewHouseHoldDetailsAction, ), - onPressed: (){ + onPressed: () { final bloc = context.read(); context.router.popAndPush( @@ -49,15 +47,14 @@ class BeneficiaryAcknowledgementPageState ), ); }, - type: ButtonType.primary, - size: ButtonSize.large - ), - Button( - label: localizations.translate(i18.acknowledgementSuccess.actionLabelText), - onPressed: ()=>context.router.maybePop(), - type: ButtonType.secondary, - size: ButtonSize.large - ), + type: DigitButtonType.primary, + size: DigitButtonSize.large), + DigitButton( + label: localizations + .translate(i18.acknowledgementSuccess.actionLabelText), + onPressed: () => context.router.maybePop(), + type: DigitButtonType.secondary, + size: DigitButtonSize.large), ], description: localizations.translate( i18.acknowledgementSuccess.acknowledgementDescriptionText, diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart index f8f39ad72..05ea5cb02 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart @@ -53,7 +53,7 @@ class HouseDetailsPageState extends LocalizedState { BeneficiaryRegistrationState>( builder: (context, registrationState) { return ScrollableContent( - enableFixedButton: true, + enableFixedDigitButton: true, header: const Column( children: [ BackNavigationHelpHeaderWidget( @@ -63,69 +63,119 @@ class HouseDetailsPageState extends LocalizedState { ], ), footer: DigitCard( - margin: const EdgeInsets.only(top: spacer2), - padding: - const EdgeInsets.all(spacer2), - children: [Button( - onPressed: () { - form.markAllAsTouched(); - if (form.control(_householdStructureKey).value == - null) { - setState(() { - form - .control(_householdStructureKey) - .setErrors({'': true}); - }); - } + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [ + DigitButton( + onPressed: () { + form.markAllAsTouched(); + if (form.control(_householdStructureKey).value == + null) { + setState(() { + form + .control(_householdStructureKey) + .setErrors({'': true}); + }); + } - if (!form.valid) return; - selectedHouseStructureTypes = - form.control(_householdStructureKey).value; + if (!form.valid) return; + selectedHouseStructureTypes = + form.control(_householdStructureKey).value; - final noOfRooms = - form.control(_noOfRoomsKey).value as int; - registrationState.maybeWhen( - orElse: () { - return; - }, - create: ( - address, - householdModel, - individualModel, - projectBeneficiaryModel, - registrationDate, - searchQuery, - loading, - isHeadOfHousehold, - ) { - var houseModel = HouseholdModel( - clientReferenceId: IdGen.i.identifier, - tenantId: - RegistrationDeliverySingleton().tenantId, - rowVersion: 1, - auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: - context.millisecondsSinceEpoch(), - ), - memberCount: householdModel?.memberCount, - clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: - context.millisecondsSinceEpoch(), - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: - context.millisecondsSinceEpoch(), - ), - additionalFields: HouseholdAdditionalFields( - version: 1, - fields: [ + final noOfRooms = + form.control(_noOfRoomsKey).value as int; + registrationState.maybeWhen( + orElse: () { + return; + }, + create: ( + address, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + searchQuery, + loading, + isHeadOfHousehold, + ) { + var houseModel = HouseholdModel( + clientReferenceId: IdGen.i.identifier, + tenantId: RegistrationDeliverySingleton() + .tenantId, + rowVersion: 1, + auditDetails: AuditDetails( + createdBy: + RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: + context.millisecondsSinceEpoch(), + ), + memberCount: householdModel?.memberCount, + clientAuditDetails: ClientAuditDetails( + createdBy: + RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: + context.millisecondsSinceEpoch(), + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: + context.millisecondsSinceEpoch(), + ), + additionalFields: + HouseholdAdditionalFields( + version: 1, + fields: [ + ...?householdModel + ?.additionalFields?.fields + .where((e) => + e.key != + AdditionalFieldsType + .houseStructureTypes + .toValue() && + e.key != + AdditionalFieldsType + .noOfRooms + .toValue()), + AdditionalField( + AdditionalFieldsType + .houseStructureTypes + .toValue(), + selectedHouseStructureTypes + ?.join("|") + .toString(), + ), + AdditionalField( + AdditionalFieldsType.noOfRooms + .toValue(), + noOfRooms, + ) + ])); + + bloc.add( + BeneficiaryRegistrationSaveHouseDetailsEvent( + model: houseModel, + ), + ); + router.push(HouseHoldDetailsRoute()); + }, + editHousehold: ( + address, + householdModel, + individuals, + registrationDate, + projectBeneficiaryModel, + loading, + headOfHousehold, + ) { + var houseModel = householdModel.copyWith( + additionalFields: + HouseholdAdditionalFields( + version: 1, + fields: [ ...?householdModel - ?.additionalFields?.fields + .additionalFields?.fields .where((e) => e.key != AdditionalFieldsType @@ -149,72 +199,29 @@ class HouseDetailsPageState extends LocalizedState { noOfRooms, ) ])); + // TODO [Linking of Voucher for Household based project need to be handled] - bloc.add( - BeneficiaryRegistrationSaveHouseDetailsEvent( - model: houseModel, - ), - ); - router.push(HouseHoldDetailsRoute()); - }, - editHousehold: ( - address, - householdModel, - individuals, - registrationDate, - projectBeneficiaryModel, - loading, - headOfHousehold, - ) { - var houseModel = householdModel.copyWith( - additionalFields: HouseholdAdditionalFields( - version: 1, - fields: [ - ...?householdModel.additionalFields?.fields - .where((e) => - e.key != - AdditionalFieldsType - .houseStructureTypes - .toValue() && - e.key != - AdditionalFieldsType.noOfRooms - .toValue()), - AdditionalField( - AdditionalFieldsType.houseStructureTypes - .toValue(), - selectedHouseStructureTypes - ?.join("|") - .toString(), + bloc.add( + BeneficiaryRegistrationSaveHouseDetailsEvent( + model: houseModel, ), - AdditionalField( - AdditionalFieldsType.noOfRooms.toValue(), - noOfRooms, - ) - ])); - // TODO [Linking of Voucher for Household based project need to be handled] - - bloc.add( - BeneficiaryRegistrationSaveHouseDetailsEvent( - model: houseModel, - ), + ); + router.push(HouseHoldDetailsRoute()); + }, ); - router.push(HouseHoldDetailsRoute()); }, - ); - }, - type: ButtonType.primary, - size: ButtonSize.large, - mainAxisSize: MainAxisSize.max, - label: localizations.translate( - i18.householdLocation.actionLabel, - ), - ),] - ), + type: DigitButtonType.primary, + size: DigitButtonSize.large, + mainAxisSize: MainAxisSize.max, + label: localizations.translate( + i18.householdLocation.actionLabel, + ), + ), + ]), slivers: [ SliverToBoxAdapter( - child: DigitCard( - children: [ - Padding( + child: DigitCard(children: [ + Padding( padding: const EdgeInsets.all(spacer2), child: Text( localizations.translate( @@ -233,15 +240,22 @@ class HouseDetailsPageState extends LocalizedState { options: RegistrationDeliverySingleton() .houseStructureTypes ?? [], - initialSelection: form.control(_householdStructureKey).value!= null ? [...form.control(_householdStructureKey).value ] : [], + initialSelection: + form.control(_householdStructureKey).value != + null + ? [ + ...form + .control(_householdStructureKey) + .value + ] + : [], onSelectionChanged: (values) { form .control(_householdStructureKey) .markAsTouched(); if (values.isEmpty) { - form - .control(_householdStructureKey) - .value = null; + form.control(_householdStructureKey).value = + null; setState(() { form .control(_householdStructureKey) @@ -249,9 +263,8 @@ class HouseDetailsPageState extends LocalizedState { }); } else { setState(() { - form - .control(_householdStructureKey) - .value = values; + form.control(_householdStructureKey).value = + values; }); } }, @@ -265,8 +278,7 @@ class HouseDetailsPageState extends LocalizedState { form .control(_householdStructureKey) .touched - ? localizations.translate(i18 - .householdDetails + ? localizations.translate(i18.householdDetails .selectStructureTypeError) : null, ), @@ -274,23 +286,27 @@ class HouseDetailsPageState extends LocalizedState { houseShowcaseData.noOfRooms.buildWith( child: ReactiveWrapperField( formControlName: _noOfRoomsKey, - builder:(field)=> LabeledField( + builder: (field) => LabeledField( label: localizations.translate( i18.householdDetails.noOfRoomsLabel, ), child: DigitNumericFormInput( minValue: 1, maxValue: 20, - initialValue: form.control(_noOfRoomsKey).value.toString(), + initialValue: form + .control(_noOfRoomsKey) + .value + .toString(), step: 1, - onChange: (value){ - form.control(_noOfRoomsKey).value=int.parse(value); + onChange: (value) { + form.control(_noOfRoomsKey).value = + int.parse(value); }, ), ), ), - ),] - ), + ), + ]), ), ], ); diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart index 8107a2c98..8aac7e581 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart @@ -57,28 +57,24 @@ class HouseHoldDetailsPageState extends LocalizedState { return BlocConsumer( listener: (context, state) { - if (state is BeneficiaryRegistrationPersistedState && state.isEdit) { - final overviewBloc = - context.read(); + if (state is BeneficiaryRegistrationPersistedState && + state.isEdit) { + final overviewBloc = context.read(); overviewBloc.add( HouseholdOverviewReloadEvent( - projectId: RegistrationDeliverySingleton() - .projectId - .toString(), + projectId: + RegistrationDeliverySingleton().projectId.toString(), projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType ?? - BeneficiaryType.household, + RegistrationDeliverySingleton().beneficiaryType ?? + BeneficiaryType.household, ), ); HouseholdMemberWrapper memberWrapper = overviewBloc.state.householdMemberWrapper; final route = router.parent() as StackRouter; - route.popUntilRouteWithName( - SearchBeneficiaryRoute.name); - route.push(BeneficiaryWrapperRoute( - wrapper: memberWrapper)); + route.popUntilRouteWithName(SearchBeneficiaryRoute.name); + route.push(BeneficiaryWrapperRoute(wrapper: memberWrapper)); } }, builder: (context, registrationState) { @@ -89,284 +85,296 @@ class HouseHoldDetailsPageState extends LocalizedState { showcaseButton: ShowcaseButton(), ), ]), - enableFixedButton: true, + enableFixedDigitButton: true, footer: DigitCard( - margin: const EdgeInsets.only(top: spacer2), - padding: const EdgeInsets.all(spacer2), - children: [Button( - label: registrationState.mapOrNull( - editHousehold: (value) => localizations - .translate(i18.common.coreCommonSave), - ) ?? - localizations - .translate(i18.householdDetails.actionLabel), - type: ButtonType.primary, - size: ButtonSize.large, - mainAxisSize: MainAxisSize.max, - onPressed: () { - form.markAllAsTouched(); - if (!form.valid) return; + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [ + DigitButton( + label: registrationState.mapOrNull( + editHousehold: (value) => localizations + .translate(i18.common.coreCommonSave), + ) ?? + localizations + .translate(i18.householdDetails.actionLabel), + type: DigitButtonType.primary, + size: DigitButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () { + form.markAllAsTouched(); + if (!form.valid) return; - final memberCount = - form.control(_memberCountKey).value as int; + final memberCount = + form.control(_memberCountKey).value as int; - final dateOfRegistration = form - .control(_dateOfRegistrationKey) - .value as DateTime; - //[TODO: Use pregnant women form value based on project config - final pregnantWomen = - form.control(_pregnantWomenCountKey).value as int; - final children = - form.control(_childrenCountKey).value as int; + final dateOfRegistration = form + .control(_dateOfRegistrationKey) + .value as DateTime; + //[TODO: Use pregnant women form value based on project config + final pregnantWomen = + form.control(_pregnantWomenCountKey).value as int; + final children = + form.control(_childrenCountKey).value as int; - if (memberCount < (pregnantWomen + children)) { - Toast.showToast( - context, - message: localizations.translate( + if (memberCount < (pregnantWomen + children)) { + Toast.showToast(context, + message: localizations.translate( i18.householdDetails.memberCountError), - type: ToastType.error - ); - } else { - registrationState.maybeWhen( - orElse: () { - return; - }, - create: ( - addressModel, - householdModel, - individualModel, - projectBeneficiaryModel, - registrationDate, - searchQuery, - loading, - isHeadOfHousehold, - ) { - var household = householdModel; - household ??= HouseholdModel( - tenantId: - RegistrationDeliverySingleton().tenantId, - clientReferenceId: - householdModel?.clientReferenceId ?? - IdGen.i.identifier, - rowVersion: 1, - clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context.millisecondsSinceEpoch(), - lastModifiedBy: RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: - context.millisecondsSinceEpoch(), - ), - auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context.millisecondsSinceEpoch(), - lastModifiedBy: RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: - context.millisecondsSinceEpoch(), - ), - ); + type: ToastType.error); + } else { + registrationState.maybeWhen( + orElse: () { + return; + }, + create: ( + addressModel, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + searchQuery, + loading, + isHeadOfHousehold, + ) { + var household = householdModel; + household ??= HouseholdModel( + tenantId: + RegistrationDeliverySingleton().tenantId, + clientReferenceId: + householdModel?.clientReferenceId ?? + IdGen.i.identifier, + rowVersion: 1, + clientAuditDetails: ClientAuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: + context.millisecondsSinceEpoch(), + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: + context.millisecondsSinceEpoch(), + ), + auditDetails: AuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: + context.millisecondsSinceEpoch(), + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: + context.millisecondsSinceEpoch(), + ), + ); - household = household.copyWith( - rowVersion: 1, - tenantId: - RegistrationDeliverySingleton().tenantId, - clientReferenceId: - householdModel?.clientReferenceId ?? - IdGen.i.identifier, - memberCount: memberCount, - clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid - .toString(), - createdTime: context.millisecondsSinceEpoch(), - lastModifiedBy: - RegistrationDeliverySingleton() + household = household.copyWith( + rowVersion: 1, + tenantId: RegistrationDeliverySingleton() + .tenantId, + clientReferenceId: + householdModel?.clientReferenceId ?? + IdGen.i.identifier, + memberCount: memberCount, + clientAuditDetails: ClientAuditDetails( + createdBy: RegistrationDeliverySingleton() .loggedInUserUuid .toString(), - lastModifiedTime: - context.millisecondsSinceEpoch(), - ), - auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid - .toString(), - createdTime: context.millisecondsSinceEpoch(), - lastModifiedBy: - RegistrationDeliverySingleton() + createdTime: + context.millisecondsSinceEpoch(), + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid + .toString(), + lastModifiedTime: + context.millisecondsSinceEpoch(), + ), + auditDetails: AuditDetails( + createdBy: RegistrationDeliverySingleton() .loggedInUserUuid .toString(), - lastModifiedTime: - context.millisecondsSinceEpoch(), - ), - address: addressModel, - additionalFields: HouseholdAdditionalFields( - version: 1, - fields: [ - //[TODO: Use pregnant women form value based on project config - ...?householdModel - ?.additionalFields?.fields - .where((e) => - e.key != - AdditionalFieldsType - .pregnantWomen - .toValue() && - e.key != - AdditionalFieldsType.children - .toValue()), - AdditionalField( - AdditionalFieldsType.pregnantWomen - .toValue(), - pregnantWomen, - ), - AdditionalField( - AdditionalFieldsType.children.toValue(), - children, - ) - ])); + createdTime: + context.millisecondsSinceEpoch(), + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid + .toString(), + lastModifiedTime: + context.millisecondsSinceEpoch(), + ), + address: addressModel, + additionalFields: HouseholdAdditionalFields( + version: 1, + fields: [ + //[TODO: Use pregnant women form value based on project config + ...?householdModel + ?.additionalFields?.fields + .where((e) => + e.key != + AdditionalFieldsType + .pregnantWomen + .toValue() && + e.key != + AdditionalFieldsType + .children + .toValue()), + AdditionalField( + AdditionalFieldsType.pregnantWomen + .toValue(), + pregnantWomen, + ), + AdditionalField( + AdditionalFieldsType.children + .toValue(), + children, + ) + ])); - bloc.add( - BeneficiaryRegistrationSaveHouseholdDetailsEvent( - household: household, - registrationDate: dateOfRegistration, - ), - ); - context.router.push( - IndividualDetailsRoute(isHeadOfHousehold: true), - ); - }, - editHousehold: ( - addressModel, - householdModel, - individuals, - registrationDate, - projectBeneficiaryModel, - loading, - isHeadOfHousehold, - ) { - var household = householdModel.copyWith( - memberCount: memberCount, - address: addressModel, - clientAuditDetails: (householdModel - .clientAuditDetails - ?.createdBy != - null && - householdModel.clientAuditDetails - ?.createdTime != - null) - ? ClientAuditDetails( - createdBy: householdModel - .clientAuditDetails!.createdBy, - createdTime: householdModel - .clientAuditDetails!.createdTime, - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: DateTime.now() - .millisecondsSinceEpoch, - ) - : null, - rowVersion: householdModel.rowVersion, - additionalFields: HouseholdAdditionalFields( - version: householdModel - .additionalFields?.version ?? - 1, - fields: [ - //[TODO: Use pregnant women form value based on project config - ...?householdModel - .additionalFields?.fields - .where((e) => - e.key != - AdditionalFieldsType - .pregnantWomen - .toValue() && - e.key != - AdditionalFieldsType.children - .toValue()), - AdditionalField( - AdditionalFieldsType.pregnantWomen - .toValue(), - pregnantWomen, - ), - AdditionalField( - AdditionalFieldsType.children.toValue(), - children, - ) - ])); + bloc.add( + BeneficiaryRegistrationSaveHouseholdDetailsEvent( + household: household, + registrationDate: dateOfRegistration, + ), + ); + context.router.push( + IndividualDetailsRoute( + isHeadOfHousehold: true), + ); + }, + editHousehold: ( + addressModel, + householdModel, + individuals, + registrationDate, + projectBeneficiaryModel, + loading, + isHeadOfHousehold, + ) { + var household = householdModel.copyWith( + memberCount: memberCount, + address: addressModel, + clientAuditDetails: (householdModel + .clientAuditDetails + ?.createdBy != + null && + householdModel.clientAuditDetails + ?.createdTime != + null) + ? ClientAuditDetails( + createdBy: householdModel + .clientAuditDetails!.createdBy, + createdTime: householdModel + .clientAuditDetails! + .createdTime, + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: DateTime.now() + .millisecondsSinceEpoch, + ) + : null, + rowVersion: householdModel.rowVersion, + additionalFields: HouseholdAdditionalFields( + version: householdModel + .additionalFields?.version ?? + 1, + fields: [ + //[TODO: Use pregnant women form value based on project config + ...?householdModel + .additionalFields?.fields + .where((e) => + e.key != + AdditionalFieldsType + .pregnantWomen + .toValue() && + e.key != + AdditionalFieldsType + .children + .toValue()), + AdditionalField( + AdditionalFieldsType.pregnantWomen + .toValue(), + pregnantWomen, + ), + AdditionalField( + AdditionalFieldsType.children + .toValue(), + children, + ) + ])); - bloc.add( - BeneficiaryRegistrationUpdateHouseholdDetailsEvent( - household: household.copyWith( - clientAuditDetails: (addressModel - .clientAuditDetails - ?.createdBy != - null && - addressModel.clientAuditDetails - ?.createdTime != - null) - ? ClientAuditDetails( - createdBy: addressModel - .clientAuditDetails!.createdBy, - createdTime: addressModel - .clientAuditDetails!.createdTime, - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: - context.millisecondsSinceEpoch(), - ) - : null, - ), - addressModel: addressModel.copyWith( - clientAuditDetails: (addressModel - .clientAuditDetails - ?.createdBy != - null && - addressModel.clientAuditDetails - ?.createdTime != - null) - ? ClientAuditDetails( - createdBy: addressModel - .clientAuditDetails!.createdBy, - createdTime: addressModel - .clientAuditDetails!.createdTime, - lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: - context.millisecondsSinceEpoch(), - ) - : null, - ), - ), + bloc.add( + BeneficiaryRegistrationUpdateHouseholdDetailsEvent( + household: household.copyWith( + clientAuditDetails: (addressModel + .clientAuditDetails + ?.createdBy != + null && + addressModel.clientAuditDetails + ?.createdTime != + null) + ? ClientAuditDetails( + createdBy: addressModel + .clientAuditDetails! + .createdBy, + createdTime: addressModel + .clientAuditDetails! + .createdTime, + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: context + .millisecondsSinceEpoch(), + ) + : null, + ), + addressModel: addressModel.copyWith( + clientAuditDetails: (addressModel + .clientAuditDetails + ?.createdBy != + null && + addressModel.clientAuditDetails + ?.createdTime != + null) + ? ClientAuditDetails( + createdBy: addressModel + .clientAuditDetails! + .createdBy, + createdTime: addressModel + .clientAuditDetails! + .createdTime, + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: context + .millisecondsSinceEpoch(), + ) + : null, + ), + ), + ); + }, ); - - }, - ); - } - }, - ),] - ), + } + }, + ), + ]), slivers: [ SliverToBoxAdapter( - child: DigitCard( - children: [ - DigitTextBlock( - padding: const EdgeInsets.all(spacer2), - heading: localizations.translate( - i18.householdDetails.householdDetailsLabel, - ), - description: localizations.translate( - i18.householdDetails.householdDetailsDescription, + child: DigitCard(children: [ + DigitTextBlock( + padding: const EdgeInsets.all(spacer2), + heading: localizations.translate( + i18.householdDetails.householdDetailsLabel, + ), + description: localizations.translate( + i18.householdDetails.householdDetailsDescription, ), ), - householdDetailsShowcaseData.dateOfRegistration - .buildWith( + householdDetailsShowcaseData.dateOfRegistration.buildWith( child: ReactiveWrapperField( formControlName: _dateOfRegistrationKey, - builder: (field)=> LabeledField( + builder: (field) => LabeledField( label: localizations.translate( i18.householdDetails.dateOfRegistrationLabel, ), @@ -378,8 +386,12 @@ class HouseHoldDetailsPageState extends LocalizedState { cancelText: localizations.translate( i18.common.coreCommonCancel, ), - initialValue: DateFormat(Constants().dateMonthYearFormat) - .format(form.control(_dateOfRegistrationKey).value).toString(), + initialValue: + DateFormat(Constants().dateMonthYearFormat) + .format(form + .control(_dateOfRegistrationKey) + .value) + .toString(), ), ), ), @@ -390,21 +402,23 @@ class HouseHoldDetailsPageState extends LocalizedState { .buildWith( child: ReactiveWrapperField( formControlName: _pregnantWomenCountKey, - builder: (field)=> LabeledField( + builder: (field) => LabeledField( label: localizations.translate( - i18.householdDetails - .noOfPregnantWomenCountLabel, + i18.householdDetails.noOfPregnantWomenCountLabel, ), child: DigitNumericFormInput( minValue: 0, maxValue: 10, step: 1, - initialValue: form.control(_pregnantWomenCountKey).value.toString(), + initialValue: form + .control(_pregnantWomenCountKey) + .value + .toString(), onChange: (value) { - form.control(_pregnantWomenCountKey).value=int.parse(value); - int pregnantWomen = form - .control(_pregnantWomenCountKey) - .value; + form.control(_pregnantWomenCountKey).value = + int.parse(value); + int pregnantWomen = + form.control(_pregnantWomenCountKey).value; int children = form.control(_childrenCountKey).value; int memberCount = @@ -423,21 +437,23 @@ class HouseHoldDetailsPageState extends LocalizedState { .buildWith( child: ReactiveWrapperField( formControlName: _childrenCountKey, - builder: (field)=>LabeledField( + builder: (field) => LabeledField( label: localizations.translate( - i18.householdDetails - .noOfChildrenBelow5YearsLabel, + i18.householdDetails.noOfChildrenBelow5YearsLabel, ), child: DigitNumericFormInput( minValue: 0, maxValue: 20, step: 1, - initialValue: form.control(_childrenCountKey).value.toString(), + initialValue: form + .control(_childrenCountKey) + .value + .toString(), onChange: (value) { - form.control(_childrenCountKey).value=int.parse(value); - int pregnantWomen = form - .control(_pregnantWomenCountKey) - .value; + form.control(_childrenCountKey).value = + int.parse(value); + int pregnantWomen = + form.control(_pregnantWomenCountKey).value; int children = form.control(_childrenCountKey).value; int memberCount = @@ -456,7 +472,7 @@ class HouseHoldDetailsPageState extends LocalizedState { .buildWith( child: ReactiveWrapperField( formControlName: _memberCountKey, - builder: (field)=> LabeledField( + builder: (field) => LabeledField( label: localizations.translate( i18.householdDetails.noOfMembersCountLabel, ), @@ -466,12 +482,15 @@ class HouseHoldDetailsPageState extends LocalizedState { : 1, maxValue: 30, step: 1, - initialValue: form.control(_memberCountKey).value.toString(), + initialValue: form + .control(_memberCountKey) + .value + .toString(), onChange: (value) { - form.control(_memberCountKey).value=int.parse(value); - int pregnantWomen = form - .control(_pregnantWomenCountKey) - .value; + form.control(_memberCountKey).value = + int.parse(value); + int pregnantWomen = + form.control(_pregnantWomenCountKey).value; int children = form.control(_childrenCountKey).value; int memberCount = @@ -485,8 +504,8 @@ class HouseHoldDetailsPageState extends LocalizedState { ), ), ), - const SizedBox(height: 16),] - ), + const SizedBox(height: 16), + ]), ), ], ); diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index 543cb5da3..43e55a532 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -1,8 +1,8 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/models/entities/address_type.dart'; -import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/services/location_bloc.dart'; import 'package:digit_ui_components/utils/component_utils.dart'; import 'package:digit_ui_components/widgets/atoms/text_block.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; @@ -107,7 +107,7 @@ class HouseholdLocationPageState extends LocalizedState { : true; }, child: ScrollableContent( - enableFixedButton: true, + enableFixedDigitButton: true, header: const Column( children: [ BackNavigationHelpHeaderWidget( @@ -117,155 +117,158 @@ class HouseholdLocationPageState extends LocalizedState { ], ), footer: DigitCard( - margin: const EdgeInsets.only(top: spacer2), - padding: const EdgeInsets.all(spacer2), - children: [BlocBuilder( - builder: (context, locationState) { - return Button( - label: localizations.translate( - i18.householdLocation.actionLabel, - ), - type: ButtonType.primary, - size: ButtonSize.large, - mainAxisSize: MainAxisSize.max, - onPressed: () { - form.markAllAsTouched(); - if (!form.valid) return; + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer2), + children: [ + BlocBuilder( + builder: (context, locationState) { + return DigitButton( + label: localizations.translate( + i18.householdLocation.actionLabel, + ), + type: DigitButtonType.primary, + size: DigitButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () { + form.markAllAsTouched(); + if (!form.valid) return; - final addressLine1 = - form.control(_addressLine1Key).value as String?; - final addressLine2 = - form.control(_addressLine2Key).value as String?; - final landmark = - form.control(_landmarkKey).value as String?; - final postalCode = - form.control(_postalCodeKey).value as String?; - registrationState.maybeWhen( - orElse: () { - return; - }, - create: ( - address, - householdModel, - individualModel, - projectBeneficiaryModel, - registrationDate, - searchQuery, - loading, - isHeadOfHousehold, - ) { - var addressModel = AddressModel( - addressLine1: addressLine1 != null && - addressLine1.trim().isNotEmpty - ? addressLine1 - : null, - addressLine2: addressLine2 != null && - addressLine2.trim().isNotEmpty - ? addressLine2 - : null, - landmark: - landmark != null && landmark.trim().isNotEmpty + final addressLine1 = + form.control(_addressLine1Key).value as String?; + final addressLine2 = + form.control(_addressLine2Key).value as String?; + final landmark = + form.control(_landmarkKey).value as String?; + final postalCode = + form.control(_postalCodeKey).value as String?; + registrationState.maybeWhen( + orElse: () { + return; + }, + create: ( + address, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + searchQuery, + loading, + isHeadOfHousehold, + ) { + var addressModel = AddressModel( + addressLine1: addressLine1 != null && + addressLine1.trim().isNotEmpty + ? addressLine1 + : null, + addressLine2: addressLine2 != null && + addressLine2.trim().isNotEmpty + ? addressLine2 + : null, + landmark: landmark != null && + landmark.trim().isNotEmpty ? landmark : null, - pincode: postalCode != null && - postalCode.trim().isNotEmpty - ? postalCode - : null, - type: AddressType.correspondence, - latitude: form.control(_latKey).value ?? - locationState.latitude, - longitude: form.control(_lngKey).value ?? - locationState.longitude, - locationAccuracy: - form.control(_accuracyKey).value ?? - locationState.accuracy, - locality: LocalityModel( - code: RegistrationDeliverySingleton() - .boundary! - .code!, - name: RegistrationDeliverySingleton() - .boundary! - .name, - ), - tenantId: - RegistrationDeliverySingleton().tenantId, - rowVersion: 1, - auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context.millisecondsSinceEpoch(), - ), - clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, - createdTime: context.millisecondsSinceEpoch(), - lastModifiedBy: RegistrationDeliverySingleton() - .loggedInUserUuid, - lastModifiedTime: - context.millisecondsSinceEpoch(), - ), - ); + pincode: postalCode != null && + postalCode.trim().isNotEmpty + ? postalCode + : null, + type: AddressType.correspondence, + latitude: form.control(_latKey).value ?? + locationState.latitude, + longitude: form.control(_lngKey).value ?? + locationState.longitude, + locationAccuracy: + form.control(_accuracyKey).value ?? + locationState.accuracy, + locality: LocalityModel( + code: RegistrationDeliverySingleton() + .boundary! + .code!, + name: RegistrationDeliverySingleton() + .boundary! + .name, + ), + tenantId: + RegistrationDeliverySingleton().tenantId, + rowVersion: 1, + auditDetails: AuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: + context.millisecondsSinceEpoch(), + ), + clientAuditDetails: ClientAuditDetails( + createdBy: RegistrationDeliverySingleton() + .loggedInUserUuid!, + createdTime: + context.millisecondsSinceEpoch(), + lastModifiedBy: + RegistrationDeliverySingleton() + .loggedInUserUuid, + lastModifiedTime: + context.millisecondsSinceEpoch(), + ), + ); - bloc.add( - BeneficiaryRegistrationSaveAddressEvent( - addressModel, - ), - ); - router.push(HouseDetailsRoute()); - }, - editHousehold: ( - address, - householdModel, - individuals, - registrationDate, - projectBeneficiaryModel, - loading, - headOfHousehold, - ) { - var addressModel = address.copyWith( - addressLine1: addressLine1 != null && - addressLine1.trim().isNotEmpty - ? addressLine1 - : null, - addressLine2: addressLine2 != null && - addressLine2.trim().isNotEmpty - ? addressLine2 - : null, - landmark: - landmark != null && landmark.trim().isNotEmpty + bloc.add( + BeneficiaryRegistrationSaveAddressEvent( + addressModel, + ), + ); + router.push(HouseDetailsRoute()); + }, + editHousehold: ( + address, + householdModel, + individuals, + registrationDate, + projectBeneficiaryModel, + loading, + headOfHousehold, + ) { + var addressModel = address.copyWith( + addressLine1: addressLine1 != null && + addressLine1.trim().isNotEmpty + ? addressLine1 + : null, + addressLine2: addressLine2 != null && + addressLine2.trim().isNotEmpty + ? addressLine2 + : null, + landmark: landmark != null && + landmark.trim().isNotEmpty ? landmark : null, - locality: address.locality, - pincode: postalCode != null && - postalCode.trim().isNotEmpty - ? postalCode - : null, - type: AddressType.correspondence, - latitude: form.control(_latKey).value, - longitude: form.control(_lngKey).value, - locationAccuracy: - form.control(_accuracyKey).value, - ); - // TODO [Linking of Voucher for Household based project need to be handled] + locality: address.locality, + pincode: postalCode != null && + postalCode.trim().isNotEmpty + ? postalCode + : null, + type: AddressType.correspondence, + latitude: form.control(_latKey).value, + longitude: form.control(_lngKey).value, + locationAccuracy: + form.control(_accuracyKey).value, + ); + // TODO [Linking of Voucher for Household based project need to be handled] - bloc.add( - BeneficiaryRegistrationSaveAddressEvent( - addressModel, - ), + bloc.add( + BeneficiaryRegistrationSaveAddressEvent( + addressModel, + ), + ); + router.push(HouseDetailsRoute()); + }, ); - router.push(HouseDetailsRoute()); }, ); }, - ); - }, - ),] - ), + ), + ]), slivers: [ SliverToBoxAdapter( - child: DigitCard( - children: [ - DigitTextBlock( + child: DigitCard(children: [ + DigitTextBlock( padding: const EdgeInsets.only(top: spacer2), heading: localizations.translate( i18.householdLocation.householdLocationLabelText, @@ -274,27 +277,27 @@ class HouseholdLocationPageState extends LocalizedState { i18.householdLocation .householdLocationDescriptionText, )), - householdLocationShowcaseData.administrativeArea - .buildWith( + householdLocationShowcaseData.administrativeArea.buildWith( child: ReactiveWrapperField( formControlName: _administrationAreaKey, validationMessages: { 'required': (_) => localizations.translate( - i18.householdLocation - .administrationAreaRequiredValidation, - ), + i18.householdLocation + .administrationAreaRequiredValidation, + ), }, - builder: (field)=> LabeledField( + builder: (field) => LabeledField( label: localizations.translate( - i18.householdLocation - .administrationAreaFormLabel, + i18.householdLocation.administrationAreaFormLabel, ), child: DigitTextFormInput( readOnly: true, errorMessage: field.errorText, - initialValue: form.control(_administrationAreaKey).value, - onChange: (value){ - form.control(_administrationAreaKey).value=value; + initialValue: + form.control(_administrationAreaKey).value, + onChange: (value) { + form.control(_administrationAreaKey).value = + value; }, ), ), @@ -305,17 +308,18 @@ class HouseholdLocationPageState extends LocalizedState { formControlName: _accuracyKey, validationMessages: { 'required': (_) => localizations.translate( - i18.common.corecommonRequired, - ), + i18.common.corecommonRequired, + ), }, - builder: (field)=>LabeledField( + builder: (field) => LabeledField( label: localizations.translate( i18.householdLocation.gpsAccuracyLabel, ), child: DigitTextFormInput( readOnly: true, errorMessage: field.errorText, - initialValue: form.control(_accuracyKey).value.toString(), + initialValue: + form.control(_accuracyKey).value.toString(), ), ), ), @@ -325,21 +329,21 @@ class HouseholdLocationPageState extends LocalizedState { formControlName: _addressLine1Key, validationMessages: { 'required': (_) => localizations.translate( - i18.common.min2CharsRequired, - ), + i18.common.min2CharsRequired, + ), 'maxLength': (object) => localizations .translate(i18.common.maxCharsRequired) .replaceAll('{}', maxLength.toString()), }, - builder: (field)=> LabeledField( + builder: (field) => LabeledField( label: localizations.translate( i18.householdLocation .householdAddressLine1LabelText, ), child: DigitTextFormInput( errorMessage: field.errorText, - onChange: (value){ - form.control(_addressLine1Key).value=value; + onChange: (value) { + form.control(_addressLine1Key).value = value; }, initialValue: form.control(_addressLine1Key).value, ), @@ -351,21 +355,21 @@ class HouseholdLocationPageState extends LocalizedState { formControlName: _addressLine2Key, validationMessages: { 'required': (_) => localizations.translate( - i18.common.min2CharsRequired, - ), + i18.common.min2CharsRequired, + ), 'maxLength': (object) => localizations .translate(i18.common.maxCharsRequired) .replaceAll('{}', maxLength.toString()), }, - builder: (field)=> LabeledField( + builder: (field) => LabeledField( label: localizations.translate( i18.householdLocation .householdAddressLine2LabelText, ), child: DigitTextFormInput( errorMessage: field.errorText, - onChange: (value){ - form.control(_addressLine2Key).value=value; + onChange: (value) { + form.control(_addressLine2Key).value = value; }, initialValue: form.control(_addressLine2Key).value, ), @@ -377,20 +381,20 @@ class HouseholdLocationPageState extends LocalizedState { formControlName: _landmarkKey, validationMessages: { 'required': (_) => localizations.translate( - i18.common.min2CharsRequired, - ), + i18.common.min2CharsRequired, + ), 'maxLength': (object) => localizations .translate(i18.common.maxCharsRequired) .replaceAll('{}', maxLength.toString()), }, - builder: (field)=> LabeledField( + builder: (field) => LabeledField( label: localizations.translate( i18.householdLocation.landmarkFormLabel, ), child: DigitTextFormInput( errorMessage: field.errorText, - onChange: (value){ - form.control(_landmarkKey).value=value; + onChange: (value) { + form.control(_landmarkKey).value = value; }, initialValue: form.control(_landmarkKey).value, ), @@ -402,13 +406,13 @@ class HouseholdLocationPageState extends LocalizedState { formControlName: _postalCodeKey, validationMessages: { 'required': (_) => localizations.translate( - i18.common.min2CharsRequired, - ), + i18.common.min2CharsRequired, + ), 'maxLength': (object) => localizations .translate(i18.common.maxCharsRequired) .replaceAll('{}', '6'), }, - builder: (field)=> LabeledField( + builder: (field) => LabeledField( label: localizations.translate( i18.householdLocation.postalCodeFormLabel, ), @@ -418,16 +422,16 @@ class HouseholdLocationPageState extends LocalizedState { FilteringTextInputFormatter.digitsOnly, ], errorMessage: field.errorText, - onChange: (value){ - form.control(_postalCodeKey).value=value; + onChange: (value) { + form.control(_postalCodeKey).value = value; }, maxLength: 6, initialValue: form.control(_postalCodeKey).value, ), ), ), - ),] - ), + ), + ]), ), ], ), @@ -444,8 +448,8 @@ class HouseholdLocationPageState extends LocalizedState { return fb.group({ _administrationAreaKey: FormControl( - value: localizations.translate( - RegistrationDeliverySingleton().boundary!.code ?? ''), + value: localizations + .translate(RegistrationDeliverySingleton().boundary!.code ?? ''), validators: [Validators.required], ), _addressLine1Key: diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index 665cf06d5..301b6f072 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -5,7 +5,7 @@ import 'package:digit_scanner/blocs/scanner.dart'; import 'package:digit_scanner/pages/qr_scanner.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; -import 'package:digit_ui_components/widgets/atoms/dob_picker.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_dob_picker.dart'; import 'package:digit_ui_components/widgets/atoms/selection_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; @@ -96,7 +96,7 @@ class IndividualDetailsPageState extends LocalizedState { }, builder: (context, state) { return ScrollableContent( - enableFixedButton: true, + enableFixedDigitButton: true, header: const Column(children: [ BackNavigationHelpHeaderWidget( showHelp: false, @@ -110,15 +110,15 @@ class IndividualDetailsPageState extends LocalizedState { ValueListenableBuilder( valueListenable: clickedStatus, builder: (context, bool isClicked, _) { - return Button( + return DigitButton( label: state.mapOrNull( editIndividual: (value) => localizations .translate(i18.common.coreCommonSave), ) ?? localizations .translate(i18.common.coreCommonSubmit), - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, onPressed: () async { if (form.control(_dobKey).value == null) { @@ -619,9 +619,9 @@ class IndividualDetailsPageState extends LocalizedState { // ignore: no-empty-block ) - : Button( - type: ButtonType.secondary, - size: ButtonSize.large, + : DigitButton( + type: DigitButtonType.secondary, + size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, onPressed: () { Navigator.of(context).push( diff --git a/packages/registration_delivery/lib/pages/reason_for_deletion.dart b/packages/registration_delivery/lib/pages/reason_for_deletion.dart index 8635aafbe..a9b2a330c 100644 --- a/packages/registration_delivery/lib/pages/reason_for_deletion.dart +++ b/packages/registration_delivery/lib/pages/reason_for_deletion.dart @@ -52,11 +52,11 @@ class ReasonForDeletionPageState extends LocalizedState { ); } - return Button( + return DigitButton( label: localizations .translate(i18.householdLocation.actionLabel), - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, onPressed: () { if (form.valid) { diff --git a/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart b/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart index 4a424945d..5fa8af34d 100644 --- a/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart +++ b/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart @@ -1,13 +1,13 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_data_model/models/entities/individual.dart'; -import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; +import 'package:digit_ui_components/services/location_bloc.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:location/location.dart'; import 'package:registration_delivery/blocs/search_households/household_global_seach.dart'; import 'package:registration_delivery/blocs/search_households/individual_global_search.dart'; import 'package:registration_delivery/data/repositories/local/individual_global_search.dart'; import 'package:registration_delivery/utils/extensions/extensions.dart'; -import 'package:location/location.dart'; import '../blocs/household_details/household_details.dart'; import '../blocs/search_households/search_bloc_common_wrapper.dart'; @@ -163,7 +163,7 @@ class RegistrationDeliveryWrapperPage extends StatelessWidget { create: (_) => HouseholdDetailsBloc(const HouseholdDetailsState()), ), BlocProvider( - create: (_)=>LocationBloc(location: Location()), + create: (_) => LocationBloc(location: Location()), ), ], child: const AutoRouter(), diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index cb2a671a7..5f66f4219 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -2,8 +2,8 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_scanner/blocs/scanner.dart'; import 'package:digit_scanner/pages/qr_scanner.dart'; -import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/services/location_bloc.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/digit_chip.dart'; import 'package:digit_ui_components/widgets/atoms/digit_search_bar.dart'; @@ -127,7 +127,7 @@ class _SearchBeneficiaryPageState locationState.latitude != null ? Padding( padding: const EdgeInsets.all(spacer2), - child: CustomSwitch( + child: DigitSwitch( mainAxisAlignment: MainAxisAlignment.start, label: localizations.translate( @@ -186,10 +186,10 @@ class _SearchBeneficiaryPageState alignment: Alignment.topLeft, child: Padding( padding: const EdgeInsets.all(spacer2), - child: Button( + child: DigitButton( label: getFilterIconNLabel()['label'], - size: ButtonSize.medium, - type: ButtonType.tertiary, + size: DigitButtonSize.medium, + type: DigitButtonType.tertiary, suffixIcon: getFilterIconNLabel()['icon'], onPressed: () => showFilterDialog(), @@ -360,13 +360,13 @@ class _SearchBeneficiaryPageState margin: const EdgeInsets.only(top: spacer2), padding: const EdgeInsets.all(spacer2), children: [ - Button( + DigitButton( label: localizations.translate( i18.searchBeneficiary.beneficiaryAddActionLabel, ), mainAxisSize: MainAxisSize.max, - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, isDisabled: searchHouseholdsState.searchQuery != null && searchHouseholdsState.searchQuery!.isNotEmpty ? false @@ -386,9 +386,9 @@ class _SearchBeneficiaryPageState blocWrapper.clearEvent(); }, ), - Button( - type: ButtonType.secondary, - size: ButtonSize.large, + DigitButton( + type: DigitButtonType.secondary, + size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, onPressed: () { blocWrapper.clearEvent(); diff --git a/packages/registration_delivery/lib/pages/summary_page.dart b/packages/registration_delivery/lib/pages/summary_page.dart index bc37f26b6..728fe6b88 100644 --- a/packages/registration_delivery/lib/pages/summary_page.dart +++ b/packages/registration_delivery/lib/pages/summary_page.dart @@ -4,6 +4,7 @@ import 'package:digit_ui_components/utils/date_utils.dart'; import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/label_value_summary.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:registration_delivery/models/entities/additional_fields_type.dart'; @@ -77,7 +78,7 @@ class SummaryPageState extends LocalizedState { }, builder: (context, householdState) { return ScrollableContent( - enableFixedButton: true, + enableFixedDigitButton: true, header: Column(children: [ const BackNavigationHelpHeaderWidget( showHelp: false, @@ -105,15 +106,15 @@ class SummaryPageState extends LocalizedState { ValueListenableBuilder( valueListenable: clickedStatus, builder: (context, bool isClicked, _) { - return Button( + return DigitButton( label: householdState.mapOrNull( editIndividual: (value) => localizations .translate(i18.common.coreCommonSave), ) ?? localizations .translate(i18.common.coreCommonSubmit), - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, isDisabled: isClicked ? true : false, onPressed: () async { @@ -148,7 +149,7 @@ class SummaryPageState extends LocalizedState { i18.deliverIntervention.dialogContent, ), actions: [ - Button( + DigitButton( label: localizations.translate( i18.common.coreCommonSubmit, ), @@ -159,9 +160,9 @@ class SummaryPageState extends LocalizedState { rootNavigator: true, ).pop(true); }, - type: ButtonType.primary, - size: ButtonSize.large), - Button( + type: DigitButtonType.primary, + size: DigitButtonSize.large), + DigitButton( label: localizations.translate( i18.common.coreCommonCancel, ), @@ -169,8 +170,8 @@ class SummaryPageState extends LocalizedState { context, rootNavigator: true, ).pop(false), - type: ButtonType.secondary, - size: ButtonSize.large) + type: DigitButtonType.secondary, + size: DigitButtonSize.large) ], ), ); @@ -201,208 +202,206 @@ class SummaryPageState extends LocalizedState { child: Column( children: [ DigitCard( - margin: const EdgeInsets.all(spacer2), + margin: const EdgeInsets.all(spacer2), children: [ - LabelValueList( - heading: localizations.translate(i18 - .householdLocation.householdLocationLabelText), - - labelFlex: 6, - maxLines: 2, - items: [ - LabelValuePair( - label: localizations.translate( - i18.householdLocation.villageLabel), - value: householdState.householdModel?.address - ?.locality?.code ?? - localizations - .translate(i18.common.coreCommonNA), - isInline: true), - LabelValuePair( - label: localizations.translate( - i18.householdLocation.landmarkFormLabel), - value: householdState - .householdModel?.address?.landmark ?? - localizations - .translate(i18.common.coreCommonNA), - isInline: true), - ]), - ]), + LabelValueSummary( + heading: localizations.translate(i18 + .householdLocation + .householdLocationLabelText), + items: [ + LabelValueItem( + label: localizations.translate( + i18.householdLocation.villageLabel), + value: householdState.householdModel + ?.address?.locality?.code ?? + localizations.translate( + i18.common.coreCommonNA), + isInline: true), + LabelValueItem( + label: localizations.translate(i18 + .householdLocation.landmarkFormLabel), + value: householdState.householdModel + ?.address?.landmark ?? + localizations.translate( + i18.common.coreCommonNA), + isInline: true), + ]), + ]), DigitCard( - margin: const EdgeInsets.all(spacer2), + margin: const EdgeInsets.all(spacer2), children: [ - LabelValueList( - heading: localizations.translate( - i18.householdDetails.householdDetailsLabel), - labelFlex: 6, - items: [ - LabelValuePair( - label: localizations.translate( - i18.beneficiaryDetails.totalMembers), - value: householdState - .householdModel?.memberCount - .toString() ?? - '0', - isInline: true), - LabelValuePair( - label: localizations.translate(i18 - .householdDetails - .noOfPregnantWomenCountLabel), - value: householdState.householdModel - ?.additionalFields?.fields - .where((h) => - h.key == - AdditionalFieldsType.pregnantWomen - .toValue()) - .firstOrNull - ?.value - .toString() ?? - '0', - isInline: true), - LabelValuePair( - label: localizations.translate(i18 - .householdDetails - .noOfChildrenBelow5YearsLabel), - value: householdState.householdModel - ?.additionalFields?.fields - .where((h) => - h.key == - AdditionalFieldsType.children - .toValue()) - .firstOrNull - ?.value - .toString() ?? - '0', - isInline: true), - ]), - ]), + LabelValueSummary( + heading: localizations.translate( + i18.householdDetails.householdDetailsLabel), + items: [ + LabelValueItem( + label: localizations.translate( + i18.beneficiaryDetails.totalMembers), + value: householdState + .householdModel?.memberCount + .toString() ?? + '0', + isInline: true), + LabelValueItem( + label: localizations.translate(i18 + .householdDetails + .noOfPregnantWomenCountLabel), + value: householdState.householdModel + ?.additionalFields?.fields + .where((h) => + h.key == + AdditionalFieldsType + .pregnantWomen + .toValue()) + .firstOrNull + ?.value + .toString() ?? + '0', + isInline: true), + LabelValueItem( + label: localizations.translate(i18 + .householdDetails + .noOfChildrenBelow5YearsLabel), + value: householdState.householdModel + ?.additionalFields?.fields + .where((h) => + h.key == + AdditionalFieldsType.children + .toValue()) + .firstOrNull + ?.value + .toString() ?? + '0', + isInline: true), + ]), + ]), DigitCard( - margin: const EdgeInsets.all(spacer2), + margin: const EdgeInsets.all(spacer2), children: [ - LabelValueList( - heading: localizations.translate( - i18.householdDetails.houseDetailsLabel), - labelFlex: 6, - items: [ - LabelValuePair( - label: localizations.translate( - i18.householdDetails.noOfRoomsLabel), - value: householdState.householdModel - ?.additionalFields?.fields - .where((h) => - h.key == - AdditionalFieldsType.noOfRooms - .toValue()) - .firstOrNull - ?.value - .toString() ?? - '0', - isInline: true), - LabelValuePair( - label: localizations.translate( - i18.householdDetails.typeOfStructure), - value: (householdState.householdModel + LabelValueSummary( + heading: localizations.translate( + i18.householdDetails.houseDetailsLabel), + items: [ + LabelValueItem( + label: localizations.translate( + i18.householdDetails.noOfRoomsLabel), + value: householdState.householdModel ?.additionalFields?.fields .where((h) => h.key == - AdditionalFieldsType - .houseStructureTypes + AdditionalFieldsType.noOfRooms .toValue()) .firstOrNull - ?.value ?? - []) - .toString() - .split('|') - .map((item) => getLocalizedMessage(item)) - .toList() - .join(', '), - isInline: true), - ]), - ]), + ?.value + .toString() ?? + '0', + isInline: true), + LabelValueItem( + label: localizations.translate( + i18.householdDetails.typeOfStructure), + value: (householdState.householdModel + ?.additionalFields?.fields + .where((h) => + h.key == + AdditionalFieldsType + .houseStructureTypes + .toValue()) + .firstOrNull + ?.value ?? + []) + .toString() + .split('|') + .map((item) => + getLocalizedMessage(item)) + .toList() + .join(', '), + isInline: true), + ]), + ]), DigitCard( - margin: const EdgeInsets.all(spacer2), + margin: const EdgeInsets.all(spacer2), children: [ - LabelValueList( - heading: localizations.translate(i18 - .individualDetails.individualsDetailsLabelText), - labelFlex: 6, - items: [ - LabelValuePair( - label: localizations.translate( - i18.individualDetails.nameLabelText), - value: householdState.maybeWhen( - orElse: () => localizations - .translate(i18.common.coreCommonNA), - summary: ( - navigateToRoot, - householdModel, - individualModel, - projectBeneficiaryModel, - registrationDate, - addressModel, - loading, - isHeadOfHousehold, - ) => - individualModel?.name?.givenName ?? - localizations.translate( - i18.common.coreCommonNA)), - ), - LabelValuePair( - label: localizations.translate( - i18.individualDetails.dobLabelText), - value: householdState.maybeWhen( - orElse: () => localizations - .translate(i18.common.coreCommonNA), - summary: ( - navigateToRoot, - householdModel, - individualModel, - projectBeneficiaryModel, - registrationDate, - addressModel, - loading, - isHeadOfHousehold, - ) => - individualModel?.dateOfBirth != null - ? DigitDateUtils.getFilteredDate( - DigitDateUtils - .getFormattedDateToDateTime( + LabelValueSummary( + heading: localizations.translate(i18 + .individualDetails + .individualsDetailsLabelText), + items: [ + LabelValueItem( + label: localizations.translate( + i18.individualDetails.nameLabelText), + value: householdState.maybeWhen( + orElse: () => localizations + .translate(i18.common.coreCommonNA), + summary: ( + navigateToRoot, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + addressModel, + loading, + isHeadOfHousehold, + ) => + individualModel?.name?.givenName ?? + localizations.translate( + i18.common.coreCommonNA)), + ), + LabelValueItem( + label: localizations.translate( + i18.individualDetails.dobLabelText), + value: householdState.maybeWhen( + orElse: () => localizations + .translate(i18.common.coreCommonNA), + summary: ( + navigateToRoot, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + addressModel, + loading, + isHeadOfHousehold, + ) => + individualModel?.dateOfBirth != null + ? DigitDateUtils.getFilteredDate( + DigitDateUtils.getFormattedDateToDateTime( individualModel ?.dateOfBirth ?? '') - .toString(), - dateFormat: Constants() - .dateMonthYearFormat) - .toString() - : localizations.translate( - i18.common.coreCommonNA)), - ), - LabelValuePair( - label: localizations.translate( - i18.individualDetails.genderLabelText), - value: householdState.maybeWhen( - orElse: () => localizations - .translate(i18.common.coreCommonNA), - summary: ( - navigateToRoot, - householdModel, - individualModel, - projectBeneficiaryModel, - registrationDate, - addressModel, - loading, - isHeadOfHousehold, - ) => - individualModel?.gender != null - ? localizations.translate( - individualModel?.gender?.name - .toUpperCase() ?? - '') - : localizations.translate( - i18.common.coreCommonNA)), - ), - ]), - ]), + .toString(), + dateFormat: Constants() + .dateMonthYearFormat) + .toString() + : localizations.translate( + i18.common.coreCommonNA)), + ), + LabelValueItem( + label: localizations.translate( + i18.individualDetails.genderLabelText), + value: householdState.maybeWhen( + orElse: () => localizations + .translate(i18.common.coreCommonNA), + summary: ( + navigateToRoot, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + addressModel, + loading, + isHeadOfHousehold, + ) => + individualModel?.gender != null + ? localizations.translate( + individualModel + ?.gender?.name + .toUpperCase() ?? + '') + : localizations.translate( + i18.common.coreCommonNA)), + ), + ]), + ]), ], ), ) diff --git a/packages/registration_delivery/lib/utils/utils.dart b/packages/registration_delivery/lib/utils/utils.dart index eafeb9bb0..af751ea74 100644 --- a/packages/registration_delivery/lib/utils/utils.dart +++ b/packages/registration_delivery/lib/utils/utils.dart @@ -3,6 +3,7 @@ import 'dart:math'; import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/utils/date_utils.dart'; import 'package:formula_parser/formula_parser.dart'; import 'package:reactive_forms/reactive_forms.dart'; import 'package:registration_delivery/models/entities/household.dart'; diff --git a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart index 18c08f186..aa990ace3 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart @@ -41,7 +41,7 @@ class BeneficiaryCard extends StatelessWidget { status == Status.registered.toValue() || status == Status.administeredSuccess.toValue() || status == Status.delivered.toValue() - ? Button( + ? DigitButton( prefixIcon: Icons.check_circle, label: RegistrationDeliveryLocalization.of(context) .translate(status.toString()), @@ -49,17 +49,17 @@ class BeneficiaryCard extends StatelessWidget { iconColor: theme.colorScheme.onSurfaceVariant, isDisabled: true, onPressed: () {}, - type: ButtonType.tertiary, - size: ButtonSize.medium, + type: DigitButtonType.tertiary, + size: DigitButtonSize.medium, ) - : Button( + : DigitButton( prefixIcon: Icons.info_rounded, label: RegistrationDeliveryLocalization.of(context) .translate(status.toString()), textColor: theme.colorScheme.error, iconColor: theme.colorScheme.error, - type: ButtonType.tertiary, - size: ButtonSize.medium, + type: DigitButtonType.tertiary, + size: DigitButtonSize.medium, isDisabled: true, onPressed: () {}, ), diff --git a/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart index 58bfa3070..bdaa1af5e 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart @@ -1,3 +1,4 @@ +import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:digit_ui_components/widgets/atoms/selection_card.dart'; @@ -5,7 +6,6 @@ import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; -import 'package:digit_data_model/data_model.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../localized.dart'; @@ -34,42 +34,51 @@ class ResourceBeneficiaryCardState extends LocalizedState { @override Widget build(BuildContext context) { - return DigitCard( - cardType: CardType.secondary, - children: [BlocBuilder( + return DigitCard(cardType: CardType.secondary, children: [ + BlocBuilder( builder: (context, productState) { return productState.maybeWhen( orElse: () => const Offstage(), fetched: (productVariants) { - return - SelectionCard( - equalWidthOptions: true, - options: productVariants, - onSelectionChanged: (selectedOptions) { - if (selectedOptions.isNotEmpty) { - var selectedOption = selectedOptions.first; - widget.form.control('resourceDelivered.${widget.cardIndex}').value = selectedOption; - }else{ - widget.form.control('resourceDelivered.${widget.cardIndex}').value = null; - } - }, - initialSelection: widget.form.control('resourceDelivered.${widget.cardIndex}').value != null ? [ - widget.form.control('resourceDelivered.${widget.cardIndex}').value - ] : [], - valueMapper: (value) { - return localizations.translate( - value.sku ?? value.id, - ); - }, - allowMultipleSelection: false, - ); + return SelectionCard( + equalWidthOptions: true, + options: productVariants, + onSelectionChanged: (selectedOptions) { + if (selectedOptions.isNotEmpty) { + var selectedOption = selectedOptions.first; + widget.form + .control('resourceDelivered.${widget.cardIndex}') + .value = selectedOption; + } else { + widget.form + .control('resourceDelivered.${widget.cardIndex}') + .value = null; + } + }, + initialSelection: widget.form + .control('resourceDelivered.${widget.cardIndex}') + .value != + null + ? [ + widget.form + .control('resourceDelivered.${widget.cardIndex}') + .value + ] + : [], + valueMapper: (value) { + return localizations.translate( + value.sku ?? value.id, + ); + }, + allowMultipleSelection: false, + ); }, ); }, ), ReactiveWrapperField( formControlName: 'quantityDistributed.${widget.cardIndex}', - builder: (field)=> LabeledField( + builder: (field) => LabeledField( label: localizations.translate( i18.deliverIntervention.quantityDistributedLabel, ), @@ -77,67 +86,67 @@ class ResourceBeneficiaryCardState minValue: 1, step: 1, initialValue: "0", - onChange: (value){ - widget.form.control('quantityDistributed.${widget.cardIndex}').value=int.parse(value); + onChange: (value) { + widget.form + .control('quantityDistributed.${widget.cardIndex}') + .value = int.parse(value); }, ), ), ), Align( alignment: Alignment.centerLeft, - child: (widget.cardIndex == widget.totalItems - 1 && - widget.totalItems > 1) - ? Button( - onPressed: () async { - final submit = await showDialog( - context: context, - builder: (ctx)=> Popup( - title: localizations.translate( - i18.deliverIntervention - .resourceDeleteBeneficiaryDialogTitle, - ), - actions: [ - Button( - label: localizations.translate( - i18.deliverIntervention - .resourceDeleteBeneficiaryPrimaryActionLabel, - ), - onPressed: () { - Navigator.of( - context, - rootNavigator: true, - ).pop(true); - }, - type: ButtonType.primary, - size: ButtonSize.large + child: + (widget.cardIndex == widget.totalItems - 1 && widget.totalItems > 1) + ? DigitButton( + onPressed: () async { + final submit = await showDialog( + context: context, + builder: (ctx) => Popup( + title: localizations.translate( + i18.deliverIntervention + .resourceDeleteBeneficiaryDialogTitle, + ), + actions: [ + DigitButton( + label: localizations.translate( + i18.deliverIntervention + .resourceDeleteBeneficiaryPrimaryActionLabel, + ), + onPressed: () { + Navigator.of( + context, + rootNavigator: true, + ).pop(true); + }, + type: DigitButtonType.primary, + size: DigitButtonSize.large), + DigitButton( + label: localizations.translate( + i18.common.coreCommonCancel, + ), + onPressed: () => Navigator.of( + context, + rootNavigator: true, + ).pop(false), + type: DigitButtonType.secondary, + size: DigitButtonSize.large), + ], ), - Button( - label: localizations.translate( - i18.common.coreCommonCancel, - ), - onPressed: () => Navigator.of( - context, - rootNavigator: true, - ).pop(false), - type: ButtonType.secondary, - size: ButtonSize.large - ), - ], + ); + if (submit == true) { + widget.onDelete(widget.cardIndex); + } + }, + label: localizations.translate( + i18.deliverIntervention.resourceDeleteBeneficiary, ), - ); - if (submit == true) { - widget.onDelete(widget.cardIndex); - } - }, - label: localizations.translate( - i18.deliverIntervention.resourceDeleteBeneficiary, - ), - prefixIcon: Icons.delete, - type: ButtonType.tertiary, - size: ButtonSize.medium, - ) - : const Offstage(), - ),] - ); + prefixIcon: Icons.delete, + type: DigitButtonType.tertiary, + size: DigitButtonSize.medium, + ) + : const Offstage(), + ), + ]); } } diff --git a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart index 208738f9a..be2406e6a 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart @@ -318,12 +318,12 @@ class ViewBeneficiaryCardState extends LocalizedState { ), ), Flexible( - child: Button( + child: DigitButton( label: localizations.translate(i18.searchBeneficiary.iconLabel), onPressed: widget.onOpenPressed, - type: ButtonType.secondary, - size: ButtonSize.medium, + type: DigitButtonType.secondary, + size: DigitButtonSize.medium, ), ), ], diff --git a/packages/registration_delivery/lib/widgets/inventory/no_facilities_assigned_dialog.dart b/packages/registration_delivery/lib/widgets/inventory/no_facilities_assigned_dialog.dart index bd158dde8..927baa989 100644 --- a/packages/registration_delivery/lib/widgets/inventory/no_facilities_assigned_dialog.dart +++ b/packages/registration_delivery/lib/widgets/inventory/no_facilities_assigned_dialog.dart @@ -22,11 +22,11 @@ class NoFacilitiesAssignedDialog { description: RegistrationDeliveryLocalization.of(context) .translate(i18.referBeneficiary.noFacilityAssignedDescription), actions: [ - Button( + DigitButton( label: RegistrationDeliveryLocalization.of(context) .translate(i18.common.corecommonclose), - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, onPressed: () { Navigator.of(context, rootNavigator: true).pop(); context.router.maybePop(); diff --git a/packages/registration_delivery/lib/widgets/member_card/member_card.dart b/packages/registration_delivery/lib/widgets/member_card/member_card.dart index 65fcbd8d4..70fcb9c1a 100644 --- a/packages/registration_delivery/lib/widgets/member_card/member_card.dart +++ b/packages/registration_delivery/lib/widgets/member_card/member_card.dart @@ -105,43 +105,43 @@ class MemberCard extends StatelessWidget { Positioned( child: Align( alignment: Alignment.topRight, - child: Button( + child: DigitButton( isDisabled: (projectBeneficiaries ?? []).isEmpty, onPressed: () => showDialog( context: context, - builder: (ctx) => ActionCard( + builder: (ctx) => DigitActionCard( onOutsideTap: () { Navigator.of(context, rootNavigator: true).pop(); }, actions: [ - Button( + DigitButton( prefixIcon: Icons.person, label: localizations.translate( i18.memberCard.assignAsHouseholdhead, ), isDisabled: isHead ? true : false, onPressed: setAsHeadAction, - type: ButtonType.secondary, - size: ButtonSize.large, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, ), - Button( + DigitButton( prefixIcon: Icons.edit, label: localizations.translate( i18.memberCard.editIndividualDetails, ), onPressed: editMemberAction, - type: ButtonType.secondary, - size: ButtonSize.large, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, ), - Button( + DigitButton( prefixIcon: Icons.delete, label: localizations.translate( i18.memberCard.deleteIndividualActionText, ), isDisabled: isHead ? true : false, onPressed: deleteMemberAction, - type: ButtonType.secondary, - size: ButtonSize.large, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, ), ], ), @@ -150,8 +150,8 @@ class MemberCard extends StatelessWidget { i18.memberCard.editDetails, ), prefixIcon: Icons.edit, - type: ButtonType.tertiary, - size: ButtonSize.medium, + type: DigitButtonType.tertiary, + size: DigitButtonSize.medium, ), ), ), @@ -190,7 +190,7 @@ class MemberCard extends StatelessWidget { isBeneficiaryReferred ? Align( alignment: Alignment.centerLeft, - child: Button( + child: DigitButton( prefixIcon: Icons.info_rounded, label: localizations.translate( isNotEligible @@ -206,15 +206,15 @@ class MemberCard extends StatelessWidget { ), textColor: DigitTheme.instance.colorScheme.error, iconColor: DigitTheme.instance.colorScheme.error, - type: ButtonType.tertiary, - size: ButtonSize.medium, + type: DigitButtonType.tertiary, + size: DigitButtonSize.medium, isDisabled: true, onPressed: () {}, ), ) : Align( alignment: Alignment.centerLeft, - child: Button( + child: DigitButton( prefixIcon: Icons.check_circle, label: localizations.translate( i18.householdOverView @@ -225,8 +225,8 @@ class MemberCard extends StatelessWidget { .instance.colorScheme.onSurfaceVariant, iconColor: DigitTheme .instance.colorScheme.onSurfaceVariant, - type: ButtonType.tertiary, - size: ButtonSize.medium, + type: DigitButtonType.tertiary, + size: DigitButtonSize.medium, onPressed: () {}, ), ), @@ -246,14 +246,14 @@ class MemberCard extends StatelessWidget { isBeneficiaryReferred ? const Offstage() : !isNotEligible - ? Button( + ? DigitButton( mainAxisSize: MainAxisSize.max, isDisabled: (projectBeneficiaries ?? []).isEmpty ? true : false, - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, label: allDosesDelivered( tasks, context.selectedCycle, @@ -323,20 +323,20 @@ class MemberCard extends StatelessWidget { ) && !checkStatus(tasks, context.selectedCycle))) ? const Offstage() - : Button( + : DigitButton( label: localizations.translate( i18.memberCard.unableToDeliverLabel, ), isDisabled: (projectBeneficiaries ?? []).isEmpty ? true : false, - type: ButtonType.secondary, - size: ButtonSize.large, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, onPressed: () async { await showDialog( context: context, - builder: (ctx) => ActionCard( + builder: (ctx) => DigitActionCard( onOutsideTap: () { Navigator.of( context, @@ -344,13 +344,13 @@ class MemberCard extends StatelessWidget { ).pop(); }, actions: [ - Button( + DigitButton( label: localizations.translate( i18.memberCard .beneficiaryRefusedLabel, ), - type: ButtonType.secondary, - size: ButtonSize.large, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, onPressed: () { Navigator.of(context, rootNavigator: true) @@ -440,12 +440,12 @@ class MemberCard extends StatelessWidget { ); }, ), - Button( + DigitButton( label: localizations.translate( i18.memberCard.referBeneficiaryLabel, ), - type: ButtonType.secondary, - size: ButtonSize.large, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, onPressed: () async { Navigator.of( context, @@ -460,7 +460,7 @@ class MemberCard extends StatelessWidget { ); }, ), - Button( + DigitButton( label: localizations.translate( i18.memberCard .recordAdverseEventsLabel, @@ -469,8 +469,8 @@ class MemberCard extends StatelessWidget { (tasks ?? []).isNotEmpty ? false : true, - type: ButtonType.secondary, - size: ButtonSize.large, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, onPressed: () async { Navigator.of( diff --git a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart index 6cdfcc8fb..27a710353 100644 --- a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart +++ b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart @@ -3,9 +3,9 @@ import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/widgets/atoms/selection_card.dart'; import 'package:flutter/material.dart'; import 'package:registration_delivery/registration_delivery.dart'; -import '../../utils/i18_key_constants.dart' as i18; import '../../models/entities/status.dart'; +import '../../utils/i18_key_constants.dart' as i18; class StatusFilter extends LocalizedStatefulWidget { final List? selectedFilters; @@ -118,13 +118,13 @@ class StatusFilterState extends LocalizedState { MainAxisAlignment.spaceEvenly, // Adjust button spacing children: [ Expanded( - child: Button( + child: DigitButton( label: localizations.translate( i18.searchBeneficiary.clearFilter, ), isDisabled: selectedButtons.isEmpty, - type: ButtonType.secondary, - size: ButtonSize.medium, + type: DigitButtonType.secondary, + size: DigitButtonSize.medium, onPressed: () { setState(() { selectedButtons.clear(); @@ -135,13 +135,13 @@ class StatusFilterState extends LocalizedState { width: spacer2, ), Expanded( - child: Button( + child: DigitButton( label: localizations.translate( i18.searchBeneficiary.applyFilter, ), isDisabled: selectedButtons.isEmpty, - type: ButtonType.primary, - size: ButtonSize.medium, + type: DigitButtonType.primary, + size: DigitButtonSize.medium, onPressed: () { setState(() { isLoading = true; diff --git a/packages/registration_delivery/lib/widgets/table_card/table_card.dart b/packages/registration_delivery/lib/widgets/table_card/table_card.dart index 55abdf3fa..eef551f17 100644 --- a/packages/registration_delivery/lib/widgets/table_card/table_card.dart +++ b/packages/registration_delivery/lib/widgets/table_card/table_card.dart @@ -1,4 +1,5 @@ import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; +import 'package:digit_ui_components/widgets/molecules/label_value_summary.dart'; import 'package:flutter/material.dart'; class DigitTableCard extends StatelessWidget { @@ -27,16 +28,13 @@ class DigitTableCard extends StatelessWidget { @override Widget build(BuildContext context) { - return LabelValueList( - labelFlex: 6, - maxLines: 2, - items: element.keys - .map((e)=>LabelValuePair( - label: e, - value: element[e].toString(), - - ) - ).toList(), + return LabelValueSummary( + items: element.keys + .map((e) => LabelValueItem( + label: e, + value: element[e].toString(), + )) + .toList(), ); } } diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index f43c0acdf..5d8dcc512 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -117,18 +125,18 @@ packages: dependency: "direct main" description: name: auto_route - sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 + sha256: a9001a90539ca3effc168f7e1029a5885c7326b9032c09ac895e303c1d137704 url: "https://pub.dev" source: hosted - version: "7.9.2" + version: "8.3.0" auto_route_generator: dependency: "direct dev" description: name: auto_route_generator - sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" + sha256: ba28133d3a3bf0a66772bcc98dade5843753cd9f1a8fb4802b842895515b67d3 url: "https://pub.dev" source: hosted - version: "7.3.2" + version: "8.0.0" bloc: dependency: transitive description: @@ -186,13 +194,13 @@ packages: source: hosted version: "2.4.2" build_runner: - dependency: "direct main" + dependency: "direct dev" description: name: build_runner - sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" url: "https://pub.dev" source: hosted - version: "2.4.9" + version: "2.4.11" build_runner_core: dependency: transitive description: @@ -221,26 +229,26 @@ packages: dependency: transitive description: name: camera - sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" + sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167" url: "https://pub.dev" source: hosted - version: "0.10.5+9" - camera_android: + version: "0.11.0+2" + camera_android_camerax: dependency: transitive description: - name: camera_android - sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 + name: camera_android_camerax + sha256: "011be2ab0e5b3e3aa8094413fa890f8c5c5afd7cfdaef353a992047d4dab5780" url: "https://pub.dev" source: hosted - version: "0.10.9+2" + version: "0.6.8+2" camera_avfoundation: dependency: transitive description: name: camera_avfoundation - sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" + sha256: "2e4c568f70e406ccb87376bc06b53d2f5bebaab71e2fbcc1a950e31449381bcf" url: "https://pub.dev" source: hosted - version: "0.9.13+10" + version: "0.9.17+5" camera_platform_interface: dependency: transitive description: @@ -333,10 +341,10 @@ packages: dependency: transitive description: name: cross_file - sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" url: "https://pub.dev" source: hosted - version: "0.3.3+8" + version: "0.3.4+2" crypto: dependency: transitive description: @@ -372,12 +380,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git - version: "4.2.0" + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.3" dart_style: dependency: transitive description: @@ -405,27 +411,31 @@ packages: digit_components: dependency: transitive description: - name: digit_components - sha256: "07b585e5d8010639366da72a4a8b215ce9b8790c75b2162b66af3cea57ca35d9" - url: "https://pub.dev" - source: hosted + path: "../digit_components" + relative: true + source: path version: "1.0.2+1" digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" - url: "https://pub.dev" - source: hosted + path: "../digit_data_model" + relative: true + source: path version: "1.0.5-dev.1" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_scanner: dependency: "direct main" description: - name: digit_scanner - sha256: "9862c4885465bb1942e36dc9b42596c201648db9b0f5ffb8ad768e2409fc2742" - url: "https://pub.dev" - source: hosted - version: "1.0.3+1" + path: "../digit_scanner" + relative: true + source: path + version: "1.0.4" digit_showcase: dependency: "direct main" description: @@ -437,13 +447,14 @@ packages: digit_ui_components: dependency: "direct main" description: - name: digit_ui_components - sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae - url: "https://pub.dev" - source: hosted + path: "flutter/digit-ui-components/digit_components" + ref: version_update + resolved-ref: ad45e31f470630b5876f38c0bc7744c5bf05b02b + url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" + source: git version: "0.0.1+7" dio: - dependency: transitive + dependency: "direct main" description: name: dio sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" @@ -470,10 +481,10 @@ packages: dependency: "direct main" description: name: drift - sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + sha256: "6acedc562ffeed308049f78fb1906abad3d65714580b6745441ee6d50ec564cd" url: "https://pub.dev" source: hosted - version: "2.15.0" + version: "2.18.0" drift_db_viewer: dependency: "direct main" description: @@ -486,18 +497,18 @@ packages: dependency: "direct dev" description: name: drift_dev - sha256: c037d9431b6f8dc633652b1469e5f53aaec6e4eb405ed29dd232fa888ef10d88 + sha256: d9b020736ea85fff1568699ce18b89fabb3f0f042e8a7a05e84a3ec20d39acde url: "https://pub.dev" source: hosted - version: "2.15.0" + version: "2.18.0" easy_stepper: dependency: transitive description: name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" url: "https://pub.dev" source: hosted - version: "0.5.2+1" + version: "0.8.5+1" fake_async: dependency: transitive description: @@ -562,6 +573,46 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: @@ -667,10 +718,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" + sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "4.0.0" flutter_localizations: dependency: transitive description: flutter @@ -730,10 +781,10 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" + sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" url: "https://pub.dev" source: hosted - version: "8.2.5" + version: "8.2.8" formula_parser: dependency: "direct main" description: @@ -778,10 +829,10 @@ packages: dependency: transitive description: name: geolocator_android - sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" url: "https://pub.dev" source: hosted - version: "4.3.1" + version: "4.6.1" geolocator_apple: dependency: transitive description: @@ -826,26 +877,26 @@ packages: dependency: transitive description: name: google_fonts - sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 url: "https://pub.dev" source: hosted - version: "4.0.5" + version: "6.2.1" google_mlkit_barcode_scanning: dependency: transitive description: name: google_mlkit_barcode_scanning - sha256: "965183a8cd5cef8477ceea5dbdf29c34a739cf0cfbf1bdad54cd3f9f1807afe5" + sha256: f1a2a39cf1730b9a5e2784a07efa1ca5bfdfdde6aa00b193b3f8cd1953c638ec url: "https://pub.dev" source: hosted - version: "0.10.0" + version: "0.12.0" google_mlkit_commons: dependency: transitive description: name: google_mlkit_commons - sha256: "046586b381cdd139f7f6a05ad6998f7e339d061bd70158249907358394b5f496" + sha256: "27d626c66a181351a953eba5b6ff1ff123aadb891b4dab085b292118f039d6ac" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.1" graphs: dependency: transitive description: @@ -890,10 +941,10 @@ packages: dependency: transitive description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -978,10 +1029,10 @@ packages: dependency: "direct main" description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" io: dependency: transitive description: @@ -1030,38 +1081,62 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: name: lints - sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "4.0.0" location: - dependency: transitive + dependency: "direct main" description: name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.0" location_web: dependency: transitive description: name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + sha256: "49dda13d415c4603c5775a33fb22f575e0aa3f0ec2916644ddcd722db31ee884" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "5.0.2" logging: dependency: transitive description: @@ -1074,34 +1149,34 @@ packages: dependency: transitive description: name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "3.1.3" matcher: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -1154,26 +1229,26 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "8.0.2" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.1" path: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_drawing: dependency: transitive description: @@ -1266,10 +1341,10 @@ packages: dependency: "direct main" description: name: pluto_grid - sha256: e77c34a33dd9d74abbe20ba1df96474dded150dd042c7f7495be1bc2c26bd37f + sha256: "1d4cd9d2652742b556aa9b3230cc64672a3f63c34a9acc80fef794ab36ad903b" url: "https://pub.dev" source: hosted - version: "7.0.2" + version: "8.0.0" pointer_interceptor: dependency: transitive description: @@ -1314,18 +1389,18 @@ packages: dependency: transitive description: name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 + sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a url: "https://pub.dev" source: hosted - version: "0.8.1" + version: "2.1.1" reactive_forms: dependency: "direct main" description: name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "17.0.1" recase: dependency: "direct main" description: @@ -1427,6 +1502,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqlite3: dependency: transitive description: @@ -1447,10 +1530,10 @@ packages: dependency: transitive description: name: sqlparser - sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" + sha256: ade9a67fd70d0369329ed3373208de7ebd8662470e8c396fc8d0d60f9acdfc9f url: "https://pub.dev" source: hosted - version: "0.34.1" + version: "0.36.0" stack_trace: dependency: transitive description: @@ -1486,10 +1569,9 @@ packages: survey_form: dependency: "direct main" description: - name: survey_form - sha256: "52532fb3fae06883828d22f870045587bf7122f67cb4de236c82ad4d6de1d7d7" - url: "https://pub.dev" - source: hosted + path: "../survey_form" + relative: true + source: path version: "0.0.1-dev.2" synchronized: dependency: transitive @@ -1511,26 +1593,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" timing: dependency: transitive description: @@ -1623,10 +1705,10 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.3.3" url_launcher_windows: dependency: transitive description: @@ -1639,10 +1721,10 @@ packages: dependency: "direct main" description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.5.1" vector_graphics: dependency: transitive description: @@ -1687,10 +1769,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1703,10 +1785,10 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.5.1" web_socket_channel: dependency: transitive description: @@ -1756,5 +1838,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.4.0 <3.9.0" + flutter: ">=3.22.0" diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index 846d0b8a6..429f06d28 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -11,7 +11,11 @@ environment: dependencies: flutter: sdk: flutter - digit_ui_components: ^0.0.2-dev + digit_ui_components: + git: + url: https://github.com/egovernments/DIGIT-UI-LIBRARIES + ref: version_update + path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 reactive_forms: ^17.0.0 @@ -29,12 +33,11 @@ dependencies: recase: ^4.1.0 pluto_grid: ^8.0.0 digit_scanner: ^1.0.0+1 - digit_components: ^1.0.1+1 fluttertoast: ^8.1.2 overlay_builder: ^1.1.0 sqlite3_flutter_libs: ^0.5.10 path_provider: ^2.0.11 - path: ^1.8.2 + path: ^1.9.0 drift_db_viewer: ^2.0.0 package_info_plus: ^8.0.0 digit_showcase: ^1.0.0 diff --git a/packages/survey_form/example/lib/main.dart b/packages/survey_form/example/lib/main.dart index fd1f0977e..e07157450 100644 --- a/packages/survey_form/example/lib/main.dart +++ b/packages/survey_form/example/lib/main.dart @@ -1,6 +1,6 @@ import 'dart:convert'; -import 'package:digit_components/widgets/digit_elevated_button.dart'; +import 'package:digit_ui_components/digit_components.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:survey_form/blocs/app_localization.dart'; @@ -76,10 +76,11 @@ class _MyHomePageState extends State { title: Text(widget.title), ), body: Center( - child: Container( + child: SizedBox( width: 300, - child: DigitElevatedButton( - child: const Text("Acknowledgement Page"), + child: DigitButton( + label: "Acknowledgement Page", + size: DigitButtonSize.large, onPressed: () { Navigator.of(context).push(MaterialPageRoute( builder: (BuildContext context) => @@ -90,6 +91,7 @@ class _MyHomePageState extends State { languages), ))); }, + type: DigitButtonType.primary, ), ), ), diff --git a/packages/survey_form/example/pubspec.lock b/packages/survey_form/example/pubspec.lock index cb9c72d91..d7ebcdb21 100644 --- a/packages/survey_form/example/pubspec.lock +++ b/packages/survey_form/example/pubspec.lock @@ -45,10 +45,10 @@ packages: dependency: transitive description: name: auto_route - sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 + sha256: "8de4a280ce7861ef24a6baa14c2b02b77a8c31b4a4c4f12d7b608678cc657c7f" url: "https://pub.dev" source: hosted - version: "7.9.2" + version: "8.1.4" bloc: dependency: transitive description: @@ -292,11 +292,12 @@ packages: digit_ui_components: dependency: "direct main" description: - name: digit_ui_components - sha256: d2f065d59090616650a49e838889f12e1f9635c4f4f74a6b4cc25411a5e87a04 - url: "https://pub.dev" - source: hosted - version: "0.0.2-dev.2" + path: "flutter/digit-ui-components/digit_components" + ref: version_update + resolved-ref: "68e80b1a2f13e166698274cae5b1ca6a850c476b" + url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" + source: git + version: "0.0.1+7" dio: dependency: transitive description: @@ -793,26 +794,26 @@ packages: dependency: transitive description: name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.0" location_web: dependency: transitive description: name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + sha256: "15ad7b4c8a9f55abee513373755e093a40c04d7e24fc1b4f89676fe99523d034" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "5.0.1" logging: dependency: transitive description: diff --git a/packages/survey_form/example/pubspec.yaml b/packages/survey_form/example/pubspec.yaml index eb3dc683a..cf5d2e74b 100644 --- a/packages/survey_form/example/pubspec.yaml +++ b/packages/survey_form/example/pubspec.yaml @@ -28,7 +28,11 @@ environment: # the latest version available on pub.dev. To see which dependencies have newer # versions available, run `flutter pub outdated`. dependencies: - digit_ui_components: ^0.0.2-dev + digit_ui_components: + git: + url: https://github.com/egovernments/DIGIT-UI-LIBRARIES + ref: version_update + path: ./flutter/digit-ui-components/digit_components survey_form: path: ../ diff --git a/packages/survey_form/lib/data/repositories/remote/service.dart b/packages/survey_form/lib/data/repositories/remote/service.dart index 7bf770d97..4a2eb2db2 100644 --- a/packages/survey_form/lib/data/repositories/remote/service.dart +++ b/packages/survey_form/lib/data/repositories/remote/service.dart @@ -2,12 +2,15 @@ import 'package:digit_data_model/data_model.dart'; -class ServiceRemoteRepository extends RemoteRepository { +import '../../../models/entities/service.dart'; + +class ServiceRemoteRepository + extends RemoteRepository { ServiceRemoteRepository( - super.dio, { - required super.actionMap, - super.entityName = 'Service', - }); + super.dio, { + required super.actionMap, + super.entityName = 'Service', + }); @override DataModelType get type => DataModelType.service; diff --git a/packages/survey_form/lib/data/repositories/remote/service_attributes.dart b/packages/survey_form/lib/data/repositories/remote/service_attributes.dart index 0d2b344bb..6df1f26a5 100644 --- a/packages/survey_form/lib/data/repositories/remote/service_attributes.dart +++ b/packages/survey_form/lib/data/repositories/remote/service_attributes.dart @@ -2,12 +2,15 @@ import 'package:digit_data_model/data_model.dart'; -class ServiceAttributesRemoteRepository extends RemoteRepository { +import '../../../models/entities/service_attributes.dart'; + +class ServiceAttributesRemoteRepository extends RemoteRepository< + ServiceAttributesModel, ServiceAttributesSearchModel> { ServiceAttributesRemoteRepository( - super.dio, { - required super.actionMap, - super.entityName = 'ServiceAttributes', - }); + super.dio, { + required super.actionMap, + super.entityName = 'ServiceAttributes', + }); @override DataModelType get type => DataModelType.serviceAttributes; diff --git a/packages/survey_form/lib/data/repositories/remote/service_definition.dart b/packages/survey_form/lib/data/repositories/remote/service_definition.dart index 10129cd34..04aded005 100644 --- a/packages/survey_form/lib/data/repositories/remote/service_definition.dart +++ b/packages/survey_form/lib/data/repositories/remote/service_definition.dart @@ -2,12 +2,15 @@ import 'package:digit_data_model/data_model.dart'; -class ServiceDefinitionRemoteRepository extends RemoteRepository { +import '../../../models/entities/service_definition.dart'; + +class ServiceDefinitionRemoteRepository extends RemoteRepository< + ServiceDefinitionModel, ServiceDefinitionSearchModel> { ServiceDefinitionRemoteRepository( - super.dio, { - required super.actionMap, - super.entityName = 'ServiceDefinition', - }); + super.dio, { + required super.actionMap, + super.entityName = 'ServiceDefinition', + }); @override DataModelType get type => DataModelType.serviceDefinition; diff --git a/packages/survey_form/lib/pages/acknowledgement.dart b/packages/survey_form/lib/pages/acknowledgement.dart index 6593d4dad..27b053a49 100644 --- a/packages/survey_form/lib/pages/acknowledgement.dart +++ b/packages/survey_form/lib/pages/acknowledgement.dart @@ -23,10 +23,12 @@ class SurveyFormAcknowledgementPage extends LocalizedStatefulWidget { }); @override - State createState() => AcknowledgementPageState(); + State createState() => + AcknowledgementPageState(); } -class AcknowledgementPageState extends LocalizedState { +class AcknowledgementPageState + extends LocalizedState { @override Widget build(BuildContext context) { return Scaffold( @@ -36,15 +38,15 @@ class AcknowledgementPageState extends LocalizedState context.router.popUntilRoot(), - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, ) ], ), @@ -54,23 +56,24 @@ class AcknowledgementPageState extends LocalizedState { return Column( children: values .map((e) => Padding( - padding: const EdgeInsets.only( - left: spacer4, - right: spacer4, - top: spacer4 - ), - child: MenuCard( + padding: const EdgeInsets.only( + left: spacer4, right: spacer4, top: spacer4), + child: MenuCard( icon: Icons.article, heading: localizations.translate('${e.code}'), onTap: () { @@ -92,18 +88,18 @@ class SurveyFormPageState extends State { .add(ServiceDefinitionSelectionEvent( serviceDefinition: e, )); - + showDialog( context: context, - builder: (ctx)=>ActionCard( - onOutsideTap: (){ + builder: (ctx) => DigitActionCard( + onOutsideTap: () { Navigator.of( context, rootNavigator: true, ).pop(); }, actions: [ - Button( + DigitButton( label: localizations.translate(i18 .surveyForm .surveyFormCreateActionLabel), @@ -116,11 +112,11 @@ class SurveyFormPageState extends State { rootNavigator: true, ).pop(); }, - type: ButtonType.secondary, - size: ButtonSize.large, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, prefixIcon: Icons.edit_calendar, ), - Button( + DigitButton( label: localizations.translate(i18 .surveyForm .surveyFormViewActionLabel), @@ -141,8 +137,8 @@ class SurveyFormPageState extends State { rootNavigator: true, ).pop(); }, - type: ButtonType.secondary, - size: ButtonSize.large, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, prefixIcon: Icons.visibility, ) ], @@ -150,7 +146,7 @@ class SurveyFormPageState extends State { ); }, ), - )) + )) .toList(), ); }, diff --git a/packages/survey_form/lib/pages/survey_form_boundary_view.dart b/packages/survey_form/lib/pages/survey_form_boundary_view.dart index dc0a3c797..b9cebde84 100644 --- a/packages/survey_form/lib/pages/survey_form_boundary_view.dart +++ b/packages/survey_form/lib/pages/survey_form_boundary_view.dart @@ -2,14 +2,14 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; -import 'package:survey_form/survey_form.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; +import 'package:survey_form/survey_form.dart'; import '../router/survey_form_router.gm.dart'; +import '../utils/i18_key_constants.dart' as i18; import '../widgets/back_navigation_help_header.dart'; import '../widgets/localized.dart'; -import '../utils/i18_key_constants.dart' as i18; @RoutePage() class SurveyFormBoundaryViewPage extends LocalizedStatefulWidget { @@ -41,12 +41,12 @@ class SurveyFormBoundaryViewPageState margin: const EdgeInsets.only(top: spacer2), padding: const EdgeInsets.all(spacer2), children: [ - Button( - type: ButtonType.primary, + DigitButton( + type: DigitButtonType.primary, label: localizations.translate( i18.common.coreCommonContinue, ), - size: ButtonSize.large, + size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, onPressed: () => context.router.push(SurveyFormViewRoute()), ), diff --git a/packages/survey_form/lib/pages/survey_form_preview.dart b/packages/survey_form/lib/pages/survey_form_preview.dart index 6f1061098..47833f577 100644 --- a/packages/survey_form/lib/pages/survey_form_preview.dart +++ b/packages/survey_form/lib/pages/survey_form_preview.dart @@ -3,15 +3,16 @@ import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/label_value_summary.dart'; import 'package:flutter/material.dart'; -import 'package:survey_form/survey_form.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:intl/intl.dart'; +import 'package:survey_form/survey_form.dart'; +import '../utils/constants.dart'; +import '../utils/i18_key_constants.dart' as i18; import '../widgets/back_navigation_help_header.dart'; import '../widgets/localized.dart'; -import '../utils/i18_key_constants.dart' as i18; -import '../utils/constants.dart'; import '../widgets/no_result_card.dart'; @RoutePage() @@ -47,12 +48,12 @@ class SurveyFormPreviewPageState extends LocalizedState { margin: const EdgeInsets.only(top: spacer2), padding: const EdgeInsets.all(spacer2), children: [ - Button( + DigitButton( mainAxisSize: MainAxisSize.max, label: localizations .translate(i18.common.corecommonclose), - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, onPressed: () { context.read().add( ServiceResetEvent(serviceList: value1), @@ -77,14 +78,17 @@ class SurveyFormPreviewPageState extends LocalizedState { ...serviceList .map((e) => e.serviceDefId != null ? Padding( - padding: const EdgeInsets.all(spacer2), - child: DigitCard( - cardType: CardType.primary, - children: [ + padding: + const EdgeInsets.all(spacer2), + child: DigitCard( + cardType: CardType.primary, + children: [ Align( - alignment: Alignment.centerLeft, + alignment: + Alignment.centerLeft, child: Text( - DateFormat(Constants.SurveyFormPreviewDateFormat) + DateFormat(Constants + .SurveyFormPreviewDateFormat) .format( DateFormat(Constants .defaultDateFormat) @@ -107,13 +111,16 @@ class SurveyFormPreviewPageState extends LocalizedState { ), ), ), - Button( - label: localizations.translate( + DigitButton( + label: localizations + .translate( i18.searchBeneficiary .iconLabel, ), - type: ButtonType.secondary, - size: ButtonSize.medium, + type: DigitButtonType + .secondary, + size: DigitButtonSize + .medium, onPressed: () { context .read() @@ -127,7 +134,7 @@ class SurveyFormPreviewPageState extends LocalizedState { ], ), ]), - ) + ) : const Offstage()) .toList(), ], @@ -152,64 +159,77 @@ class SurveyFormPreviewPageState extends LocalizedState { item2, ) { return DigitCard( - cardType: CardType.primary, - children: [ - Column( + cardType: CardType.primary, children: [ - Align( - alignment: Alignment.topLeft, - child: Padding( - padding: const EdgeInsets.all(spacer2), - child: Text( - localizations.translate( - item2?.code ?? '', + Column( + children: [ + Align( + alignment: Alignment.topLeft, + child: Padding( + padding: + const EdgeInsets.all(spacer2), + child: Text( + localizations.translate( + item2?.code ?? '', + ), + style: textTheme.headingXl, + ), ), - style: textTheme.headingXl, ), - ), - ), - ...(selectedService.attributes ?? []) - .where((a) => - a.value != - i18.surveyForm - .notSelectedKey && - a.value != '') - .map( - (e) => Padding( - padding: const EdgeInsets.all(spacer2), - child: Align( - alignment: AlignmentDirectional.topStart, - child: LabelValueList( - items: [ - LabelValuePair( - label: localizations.translate( - "${item2?.code ?? ''}.${e.attributeCode!}", + ...(selectedService.attributes ?? []) + .where((a) => + a.value != + i18.surveyForm + .notSelectedKey && + a.value != '') + .map( + (e) => Padding( + padding: + const EdgeInsets.all(spacer2), + child: Align( + alignment: AlignmentDirectional + .topStart, + child: + LabelValueSummary(items: [ + LabelValueItem( + label: + localizations.translate( + "${item2?.code ?? ''}.${e.attributeCode!}", + ), + value: e.dataType == + 'SingleValueList' + ? localizations + .translate( + 'CORE_COMMON_${e.value.toString().toUpperCase()}', + ) + : e.value ?? "", + isInline: false, + ), + if (e.additionalDetails != + '' && + e.additionalDetails != + null) ...[ + LabelValueItem( + label: localizations + .translate( + "${item2?.code ?? ''}.${e.attributeCode!}.ADDITIONAL_FIELD", ), - value: e.dataType == - 'SingleValueList' - ? localizations + value: localizations .translate( - 'CORE_COMMON_${e.value.toString().toUpperCase()}', - ) - : e.value??"", - isInline: false, - ), - if(e.additionalDetails!='' && e.additionalDetails!=null)...[ - LabelValuePair( - label: localizations.translate("${item2?.code ?? ''}.${e.attributeCode!}.ADDITIONAL_FIELD",), - value: localizations.translate(e.additionalDetails,), + e.additionalDetails, + ), isInline: false, - labelTextStyle: textTheme.bodyL, + labelTextStyle: + textTheme.bodyL, ) ] - ] + ]), + ), ), - ), - ), - ) - ].toList(), - ),] - ); + ) + ].toList(), + ), + ]); }, orElse: () => const Offstage(), ); diff --git a/packages/survey_form/lib/pages/survey_form_view.dart b/packages/survey_form/lib/pages/survey_form_view.dart index a186de49e..228f0c6c1 100644 --- a/packages/survey_form/lib/pages/survey_form_view.dart +++ b/packages/survey_form/lib/pages/survey_form_view.dart @@ -2,7 +2,6 @@ import 'dart:math'; import 'package:auto_route/auto_route.dart'; import 'package:digit_data_model/data_model.dart'; -import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/models/RadioButtonModel.dart'; import 'package:digit_ui_components/services/location_bloc.dart'; @@ -102,17 +101,17 @@ class SurveyFormViewPageState extends LocalizedState { widget.referralClientRefId != null)) const BackNavigationHelpHeaderWidget(), ]), - enableFixedButton: true, + enableFixedDigitButton: true, footer: DigitCard( cardType: CardType.primary, margin: const EdgeInsets.only(top: spacer2), padding: const EdgeInsets.all(spacer2), children: [ - Button( + DigitButton( label: localizations .translate(i18.common.coreCommonSubmit), - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, onPressed: () async { final router = context.router; @@ -160,198 +159,205 @@ class SurveyFormViewPageState extends LocalizedState { double? latitude = locationState.latitude; double? longitude = locationState.longitude; - showPopup( - context: context, - type: PopUpType.simple, - title: localizations.translate( - i18.surveyForm.surveyFormDialogLabel, - ), - description: localizations.translate( - i18.surveyForm.surveyFormDialogDescription, - ), - actions: [ - Button( - label: localizations.translate( - i18.surveyForm - .surveyFormDialogPrimaryAction, - ), - onPressed: () { - final referenceId = IdGen.i.identifier; - List - attributes = []; - for (int i = 0; - i < controller.length; - i++) { - final attribute = initialAttributes; - attributes.add(ServiceAttributesModel( - auditDetails: AuditDetails( - createdBy: SurveyFormSingleton() - .loggedInUserUuid, - createdTime: context - .millisecondsSinceEpoch(), - ), - attributeCode: - '${attribute?[i].code}', - dataType: attribute?[i].dataType, - clientReferenceId: - IdGen.i.identifier, - referenceId: isHealthFacilityWorker && - widget.referralClientRefId != - null - ? widget.referralClientRefId - : referenceId, - value: attribute?[i].dataType != - 'SingleValueList' - ? controller[i] - .text - .toString() - .trim() - .isNotEmpty - ? controller[i] - .text - .toString() - : '' - : visibleSurveyFormIndexes - .contains(i) - ? controller[i] - .text - .toString() - : i18.surveyForm - .notSelectedKey, - rowVersion: 1, - tenantId: attribute?[i].tenantId, - additionalDetails: isHealthFacilityWorker && - widget.referralClientRefId != - null - ? null - : ((attribute?[i] - .values - ?.length == - 2 || - attribute?[i] - .values - ?.length == - 3) && - controller[i].text == - attribute?[i] - .values?[1] - .trim()) - ? additionalController[i] - .text - .toString() - .isEmpty - ? null - : additionalController[ - i] - .text - .toString() - : null, - additionalFields: - ServiceAttributesAdditionalFields( - version: 1, - fields: [ - AdditionalField( - 'latitude', - latitude, - ), - AdditionalField( - 'longitude', - longitude, - ), - ], - ), - )); - } + showCustomPopup( + context: context, + builder: (popUpContext) => Popup( + type: PopUpType.simple, + title: localizations.translate( + i18.surveyForm.surveyFormDialogLabel, + ), + description: localizations.translate( + i18.surveyForm.surveyFormDialogDescription, + ), + actions: [ + DigitButton( + label: localizations.translate( + i18.surveyForm + .surveyFormDialogPrimaryAction, + ), + onPressed: () { + final referenceId = + IdGen.i.identifier; + List + attributes = []; + for (int i = 0; + i < controller.length; + i++) { + final attribute = initialAttributes; + attributes + .add(ServiceAttributesModel( + auditDetails: AuditDetails( + createdBy: SurveyFormSingleton() + .loggedInUserUuid, + createdTime: context + .millisecondsSinceEpoch(), + ), + attributeCode: + '${attribute?[i].code}', + dataType: attribute?[i].dataType, + clientReferenceId: + IdGen.i.identifier, + referenceId: isHealthFacilityWorker && + widget.referralClientRefId != + null + ? widget.referralClientRefId + : referenceId, + value: attribute?[i].dataType != + 'SingleValueList' + ? controller[i] + .text + .toString() + .trim() + .isNotEmpty + ? controller[i] + .text + .toString() + : '' + : visibleSurveyFormIndexes + .contains(i) + ? controller[i] + .text + .toString() + : i18.surveyForm + .notSelectedKey, + rowVersion: 1, + tenantId: attribute?[i].tenantId, + additionalDetails: isHealthFacilityWorker && + widget.referralClientRefId != + null + ? null + : ((attribute?[i] + .values + ?.length == + 2 || + attribute?[i] + .values + ?.length == + 3) && + controller[i].text == + attribute?[i] + .values?[1] + .trim()) + ? additionalController[i] + .text + .toString() + .isEmpty + ? null + : additionalController[ + i] + .text + .toString() + : null, + additionalFields: + ServiceAttributesAdditionalFields( + version: 1, + fields: [ + AdditionalField( + 'latitude', + latitude, + ), + AdditionalField( + 'longitude', + longitude, + ), + ], + ), + )); + } - context.read().add( - ServiceCreateEvent( - serviceModel: ServiceModel( - createdAt: DigitDateUtils - .getDateFromTimestamp( - DateTime.now() - .toLocal() - .millisecondsSinceEpoch, - dateFormat: Constants - .SurveyFormViewDateFormat, - ), - tenantId: value - .selectedServiceDefinition! - .tenantId, - clientId: isHealthFacilityWorker && - widget.referralClientRefId != - null - ? widget - .referralClientRefId - .toString() - : referenceId, - serviceDefId: value - .selectedServiceDefinition - ?.id, - attributes: attributes, - rowVersion: 1, - accountId: - SurveyFormSingleton() - .projectId, - auditDetails: AuditDetails( - createdBy: - SurveyFormSingleton() - .loggedInUserUuid, - createdTime: DateTime - .now() - .millisecondsSinceEpoch, - ), - clientAuditDetails: - ClientAuditDetails( - createdBy: + context.read().add( + ServiceCreateEvent( + serviceModel: ServiceModel( + createdAt: DigitDateUtils + .getDateFromTimestamp( + DateTime.now() + .toLocal() + .millisecondsSinceEpoch, + dateFormat: Constants + .SurveyFormViewDateFormat, + ), + tenantId: value + .selectedServiceDefinition! + .tenantId, + clientId: isHealthFacilityWorker && + widget.referralClientRefId != + null + ? widget + .referralClientRefId + .toString() + : referenceId, + serviceDefId: value + .selectedServiceDefinition + ?.id, + attributes: attributes, + rowVersion: 1, + accountId: SurveyFormSingleton() - .loggedInUserUuid, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: - SurveyFormSingleton() - .loggedInUserUuid, - lastModifiedTime: context - .millisecondsSinceEpoch(), - ), - additionalFields: - ServiceAdditionalFields( - version: 1, - fields: [ - AdditionalField( - 'lng', longitude), - AdditionalField( - 'lat', latitude), - AdditionalField( - 'boundaryCode', - SurveyFormSingleton() - .boundary - ?.code) - ])), - ), - ); - Navigator.of( - context, - rootNavigator: true, - ).pop(true); - router.push( - SurveyFormAcknowledgementRoute()); - }, - type: ButtonType.primary, - size: ButtonSize.large), - Button( - label: localizations.translate( - i18.surveyForm - .surveyFormDialogSecondaryAction, - ), - onPressed: () { - Navigator.of( - context, - rootNavigator: true, - ).pop(false); - }, - type: ButtonType.secondary, - size: ButtonSize.large) - ]); + .projectId, + auditDetails: + AuditDetails( + createdBy: + SurveyFormSingleton() + .loggedInUserUuid, + createdTime: DateTime + .now() + .millisecondsSinceEpoch, + ), + clientAuditDetails: + ClientAuditDetails( + createdBy: + SurveyFormSingleton() + .loggedInUserUuid, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: + SurveyFormSingleton() + .loggedInUserUuid, + lastModifiedTime: context + .millisecondsSinceEpoch(), + ), + additionalFields: + ServiceAdditionalFields( + version: 1, + fields: [ + AdditionalField( + 'lng', + longitude), + AdditionalField( + 'lat', + latitude), + AdditionalField( + 'boundaryCode', + SurveyFormSingleton() + .boundary + ?.code) + ])), + ), + ); + Navigator.of( + context, + rootNavigator: true, + ).pop(true); + router.push( + SurveyFormAcknowledgementRoute()); + }, + type: DigitButtonType.primary, + size: DigitButtonSize.large), + DigitButton( + label: localizations.translate( + i18.surveyForm + .surveyFormDialogSecondaryAction, + ), + onPressed: () { + Navigator.of( + context, + rootNavigator: true, + ).pop(false); + }, + type: DigitButtonType.secondary, + size: DigitButtonSize.large) + ]), + ); }, ), ]), @@ -1126,7 +1132,7 @@ class SurveyFormViewPageState extends LocalizedState { i18.surveyForm.surveyFormBackDialogDescription, ), actions: [ - Button( + DigitButton( label: localizations .translate(i18.surveyForm.surveyFormBackDialogPrimaryAction), onPressed: () { @@ -1135,9 +1141,9 @@ class SurveyFormViewPageState extends LocalizedState { rootNavigator: true, ).pop(true); }, - type: ButtonType.primary, - size: ButtonSize.large), - Button( + type: DigitButtonType.primary, + size: DigitButtonSize.large), + DigitButton( label: localizations.translate( i18.surveyForm.surveyFormBackDialogSecondaryAction), onPressed: () { @@ -1146,8 +1152,8 @@ class SurveyFormViewPageState extends LocalizedState { rootNavigator: true, ).pop(false); }, - type: ButtonType.secondary, - size: ButtonSize.large) + type: DigitButtonType.secondary, + size: DigitButtonSize.large) ], ), ); diff --git a/packages/survey_form/lib/pages/survey_form_wrapper.dart b/packages/survey_form/lib/pages/survey_form_wrapper.dart index 53d97087f..a69995919 100644 --- a/packages/survey_form/lib/pages/survey_form_wrapper.dart +++ b/packages/survey_form/lib/pages/survey_form_wrapper.dart @@ -1,10 +1,10 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; -import 'package:survey_form/utils/extensions/context_utility.dart'; +import 'package:digit_ui_components/services/location_bloc.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:survey_form/survey_form.dart'; import 'package:location/location.dart'; +import 'package:survey_form/survey_form.dart'; +import 'package:survey_form/utils/extensions/context_utility.dart'; @RoutePage() class SurveyFormWrapperPage extends StatelessWidget { @@ -17,10 +17,11 @@ class SurveyFormWrapperPage extends StatelessWidget { @override Widget build(BuildContext context) { - final serviceDefinition = context - .repository(context); + final serviceDefinition = context.repository(context); - final service = context.repository(context); + final service = + context.repository(context); return MultiBlocProvider( providers: [ @@ -37,11 +38,7 @@ class SurveyFormWrapperPage extends StatelessWidget { serviceDataRepository: service, ), ), - BlocProvider( - create: (_)=>LocationBloc( - location: Location() - ) - ) + BlocProvider(create: (_) => LocationBloc(location: Location())) ], child: const AutoRouter(), ); diff --git a/packages/survey_form/lib/widgets/action_card.dart b/packages/survey_form/lib/widgets/action_card.dart deleted file mode 100644 index e231a1761..000000000 --- a/packages/survey_form/lib/widgets/action_card.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:digit_ui_components/enum/app_enums.dart'; -import 'package:digit_ui_components/theme/spacers.dart'; -import 'package:digit_ui_components/widgets/atoms/digit_button.dart'; -import 'package:flutter/material.dart'; - -class ActionCard extends StatelessWidget { - final List items; - - const ActionCard({super.key, required this.items}); - - @override - Widget build(BuildContext context) { - final theme = Theme.of(context); - - return Column( - mainAxisSize: MainAxisSize.min, - children: items - .map( - (e) => Padding( - padding: const EdgeInsets.all(spacer2 / 2), - child: Button( - type: ButtonType.secondary, - size: ButtonSize.large, - prefixIcon: e.icon, - label: e.label, - onPressed: ()=>e.action, - ), - ), - ) - .toList(), - ); - } -} - -class ActionCardModel { - final IconData icon; - final String label; - final VoidCallback? action; - - const ActionCardModel({ - required this.icon, - required this.label, - required this.action, - }); -} diff --git a/packages/survey_form/lib/widgets/back_navigation_help_header.dart b/packages/survey_form/lib/widgets/back_navigation_help_header.dart index 14881117e..bec30e349 100644 --- a/packages/survey_form/lib/widgets/back_navigation_help_header.dart +++ b/packages/survey_form/lib/widgets/back_navigation_help_header.dart @@ -1,7 +1,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/widgets/atoms/digit_back_button.dart'; -import 'package:digit_ui_components/widgets/atoms/digit_button.dart'; import 'package:flutter/material.dart'; import '../../utils/i18_key_constants.dart' as i18; @@ -39,10 +38,12 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { alignment: Alignment.topLeft, child: Padding( padding: const EdgeInsets.all(spacer2), - child: BackNavigationButton( - handleBack: (){ + child: DigitBackButton( + label: SurveyFormLocalization.of(context) + .translate(i18.common.coreCommonBack), + handleBack: () { context.router.maybePop(); - handleBack!=null?handleBack!():null; + handleBack != null ? handleBack!() : null; }, ), ), diff --git a/packages/survey_form/pubspec.lock b/packages/survey_form/pubspec.lock index 678c3b8fc..79ce9b65c 100644 --- a/packages/survey_form/pubspec.lock +++ b/packages/survey_form/pubspec.lock @@ -69,18 +69,18 @@ packages: dependency: "direct main" description: name: auto_route - sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 + sha256: a9001a90539ca3effc168f7e1029a5885c7326b9032c09ac895e303c1d137704 url: "https://pub.dev" source: hosted - version: "7.9.2" + version: "8.3.0" auto_route_generator: dependency: "direct dev" description: name: auto_route_generator - sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" + sha256: ba28133d3a3bf0a66772bcc98dade5843753cd9f1a8fb4802b842895515b67d3 url: "https://pub.dev" source: hosted - version: "7.3.2" + version: "8.0.0" bloc: dependency: transitive description: @@ -353,11 +353,12 @@ packages: digit_ui_components: dependency: "direct main" description: - name: digit_ui_components - sha256: d2f065d59090616650a49e838889f12e1f9635c4f4f74a6b4cc25411a5e87a04 - url: "https://pub.dev" - source: hosted - version: "0.0.2-dev.2" + path: "flutter/digit-ui-components/digit_components" + ref: version_update + resolved-ref: "68e80b1a2f13e166698274cae5b1ca6a850c476b" + url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" + source: git + version: "0.0.1+7" dio: dependency: "direct main" description: @@ -910,26 +911,26 @@ packages: dependency: "direct main" description: name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.0" location_web: dependency: transitive description: name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + sha256: "49dda13d415c4603c5775a33fb22f575e0aa3f0ec2916644ddcd722db31ee884" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "5.0.2" logging: dependency: transitive description: @@ -1560,5 +1561,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.3.0 <4.0.0" - flutter: ">=3.19.0" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.22.0" diff --git a/packages/survey_form/pubspec.yaml b/packages/survey_form/pubspec.yaml index e32e8c2a1..36f5a7414 100644 --- a/packages/survey_form/pubspec.yaml +++ b/packages/survey_form/pubspec.yaml @@ -11,7 +11,11 @@ environment: dependencies: flutter: sdk: flutter - digit_ui_components: ^0.0.2-dev + digit_ui_components: + git: + url: https://github.com/egovernments/DIGIT-UI-LIBRARIES + ref: version_update + path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 reactive_forms: ^17.0.0 From 5597aea2a74076eaeb8f2b619543a1090a5a941f Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Wed, 11 Dec 2024 12:26:37 +0530 Subject: [PATCH 182/241] version upgrade digit_ui_components fixes related to components --- .../closed_household_acknowledgement.dart | 10 +- .../lib/pages/closed_household_details.dart | 11 +- .../lib/pages/closed_household_summary.dart | 150 +++++++++--------- .../lib/pages/closed_household_wrapper.dart | 4 +- 4 files changed, 85 insertions(+), 90 deletions(-) diff --git a/packages/closed_household/lib/pages/closed_household_acknowledgement.dart b/packages/closed_household/lib/pages/closed_household_acknowledgement.dart index b4dd01487..8aba0f1de 100644 --- a/packages/closed_household/lib/pages/closed_household_acknowledgement.dart +++ b/packages/closed_household/lib/pages/closed_household_acknowledgement.dart @@ -9,7 +9,6 @@ import '../../../widgets/localized.dart'; @RoutePage() class ClosedHouseholdAcknowledgementPage extends LocalizedStatefulWidget { - const ClosedHouseholdAcknowledgementPage({ super.key, super.appLocalizations, @@ -36,7 +35,7 @@ class _ClosedHouseholdAcknowledgementPageState i18.acknowledgementSuccess.acknowledgementDescriptionText, ), actions: [ - Button( + DigitButton( label: localizations .translate(i18.acknowledgementSuccess.actionLabelText), onPressed: () { @@ -44,12 +43,11 @@ class _ClosedHouseholdAcknowledgementPageState // Pop twice to navigate back to the previous screen parent.popUntilRoot(); }, - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, ) - ] - ), + ]), ), ); } diff --git a/packages/closed_household/lib/pages/closed_household_details.dart b/packages/closed_household/lib/pages/closed_household_details.dart index 72f58f2e9..bb96c0795 100644 --- a/packages/closed_household/lib/pages/closed_household_details.dart +++ b/packages/closed_household/lib/pages/closed_household_details.dart @@ -1,7 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:closed_household/closed_household.dart'; -import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/services/location_bloc.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/utils/component_utils.dart'; import 'package:digit_ui_components/widgets/atoms/text_block.dart'; @@ -12,6 +12,7 @@ import 'package:reactive_forms/reactive_forms.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../router/closed_household_router.gm.dart'; +import '../utils/utils.dart'; import '../widgets/back_navigation_help_header.dart'; import '../widgets/localized.dart'; @@ -86,7 +87,7 @@ class ClosedHouseholdDetailsPageState child: BlocBuilder( builder: (context, state) { return ScrollableContent( - enableFixedButton: true, + enableFixedDigitButton: true, header: const Column( children: [ BackNavigationHelpHeaderWidget( @@ -99,9 +100,9 @@ class ClosedHouseholdDetailsPageState children: [ BlocBuilder( builder: (context, locationState) { - return Button( - size: ButtonSize.large, - type: ButtonType.primary, + return DigitButton( + size: DigitButtonSize.large, + type: DigitButtonType.primary, mainAxisSize: MainAxisSize.max, onPressed: () { if (!form.valid && diff --git a/packages/closed_household/lib/pages/closed_household_summary.dart b/packages/closed_household/lib/pages/closed_household_summary.dart index 6bdc13a3e..bfcdf5dbf 100644 --- a/packages/closed_household/lib/pages/closed_household_summary.dart +++ b/packages/closed_household/lib/pages/closed_household_summary.dart @@ -8,6 +8,7 @@ import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/utils/date_utils.dart'; import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/label_value_summary.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -51,87 +52,84 @@ class ClosedHouseholdSummaryPageState builder: (context, householdState) { return Scaffold( body: ScrollableContent( - enableFixedButton: true, + enableFixedDigitButton: true, header: const BackNavigationHelpHeaderWidget( showHelp: false, showcaseButton: ShowcaseButton(), ), footer: DigitCard( - padding: - EdgeInsets.all(theme.spacerTheme.spacer2), - children: [ - BlocBuilder( - builder: (context, scannerState) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - Button( - size: ButtonSize.large, - type: ButtonType.secondary, - mainAxisSize: MainAxisSize.max, - onPressed: () { - Navigator.of(context).push( - // [TODO: Add the route to auto_route] - MaterialPageRoute( - builder: (context) => const DigitScannerPage( - quantity: 1, - isGS1code: false, - singleValue: true, - ), - settings: - const RouteSettings(name: '/qr-scanner'), - ), - ); - }, - prefixIcon: Icons.qr_code, - label: localizations.translate(i18 - .closeHousehold.closeHouseholdVoucherScannerLabel), - ), - SizedBox( - height: theme.spacerTheme.spacer3, - ), - Button( - size: ButtonSize.large, - type: ButtonType.primary, - mainAxisSize: MainAxisSize.max, - onPressed: () { - context.read().add( - ClosedHouseholdEvent.handleSubmit( - context: context, - householdHeadName: - householdState.householdHeadName, - locationAccuracy: - householdState.locationAccuracy, - longitude: householdState.longitude, - latitude: householdState.latitude, - tag: scannerState.qrCodes.isNotEmpty - ? scannerState.qrCodes.first - : null)); + padding: EdgeInsets.all(theme.spacerTheme.spacer2), + children: [ + BlocBuilder( + builder: (context, scannerState) { + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + DigitButton( + size: DigitButtonSize.large, + type: DigitButtonType.secondary, + mainAxisSize: MainAxisSize.max, + onPressed: () { + Navigator.of(context).push( + // [TODO: Add the route to auto_route] + MaterialPageRoute( + builder: (context) => const DigitScannerPage( + quantity: 1, + isGS1code: false, + singleValue: true, + ), + settings: + const RouteSettings(name: '/qr-scanner'), + ), + ); + }, + prefixIcon: Icons.qr_code, + label: localizations.translate(i18.closeHousehold + .closeHouseholdVoucherScannerLabel), + ), + SizedBox( + height: theme.spacerTheme.spacer3, + ), + DigitButton( + size: DigitButtonSize.large, + type: DigitButtonType.primary, + mainAxisSize: MainAxisSize.max, + onPressed: () { + context.read().add( + ClosedHouseholdEvent.handleSubmit( + context: context, + householdHeadName: + householdState.householdHeadName, + locationAccuracy: + householdState.locationAccuracy, + longitude: householdState.longitude, + latitude: householdState.latitude, + tag: scannerState.qrCodes.isNotEmpty + ? scannerState.qrCodes.first + : null)); - ///clear the scanner - context.router - .push(ClosedHouseholdAcknowledgementRoute()); - }, - label: localizations + ///clear the scanner + context.router + .push(ClosedHouseholdAcknowledgementRoute()); + }, + label: localizations .translate(i18.common.coreCommonSubmit), - ), - ], - ); - }),] - ), + ), + ], + ); + }), + ]), slivers: [ SliverToBoxAdapter( child: Column( children: [ - DigitCard( - children: [ - LabelValueList( - labelFlex: theme.spacerTheme.spacer2.toInt(), + DigitCard(children: [ + LabelValueSummary( heading: localizations.translate( i18.closeHousehold.closeHouseholdSummaryLabel), withDivider: false, items: [ - LabelValuePair( + LabelValueItem( label: localizations.translate( i18.closeHousehold.closeHouseholdDate), value: (DigitDateUtils.getDateFromTimestamp( @@ -139,7 +137,7 @@ class ClosedHouseholdSummaryPageState dateFormat: 'dd MMM yyyy')) .toString(), ), - LabelValuePair( + LabelValueItem( label: localizations.translate( i18.closeHousehold.closeHouseholdVillageName), value: ClosedHouseholdSingleton() @@ -147,40 +145,38 @@ class ClosedHouseholdSummaryPageState .name .toString(), ), - LabelValuePair( + LabelValueItem( label: localizations.translate( i18.closeHousehold.closeHouseholdHeadName), value: householdState.householdHeadName ?? localizations .translate(i18.common.coreCommonNA), ), - LabelValuePair( + LabelValueItem( label: localizations.translate(i18 .closeHousehold.closeHouseholdGpsAccuracyLabel), value: '${householdState.locationAccuracy.toStringAsFixed(2)} ${localizations.translate(i18.common.coreCommonMeters)}', ), ]), - ] - ), + ]), BlocBuilder( builder: (context, state) { if (state.qrCodes.isNotEmpty) { - return DigitCard( - children: [LabelValueList( - labelFlex: theme.spacerTheme.spacer2.toInt(), + return DigitCard(children: [ + LabelValueSummary( heading: localizations.translate(i18.closeHousehold .closeHouseholdVoucherSummaryLabel), withDivider: false, items: [ - LabelValuePair( + LabelValueItem( label: localizations.translate(i18.closeHousehold .closeHouseholdVoucherCodeLabel), value: state.qrCodes.first, ), ], - ),] - ); + ), + ]); } else { return const SizedBox(); } diff --git a/packages/closed_household/lib/pages/closed_household_wrapper.dart b/packages/closed_household/lib/pages/closed_household_wrapper.dart index 3f1e994e4..f202fa42d 100644 --- a/packages/closed_household/lib/pages/closed_household_wrapper.dart +++ b/packages/closed_household/lib/pages/closed_household_wrapper.dart @@ -3,10 +3,10 @@ import 'package:closed_household/blocs/closed_household.dart'; import 'package:closed_household/closed_household.dart'; import 'package:closed_household/utils/extensions/extensions.dart'; import 'package:digit_data_model/models/entities/individual.dart'; -import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; +import 'package:digit_ui_components/services/location_bloc.dart'; import 'package:flutter/material.dart'; -import 'package:location/location.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:location/location.dart'; import 'package:registration_delivery/models/entities/household.dart'; import 'package:registration_delivery/models/entities/household_member.dart'; import 'package:registration_delivery/models/entities/project_beneficiary.dart'; From dedfd6e381c7f5b08f9f525825f8642dcf716f52 Mon Sep 17 00:00:00 2001 From: rachana-egov Date: Wed, 11 Dec 2024 12:31:28 +0530 Subject: [PATCH 183/241] updated referral with latest digit_ui_components --- .../lib/pages/acknowledgement.dart | 18 +- .../reason_checklist_preview.dart | 12 +- .../record_facility_details.dart | 8 +- .../record_reason_checklist.dart | 23 +- .../record_referral_details.dart | 17 +- .../search_referral_reconciliations.dart | 12 +- .../lib/widgets/view_referral_card.dart | 6 +- packages/referral_reconciliation/pubspec.lock | 258 ++++++++++-------- packages/referral_reconciliation/pubspec.yaml | 18 +- packages/survey_form/example/pubspec.lock | 67 ++--- packages/survey_form/pubspec.lock | 65 +---- packages/survey_form/pubspec.yaml | 4 +- 12 files changed, 244 insertions(+), 264 deletions(-) diff --git a/packages/referral_reconciliation/lib/pages/acknowledgement.dart b/packages/referral_reconciliation/lib/pages/acknowledgement.dart index c9a5ba5ab..52ecaf0c1 100644 --- a/packages/referral_reconciliation/lib/pages/acknowledgement.dart +++ b/packages/referral_reconciliation/lib/pages/acknowledgement.dart @@ -44,14 +44,14 @@ class _AcknowledgementPageState i18.acknowledgementSuccess.acknowledgementDescriptionText, ), actions: [ - Button( + DigitButton( label: localizations .translate(i18.acknowledgementSuccess.actionLabelText), onPressed: () { context.router.popUntilRoot(); }, - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, ) ]), @@ -62,9 +62,9 @@ class _AcknowledgementPageState height: 150, child: Column( children: [ - Button( - size: ButtonSize.large, - type: ButtonType.primary, + DigitButton( + size: DigitButtonSize.large, + type: DigitButtonType.primary, mainAxisSize: MainAxisSize.max, label: localizations .translate(i18.acknowledgementSuccess.goToHome), @@ -75,9 +75,9 @@ class _AcknowledgementPageState const SizedBox( height: 12, ), - Button( - size: ButtonSize.large, - type: ButtonType.secondary, + DigitButton( + size: DigitButtonSize.large, + type: DigitButtonType.secondary, mainAxisSize: MainAxisSize.max, onPressed: () { context.router.popUntilRoot(); diff --git a/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart b/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart index a6b8a5aaf..4b494ecc4 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart @@ -48,8 +48,8 @@ class _ReferralReasonChecklistPreviewPageState cardType: CardType.primary, padding: EdgeInsets.all(theme.spacerTheme.spacer2), children: [ - Button( - size: ButtonSize.large, + DigitButton( + size: DigitButtonSize.large, label: localizations .translate(i18.common.corecommonclose), mainAxisSize: MainAxisSize.max, @@ -63,7 +63,7 @@ class _ReferralReasonChecklistPreviewPageState SearchReferralReconciliationsRoute.name); context.router.maybePop(); }, - type: ButtonType.primary, + type: DigitButtonType.primary, ) ]) : const Offstage(); @@ -115,7 +115,7 @@ class _ReferralReasonChecklistPreviewPageState ), ), ), - Button( + DigitButton( label: localizations.translate( i18.referralReconciliation .iconLabel, @@ -129,8 +129,8 @@ class _ReferralReasonChecklistPreviewPageState ), ); }, - type: ButtonType.secondary, - size: ButtonSize.large, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, ), ], ), diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart index a0b7ee8d0..30c86eebd 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart @@ -88,7 +88,7 @@ class _ReferralFacilityPageState extends LocalizedState { return ReactiveFormBuilder( form: () => buildForm(recordState, projectFacilities), builder: (context, form, child) => ScrollableContent( - enableFixedButton: true, + enableFixedDigitButton: true, header: const Column(children: [ BackNavigationHelpHeaderWidget(), ]), @@ -102,8 +102,8 @@ class _ReferralFacilityPageState extends LocalizedState { ValueListenableBuilder( valueListenable: clickedStatus, builder: (context, bool isClicked, _) { - return Button( - size: ButtonSize.large, + return DigitButton( + size: DigitButtonSize.large, label: localizations.translate( i18.common.coreCommonNext, ), @@ -176,7 +176,7 @@ class _ReferralFacilityPageState extends LocalizedState { } } }, - type: ButtonType.primary, + type: DigitButtonType.primary, mainAxisSize: MainAxisSize.max, ); }, diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart index bd33c4102..9f472f71d 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart @@ -3,6 +3,7 @@ import 'dart:math'; import 'package:auto_route/auto_route.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/models/RadioButtonModel.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/input_wrapper.dart'; import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; @@ -86,16 +87,16 @@ class _ReferralReasonChecklistPageState orElse: () => Text(state.runtimeType.toString()), serviceDefinitionFetch: (value) { return ScrollableContent( - enableFixedButton: true, + enableFixedDigitButton: true, footer: DigitCard( cardType: CardType.primary, padding: EdgeInsets.all(theme.spacerTheme.spacer2), children: [ - Button( - size: ButtonSize.large, + DigitButton( + size: DigitButtonSize.large, label: localizations .translate(i18.common.coreCommonSubmit), - type: ButtonType.primary, + type: DigitButtonType.primary, mainAxisSize: MainAxisSize.max, onPressed: () async { final router = context.router; @@ -141,13 +142,13 @@ class _ReferralReasonChecklistPageState i18.checklist.checklistDialogDescription, ), actions: [ - Button( + DigitButton( label: localizations.translate( i18.checklist .checklistDialogPrimaryAction, ), - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, onPressed: () { List attributes = []; @@ -231,13 +232,13 @@ class _ReferralReasonChecklistPageState ).pop(true); }, ), - Button( + DigitButton( label: localizations.translate( i18.checklist .checklistDialogSecondaryAction, ), - type: ButtonType.secondary, - size: ButtonSize.large, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, onPressed: () { Navigator.of( context, @@ -503,7 +504,7 @@ class _ReferralReasonChecklistPageState child: Padding( padding: EdgeInsets.only(left: theme.spacerTheme.spacer2), child: RadioList( - radioButtons: item.values != null + radioDigitButtons: item.values != null ? item.values! .where((e) => e != i18.checklist.notSelectedKey) .map((e) => RadioButtonModel( diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart index 25f83dc37..a0d05c2fa 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart @@ -1,6 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/models/RadioButtonModel.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/dropdown_wrapper.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; @@ -96,7 +97,7 @@ class _RecordReferralDetailsPageState : null, ); return ScrollableContent( - enableFixedButton: true, + enableFixedDigitButton: true, header: const Column(children: [ BackNavigationHelpHeaderWidget(), ]), @@ -111,9 +112,9 @@ class _RecordReferralDetailsPageState ValueListenableBuilder( valueListenable: clickedStatus, builder: (context, bool isClicked, _) { - return Button( - size: ButtonSize.large, - type: ButtonType.primary, + return DigitButton( + size: DigitButtonSize.large, + type: DigitButtonType.primary, mainAxisSize: MainAxisSize.max, label: localizations .translate(recordState.mapOrNull( @@ -433,9 +434,9 @@ class _RecordReferralDetailsPageState ValueListenableBuilder( valueListenable: clickedStatus, builder: (context, bool isClicked, _) { - return Button( - size: ButtonSize.large, - type: ButtonType.primary, + return DigitButton( + size: DigitButtonSize.large, + type: DigitButtonType.primary, mainAxisSize: MainAxisSize.max, label: localizations.translate( recordState.mapOrNull( @@ -1144,7 +1145,7 @@ class _RecordReferralDetailsPageState "", errorMessage: field.errorText, - radioButtons: + radioDigitButtons: ReferralReconSingleton() .referralReasons .map((r) { diff --git a/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart b/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart index f25d9a190..4d1545323 100644 --- a/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart +++ b/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart @@ -234,8 +234,8 @@ class _SearchReferralReconciliationsPageState const SearchReferralsClearEvent(), ); }; - return Button( - size: ButtonSize.large, + return DigitButton( + size: DigitButtonSize.large, label: localizations.translate( i18.referralReconciliation.createReferralLabel, ), @@ -247,15 +247,15 @@ class _SearchReferralReconciliationsPageState onPressed(); } }, - type: ButtonType.primary, + type: DigitButtonType.primary, ); }, ), SizedBox( height: theme.spacerTheme.spacer2, ), - Button( - size: ButtonSize.large, + DigitButton( + size: DigitButtonSize.large, label: localizations .translate(i18.referralReconciliation.scannerLabel), onPressed: () async { @@ -268,7 +268,7 @@ class _SearchReferralReconciliationsPageState singleValue: true, )); }, - type: ButtonType.secondary, + type: DigitButtonType.secondary, prefixIcon: Icons.qr_code, mainAxisSize: MainAxisSize.max, ), diff --git a/packages/referral_reconciliation/lib/widgets/view_referral_card.dart b/packages/referral_reconciliation/lib/widgets/view_referral_card.dart index b1f997e33..8efc9af34 100644 --- a/packages/referral_reconciliation/lib/widgets/view_referral_card.dart +++ b/packages/referral_reconciliation/lib/widgets/view_referral_card.dart @@ -72,9 +72,9 @@ class _ViewReferralCardState extends LocalizedState { ), ), Flexible( - child: Button( - size: ButtonSize.large, - type: ButtonType.secondary, + child: DigitButton( + size: DigitButtonSize.large, + type: DigitButtonType.secondary, label: localizations.translate(i18.referralReconciliation.iconLabel), onPressed: widget.onOpenPressed ?? () {}, diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index 61b85de94..a310fcbb9 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -117,18 +117,18 @@ packages: dependency: "direct main" description: name: auto_route - sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 + sha256: a9001a90539ca3effc168f7e1029a5885c7326b9032c09ac895e303c1d137704 url: "https://pub.dev" source: hosted - version: "7.9.2" + version: "8.3.0" auto_route_generator: dependency: "direct dev" description: name: auto_route_generator - sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" + sha256: ba28133d3a3bf0a66772bcc98dade5843753cd9f1a8fb4802b842895515b67d3 url: "https://pub.dev" source: hosted - version: "7.3.2" + version: "8.0.0" bloc: dependency: transitive description: @@ -189,10 +189,10 @@ packages: dependency: "direct dev" description: name: build_runner - sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" url: "https://pub.dev" source: hosted - version: "2.4.9" + version: "2.4.11" build_runner_core: dependency: transitive description: @@ -221,26 +221,26 @@ packages: dependency: transitive description: name: camera - sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" + sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167" url: "https://pub.dev" source: hosted - version: "0.10.5+9" - camera_android: + version: "0.11.0+2" + camera_android_camerax: dependency: transitive description: - name: camera_android - sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 + name: camera_android_camerax + sha256: "011be2ab0e5b3e3aa8094413fa890f8c5c5afd7cfdaef353a992047d4dab5780" url: "https://pub.dev" source: hosted - version: "0.10.9+2" + version: "0.6.8+2" camera_avfoundation: dependency: transitive description: name: camera_avfoundation - sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" + sha256: "2e4c568f70e406ccb87376bc06b53d2f5bebaab71e2fbcc1a950e31449381bcf" url: "https://pub.dev" source: hosted - version: "0.9.13+10" + version: "0.9.17+5" camera_platform_interface: dependency: transitive description: @@ -333,10 +333,10 @@ packages: dependency: transitive description: name: cross_file - sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" url: "https://pub.dev" source: hosted - version: "0.3.3+8" + version: "0.3.4+2" crypto: dependency: transitive description: @@ -372,12 +372,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git - version: "4.2.0" + name: dart_mappable_builder + sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e + url: "https://pub.dev" + source: hosted + version: "4.2.3" dart_style: dependency: transitive description: @@ -405,37 +404,35 @@ packages: digit_components: dependency: transitive description: - name: digit_components - sha256: "07b585e5d8010639366da72a4a8b215ce9b8790c75b2162b66af3cea57ca35d9" - url: "https://pub.dev" - source: hosted + path: "../digit_components" + relative: true + source: path version: "1.0.2+1" digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" - url: "https://pub.dev" - source: hosted + path: "../digit_data_model" + relative: true + source: path version: "1.0.5-dev.1" digit_scanner: dependency: "direct main" description: - name: digit_scanner - sha256: "9862c4885465bb1942e36dc9b42596c201648db9b0f5ffb8ad768e2409fc2742" - url: "https://pub.dev" - source: hosted - version: "1.0.3+1" + path: "../digit_scanner" + relative: true + source: path + version: "1.0.4" digit_ui_components: dependency: "direct main" description: - name: digit_ui_components - sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae - url: "https://pub.dev" - source: hosted + path: "flutter/digit-ui-components/digit_components" + ref: version_update + resolved-ref: c68a3ceb1f00c6128780c0cbeb58d9aa8c4d7a13 + url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" + source: git version: "0.0.1+7" dio: - dependency: transitive + dependency: "direct main" description: name: dio sha256: "11e40df547d418cc0c4900a9318b26304e665da6fa4755399a9ff9efd09034b5" @@ -454,10 +451,10 @@ packages: dependency: "direct main" description: name: drift - sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + sha256: "6acedc562ffeed308049f78fb1906abad3d65714580b6745441ee6d50ec564cd" url: "https://pub.dev" source: hosted - version: "2.15.0" + version: "2.18.0" drift_db_viewer: dependency: "direct main" description: @@ -470,18 +467,18 @@ packages: dependency: "direct dev" description: name: drift_dev - sha256: c037d9431b6f8dc633652b1469e5f53aaec6e4eb405ed29dd232fa888ef10d88 + sha256: d9b020736ea85fff1568699ce18b89fabb3f0f042e8a7a05e84a3ec20d39acde url: "https://pub.dev" source: hosted - version: "2.15.0" + version: "2.18.0" easy_stepper: dependency: transitive description: name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" url: "https://pub.dev" source: hosted - version: "0.5.2+1" + version: "0.8.5+1" fake_async: dependency: transitive description: @@ -651,10 +648,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" + sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "4.0.0" flutter_localizations: dependency: transitive description: flutter @@ -714,10 +711,10 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" + sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" url: "https://pub.dev" source: hosted - version: "8.2.5" + version: "8.2.8" freezed: dependency: "direct dev" description: @@ -754,10 +751,10 @@ packages: dependency: transitive description: name: geolocator_android - sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" url: "https://pub.dev" source: hosted - version: "4.3.1" + version: "4.6.1" geolocator_apple: dependency: transitive description: @@ -802,26 +799,26 @@ packages: dependency: transitive description: name: google_fonts - sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 url: "https://pub.dev" source: hosted - version: "4.0.5" + version: "6.2.1" google_mlkit_barcode_scanning: dependency: transitive description: name: google_mlkit_barcode_scanning - sha256: "965183a8cd5cef8477ceea5dbdf29c34a739cf0cfbf1bdad54cd3f9f1807afe5" + sha256: f1a2a39cf1730b9a5e2784a07efa1ca5bfdfdde6aa00b193b3f8cd1953c638ec url: "https://pub.dev" source: hosted - version: "0.10.0" + version: "0.12.0" google_mlkit_commons: dependency: transitive description: name: google_mlkit_commons - sha256: "046586b381cdd139f7f6a05ad6998f7e339d061bd70158249907358394b5f496" + sha256: "27d626c66a181351a953eba5b6ff1ff123aadb891b4dab085b292118f039d6ac" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.1" graphs: dependency: transitive description: @@ -866,10 +863,10 @@ packages: dependency: transitive description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -954,10 +951,10 @@ packages: dependency: "direct main" description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" io: dependency: transitive description: @@ -1006,38 +1003,62 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: name: lints - sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "4.0.0" location: - dependency: transitive + dependency: "direct main" description: name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.0" location_web: dependency: transitive description: name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + sha256: "49dda13d415c4603c5775a33fb22f575e0aa3f0ec2916644ddcd722db31ee884" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "5.0.2" logging: dependency: transitive description: @@ -1050,34 +1071,34 @@ packages: dependency: transitive description: name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "3.1.3" matcher: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -1130,26 +1151,26 @@ packages: dependency: transitive description: name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "8.0.2" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.1" path: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_drawing: dependency: transitive description: @@ -1242,10 +1263,10 @@ packages: dependency: "direct main" description: name: pluto_grid - sha256: e77c34a33dd9d74abbe20ba1df96474dded150dd042c7f7495be1bc2c26bd37f + sha256: "1d4cd9d2652742b556aa9b3230cc64672a3f63c34a9acc80fef794ab36ad903b" url: "https://pub.dev" source: hosted - version: "7.0.2" + version: "8.0.0" pointer_interceptor: dependency: transitive description: @@ -1290,18 +1311,18 @@ packages: dependency: transitive description: name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 + sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a url: "https://pub.dev" source: hosted - version: "0.8.1" + version: "2.1.1" reactive_forms: dependency: "direct main" description: name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "17.0.1" recase: dependency: "direct main" description: @@ -1403,6 +1424,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqlite3: dependency: transitive description: @@ -1415,18 +1444,18 @@ packages: dependency: "direct main" description: name: sqlite3_flutter_libs - sha256: fb2a106a2ea6042fe57de2c47074cc31539a941819c91e105b864744605da3f5 + sha256: "636b0fe8a2de894e5455572f6cbbc458f4ffecfe9f860b79439e27041ea4f0b9" url: "https://pub.dev" source: hosted - version: "0.5.21" + version: "0.5.27" sqlparser: dependency: transitive description: name: sqlparser - sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" + sha256: ade9a67fd70d0369329ed3373208de7ebd8662470e8c396fc8d0d60f9acdfc9f url: "https://pub.dev" source: hosted - version: "0.34.1" + version: "0.36.0" stack_trace: dependency: transitive description: @@ -1462,10 +1491,9 @@ packages: survey_form: dependency: "direct main" description: - name: survey_form - sha256: "52532fb3fae06883828d22f870045587bf7122f67cb4de236c82ad4d6de1d7d7" - url: "https://pub.dev" - source: hosted + path: "../survey_form" + relative: true + source: path version: "0.0.1-dev.2" synchronized: dependency: transitive @@ -1487,26 +1515,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" timing: dependency: transitive description: @@ -1599,10 +1627,10 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.3.3" url_launcher_windows: dependency: transitive description: @@ -1615,10 +1643,10 @@ packages: dependency: "direct main" description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.5.1" vector_graphics: dependency: transitive description: @@ -1663,10 +1691,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1679,10 +1707,10 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.5.1" web_socket_channel: dependency: transitive description: @@ -1732,5 +1760,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.4.0 <3.9.0" + flutter: ">=3.22.0" diff --git a/packages/referral_reconciliation/pubspec.yaml b/packages/referral_reconciliation/pubspec.yaml index b98b627f2..ce85ab65d 100644 --- a/packages/referral_reconciliation/pubspec.yaml +++ b/packages/referral_reconciliation/pubspec.yaml @@ -11,7 +11,11 @@ environment: dependencies: flutter: sdk: flutter - digit_ui_components: 0.0.1+7 + digit_ui_components: + git: + url: https://github.com/egovernments/DIGIT-UI-LIBRARIES + ref: version_update + path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 reactive_forms: ^17.0.0 @@ -32,12 +36,18 @@ dependencies: path_provider: ^2.0.11 path: ^1.8.2 drift_db_viewer: ^2.0.0 - digit_scanner: ^1.0.2 + digit_scanner: + path: + ../digit_scanner group_radio_button: ^1.3.0 flutter_keyboard_visibility: ^5.4.1 - digit_data_model: ^1.0.5-dev.1 + digit_data_model: + path: + ../digit_data_model stream_transform: ^2.1.0 - survey_form: ^0.0.1-dev.2 + survey_form: + path: + ../survey_form dev_dependencies: diff --git a/packages/survey_form/example/pubspec.lock b/packages/survey_form/example/pubspec.lock index d7ebcdb21..1025e27d4 100644 --- a/packages/survey_form/example/pubspec.lock +++ b/packages/survey_form/example/pubspec.lock @@ -229,10 +229,10 @@ packages: dependency: transitive description: name: cross_file - sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" url: "https://pub.dev" source: hosted - version: "0.3.3+8" + version: "0.3.4+2" crypto: dependency: transitive description: @@ -273,21 +273,12 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.6" - db_viewer: - dependency: transitive - description: - name: db_viewer - sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" - url: "https://pub.dev" - source: hosted - version: "1.1.0" digit_data_model: dependency: transitive description: - name: digit_data_model - sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" - url: "https://pub.dev" - source: hosted + path: "../../digit_data_model" + relative: true + source: path version: "1.0.5-dev.1" digit_ui_components: dependency: "direct main" @@ -326,18 +317,10 @@ packages: dependency: transitive description: name: drift - sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + sha256: c2d073d35ad441730812f4ea05b5dd031fb81c5f9786a4f5fb77ecd6307b6f74 url: "https://pub.dev" source: hosted - version: "2.15.0" - drift_db_viewer: - dependency: transitive - description: - name: drift_db_viewer - sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" + version: "2.22.1" fake_async: dependency: transitive description: @@ -538,10 +521,10 @@ packages: dependency: transitive description: name: geolocator_android - sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" url: "https://pub.dev" source: hosted - version: "4.3.1" + version: "4.6.1" geolocator_apple: dependency: transitive description: @@ -626,10 +609,10 @@ packages: dependency: transitive description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -1067,14 +1050,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqlite3: dependency: transitive description: name: sqlite3 - sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" + sha256: bb174b3ec2527f9c5f680f73a89af8149dd99782fbb56ea88ad0807c5638f2ed url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.7" sqlite3_flutter_libs: dependency: transitive description: @@ -1230,10 +1221,10 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.3.3" url_launcher_windows: dependency: transitive description: @@ -1246,10 +1237,10 @@ packages: dependency: transitive description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.5.1" vector_graphics: dependency: transitive description: @@ -1310,10 +1301,10 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "1.1.0" web_socket_channel: dependency: transitive description: @@ -1355,5 +1346,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.3.0 <4.0.0" - flutter: ">=3.18.0-18.0.pre.54" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.19.0" diff --git a/packages/survey_form/pubspec.lock b/packages/survey_form/pubspec.lock index 79ce9b65c..de2848dff 100644 --- a/packages/survey_form/pubspec.lock +++ b/packages/survey_form/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "64.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -316,10 +308,12 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.3" + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "5595f37310a63a92b2c1c7e386c74fe39df5555d" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git + version: "4.2.0" dart_style: dependency: transitive description: @@ -343,13 +337,6 @@ packages: relative: true source: path version: "1.0.5-dev.1" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" digit_ui_components: dependency: "direct main" description: @@ -463,46 +450,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" - url: "https://pub.dev" - source: hosted - version: "2.17.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" fixnum: dependency: transitive description: diff --git a/packages/survey_form/pubspec.yaml b/packages/survey_form/pubspec.yaml index 36f5a7414..e89e6ed13 100644 --- a/packages/survey_form/pubspec.yaml +++ b/packages/survey_form/pubspec.yaml @@ -26,7 +26,9 @@ dependencies: dart_mappable: ^4.2.0 drift: ^2.0.0 auto_route: ^8.1.3 - digit_data_model: ^1.0.5-dev.1 + digit_data_model: + path: + ../digit_data_model collection: ^1.16.0 location: ^6.0.2 dio: ^5.1.2 From c7a5622cbcc30d44554e2f205d12134e71fbc112 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Wed, 11 Dec 2024 13:44:00 +0530 Subject: [PATCH 184/241] version upgrade digit_ui_components fixes related to components --- .../pubspec.lock | 347 +++++++++--------- .../pubspec.yaml | 6 +- packages/attendance_management/pubspec.yaml | 6 +- packages/complaints/example/lib/main.dart | 67 ++-- packages/complaints/example/pubspec.lock | 120 +++--- packages/complaints/example/pubspec.yaml | 5 + packages/complaints/pubspec.lock | 260 +++++++------ packages/complaints/pubspec.yaml | 7 +- packages/digit_location_tracker/pubspec.yaml | 4 +- packages/referral_reconciliation/pubspec.lock | 62 +++- packages/referral_reconciliation/pubspec.yaml | 1 - packages/sync_service/pubspec.yaml | 6 +- 12 files changed, 490 insertions(+), 401 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 5fd3d09cc..d5c1132db 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -73,7 +73,7 @@ packages: source: path version: "1.0.3-dev.1" audioplayers: - dependency: "direct main" + dependency: transitive description: name: audioplayers sha256: c05c6147124cd63e725e861335a8b4d57300b80e6e92cea7c145c739223bbaef @@ -132,26 +132,26 @@ packages: dependency: "direct main" description: name: auto_route - sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 + sha256: a9001a90539ca3effc168f7e1029a5885c7326b9032c09ac895e303c1d137704 url: "https://pub.dev" source: hosted - version: "7.9.2" + version: "8.3.0" auto_route_generator: dependency: "direct dev" description: name: auto_route_generator - sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" + sha256: ba28133d3a3bf0a66772bcc98dade5843753cd9f1a8fb4802b842895515b67d3 url: "https://pub.dev" source: hosted - version: "7.3.2" + version: "8.0.0" battery_plus: dependency: "direct main" description: name: battery_plus - sha256: ba605aeafd6609cb5f8020c609a51941803a5fb2b6a7576f7c7eeeb52d29e750 + sha256: ccc1322fee1153a0f89e663e0eac2f64d659da506454cf24dcad75eb08ae138b url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" battery_plus_platform_interface: dependency: transitive description: @@ -228,10 +228,10 @@ packages: dependency: "direct dev" description: name: build_runner - sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" url: "https://pub.dev" source: hosted - version: "2.4.9" + version: "2.4.11" build_runner_core: dependency: transitive description: @@ -257,29 +257,29 @@ packages: source: hosted version: "8.9.2" camera: - dependency: "direct main" + dependency: transitive description: name: camera - sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" + sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167" url: "https://pub.dev" source: hosted - version: "0.10.5+9" - camera_android: + version: "0.11.0+2" + camera_android_camerax: dependency: transitive description: - name: camera_android - sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 + name: camera_android_camerax + sha256: "011be2ab0e5b3e3aa8094413fa890f8c5c5afd7cfdaef353a992047d4dab5780" url: "https://pub.dev" source: hosted - version: "0.10.9+2" + version: "0.6.8+2" camera_avfoundation: dependency: transitive description: name: camera_avfoundation - sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" + sha256: "2e4c568f70e406ccb87376bc06b53d2f5bebaab71e2fbcc1a950e31449381bcf" url: "https://pub.dev" source: hosted - version: "0.9.13+10" + version: "0.9.17+5" camera_platform_interface: dependency: transitive description: @@ -342,7 +342,7 @@ packages: path: "../../packages/closed_household" relative: true source: path - version: "1.0.1+1" + version: "1.0.2-dev.1" code_builder: dependency: transitive description: @@ -365,23 +365,23 @@ packages: path: "../../packages/complaints" relative: true source: path - version: "0.0.1-dev.2" + version: "0.0.1-dev.1" connectivity_plus: dependency: "direct main" description: name: connectivity_plus - sha256: "224a77051d52a11fbad53dd57827594d3bd24f945af28bd70bab376d68d437f0" + sha256: "876849631b0c7dc20f8b471a2a03142841b482438e3b707955464f5ffca3e4c3" url: "https://pub.dev" source: hosted - version: "5.0.2" + version: "6.1.0" connectivity_plus_platform_interface: dependency: transitive description: name: connectivity_plus_platform_interface - sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a + sha256: "42657c1715d48b167930d5f34d00222ac100475f73d10162ddf43e714932f204" url: "https://pub.dev" source: hosted - version: "1.2.4" + version: "2.0.1" convert: dependency: transitive description: @@ -394,18 +394,18 @@ packages: dependency: transitive description: name: coverage - sha256: "595a29b55ce82d53398e1bcc2cba525d7bd7c59faeb2d2540e9d42c390cfeeeb" + sha256: e3493833ea012784c740e341952298f1cc77f1f01b1bbc3eb4eecf6984fb7f43 url: "https://pub.dev" source: hosted - version: "1.6.4" + version: "1.11.1" cross_file: dependency: transitive description: name: cross_file - sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" url: "https://pub.dev" source: hosted - version: "0.3.3+8" + version: "0.3.4+2" crypto: dependency: transitive description: @@ -441,12 +441,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git - version: "4.2.0" + path: "../../packages/dart_mappable_builder" + relative: true + source: path + version: "4.2.3" dart_style: dependency: transitive description: @@ -483,10 +481,10 @@ packages: dependency: "direct main" description: name: device_info_plus - sha256: "77f757b789ff68e4eaf9c56d1752309bd9f7ad557cb105b938a7f8eb89e59110" + sha256: a7fd703482b391a87d60b6061d04dfdeab07826b96f9abd8f5ed98068acc0074 url: "https://pub.dev" source: hosted - version: "9.1.2" + version: "10.1.2" device_info_plus_platform_interface: dependency: transitive description: @@ -520,11 +518,10 @@ packages: digit_dss: dependency: "direct main" description: - name: digit_dss - sha256: "32e2173ae52e7fd9fb53fa435fb21466248029366584f44a0c0f2c6836267a98" - url: "https://pub.dev" - source: hosted - version: "1.0.1" + path: "../../packages/digit_dss" + relative: true + source: path + version: "1.0.2" digit_firebase_services: dependency: "direct main" description: @@ -545,21 +542,22 @@ packages: path: "../../packages/digit_scanner" relative: true source: path - version: "1.0.3+1" + version: "1.0.4" digit_showcase: dependency: "direct main" description: path: "../../packages/digit_showcase" relative: true source: path - version: "1.0.0" + version: "1.0.1" digit_ui_components: dependency: "direct main" description: - name: digit_ui_components - sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae - url: "https://pub.dev" - source: hosted + path: "flutter/digit-ui-components/digit_components" + ref: version_update + resolved-ref: c68a3ceb1f00c6128780c0cbeb58d9aa8c4d7a13 + url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" + source: git version: "0.0.1+7" dio: dependency: "direct main" @@ -585,14 +583,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" - disk_space: + disk_space_update: dependency: "direct main" description: - name: disk_space - sha256: fb27eb2d09ac04784f45b95b1355538b2355c76a081eeaa8439d1a5cfa263888 + name: disk_space_update + sha256: "65e19384334779537f7ec83a939c5991bf56bfe016672335ea47d62374f08a3c" url: "https://pub.dev" source: hosted - version: "0.2.1" + version: "0.0.2" dotted_border: dependency: transitive description: @@ -605,10 +603,10 @@ packages: dependency: "direct main" description: name: drift - sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + sha256: "6acedc562ffeed308049f78fb1906abad3d65714580b6745441ee6d50ec564cd" url: "https://pub.dev" source: hosted - version: "2.15.0" + version: "2.18.0" drift_db_viewer: dependency: "direct main" description: @@ -621,18 +619,18 @@ packages: dependency: "direct dev" description: name: drift_dev - sha256: c037d9431b6f8dc633652b1469e5f53aaec6e4eb405ed29dd232fa888ef10d88 + sha256: d9b020736ea85fff1568699ce18b89fabb3f0f042e8a7a05e84a3ec20d39acde url: "https://pub.dev" source: hosted - version: "2.15.0" + version: "2.18.0" easy_stepper: dependency: transitive description: name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" url: "https://pub.dev" source: hosted - version: "0.5.2+1" + version: "0.8.5+1" equatable: dependency: transitive description: @@ -669,10 +667,10 @@ packages: dependency: transitive description: name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "7.0.0" file_picker: dependency: transitive description: @@ -733,10 +731,10 @@ packages: dependency: transitive description: name: firebase_core_web - sha256: c8e1d59385eee98de63c92f961d2a7062c5d9a65e7f45bdc7f1b0b205aab2492 + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" url: "https://pub.dev" source: hosted - version: "2.11.5" + version: "2.17.5" firebase_crashlytics: dependency: transitive description: @@ -911,18 +909,18 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" + sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "4.0.0" flutter_local_notifications: dependency: "direct main" description: name: flutter_local_notifications - sha256: "55b9b229307a10974b26296ff29f2e132256ba4bd74266939118eaefa941cb00" + sha256: "674173fd3c9eda9d4c8528da2ce0ea69f161577495a9cc835a2a4ecd7eadeb35" url: "https://pub.dev" source: hosted - version: "16.3.3" + version: "17.2.4" flutter_local_notifications_linux: dependency: transitive description: @@ -1051,13 +1049,13 @@ packages: source: sdk version: "0.0.0" fluttertoast: - dependency: "direct main" + dependency: transitive description: name: fluttertoast - sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" + sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" url: "https://pub.dev" source: hosted - version: "8.2.5" + version: "8.2.8" formula_parser: dependency: transitive description: @@ -1107,10 +1105,10 @@ packages: dependency: transitive description: name: geolocator_android - sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" url: "https://pub.dev" source: hosted - version: "4.3.1" + version: "4.6.1" geolocator_apple: dependency: transitive description: @@ -1155,26 +1153,26 @@ packages: dependency: transitive description: name: google_fonts - sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 url: "https://pub.dev" source: hosted - version: "4.0.5" + version: "6.2.1" google_mlkit_barcode_scanning: - dependency: "direct main" + dependency: transitive description: name: google_mlkit_barcode_scanning - sha256: "965183a8cd5cef8477ceea5dbdf29c34a739cf0cfbf1bdad54cd3f9f1807afe5" + sha256: f1a2a39cf1730b9a5e2784a07efa1ca5bfdfdde6aa00b193b3f8cd1953c638ec url: "https://pub.dev" source: hosted - version: "0.10.0" + version: "0.12.0" google_mlkit_commons: dependency: transitive description: name: google_mlkit_commons - sha256: "046586b381cdd139f7f6a05ad6998f7e339d061bd70158249907358394b5f496" + sha256: "27d626c66a181351a953eba5b6ff1ff123aadb891b4dab085b292118f039d6ac" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.1" graphs: dependency: transitive description: @@ -1184,7 +1182,7 @@ packages: source: hosted version: "2.3.1" group_radio_button: - dependency: "direct main" + dependency: transitive description: name: group_radio_button sha256: "204de8d16b224be7fc72dade0c3afd410ff5a34417d89f74f0fd8be7a8c2b4d6" @@ -1192,7 +1190,7 @@ packages: source: hosted version: "1.3.0" gs1_barcode_parser: - dependency: "direct main" + dependency: transitive description: name: gs1_barcode_parser sha256: ff171bc40038de3f7178fbc32eaf9eebc3d35a3c4c00bb0281fe4a976d853a42 @@ -1243,10 +1241,10 @@ packages: dependency: transitive description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -1344,10 +1342,10 @@ packages: dependency: "direct main" description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" inventory_management: dependency: "direct main" description: @@ -1411,38 +1409,62 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: name: lints - sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "4.0.0" location: dependency: "direct main" description: name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.0" location_web: dependency: transitive description: name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + sha256: "49dda13d415c4603c5775a33fb22f575e0aa3f0ec2916644ddcd722db31ee884" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "5.0.2" logging: dependency: transitive description: @@ -1455,26 +1477,26 @@ packages: dependency: transitive description: name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "3.1.3" matcher: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" material_design_icons_flutter: dependency: "direct main" description: @@ -1487,10 +1509,10 @@ packages: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -1551,26 +1573,26 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "8.0.2" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.1" path: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_drawing: dependency: transitive description: @@ -1635,14 +1657,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.0" - pedantic: - dependency: transitive - description: - name: pedantic - sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" - url: "https://pub.dev" - source: hosted - version: "1.11.1" permission_handler: dependency: "direct main" description: @@ -1703,10 +1717,10 @@ packages: dependency: transitive description: name: platform - sha256: ae68c7bfcd7383af3629daafb32fb4e8681c7154428da4febcff06200585f102 + sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "3.1.4" plugin_platform_interface: dependency: transitive description: @@ -1719,10 +1733,10 @@ packages: dependency: "direct main" description: name: pluto_grid - sha256: e77c34a33dd9d74abbe20ba1df96474dded150dd042c7f7495be1bc2c26bd37f + sha256: "1d4cd9d2652742b556aa9b3230cc64672a3f63c34a9acc80fef794ab36ad903b" url: "https://pub.dev" source: hosted - version: "7.0.2" + version: "8.0.0" pointer_interceptor: dependency: transitive description: @@ -1751,10 +1765,10 @@ packages: dependency: transitive description: name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + sha256: "21e54fd2faf1b5bdd5102afd25012184a6793927648ea81eea80552ac9405b32" url: "https://pub.dev" source: hosted - version: "4.2.4" + version: "5.0.2" provider: dependency: "direct main" description: @@ -1799,18 +1813,18 @@ packages: dependency: transitive description: name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 + sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a url: "https://pub.dev" source: hosted - version: "0.8.1" + version: "2.1.1" reactive_forms: dependency: "direct main" description: name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "17.0.1" recase: dependency: "direct main" description: @@ -1893,10 +1907,10 @@ packages: dependency: transitive description: name: shared_preferences_web - sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21" + sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.4.2" shared_preferences_windows: dependency: transitive description: @@ -1982,30 +1996,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" - speech_to_text: - dependency: "direct main" - description: - name: speech_to_text - sha256: "57fef1d41bdebe298e84842c89bb4ac91f31cdbec7830c8cb1fc6b91d03abd42" - url: "https://pub.dev" - source: hosted - version: "6.6.0" - speech_to_text_macos: + sprintf: dependency: transitive description: - name: speech_to_text_macos - sha256: e685750f7542fcaa087a5396ee471e727ec648bf681f4da83c84d086322173f6 + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" url: "https://pub.dev" source: hosted - version: "1.1.0" - speech_to_text_platform_interface: - dependency: transitive - description: - name: speech_to_text_platform_interface - sha256: a1935847704e41ee468aad83181ddd2423d0833abe55d769c59afca07adb5114 - url: "https://pub.dev" - source: hosted - version: "2.3.0" + version: "7.0.0" sqlite3: dependency: transitive description: @@ -2026,10 +2024,10 @@ packages: dependency: transitive description: name: sqlparser - sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" + sha256: ade9a67fd70d0369329ed3373208de7ebd8662470e8c396fc8d0d60f9acdfc9f url: "https://pub.dev" source: hosted - version: "0.34.1" + version: "0.36.0" stack_trace: dependency: transitive description: @@ -2047,7 +2045,7 @@ packages: source: hosted version: "2.1.2" stream_transform: - dependency: "direct main" + dependency: transitive description: name: stream_transform sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" @@ -2062,6 +2060,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" + super_annotations: + dependency: "direct main" + description: + name: super_annotations + sha256: "6ccb4a2066de1ae3d1869184350b641b0b66fa6b98e158abeffdc9c47a3bf49c" + url: "https://pub.dev" + source: hosted + version: "0.8.1" survey_form: dependency: "direct main" description: @@ -2077,6 +2083,13 @@ packages: url: "https://pub.dev" source: hosted version: "0.3.1" + sync_service: + dependency: "direct main" + description: + path: "../../packages/sync_service" + relative: true + source: path + version: "0.0.1-dev.1" synchronized: dependency: transitive description: @@ -2097,26 +2110,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" time: dependency: transitive description: @@ -2182,7 +2195,7 @@ packages: source: hosted version: "0.7.0" url_launcher: - dependency: "direct main" + dependency: transitive description: name: url_launcher sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" @@ -2233,10 +2246,10 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.3.3" url_launcher_windows: dependency: transitive description: @@ -2249,10 +2262,10 @@ packages: dependency: "direct main" description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.5.1" vector_graphics: dependency: transitive description: @@ -2297,10 +2310,10 @@ packages: dependency: transitive description: name: vm_service - sha256: c538be99af830f478718b51630ec1b6bee5e74e52c8a802d328d9e71d35d2583 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "11.10.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -2313,10 +2326,10 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.5.1" web_socket_channel: dependency: transitive description: @@ -2329,10 +2342,10 @@ packages: dependency: transitive description: name: webdriver - sha256: "3c923e918918feeb90c4c9fdf1fe39220fa4c0e8e2c0fffaded174498ef86c49" + sha256: "003d7da9519e1e5f329422b36c4dcdf18d7d2978d1ba099ea4e45ba490ed845e" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.3" webkit_inspection_protocol: dependency: transitive description: @@ -2398,5 +2411,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <=3.9.0" - flutter: ">=3.16.0" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.22.0" diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 29b6aeb3a..5701bf04c 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -18,7 +18,11 @@ dependencies: sqlite3_flutter_libs: ^0.5.11+1 path_provider: ^2.1.3 path: ^1.9.0 - digit_ui_components: 0.0.2-dev + digit_ui_components: + git: + url: https://github.com/egovernments/DIGIT-UI-LIBRARIES + ref: version_update + path: ./flutter/digit-ui-components/digit_components digit_components: ^1.0.2 auto_route: ^8.3.0 flutter_bloc: ^8.1.5 diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index cb788b814..3a9b5c896 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -11,7 +11,11 @@ environment: dependencies: flutter: sdk: flutter - digit_ui_components: 0.0.2-dev.2 + digit_ui_components: + git: + url: https://github.com/egovernments/DIGIT-UI-LIBRARIES + ref: version_update + path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 intl: ^0.19.0 diff --git a/packages/complaints/example/lib/main.dart b/packages/complaints/example/lib/main.dart index 7642de2f9..eafbce267 100644 --- a/packages/complaints/example/lib/main.dart +++ b/packages/complaints/example/lib/main.dart @@ -2,18 +2,19 @@ import 'dart:convert'; import 'package:complaints/blocs/localization/app_localization.dart'; import 'package:complaints/complaints.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/digit_components.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; void main() { runApp(MyApp()); } -class Language{ + +class Language { late String label; late String value; - Language(this.label,this.value); + Language(this.label, this.value); } class Localization { @@ -24,15 +25,13 @@ class Localization { late String module; late String locale; - } -Future loadLocalizedStrings() async{ +Future loadLocalizedStrings() async { final String jsonString = - await rootBundle.loadString('lib/localization_strings.json'); + await rootBundle.loadString('lib/localization_strings.json'); final decode = json.decode(jsonString); - List localizationList; localizationList = decode.map((e) { final data = e; @@ -56,17 +55,15 @@ class MyApp extends StatelessWidget { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( - colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true, ), home: MyHomePage(title: "Complaints Package Demo"), - locale: Locale('en','MZ'), - supportedLocales: [const Locale('en','MZ')], + locale: Locale('en', 'MZ'), + supportedLocales: [const Locale('en', 'MZ')], localizationsDelegates: [ - ComplaintsLocalization.getDelegate(loadLocalizedStrings(), [ - Language("English", "en_MZ") - ]), + ComplaintsLocalization.getDelegate( + loadLocalizedStrings(), [Language("English", "en_MZ")]), // Add other localizations delegates if needed ], ); @@ -77,14 +74,11 @@ class MyHomePage extends StatefulWidget { final String title; MyHomePage({super.key, required this.title}); - @override State createState() => _MyHomePageState(); } class _MyHomePageState extends State { - - @override void initState() { super.initState(); @@ -94,30 +88,23 @@ class _MyHomePageState extends State { Widget build(BuildContext context) { final theme = Theme.of(context); return Scaffold( - appBar: AppBar( - title: Text("PGR-Complaints Example"), - ), - body: Center( - child :DigitOutLineButton( - onPressed: () { - Navigator.of(context).push( - MaterialPageRoute( - builder: (BuildContext context) => - ComplaintsAcknowledgementPage(), - ), - ); - }, - label: "Demo Acknowledgemnet", - buttonStyle: OutlinedButton.styleFrom( - shape: const BeveledRectangleBorder(), - padding: const EdgeInsets.all(14), - side: BorderSide( - width: 1.0, - color: theme.colorScheme.primary, - ), + appBar: AppBar( + title: Text("PGR-Complaints Example"), ), - ), - ) - ); + body: Center( + child: DigitButton( + onPressed: () { + Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) => + ComplaintsAcknowledgementPage(), + ), + ); + }, + label: "Demo Acknowledgemnet", + type: DigitButtonType.secondary, + size: DigitButtonSize.large, + ), + )); } } diff --git a/packages/complaints/example/pubspec.lock b/packages/complaints/example/pubspec.lock index a501a94c7..3a316aa25 100644 --- a/packages/complaints/example/pubspec.lock +++ b/packages/complaints/example/pubspec.lock @@ -45,10 +45,10 @@ packages: dependency: transitive description: name: auto_route - sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 + sha256: "8de4a280ce7861ef24a6baa14c2b02b77a8c31b4a4c4f12d7b608678cc657c7f" url: "https://pub.dev" source: hosted - version: "7.9.2" + version: "8.1.4" bloc: dependency: transitive description: @@ -288,14 +288,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" - digit_components: - dependency: "direct main" - description: - name: digit_components - sha256: "01320d4c72829045e789d1a56e23ff2bd85dad6a1831d27bd507a1acaceae17e" - url: "https://pub.dev" - source: hosted - version: "1.0.1" digit_data_model: dependency: transitive description: @@ -305,7 +297,7 @@ packages: source: hosted version: "1.0.4-dev.1" digit_ui_components: - dependency: transitive + dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" ref: version_update @@ -353,14 +345,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - easy_stepper: - dependency: transitive - description: - name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" - url: "https://pub.dev" - source: hosted - version: "0.5.2+1" fake_async: dependency: transitive description: @@ -617,10 +601,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 url: "https://pub.dev" source: hosted - version: "4.0.5" + version: "6.2.1" graphs: dependency: transitive description: @@ -745,10 +729,10 @@ packages: dependency: transitive description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" io: dependency: transitive description: @@ -789,6 +773,30 @@ packages: url: "https://pub.dev" source: hosted version: "4.9.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -801,26 +809,26 @@ packages: dependency: transitive description: name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.0" location_web: dependency: transitive description: name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + sha256: "15ad7b4c8a9f55abee513373755e093a40c04d7e24fc1b4f89676fe99523d034" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "5.0.1" logging: dependency: transitive description: @@ -833,34 +841,34 @@ packages: dependency: transitive description: name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "3.1.3" matcher: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -901,27 +909,11 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - package_info_plus: - dependency: transitive - description: - name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" - url: "https://pub.dev" - source: hosted - version: "5.0.1" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" - url: "https://pub.dev" - source: hosted - version: "2.0.1" path: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted version: "1.9.0" @@ -1045,22 +1037,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 - url: "https://pub.dev" - source: hosted - version: "0.8.1" reactive_forms: dependency: transitive description: name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "17.0.1" recase: dependency: transitive description: @@ -1158,10 +1142,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" timing: dependency: transitive description: @@ -1379,5 +1363,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.22.0" diff --git a/packages/complaints/example/pubspec.yaml b/packages/complaints/example/pubspec.yaml index 24c455ff6..752694196 100644 --- a/packages/complaints/example/pubspec.yaml +++ b/packages/complaints/example/pubspec.yaml @@ -37,6 +37,11 @@ dependencies: cupertino_icons: ^1.0.2 complaints: path : ../ + digit_ui_components: + git: + url: https://github.com/egovernments/DIGIT-UI-LIBRARIES + ref: version_update + path: ./flutter/digit-ui-components/digit_components diff --git a/packages/complaints/pubspec.lock b/packages/complaints/pubspec.lock index 805d33063..a97aaaaeb 100644 --- a/packages/complaints/pubspec.lock +++ b/packages/complaints/pubspec.lock @@ -8,7 +8,15 @@ packages: sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" url: "https://pub.dev" source: hosted - version: "64.0.0" + version: "67.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -53,18 +61,18 @@ packages: dependency: "direct main" description: name: auto_route - sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 + sha256: a9001a90539ca3effc168f7e1029a5885c7326b9032c09ac895e303c1d137704 url: "https://pub.dev" source: hosted - version: "7.9.2" + version: "8.3.0" auto_route_generator: dependency: "direct dev" description: name: auto_route_generator - sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" + sha256: ba28133d3a3bf0a66772bcc98dade5843753cd9f1a8fb4802b842895515b67d3 url: "https://pub.dev" source: hosted - version: "7.3.2" + version: "8.0.0" bloc: dependency: transitive description: @@ -292,12 +300,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "5595f37310a63a92b2c1c7e386c74fe39df5555d" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git - version: "4.2.0" + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.3" dart_style: dependency: transitive description: @@ -306,14 +312,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.6" - db_viewer: - dependency: transitive - description: - name: db_viewer - sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" - url: "https://pub.dev" - source: hosted - version: "1.1.0" diff_match_patch: dependency: transitive description: @@ -325,11 +323,17 @@ packages: digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "14ebea5f17921081025963b379efd5e16d155dd920d5a42ab2f2f392afb649de" - url: "https://pub.dev" - source: hosted - version: "1.0.4-dev.1" + path: "../digit_data_model" + relative: true + source: path + version: "1.0.5-dev.1" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_ui_components: dependency: "direct main" description: @@ -367,26 +371,10 @@ packages: dependency: "direct main" description: name: drift - sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 - url: "https://pub.dev" - source: hosted - version: "2.15.0" - drift_db_viewer: - dependency: transitive - description: - name: drift_db_viewer - sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - easy_stepper: - dependency: transitive - description: - name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + sha256: "4e0ffee40d23f0b809e6cff1ad202886f51d629649073ed42d9cd1d194ea943e" url: "https://pub.dev" source: hosted - version: "0.5.2+1" + version: "2.19.1+1" fake_async: dependency: transitive description: @@ -451,6 +439,46 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+3" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: @@ -508,10 +536,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 + sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" url: "https://pub.dev" source: hosted - version: "2.0.3" + version: "4.0.0" flutter_localizations: dependency: transitive description: flutter @@ -603,10 +631,10 @@ packages: dependency: transitive description: name: geolocator_android - sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" url: "https://pub.dev" source: hosted - version: "4.3.1" + version: "4.6.1" geolocator_apple: dependency: transitive description: @@ -651,10 +679,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 url: "https://pub.dev" source: hosted - version: "4.0.5" + version: "6.2.1" graphs: dependency: transitive description: @@ -691,10 +719,10 @@ packages: dependency: transitive description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -779,10 +807,10 @@ packages: dependency: transitive description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" io: dependency: transitive description: @@ -792,7 +820,7 @@ packages: source: hosted version: "1.0.5" isar: - dependency: "direct main" + dependency: transitive description: name: isar sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" @@ -831,38 +859,62 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: name: lints - sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "4.0.0" location: dependency: transitive description: name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.0" location_web: dependency: transitive description: name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + sha256: "49dda13d415c4603c5775a33fb22f575e0aa3f0ec2916644ddcd722db31ee884" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "5.0.2" logging: dependency: transitive description: @@ -875,34 +927,34 @@ packages: dependency: transitive description: name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "3.1.3" matcher: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -951,27 +1003,11 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - package_info_plus: - dependency: transitive - description: - name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" - url: "https://pub.dev" - source: hosted - version: "5.0.1" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" - url: "https://pub.dev" - source: hosted - version: "2.0.1" path: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted version: "1.9.0" @@ -1095,22 +1131,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 - url: "https://pub.dev" - source: hosted - version: "0.8.1" reactive_forms: dependency: "direct main" description: name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "17.0.1" recase: dependency: "direct main" description: @@ -1196,14 +1224,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqlite3: dependency: transitive description: name: sqlite3 - sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" + sha256: fde692580bee3379374af1f624eb3e113ab2865ecb161dbe2d8ac2de9735dbdb url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.5" sqlite3_flutter_libs: dependency: transitive description: @@ -1256,26 +1292,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" timing: dependency: transitive description: @@ -1384,10 +1420,10 @@ packages: dependency: transitive description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.5.1" vector_graphics: dependency: transitive description: @@ -1432,10 +1468,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1448,10 +1484,10 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.5.1" web_socket_channel: dependency: transitive description: @@ -1501,5 +1537,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.22.0" diff --git a/packages/complaints/pubspec.yaml b/packages/complaints/pubspec.yaml index d7f9b86ee..a3b95e303 100644 --- a/packages/complaints/pubspec.yaml +++ b/packages/complaints/pubspec.yaml @@ -18,7 +18,7 @@ dependencies: flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 - auto_route: ^7.8.4 + auto_route: ^8.1.3 digit_data_model: 1.0.4-dev.1 dart_mappable: ^4.2.0 group_radio_button: ^1.3.0 @@ -29,15 +29,14 @@ dependencies: path_provider: ^2.0.11 drift: ^2.0.0 dio: ^5.1.2 - isar: ^3.0.5 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^2.0.0 - auto_route_generator: ^7.3.2 + flutter_lints: ^4.0.0 + auto_route_generator: ^8.0.0 freezed: ^2.1.0+1 json_serializable: ^6.4.0 dart_mappable_builder: diff --git a/packages/digit_location_tracker/pubspec.yaml b/packages/digit_location_tracker/pubspec.yaml index 034dbddde..05a2482d5 100644 --- a/packages/digit_location_tracker/pubspec.yaml +++ b/packages/digit_location_tracker/pubspec.yaml @@ -14,8 +14,8 @@ dependencies: flutter_background_service: ^5.0.10 flutter_bloc: ^8.1.1 freezed_annotation: ^2.2.0 - location: ^5.0.0 - location_platform_interface: ^3.0.0 + location: ^6.0.2 + location_platform_interface: ^4.0.0 permission_handler: ^11.3.1 path_provider: ^2.0.11 isar: ^3.0.5 diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index a310fcbb9..1f63b6e7d 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -372,10 +380,9 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - name: dart_mappable_builder - sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e - url: "https://pub.dev" - source: hosted + path: "../dart_mappable_builder" + relative: true + source: path version: "4.2.3" dart_style: dependency: transitive @@ -415,6 +422,13 @@ packages: relative: true source: path version: "1.0.5-dev.1" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_scanner: dependency: "direct main" description: @@ -543,6 +557,46 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: diff --git a/packages/referral_reconciliation/pubspec.yaml b/packages/referral_reconciliation/pubspec.yaml index ce85ab65d..8208c52e2 100644 --- a/packages/referral_reconciliation/pubspec.yaml +++ b/packages/referral_reconciliation/pubspec.yaml @@ -35,7 +35,6 @@ dependencies: sqlite3_flutter_libs: ^0.5.10 path_provider: ^2.0.11 path: ^1.8.2 - drift_db_viewer: ^2.0.0 digit_scanner: path: ../digit_scanner diff --git a/packages/sync_service/pubspec.yaml b/packages/sync_service/pubspec.yaml index 9528e2d35..18895fbca 100644 --- a/packages/sync_service/pubspec.yaml +++ b/packages/sync_service/pubspec.yaml @@ -28,7 +28,11 @@ dependencies: provider: ^6.1.2 flutter_secure_storage: ^9.2.2 digit_data_model: ^1.0.4 - digit_ui_components: 0.0.2-dev.2 + digit_ui_components: + git: + url: https://github.com/egovernments/DIGIT-UI-LIBRARIES + ref: version_update + path: ./flutter/digit-ui-components/digit_components super_annotations: ^0.8.1 dev_dependencies: From a7a1eb69b932c43cdfcfd35bf21458e5c78756f9 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Wed, 11 Dec 2024 14:56:56 +0530 Subject: [PATCH 185/241] updated components to ui_components in dss and scanner --- .../pubspec.yaml | 2 +- packages/digit_dss/lib/blocs/dashboard.dart | 29 +- .../digit_dss/lib/data/remote/dashboard.dart | 2 +- .../lib/pages/dashboard/dashboard.dart | 62 +- packages/digit_dss/lib/utils/utils.dart | 5 +- .../widgets/back_navigation_help_header.dart | 6 +- .../dashboard/dashboard_metric_card.dart | 253 +++---- .../digit_dss/lib/widgets/no_result_card.dart | 4 +- packages/digit_dss/pubspec.lock | 706 +++++++++++++----- packages/digit_dss/pubspec.yaml | 6 +- packages/digit_scanner/example/pubspec.lock | 321 ++++++++ .../digit_scanner/lib/pages/qr_scanner.dart | 256 ++++--- packages/digit_scanner/pubspec.lock | 325 +++++++- packages/digit_scanner/pubspec.yaml | 8 +- 14 files changed, 1476 insertions(+), 509 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 5701bf04c..d24d2184e 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -1,7 +1,7 @@ name: health_campaign_field_worker_app description: A new Flutter project. publish_to: 'none' -version: 1.5.0+0 +version: 1.6.0+0 environment: sdk: '>=3.0.0 <=4.0.0' diff --git a/packages/digit_dss/lib/blocs/dashboard.dart b/packages/digit_dss/lib/blocs/dashboard.dart index fa88ad092..f1da76177 100644 --- a/packages/digit_dss/lib/blocs/dashboard.dart +++ b/packages/digit_dss/lib/blocs/dashboard.dart @@ -3,12 +3,12 @@ import 'dart:async'; // Import the dart:async library for asynchronous operation import 'package:attendance_management/attendance_management.dart'; import 'package:attendance_management/utils/typedefs.dart'; import 'package:collection/collection.dart'; // Import the collection package for collection utilities -import 'package:digit_components/models/digit_table_model.dart'; // Import the digit_table_model.dart file from the digit_components package -import 'package:digit_components/theme/colors.dart'; // Import the colors.dart file from the digit_components package -import 'package:digit_components/theme/digit_theme.dart'; // Import the digit_theme.dart file from the digit_components package -import 'package:digit_components/utils/date_utils.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_dss/digit_dss.dart'; // Import the digit_dss.dart file from the digit_dss package +import 'package:digit_ui_components/theme/colors.dart'; +import 'package:digit_ui_components/theme/digit_theme.dart'; +import 'package:digit_ui_components/utils/date_utils.dart'; +import 'package:digit_ui_components/widgets/atoms/table_cell.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; // Import the flutter_bloc package for state management import 'package:freezed_annotation/freezed_annotation.dart'; // Import the freezed_annotation package for code generation @@ -177,7 +177,7 @@ class DashboardBloc extends Bloc { for (DashboardResponse chart in tableCharts) { if ((chart.data ?? []).isNotEmpty) { // Create table headers - final List tableHeaderList = chart.data?.first.plots + final List tableHeaderList = chart.data?.first.plots ?.where((p) => p.name != DSSEnums.serialNumber.toValue() && p.name != DSSEnums.startDate.toValue() && @@ -185,10 +185,7 @@ class DashboardBloc extends Bloc { p.name != null) .map((e) { final headerData = transformToLocaleCode(e.name ?? ''); - return TableHeader( - headerData, - cellKey: e.name, - ); + return DigitTableColumn(header: headerData, cellValue: e.name!); }).toList() ?? []; @@ -200,7 +197,7 @@ class DashboardBloc extends Bloc { p.name != DSSEnums.startDate.toValue() && p.name != DSSEnums.endDate.toValue()) .mapIndexed( - (i, plot) => TableData( + (i, plot) => DigitTableData( plot.symbol == DSSEnums.number.toValue() || plot.symbol == DSSEnums.percentage.toValue() || plot.symbol == DSSEnums.amount.toValue() @@ -220,17 +217,17 @@ class DashboardBloc extends Bloc { : double.parse(plot.value.toString()) .toStringAsFixed(2) : plot.label.toString(), - cellKey: plot.name, + cellKey: plot.name!, style: DigitTheme.instance.mobileTheme.textTheme.bodyMedium ?.apply( color: i == 0 - ? const DigitColors().burningOrange - : const DigitColors().woodsmokeBlack, + ? const DigitColors().light.primary1 + : const DigitColors().light.textPrimary, ), ), ) .toList(); - return TableDataRow(rowTableData ?? []); + return DigitTableRow(tableRow: rowTableData!); }).toList(); tableWrapperList.add(TableWrapper( headerList: tableHeaderList, @@ -300,8 +297,8 @@ class MetricWrapper { // Class for wrapping table data class TableWrapper { - final List headerList; // List of table headers - final List tableData; // List of table data rows + final List headerList; // List of table headers + final List tableData; // List of table data rows TableWrapper({ required this.headerList, diff --git a/packages/digit_dss/lib/data/remote/dashboard.dart b/packages/digit_dss/lib/data/remote/dashboard.dart index 8f6a2a321..3108d5c2b 100644 --- a/packages/digit_dss/lib/data/remote/dashboard.dart +++ b/packages/digit_dss/lib/data/remote/dashboard.dart @@ -1,8 +1,8 @@ import 'dart:async'; // Import the dart:async library for asynchronous operations import 'dart:convert'; // Import the dart:convert library for JSON encoding and decoding -import 'package:digit_components/utils/app_logger.dart'; // Import the app_logger.dart file from the digit_components package import 'package:digit_dss/data/local_store/no_sql/schema/dashboard_response.dart'; // Import the dashboard_response.dart file from the digit_dss package +import 'package:digit_ui_components/utils/app_logger.dart'; import 'package:dio/dio.dart'; // Import the dio package for HTTP client functionality import 'package:flutter/material.dart'; import 'package:isar/isar.dart'; // Import the isar package for database management diff --git a/packages/digit_dss/lib/pages/dashboard/dashboard.dart b/packages/digit_dss/lib/pages/dashboard/dashboard.dart index b845a7486..8d553fbdb 100644 --- a/packages/digit_dss/lib/pages/dashboard/dashboard.dart +++ b/packages/digit_dss/lib/pages/dashboard/dashboard.dart @@ -1,9 +1,14 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/models/digit_table_model.dart'; -import 'package:digit_components/widgets/atoms/digit_toaster.dart'; import 'package:digit_dss/blocs/dashboard.dart'; import 'package:digit_dss/widgets/back_navigation_help_header.dart'; +import 'package:digit_ui_components/enum/app_enums.dart'; +import 'package:digit_ui_components/theme/spacers.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_info_card.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_loader.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_toast.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_table.dart'; +import 'package:digit_ui_components/widgets/powered_by_digit.dart'; +import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -50,7 +55,7 @@ class UserDashboardPageState extends LocalizedState { setState(() { isLoading = true; }); - Loaders.showLoadingDialog(context); + DigitLoaders.showLoadingDialog(context: context); } }, fetched: ( @@ -61,12 +66,12 @@ class UserDashboardPageState extends LocalizedState { ) { Navigator.of(context, rootNavigator: true).pop(); if (isNetworkError == true) { - DigitToast.show(context, - options: DigitToastOptions( + Toast.showToast( + context, + message: localizations.translate(i18.dashboard.someErrorOccured), - true, - DigitTheme.instance.mobileTheme, - )); + type: ToastType.error, + ); } setState(() { @@ -78,11 +83,11 @@ class UserDashboardPageState extends LocalizedState { setState(() { isLoading = false; }); - DigitToast.show(context, - options: DigitToastOptions( - localizations.translate(i18.dashboard.someErrorOccured), - true, - DigitTheme.instance.mobileTheme)); + Toast.showToast( + context, + message: localizations.translate(i18.dashboard.someErrorOccured), + type: ToastType.error, + ); }); }, builder: (context, dashboardState) { return RefreshIndicator( @@ -127,33 +132,25 @@ class UserDashboardPageState extends LocalizedState { ), ...(tableData ?? []) .map((table) => Padding( - padding: const EdgeInsets.all(kPadding), + padding: const EdgeInsets.all(spacer1), child: DigitTable( - headerList: table.headerList.map((header) { - return TableHeader( - localizations.translate(header.label), - cellKey: header.cellKey, - ); - }).toList(), - tableData: table.tableData, - height: ((table.tableData.length) + 1) * 65, - columnWidth: - MediaQuery.of(context).size.width / 2, - columnRowFixedHeight: 65, scrollPhysics: (table.tableData.length) > 5 ? const ClampingScrollPhysics() : const NeverScrollableScrollPhysics(), + rows: table.tableData, + columns: table.headerList, ), )) .toList(), if ((tableData ?? []).isNotEmpty) Align( alignment: Alignment.center, - child: DigitInfoCard( + child: InfoCard( title: localizations .translate(i18.dashboard.noteHeader), description: localizations .translate(i18.dashboard.noteDescription), + type: InfoType.info, ), ) ], @@ -174,12 +171,11 @@ class UserDashboardPageState extends LocalizedState { selectedDate: selectedDate ?? DateTime.now(), )); } else { - DigitToast.show(context, - options: DigitToastOptions( - localizations.translate(i18.dashboard.networkFailureError), - true, - DigitTheme.instance.mobileTheme, - )); + Toast.showToast( + context, + message: localizations.translate(i18.dashboard.networkFailureError), + type: ToastType.error, + ); } } } diff --git a/packages/digit_dss/lib/utils/utils.dart b/packages/digit_dss/lib/utils/utils.dart index 08334cf1d..00c407f6d 100644 --- a/packages/digit_dss/lib/utils/utils.dart +++ b/packages/digit_dss/lib/utils/utils.dart @@ -1,11 +1,12 @@ import 'dart:io'; -import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_dss/blocs/app_localization.dart'; import 'package:digit_dss/data/local_store/no_sql/schema/dashboard_config_schema.dart'; import 'package:digit_dss/data/remote/dashboard.dart'; import 'package:digit_dss/models/entities/dashboard_request.dart'; +import 'package:digit_ui_components/theme/digit_theme.dart'; +import 'package:digit_ui_components/theme/spacers.dart'; import 'package:flutter/material.dart'; import 'package:isar/isar.dart'; @@ -43,7 +44,7 @@ Widget buildMetric( width: MediaQuery.of(context).size.width / 3.6, child: Divider( indent: 0, - height: kPadding, + height: spacer1, endIndent: 0, thickness: 2, color: DigitTheme.instance.mobileTheme.colorScheme.outline, diff --git a/packages/digit_dss/lib/widgets/back_navigation_help_header.dart b/packages/digit_dss/lib/widgets/back_navigation_help_header.dart index 619166887..fb2a98f97 100644 --- a/packages/digit_dss/lib/widgets/back_navigation_help_header.dart +++ b/packages/digit_dss/lib/widgets/back_navigation_help_header.dart @@ -1,6 +1,6 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; import 'package:digit_dss/blocs/app_localization.dart'; +import 'package:digit_ui_components/theme/spacers.dart'; import 'package:flutter/material.dart'; import '../../utils/i18_key_constants.dart' as i18; @@ -26,7 +26,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { final theme = Theme.of(context); return Padding( - padding: const EdgeInsets.all(kPadding / 2), + padding: const EdgeInsets.all(spacer1 / 2), child: Row( children: [ Expanded( @@ -55,7 +55,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { ], ), ), - SizedBox(width: showHelp ? kPadding * 2 : 0), + SizedBox(width: showHelp ? spacer2 : 0), if (showHelp) TextButton( style: TextButton.styleFrom(padding: EdgeInsets.zero), diff --git a/packages/digit_dss/lib/widgets/dashboard/dashboard_metric_card.dart b/packages/digit_dss/lib/widgets/dashboard/dashboard_metric_card.dart index ccc4bd3c1..9575ea32d 100644 --- a/packages/digit_dss/lib/widgets/dashboard/dashboard_metric_card.dart +++ b/packages/digit_dss/lib/widgets/dashboard/dashboard_metric_card.dart @@ -1,8 +1,8 @@ import 'package:collection/collection.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/utils/date_utils.dart'; -import 'package:digit_components/widgets/atoms/digit_toaster.dart'; import 'package:digit_dss/widgets/localized.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/utils/date_utils.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -34,135 +34,130 @@ class _DashboardMetricCardState extends LocalizedState { return BlocBuilder( builder: (context, dashboardState) { - return DigitCard( - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Padding( - padding: const EdgeInsets.symmetric( - horizontal: kPadding * 2, - vertical: kPadding * 2, - ), - child: Text( - localizations.translate( - i18.dashboard.dashboardLabel, - ), - style: theme.textTheme.displayMedium, + return DigitCard(children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Padding( + padding: const EdgeInsets.symmetric( + horizontal: spacer2, + vertical: spacer2, + ), + child: Text( + localizations.translate( + i18.dashboard.dashboardLabel, ), + style: theme.textTheme.displayMedium, ), - Expanded( - child: InkWell( - onTap: () async { - bool isConnected = await getIsConnected(); - fetchChartData(isConnected); - }, - child: Container( - alignment: Alignment.centerRight, - padding: const EdgeInsets.only(bottom: 12), - child: Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - Text( - dashboardState.maybeWhen( - orElse: () => '', - fetched: (metricData, tableData, selectedDate, - isNetworkError) => - '${DigitDateUtils.getMonth(selectedDate?.toLocal() ?? DateTime.now())} - ${(selectedDate?.toLocal() ?? DateTime.now()).day}, ${(selectedDate?.toLocal() ?? DateTime.now()).year}'), - style: theme.textTheme.bodyMedium - ?.apply(color: theme.colorScheme.secondary), + ), + Expanded( + child: InkWell( + onTap: () async { + bool isConnected = await getIsConnected(); + fetchChartData(isConnected); + }, + child: Container( + alignment: Alignment.centerRight, + padding: const EdgeInsets.only(bottom: 12), + child: Wrap( + crossAxisAlignment: WrapCrossAlignment.center, + children: [ + Text( + dashboardState.maybeWhen( + orElse: () => '', + fetched: (metricData, tableData, selectedDate, + isNetworkError) => + '${DigitDateUtils.getMonth(selectedDate?.toLocal() ?? DateTime.now())} - ${(selectedDate?.toLocal() ?? DateTime.now()).day}, ${(selectedDate?.toLocal() ?? DateTime.now()).year}'), + style: theme.textTheme.bodyMedium + ?.apply(color: theme.colorScheme.secondary), + ), + const Padding( + padding: EdgeInsets.only(right: 3.0), + child: Visibility( + child: Icon(Icons.arrow_drop_down), ), - const Padding( - padding: EdgeInsets.only(right: 3.0), - child: Visibility( - child: Icon(Icons.arrow_drop_down), - ), - ) - ]), - ), + ) + ]), ), - ) - ], - ), - Padding( - padding: const EdgeInsets.only(top: kPadding, bottom: kPadding), - child: Wrap( - spacing: 2.0, // Space between items - runSpacing: 2.0, // Space between lines - alignment: WrapAlignment.start, - children: [ - ...dashboardState.maybeWhen( - orElse: () => [], - fetched: - (metricData, tableData, selectedDate, isNetworkError) { - return metricData != null - ? metricData.entries - .where((m) => m.value.isHorizontal == true) - .mapIndexed(( - i, - entry, - ) { - return SizedBox( - height: MediaQuery.of(context).size.width / 3.8, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - mainAxisSize: MainAxisSize.min, - children: [ - buildMetric( - context, - entry.key, - entry.value.value, - i, - localizations, - ), - if (entry.key != - metricData.entries.last.key) - VerticalDivider( - width: kPadding, - color: DigitTheme.instance.mobileTheme - .colorScheme.outline, - thickness: 2, - ), - ], - ), - ); - }).toList() - : []; - }), - ...dashboardState.maybeWhen( - orElse: () => [], - fetched: - (metricData, tableData, selectedDate, isNetworkError) { - return metricData != null - ? metricData.entries - .where((m) => m.value.isHorizontal == false) - .mapIndexed(( - i, - entry, - ) { - return Align( - alignment: Alignment.centerLeft, - child: Padding( - padding: const EdgeInsets.symmetric( - vertical: kPadding), - child: Text( - '${entry.value.value} ${localizations.translate(entry.value.header)}', - textAlign: TextAlign.start, - style: DigitTheme.instance.mobileTheme - .textTheme.bodyMedium, + ), + ) + ], + ), + Padding( + padding: const EdgeInsets.only(top: spacer1, bottom: spacer1), + child: Wrap( + spacing: 2.0, // Space between items + runSpacing: 2.0, // Space between lines + alignment: WrapAlignment.start, + children: [ + ...dashboardState.maybeWhen( + orElse: () => [], + fetched: + (metricData, tableData, selectedDate, isNetworkError) { + return metricData != null + ? metricData.entries + .where((m) => m.value.isHorizontal == true) + .mapIndexed(( + i, + entry, + ) { + return SizedBox( + height: MediaQuery.of(context).size.width / 3.8, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.min, + children: [ + buildMetric( + context, + entry.key, + entry.value.value, + i, + localizations, ), + if (entry.key != metricData.entries.last.key) + VerticalDivider( + width: spacer1, + color: DigitTheme.instance.mobileTheme + .colorScheme.outline, + thickness: 2, + ), + ], + ), + ); + }).toList() + : []; + }), + ...dashboardState.maybeWhen( + orElse: () => [], + fetched: + (metricData, tableData, selectedDate, isNetworkError) { + return metricData != null + ? metricData.entries + .where((m) => m.value.isHorizontal == false) + .mapIndexed(( + i, + entry, + ) { + return Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: const EdgeInsets.symmetric( + vertical: spacer1), + child: Text( + '${entry.value.value} ${localizations.translate(entry.value.header)}', + textAlign: TextAlign.start, + style: DigitTheme.instance.mobileTheme + .textTheme.bodyMedium, ), - ); - }).toList() - : []; - }), - ], - ), + ), + ); + }).toList() + : []; + }), + ], ), - ], - )); + ), + ]); }); } @@ -184,11 +179,9 @@ class _DashboardMetricCardState extends LocalizedState { )); } } else { - DigitToast.show(context, - options: DigitToastOptions( - localizations.translate(i18.dashboard.networkFailureError), - true, - DigitTheme.instance.mobileTheme)); + Toast.showToast(context, + message: localizations.translate(i18.dashboard.networkFailureError), + type: ToastType.error); } } } diff --git a/packages/digit_dss/lib/widgets/no_result_card.dart b/packages/digit_dss/lib/widgets/no_result_card.dart index f63d1eb56..7c31a4071 100644 --- a/packages/digit_dss/lib/widgets/no_result_card.dart +++ b/packages/digit_dss/lib/widgets/no_result_card.dart @@ -1,5 +1,5 @@ import 'package:attendance_management/utils/constants.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/theme/spacers.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; @@ -20,7 +20,7 @@ class NoResultCard extends StatelessWidget { return Align( alignment: align, child: Padding( - padding: const EdgeInsets.all(kPadding), + padding: const EdgeInsets.all(spacer1), child: Column( children: [ SvgPicture.asset(noResultSvg), diff --git a/packages/digit_dss/pubspec.lock b/packages/digit_dss/pubspec.lock index cedd55147..f03de929a 100644 --- a/packages/digit_dss/pubspec.lock +++ b/packages/digit_dss/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -60,27 +68,26 @@ packages: attendance_management: dependency: "direct main" description: - name: attendance_management - sha256: f1b4373e8d0d9f8227ede0d25d4141f0d16d18ac2525c0347b844098cdab080f - url: "https://pub.dev" - source: hosted - version: "1.0.2+1" + path: "../attendance_management" + relative: true + source: path + version: "1.0.3-dev.1" auto_route: dependency: "direct main" description: name: auto_route - sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 + sha256: a9001a90539ca3effc168f7e1029a5885c7326b9032c09ac895e303c1d137704 url: "https://pub.dev" source: hosted - version: "7.9.2" + version: "8.3.0" auto_route_generator: dependency: "direct dev" description: name: auto_route_generator - sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" + sha256: ba28133d3a3bf0a66772bcc98dade5843753cd9f1a8fb4802b842895515b67d3 url: "https://pub.dev" source: hosted - version: "7.3.2" + version: "8.0.0" bloc: dependency: transitive description: @@ -141,10 +148,10 @@ packages: dependency: "direct dev" description: name: build_runner - sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" url: "https://pub.dev" source: hosted - version: "2.4.9" + version: "2.4.11" build_runner_core: dependency: transitive description: @@ -169,6 +176,46 @@ packages: url: "https://pub.dev" source: hosted version: "8.9.2" + camera: + dependency: transitive + description: + name: camera + sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167" + url: "https://pub.dev" + source: hosted + version: "0.11.0+2" + camera_android_camerax: + dependency: transitive + description: + name: camera_android_camerax + sha256: "011be2ab0e5b3e3aa8094413fa890f8c5c5afd7cfdaef353a992047d4dab5780" + url: "https://pub.dev" + source: hosted + version: "0.6.8+2" + camera_avfoundation: + dependency: transitive + description: + name: camera_avfoundation + sha256: "2e4c568f70e406ccb87376bc06b53d2f5bebaab71e2fbcc1a950e31449381bcf" + url: "https://pub.dev" + source: hosted + version: "0.9.17+5" + camera_platform_interface: + dependency: transitive + description: + name: camera_platform_interface + sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 + url: "https://pub.dev" + source: hosted + version: "2.8.0" + camera_web: + dependency: transitive + description: + name: camera_web + sha256: "595f28c89d1fb62d77c73c633193755b781c6d2e0ebcd8dc25b763b514e6ba8f" + url: "https://pub.dev" + source: hosted + version: "0.3.5" characters: dependency: transitive description: @@ -225,22 +272,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.18.0" - connectivity_plus: - dependency: transitive - description: - name: connectivity_plus - sha256: "224a77051d52a11fbad53dd57827594d3bd24f945af28bd70bab376d68d437f0" - url: "https://pub.dev" - source: hosted - version: "5.0.2" - connectivity_plus_platform_interface: - dependency: transitive - description: - name: connectivity_plus_platform_interface - sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a - url: "https://pub.dev" - source: hosted - version: "1.2.4" convert: dependency: transitive description: @@ -257,6 +288,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.0" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" + url: "https://pub.dev" + source: hosted + version: "0.3.4+2" crypto: dependency: transitive description: @@ -265,14 +304,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" - cupertino_icons: + csslib: dependency: transitive description: - name: cupertino_icons - sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" url: "https://pub.dev" source: hosted - version: "1.0.8" + version: "1.0.2" dart_mappable: dependency: "direct main" description: @@ -287,7 +326,7 @@ packages: path: "../dart_mappable_builder" relative: true source: path - version: "4.2.0" + version: "4.2.3" dart_style: dependency: transitive description: @@ -312,14 +351,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" - dbus: - dependency: transitive - description: - name: dbus - sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac" - url: "https://pub.dev" - source: hosted - version: "0.7.10" diff_match_patch: dependency: transitive description: @@ -328,21 +359,29 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.1" - digit_components: - dependency: "direct main" - description: - name: digit_components - sha256: "9cca4d9a546037080afe02b6ade82fdf01574e11f5656ad12120fd6966578616" - url: "https://pub.dev" - source: hosted - version: "1.0.1+1" digit_data_model: dependency: "direct main" description: path: "../digit_data_model" relative: true source: path - version: "1.0.4" + version: "1.0.5-dev.1" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" + digit_ui_components: + dependency: "direct main" + description: + path: "flutter/digit-ui-components/digit_components" + ref: version_update + resolved-ref: c68a3ceb1f00c6128780c0cbeb58d9aa8c4d7a13 + url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" + source: git + version: "0.0.1+7" dio: dependency: "direct main" description: @@ -359,14 +398,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" drift: dependency: transitive description: name: drift - sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + sha256: "6acedc562ffeed308049f78fb1906abad3d65714580b6745441ee6d50ec564cd" url: "https://pub.dev" source: hosted - version: "2.15.0" + version: "2.18.0" drift_db_viewer: dependency: transitive description: @@ -379,18 +426,10 @@ packages: dependency: "direct dev" description: name: drift_dev - sha256: c037d9431b6f8dc633652b1469e5f53aaec6e4eb405ed29dd232fa888ef10d88 - url: "https://pub.dev" - source: hosted - version: "2.15.0" - easy_stepper: - dependency: transitive - description: - name: easy_stepper - sha256: "77f3ab4ee3c867b5a2236bf712abb08fed2b1c533cf24cf3fcd46c2821072ffd" + sha256: d9b020736ea85fff1568699ce18b89fabb3f0f042e8a7a05e84a3ec20d39acde url: "https://pub.dev" source: hosted - version: "0.5.2+1" + version: "2.18.0" fake_async: dependency: transitive description: @@ -415,83 +454,131 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" - fixnum: + file_picker: dependency: transitive description: - name: fixnum - sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + name: file_picker + sha256: "2ca051989f69d1b2ca012b2cf3ccf78c70d40144f0861ff2c063493f7c8c3d45" url: "https://pub.dev" source: hosted - version: "1.1.0" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_bloc: - dependency: "direct main" + version: "8.0.5" + file_selector_linux: + dependency: transitive description: - name: flutter_bloc - sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a + name: file_selector_linux + sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" url: "https://pub.dev" source: hosted - version: "8.1.6" - flutter_focus_watcher: + version: "0.9.3+2" + file_selector_macos: dependency: transitive description: - name: flutter_focus_watcher - sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 + name: file_selector_macos + sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc" url: "https://pub.dev" source: hosted - version: "2.0.0" - flutter_keyboard_visibility: + version: "0.9.4+2" + file_selector_platform_interface: dependency: transitive description: - name: flutter_keyboard_visibility - sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b url: "https://pub.dev" source: hosted - version: "5.4.1" - flutter_keyboard_visibility_linux: + version: "2.6.2" + file_selector_windows: dependency: transitive description: - name: flutter_keyboard_visibility_linux - sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" + name: file_selector_windows + sha256: "8f5d2f6590d51ecd9179ba39c64f722edc15226cc93dcc8698466ad36a4a85a4" url: "https://pub.dev" source: hosted - version: "1.0.0" - flutter_keyboard_visibility_macos: + version: "0.9.3+3" + firebase_core: dependency: transitive description: - name: flutter_keyboard_visibility_macos - sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" url: "https://pub.dev" source: hosted - version: "1.0.0" - flutter_keyboard_visibility_platform_interface: + version: "2.32.0" + firebase_core_platform_interface: dependency: transitive description: - name: flutter_keyboard_visibility_platform_interface - sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 url: "https://pub.dev" source: hosted - version: "2.0.0" - flutter_keyboard_visibility_web: + version: "5.3.1" + firebase_core_web: dependency: transitive description: - name: flutter_keyboard_visibility_web - sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" url: "https://pub.dev" source: hosted - version: "2.0.0" - flutter_keyboard_visibility_windows: + version: "2.17.5" + firebase_crashlytics: dependency: transitive description: - name: flutter_keyboard_visibility_windows - sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_bloc: + dependency: "direct main" + description: + name: flutter_bloc + sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a + url: "https://pub.dev" + source: hosted + version: "8.1.6" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" flutter_lints: dependency: "direct dev" description: @@ -500,6 +587,19 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.3" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda" + url: "https://pub.dev" + source: hosted + version: "2.0.22" flutter_spinkit: dependency: transitive description: @@ -508,27 +608,27 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" flutter_svg: dependency: "direct main" description: name: flutter_svg - sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c + sha256: "54900a1a1243f3c4a5506d853a2b5c2dbc38d5f27e52a52618a8054401431123" url: "https://pub.dev" source: hosted - version: "2.0.9" + version: "2.0.16" flutter_test: dependency: "direct dev" description: flutter source: sdk version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" flutter_web_plugins: dependency: transitive description: flutter @@ -566,6 +666,54 @@ packages: url: "https://pub.dev" source: hosted version: "3.2.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" + url: "https://pub.dev" + source: hosted + version: "4.6.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" + url: "https://pub.dev" + source: hosted + version: "2.3.8+1" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -578,10 +726,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: "6b6f10f0ce3c42f6552d1c70d2c28d764cf22bb487f50f66cca31dcd5194f4d6" + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 url: "https://pub.dev" source: hosted - version: "4.0.4" + version: "6.2.1" graphs: dependency: transitive description: @@ -598,14 +746,22 @@ packages: url: "https://pub.dev" source: hosted version: "4.3.1" + html: + dependency: transitive + description: + name: html + sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" + url: "https://pub.dev" + source: hosted + version: "0.15.5" http: dependency: transitive description: name: http - sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "0.13.6" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -622,14 +778,78 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a" + url: "https://pub.dev" + source: hosted + version: "1.1.2" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "8c5abf0dcc24fe6e8e0b4a5c0b51a5cf30cefdf6407a3213dae61edc75a70f56" + url: "https://pub.dev" + source: hosted + version: "0.8.12+12" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83" + url: "https://pub.dev" + source: hosted + version: "3.0.6" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: "4f0568120c6fcc0aaa04511cb9f9f4d29fc3d0139884b1d06be88dcec7641d6b" + url: "https://pub.dev" + source: hosted + version: "0.8.12+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: "9ec26d410ff46f483c5519c29c02ef0e02e13a543f882b152d4bfd2f06802f80" + url: "https://pub.dev" + source: hosted + version: "2.10.0" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" intl: dependency: "direct main" description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" io: dependency: transitive description: @@ -686,6 +906,30 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -698,26 +942,26 @@ packages: dependency: transitive description: name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.0" location_web: dependency: transitive description: name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + sha256: "49dda13d415c4603c5775a33fb22f575e0aa3f0ec2916644ddcd722db31ee884" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "5.0.2" logging: dependency: transitive description: @@ -730,34 +974,34 @@ packages: dependency: transitive description: name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "3.1.3" matcher: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -782,14 +1026,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" - nm: - dependency: transitive - description: - name: nm - sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" - url: "https://pub.dev" - source: hosted - version: "0.5.0" node_preamble: dependency: transitive description: @@ -818,26 +1054,34 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "8.0.2" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.1" path: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_parsing: dependency: transitive description: @@ -918,14 +1162,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" pool: dependency: transitive description: @@ -958,22 +1194,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 - url: "https://pub.dev" - source: hosted - version: "0.8.1" reactive_forms: dependency: "direct main" description: name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "17.0.1" recase: dependency: transitive description: @@ -982,14 +1210,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" - remove_emoji_input_formatter: - dependency: transitive - description: - name: remove_emoji_input_formatter - sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" - url: "https://pub.dev" - source: hosted - version: "0.0.1+1" shelf: dependency: transitive description: @@ -1067,6 +1287,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqlite3: dependency: transitive description: @@ -1087,10 +1315,10 @@ packages: dependency: transitive description: name: sqlparser - sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" + sha256: ade9a67fd70d0369329ed3373208de7ebd8662470e8c396fc8d0d60f9acdfc9f url: "https://pub.dev" source: hosted - version: "0.34.1" + version: "0.36.0" stack_trace: dependency: transitive description: @@ -1135,26 +1363,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" time: dependency: transitive description: @@ -1187,38 +1415,118 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + url_launcher: + dependency: transitive + description: + name: url_launcher + sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" + url: "https://pub.dev" + source: hosted + version: "6.3.1" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79 + url: "https://pub.dev" + source: hosted + version: "6.3.9" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2" + url: "https://pub.dev" + source: hosted + version: "3.2.2" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" + url: "https://pub.dev" + source: hosted + version: "2.3.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4" + url: "https://pub.dev" + source: hosted + version: "3.1.3" uuid: dependency: transitive description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.5.1" vector_graphics: dependency: transitive description: name: vector_graphics - sha256: "4ac59808bbfca6da38c99f415ff2d3a5d7ca0a6b4809c71d9cf30fba5daf9752" + sha256: "27d5fefe86fb9aace4a9f8375b56b3c292b64d8c04510df230f849850d912cb7" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.15" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: f3247e7ab0ec77dc759263e68394990edc608fb2b480b80db8aa86ed09279e33 + sha256: "2430b973a4ca3c4dbc9999b62b8c719a160100dcbae5c819bae0cacce32c9cdb" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.12" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "18489bdd8850de3dd7ca8a34e0c446f719ec63e2bab2e7a8cc66a9028dd76c5a" + sha256: "1b4b9e706a10294258727674a340ae0d6e64a7231980f9f9a3d12e4b42407aad" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.16" vector_math: dependency: transitive description: @@ -1227,14 +1535,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" vm_service: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1247,10 +1563,10 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.5.1" web_socket_channel: dependency: transitive description: @@ -1308,5 +1624,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <3.9.0" - flutter: ">=3.16.0" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.22.0" diff --git a/packages/digit_dss/pubspec.yaml b/packages/digit_dss/pubspec.yaml index a147ea951..fda0661cf 100644 --- a/packages/digit_dss/pubspec.yaml +++ b/packages/digit_dss/pubspec.yaml @@ -11,7 +11,11 @@ environment: dependencies: flutter: sdk: flutter - digit_components: ^1.0.1+1 + digit_ui_components: + git: + url: https://github.com/egovernments/DIGIT-UI-LIBRARIES + ref: version_update + path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 reactive_forms: ^17.0.0 intl: ^0.19.0 diff --git a/packages/digit_scanner/example/pubspec.lock b/packages/digit_scanner/example/pubspec.lock index 7e0d04aeb..051c604e8 100644 --- a/packages/digit_scanner/example/pubspec.lock +++ b/packages/digit_scanner/example/pubspec.lock @@ -233,6 +233,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + charcode: + dependency: transitive + description: + name: charcode + sha256: fb0f1107cac15a5ea6ef0a6ef71a807b9e4267c713bb93e00e92d737cc8dbd8a + url: "https://pub.dev" + source: hosted + version: "1.4.0" checked_yaml: dependency: transitive description: @@ -289,6 +297,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.5" + csslib: + dependency: transitive + description: + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" + url: "https://pub.dev" + source: hosted + version: "1.0.2" cupertino_icons: dependency: "direct main" description: @@ -319,6 +335,23 @@ packages: relative: true source: path version: "1.0.4" + digit_ui_components: + dependency: transitive + description: + path: "flutter/digit-ui-components/digit_components" + ref: version_update + resolved-ref: c68a3ceb1f00c6128780c0cbeb58d9aa8c4d7a13 + url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" + source: git + version: "0.0.1+7" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" easy_stepper: dependency: transitive description: @@ -351,6 +384,46 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.0" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: "16dc141db5a2ccc6520ebb6a2eb5945b1b09e95085c021d9f914f8ded7f1465c" + url: "https://pub.dev" + source: hosted + version: "8.1.4" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc" + url: "https://pub.dev" + source: hosted + version: "0.9.4+2" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "8f5d2f6590d51ecd9179ba39c64f722edc15226cc93dcc8698466ad36a4a85a4" + url: "https://pub.dev" + source: hosted + version: "0.9.3+3" fixnum: dependency: transitive description: @@ -372,6 +445,30 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.6" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" flutter_focus_watcher: dependency: transitive description: @@ -457,6 +554,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" flutter_svg: dependency: transitive description: @@ -507,6 +612,54 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" + url: "https://pub.dev" + source: hosted + version: "4.6.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" + url: "https://pub.dev" + source: hosted + version: "2.3.8+1" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -563,6 +716,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.3.1" + html: + dependency: transitive + description: + name: html + sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" + url: "https://pub.dev" + source: hosted + version: "0.15.5" http: dependency: transitive description: @@ -587,6 +748,70 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a" + url: "https://pub.dev" + source: hosted + version: "1.1.2" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "8c5abf0dcc24fe6e8e0b4a5c0b51a5cf30cefdf6407a3213dae61edc75a70f56" + url: "https://pub.dev" + source: hosted + version: "0.8.12+12" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83" + url: "https://pub.dev" + source: hosted + version: "3.0.6" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: "4f0568120c6fcc0aaa04511cb9f9f4d29fc3d0139884b1d06be88dcec7641d6b" + url: "https://pub.dev" + source: hosted + version: "0.8.12+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: "9ec26d410ff46f483c5519c29c02ef0e02e13a543f882b152d4bfd2f06802f80" + url: "https://pub.dev" + source: hosted + version: "2.10.0" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" intl: dependency: transitive description: @@ -771,6 +996,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.0" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_parsing: dependency: transitive description: @@ -1024,6 +1257,86 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + url_launcher: + dependency: transitive + description: + name: url_launcher + sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" + url: "https://pub.dev" + source: hosted + version: "6.3.1" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79 + url: "https://pub.dev" + source: hosted + version: "6.3.9" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2" + url: "https://pub.dev" + source: hosted + version: "3.2.2" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" + url: "https://pub.dev" + source: hosted + version: "2.3.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4" + url: "https://pub.dev" + source: hosted + version: "3.1.3" uuid: dependency: transitive description: @@ -1064,6 +1377,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" vm_service: dependency: transitive description: diff --git a/packages/digit_scanner/lib/pages/qr_scanner.dart b/packages/digit_scanner/lib/pages/qr_scanner.dart index dce6af5b1..c0eebb623 100644 --- a/packages/digit_scanner/lib/pages/qr_scanner.dart +++ b/packages/digit_scanner/lib/pages/qr_scanner.dart @@ -3,10 +3,11 @@ import 'dart:io'; import 'package:audioplayers/audioplayers.dart'; import 'package:auto_route/auto_route.dart'; import 'package:camera/camera.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/atoms/digit_toaster.dart'; import 'package:digit_scanner/utils/scanner_utils.dart'; import 'package:digit_scanner/widgets/localized.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/atoms/input_wrapper.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:google_mlkit_barcode_scanning/google_mlkit_barcode_scanning.dart'; @@ -96,8 +97,8 @@ class _DigitScannerPageState extends LocalizedState { ), ), Positioned( - top: kPadding * 1.5, - left: kPadding, + top: spacer1 * 1.5, + left: spacer1, child: SizedBox( child: InkWell( onTap: () async { @@ -165,7 +166,7 @@ class _DigitScannerPageState extends LocalizedState { mainAxisAlignment: MainAxisAlignment.center, children: [ Padding( - padding: const EdgeInsets.only(top: kPadding), + padding: const EdgeInsets.only(top: spacer1), child: Text( localizations.translate( i18.scanner.manualScan, @@ -190,7 +191,7 @@ class _DigitScannerPageState extends LocalizedState { }, child: Padding( padding: - const EdgeInsets.only(top: kPadding), + const EdgeInsets.only(top: spacer1), child: Text( localizations.translate( i18.scanner.enterManualCode, @@ -212,37 +213,42 @@ class _DigitScannerPageState extends LocalizedState { bottom: 0, width: MediaQuery.of(context).size.width, child: DigitCard( - margin: const EdgeInsets.only(top: kPadding), + margin: const EdgeInsets.only(top: spacer1), padding: const EdgeInsets.fromLTRB( - kPadding, 0, kPadding, 0), - child: DigitElevatedButton( - child: Text(localizations - .translate(i18.common.coreCommonSubmit)), - onPressed: () async { - if (widget.isGS1code && - result.length < widget.quantity) { - DigitScannerUtils().buildDialog( - context, - localizations, - widget.quantity, - ); - } else { - final bloc = context.read(); - bloc.add(DigitScannerEvent.handleScanner( - barCode: state.barCodes, - qrCode: state.qrCodes, - )); - Navigator.of( - context, - ).pop(); - } - }, - ), + spacer1, 0, spacer1, 0), + children: [ + DigitButton( + label: localizations + .translate(i18.common.coreCommonSubmit), + size: DigitButtonSize.large, + type: DigitButtonType.primary, + onPressed: () async { + if (widget.isGS1code && + result.length < widget.quantity) { + DigitScannerUtils().buildDialog( + context, + localizations, + widget.quantity, + ); + } else { + final bloc = + context.read(); + bloc.add(DigitScannerEvent.handleScanner( + barCode: state.barCodes, + qrCode: state.qrCodes, + )); + Navigator.of( + context, + ).pop(); + } + }, + ), + ], ), ), Positioned( - bottom: (kPadding * 7.5), + bottom: (spacer1 * 7.5), height: widget.isGS1code ? state.barCodes.length < 3 ? (state.barCodes.length * 60) + 80 @@ -257,8 +263,8 @@ class _DigitScannerPageState extends LocalizedState { decoration: BoxDecoration( color: theme.colorScheme.onError, borderRadius: const BorderRadius.only( - topLeft: Radius.circular(kPadding + 4), - topRight: Radius.circular(kPadding + 4), + topLeft: Radius.circular(spacer1 + 4), + topRight: Radius.circular(spacer1 + 4), ), ), child: Column( @@ -269,14 +275,14 @@ class _DigitScannerPageState extends LocalizedState { decoration: BoxDecoration( color: theme.colorScheme.onError, borderRadius: const BorderRadius.only( - topLeft: Radius.circular(kPadding * 2), - topRight: Radius.circular(kPadding * 2), + topLeft: Radius.circular(spacer2), + topRight: Radius.circular(spacer2), ), ), padding: const EdgeInsets.only( - bottom: kPadding * 2, - top: kPadding * 2, - left: kPadding * 3, + bottom: spacer2, + top: spacer2, + left: spacer3, ), width: MediaQuery.of(context).size.width, child: widget.isGS1code @@ -300,13 +306,13 @@ class _DigitScannerPageState extends LocalizedState { shape: const Border(), title: Container( margin: const EdgeInsets.only( - left: kPadding, - right: kPadding, + left: spacer1, + right: spacer1, ), - height: kPadding * 6, + height: spacer6, decoration: BoxDecoration( - color: DigitTheme.instance - .colorScheme.surface, + color: DigitTheme + .instance.colorScheme.surface, border: Border.all( color: DigitTheme .instance.colorScheme.outline, @@ -318,7 +324,7 @@ class _DigitScannerPageState extends LocalizedState { ), ), padding: - const EdgeInsets.all(kPadding), + const EdgeInsets.all(spacer1), child: Row( crossAxisAlignment: CrossAxisAlignment.end, @@ -408,91 +414,99 @@ class _DigitScannerPageState extends LocalizedState { form: () => buildForm(), builder: (context, form, child) { return DigitCard( - child: ScrollableContent( - backgroundColor: theme.colorScheme.onError, - header: GestureDetector( - onTap: () { - setState(() { - manualCode = false; - initializeCameras(); - }); - }, - child: const Align( - alignment: Alignment.topRight, - child: Icon(Icons.close), - ), - ), - footer: DigitElevatedButton( - onPressed: () async { - if (form - .control(_manualCodeFormKey) - .value == - null || - form - .control(_manualCodeFormKey) - .value - .toString() - .trim() - .isEmpty) { - DigitToast.show(context, - options: DigitToastOptions( - localizations.translate( - i18.scanner.enterManualCode), - true, - theme, - )); - } else { - final bloc = - context.read(); - codes.add(form - .control(_manualCodeFormKey) - .value); - bloc.add( - DigitScannerEvent.handleScanner( - barCode: state.barCodes, - qrCode: codes, - ), - ); - if (widget.isGS1code && - result.length < widget.quantity) { - DigitScannerUtils().buildDialog( - context, - localizations, - widget.quantity, - ); - } - + children: [ + ScrollableContent( + backgroundColor: theme.colorScheme.onError, + header: GestureDetector( + onTap: () { setState(() { manualCode = false; initializeCameras(); }); - } - }, - child: Text(localizations.translate( - i18.common.coreCommonSubmit, - )), - ), - children: [ - Align( - alignment: Alignment.topLeft, - child: Text( - localizations.translate( - i18.scanner.enterManualCode, - ), - style: theme.textTheme.headlineLarge, + }, + child: const Align( + alignment: Alignment.topRight, + child: Icon(Icons.close), ), ), - const SizedBox( - height: kPadding * 2, - ), - DigitTextFormField( - formControlName: _manualCodeFormKey, + footer: DigitButton( + onPressed: () async { + if (form + .control(_manualCodeFormKey) + .value == + null || + form + .control(_manualCodeFormKey) + .value + .toString() + .trim() + .isEmpty) { + Toast.showToast( + context, + type: ToastType.error, + message: localizations.translate( + i18.scanner.enterManualCode), + ); + } else { + final bloc = + context.read(); + codes.add(form + .control(_manualCodeFormKey) + .value); + bloc.add( + DigitScannerEvent.handleScanner( + barCode: state.barCodes, + qrCode: codes, + ), + ); + if (widget.isGS1code && + result.length < widget.quantity) { + DigitScannerUtils().buildDialog( + context, + localizations, + widget.quantity, + ); + } + + setState(() { + manualCode = false; + initializeCameras(); + }); + } + }, + type: DigitButtonType.primary, + size: DigitButtonSize.large, label: localizations.translate( - i18.scanner.resourceCode, + i18.common.coreCommonSubmit, ), ), - ], - ), + children: [ + Align( + alignment: Alignment.topLeft, + child: Text( + localizations.translate( + i18.scanner.enterManualCode, + ), + style: theme.textTheme.headlineLarge, + ), + ), + const SizedBox( + height: spacer2, + ), + ReactiveWrapperField( + formControlName: _manualCodeFormKey, + builder: (field) { + return InputField( + label: localizations.translate( + i18.scanner.resourceCode, + ), + type: InputType.text, + ); + }, + ), + ], + ) + ], ); }); }) diff --git a/packages/digit_scanner/pubspec.lock b/packages/digit_scanner/pubspec.lock index 734fc9e7d..bb03229f1 100644 --- a/packages/digit_scanner/pubspec.lock +++ b/packages/digit_scanner/pubspec.lock @@ -265,6 +265,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + charcode: + dependency: transitive + description: + name: charcode + sha256: fb0f1107cac15a5ea6ef0a6ef71a807b9e4267c713bb93e00e92d737cc8dbd8a + url: "https://pub.dev" + source: hosted + version: "1.4.0" checked_yaml: dependency: transitive description: @@ -329,6 +337,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.5" + csslib: + dependency: transitive + description: + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" + url: "https://pub.dev" + source: hosted + version: "1.0.2" cupertino_icons: dependency: "direct main" description: @@ -369,7 +385,7 @@ packages: source: hosted version: "0.4.1" digit_components: - dependency: "direct main" + dependency: "direct overridden" description: path: "../digit_components" relative: true @@ -382,6 +398,23 @@ packages: relative: true source: path version: "0.0.1" + digit_ui_components: + dependency: "direct main" + description: + path: "flutter/digit-ui-components/digit_components" + ref: version_update + resolved-ref: c68a3ceb1f00c6128780c0cbeb58d9aa8c4d7a13 + url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" + source: git + version: "0.0.1+7" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" easy_stepper: dependency: transitive description: @@ -414,6 +447,46 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.0" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: "16dc141db5a2ccc6520ebb6a2eb5945b1b09e95085c021d9f914f8ded7f1465c" + url: "https://pub.dev" + source: hosted + version: "8.1.4" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc" + url: "https://pub.dev" + source: hosted + version: "0.9.4+2" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "8f5d2f6590d51ecd9179ba39c64f722edc15226cc93dcc8698466ad36a4a85a4" + url: "https://pub.dev" + source: hosted + version: "0.9.3+3" firebase_core: dependency: transitive description: @@ -475,6 +548,30 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.6" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" flutter_focus_watcher: dependency: transitive description: @@ -560,6 +657,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" flutter_svg: dependency: "direct main" description: @@ -618,6 +723,54 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" + url: "https://pub.dev" + source: hosted + version: "4.6.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" + url: "https://pub.dev" + source: hosted + version: "2.3.8+1" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -674,6 +827,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.3.1" + html: + dependency: transitive + description: + name: html + sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" + url: "https://pub.dev" + source: hosted + version: "0.15.5" http: dependency: transitive description: @@ -698,6 +859,70 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a" + url: "https://pub.dev" + source: hosted + version: "1.1.2" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "8c5abf0dcc24fe6e8e0b4a5c0b51a5cf30cefdf6407a3213dae61edc75a70f56" + url: "https://pub.dev" + source: hosted + version: "0.8.12+12" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83" + url: "https://pub.dev" + source: hosted + version: "3.0.6" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: "4f0568120c6fcc0aaa04511cb9f9f4d29fc3d0139884b1d06be88dcec7641d6b" + url: "https://pub.dev" + source: hosted + version: "0.8.12+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: "9ec26d410ff46f483c5519c29c02ef0e02e13a543f882b152d4bfd2f06802f80" + url: "https://pub.dev" + source: hosted + version: "2.10.0" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" intl: dependency: transitive description: @@ -906,6 +1131,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.0" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_parsing: dependency: transitive description: @@ -1035,7 +1268,7 @@ packages: source: hosted version: "2.1.1" reactive_forms: - dependency: transitive + dependency: "direct main" description: name: reactive_forms sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" @@ -1231,6 +1464,86 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + url_launcher: + dependency: transitive + description: + name: url_launcher + sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" + url: "https://pub.dev" + source: hosted + version: "6.3.1" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79 + url: "https://pub.dev" + source: hosted + version: "6.3.9" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2" + url: "https://pub.dev" + source: hosted + version: "3.2.2" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" + url: "https://pub.dev" + source: hosted + version: "2.3.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4" + url: "https://pub.dev" + source: hosted + version: "3.1.3" uuid: dependency: transitive description: @@ -1271,6 +1584,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" vm_service: dependency: transitive description: diff --git a/packages/digit_scanner/pubspec.yaml b/packages/digit_scanner/pubspec.yaml index e0c17455f..c71212aac 100644 --- a/packages/digit_scanner/pubspec.yaml +++ b/packages/digit_scanner/pubspec.yaml @@ -37,9 +37,13 @@ dependencies: cupertino_icons: ^1.0.2 google_mlkit_barcode_scanning: ^0.12.0 camera: ^0.11.0+1 + digit_ui_components: + git: + url: https://github.com/egovernments/DIGIT-UI-LIBRARIES + ref: version_update + path: ./flutter/digit-ui-components/digit_components + reactive_forms: ^17.0.0 gs1_barcode_parser: ^1.0.5 - digit_components: - path: ../digit_components flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 overlay_builder: ^1.1.0 From 0caab372ee8636a1739271ef64fd5459da451065 Mon Sep 17 00:00:00 2001 From: rachana-egov Date: Wed, 11 Dec 2024 15:42:26 +0530 Subject: [PATCH 186/241] updated inventory package with new components --- .../lib/pages/acknowledgement.dart | 91 +- .../lib/pages/facility_selection.dart | 38 +- .../lib/pages/manage_stocks.dart | 51 +- .../lib/pages/record_stock/stock_details.dart | 1228 +++++++++-------- .../pages/record_stock/warehouse_details.dart | 515 ++++--- .../lib/pages/reports/report_details.dart | 149 +- .../lib/pages/reports/report_selection.dart | 59 +- .../stock_reconciliation.dart | 627 ++++----- .../widgets/back_navigation_help_header.dart | 6 +- .../no_facilities_assigned_dialog.dart | 52 +- .../widgets/reports/readonly_pluto_grid.dart | 13 +- packages/inventory_management/pubspec.lock | 181 +-- packages/inventory_management/pubspec.yaml | 8 +- 13 files changed, 1440 insertions(+), 1578 deletions(-) diff --git a/packages/inventory_management/lib/pages/acknowledgement.dart b/packages/inventory_management/lib/pages/acknowledgement.dart index ba8b1124d..875cf9485 100644 --- a/packages/inventory_management/lib/pages/acknowledgement.dart +++ b/packages/inventory_management/lib/pages/acknowledgement.dart @@ -1,5 +1,7 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/panel_cards.dart'; import 'package:flutter/material.dart'; import '../utils/i18_key_constants.dart' as i18; import '../widgets/localized.dart'; @@ -31,26 +33,48 @@ class AcknowledgementPageState final theme = Theme.of(context); return Scaffold( - body: DigitAcknowledgement.success( - description: widget.description ?? + body: PanelCard( + title: widget.label ?? localizations.translate( - i18.acknowledgementSuccess.acknowledgementDescriptionText, + i18.acknowledgementSuccess.acknowledgementLabelText, ), - descriptionWidget: widget.isDataRecordSuccess - ? DigitTableCard( - element: widget.descriptionTableData ?? {}, - ) - : null, - label: widget.label ?? + type: PanelType.success, + description: widget.description ?? localizations.translate( - i18.acknowledgementSuccess.acknowledgementLabelText, + i18.acknowledgementSuccess.acknowledgementDescriptionText, ), - action: () { - context.router.maybePop(); - }, - enableBackToSearch: widget.isDataRecordSuccess ? false : true, - actionLabel: - localizations.translate(i18.acknowledgementSuccess.actionLabelText), + /// TODO: need to update this as listview card + // additionWidgets: widget.isDataRecordSuccess + // ? DigitTableCard( + // element: widget.descriptionTableData ?? {}, + // ) + // : null, + actions: [ + DigitButton( + label: localizations.translate(i18.acknowledgementSuccess.actionLabelText), + onPressed: () { + context.router.maybePop(); + }, + type: DigitButtonType.primary, + size: DigitButtonSize.large), + if(!widget.isDataRecordSuccess) + DigitButton( + label: localizations + .translate(i18.acknowledgementSuccess.actionLabelText), + onPressed: () { + final parent = context.router.parent() as StackRouter; + // Pop twice to navigate back to the previous screen + parent.popUntilRoot(); + }, + type: DigitButtonType.secondary, + size: DigitButtonSize.large), + ], + // action: () { + // context.router.maybePop(); + // }, + // enableBackToSearch: widget.isDataRecordSuccess ? false : true, + // actionLabel: + // localizations.translate(i18.acknowledgementSuccess.actionLabelText), ), bottomNavigationBar: Offstage( offstage: !widget.isDataRecordSuccess, @@ -58,13 +82,13 @@ class AcknowledgementPageState child: SizedBox( height: 150, child: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB(kPadding, 0, kPadding, 0), - child: Column( - children: [ - DigitElevatedButton( - child: Text(localizations - .translate(i18.acknowledgementSuccess.goToHome)), + margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), + children: [ + DigitButton( + size: DigitButtonSize.large, + type: DigitButtonType.secondary, + label: localizations + .translate(i18.acknowledgementSuccess.goToHome), onPressed: () { context.router.popUntilRoot(); }, @@ -72,32 +96,19 @@ class AcknowledgementPageState const SizedBox( height: 12, ), - DigitOutLineButton( + DigitButton( + size: DigitButtonSize.large, + type: DigitButtonType.primary, onPressed: () { context.router.popUntilRoot(); }, label: localizations .translate(i18.acknowledgementSuccess.downloadmoredata), - buttonStyle: OutlinedButton.styleFrom( - backgroundColor: Colors.white, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.zero, - ), - side: BorderSide( - width: 1.0, - color: theme.colorScheme.secondary, - ), - minimumSize: Size( - MediaQuery.of(context).size.width, - 50, - ), - ), ), ], ), ), ), - ), ); } } diff --git a/packages/inventory_management/lib/pages/facility_selection.dart b/packages/inventory_management/lib/pages/facility_selection.dart index 08b6d667f..ec46e9483 100644 --- a/packages/inventory_management/lib/pages/facility_selection.dart +++ b/packages/inventory_management/lib/pages/facility_selection.dart @@ -1,7 +1,9 @@ import 'package:auto_route/auto_route.dart'; import 'package:collection/collection.dart'; -import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:inventory_management/utils/constants.dart'; import 'package:inventory_management/widgets/localized.dart'; @@ -67,11 +69,11 @@ class InventoryFacilitySelectionPageState color: Colors.white, child: Padding( padding: const EdgeInsets.symmetric( - horizontal: kPadding * 2), + horizontal: spacer4), child: Column( children: [ Padding( - padding: const EdgeInsets.all(kPadding), + padding: const EdgeInsets.all(spacer2), child: Align( alignment: Alignment.topLeft, child: Text( @@ -83,13 +85,15 @@ class InventoryFacilitySelectionPageState ), ), ), - const DigitTextFormField( - suffix: Padding( - padding: EdgeInsets.all(kPadding), - child: Icon(Icons.search), - ), - label: '', - formControlName: _facilityName, + ReactiveWrapperField( + formControlName: _facilityName, + builder: (field) { + return DigitSearchFormInput( + onChange: (value){ + field.control.value = value; + }, + ); + } ), ], ), @@ -104,13 +108,12 @@ class InventoryFacilitySelectionPageState return Container( color: Colors.white, padding: const EdgeInsets.symmetric( - horizontal: kPadding), + horizontal: spacer2), child: Container( margin: const EdgeInsets.symmetric( - horizontal: kPadding), + horizontal: spacer2), decoration: BoxDecoration( - color: - DigitTheme.instance.colors.alabasterWhite, + color:Theme.of(context).colorTheme.paper.secondary, border: Border( top: index == 0 ? borderSide : BorderSide.none, @@ -126,10 +129,9 @@ class InventoryFacilitySelectionPageState Navigator.of(context).pop(facility); }, child: Container( - margin: const EdgeInsets.all(kPadding), + margin: const EdgeInsets.all(spacer2), decoration: BoxDecoration( - color: DigitTheme - .instance.colors.alabasterWhite, + color: Theme.of(context).colorTheme.paper.secondary, border: Border( bottom: BorderSide( color: theme.colorScheme.outline, @@ -138,7 +140,7 @@ class InventoryFacilitySelectionPageState ), ), child: Padding( - padding: const EdgeInsets.all(kPadding * 2), + padding: const EdgeInsets.all(spacer4), child: Text( localizations.translate( '$facilityPrefix${facility.id}'), diff --git a/packages/inventory_management/lib/pages/manage_stocks.dart b/packages/inventory_management/lib/pages/manage_stocks.dart index 8730c8634..da1cf9b00 100644 --- a/packages/inventory_management/lib/pages/manage_stocks.dart +++ b/packages/inventory_management/lib/pages/manage_stocks.dart @@ -1,5 +1,7 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/atoms/menu_card.dart'; +import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:inventory_management/router/inventory_router.gm.dart'; @@ -39,7 +41,7 @@ class ManageStocksPageState extends LocalizedState { children: [ Padding( padding: const EdgeInsets.fromLTRB( - kPadding * 2, kPadding, kPadding * 2, kPadding), + spacer4, spacer2, spacer4, spacer2), child: Align( alignment: Alignment.topLeft, child: Text( @@ -50,14 +52,13 @@ class ManageStocksPageState extends LocalizedState { ), ), Column(children: [ - DigitListView( - title: localizations + MenuCard( + heading: localizations .translate(i18.manageStock.recordStockReceiptLabel), description: localizations .translate(i18.manageStock.recordStockReceiptDescription), - prefixIcon: Icons.file_download_outlined, - sufixIcon: Icons.arrow_circle_right, - onPressed: () { + icon: Icons.file_download_outlined, + onTap: () { context.router.push( RecordStockWrapperRoute( type: StockRecordEntryType.receipt, @@ -65,53 +66,49 @@ class ManageStocksPageState extends LocalizedState { ); }, ), - DigitListView( - title: localizations + MenuCard( + heading: localizations .translate(i18.manageStock.recordStockIssuedLabel), description: localizations.translate( i18.manageStock.recordStockIssuedDescription), - prefixIcon: Icons.file_upload_outlined, - sufixIcon: Icons.arrow_circle_right, - onPressed: () => context.router.push( + icon: Icons.file_upload_outlined, + onTap: () => context.router.push( RecordStockWrapperRoute( type: StockRecordEntryType.dispatch, ), )), - DigitListView( - title: localizations + MenuCard( + heading: localizations .translate(i18.manageStock.recordStockReturnedLabel), description: localizations.translate( i18.manageStock.recordStockReturnedDescription, ), - prefixIcon: Icons.settings_backup_restore, - sufixIcon: Icons.arrow_circle_right, - onPressed: () => context.router.push( + icon: Icons.settings_backup_restore, + onTap: () => context.router.push( RecordStockWrapperRoute( type: StockRecordEntryType.returned, ), )), - DigitListView( - title: localizations + MenuCard( + heading: localizations .translate(i18.manageStock.recordStockDamagedLabel), description: localizations.translate( i18.manageStock.recordStockDamagedDescription, ), - prefixIcon: Icons.store, - sufixIcon: Icons.arrow_circle_right, - onPressed: () => context.router.push( + icon: Icons.store, + onTap: () => context.router.push( RecordStockWrapperRoute( type: StockRecordEntryType.damaged, ), )), - DigitListView( - title: localizations + MenuCard( + heading: localizations .translate(i18.manageStock.recordStockLossLabel), description: localizations.translate( i18.manageStock.recordStockDamagedDescription, ), - prefixIcon: Icons.store, - sufixIcon: Icons.arrow_circle_right, - onPressed: () => context.router.push( + icon: Icons.store, + onTap: () => context.router.push( RecordStockWrapperRoute( type: StockRecordEntryType.loss, ), diff --git a/packages/inventory_management/lib/pages/record_stock/stock_details.dart b/packages/inventory_management/lib/pages/record_stock/stock_details.dart index d8aff70b6..dcfc4496e 100644 --- a/packages/inventory_management/lib/pages/record_stock/stock_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/stock_details.dart @@ -1,10 +1,15 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/atoms/digit_toaster.dart'; -import 'package:digit_components/widgets/digit_sync_dialog.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_scanner/blocs/scanner.dart'; import 'package:digit_scanner/pages/qr_scanner.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/services/location_bloc.dart'; +import 'package:digit_ui_components/utils/component_utils.dart'; +import 'package:digit_ui_components/widgets/atoms/input_wrapper.dart'; +import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; +import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:gs1_barcode_parser/gs1_barcode_parser.dart'; @@ -46,6 +51,7 @@ class StockDetailsPageState extends LocalizedState { List transportTypes = []; List scannedResources = []; + TextEditingController controller1 = TextEditingController(); FormGroup _form(StockRecordEntryType stockType) { return fb.group({ @@ -199,87 +205,78 @@ class StockDetailsPageState extends LocalizedState { }, ), ]), - enableFixedButton: true, + enableFixedDigitButton: true, footer: DigitCard( - margin: const EdgeInsets.fromLTRB(0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB( - kPadding, - 0, - kPadding, - 0, - ), - child: ReactiveFormConsumer( - builder: (context, form, child) { - if (form - .control(_deliveryTeamKey) - .value - .toString() - .isEmpty || - form.control(_deliveryTeamKey).value == null || - scannerState.qrCodes.isNotEmpty) { - form.control(_deliveryTeamKey).value = - scannerState.qrCodes.isNotEmpty - ? scannerState.qrCodes.last - : ''; - } - return DigitElevatedButton( - onPressed: !form.valid - ? null - : () async { + margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), + children: [ + ReactiveFormConsumer( + builder: (context, form, child) { + if (form + .control(_deliveryTeamKey) + .value + .toString() + .isEmpty || + form.control(_deliveryTeamKey).value == null || + scannerState.qrCodes.isNotEmpty) { + form.control(_deliveryTeamKey).value = + scannerState.qrCodes.isNotEmpty + ? scannerState.qrCodes.last + : ''; + } + return DigitButton( + type: DigitButtonType.primary, + size: DigitButtonSize.large, + onPressed: !form.valid + ? (){} + : () async { form.markAllAsTouched(); if (!form.valid) { return; } final primaryId = BlocProvider.of( - context, - ).state.primaryId; + context, + ).state.primaryId; final secondaryParty = - selectedFacilityId != null - ? FacilityModel( - id: selectedFacilityId - .toString(), - ) - : null; + selectedFacilityId != null + ? FacilityModel( + id: selectedFacilityId + .toString(), + ) + : null; final deliveryTeamName = form .control(_deliveryTeamKey) .value as String?; if (deliveryTeamSelected && (form - .control( - _deliveryTeamKey, - ) - .value == - null || + .control( + _deliveryTeamKey, + ) + .value == + null || form .control(_deliveryTeamKey) .value .toString() .trim() .isEmpty)) { - DigitToast.show( + Toast.showToast( context, - options: DigitToastOptions( - localizations.translate( - i18.stockDetails.teamCodeRequired, - ), - true, - theme, + type: ToastType.error, + message: localizations.translate( + i18.stockDetails.teamCodeRequired, ), ); } else if ((primaryId == - secondaryParty?.id) || + secondaryParty?.id) || (primaryId == deliveryTeamName)) { - DigitToast.show( + Toast.showToast( context, - options: DigitToastOptions( - localizations.translate( - i18.stockDetails - .senderReceiverValidation, - ), - true, - theme, + type: ToastType.error, + message: localizations.translate( + i18.stockDetails + .senderReceiverValidation, ), ); } else { @@ -288,293 +285,295 @@ class StockDetailsPageState extends LocalizedState { context .read() .add(const LoadLocationEvent()); - DigitComponentsUtils() - .showLocationCapturingDialog( - context, - localizations.translate(i18 - .common.locationCapturing), - DigitSyncDialogType.inProgress); + DigitComponentsUtils + .showDialog( + context, + localizations.translate(i18 + .common.locationCapturing), + DialogType.inProgress); Future.delayed( const Duration(seconds: 2), - () async { - DigitComponentsUtils() - .hideDialog(context); - final bloc = + () async { + DigitComponentsUtils + .hideDialog(context); + final bloc = context.read(); - final productVariant = form - .control(_productVariantKey) - .value as ProductVariantModel; + final productVariant = form + .control(_productVariantKey) + .value as ProductVariantModel; - switch (entryType) { - case StockRecordEntryType.receipt: - transactionReason = - TransactionReason.received - .toValue(); - break; - case StockRecordEntryType.dispatch: - transactionReason = null; - break; - case StockRecordEntryType.returned: - transactionReason = - TransactionReason.returned - .toValue(); - break; - default: - transactionReason = form - .control( + switch (entryType) { + case StockRecordEntryType.receipt: + transactionReason = + TransactionReason.received + .toValue(); + break; + case StockRecordEntryType.dispatch: + transactionReason = null; + break; + case StockRecordEntryType.returned: + transactionReason = + TransactionReason.returned + .toValue(); + break; + default: + transactionReason = form + .control( _transactionReasonKey, ) - .value as String?; - break; - } + .value as String?; + break; + } - final quantity = form - .control(_transactionQuantityKey) - .value; + final quantity = form + .control(_transactionQuantityKey) + .value; - final waybillNumber = form - .control(_waybillNumberKey) - .value as String?; + final waybillNumber = form + .control(_waybillNumberKey) + .value as String?; - final waybillQuantity = form - .control(_waybillQuantityKey) - .value as String?; + final waybillQuantity = form + .control(_waybillQuantityKey) + .value as String?; - final vehicleNumber = form - .control(_vehicleNumberKey) - .value as String?; + final vehicleNumber = form + .control(_vehicleNumberKey) + .value as String?; - final lat = locationState.latitude; - final lng = locationState.longitude; + final lat = locationState.latitude; + final lng = locationState.longitude; - final hasLocationData = - lat != null && lng != null; + final hasLocationData = + lat != null && lng != null; - final comments = form - .control(_commentsKey) - .value as String?; + final comments = form + .control(_commentsKey) + .value as String?; - final deliveryTeamName = form - .control(_deliveryTeamKey) - .value as String?; + final deliveryTeamName = form + .control(_deliveryTeamKey) + .value as String?; - String? senderId; - String? senderType; - String? receiverId; - String? receiverType; + String? senderId; + String? senderType; + String? receiverId; + String? receiverType; - final primaryType = - BlocProvider.of( - context, - ).state.primaryType; + final primaryType = + BlocProvider.of( + context, + ).state.primaryType; - final primaryId = - BlocProvider.of( - context, - ).state.primaryId; + final primaryId = + BlocProvider.of( + context, + ).state.primaryId; - switch (entryType) { - case StockRecordEntryType.receipt: - case StockRecordEntryType.loss: - case StockRecordEntryType.damaged: - case StockRecordEntryType.returned: - if (deliveryTeamSelected) { - senderId = deliveryTeamName; - senderType = "STAFF"; - } else { - senderId = secondaryParty?.id; - senderType = "WAREHOUSE"; - } - receiverId = primaryId; - receiverType = primaryType; + switch (entryType) { + case StockRecordEntryType.receipt: + case StockRecordEntryType.loss: + case StockRecordEntryType.damaged: + case StockRecordEntryType.returned: + if (deliveryTeamSelected) { + senderId = deliveryTeamName; + senderType = "STAFF"; + } else { + senderId = secondaryParty?.id; + senderType = "WAREHOUSE"; + } + receiverId = primaryId; + receiverType = primaryType; - break; - case StockRecordEntryType.dispatch: - if (deliveryTeamSelected) { - receiverId = deliveryTeamName; - receiverType = "STAFF"; - } else { - receiverId = secondaryParty?.id; - receiverType = "WAREHOUSE"; + break; + case StockRecordEntryType.dispatch: + if (deliveryTeamSelected) { + receiverId = deliveryTeamName; + receiverType = "STAFF"; + } else { + receiverId = secondaryParty?.id; + receiverType = "WAREHOUSE"; + } + senderId = primaryId; + senderType = primaryType; + break; } - senderId = primaryId; - senderType = primaryType; - break; - } - final stockModel = StockModel( - clientReferenceId: + final stockModel = StockModel( + clientReferenceId: IdGen.i.identifier, - productVariantId: productVariant.id, - transactionReason: + productVariantId: productVariant.id, + transactionReason: transactionReason, - transactionType: transactionType, - referenceId: stockState.projectId, - referenceIdType: 'PROJECT', - quantity: quantity.toString(), - wayBillNumber: waybillNumber, - receiverId: receiverId, - receiverType: receiverType, - senderId: senderId, - senderType: senderType, - auditDetails: AuditDetails( - createdBy: InventorySingleton() - .loggedInUserUuid, - createdTime: context - .millisecondsSinceEpoch(), - ), - clientAuditDetails: + transactionType: transactionType, + referenceId: stockState.projectId, + referenceIdType: 'PROJECT', + quantity: quantity.toString(), + wayBillNumber: waybillNumber, + receiverId: receiverId, + receiverType: receiverType, + senderId: senderId, + senderType: senderType, + auditDetails: AuditDetails( + createdBy: InventorySingleton() + .loggedInUserUuid, + createdTime: context + .millisecondsSinceEpoch(), + ), + clientAuditDetails: ClientAuditDetails( - createdBy: InventorySingleton() - .loggedInUserUuid, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: + createdBy: InventorySingleton() + .loggedInUserUuid, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: InventorySingleton() .loggedInUserUuid, - lastModifiedTime: context - .millisecondsSinceEpoch(), - ), - additionalFields: [ - waybillQuantity, - vehicleNumber, - comments, - ].any((element) => - element != null) || + lastModifiedTime: context + .millisecondsSinceEpoch(), + ), + additionalFields: [ + waybillQuantity, + vehicleNumber, + comments, + ].any((element) => + element != null) || hasLocationData - ? StockAdditionalFields( - version: 1, - fields: [ + ? StockAdditionalFields( + version: 1, + fields: [ + AdditionalField( + InventoryManagementEnums + .name + .toValue(), + InventorySingleton() + .loggedInUser + ?.name, + ), + if (waybillQuantity != + null && + waybillQuantity + .trim() + .isNotEmpty) AdditionalField( - InventoryManagementEnums - .name - .toValue(), - InventorySingleton() - .loggedInUser - ?.name, + 'waybill_quantity', + waybillQuantity, + ), + if (vehicleNumber != + null && + vehicleNumber + .trim() + .isNotEmpty) + AdditionalField( + 'vehicle_number', + vehicleNumber, + ), + if (comments != null && + comments + .trim() + .isNotEmpty) + AdditionalField( + 'comments', + comments, + ), + if (deliveryTeamName != + null && + deliveryTeamName + .trim() + .isNotEmpty) + AdditionalField( + 'deliveryTeam', + deliveryTeamName, + ), + if (hasLocationData) ...[ + AdditionalField( + 'lat', + lat, + ), + AdditionalField( + 'lng', + lng, ), - if (waybillQuantity != - null && - waybillQuantity - .trim() - .isNotEmpty) - AdditionalField( - 'waybill_quantity', - waybillQuantity, - ), - if (vehicleNumber != - null && - vehicleNumber - .trim() - .isNotEmpty) - AdditionalField( - 'vehicle_number', - vehicleNumber, - ), - if (comments != null && - comments - .trim() - .isNotEmpty) - AdditionalField( - 'comments', - comments, - ), - if (deliveryTeamName != - null && - deliveryTeamName - .trim() - .isNotEmpty) - AdditionalField( - 'deliveryTeam', - deliveryTeamName, - ), - if (hasLocationData) ...[ - AdditionalField( - 'lat', - lat, - ), - AdditionalField( - 'lng', - lng, - ), - ], - if (scannerState - .barCodes.isNotEmpty) - addBarCodesToFields( - scannerState - .barCodes), ], - ) - : null, - ); - - bloc.add( - RecordStockSaveStockDetailsEvent( - stockModel: stockModel, - ), - ); + if (scannerState + .barCodes.isNotEmpty) + addBarCodesToFields( + scannerState + .barCodes), + ], + ) + : null, + ); - final submit = - await DigitDialog.show( - context, - options: DigitDialogOptions( - key: const Key('submitDialog'), - titleText: - localizations.translate( - i18.stockDetails.dialogTitle, - ), - contentText: - localizations.translate( - i18.stockDetails.dialogContent, - ), - primaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonSubmit, + bloc.add( + RecordStockSaveStockDetailsEvent( + stockModel: stockModel, ), - action: (context) { - Navigator.of( - context, - rootNavigator: true, - ).pop(true); - }, - ), - secondaryAction: - DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonCancel, + ); + + final submit = + showCustomPopup( + context: context, + builder: (popupContext) => Popup( + title:localizations.translate( + i18.stockDetails.dialogTitle, + ), + onOutsideTap: () { + Navigator.of(popupContext).pop(false); + }, + description:localizations.translate( + i18.stockDetails.dialogContent, + ), + type: PopUpType.simple, + actions: [ + DigitButton( + label: localizations.translate( + i18.common.coreCommonSubmit, + ), + onPressed: () { + Navigator.of( + popupContext, + rootNavigator: true, + ).pop(true); + }, + type: DigitButtonType.primary, + size: DigitButtonSize.large, + ), + DigitButton( + label: localizations.translate( + i18.common.coreCommonCancel, + ), + onPressed: () { + Navigator.of( + popupContext, + rootNavigator: true, + ).pop(false); + }, + type: DigitButtonType.primary, + size: DigitButtonSize.large, + ), + ], ), - action: (context) => - Navigator.of( - context, - rootNavigator: true, - ).pop(false), - ), - ), - ); + ) as bool; - if (submit ?? false) { - bloc.add( - const RecordStockCreateStockEntryEvent(), - ); - } - }); + if (submit ?? false) { + bloc.add( + const RecordStockCreateStockEntryEvent(), + ); + } + }); } }, - child: Center( - child: Text( - localizations - .translate(i18.common.coreCommonSubmit), - ), - ), - ); - }), + isDisabled: !form.valid, + label: localizations + .translate(i18.common.coreCommonSubmit), + ); + }) + ], ), children: [ DigitCard( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, children: [ Text( localizations.translate(pageTitle), @@ -594,23 +593,50 @@ class StockDetailsPageState extends LocalizedState { )), ), fetched: (productVariants) { - return DigitReactiveDropdown< - ProductVariantModel>( - key: const Key(_productVariantKey), + return ReactiveWrapperField( formControlName: _productVariantKey, - label: localizations.translate( - module.selectProductLabel, - ), - isRequired: true, - valueMapper: (value) { - return localizations.translate( - value.sku ?? value.id, - ); - }, - menuItems: productVariants, validationMessages: { 'required': (object) => - '${module.selectProductLabel}_IS_REQUIRED', + '${module.selectProductLabel}_IS_REQUIRED', + }, + showErrors: (control) => control.invalid && control.touched, + builder: (field) { + return LabeledField( + label: localizations.translate( + module.selectProductLabel, + ), + isRequired: true, + child: DigitDropdown( + errorMessage: field.errorText, + emptyItemText: + localizations.translate( + i18.common.noMatchFound, + ), + items: productVariants + .map((variant) { + return DropdownItem( + name: + localizations.translate( + variant.sku ?? variant.id, + ), + code: variant.id, + ); + }).toList(), + onSelect: (value) { + /// Find the selected product variant model by matching the id + final selectedVariant = + productVariants + .firstWhere( + (variant) => + variant.id == + value.code, + ); + /// Update the form control with the selected product variant model + field.control.value = + selectedVariant; + }, + ), + ); }, ); }, @@ -621,16 +647,42 @@ class StockDetailsPageState extends LocalizedState { StockRecordEntryType.loss, StockRecordEntryType.damaged, ].contains(entryType)) - DigitReactiveDropdown( - key: const Key(_transactionReasonKey), - label: localizations.translate( - transactionReasonLabel ?? 'Reason', - ), - menuItems: reasons ?? [], + ReactiveWrapperField( formControlName: _transactionReasonKey, - valueMapper: (value) => - localizations.translate(value), - isRequired: true, + builder: (field) { + return LabeledField( + label: localizations.translate( + transactionReasonLabel ?? 'Reason', + ), + isRequired: true, + child: DigitDropdown( + emptyItemText: + localizations.translate( + i18.common.noMatchFound, + ), + items: + reasons!.map((reason) { + return + DropdownItem( + name: localizations + .translate(reason), + code: reason.toString(), + ); + }).toList(), + onSelect: (value) { + final selectedReason = + reasons + ?.firstWhere( + (reason) => + reason.toString() == + value.code, + ); + field.control.value = + selectedReason; + }, + ), + ); + }, ), BlocBuilder( builder: (context, state) { @@ -641,86 +693,34 @@ class StockDetailsPageState extends LocalizedState { CircularProgressIndicator(), ), fetched: (facilities, allFacilities) { - return InkWell( - onTap: () async { - clearQRCodes(); - form - .control(_deliveryTeamKey) - .value = ''; - - final facility = - await context.router.push( - InventoryFacilitySelectionRoute( - facilities: - allFacilities)) - as FacilityModel?; - - if (facility == null) return; - form - .control(_secondaryPartyKey) - .value = - localizations.translate( - 'FAC_${facility.id}', - ); - - setState(() { - selectedFacilityId = - facility.id; - }); - if (facility.id == - 'Delivery Team') { - setState(() { - deliveryTeamSelected = true; - }); - } else { - setState(() { - deliveryTeamSelected = false; - }); - } - }, - child: IgnorePointer( - child: DigitTextFormField( - key: const Key( - _secondaryPartyKey), - hideKeyboard: true, - label: localizations.translate( - '${pageTitle}_${i18.stockReconciliationDetails.stockLabel}', - ), - isRequired: true, - validationMessages: { - 'required': (object) => - localizations.translate( - '${i18.individualDetails.nameLabelText}_IS_REQUIRED', - ), - }, - suffix: const Padding( - padding: EdgeInsets.all(8.0), - child: Icon(Icons.search), - ), - formControlName: - _secondaryPartyKey, + return Column( + children: [ + const SizedBox(height: spacer4,), + InkWell( onTap: () async { clearQRCodes(); form .control(_deliveryTeamKey) .value = ''; - final facility = - await context.router.push( - InventoryFacilitySelectionRoute( - facilities: allFacilities, - ), - ) as FacilityModel?; + final facility = await context + .router + .push( + InventoryFacilitySelectionRoute( + facilities: + facilities)) + as FacilityModel?; if (facility == null) return; form - .control( - _secondaryPartyKey) - .value = + .control(_secondaryPartyKey) + .value = localizations.translate( - 'FAC_${facility.id}', - ); - + 'FAC_${facility.id}', + ); + controller1.text = + localizations.translate( + 'FAC_${facility.id}'); setState(() { selectedFacilityId = facility.id; @@ -728,208 +728,303 @@ class StockDetailsPageState extends LocalizedState { if (facility.id == 'Delivery Team') { setState(() { - deliveryTeamSelected = - true; + deliveryTeamSelected = true; }); } else { setState(() { - deliveryTeamSelected = - false; + deliveryTeamSelected = false; }); } }, + child: IgnorePointer( + child: ReactiveWrapperField( + formControlName: + _secondaryPartyKey, + validationMessages: { + 'required': (object) => + localizations + .translate( + '${i18.individualDetails.nameLabelText}_IS_REQUIRED', + ), + }, + showErrors: (control) => control.invalid && control.touched, + builder: (field) { + return InputField( + type: InputType.search, + isRequired: true, + label: localizations + .translate( + '${pageTitle}_${i18.stockReconciliationDetails.stockLabel}', + ), + onChange: (value) { + field.control.markAsTouched(); + }, + controller: controller1, + errorMessage: field.errorText, + ); + }), + ), ), - ), + ], ); }); }, ), + // TODO: as this case i need to set when occurring Visibility( visible: deliveryTeamSelected, - child: DigitTextFormField( - label: localizations.translate( - i18.stockReconciliationDetails - .teamCodeLabel, - ), - onChanged: (val) { - String? value = val.value as String?; - if (value != null && - value.trim().isNotEmpty) { - context.read().add( - DigitScannerEvent.handleScanner( - barCode: [], - qrCode: [value], - manualCode: value, + child: ReactiveWrapperField( + formControlName: _deliveryTeamKey, + builder: (field) { + return InputField( + type: InputType.text, + label: localizations.translate( + i18.stockReconciliationDetails + .teamCodeLabel, + ), + isRequired: deliveryTeamSelected, + suffixIcon: Icons.qr_code_2, + onSuffixTap: (value){ + //[TODO: Add route to auto_route] + Navigator.of(context).push( + MaterialPageRoute( + builder: (context) => + const DigitScannerPage( + quantity: 5, + isGS1code: false, + singleValue: false, + ), + settings: const RouteSettings( + name: '/qr-scanner'), ), ); - } else { - clearQRCodes(); - } - }, - suffix: IconButton( - onPressed: () { - //[TODO: Add route to auto_route] - Navigator.of(context).push( - MaterialPageRoute( - builder: (context) => - const DigitScannerPage( - quantity: 5, - isGS1code: false, - singleValue: false, - ), - settings: const RouteSettings( - name: '/qr-scanner'), - ), + }, + onChange: (val) { + String? value = val; + if (value != null && + value.trim().isNotEmpty) { + context.read().add( + DigitScannerEvent.handleScanner( + barCode: [], + qrCode: [value], + manualCode: value, + ), + ); + } else { + clearQRCodes(); + } + }, ); - }, - icon: Icon( - Icons.qr_code_2, - color: theme.colorScheme.secondary, - ), - ), - isRequired: deliveryTeamSelected, - maxLines: 3, - formControlName: _deliveryTeamKey, - ), + }), + // DigitTextFormField( + // label: localizations.translate( + // i18.stockReconciliationDetails + // .teamCodeLabel, + // ), + // onChanged: (val) { + // String? value = val.value as String?; + // if (value != null && + // value.trim().isNotEmpty) { + // context.read().add( + // DigitScannerEvent.handleScanner( + // barCode: [], + // qrCode: [value], + // manualCode: value, + // ), + // ); + // } else { + // clearQRCodes(); + // } + // }, + // suffix: IconButton( + // onPressed: () { + // //[TODO: Add route to auto_route] + // Navigator.of(context).push( + // MaterialPageRoute( + // builder: (context) => + // const DigitScannerPage( + // quantity: 5, + // isGS1code: false, + // singleValue: false, + // ), + // settings: const RouteSettings( + // name: '/qr-scanner'), + // ), + // ); + // }, + // icon: Icon( + // Icons.qr_code_2, + // color: theme.colorScheme.secondary, + // ), + // ), + // isRequired: deliveryTeamSelected, + // maxLines: 3, + // formControlName: _deliveryTeamKey, + // ), ), - DigitTextFormField( - key: const Key(_transactionQuantityKey), - formControlName: _transactionQuantityKey, - keyboardType: - const TextInputType.numberWithOptions( - decimal: true, - ), - isRequired: true, - validationMessages: { - "number": (object) => - localizations.translate( - '${quantityCountLabel}_ERROR', - ), - "max": (object) => localizations.translate( - '${quantityCountLabel}_MAX_ERROR', + ReactiveWrapperField( + formControlName: _transactionQuantityKey, + validationMessages: { + "number": (object) => + localizations.translate( + '${quantityCountLabel}_ERROR', + ), + "max": (object) => + localizations.translate( + '${quantityCountLabel}_MAX_ERROR', + ), + "min": (object) => + localizations.translate( + '${quantityCountLabel}_MIN_ERROR', + ), + }, + showErrors: (control) => control.invalid && control.touched, + builder: (field) { + return LabeledField( + label: localizations.translate( + quantityCountLabel, ), - "min": (object) => localizations.translate( - '${quantityCountLabel}_MIN_ERROR', + isRequired: true, + child: BaseDigitFormInput( + errorMessage: field.errorText, + keyboardType: const TextInputType + .numberWithOptions( + decimal: true, + ), + onChange: (val) { + field.control.markAsTouched(); + if (int.parse(val) > 10000000000) { + field.control.value = 10000; + } else { + if(val !=''){ + field.control.value = + int.parse(val); + }else{ + field.control.value = null; + } + } + }, ), - }, - onChanged: (val) { - if (val.value != null) { - if (val.value > 10000000000) { - form - .control(_transactionQuantityKey) - .value = 10000; - } - } - }, - label: localizations.translate( - quantityCountLabel, - ), - ), + ); + }), if (isWareHouseMgr) - DigitTextFormField( - key: const Key(_waybillNumberKey), - label: localizations.translate( - i18.stockDetails.waybillNumberLabel, - ), + ReactiveWrapperField( formControlName: _waybillNumberKey, - keyboardType: - const TextInputType.numberWithOptions( - decimal: true, - ), - validationMessages: { - 'maxLength': (object) => localizations - .translate( - i18.common.maxCharsRequired) - .replaceAll('{}', '200'), - 'minLength': (object) => localizations - .translate( - i18.common.min2CharsRequired) - .replaceAll('{}', ''), + builder: (field) { + return InputField( + type: InputType.text, + label: localizations.translate( + i18.stockDetails.waybillNumberLabel, + ), + onChange: (val) { + field.control.value = val; + }, + ); }), if (isWareHouseMgr) - DigitTextFormField( - label: localizations.translate( - i18.stockDetails - .quantityOfProductIndicatedOnWaybillLabel, - ), + ReactiveWrapperField( formControlName: _waybillQuantityKey, - onChanged: (val) { - if (val.toString().isEmpty || - val.value == null) { - form - .control(_waybillQuantityKey) - .value = '0'; - } + builder: (field) { + return InputField( + type: InputType.text, + label: localizations.translate( + i18.stockDetails + .quantityOfProductIndicatedOnWaybillLabel, + ), + initialValue: '0', + onChange: (val) { + if (val == '') { + field.control.value = '0'; + } else { + field.control.value = val; + } + }, + ); }), if (isWareHouseMgr) transportTypes.isNotEmpty - ? DigitReactiveDropdown( - key: const Key(_typeOfTransportKey), - isRequired: false, - label: localizations.translate( - i18.stockDetails.transportTypeLabel, + ? ReactiveWrapperField( + formControlName: _typeOfTransportKey, + builder: (field) { + return LabeledField( + label: localizations.translate( + i18.stockDetails + .transportTypeLabel, + ), + child: DigitDropdown( + emptyItemText: + localizations.translate( + i18.common.noMatchFound, ), - valueMapper: (e) => e, - onChanged: (value) { - setState(() { - form.control( - _typeOfTransportKey, - ); - }); + items: + transportTypes.map((type) { + return DropdownItem( + name: localizations + .translate(type.name), + code: type.code, + ); + }).toList(), + onSelect: (value) { + field.control.value = + value.name; }, - initialValue: - transportTypes.firstOrNull?.name, - menuItems: transportTypes.map( - (e) { - return localizations - .translate(e.name); - }, - ).toList(), - formControlName: _typeOfTransportKey, - ) + ), + ); + }, + ) : const Offstage(), if (isWareHouseMgr) - DigitTextFormField( - label: localizations.translate( - i18.stockDetails.vehicleNumberLabel, - ), - formControlName: _vehicleNumberKey, - ), - DigitTextFormField( - label: localizations.translate( - i18.stockDetails.commentsLabel, - ), - minLines: 2, - maxLines: 3, - formControlName: _commentsKey, - ), - scannerState.barCodes.isEmpty - ? DigitOutlineIconButton( - buttonStyle: OutlinedButton.styleFrom( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.zero, + ReactiveWrapperField( + formControlName: _vehicleNumberKey, + builder: (field) { + return InputField( + type: InputType.text, + label: localizations.translate( + i18.stockDetails.vehicleNumberLabel, ), + onChange: (val) { + field.control.value = val; + }, + ); + }), + ReactiveWrapperField( + formControlName: _commentsKey, + builder: (field) { + return InputField( + type: InputType.textArea, + label: localizations.translate( + i18.stockDetails.commentsLabel, ), - onPressed: () { - //[TODO: Add route to auto_route] - Navigator.of(context).push( - MaterialPageRoute( - builder: (context) => - const DigitScannerPage( - quantity: 5, - isGS1code: true, - singleValue: false, - ), - settings: const RouteSettings( - name: '/qr-scanner'), - ), - ); + onChange: (val) { + field.control.value = val; }, - icon: Icons.qr_code, - label: localizations.translate( - i18.common.scanBales, + ); + }), + scannerState.barCodes.isEmpty + ? DigitButton( + mainAxisSize: MainAxisSize.max, + size: DigitButtonSize.large, + type: DigitButtonType.secondary, + onPressed: () { + //[TODO: Add route to auto_route] + Navigator.of(context).push( + MaterialPageRoute( + builder: (context) => + const DigitScannerPage( + quantity: 5, + isGS1code: true, + singleValue: false, ), - ) + settings: const RouteSettings( + name: '/qr-scanner'), + ), + ); + }, + prefixIcon: Icons.qr_code, + label: localizations.translate( + i18.common.scanBales, + ), + ) : Column(children: [ Row( mainAxisAlignment: @@ -950,7 +1045,7 @@ class StockDetailsPageState extends LocalizedState { ), Padding( padding: const EdgeInsets.only( - bottom: kPadding * 2, + bottom: spacer4, ), child: IconButton( alignment: @@ -988,7 +1083,6 @@ class StockDetailsPageState extends LocalizedState { ]) ], ), - ), ], ); }); diff --git a/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart b/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart index de24d5850..d33ac0487 100644 --- a/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart @@ -1,11 +1,14 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/atoms/digit_toaster.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_scanner/blocs/scanner.dart'; import 'package:digit_scanner/pages/qr_scanner.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/atoms/input_wrapper.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:intl/intl.dart'; import 'package:inventory_management/router/inventory_router.gm.dart'; import 'package:reactive_forms/reactive_forms.dart'; @@ -35,6 +38,7 @@ class WarehouseDetailsPageState extends LocalizedState { static const _teamCodeKey = 'teamCode'; bool deliveryTeamSelected = false; String? selectedFacilityId; + TextEditingController controller1 = TextEditingController(); @override void initState() { @@ -123,131 +127,116 @@ class WarehouseDetailsPageState extends LocalizedState { footer: SizedBox( child: DigitCard( margin: const EdgeInsets.fromLTRB( - 0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB( - kPadding, - 0, - kPadding, - 0, - ), - child: ReactiveFormConsumer( - builder: (context, form, child) { - return DigitElevatedButton( - onPressed: !form.valid - ? null - : () { - form.markAllAsTouched(); - if (!form.valid) { - return; - } - final dateOfRecord = form - .control(_dateOfEntryKey) - .value as DateTime; + 0, spacer2, 0, 0), + children:[ + ReactiveFormConsumer( + builder: (context, form, child) { + return DigitButton( + type: DigitButtonType.primary, + size: DigitButtonSize.large, + isDisabled: !form.valid, + label: localizations.translate( + i18.householdDetails.actionLabel, + ), + onPressed: !form.valid + ? (){} + : () { + form.markAllAsTouched(); + if (!form.valid) { + return; + } + final dateOfRecord = form + .control(_dateOfEntryKey) + .value as DateTime; - final teamCode = form - .control(_teamCodeKey) - .value as String?; + final teamCode = form + .control(_teamCodeKey) + .value as String?; - final facility = - deliveryTeamSelected - ? FacilityModel( - id: teamCode ?? - 'Delivery Team', - ) - : selectedFacilityId != - null - ? FacilityModel( - id: selectedFacilityId - .toString(), - ) - : null; + final facility = + deliveryTeamSelected + ? FacilityModel( + id: teamCode ?? + 'Delivery Team', + ) + : selectedFacilityId != + null + ? FacilityModel( + id: selectedFacilityId + .toString(), + ) + : null; - context - .read() - .add( - const DigitScannerEvent - .handleScanner( - qrCode: [], - barCode: []), - ); - if (facility == null) { - DigitToast.show( - context, - options: DigitToastOptions( - localizations.translate( - i18.stockDetails - .facilityRequired, - ), - true, - theme, - ), - ); - } else if (deliveryTeamSelected && - (teamCode == null || - teamCode - .trim() - .isEmpty)) { - DigitToast.show( - context, - options: DigitToastOptions( - localizations.translate( - i18.stockDetails - .teamCodeRequired, - ), - true, - theme, - ), - ); - } else { - recordStockBloc.add( - RecordStockSaveTransactionDetailsEvent( - dateOfRecord: dateOfRecord, - facilityModel: InventorySingleton() - .isDistributor! && - !InventorySingleton() - .isWareHouseMgr! - ? FacilityModel( - id: teamCode - .toString(), - ) - : facility, - primaryId: facility.id == - "Delivery Team" - ? teamCode ?? '' - : facility.id, - primaryType: (InventorySingleton() - .isDistributor! && - !InventorySingleton() - .isWareHouseMgr! && - deliveryTeamSelected) || - deliveryTeamSelected - ? "STAFF" - : "WAREHOUSE", - ), - ); - context.router.push( - StockDetailsRoute(), - ); - } - }, - child: child!, - ); - }, - child: Center( - child: Text( - localizations.translate( - i18.householdDetails.actionLabel, - ), - ), + context + .read() + .add( + const DigitScannerEvent + .handleScanner( + qrCode: [], + barCode: []), + ); + if (facility == null) { + Toast.showToast( + type: ToastType.error, + context, + message: localizations.translate( + i18.stockDetails + .facilityRequired, + ), + ); + } else if (deliveryTeamSelected && + (teamCode == null || + teamCode + .trim() + .isEmpty)) { + Toast.showToast( + context, + type: ToastType.error, + message:localizations.translate( + i18.stockDetails + .teamCodeRequired, + ), + ); + } else { + recordStockBloc.add( + RecordStockSaveTransactionDetailsEvent( + dateOfRecord: dateOfRecord, + facilityModel: InventorySingleton() + .isDistributor! && + !InventorySingleton() + .isWareHouseMgr! + ? FacilityModel( + id: teamCode + .toString(), + ) + : facility, + primaryId: facility.id == + "Delivery Team" + ? teamCode ?? '' + : facility.id, + primaryType: (InventorySingleton() + .isDistributor! && + !InventorySingleton() + .isWareHouseMgr! && + deliveryTeamSelected) || + deliveryTeamSelected + ? "STAFF" + : "WAREHOUSE", + ), + ); + context.router.push( + StockDetailsRoute(), + ); + } + }, + ); + }, ), - ), + ] ), ), children: [ DigitCard( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, children: [ Text( InventorySingleton().isDistributor! && @@ -264,180 +253,154 @@ class WarehouseDetailsPageState extends LocalizedState { style: theme.textTheme.displayMedium, ), Column(children: [ - DigitDateFormPicker( - isEnabled: false, - formControlName: _dateOfEntryKey, - label: localizations.translate( - i18.warehouseDetails.dateOfReceipt, - ), - isRequired: false, - confirmText: localizations.translate( - i18.common.coreCommonOk, - ), - cancelText: localizations.translate( - i18.common.coreCommonCancel, - ), - ), - DigitTextFormField( - readOnly: true, - formControlName: _administrativeUnitKey, - label: localizations.translate( - i18.warehouseDetails - .administrativeUnit, - ), + ReactiveWrapperField( + formControlName: _dateOfEntryKey, + builder: (field) { + return InputField( + type: InputType.date, + label: localizations.translate( + i18.warehouseDetails + .dateOfReceipt, + ), + confirmText: localizations.translate( + i18.common.coreCommonOk, + ), + cancelText: localizations.translate( + i18.common.coreCommonCancel, + ), + initialValue: DateFormat( + 'dd/MM/yy') + .format( + field.control.value), + readOnly: true, + ); + }), + ReactiveWrapperField( + formControlName: _administrativeUnitKey, + builder: (field) { + return InputField( + type: InputType.text, + label: localizations.translate( + i18.warehouseDetails + .administrativeUnit, + ), + initialValue: field.control.value, + readOnly: true, + ); + } ), ]), + ]), InkWell( - onTap: () async { - clearQRCodes(); - form.control(_teamCodeKey).value = ''; + onTap: () async { + clearQRCodes(); + form.control(_teamCodeKey).value = ''; - final facility = - await Navigator.of(context).push( - MaterialPageRoute( - builder: (context) => - InventoryFacilitySelectionPage( - facilities: facilities, - ), + final facility = + await Navigator.of(context).push( + MaterialPageRoute( + builder: (context) => + InventoryFacilitySelectionPage( + facilities: facilities, ), - ); + ), + ); - if (facility == null) return; - form.control(_warehouseKey).value = - localizations.translate( - 'FAC_${facility.id}'); + if (facility == null) return; + form.control(_warehouseKey).value = + localizations.translate( + 'FAC_${facility.id}'); + controller1.text = localizations.translate( + 'FAC_${facility.id}'); - setState(() { - selectedFacilityId = facility.id; - }); - if (facility.id == 'Delivery Team') { - setState(() { - deliveryTeamSelected = true; - }); - } else { - setState(() { - deliveryTeamSelected = false; - }); - } + setState(() { + selectedFacilityId = facility.id; + }); + if (facility.id == 'Delivery Team') { + setState(() { + deliveryTeamSelected = true; + }); + } else { + setState(() { + deliveryTeamSelected = false; + }); + } + }, + child: IgnorePointer( + child: ReactiveWrapperField( + formControlName: _warehouseKey, + validationMessages: { + 'required': (object) => + localizations.translate( + '${i18.individualDetails + .nameLabelText}_IS_REQUIRED', + ), }, - child: IgnorePointer( - child: DigitTextFormField( - hideKeyboard: true, - padding: const EdgeInsets.only( - bottom: kPadding, - ), - isRequired: true, + showErrors: (control) => control.invalid && control.touched, + builder: (field) { + return InputField( + type: InputType.search, label: localizations.translate( i18.stockReconciliationDetails .facilityLabel, ), - validationMessages: { - 'required': (object) => - localizations.translate( - '${i18.individualDetails.nameLabelText}_IS_REQUIRED', - ), - }, - suffix: const Padding( - padding: EdgeInsets.all(8.0), - child: Icon(Icons.search), - ), - formControlName: _warehouseKey, - readOnly: true, - onTap: () async { - context - .read() - .add( - const DigitScannerEvent - .handleScanner( - barCode: [], - qrCode: [], - ), - ); - form.control(_teamCodeKey).value = - ''; - final facility = - await Navigator.of(context) - .push( - MaterialPageRoute( - builder: (context) => - InventoryFacilitySelectionPage( - facilities: facilities, - ), - ), - ); - - if (facility == null) return; - form.control(_warehouseKey).value = - localizations.translate( - 'FAC_${facility.id}'); - - setState(() { - selectedFacilityId = facility.id; - }); - if (facility.id == - 'Delivery Team') { - setState(() { - deliveryTeamSelected = true; - }); - } else { - setState(() { - deliveryTeamSelected = false; - }); - } + controller: controller1, + isRequired: true, + errorMessage: field.errorText, + onChange: (value) { + field.control.markAsTouched(); }, - ), - ), - ), + ); + } + ), + ), + ), if (deliveryTeamSelected) - DigitTextFormField( - label: localizations.translate( - i18.stockReconciliationDetails - .teamCodeLabel, - ), - formControlName: _teamCodeKey, - onChanged: (val) { - String? value = val as String?; - if (value != null && - value.trim().isNotEmpty) { - context - .read() - .add( - DigitScannerEvent - .handleScanner( - barCode: [], - qrCode: [value], + ReactiveWrapperField( + formControlName: _teamCodeKey, + builder: (field) { + return InputField( + type: InputType.text, + label: localizations.translate( + i18.stockReconciliationDetails + .teamCodeLabel, + ), + isRequired: deliveryTeamSelected, + suffixIcon: Icons.qr_code_2, + onSuffixTap: (value){ + //[TODO: Add route to auto_route] + Navigator.of(context).push( + MaterialPageRoute( + builder: (context) => + const DigitScannerPage( + quantity: 5, + isGS1code: false, + singleValue: false, + ), + settings: const RouteSettings( + name: '/qr-scanner'), ), ); - } else { - clearQRCodes(); - } - }, - isRequired: true, - suffix: IconButton( - onPressed: () { - //[TODO: Add route to auto_route] - Navigator.of(context).push( - MaterialPageRoute( - builder: (context) => - const DigitScannerPage( - quantity: 1, - isGS1code: false, - singleValue: false, - ), - settings: const RouteSettings( - name: '/qr-scanner'), - ), + }, + onChange: (val) { + String? value = val; + if (value != null && + value.trim().isNotEmpty) { + context + .read() + .add( + DigitScannerEvent + .handleScanner( + barCode: [], + qrCode: [value], + ), + ); + } else { + clearQRCodes(); + } + }, ); - }, - icon: Icon( - Icons.qr_code_2, - color: theme.colorScheme.secondary, - ), - ), - ), - ], - ), - ), + }) ], ); }, diff --git a/packages/inventory_management/lib/pages/reports/report_details.dart b/packages/inventory_management/lib/pages/reports/report_details.dart index 8b31c8cc2..183b6493d 100644 --- a/packages/inventory_management/lib/pages/reports/report_details.dart +++ b/packages/inventory_management/lib/pages/reports/report_details.dart @@ -1,7 +1,9 @@ import 'package:auto_route/auto_route.dart'; import 'package:collection/collection.dart'; -import 'package:digit_components/digit_components.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/atoms/input_wrapper.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:inventory_management/router/inventory_router.gm.dart'; @@ -117,17 +119,16 @@ class InventoryReportDetailsPageState ), child: Scaffold( bottomNavigationBar: DigitCard( - padding: const EdgeInsets.all(8.0), - child: DigitElevatedButton( - onPressed: () => context.router.popUntilRoot(), - child: Text( - localizations.translate( + children: [ + DigitButton( + size: DigitButtonSize.large, + type: DigitButtonType.secondary, + onPressed: () => context.router.popUntilRoot(), + label: localizations.translate( i18.inventoryReportDetails.backToHomeButtonLabel, ), - textAlign: TextAlign.center, - maxLines: 1, ), - ), + ], ), body: BlocBuilder( builder: (context, inventoryReportState) { @@ -146,7 +147,7 @@ class InventoryReportDetailsPageState children: [ const BackNavigationHelpHeaderWidget(), Container( - padding: const EdgeInsets.all(kPadding), + padding: const EdgeInsets.all(spacer2), child: Align( alignment: Alignment.centerLeft, child: Text( @@ -189,7 +190,6 @@ class InventoryReportDetailsPageState return Column( children: [ DigitCard( - child: Column( children: [ if (isWareHouseManager) BlocConsumer( - key: const Key( - _productVariantKey), - label: - localizations.translate( - i18.stockReconciliationDetails - .productLabel, - ), - form: form, - menuItems: productVariants, + return ReactiveWrapperField( formControlName: - _productVariantKey, - isRequired: true, - valueMapper: (value) { - return localizations - .translate( - value.sku ?? value.id, - ); - }, - onSelected: (value) { - handleSelection( - form, - context.read< - InventoryReportBloc>()); + _productVariantKey, + validationMessages: { + 'required': (object) => + localizations.translate( + i18.common + .corecommonRequired, + ), }, - validationMessage: - localizations.translate( - i18.common - .corecommonRequired, - ), - emptyText: + builder: (field) { + return LabeledField( + isRequired: true, + label: localizations.translate( - i18.common.noMatchFound, - ), + i18.stockReconciliationDetails + .productLabel, + ), + child: DigitDropdown( + emptyItemText: + localizations.translate( + i18.common.noMatchFound, + ), + items: productVariants.map(( + variant) { + return DropdownItem( + name: localizations + .translate( + variant.sku ?? + variant.id, + ), + code: variant.id, + ); + }).toList(), + onSelect: (value) { + /// Find the selected product variant model by matching the id + final selectedVariant = productVariants.firstWhere( + (variant) => variant.id == value.code, + ); + /// Update the form control with the selected product variant model + field.control.value = selectedVariant; + + handleSelection( + form, + context.read< + InventoryReportBloc>()); + }, + ), + ); + }, ); }, ); }, ), ], - ), ), Expanded( child: Align( @@ -323,7 +328,7 @@ class InventoryReportDetailsPageState if (data.isEmpty) { return Padding( padding: const EdgeInsets.all( - kPadding * 2, + spacer4 ), child: _NoReportContent( title: title, @@ -433,7 +438,7 @@ class InventoryReportDetailsPageState if (data.isEmpty) { return Padding( padding: const EdgeInsets.all( - kPadding * 2, + spacer4 ), child: _NoReportContent( title: title, @@ -766,12 +771,12 @@ class _ReportDetailsContent extends StatelessWidget { @override Widget build(BuildContext context) { return Padding( - padding: const EdgeInsets.all(kPadding), + padding: const EdgeInsets.all(spacer2), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ - const SizedBox(height: kPadding * 2), + const SizedBox(height: spacer4), Flexible( child: ReadonlyDigitGrid( data: data, @@ -800,7 +805,7 @@ class _NoReportContent extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ const SizedBox( - height: kPadding * 2, + height: spacer4, width: double.maxFinite, ), Center( diff --git a/packages/inventory_management/lib/pages/reports/report_selection.dart b/packages/inventory_management/lib/pages/reports/report_selection.dart index 5f7cfd145..b8b22c442 100644 --- a/packages/inventory_management/lib/pages/reports/report_selection.dart +++ b/packages/inventory_management/lib/pages/reports/report_selection.dart @@ -1,5 +1,6 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/atoms/menu_card.dart'; import 'package:flutter/material.dart'; import 'package:inventory_management/router/inventory_router.gm.dart'; @@ -43,7 +44,7 @@ class InventoryReportSelectionPageState children: [ Padding( padding: const EdgeInsets.fromLTRB( - kPadding * 2, kPadding, kPadding * 2, kPadding), + spacer4, spacer2, spacer4, spacer2), child: Align( alignment: Alignment.topLeft, child: Text( @@ -54,84 +55,79 @@ class InventoryReportSelectionPageState ), ), Column(children: [ - DigitListView( - title: localizations.translate( + MenuCard( + heading: localizations.translate( i18.inventoryReportSelection.inventoryReportReceiptLabel, ), description: localizations.translate(i18 .inventoryReportSelection .inventoryReportReceiptDescription), - prefixIcon: Icons.login, - sufixIcon: Icons.arrow_circle_right, - onPressed: () => context.router.push( + icon: Icons.login, + onTap: () => context.router.push( InventoryReportDetailsRoute( reportType: InventoryReportType.receipt, ), ), ), - DigitListView( - title: localizations.translate( + MenuCard( + heading: localizations.translate( i18.inventoryReportSelection.inventoryReportIssuedLabel, ), description: localizations.translate(i18 .inventoryReportSelection .inventoryReportIssuedDescription), - prefixIcon: Icons.logout, - sufixIcon: Icons.arrow_circle_right, - onPressed: () => context.router.push( + icon: Icons.logout, + onTap: () => context.router.push( InventoryReportDetailsRoute( reportType: InventoryReportType.dispatch, ), ), ), - DigitListView( - title: localizations.translate(i18 + MenuCard( + heading: localizations.translate(i18 .inventoryReportSelection.inventoryReportReturnedLabel), description: localizations.translate( i18.inventoryReportSelection .inventoryReportReturnedDescription, ), - prefixIcon: Icons.settings_backup_restore, - sufixIcon: Icons.arrow_circle_right, - onPressed: () => context.router.push( + icon: Icons.settings_backup_restore, + onTap: () => context.router.push( InventoryReportDetailsRoute( reportType: InventoryReportType.returned, ), ), ), - DigitListView( - title: localizations.translate( + MenuCard( + heading: localizations.translate( i18.inventoryReportSelection.inventoryReportDamagedLabel, ), description: localizations.translate( i18.inventoryReportSelection .inventoryReportDamagedDescription, ), - prefixIcon: Icons.store, - sufixIcon: Icons.arrow_circle_right, - onPressed: () => context.router.push( + icon: Icons.store, + onTap: () => context.router.push( InventoryReportDetailsRoute( reportType: InventoryReportType.damage, ), ), ), - DigitListView( - title: localizations.translate( + MenuCard( + heading: localizations.translate( i18.inventoryReportSelection.inventoryReportLossLabel, ), description: localizations.translate( i18.inventoryReportSelection.inventoryReportLossDescription, ), - prefixIcon: Icons.store, - sufixIcon: Icons.arrow_circle_right, - onPressed: () => context.router.push( + icon: Icons.store, + onTap: () => context.router.push( InventoryReportDetailsRoute( reportType: InventoryReportType.loss, ), ), ), - DigitListView( - title: localizations.translate( + MenuCard( + heading: localizations.translate( i18.inventoryReportSelection .inventoryReportReconciliationLabel, ), @@ -139,9 +135,8 @@ class InventoryReportSelectionPageState i18.inventoryReportSelection .inventoryReportReconciliationDescription, ), - prefixIcon: Icons.store, - sufixIcon: Icons.arrow_circle_right, - onPressed: () => context.router.push( + icon: Icons.store, + onTap: () => context.router.push( InventoryReportDetailsRoute( reportType: InventoryReportType.reconciliation, ), diff --git a/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart b/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart index a52100f4b..f890f4a3d 100644 --- a/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart +++ b/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart @@ -1,7 +1,13 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/atoms/digit_divider.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_divider.dart'; +import 'package:digit_ui_components/widgets/atoms/input_wrapper.dart'; +import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; +import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; +import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:intl/intl.dart'; @@ -38,6 +44,7 @@ class StockReconciliationPageState static const _manualCountKey = 'manualCountKey'; static const _reconciliationCommentsKey = 'reconciliationCommentsKey'; String? selectedFacilityId; + TextEditingController controller1 = TextEditingController(); FormGroup _form(bool isDistributor) { return fb.group({ @@ -103,24 +110,25 @@ class StockReconciliationPageState builder: (ctx, form, child) { return Scaffold( body: ScrollableContent( - enableFixedButton: true, + enableFixedDigitButton: true, header: const BackNavigationHelpHeaderWidget(), footer: SizedBox( child: DigitCard( margin: const EdgeInsets.fromLTRB( - 0, kPadding, 0, 0), - padding: const EdgeInsets.fromLTRB( - kPadding, 0, kPadding, 0), - child: ReactiveFormConsumer( - builder: (ctx, form, child) => - DigitElevatedButton( - onPressed: !form.valid || - (form - .control(_productVariantKey) - .value == - null) - ? null - : () async { + 0, spacer2, 0, 0), + children:[ + ReactiveFormConsumer( + builder: (ctx, form, child) => + DigitButton( + size: DigitButtonSize.large, + type: DigitButtonType.primary, + onPressed: !form.valid || + (form + .control(_productVariantKey) + .value == + null) + ? (){} + : () async { form.markAllAsTouched(); FocusManager.instance.primaryFocus ?.unfocus(); @@ -130,18 +138,18 @@ class StockReconciliationPageState StockReconciliationBloc>(); final facilityId = - InventorySingleton() - .isDistributor! && - !InventorySingleton() - .isWareHouseMgr! - ? FacilityModel( - id: InventorySingleton() - .loggedInUserUuid!, - ) - : FacilityModel( - id: selectedFacilityId - .toString(), - ); + InventorySingleton() + .isDistributor! && + !InventorySingleton() + .isWareHouseMgr! + ? FacilityModel( + id: InventorySingleton() + .loggedInUserUuid!, + ) + : FacilityModel( + id: selectedFacilityId + .toString(), + ); final productVariant = form .control(_productVariantKey) @@ -153,28 +161,28 @@ class StockReconciliationPageState final comments = form .control( - _reconciliationCommentsKey, - ) + _reconciliationCommentsKey, + ) .value as String?; final model = - StockReconciliationModel( + StockReconciliationModel( clientReferenceId: - IdGen.i.identifier, + IdGen.i.identifier, dateOfReconciliation: stockState .dateOfReconciliation .millisecondsSinceEpoch, facilityId: facilityId.id, productVariantId: - productVariant.id, + productVariant.id, calculatedCount: stockState .stockInHand .toInt(), commentsOnReconciliation: - comments, + comments, physicalCount: int.tryParse( - calculatedCount, - ) ?? + calculatedCount, + ) ?? 0, auditDetails: AuditDetails( createdBy: InventorySingleton() @@ -183,61 +191,68 @@ class StockReconciliationPageState .millisecondsSinceEpoch(), ), clientAuditDetails: - ClientAuditDetails( + ClientAuditDetails( createdBy: InventorySingleton() .loggedInUserUuid, createdTime: context .millisecondsSinceEpoch(), lastModifiedBy: - InventorySingleton() - .loggedInUserUuid, + InventorySingleton() + .loggedInUserUuid, lastModifiedTime: context .millisecondsSinceEpoch(), ), ); final submit = - await DigitDialog.show( - context, - options: DigitDialogOptions( - key: const Key('submitDialog'), - titleText: - localizations.translate( + showCustomPopup( + context: context, + builder: (popupContext) => Popup( + title: localizations.translate( i18.stockReconciliationDetails .dialogTitle, ), - contentText: - localizations.translate( + onOutsideTap: () { + Navigator.of( + popupContext, + rootNavigator: true, + ).pop(false); + }, + description: localizations.translate( i18.stockReconciliationDetails .dialogContent, ), - primaryAction: - DigitDialogActions( - label: - localizations.translate( - i18.common.coreCommonSubmit, - ), - action: (context) { - Navigator.of( - context, - rootNavigator: true, - ).pop(true); - }, - ), - secondaryAction: - DigitDialogActions( - label: - localizations.translate( - i18.common.coreCommonCancel, + type: PopUpType.simple, + actions: [ + DigitButton( + label: localizations.translate( + i18.common.coreCommonSubmit, + ), + onPressed: () { + Navigator.of( + popupContext, + rootNavigator: true, + ).pop(true); + }, + type: DigitButtonType.primary, + size: DigitButtonSize.large, ), - action: (context) => + DigitButton( + label: localizations.translate( + i18.common.coreCommonCancel, + ), + onPressed: () { Navigator.of( - context, - rootNavigator: true, - ).pop(false), - ), + popupContext, + rootNavigator: true, + ).pop(false); + }, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, + ), + ], ), - ); + ) as bool; if (submit ?? false) { bloc.add( @@ -247,22 +262,16 @@ class StockReconciliationPageState ); } }, - child: Center( - child: Text( - localizations.translate( - i18.common.coreCommonSubmit, + label: localizations.translate( + i18.common.coreCommonSubmit, + ), ), - ), - ), ), - ), + ] ), ), children: [ DigitCard( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, children: [ Text( localizations.translate( @@ -292,93 +301,62 @@ class StockReconciliationPageState ), fetched: (facilities, allFacilities) { - return InkWell( - onTap: () async { - final stockReconciliationBloc = - context.read< - StockReconciliationBloc>(); - final facility = await context - .router - .push(InventoryFacilitySelectionRoute( - facilities: - facilities)) - as FacilityModel?; - - if (facility == null) { - return; - } - form - .control(_facilityKey) - .value = - localizations.translate( - 'FAC_${facility.id}', - ); - setState(() { - selectedFacilityId = - facility.id; - }); - stockReconciliationBloc.add( - StockReconciliationSelectFacilityEvent( - facility, - ), - ); - }, - child: IgnorePointer( - child: DigitTextFormField( - key: const Key( - _facilityKey), - hideKeyboard: true, - label: localizations - .translate( - i18.stockReconciliationDetails - .facilityLabel, - ), - suffix: const Padding( - padding: - EdgeInsets.all(8.0), - child: - Icon(Icons.search), - ), - formControlName: - _facilityKey, - readOnly: true, - isRequired: true, - onTap: () async { - final stockReconciliationBloc = - context.read< - StockReconciliationBloc>(); + return Column( + children: [ + const SizedBox(height: 16,), + InkWell( + onTap: () async { + final stockReconciliationBloc = + context.read< + StockReconciliationBloc>(); + final facility = await context + .router + .push(InventoryFacilitySelectionRoute( + facilities: + facilities)) + as FacilityModel?; - final facility = await context - .router - .push(InventoryFacilitySelectionRoute( - facilities: - facilities)) - as FacilityModel?; - - if (facility == null) { - return; - } - form - .control( - _facilityKey) - .value = - localizations - .translate( - 'FAC_${facility.id}', - ); - setState(() { - selectedFacilityId = - facility.id; - }); - stockReconciliationBloc - .add( - StockReconciliationSelectFacilityEvent( - facility, + if (facility == null) + return; + form + .control(_facilityKey) + .value = + localizations.translate( + 'FAC_${facility.id}', + ); + controller1.text = localizations.translate( + 'FAC_${facility.id}', + ); + setState(() { + selectedFacilityId = + facility.id; + }); + stockReconciliationBloc.add( + StockReconciliationSelectFacilityEvent( + facility, + ), + ); + }, + child: IgnorePointer( + child: ReactiveWrapperField( + formControlName: _facilityKey, + builder: (field){ + return InputField( + type: InputType.search, + isRequired: true, + controller: controller1, + label: localizations + .translate( + i18.stockReconciliationDetails + .facilityLabel, + ), + ); + }, ), - ); - }, - ), - ), + ), + ), + const SizedBox(height: 16,), + ], ); }); }, @@ -397,147 +375,109 @@ class StockReconciliationPageState ), ), fetched: (productVariants) { - return DigitReactiveSearchDropdown< - ProductVariantModel>( - key: - const Key(_productVariantKey), - label: localizations.translate( - i18.stockReconciliationDetails - .productLabel, - ), - form: form, - menuItems: productVariants, - formControlName: - _productVariantKey, - isRequired: true, - valueMapper: (value) { - return localizations.translate( - value.sku ?? value.id, - ); + return ReactiveWrapperField( + formControlName: _productVariantKey, + validationMessages: { + 'required': (error) => localizations.translate(i18 + .common + .corecommonRequired), }, - onSelected: (value) { - ctx - .read< - StockReconciliationBloc>() - .add( - StockReconciliationSelectProductEvent( - value.id, - isDistributor: InventorySingleton() - .isDistributor! && - !InventorySingleton() - .isWareHouseMgr!, - ), - ); + showErrors: (control) => control.invalid && control.touched, + builder: (field) { + return LabeledField( + isRequired: true, + label: localizations + .translate( + i18 + .stockReconciliationDetails + .productLabel, + ), + child: DigitDropdown( + emptyItemText: localizations.translate( + i18.common.noMatchFound, + ), + items: productVariants.map(( + variant) { + return DropdownItem( + name: localizations + .translate( + variant.sku ?? + variant.id, + ), + code: variant.id, + ); + }).toList(), + onSelect: (value) { + field.control.markAsTouched(); + /// Find the selected product variant model by matching the id + final selectedVariant = productVariants.firstWhere( + (variant) => variant.id == value.code, + ); + /// Update the form control with the selected product variant model + field.control.value = selectedVariant; + + ctx + .read< + StockReconciliationBloc>() + .add( + StockReconciliationSelectProductEvent( + value.code, + isDistributor: InventorySingleton() + .isDistributor! && + !InventorySingleton() + .isWareHouseMgr!, + ), + ); + }, + ), + ); }, - validationMessage: - localizations.translate(i18 - .common - .corecommonRequired), - emptyText: - localizations.translate( - i18.common.noMatchFound, - ), ); }, ); }, ), - DigitTableCard( - fraction: 2.5, - gap: kPadding, - element: { - localizations.translate(i18 - .stockReconciliationDetails - .dateOfReconciliation): - DateFormat('dd MMMM yyyy').format( - stockState.dateOfReconciliation, - ), - }, - ), + LabelValueItem(label: localizations.translate(i18 + .stockReconciliationDetails + .dateOfReconciliation), value: DateFormat('dd MMMM yyyy').format( + stockState.dateOfReconciliation)), const DigitDivider(), - DigitTableCard( - key: const Key('stockReconStockReceived'), - fraction: 2.5, - gap: kPadding, - element: { - localizations.translate( - i18.stockReconciliationDetails - .stockReceived, - ): stockState.stockReceived - .toStringAsFixed(0), - }, - ), + LabelValueItem(label: localizations.translate( + i18.stockReconciliationDetails + .stockReceived, + ), value: stockState.stockReceived + .toStringAsFixed(0)), const DigitDivider(), - DigitTableCard( - key: const Key('stockReconStockIssued'), - fraction: 2.5, - gap: kPadding, - element: { - localizations.translate( - i18.stockReconciliationDetails - .stockIssued, - ): stockState.stockIssued - .toStringAsFixed(0), - }, - ), + LabelValueItem(label: localizations.translate( + i18.stockReconciliationDetails + .stockIssued, + ), value: stockState.stockIssued + .toStringAsFixed(0)), const DigitDivider(), - DigitTableCard( - key: const Key('stockReconStockReturned'), - fraction: 2.5, - gap: kPadding, - element: { - localizations.translate( - i18.stockReconciliationDetails - .stockReturned, - ): stockState.stockReturned - .toStringAsFixed(0), - }, - ), + LabelValueItem(label: localizations.translate( + i18.stockReconciliationDetails + .stockReturned, + ), value: stockState.stockReturned + .toStringAsFixed(0)), const DigitDivider(), - DigitTableCard( - key: const Key('stockReconStockLost'), - fraction: 2.5, - gap: kPadding, - element: { - localizations.translate( - i18.stockReconciliationDetails - .stockLost, - ): stockState.stockLost - .toStringAsFixed(0), - }, - ), + LabelValueItem(label: localizations.translate( + i18.stockReconciliationDetails + .stockLost, + ), value: stockState.stockLost + .toStringAsFixed(0)), const DigitDivider(), - DigitTableCard( - key: const Key('stockReconStockDamaged'), - fraction: 2.5, - gap: kPadding, - element: { - localizations.translate( - i18.stockReconciliationDetails - .stockDamaged, - ): stockState.stockDamaged - .toStringAsFixed(0), - }, - ), + LabelValueItem(label: localizations.translate( + i18.stockReconciliationDetails + .stockDamaged, + ), value: stockState.stockDamaged + .toStringAsFixed(0)), const DigitDivider(), - DigitTableCard( - key: const Key('stockReconStockOnHand'), - fraction: 2.5, - gap: kPadding, - element: { - localizations.translate( - i18.stockReconciliationDetails - .stockOnHand, - ): stockState.stockInHand - .toStringAsFixed(0), - }, - ), - DigitInfoCard( - margin: EdgeInsets.zero, - icon: Icons.info, - backgroundColor: - theme.colorScheme.tertiaryContainer, - iconColor: theme.colorScheme.surfaceTint, + LabelValueItem(label: localizations.translate( + i18.stockReconciliationDetails + .stockOnHand), value: stockState.stockInHand + .toStringAsFixed(0)), + InfoCard( + type: InfoType.info, description: localizations.translate( i18.stockReconciliationDetails .infoCardContent, @@ -548,56 +488,71 @@ class StockReconciliationPageState ), ), const SizedBox( - height: kPadding * 2, + height: spacer4, ), const DigitDivider(), const SizedBox( - height: kPadding, + height: spacer2, ), - DigitTextFormField( - key: const Key(_manualCountKey), - isRequired: true, - label: localizations.translate( - i18.stockReconciliationDetails - .manualCountLabel, - ), - formControlName: _manualCountKey, - keyboardType: - const TextInputType.numberWithOptions( - decimal: false, - ), - validationMessages: { - "required": (object) => - localizations.translate(i18 - .stockReconciliationDetails - .manualCountRequiredError), - "number": (object) => - localizations.translate(i18 - .stockReconciliationDetails - .manualCountInvalidType), - "min": (object) => - localizations.translate(i18 - .stockReconciliationDetails - .manualCountMinError), - "max": (object) => - localizations.translate(i18 - .stockReconciliationDetails - .manualCountMaxError), - }, + ReactiveWrapperField( + formControlName: _manualCountKey, + validationMessages: { + "required": (object) => i18 + .stockReconciliationDetails + .manualCountRequiredError, + "number": (object) => i18 + .stockReconciliationDetails + .manualCountInvalidType, + "min": (object) => i18 + .stockReconciliationDetails + .manualCountMinError, + "max": (object) => i18 + .stockReconciliationDetails + .manualCountMaxError, + }, + showErrors: (control) => control.invalid && control.touched, + builder: (field) { + return LabeledField( + label: localizations.translate( + i18.stockReconciliationDetails + .manualCountLabel, + ), + isRequired: true, + child: BaseDigitFormInput( + errorMessage: field.errorText, + keyboardType: + const TextInputType + .numberWithOptions( + decimal: false, + ), + initialValue: '0', + onChange: (value){ + field.control.markAsTouched(); + field.control.value = value; + }, + ), + ); + } ), - DigitTextFormField( - label: localizations.translate( - i18.stockReconciliationDetails - .commentsLabel, - ), - maxLines: 3, - minLines: 3, - formControlName: - _reconciliationCommentsKey, + ReactiveWrapperField( + formControlName: _reconciliationCommentsKey, + builder: (field){ + return InputField( + type: InputType.textArea, + label: localizations + .translate( + i18.stockReconciliationDetails + .commentsLabel, + ), + textAreaScroll: TextAreaScroll.smart, + onChange: (value){ + field.control.value= value; + }, + ); + }, ), ], ), - ), ], ), ); diff --git a/packages/inventory_management/lib/widgets/back_navigation_help_header.dart b/packages/inventory_management/lib/widgets/back_navigation_help_header.dart index 633e2c456..3fc512d89 100644 --- a/packages/inventory_management/lib/widgets/back_navigation_help_header.dart +++ b/packages/inventory_management/lib/widgets/back_navigation_help_header.dart @@ -1,5 +1,5 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/theme/spacers.dart'; import 'package:flutter/material.dart'; import 'package:inventory_management/blocs/app_localization.dart'; @@ -26,7 +26,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { final theme = Theme.of(context); return Padding( - padding: const EdgeInsets.all(kPadding / 2), + padding: const EdgeInsets.all(spacer1), child: Row( children: [ Expanded( @@ -55,7 +55,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { ], ), ), - SizedBox(width: showHelp ? kPadding * 2 : 0), + SizedBox(width: showHelp ? spacer2: 0), if (showHelp) TextButton( style: TextButton.styleFrom(padding: EdgeInsets.zero), diff --git a/packages/inventory_management/lib/widgets/inventory/no_facilities_assigned_dialog.dart b/packages/inventory_management/lib/widgets/inventory/no_facilities_assigned_dialog.dart index d7d0d9358..6388e73dd 100644 --- a/packages/inventory_management/lib/widgets/inventory/no_facilities_assigned_dialog.dart +++ b/packages/inventory_management/lib/widgets/inventory/no_facilities_assigned_dialog.dart @@ -1,5 +1,8 @@ import 'package:auto_route/auto_route.dart'; -import 'package:digit_components/digit_components.dart'; +import 'package:digit_ui_components/enum/app_enums.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_button.dart'; +import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; +import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; import 'package:flutter/material.dart'; import '../../../utils/i18_key_constants.dart' as i18; import '../../blocs/app_localization.dart'; @@ -7,29 +10,34 @@ import '../../blocs/app_localization.dart'; class NoFacilitiesAssignedDialog { static Future show( BuildContext context, InventoryLocalization localizations) { - return DigitDialog.show( - context, - options: DigitDialogOptions( - titleIcon: Icon( - Icons.warning, - color: Theme.of(context).colorScheme.error, - ), - titleText: localizations.translate( - i18.warehouseDetails.noFacilitiesAssigned, - ), - contentText: localizations.translate( - i18.warehouseDetails.noFacilitiesAssignedDescription, - ), - primaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.corecommonclose, + return + showCustomPopup( + context: context, + builder: (popupContext) => Popup( + title: localizations.translate( + i18.warehouseDetails.noFacilitiesAssigned, ), - action: (dialogContext) { - Navigator.of(context, rootNavigator: true).pop(); - context.router.maybePop(); + onOutsideTap: () { + Navigator.of(popupContext).pop(); }, + description:localizations.translate( + i18.warehouseDetails.noFacilitiesAssignedDescription, + ), + type: PopUpType.alert, + actions: [ + DigitButton( + label: localizations.translate( + i18.common.corecommonclose, + ), + onPressed: () { + Navigator.of(popupContext, rootNavigator: true).pop(); + popupContext.router.maybePop(); + }, + type: DigitButtonType.primary, + size: DigitButtonSize.large, + ), + ], ), - ), - ); + ); } } diff --git a/packages/inventory_management/lib/widgets/reports/readonly_pluto_grid.dart b/packages/inventory_management/lib/widgets/reports/readonly_pluto_grid.dart index fd5d36d7d..e94fd8dbf 100644 --- a/packages/inventory_management/lib/widgets/reports/readonly_pluto_grid.dart +++ b/packages/inventory_management/lib/widgets/reports/readonly_pluto_grid.dart @@ -1,4 +1,4 @@ -import 'package:digit_components/theme/colors.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:flutter/material.dart'; import 'package:pluto_grid/pluto_grid.dart'; import '../../../utils/i18_key_constants.dart' as i18; @@ -35,6 +35,7 @@ class ReadonlyDigitGrid extends LocalizedStatefulWidget { class ReadonlyDigitGridState extends LocalizedState { @override Widget build(BuildContext context) { + final theme = Theme.of(context); // Returns a PlutoGrid with the given configuration and data return PlutoGrid( mode: PlutoGridMode.readOnly, @@ -51,15 +52,15 @@ class ReadonlyDigitGridState extends LocalizedState { restoreAutoSizeAfterFrozenColumn: true, ), style: PlutoGridStyleConfig( - gridBorderColor: const DigitColors().seaShellGray, - oddRowColor: const DigitColors().seaShellGray, - borderColor: const DigitColors().seaShellGray, + gridBorderColor: theme.colorTheme.generic.background, + oddRowColor: theme.colorTheme.generic.background, + borderColor: theme.colorTheme.generic.background, iconColor: Colors.transparent, evenRowColor: Colors.transparent, - activatedColor: const DigitColors().burningOrange.withOpacity( + activatedColor: theme.colorTheme.primary.primary1.withOpacity( 0.2, ), - activatedBorderColor: const DigitColors().burningOrange.withOpacity( + activatedBorderColor: theme.colorTheme.primary.primary1.withOpacity( 0.8, ), enableRowColorAnimation: true, diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index bda7b1fa2..7d6603fd7 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -380,9 +372,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + name: dart_mappable_builder + sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e + url: "https://pub.dev" + source: hosted version: "4.2.3" dart_style: dependency: transitive @@ -408,13 +401,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.1" - digit_components: - dependency: transitive - description: - path: "../digit_components" - relative: true - source: path - version: "1.0.2+1" digit_data_model: dependency: "direct main" description: @@ -422,13 +408,6 @@ packages: relative: true source: path version: "1.0.5-dev.1" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" digit_scanner: dependency: "direct main" description: @@ -485,14 +464,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.18.0" - easy_stepper: - dependency: transitive - description: - name: easy_stepper - sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" - url: "https://pub.dev" - source: hosted - version: "0.8.5+1" fake_async: dependency: transitive description: @@ -557,46 +528,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+3" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" - url: "https://pub.dev" - source: hosted - version: "2.17.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" fixnum: dependency: transitive description: @@ -642,62 +573,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.13" - flutter_focus_watcher: - dependency: transitive - description: - name: flutter_focus_watcher - sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility: - dependency: transitive - description: - name: flutter_keyboard_visibility - sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" - url: "https://pub.dev" - source: hosted - version: "5.4.1" - flutter_keyboard_visibility_linux: - dependency: transitive - description: - name: flutter_keyboard_visibility_linux - sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_macos: - dependency: transitive - description: - name: flutter_keyboard_visibility_macos - sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_platform_interface: - dependency: transitive - description: - name: flutter_keyboard_visibility_platform_interface - sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_web: - dependency: transitive - description: - name: flutter_keyboard_visibility_web - sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_windows: - dependency: transitive - description: - name: flutter_keyboard_visibility_windows - sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 - url: "https://pub.dev" - source: hosted - version: "1.0.0" flutter_lints: dependency: "direct dev" description: @@ -748,14 +623,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" flutter_web_plugins: dependency: transitive description: flutter @@ -1193,22 +1060,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - package_info_plus: - dependency: transitive - description: - name: package_info_plus - sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 - url: "https://pub.dev" - source: hosted - version: "8.0.2" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 - url: "https://pub.dev" - source: hosted - version: "3.0.1" path: dependency: "direct main" description: @@ -1313,14 +1164,6 @@ packages: url: "https://pub.dev" source: hosted version: "8.0.0" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" pool: dependency: transitive description: @@ -1353,14 +1196,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.3" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a - url: "https://pub.dev" - source: hosted - version: "2.1.1" reactive_forms: dependency: "direct main" description: @@ -1377,14 +1212,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" - remove_emoji_input_formatter: - dependency: transitive - description: - name: remove_emoji_input_formatter - sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" - url: "https://pub.dev" - source: hosted - version: "0.0.1+1" rxdart: dependency: transitive description: diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index d3678b9ee..63dd4aec3 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -24,7 +24,9 @@ dependencies: dart_mappable: ^4.2.2 drift: ^2.18.0 auto_route: ^8.1.3 - digit_data_model: ^1.0.5-dev.1 + digit_data_model: + path: + ../digit_data_model collection: ^1.18.0 dio: ^5.4.3+1 location: ^6.0.2 @@ -37,7 +39,9 @@ dependencies: path: ^1.8.2 drift_db_viewer: ^2.0.0 recase: ^4.1.0 - digit_scanner: ^1.0.3+1 + digit_scanner: + path: + ../digit_scanner pluto_grid: ^8.0.0 dev_dependencies: From e4d3a01a6db00cfe7019df29d59219337da0c4e5 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Wed, 11 Dec 2024 15:49:19 +0530 Subject: [PATCH 187/241] updated components to ui_components in attendance --- .../lib/pages/manage_attendance.dart | 104 ++-- .../lib/pages/mark_attendance.dart | 46 +- .../lib/pages/session_select.dart | 497 +++++++++--------- .../widgets/attendance_acknowledgement.dart | 22 +- packages/attendance_management/pubspec.lock | 362 ++++++------- 5 files changed, 515 insertions(+), 516 deletions(-) diff --git a/packages/attendance_management/lib/pages/manage_attendance.dart b/packages/attendance_management/lib/pages/manage_attendance.dart index c70a48f86..76ede97c0 100644 --- a/packages/attendance_management/lib/pages/manage_attendance.dart +++ b/packages/attendance_management/lib/pages/manage_attendance.dart @@ -7,6 +7,7 @@ import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/label_value_summary.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -90,13 +91,13 @@ class _ManageAttendancePageState extends State { register.attendees?.length ?? 0, localization.translate(i18.attendance.startDateLabel): register.startDate != null - ? AttendanceDateTimeManagement.getDateFromTimestamp( - register.startDate!) + ? AttendanceDateTimeManagement + .getDateFromTimestamp(register.startDate!) : localization.translate(i18.common.coreCommonNA), localization.translate(i18.attendance.endDateLabel): register.endDate != null - ? AttendanceDateTimeManagement.getDateFromTimestamp( - register.endDate!) + ? AttendanceDateTimeManagement + .getDateFromTimestamp(register.endDate!) : localization.translate(i18.common.coreCommonNA), localization.translate(i18.attendance.statusLabel): register.endDate != null && @@ -174,7 +175,8 @@ class _ManageAttendancePageState extends State { children: [ Padding( padding: - EdgeInsets.all(theme.spacerTheme.spacer2).copyWith( + EdgeInsets.all(theme.spacerTheme.spacer2) + .copyWith( top: 2, left: theme.spacerTheme.spacer2 * 2, ), @@ -270,53 +272,51 @@ class RegisterCard extends StatelessWidget { var localization = AttendanceLocalization.of(context); return DigitCard( - padding: EdgeInsets.all(theme.spacerTheme.spacer2), - margin: EdgeInsets.all(theme.spacerTheme.spacer2), - children: [ - LabelValueList( - labelFlex: theme.spacerTheme.spacer3.toInt(), - padding: EdgeInsets.all(theme.spacerTheme.spacer3), - items: data.keys.map((e) { - return LabelValuePair(label: e, value: data[e]?.toString() ?? ''); - }).toList(), - ), - show - ? Button( - size: ButtonSize.large, - type: ButtonType.primary, - mainAxisSize: MainAxisSize.max, - label: - AttendanceLocalization.of(context) + padding: EdgeInsets.all(theme.spacerTheme.spacer2), + margin: EdgeInsets.all(theme.spacerTheme.spacer2), + children: [ + LabelValueSummary( + padding: EdgeInsets.all(theme.spacerTheme.spacer3), + items: data.keys.map((e) { + return LabelValueItem(label: e, value: data[e]?.toString() ?? ''); + }).toList(), + ), + show + ? DigitButton( + size: DigitButtonSize.large, + type: DigitButtonType.primary, + mainAxisSize: MainAxisSize.max, + label: AttendanceLocalization.of(context) .translate(i18.attendance.openRegister), - onPressed: () async { - if (noOfAttendees == 0) { - Toast.showToast( - context, - message: localization.translate( - i18.attendance.noAttendeesEnrolledMessage), - type: ToastType.error, - ); - } else if (startDate != null && - startDate!.millisecondsSinceEpoch > - DateTime.now().millisecondsSinceEpoch) { - Toast.showToast( - context, - message: localization - .translate(i18.attendance.registerNotStarted), - type: ToastType.error, - ); - } else { - await context.router.push( - AttendanceDateSessionSelectionRoute( - registers: registers, - registerID: registerId, - ), - ); - attendanceBloc.add(const AttendanceEvents.initial()); - } - }, - ) - : const Offstage(),] - ); + onPressed: () async { + if (noOfAttendees == 0) { + Toast.showToast( + context, + message: localization.translate( + i18.attendance.noAttendeesEnrolledMessage), + type: ToastType.error, + ); + } else if (startDate != null && + startDate!.millisecondsSinceEpoch > + DateTime.now().millisecondsSinceEpoch) { + Toast.showToast( + context, + message: localization + .translate(i18.attendance.registerNotStarted), + type: ToastType.error, + ); + } else { + await context.router.push( + AttendanceDateSessionSelectionRoute( + registers: registers, + registerID: registerId, + ), + ); + attendanceBloc.add(const AttendanceEvents.initial()); + } + }, + ) + : const Offstage(), + ]); } } diff --git a/packages/attendance_management/lib/pages/mark_attendance.dart b/packages/attendance_management/lib/pages/mark_attendance.dart index 48f8a2ee3..32cecfb9d 100644 --- a/packages/attendance_management/lib/pages/mark_attendance.dart +++ b/packages/attendance_management/lib/pages/mark_attendance.dart @@ -3,18 +3,18 @@ import 'dart:async'; import 'package:attendance_management/attendance_management.dart'; import 'package:attendance_management/utils/extensions/extensions.dart'; import 'package:auto_route/auto_route.dart'; -import 'package:digit_ui_components/widgets/atoms/digit_loader.dart'; -import 'package:digit_ui_components/widgets/molecules/digit_table.dart' - as table; import 'package:digit_data_model/data/data_repository.dart'; -import 'package:digit_ui_components/blocs/fetch_location_bloc.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/services/location_bloc.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/utils/component_utils.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_loader.dart'; import 'package:digit_ui_components/widgets/atoms/digit_search_bar.dart'; import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:digit_ui_components/widgets/atoms/table_cell.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_table.dart' + as table; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:intl/intl.dart'; @@ -156,15 +156,16 @@ class _MarkAttendancePageState extends State { attendanceCollectionModel!, viewOnly); return ScrollableContent( - enableFixedButton: true, + enableFixedDigitButton: true, footer: viewOnly ? const SizedBox.shrink() : DigitCard( - margin: EdgeInsets.only(top: theme.spacerTheme.spacer4), + margin: EdgeInsets.only( + top: theme.spacerTheme.spacer4), children: [ - Button( - size: ButtonSize.large, - type: ButtonType.secondary, + DigitButton( + size: DigitButtonSize.large, + type: DigitButtonType.secondary, mainAxisSize: MainAxisSize.max, onPressed: () { checkIfAllAttendeesMarked( @@ -183,9 +184,9 @@ class _MarkAttendancePageState extends State { .saveAndMarkLaterLabel, ), ), - Button( - size: ButtonSize.large, - type: ButtonType.primary, + DigitButton( + size: DigitButtonSize.large, + type: DigitButtonType.primary, mainAxisSize: MainAxisSize.max, onPressed: !viewOnly ? () { @@ -199,8 +200,7 @@ class _MarkAttendancePageState extends State { context, ); } - : () { - }, + : () {}, label: localizations.translate( (!viewOnly) ? i18.common.coreCommonSubmit @@ -409,9 +409,9 @@ class _MarkAttendancePageState extends State { SizedBox( width: 100, height: 40, - child: Button( - size: ButtonSize.large, - type: ButtonType.primary, + child: DigitButton( + size: DigitButtonSize.large, + type: DigitButtonType.primary, mainAxisSize: MainAxisSize.max, label: k.translate( i18.attendance.closeButton, @@ -496,12 +496,12 @@ class _MarkAttendancePageState extends State { description: '${localizations.translate(i18.attendance.confirmationDesc)} \n\n${localizations.translate(i18.attendance.confirmationDescNote)}', actions: [ - Button( + DigitButton( label: localizations.translate( i18.attendance.proceed, ), - type: ButtonType.primary, - size: ButtonSize.large, + type: DigitButtonType.primary, + size: DigitButtonSize.large, onPressed: () { individualLogBloc?.add(SaveAsDraftEvent( entryTime: widget.entryTime, @@ -519,11 +519,11 @@ class _MarkAttendancePageState extends State { navigateToAcknowledgement(localizations); }, ), - Button( + DigitButton( label: localizations .translate(i18.common.coreCommonGoback), - type: ButtonType.secondary, - size: ButtonSize.large, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, onPressed: () { Navigator.of( context, diff --git a/packages/attendance_management/lib/pages/session_select.dart b/packages/attendance_management/lib/pages/session_select.dart index d1f897825..5081ff3ae 100644 --- a/packages/attendance_management/lib/pages/session_select.dart +++ b/packages/attendance_management/lib/pages/session_select.dart @@ -3,6 +3,7 @@ import 'package:attendance_management/utils/extensions/extensions.dart'; import 'package:auto_route/auto_route.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/models/RadioButtonModel.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; @@ -98,260 +99,287 @@ class _AttendanceDateSessionSelectionPageState showHelp: true, showLogoutCTA: false, ), - enableFixedButton: true, + enableFixedDigitButton: true, footer: DigitCard( - padding: EdgeInsets.all( - theme.spacerTheme.spacer2), + padding: + EdgeInsets.all(theme.spacerTheme.spacer2), children: [ ReactiveValueListenableBuilder( - formControlName: _dateOfSession, - builder: (context, value, _) { - return Button( - size: ButtonSize.large, - type: ButtonType.primary, - mainAxisSize: MainAxisSize.max, - label: localizations.translate( - isAttendanceCompleted( - value.value as DateTime) - ? i18.attendance.viewAttendance - : i18.attendance.markAttendance, - ), - onPressed: () async { - form.markAllAsTouched(); - if (selectedRegister - .additionalDetails?[ - EnumValues.sessions - .toValue()] == - 2 && + formControlName: _dateOfSession, + builder: (context, value, _) { + return DigitButton( + size: DigitButtonSize.large, + type: DigitButtonType.primary, + mainAxisSize: MainAxisSize.max, + label: localizations.translate( + isAttendanceCompleted( + value.value as DateTime) + ? i18 + .attendance.viewAttendance + : i18.attendance + .markAttendance, + ), + onPressed: () async { + form.markAllAsTouched(); + if (selectedRegister + .additionalDetails?[ + EnumValues.sessions + .toValue()] == + 2 && + form + .control( + _sessionRadio) + .value == + null) { form - .control(_sessionRadio) - .value == - null) { - form - .control(_sessionRadio) - .setErrors({'': true}); + .control(_sessionRadio) + .setErrors({'': true}); - form.control(_sessionRadio).setValidators([Validators.required]); + form + .control(_sessionRadio) + .setValidators( + [Validators.required]); - // Ensure form control is updated after changing validators - form.control(_sessionRadio).updateValueAndValidity(); - } else { - if (!form.valid) { - return; - } else { - final session = form + // Ensure form control is updated after changing validators + form .control(_sessionRadio) - .value; - DateTime dateSession = form - .control(_dateOfSession) - .value; + .updateValueAndValidity(); + } else { + if (!form.valid) { + return; + } else { + final session = form + .control(_sessionRadio) + .value; + DateTime dateSession = form + .control(_dateOfSession) + .value; - final entryTime = selectedRegister - .additionalDetails?[ - EnumValues.sessions - .toValue()] == - 2 - ? AttendanceDateTimeManagement - .getMillisecondEpoch( - dateSession, - form - .control( - _sessionRadio) - .value != - null - ? int.parse(form - .control( - _sessionRadio) - .value) - : 0, - "entryTime", - ) - : (DateTime( - dateSession.year, - dateSession.month, - dateSession.day, - 9) - .millisecondsSinceEpoch); + final entryTime = selectedRegister + .additionalDetails?[ + EnumValues + .sessions + .toValue()] == + 2 + ? AttendanceDateTimeManagement + .getMillisecondEpoch( + dateSession, + form + .control( + _sessionRadio) + .value != + null + ? int.parse(form + .control( + _sessionRadio) + .value) + : 0, + "entryTime", + ) + : (DateTime( + dateSession.year, + dateSession.month, + dateSession.day, + 9) + .millisecondsSinceEpoch); - final exitTime = selectedRegister - .additionalDetails?[ - EnumValues.sessions - .toValue()] == - 2 - ? AttendanceDateTimeManagement - .getMillisecondEpoch( - dateSession, - form - .control( - _sessionRadio) - .value != - null - ? int.parse(form - .control( - _sessionRadio) - .value) - : 1, - "exitTime", - ) - : (DateTime( - dateSession.year, - dateSession.month, - dateSession.day, - 18) - .millisecondsSinceEpoch); + final exitTime = selectedRegister + .additionalDetails?[ + EnumValues + .sessions + .toValue()] == + 2 + ? AttendanceDateTimeManagement + .getMillisecondEpoch( + dateSession, + form + .control( + _sessionRadio) + .value != + null + ? int.parse(form + .control( + _sessionRadio) + .value) + : 1, + "exitTime", + ) + : (DateTime( + dateSession.year, + dateSession.month, + dateSession.day, + 18) + .millisecondsSinceEpoch); - final submit = - await context.router.push( - MarkAttendanceRoute( - attendees: selectedRegister - .attendees != - null - //Filtering attendees based on current time and enrollment date of the attendee - ? (selectedRegister - .attendees ?? - []) - .where((att) => - att.enrollmentDate != - null && - att.enrollmentDate! <= - entryTime) - .toList() - : [], - dateTime: dateSession, - session: session != null ? int.parse(session) : null, - entryTime: entryTime, - exitTime: exitTime, - registerId: - selectedRegister.id, - tenantId: selectedRegister - .tenantId - .toString(), - ), - ); - if (submit == null) { - form - .control(_sessionRadio) - .value = null; + final submit = + await context.router.push( + MarkAttendanceRoute( + attendees: selectedRegister + .attendees != + null + //Filtering attendees based on current time and enrollment date of the attendee + ? (selectedRegister + .attendees ?? + []) + .where((att) => + att.enrollmentDate != + null && + att.enrollmentDate! <= + entryTime) + .toList() + : [], + dateTime: dateSession, + session: session != null + ? int.parse(session) + : null, + entryTime: entryTime, + exitTime: exitTime, + registerId: + selectedRegister.id, + tenantId: selectedRegister + .tenantId + .toString(), + ), + ); + if (submit == null) { + form + .control(_sessionRadio) + .value = null; + } } } - } - }, - ); - })] - ), + }, + ); + }) + ]), children: [ - DigitCard( - children: [ - Text( - localizations.translate( - i18.attendance.selectSession, - ), - style: DigitTheme.instance.mobileTheme - .textTheme.displayMedium, + DigitCard(children: [ + Text( + localizations.translate( + i18.attendance.selectSession, ), - ReactiveWrapperField( - formControlName: _dateOfSession, - builder: (field){ - return LabeledField( - label: localizations.translate( - i18.attendance.dateOfSession, - ), - child: DigitDateFormInput( - onChange: (val) => { - form.control(_dateOfSession).markAsTouched(), - form.control(_dateOfSession).value = AttendanceDateTimeManagement.getFormattedDateToDateTime(val), - }, - initialValue: AttendanceDateTimeManagement.getDateString(form.control(_dateOfSession).value), - firstDate: selectedRegister.startDate != - null - ? DateTime - .fromMillisecondsSinceEpoch( - selectedRegister.startDate!) - : null, - lastDate: selectedRegister.endDate != null - ? selectedRegister.endDate! < - DateTime.now() - .millisecondsSinceEpoch - ? DateTime - .fromMillisecondsSinceEpoch( - selectedRegister - .endDate!) - : DateTime.now() - : null, - cancelText: localizations.translate( - i18.common.coreCommonCancel), - confirmText: localizations - .translate(i18.common.coreCommonOk), - ), - );} - ), - - if (selectedRegister.additionalDetails?[ - EnumValues.sessions.toValue()] == - 2) - ReactiveWrapperField( - formControlName: _sessionRadio, - validationMessages: { - 'required': (_) => + style: DigitTheme.instance.mobileTheme + .textTheme.displayMedium, + ), + ReactiveWrapperField( + formControlName: _dateOfSession, + builder: (field) { + return LabeledField( + label: localizations.translate( + i18.attendance.dateOfSession, + ), + child: DigitDateFormInput( + onChange: (val) => { + form + .control(_dateOfSession) + .markAsTouched(), + form + .control(_dateOfSession) + .value = + AttendanceDateTimeManagement + .getFormattedDateToDateTime( + val), + }, + initialValue: + AttendanceDateTimeManagement + .getDateString(form + .control(_dateOfSession) + .value), + firstDate: selectedRegister + .startDate != + null + ? DateTime + .fromMillisecondsSinceEpoch( + selectedRegister + .startDate!) + : null, + lastDate: selectedRegister + .endDate != + null + ? selectedRegister.endDate! < + DateTime.now() + .millisecondsSinceEpoch + ? DateTime + .fromMillisecondsSinceEpoch( + selectedRegister + .endDate!) + : DateTime.now() + : null, + cancelText: localizations.translate( + i18.common.coreCommonCancel), + confirmText: localizations.translate( - i18.attendance.plzSelectSession), - }, - showErrors: (control) => control.invalid && - control.touched, - // Ensures error is shown if invalid and touched - builder: (field) { - return LabeledField( - isRequired: true, - label: localizations.translate(i18 - .attendance.sessionDescForRadio), - child: RadioList( - onChanged: (val) { - form - .control( - _sessionRadio) - .markAsTouched(); - form - .control( - _sessionRadio) - .value = val.code; - }, - groupValue: form - .control( - _sessionRadio) - .value ?? "", - errorMessage: field.errorText, - radioButtons:[ - RadioButtonModel( - code: "0", - name: localizations - .translate(i18.attendance.morningSession,) - ), - RadioButtonModel( - code: "1", - name: localizations - .translate(i18.attendance.eveningSession,) - ) - ] - ), - ); - }), - ] - ), + i18.common.coreCommonOk), + ), + ); + }), + if (selectedRegister.additionalDetails?[ + EnumValues.sessions.toValue()] == + 2) + ReactiveWrapperField( + formControlName: _sessionRadio, + validationMessages: { + 'required': (_) => + localizations.translate(i18 + .attendance.plzSelectSession), + }, + showErrors: (control) => + control.invalid && control.touched, + // Ensures error is shown if invalid and touched + builder: (field) { + return LabeledField( + isRequired: true, + label: localizations.translate(i18 + .attendance + .sessionDescForRadio), + child: RadioList( + onChanged: (val) { + form + .control(_sessionRadio) + .markAsTouched(); + form + .control(_sessionRadio) + .value = val.code; + }, + groupValue: form + .control(_sessionRadio) + .value ?? + "", + errorMessage: field.errorText, + radioDigitButtons: [ + RadioButtonModel( + code: "0", + name: localizations + .translate( + i18.attendance + .morningSession, + )), + RadioButtonModel( + code: "1", + name: localizations + .translate( + i18.attendance + .eveningSession, + )) + ]), + ); + }), + ]), if (showInfoCard( selectedRegister, DateTime.now(), )) - DigitCard( - children: [InfoCard( + DigitCard(children: [ + InfoCard( title: localizations.translate( - i18.attendance.missedAttendanceHeader, + i18.attendance.missedAttendanceHeader, ), type: InfoType.info, description: localizations.translate( getMissedDays(context), ), - ),] - ) + ), + ]) else const SizedBox(), ], @@ -366,10 +394,7 @@ class _AttendanceDateSessionSelectionPageState return fb.group({ _dateOfSession: FormControl(value: DateTime.now(), validators: []), - _sessionRadio: FormControl( - value: null, - validators: [] - ), + _sessionRadio: FormControl(value: null, validators: []), }); } @@ -412,8 +437,10 @@ class _AttendanceDateSessionSelectionPageState if ((register.attendanceLog ?? []).isNotEmpty) { final selectDateCompleted = register.attendanceLog ?.where((l) => - AttendanceDateTimeManagement.getFilteredDate(l.keys.first.toString()) == - AttendanceDateTimeManagement.getFilteredDate(selectedDate.toString())) + AttendanceDateTimeManagement.getFilteredDate( + l.keys.first.toString()) == + AttendanceDateTimeManagement.getFilteredDate( + selectedDate.toString())) .first .values .first; diff --git a/packages/attendance_management/lib/widgets/attendance_acknowledgement.dart b/packages/attendance_management/lib/widgets/attendance_acknowledgement.dart index 2c70dd300..eb912631c 100644 --- a/packages/attendance_management/lib/widgets/attendance_acknowledgement.dart +++ b/packages/attendance_management/lib/widgets/attendance_acknowledgement.dart @@ -19,7 +19,7 @@ class AttendanceAcknowledgementPage extends LocalizedStatefulWidget { final VoidCallback? secondaryAction; final String? secondaryLabel; - AttendanceAcknowledgementPage({ + const AttendanceAcknowledgementPage({ super.key, super.appLocalizations, required this.label, @@ -60,22 +60,20 @@ class _AttendanceAcknowledgementPageState i18.acknowledgementSuccess.acknowledgementDescriptionText, ), actions: [ - Button( + DigitButton( label: widget.actionLabel ?? '', - onPressed: widget.action ?? (){}, - type: ButtonType.primary, - size: ButtonSize.large, + onPressed: widget.action ?? () {}, + type: DigitButtonType.primary, + size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, ), - Button( - type: ButtonType.secondary, - size: ButtonSize.large, + DigitButton( + type: DigitButtonType.secondary, + size: DigitButtonSize.large, label: widget.secondaryLabel ?? '', - onPressed: widget.secondaryAction ?? (){}, + onPressed: widget.secondaryAction ?? () {}, ), - - ] - ), + ]), ], )); } diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index de4b65da0..b424c9901 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "64.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -61,18 +69,18 @@ packages: dependency: "direct main" description: name: auto_route - sha256: eb33554581a0a4aa7e6da0f13a44291a55bf71359012f1d9feb41634ff908ff8 + sha256: a9001a90539ca3effc168f7e1029a5885c7326b9032c09ac895e303c1d137704 url: "https://pub.dev" source: hosted - version: "7.9.2" + version: "8.3.0" auto_route_generator: dependency: "direct dev" description: name: auto_route_generator - sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" + sha256: ba28133d3a3bf0a66772bcc98dade5843753cd9f1a8fb4802b842895515b67d3 url: "https://pub.dev" source: hosted - version: "7.3.2" + version: "8.0.0" bloc: dependency: transitive description: @@ -130,13 +138,13 @@ packages: source: hosted version: "2.4.2" build_runner: - dependency: "direct main" + dependency: "direct dev" description: name: build_runner - sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" url: "https://pub.dev" source: hosted - version: "2.4.9" + version: "2.4.11" build_runner_core: dependency: transitive description: @@ -165,26 +173,26 @@ packages: dependency: transitive description: name: camera - sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" + sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167" url: "https://pub.dev" source: hosted - version: "0.10.5+9" - camera_android: + version: "0.11.0+2" + camera_android_camerax: dependency: transitive description: - name: camera_android - sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 + name: camera_android_camerax + sha256: "011be2ab0e5b3e3aa8094413fa890f8c5c5afd7cfdaef353a992047d4dab5780" url: "https://pub.dev" source: hosted - version: "0.10.9+2" + version: "0.6.8+2" camera_avfoundation: dependency: transitive description: name: camera_avfoundation - sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" + sha256: "2e4c568f70e406ccb87376bc06b53d2f5bebaab71e2fbcc1a950e31449381bcf" url: "https://pub.dev" source: hosted - version: "0.9.13+10" + version: "0.9.17+5" camera_platform_interface: dependency: transitive description: @@ -257,22 +265,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.18.0" - connectivity_plus: - dependency: "direct main" - description: - name: connectivity_plus - sha256: "224a77051d52a11fbad53dd57827594d3bd24f945af28bd70bab376d68d437f0" - url: "https://pub.dev" - source: hosted - version: "5.0.2" - connectivity_plus_platform_interface: - dependency: transitive - description: - name: connectivity_plus_platform_interface - sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a - url: "https://pub.dev" - source: hosted - version: "1.2.4" convert: dependency: transitive description: @@ -293,10 +285,10 @@ packages: dependency: transitive description: name: cross_file - sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" url: "https://pub.dev" source: hosted - version: "0.3.3+8" + version: "0.3.4+2" crypto: dependency: transitive description: @@ -324,12 +316,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "8011a4c367094dfb018fce701d700a582ba862bb" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git - version: "4.2.0" + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.3" dart_style: dependency: transitive description: @@ -346,14 +336,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" - dbus: - dependency: transitive - description: - name: dbus - sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac" - url: "https://pub.dev" - source: hosted - version: "0.7.10" diff_match_patch: dependency: transitive description: @@ -362,28 +344,28 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.1" - digit_components: + digit_data_model: dependency: "direct main" description: - path: "../digit_components" + path: "../digit_data_model" relative: true source: path - version: "1.0.2+1" - digit_data_model: - dependency: "direct main" - description: - name: digit_data_model - sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" - url: "https://pub.dev" - source: hosted version: "1.0.5-dev.1" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_ui_components: dependency: "direct main" description: - name: digit_ui_components - sha256: e38f163515aa6a6c5283754e741b21f33fb3a6c0a1fc171a1e4e6620510d46ae - url: "https://pub.dev" - source: hosted + path: "flutter/digit-ui-components/digit_components" + ref: version_update + resolved-ref: c68a3ceb1f00c6128780c0cbeb58d9aa8c4d7a13 + url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" + source: git version: "0.0.1+7" dio: dependency: "direct main" @@ -413,10 +395,10 @@ packages: dependency: "direct main" description: name: drift - sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + sha256: "6acedc562ffeed308049f78fb1906abad3d65714580b6745441ee6d50ec564cd" url: "https://pub.dev" source: hosted - version: "2.15.0" + version: "2.18.0" drift_db_viewer: dependency: "direct main" description: @@ -429,10 +411,10 @@ packages: dependency: "direct dev" description: name: drift_dev - sha256: c037d9431b6f8dc633652b1469e5f53aaec6e4eb405ed29dd232fa888ef10d88 + sha256: d9b020736ea85fff1568699ce18b89fabb3f0f042e8a7a05e84a3ec20d39acde url: "https://pub.dev" source: hosted - version: "2.15.0" + version: "2.18.0" fake_async: dependency: transitive description: @@ -497,6 +479,46 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: @@ -542,62 +564,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.13" - flutter_keyboard_visibility: - dependency: transitive - description: - name: flutter_keyboard_visibility - sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" - url: "https://pub.dev" - source: hosted - version: "5.4.1" - flutter_keyboard_visibility_linux: - dependency: transitive - description: - name: flutter_keyboard_visibility_linux - sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_macos: - dependency: transitive - description: - name: flutter_keyboard_visibility_macos - sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_platform_interface: - dependency: transitive - description: - name: flutter_keyboard_visibility_platform_interface - sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_web: - dependency: transitive - description: - name: flutter_keyboard_visibility_web - sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_windows: - dependency: transitive - description: - name: flutter_keyboard_visibility_windows - sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 - url: "https://pub.dev" - source: hosted - version: "1.0.0" flutter_lints: dependency: "direct dev" description: name: flutter_lints - sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 + sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" url: "https://pub.dev" source: hosted - version: "2.0.3" + version: "4.0.0" flutter_localizations: dependency: transitive description: flutter @@ -640,14 +614,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" flutter_web_plugins: dependency: transitive description: flutter @@ -697,10 +663,10 @@ packages: dependency: transitive description: name: geolocator_android - sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" url: "https://pub.dev" source: hosted - version: "4.3.1" + version: "4.6.1" geolocator_apple: dependency: transitive description: @@ -745,10 +711,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 url: "https://pub.dev" source: hosted - version: "4.0.5" + version: "6.2.1" graphs: dependency: transitive description: @@ -777,10 +743,10 @@ packages: dependency: transitive description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -865,10 +831,10 @@ packages: dependency: "direct main" description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" io: dependency: transitive description: @@ -917,38 +883,62 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" - lints: + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + lints: + dependency: "direct dev" description: name: lints - sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "4.0.0" location: dependency: "direct main" description: name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" location_platform_interface: dependency: transitive description: name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.0" location_web: dependency: transitive description: name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + sha256: "49dda13d415c4603c5775a33fb22f575e0aa3f0ec2916644ddcd722db31ee884" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "5.0.2" logging: dependency: transitive description: @@ -961,34 +951,34 @@ packages: dependency: transitive description: name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "3.1.3" matcher: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" mime: dependency: transitive description: @@ -1013,14 +1003,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" - nm: - dependency: transitive - description: - name: nm - sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" - url: "https://pub.dev" - source: hosted - version: "0.5.0" node_preamble: dependency: transitive description: @@ -1049,10 +1031,10 @@ packages: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_drawing: dependency: transitive description: @@ -1141,14 +1123,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" pool: dependency: transitive description: @@ -1181,22 +1155,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: ef91627df8cef70e603e8a6458749d8a99a385b78854332602fd08ad905cdab8 - url: "https://pub.dev" - source: hosted - version: "0.8.1" reactive_forms: dependency: "direct main" description: name: reactive_forms - sha256: "5aa9c48a0626c20d00a005e597cb10efbdebbfeecb9c4227b03a5945fbb91ec4" + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "17.0.1" recase: dependency: transitive description: @@ -1282,6 +1248,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqlite3: dependency: transitive description: @@ -1302,10 +1276,10 @@ packages: dependency: transitive description: name: sqlparser - sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" + sha256: ade9a67fd70d0369329ed3373208de7ebd8662470e8c396fc8d0d60f9acdfc9f url: "https://pub.dev" source: hosted - version: "0.34.1" + version: "0.36.0" stack_trace: dependency: transitive description: @@ -1350,26 +1324,26 @@ packages: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.0" timing: dependency: transitive description: @@ -1462,10 +1436,10 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.3.3" url_launcher_windows: dependency: transitive description: @@ -1478,10 +1452,10 @@ packages: dependency: transitive description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.5.1" vector_graphics: dependency: transitive description: @@ -1526,10 +1500,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -1542,10 +1516,10 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.5.1" web_socket_channel: dependency: transitive description: @@ -1595,5 +1569,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <=3.9.0" - flutter: ">=3.16.0" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.22.0" From 1068baf65b621ed46b87f16dcf7b80d2d2d9f1f0 Mon Sep 17 00:00:00 2001 From: rachana-egov Date: Wed, 11 Dec 2024 17:00:26 +0530 Subject: [PATCH 188/241] overrides package dependencies --- .../pubspec.lock | 2415 ----------------- .../lib/pages/search_beneficiary.dart | 1 + .../widgets/back_navigation_help_header.dart | 39 +- packages/registration_delivery/pubspec.lock | 117 +- packages/registration_delivery/pubspec.yaml | 12 +- 5 files changed, 35 insertions(+), 2549 deletions(-) delete mode 100644 apps/health_campaign_field_worker_app/pubspec.lock diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock deleted file mode 100644 index d5c1132db..000000000 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ /dev/null @@ -1,2415 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a - url: "https://pub.dev" - source: hosted - version: "61.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "4eec93681221723a686ad580c2e7d960e1017cf1a4e0a263c2573c2c6b0bf5cd" - url: "https://pub.dev" - source: hosted - version: "1.3.25" - analyzer: - dependency: transitive - description: - name: analyzer - sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 - url: "https://pub.dev" - source: hosted - version: "5.13.0" - analyzer_plugin: - dependency: transitive - description: - name: analyzer_plugin - sha256: c1d5f167683de03d5ab6c3b53fc9aeefc5d59476e7810ba7bbddff50c6f4392d - url: "https://pub.dev" - source: hosted - version: "0.11.2" - ansicolor: - dependency: transitive - description: - name: ansicolor - sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" - url: "https://pub.dev" - source: hosted - version: "2.0.3" - archive: - dependency: transitive - description: - name: archive - sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d - url: "https://pub.dev" - source: hosted - version: "3.6.1" - args: - dependency: transitive - description: - name: args - sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" - url: "https://pub.dev" - source: hosted - version: "2.5.0" - async: - dependency: transitive - description: - name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" - url: "https://pub.dev" - source: hosted - version: "2.11.0" - attendance_management: - dependency: "direct main" - description: - path: "../../packages/attendance_management" - relative: true - source: path - version: "1.0.3-dev.1" - audioplayers: - dependency: transitive - description: - name: audioplayers - sha256: c05c6147124cd63e725e861335a8b4d57300b80e6e92cea7c145c739223bbaef - url: "https://pub.dev" - source: hosted - version: "5.2.1" - audioplayers_android: - dependency: transitive - description: - name: audioplayers_android - sha256: b00e1a0e11365d88576320ec2d8c192bc21f1afb6c0e5995d1c57ae63156acb5 - url: "https://pub.dev" - source: hosted - version: "4.0.3" - audioplayers_darwin: - dependency: transitive - description: - name: audioplayers_darwin - sha256: "3034e99a6df8d101da0f5082dcca0a2a99db62ab1d4ddb3277bed3f6f81afe08" - url: "https://pub.dev" - source: hosted - version: "5.0.2" - audioplayers_linux: - dependency: transitive - description: - name: audioplayers_linux - sha256: "60787e73fefc4d2e0b9c02c69885402177e818e4e27ef087074cf27c02246c9e" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - audioplayers_platform_interface: - dependency: transitive - description: - name: audioplayers_platform_interface - sha256: "365c547f1bb9e77d94dd1687903a668d8f7ac3409e48e6e6a3668a1ac2982adb" - url: "https://pub.dev" - source: hosted - version: "6.1.0" - audioplayers_web: - dependency: transitive - description: - name: audioplayers_web - sha256: "22cd0173e54d92bd9b2c80b1204eb1eb159ece87475ab58c9788a70ec43c2a62" - url: "https://pub.dev" - source: hosted - version: "4.1.0" - audioplayers_windows: - dependency: transitive - description: - name: audioplayers_windows - sha256: "9536812c9103563644ada2ef45ae523806b0745f7a78e89d1b5fb1951de90e1a" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - auto_route: - dependency: "direct main" - description: - name: auto_route - sha256: a9001a90539ca3effc168f7e1029a5885c7326b9032c09ac895e303c1d137704 - url: "https://pub.dev" - source: hosted - version: "8.3.0" - auto_route_generator: - dependency: "direct dev" - description: - name: auto_route_generator - sha256: ba28133d3a3bf0a66772bcc98dade5843753cd9f1a8fb4802b842895515b67d3 - url: "https://pub.dev" - source: hosted - version: "8.0.0" - battery_plus: - dependency: "direct main" - description: - name: battery_plus - sha256: ccc1322fee1153a0f89e663e0eac2f64d659da506454cf24dcad75eb08ae138b - url: "https://pub.dev" - source: hosted - version: "6.0.2" - battery_plus_platform_interface: - dependency: transitive - description: - name: battery_plus_platform_interface - sha256: e8342c0f32de4b1dfd0223114b6785e48e579bfc398da9471c9179b907fa4910 - url: "https://pub.dev" - source: hosted - version: "2.0.1" - bloc: - dependency: transitive - description: - name: bloc - sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e" - url: "https://pub.dev" - source: hosted - version: "8.1.4" - bloc_concurrency: - dependency: "direct main" - description: - name: bloc_concurrency - sha256: "456b7a3616a7c1ceb975c14441b3f198bf57d81cb95b7c6de5cb0c60201afcd8" - url: "https://pub.dev" - source: hosted - version: "0.2.5" - bloc_test: - dependency: "direct dev" - description: - name: bloc_test - sha256: "165a6ec950d9252ebe36dc5335f2e6eb13055f33d56db0eeb7642768849b43d2" - url: "https://pub.dev" - source: hosted - version: "9.1.7" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - build: - dependency: transitive - description: - name: build - sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" - url: "https://pub.dev" - source: hosted - version: "2.4.1" - build_config: - dependency: transitive - description: - name: build_config - sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 - url: "https://pub.dev" - source: hosted - version: "1.1.1" - build_daemon: - dependency: transitive - description: - name: build_daemon - sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" - url: "https://pub.dev" - source: hosted - version: "4.0.1" - build_resolvers: - dependency: transitive - description: - name: build_resolvers - sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" - url: "https://pub.dev" - source: hosted - version: "2.4.2" - build_runner: - dependency: "direct dev" - description: - name: build_runner - sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" - url: "https://pub.dev" - source: hosted - version: "2.4.11" - build_runner_core: - dependency: transitive - description: - name: build_runner_core - sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" - url: "https://pub.dev" - source: hosted - version: "7.3.0" - built_collection: - dependency: transitive - description: - name: built_collection - sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" - url: "https://pub.dev" - source: hosted - version: "5.1.1" - built_value: - dependency: transitive - description: - name: built_value - sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb - url: "https://pub.dev" - source: hosted - version: "8.9.2" - camera: - dependency: transitive - description: - name: camera - sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167" - url: "https://pub.dev" - source: hosted - version: "0.11.0+2" - camera_android_camerax: - dependency: transitive - description: - name: camera_android_camerax - sha256: "011be2ab0e5b3e3aa8094413fa890f8c5c5afd7cfdaef353a992047d4dab5780" - url: "https://pub.dev" - source: hosted - version: "0.6.8+2" - camera_avfoundation: - dependency: transitive - description: - name: camera_avfoundation - sha256: "2e4c568f70e406ccb87376bc06b53d2f5bebaab71e2fbcc1a950e31449381bcf" - url: "https://pub.dev" - source: hosted - version: "0.9.17+5" - camera_platform_interface: - dependency: transitive - description: - name: camera_platform_interface - sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 - url: "https://pub.dev" - source: hosted - version: "2.8.0" - camera_web: - dependency: transitive - description: - name: camera_web - sha256: b9235ec0a2ce949daec546f1f3d86f05c3921ed31c7d9ab6b7c03214d152fc2d - url: "https://pub.dev" - source: hosted - version: "0.3.4" - characters: - dependency: transitive - description: - name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - charcode: - dependency: transitive - description: - name: charcode - sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 - url: "https://pub.dev" - source: hosted - version: "1.3.1" - checked_yaml: - dependency: transitive - description: - name: checked_yaml - sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff - url: "https://pub.dev" - source: hosted - version: "2.0.3" - cli_util: - dependency: transitive - description: - name: cli_util - sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 - url: "https://pub.dev" - source: hosted - version: "0.4.1" - clock: - dependency: transitive - description: - name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.dev" - source: hosted - version: "1.1.1" - closed_household: - dependency: "direct main" - description: - path: "../../packages/closed_household" - relative: true - source: path - version: "1.0.2-dev.1" - code_builder: - dependency: transitive - description: - name: code_builder - sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 - url: "https://pub.dev" - source: hosted - version: "4.10.0" - collection: - dependency: "direct main" - description: - name: collection - sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a - url: "https://pub.dev" - source: hosted - version: "1.18.0" - complaints: - dependency: "direct main" - description: - path: "../../packages/complaints" - relative: true - source: path - version: "0.0.1-dev.1" - connectivity_plus: - dependency: "direct main" - description: - name: connectivity_plus - sha256: "876849631b0c7dc20f8b471a2a03142841b482438e3b707955464f5ffca3e4c3" - url: "https://pub.dev" - source: hosted - version: "6.1.0" - connectivity_plus_platform_interface: - dependency: transitive - description: - name: connectivity_plus_platform_interface - sha256: "42657c1715d48b167930d5f34d00222ac100475f73d10162ddf43e714932f204" - url: "https://pub.dev" - source: hosted - version: "2.0.1" - convert: - dependency: transitive - description: - name: convert - sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" - url: "https://pub.dev" - source: hosted - version: "3.1.1" - coverage: - dependency: transitive - description: - name: coverage - sha256: e3493833ea012784c740e341952298f1cc77f1f01b1bbc3eb4eecf6984fb7f43 - url: "https://pub.dev" - source: hosted - version: "1.11.1" - cross_file: - dependency: transitive - description: - name: cross_file - sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" - url: "https://pub.dev" - source: hosted - version: "0.3.4+2" - crypto: - dependency: transitive - description: - name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab - url: "https://pub.dev" - source: hosted - version: "3.0.3" - csslib: - dependency: transitive - description: - name: csslib - sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" - url: "https://pub.dev" - source: hosted - version: "1.0.2" - cupertino_icons: - dependency: "direct main" - description: - name: cupertino_icons - sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 - url: "https://pub.dev" - source: hosted - version: "1.0.8" - dart_mappable: - dependency: "direct main" - description: - name: dart_mappable - sha256: f69a961ae8589724ebb542e588f228ae844c5f78028899cbe2cc718977c1b382 - url: "https://pub.dev" - source: hosted - version: "4.3.0" - dart_mappable_builder: - dependency: "direct dev" - description: - path: "../../packages/dart_mappable_builder" - relative: true - source: path - version: "4.2.3" - dart_style: - dependency: transitive - description: - name: dart_style - sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - dartx: - dependency: transitive - description: - name: dartx - sha256: "8b25435617027257d43e6508b5fe061012880ddfdaa75a71d607c3de2a13d244" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - db_viewer: - dependency: transitive - description: - name: db_viewer - sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - dbus: - dependency: transitive - description: - name: dbus - sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac" - url: "https://pub.dev" - source: hosted - version: "0.7.10" - device_info_plus: - dependency: "direct main" - description: - name: device_info_plus - sha256: a7fd703482b391a87d60b6061d04dfdeab07826b96f9abd8f5ed98068acc0074 - url: "https://pub.dev" - source: hosted - version: "10.1.2" - device_info_plus_platform_interface: - dependency: transitive - description: - name: device_info_plus_platform_interface - sha256: "282d3cf731045a2feb66abfe61bbc40870ae50a3ed10a4d3d217556c35c8c2ba" - url: "https://pub.dev" - source: hosted - version: "7.0.1" - diff_match_patch: - dependency: transitive - description: - name: diff_match_patch - sha256: "2efc9e6e8f449d0abe15be240e2c2a3bcd977c8d126cfd70598aee60af35c0a4" - url: "https://pub.dev" - source: hosted - version: "0.4.1" - digit_components: - dependency: "direct main" - description: - path: "../../packages/digit_components" - relative: true - source: path - version: "1.0.2+1" - digit_data_model: - dependency: "direct main" - description: - path: "../../packages/digit_data_model" - relative: true - source: path - version: "1.0.5-dev.1" - digit_dss: - dependency: "direct main" - description: - path: "../../packages/digit_dss" - relative: true - source: path - version: "1.0.2" - digit_firebase_services: - dependency: "direct main" - description: - path: "../../packages/digit_firebase_services" - relative: true - source: path - version: "0.0.1" - digit_location_tracker: - dependency: "direct main" - description: - path: "../../packages/digit_location_tracker" - relative: true - source: path - version: "0.0.1-dev.1" - digit_scanner: - dependency: "direct main" - description: - path: "../../packages/digit_scanner" - relative: true - source: path - version: "1.0.4" - digit_showcase: - dependency: "direct main" - description: - path: "../../packages/digit_showcase" - relative: true - source: path - version: "1.0.1" - digit_ui_components: - dependency: "direct main" - description: - path: "flutter/digit-ui-components/digit_components" - ref: version_update - resolved-ref: c68a3ceb1f00c6128780c0cbeb58d9aa8c4d7a13 - url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" - source: git - version: "0.0.1+7" - dio: - dependency: "direct main" - description: - name: dio - sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" - url: "https://pub.dev" - source: hosted - version: "5.7.0" - dio_web_adapter: - dependency: transitive - description: - name: dio_web_adapter - sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - disable_battery_optimization: - dependency: "direct main" - description: - name: disable_battery_optimization - sha256: "6b2ba802f984af141faf1b6b5fb956d5ef01f9cd555597c35b9cc335a03185ba" - url: "https://pub.dev" - source: hosted - version: "1.1.1" - disk_space_update: - dependency: "direct main" - description: - name: disk_space_update - sha256: "65e19384334779537f7ec83a939c5991bf56bfe016672335ea47d62374f08a3c" - url: "https://pub.dev" - source: hosted - version: "0.0.2" - dotted_border: - dependency: transitive - description: - name: dotted_border - sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - drift: - dependency: "direct main" - description: - name: drift - sha256: "6acedc562ffeed308049f78fb1906abad3d65714580b6745441ee6d50ec564cd" - url: "https://pub.dev" - source: hosted - version: "2.18.0" - drift_db_viewer: - dependency: "direct main" - description: - name: drift_db_viewer - sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - drift_dev: - dependency: "direct dev" - description: - name: drift_dev - sha256: d9b020736ea85fff1568699ce18b89fabb3f0f042e8a7a05e84a3ec20d39acde - url: "https://pub.dev" - source: hosted - version: "2.18.0" - easy_stepper: - dependency: transitive - description: - name: easy_stepper - sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" - url: "https://pub.dev" - source: hosted - version: "0.8.5+1" - equatable: - dependency: transitive - description: - name: equatable - sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2 - url: "https://pub.dev" - source: hosted - version: "2.0.5" - expandable: - dependency: "direct main" - description: - name: expandable - sha256: "9604d612d4d1146dafa96c6d8eec9c2ff0994658d6d09fed720ab788c7f5afc2" - url: "https://pub.dev" - source: hosted - version: "5.0.1" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - ffi: - dependency: transitive - description: - name: ffi - sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - file: - dependency: transitive - description: - name: file - sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" - url: "https://pub.dev" - source: hosted - version: "7.0.0" - file_picker: - dependency: transitive - description: - name: file_picker - sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 - url: "https://pub.dev" - source: hosted - version: "8.0.0+1" - file_selector_linux: - dependency: transitive - description: - name: file_selector_linux - sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" - url: "https://pub.dev" - source: hosted - version: "0.9.2+1" - file_selector_macos: - dependency: transitive - description: - name: file_selector_macos - sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 - url: "https://pub.dev" - source: hosted - version: "0.9.4" - file_selector_platform_interface: - dependency: transitive - description: - name: file_selector_platform_interface - sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b - url: "https://pub.dev" - source: hosted - version: "2.6.2" - file_selector_windows: - dependency: transitive - description: - name: file_selector_windows - sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" - url: "https://pub.dev" - source: hosted - version: "0.9.3+2" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "53316975310c8af75a96e365f9fccb67d1c544ef0acdbf0d88bbe30eedd1c4f9" - url: "https://pub.dev" - source: hosted - version: "2.27.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: e30da58198a6d4b49d5bce4e852f985c32cb10db329ebef9473db2b9f09ce810 - url: "https://pub.dev" - source: hosted - version: "5.3.0" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" - url: "https://pub.dev" - source: hosted - version: "2.17.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: c4f1b723d417bc9c4774810e774ff91df8fb0032d33fb2888b2c887e865581b8 - url: "https://pub.dev" - source: hosted - version: "3.4.18" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: c5a11fca3df76a98e3fa68fde8b10a08aacb9a7639f619fbfd4dad6c67a08643 - url: "https://pub.dev" - source: hosted - version: "3.6.25" - fixnum: - dependency: transitive - description: - name: fixnum - sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be - url: "https://pub.dev" - source: hosted - version: "1.1.1" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_background_service: - dependency: "direct main" - description: - name: flutter_background_service - sha256: d32f078ec57647c9cfd6e1a8da9297f7d8f021d4dcc204a35aaad2cdbfe255f0 - url: "https://pub.dev" - source: hosted - version: "5.0.10" - flutter_background_service_android: - dependency: transitive - description: - name: flutter_background_service_android - sha256: "39da42dddf877beeef82bc2583130d8bedb4d0765e99ca9e7b4a32e8c6abd239" - url: "https://pub.dev" - source: hosted - version: "6.2.7" - flutter_background_service_ios: - dependency: transitive - description: - name: flutter_background_service_ios - sha256: "6037ffd45c4d019dab0975c7feb1d31012dd697e25edc05505a4a9b0c7dc9fba" - url: "https://pub.dev" - source: hosted - version: "5.0.3" - flutter_background_service_platform_interface: - dependency: transitive - description: - name: flutter_background_service_platform_interface - sha256: ca74aa95789a8304f4d3f57f07ba404faa86bed6e415f83e8edea6ad8b904a41 - url: "https://pub.dev" - source: hosted - version: "5.1.2" - flutter_bloc: - dependency: "direct main" - description: - name: flutter_bloc - sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a - url: "https://pub.dev" - source: hosted - version: "8.1.6" - flutter_dotenv: - dependency: "direct main" - description: - name: flutter_dotenv - sha256: b7c7be5cd9f6ef7a78429cabd2774d3c4af50e79cb2b7593e3d5d763ef95c61b - url: "https://pub.dev" - source: hosted - version: "5.2.1" - flutter_driver: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - flutter_dropzone: - dependency: transitive - description: - name: flutter_dropzone - sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 - url: "https://pub.dev" - source: hosted - version: "3.0.7" - flutter_dropzone_platform_interface: - dependency: transitive - description: - name: flutter_dropzone_platform_interface - sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" - url: "https://pub.dev" - source: hosted - version: "2.2.0" - flutter_dropzone_web: - dependency: transitive - description: - name: flutter_dropzone_web - sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 - url: "https://pub.dev" - source: hosted - version: "3.0.13" - flutter_focus_watcher: - dependency: transitive - description: - name: flutter_focus_watcher - sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility: - dependency: "direct main" - description: - name: flutter_keyboard_visibility - sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" - url: "https://pub.dev" - source: hosted - version: "5.4.1" - flutter_keyboard_visibility_linux: - dependency: transitive - description: - name: flutter_keyboard_visibility_linux - sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_macos: - dependency: transitive - description: - name: flutter_keyboard_visibility_macos - sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_platform_interface: - dependency: transitive - description: - name: flutter_keyboard_visibility_platform_interface - sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_web: - dependency: transitive - description: - name: flutter_keyboard_visibility_web - sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_windows: - dependency: transitive - description: - name: flutter_keyboard_visibility_windows - sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_launcher_icons: - dependency: "direct dev" - description: - name: flutter_launcher_icons - sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea" - url: "https://pub.dev" - source: hosted - version: "0.13.1" - flutter_lints: - dependency: "direct dev" - description: - name: flutter_lints - sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" - url: "https://pub.dev" - source: hosted - version: "4.0.0" - flutter_local_notifications: - dependency: "direct main" - description: - name: flutter_local_notifications - sha256: "674173fd3c9eda9d4c8528da2ce0ea69f161577495a9cc835a2a4ecd7eadeb35" - url: "https://pub.dev" - source: hosted - version: "17.2.4" - flutter_local_notifications_linux: - dependency: transitive - description: - name: flutter_local_notifications_linux - sha256: c49bd06165cad9beeb79090b18cd1eb0296f4bf4b23b84426e37dd7c027fc3af - url: "https://pub.dev" - source: hosted - version: "4.0.1" - flutter_local_notifications_platform_interface: - dependency: transitive - description: - name: flutter_local_notifications_platform_interface - sha256: "85f8d07fe708c1bdcf45037f2c0109753b26ae077e9d9e899d55971711a4ea66" - url: "https://pub.dev" - source: hosted - version: "7.2.0" - flutter_localizations: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_plugin_android_lifecycle: - dependency: transitive - description: - name: flutter_plugin_android_lifecycle - sha256: "8cf40eebf5dec866a6d1956ad7b4f7016e6c0cc69847ab946833b7d43743809f" - url: "https://pub.dev" - source: hosted - version: "2.0.19" - flutter_portal: - dependency: "direct main" - description: - name: flutter_portal - sha256: "4601b3dc24f385b3761721bd852a3f6c09cddd4e943dd184ed58ee1f43006257" - url: "https://pub.dev" - source: hosted - version: "1.1.4" - flutter_secure_storage: - dependency: "direct main" - description: - name: flutter_secure_storage - sha256: "165164745e6afb5c0e3e3fcc72a012fb9e58496fb26ffb92cf22e16a821e85d0" - url: "https://pub.dev" - source: hosted - version: "9.2.2" - flutter_secure_storage_linux: - dependency: transitive - description: - name: flutter_secure_storage_linux - sha256: "4d91bfc23047422cbcd73ac684bc169859ee766482517c22172c86596bf1464b" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - flutter_secure_storage_macos: - dependency: transitive - description: - name: flutter_secure_storage_macos - sha256: "1693ab11121a5f925bbea0be725abfcfbbcf36c1e29e571f84a0c0f436147a81" - url: "https://pub.dev" - source: hosted - version: "3.1.2" - flutter_secure_storage_platform_interface: - dependency: transitive - description: - name: flutter_secure_storage_platform_interface - sha256: cf91ad32ce5adef6fba4d736a542baca9daf3beac4db2d04be350b87f69ac4a8 - url: "https://pub.dev" - source: hosted - version: "1.1.2" - flutter_secure_storage_web: - dependency: transitive - description: - name: flutter_secure_storage_web - sha256: f4ebff989b4f07b2656fb16b47852c0aab9fed9b4ec1c70103368337bc1886a9 - url: "https://pub.dev" - source: hosted - version: "1.2.1" - flutter_secure_storage_windows: - dependency: transitive - description: - name: flutter_secure_storage_windows - sha256: b20b07cb5ed4ed74fc567b78a72936203f587eba460af1df11281c9326cd3709 - url: "https://pub.dev" - source: hosted - version: "3.1.2" - flutter_spinkit: - dependency: transitive - description: - name: flutter_spinkit - sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 - url: "https://pub.dev" - source: hosted - version: "5.2.1" - flutter_styled_toast: - dependency: transitive - description: - name: flutter_styled_toast - sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 - url: "https://pub.dev" - source: hosted - version: "2.2.1" - flutter_svg: - dependency: "direct main" - description: - name: flutter_svg - sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" - url: "https://pub.dev" - source: hosted - version: "2.0.10+1" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" - flutter_web_plugins: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - fluttertoast: - dependency: transitive - description: - name: fluttertoast - sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" - url: "https://pub.dev" - source: hosted - version: "8.2.8" - formula_parser: - dependency: transitive - description: - name: formula_parser - sha256: af9e9ae2961ec1dab54c5de97d9a6bef0593ddb998720e3785bd91ef05353359 - url: "https://pub.dev" - source: hosted - version: "2.0.1" - freezed: - dependency: "direct dev" - description: - name: freezed - sha256: a434911f643466d78462625df76fd9eb13e57348ff43fe1f77bbe909522c67a1 - url: "https://pub.dev" - source: hosted - version: "2.5.2" - freezed_annotation: - dependency: "direct main" - description: - name: freezed_annotation - sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 - url: "https://pub.dev" - source: hosted - version: "2.4.4" - frontend_server_client: - dependency: transitive - description: - name: frontend_server_client - sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" - url: "https://pub.dev" - source: hosted - version: "3.2.0" - fuchsia_remote_debug_protocol: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - geolocator: - dependency: transitive - description: - name: geolocator - sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 - url: "https://pub.dev" - source: hosted - version: "10.1.1" - geolocator_android: - dependency: transitive - description: - name: geolocator_android - sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" - url: "https://pub.dev" - source: hosted - version: "4.6.1" - geolocator_apple: - dependency: transitive - description: - name: geolocator_apple - sha256: bc2aca02423ad429cb0556121f56e60360a2b7d694c8570301d06ea0c00732fd - url: "https://pub.dev" - source: hosted - version: "2.3.7" - geolocator_platform_interface: - dependency: transitive - description: - name: geolocator_platform_interface - sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" - url: "https://pub.dev" - source: hosted - version: "4.2.4" - geolocator_web: - dependency: transitive - description: - name: geolocator_web - sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" - url: "https://pub.dev" - source: hosted - version: "2.2.1" - geolocator_windows: - dependency: transitive - description: - name: geolocator_windows - sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" - url: "https://pub.dev" - source: hosted - version: "0.2.3" - glob: - dependency: transitive - description: - name: glob - sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - google_fonts: - dependency: transitive - description: - name: google_fonts - sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 - url: "https://pub.dev" - source: hosted - version: "6.2.1" - google_mlkit_barcode_scanning: - dependency: transitive - description: - name: google_mlkit_barcode_scanning - sha256: f1a2a39cf1730b9a5e2784a07efa1ca5bfdfdde6aa00b193b3f8cd1953c638ec - url: "https://pub.dev" - source: hosted - version: "0.12.0" - google_mlkit_commons: - dependency: transitive - description: - name: google_mlkit_commons - sha256: "27d626c66a181351a953eba5b6ff1ff123aadb891b4dab085b292118f039d6ac" - url: "https://pub.dev" - source: hosted - version: "0.7.1" - graphs: - dependency: transitive - description: - name: graphs - sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 - url: "https://pub.dev" - source: hosted - version: "2.3.1" - group_radio_button: - dependency: transitive - description: - name: group_radio_button - sha256: "204de8d16b224be7fc72dade0c3afd410ff5a34417d89f74f0fd8be7a8c2b4d6" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - gs1_barcode_parser: - dependency: transitive - description: - name: gs1_barcode_parser - sha256: ff171bc40038de3f7178fbc32eaf9eebc3d35a3c4c00bb0281fe4a976d853a42 - url: "https://pub.dev" - source: hosted - version: "1.1.0" - horizontal_data_table: - dependency: transitive - description: - name: horizontal_data_table - sha256: c8ab5256bbced698a729f3e0ff2cb0e8e97416cdbb082860370eaf883badf722 - url: "https://pub.dev" - source: hosted - version: "4.3.1" - hrk_batteries: - dependency: transitive - description: - name: hrk_batteries - sha256: "35bc2be10bb64284b04d3cd944c24eecf304747fc64b34e2d27ef1a3ac75ab49" - url: "https://pub.dev" - source: hosted - version: "2.2.0" - hrk_flutter_test_batteries: - dependency: "direct dev" - description: - name: hrk_flutter_test_batteries - sha256: bfdaac0fc6aa1cd2aeffa7db9fc241d615ffdb1d667dd1be8b9a7ff5bc54d364 - url: "https://pub.dev" - source: hosted - version: "0.8.0" - hrk_logging: - dependency: transitive - description: - name: hrk_logging - sha256: "2e6501f4b78439bec4c367a94b14f792fd17fe1c94f18d903086c7b8a48402f5" - url: "https://pub.dev" - source: hosted - version: "0.3.1" - html: - dependency: transitive - description: - name: html - sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" - url: "https://pub.dev" - source: hosted - version: "0.15.5" - http: - dependency: transitive - description: - name: http - sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 - url: "https://pub.dev" - source: hosted - version: "1.2.2" - http_multi_server: - dependency: transitive - description: - name: http_multi_server - sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" - url: "https://pub.dev" - source: hosted - version: "3.2.1" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - image: - dependency: transitive - description: - name: image - sha256: f31d52537dc417fdcde36088fdf11d191026fd5e4fae742491ebd40e5a8bea7d - url: "https://pub.dev" - source: hosted - version: "4.3.0" - image_picker: - dependency: transitive - description: - name: image_picker - sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" - url: "https://pub.dev" - source: hosted - version: "1.0.8" - image_picker_android: - dependency: transitive - description: - name: image_picker_android - sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" - url: "https://pub.dev" - source: hosted - version: "0.8.9+6" - image_picker_for_web: - dependency: transitive - description: - name: image_picker_for_web - sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 - url: "https://pub.dev" - source: hosted - version: "3.0.2" - image_picker_ios: - dependency: transitive - description: - name: image_picker_ios - sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 - url: "https://pub.dev" - source: hosted - version: "0.8.9+1" - image_picker_linux: - dependency: transitive - description: - name: image_picker_linux - sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" - url: "https://pub.dev" - source: hosted - version: "0.2.1+1" - image_picker_macos: - dependency: transitive - description: - name: image_picker_macos - sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" - url: "https://pub.dev" - source: hosted - version: "0.2.1+1" - image_picker_platform_interface: - dependency: transitive - description: - name: image_picker_platform_interface - sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b - url: "https://pub.dev" - source: hosted - version: "2.9.3" - image_picker_windows: - dependency: transitive - description: - name: image_picker_windows - sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" - url: "https://pub.dev" - source: hosted - version: "0.2.1+1" - integration_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - intl: - dependency: "direct main" - description: - name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf - url: "https://pub.dev" - source: hosted - version: "0.19.0" - inventory_management: - dependency: "direct main" - description: - path: "../../packages/inventory_management" - relative: true - source: path - version: "1.0.3+5" - io: - dependency: transitive - description: - name: io - sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" - url: "https://pub.dev" - source: hosted - version: "1.0.4" - isar: - dependency: "direct main" - description: - name: isar - sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - isar_flutter_libs: - dependency: "direct main" - description: - name: isar_flutter_libs - sha256: bc6768cc4b9c61aabff77152e7f33b4b17d2fc93134f7af1c3dd51500fe8d5e8 - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - isar_generator: - dependency: "direct dev" - description: - name: isar_generator - sha256: "76c121e1295a30423604f2f819bc255bc79f852f3bc8743a24017df6068ad133" - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - js: - dependency: transitive - description: - name: js - sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 - url: "https://pub.dev" - source: hosted - version: "0.6.7" - json_annotation: - dependency: "direct main" - description: - name: json_annotation - sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" - url: "https://pub.dev" - source: hosted - version: "4.9.0" - json_serializable: - dependency: "direct dev" - description: - name: json_serializable - sha256: ea1432d167339ea9b5bb153f0571d0039607a873d6e04e0117af043f14a1fd4b - url: "https://pub.dev" - source: hosted - version: "6.8.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" - url: "https://pub.dev" - source: hosted - version: "10.0.4" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" - url: "https://pub.dev" - source: hosted - version: "3.0.3" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://pub.dev" - source: hosted - version: "3.0.1" - lints: - dependency: transitive - description: - name: lints - sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" - url: "https://pub.dev" - source: hosted - version: "4.0.0" - location: - dependency: "direct main" - description: - name: location - sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" - url: "https://pub.dev" - source: hosted - version: "6.0.2" - location_platform_interface: - dependency: transitive - description: - name: location_platform_interface - sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" - url: "https://pub.dev" - source: hosted - version: "4.0.0" - location_web: - dependency: transitive - description: - name: location_web - sha256: "49dda13d415c4603c5775a33fb22f575e0aa3f0ec2916644ddcd722db31ee884" - url: "https://pub.dev" - source: hosted - version: "5.0.2" - logging: - dependency: transitive - description: - name: logging - sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - lottie: - dependency: transitive - description: - name: lottie - sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" - url: "https://pub.dev" - source: hosted - version: "3.1.3" - matcher: - dependency: transitive - description: - name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb - url: "https://pub.dev" - source: hosted - version: "0.12.16+1" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" - url: "https://pub.dev" - source: hosted - version: "0.8.0" - material_design_icons_flutter: - dependency: "direct main" - description: - name: material_design_icons_flutter - sha256: "6f986b7a51f3ad4c00e33c5c84e8de1bdd140489bbcdc8b66fc1283dad4dea5a" - url: "https://pub.dev" - source: hosted - version: "7.0.7296" - meta: - dependency: transitive - description: - name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" - url: "https://pub.dev" - source: hosted - version: "1.12.0" - mime: - dependency: transitive - description: - name: mime - sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" - url: "https://pub.dev" - source: hosted - version: "1.0.6" - mocktail: - dependency: "direct dev" - description: - name: mocktail - sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8" - url: "https://pub.dev" - source: hosted - version: "1.0.4" - nested: - dependency: "direct main" - description: - name: nested - sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - nm: - dependency: transitive - description: - name: nm - sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" - url: "https://pub.dev" - source: hosted - version: "0.5.0" - node_preamble: - dependency: transitive - description: - name: node_preamble - sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" - url: "https://pub.dev" - source: hosted - version: "2.0.2" - overlay_builder: - dependency: transitive - description: - name: overlay_builder - sha256: "58b97bc5f67a2e2bb7006dd88e697ac757dfffc9dbd1e7dfc1917fb510a4b5c8" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - package_config: - dependency: transitive - description: - name: package_config - sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - package_info_plus: - dependency: "direct main" - description: - name: package_info_plus - sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 - url: "https://pub.dev" - source: hosted - version: "8.0.2" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 - url: "https://pub.dev" - source: hosted - version: "3.0.1" - path: - dependency: "direct main" - description: - name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" - url: "https://pub.dev" - source: hosted - version: "1.9.0" - path_drawing: - dependency: transitive - description: - name: path_drawing - sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 - url: "https://pub.dev" - source: hosted - version: "1.0.1" - path_parsing: - dependency: transitive - description: - name: path_parsing - sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf - url: "https://pub.dev" - source: hosted - version: "1.0.1" - path_provider: - dependency: "direct main" - description: - name: path_provider - sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 - url: "https://pub.dev" - source: hosted - version: "2.1.4" - path_provider_android: - dependency: transitive - description: - name: path_provider_android - sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d - url: "https://pub.dev" - source: hosted - version: "2.2.4" - path_provider_foundation: - dependency: transitive - description: - name: path_provider_foundation - sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - path_provider_linux: - dependency: transitive - description: - name: path_provider_linux - sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 - url: "https://pub.dev" - source: hosted - version: "2.2.1" - path_provider_platform_interface: - dependency: transitive - description: - name: path_provider_platform_interface - sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - path_provider_windows: - dependency: transitive - description: - name: path_provider_windows - sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 - url: "https://pub.dev" - source: hosted - version: "2.3.0" - permission_handler: - dependency: "direct main" - description: - name: permission_handler - sha256: "18bf33f7fefbd812f37e72091a15575e72d5318854877e0e4035a24ac1113ecb" - url: "https://pub.dev" - source: hosted - version: "11.3.1" - permission_handler_android: - dependency: transitive - description: - name: permission_handler_android - sha256: "71bbecfee799e65aff7c744761a57e817e73b738fedf62ab7afd5593da21f9f1" - url: "https://pub.dev" - source: hosted - version: "12.0.13" - permission_handler_apple: - dependency: transitive - description: - name: permission_handler_apple - sha256: e6f6d73b12438ef13e648c4ae56bd106ec60d17e90a59c4545db6781229082a0 - url: "https://pub.dev" - source: hosted - version: "9.4.5" - permission_handler_html: - dependency: transitive - description: - name: permission_handler_html - sha256: "54bf176b90f6eddd4ece307e2c06cf977fb3973719c35a93b85cc7093eb6070d" - url: "https://pub.dev" - source: hosted - version: "0.1.1" - permission_handler_platform_interface: - dependency: transitive - description: - name: permission_handler_platform_interface - sha256: e9c8eadee926c4532d0305dff94b85bf961f16759c3af791486613152af4b4f9 - url: "https://pub.dev" - source: hosted - version: "4.2.3" - permission_handler_windows: - dependency: transitive - description: - name: permission_handler_windows - sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e" - url: "https://pub.dev" - source: hosted - version: "0.2.1" - petitparser: - dependency: transitive - description: - name: petitparser - sha256: cb3798bef7fc021ac45b308f4b51208a152792445cce0448c9a4ba5879dd8750 - url: "https://pub.dev" - source: hosted - version: "5.4.0" - platform: - dependency: transitive - description: - name: platform - sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" - url: "https://pub.dev" - source: hosted - version: "3.1.4" - plugin_platform_interface: - dependency: transitive - description: - name: plugin_platform_interface - sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" - url: "https://pub.dev" - source: hosted - version: "2.1.8" - pluto_grid: - dependency: "direct main" - description: - name: pluto_grid - sha256: "1d4cd9d2652742b556aa9b3230cc64672a3f63c34a9acc80fef794ab36ad903b" - url: "https://pub.dev" - source: hosted - version: "8.0.0" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" - pool: - dependency: transitive - description: - name: pool - sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" - url: "https://pub.dev" - source: hosted - version: "1.5.1" - pretty_dio_logger: - dependency: "direct main" - description: - name: pretty_dio_logger - sha256: "36f2101299786d567869493e2f5731de61ce130faa14679473b26905a92b6407" - url: "https://pub.dev" - source: hosted - version: "1.4.0" - process: - dependency: transitive - description: - name: process - sha256: "21e54fd2faf1b5bdd5102afd25012184a6793927648ea81eea80552ac9405b32" - url: "https://pub.dev" - source: hosted - version: "5.0.2" - provider: - dependency: "direct main" - description: - name: provider - sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c - url: "https://pub.dev" - source: hosted - version: "6.1.2" - pub_semver: - dependency: transitive - description: - name: pub_semver - sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - pubspec_parse: - dependency: transitive - description: - name: pubspec_parse - sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 - url: "https://pub.dev" - source: hosted - version: "1.3.0" - qr: - dependency: transitive - description: - name: qr - sha256: "64957a3930367bf97cc211a5af99551d630f2f4625e38af10edd6b19131b64b3" - url: "https://pub.dev" - source: hosted - version: "3.0.1" - qr_flutter: - dependency: "direct main" - description: - name: qr_flutter - sha256: "5095f0fc6e3f71d08adef8feccc8cea4f12eec18a2e31c2e8d82cb6019f4b097" - url: "https://pub.dev" - source: hosted - version: "4.1.0" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a - url: "https://pub.dev" - source: hosted - version: "2.1.1" - reactive_forms: - dependency: "direct main" - description: - name: reactive_forms - sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" - url: "https://pub.dev" - source: hosted - version: "17.0.1" - recase: - dependency: "direct main" - description: - name: recase - sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 - url: "https://pub.dev" - source: hosted - version: "4.1.0" - referral_reconciliation: - dependency: "direct main" - description: - path: "../../packages/referral_reconciliation" - relative: true - source: path - version: "1.0.3-dev.1" - registration_delivery: - dependency: "direct main" - description: - path: "../../packages/registration_delivery" - relative: true - source: path - version: "1.0.4-dev.5" - remove_emoji_input_formatter: - dependency: transitive - description: - name: remove_emoji_input_formatter - sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" - url: "https://pub.dev" - source: hosted - version: "0.0.1+1" - rxdart: - dependency: transitive - description: - name: rxdart - sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" - url: "https://pub.dev" - source: hosted - version: "0.27.7" - shared_preferences: - dependency: "direct main" - description: - name: shared_preferences - sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180 - url: "https://pub.dev" - source: hosted - version: "2.2.3" - shared_preferences_android: - dependency: transitive - description: - name: shared_preferences_android - sha256: "1ee8bf911094a1b592de7ab29add6f826a7331fb854273d55918693d5364a1f2" - url: "https://pub.dev" - source: hosted - version: "2.2.2" - shared_preferences_foundation: - dependency: transitive - description: - name: shared_preferences_foundation - sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c" - url: "https://pub.dev" - source: hosted - version: "2.3.5" - shared_preferences_linux: - dependency: transitive - description: - name: shared_preferences_linux - sha256: "2ba0510d3017f91655b7543e9ee46d48619de2a2af38e5c790423f7007c7ccc1" - url: "https://pub.dev" - source: hosted - version: "2.4.0" - shared_preferences_platform_interface: - dependency: transitive - description: - name: shared_preferences_platform_interface - sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" - url: "https://pub.dev" - source: hosted - version: "2.4.1" - shared_preferences_web: - dependency: transitive - description: - name: shared_preferences_web - sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e - url: "https://pub.dev" - source: hosted - version: "2.4.2" - shared_preferences_windows: - dependency: transitive - description: - name: shared_preferences_windows - sha256: "398084b47b7f92110683cac45c6dc4aae853db47e470e5ddcd52cab7f7196ab2" - url: "https://pub.dev" - source: hosted - version: "2.4.0" - shelf: - dependency: transitive - description: - name: shelf - sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 - url: "https://pub.dev" - source: hosted - version: "1.4.1" - shelf_packages_handler: - dependency: transitive - description: - name: shelf_packages_handler - sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - shelf_static: - dependency: transitive - description: - name: shelf_static - sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e - url: "https://pub.dev" - source: hosted - version: "1.1.2" - shelf_web_socket: - dependency: transitive - description: - name: shelf_web_socket - sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" - url: "https://pub.dev" - source: hosted - version: "1.0.4" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.99" - source_gen: - dependency: transitive - description: - name: source_gen - sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" - url: "https://pub.dev" - source: hosted - version: "1.5.0" - source_helper: - dependency: transitive - description: - name: source_helper - sha256: "6adebc0006c37dd63fe05bca0a929b99f06402fc95aa35bf36d67f5c06de01fd" - url: "https://pub.dev" - source: hosted - version: "1.3.4" - source_map_stack_trace: - dependency: transitive - description: - name: source_map_stack_trace - sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - source_maps: - dependency: transitive - description: - name: source_maps - sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" - url: "https://pub.dev" - source: hosted - version: "0.10.12" - source_span: - dependency: transitive - description: - name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" - url: "https://pub.dev" - source: hosted - version: "1.10.0" - sprintf: - dependency: transitive - description: - name: sprintf - sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" - url: "https://pub.dev" - source: hosted - version: "7.0.0" - sqlite3: - dependency: transitive - description: - name: sqlite3 - sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" - url: "https://pub.dev" - source: hosted - version: "2.4.0" - sqlite3_flutter_libs: - dependency: "direct main" - description: - name: sqlite3_flutter_libs - sha256: "7ae52b23366e5295005022e62fa093f64bfe190810223ea0ebf733a4cd140bce" - url: "https://pub.dev" - source: hosted - version: "0.5.26" - sqlparser: - dependency: transitive - description: - name: sqlparser - sha256: ade9a67fd70d0369329ed3373208de7ebd8662470e8c396fc8d0d60f9acdfc9f - url: "https://pub.dev" - source: hosted - version: "0.36.0" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" - url: "https://pub.dev" - source: hosted - version: "1.11.1" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 - url: "https://pub.dev" - source: hosted - version: "2.1.2" - stream_transform: - dependency: transitive - description: - name: stream_transform - sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - super_annotations: - dependency: "direct main" - description: - name: super_annotations - sha256: "6ccb4a2066de1ae3d1869184350b641b0b66fa6b98e158abeffdc9c47a3bf49c" - url: "https://pub.dev" - source: hosted - version: "0.8.1" - survey_form: - dependency: "direct main" - description: - path: "../../packages/survey_form" - relative: true - source: path - version: "0.0.1-dev.2" - sync_http: - dependency: transitive - description: - name: sync_http - sha256: "7f0cd72eca000d2e026bcd6f990b81d0ca06022ef4e32fb257b30d3d1014a961" - url: "https://pub.dev" - source: hosted - version: "0.3.1" - sync_service: - dependency: "direct main" - description: - path: "../../packages/sync_service" - relative: true - source: path - version: "0.0.1-dev.1" - synchronized: - dependency: transitive - description: - name: synchronized - sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.dev" - source: hosted - version: "1.2.1" - test: - dependency: transitive - description: - name: test - sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" - url: "https://pub.dev" - source: hosted - version: "1.25.2" - test_api: - dependency: transitive - description: - name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" - url: "https://pub.dev" - source: hosted - version: "0.7.0" - test_core: - dependency: transitive - description: - name: test_core - sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" - url: "https://pub.dev" - source: hosted - version: "0.6.0" - time: - dependency: transitive - description: - name: time - sha256: ad8e018a6c9db36cb917a031853a1aae49467a93e0d464683e029537d848c221 - url: "https://pub.dev" - source: hosted - version: "2.1.4" - timezone: - dependency: transitive - description: - name: timezone - sha256: "2236ec079a174ce07434e89fcd3fcda430025eb7692244139a9cf54fdcf1fc7d" - url: "https://pub.dev" - source: hosted - version: "0.9.4" - timing: - dependency: transitive - description: - name: timing - sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - type_plus: - dependency: transitive - description: - name: type_plus - sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 - url: "https://pub.dev" - source: hosted - version: "2.1.1" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c - url: "https://pub.dev" - source: hosted - version: "1.3.2" - universal_html: - dependency: transitive - description: - name: universal_html - sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" - url: "https://pub.dev" - source: hosted - version: "2.2.4" - universal_io: - dependency: transitive - description: - name: universal_io - sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" - url: "https://pub.dev" - source: hosted - version: "2.2.2" - upower: - dependency: transitive - description: - name: upower - sha256: cf042403154751180affa1d15614db7fa50234bc2373cd21c3db666c38543ebf - url: "https://pub.dev" - source: hosted - version: "0.7.0" - url_launcher: - dependency: transitive - description: - name: url_launcher - sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" - url: "https://pub.dev" - source: hosted - version: "6.3.0" - url_launcher_android: - dependency: transitive - description: - name: url_launcher_android - sha256: "17cd5e205ea615e2c6ea7a77323a11712dffa0720a8a90540db57a01347f9ad9" - url: "https://pub.dev" - source: hosted - version: "6.3.2" - url_launcher_ios: - dependency: transitive - description: - name: url_launcher_ios - sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" - url: "https://pub.dev" - source: hosted - version: "6.2.4" - url_launcher_linux: - dependency: transitive - description: - name: url_launcher_linux - sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 - url: "https://pub.dev" - source: hosted - version: "3.1.1" - url_launcher_macos: - dependency: transitive - description: - name: url_launcher_macos - sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" - url: "https://pub.dev" - source: hosted - version: "3.2.0" - url_launcher_platform_interface: - dependency: transitive - description: - name: url_launcher_platform_interface - sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - url_launcher_web: - dependency: transitive - description: - name: url_launcher_web - sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" - url: "https://pub.dev" - source: hosted - version: "2.3.3" - url_launcher_windows: - dependency: transitive - description: - name: url_launcher_windows - sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" - url: "https://pub.dev" - source: hosted - version: "3.1.2" - uuid: - dependency: "direct main" - description: - name: uuid - sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff - url: "https://pub.dev" - source: hosted - version: "4.5.1" - vector_graphics: - dependency: transitive - description: - name: vector_graphics - sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" - url: "https://pub.dev" - source: hosted - version: "1.1.11+1" - vector_graphics_codec: - dependency: transitive - description: - name: vector_graphics_codec - sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da - url: "https://pub.dev" - source: hosted - version: "1.1.11+1" - vector_graphics_compiler: - dependency: transitive - description: - name: vector_graphics_compiler - sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" - url: "https://pub.dev" - source: hosted - version: "1.1.11+1" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - visibility_detector: - dependency: transitive - description: - name: visibility_detector - sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 - url: "https://pub.dev" - source: hosted - version: "0.4.0+2" - vm_service: - dependency: transitive - description: - name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" - url: "https://pub.dev" - source: hosted - version: "14.2.1" - watcher: - dependency: transitive - description: - name: watcher - sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - web: - dependency: transitive - description: - name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" - url: "https://pub.dev" - source: hosted - version: "0.5.1" - web_socket_channel: - dependency: transitive - description: - name: web_socket_channel - sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b - url: "https://pub.dev" - source: hosted - version: "2.4.0" - webdriver: - dependency: transitive - description: - name: webdriver - sha256: "003d7da9519e1e5f329422b36c4dcdf18d7d2978d1ba099ea4e45ba490ed845e" - url: "https://pub.dev" - source: hosted - version: "3.0.3" - webkit_inspection_protocol: - dependency: transitive - description: - name: webkit_inspection_protocol - sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - win32: - dependency: transitive - description: - name: win32 - sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" - url: "https://pub.dev" - source: hosted - version: "5.2.0" - win32_registry: - dependency: transitive - description: - name: win32_registry - sha256: "41fd8a189940d8696b1b810efb9abcf60827b6cbfab90b0c43e8439e3a39d85a" - url: "https://pub.dev" - source: hosted - version: "1.1.2" - workmanager: - dependency: "direct main" - description: - name: workmanager - sha256: ed13530cccd28c5c9959ad42d657cd0666274ca74c56dea0ca183ddd527d3a00 - url: "https://pub.dev" - source: hosted - version: "0.5.2" - xdg_directories: - dependency: transitive - description: - name: xdg_directories - sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d - url: "https://pub.dev" - source: hosted - version: "1.0.4" - xml: - dependency: transitive - description: - name: xml - sha256: "5bc72e1e45e941d825fd7468b9b4cc3b9327942649aeb6fc5cdbf135f0a86e84" - url: "https://pub.dev" - source: hosted - version: "6.3.0" - xxh3: - dependency: transitive - description: - name: xxh3 - sha256: cbeb0e1d10f4c6bf67b650f395eac0cc689425b5efc2ba0cc3d3e069a0beaeec - url: "https://pub.dev" - source: hosted - version: "1.1.0" - yaml: - dependency: transitive - description: - name: yaml - sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" - url: "https://pub.dev" - source: hosted - version: "3.1.2" -sdks: - dart: ">=3.4.0 <4.0.0" - flutter: ">=3.22.0" diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index 5f66f4219..952cba0d2 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -123,6 +123,7 @@ class _SearchBeneficiaryPageState BlocBuilder( builder: (context, locationState) { return Column( + mainAxisAlignment: MainAxisAlignment.start, children: [ locationState.latitude != null ? Padding( diff --git a/packages/registration_delivery/lib/widgets/back_navigation_help_header.dart b/packages/registration_delivery/lib/widgets/back_navigation_help_header.dart index 58d0b4b83..3449b2a47 100644 --- a/packages/registration_delivery/lib/widgets/back_navigation_help_header.dart +++ b/packages/registration_delivery/lib/widgets/back_navigation_help_header.dart @@ -1,5 +1,8 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/ComponentTheme/back_button_theme.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_back_button.dart'; import 'package:flutter/material.dart'; import 'package:registration_delivery/blocs/app_localization.dart'; import 'package:registration_delivery/widgets/showcase/showcase_button.dart'; @@ -29,32 +32,32 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { final theme = Theme.of(context); return Padding( - padding: const EdgeInsets.all(spacer2 / 2), + padding: const EdgeInsets.only(left: spacer2, top: spacer2), child: Row( children: [ Expanded( child: Row( children: [ if (showBackNavigation) - Flexible( - child: TextButton.icon( - style: TextButton.styleFrom( - foregroundColor: theme.colorScheme.onSurface, - padding: EdgeInsets.zero, - ), - onPressed: () { - context.router.maybePop(); - handleBack != null ? handleBack!() : null; - }, - icon: const Icon(Icons.arrow_left_sharp), - label: Text( - RegistrationDeliveryLocalization.of(context).translate( - i18.common.coreCommonBack, - ), - overflow: TextOverflow.ellipsis, + DigitBackButton(label: RegistrationDeliveryLocalization.of(context).translate( + i18.common.coreCommonBack, + ), + digitBackButtonThemeData: + const DigitBackButtonThemeData().copyWith( + context: context, + backDigitButtonIcon: Icon( + Icons.arrow_left, + size: MediaQuery.of(context).size.width < 500 + ? Theme.of(context).spacerTheme.spacer5 + : Theme.of(context).spacerTheme.spacer6, + color: Theme.of(context).colorTheme.primary.primary2, ), ), - ), + handleBack: () { + context.router.maybePop(); + handleBack != null ? handleBack!() : null; + }, + ) ], ), ), diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 5d8dcc512..d04059551 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -380,9 +372,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + name: dart_mappable_builder + sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e + url: "https://pub.dev" + source: hosted version: "4.2.3" dart_style: dependency: transitive @@ -408,13 +401,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.1" - digit_components: - dependency: transitive - description: - path: "../digit_components" - relative: true - source: path - version: "1.0.2+1" digit_data_model: dependency: "direct main" description: @@ -422,13 +408,6 @@ packages: relative: true source: path version: "1.0.5-dev.1" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" digit_scanner: dependency: "direct main" description: @@ -501,14 +480,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.18.0" - easy_stepper: - dependency: transitive - description: - name: easy_stepper - sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" - url: "https://pub.dev" - source: hosted - version: "0.8.5+1" fake_async: dependency: transitive description: @@ -573,46 +544,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" - url: "https://pub.dev" - source: hosted - version: "2.17.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" fixnum: dependency: transitive description: @@ -658,14 +589,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.13" - flutter_focus_watcher: - dependency: transitive - description: - name: flutter_focus_watcher - sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 - url: "https://pub.dev" - source: hosted - version: "2.0.0" flutter_keyboard_visibility: dependency: "direct main" description: @@ -764,14 +687,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" flutter_web_plugins: dependency: transitive description: flutter @@ -1345,14 +1260,6 @@ packages: url: "https://pub.dev" source: hosted version: "8.0.0" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" pool: dependency: transitive description: @@ -1385,14 +1292,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a - url: "https://pub.dev" - source: hosted - version: "2.1.1" reactive_forms: dependency: "direct main" description: @@ -1409,14 +1308,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" - remove_emoji_input_formatter: - dependency: transitive - description: - name: remove_emoji_input_formatter - sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" - url: "https://pub.dev" - source: hosted - version: "0.0.1+1" rxdart: dependency: transitive description: diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index 429f06d28..3277d082f 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -24,7 +24,9 @@ dependencies: dart_mappable: ^4.2.2 drift: ^2.18.0 auto_route: ^8.1.3 - digit_data_model: ^1.0.5-dev.1 + digit_data_model: + path: + ../digit_data_model collection: ^1.18.0 dio: ^5.4.3+1 location: ^6.0.2 @@ -32,7 +34,9 @@ dependencies: uuid: ^4.4.0 recase: ^4.1.0 pluto_grid: ^8.0.0 - digit_scanner: ^1.0.0+1 + digit_scanner: + path: + ../digit_scanner fluttertoast: ^8.1.2 overlay_builder: ^1.1.0 sqlite3_flutter_libs: ^0.5.10 @@ -45,7 +49,9 @@ dependencies: async: ^2.11.0 formula_parser: ^2.0.1 flutter_keyboard_visibility: ^5.4.1 - survey_form: ^0.0.1-dev.2 + survey_form: + path: + ../survey_form dev_dependencies: flutter_test: From 42d637b4203c261b51419dee3579ae97c8c0d3be Mon Sep 17 00:00:00 2001 From: rachana-egov Date: Wed, 11 Dec 2024 18:46:49 +0530 Subject: [PATCH 189/241] Updated components --- .../lib/pages/closed_household_details.dart | 9 +- .../lib/pages/closed_household_summary.dart | 16 +- .../widgets/back_navigation_help_header.dart | 38 +-- packages/closed_household/pubspec.lock | 122 +------- packages/closed_household/pubspec.yaml | 12 +- .../digit_scanner/lib/pages/qr_scanner.dart | 179 +++++------ .../lib/utils/scanner_utils.dart | 82 ++--- .../vision_detector_views/camera_view.dart | 17 +- packages/digit_scanner/pubspec.lock | 205 ------------ .../beneficiary/beneficiary_checklist.dart | 11 +- .../beneficiary/deliver_intervention.dart | 2 - .../beneficiary/delivery_summary_page.dart | 34 +- .../pages/beneficiary/household_overview.dart | 6 +- .../pages/beneficiary/refused_delivery.dart | 18 +- .../house_details.dart | 8 +- .../household_details.dart | 7 +- .../household_location.dart | 5 +- .../individual_details.dart | 19 +- .../lib/pages/search_beneficiary.dart | 21 +- .../lib/pages/summary_page.dart | 38 ++- .../widgets/beneficiary/beneficiary_card.dart | 1 + .../beneficiary/view_beneficiary_card.dart | 3 +- .../lib/widgets/member_card/member_card.dart | 87 +++--- .../lib/widgets/table_card/table_card.dart | 2 + .../lib/pages/survey_form_boundary_view.dart | 5 +- .../lib/pages/survey_form_preview.dart | 1 - .../lib/pages/survey_form_view.dart | 293 +++++++++--------- .../widgets/back_navigation_help_header.dart | 11 + 28 files changed, 516 insertions(+), 736 deletions(-) diff --git a/packages/closed_household/lib/pages/closed_household_details.dart b/packages/closed_household/lib/pages/closed_household_details.dart index bb96c0795..a98c9099c 100644 --- a/packages/closed_household/lib/pages/closed_household_details.dart +++ b/packages/closed_household/lib/pages/closed_household_details.dart @@ -96,7 +96,7 @@ class ClosedHouseholdDetailsPageState ], ), footer: DigitCard( - padding: EdgeInsets.all(theme.spacerTheme.spacer2), + margin: const EdgeInsets.only(top: spacer2), children: [ BlocBuilder( builder: (context, locationState) { @@ -143,8 +143,11 @@ class ClosedHouseholdDetailsPageState ]), slivers: [ SliverToBoxAdapter( - child: DigitCard(children: [ + child: DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ DigitTextBlock( + padding: const EdgeInsets.all(0), heading: localizations.translate( i18.closeHousehold.closeHouseHoldDetailLabel, ), @@ -153,7 +156,6 @@ class ClosedHouseholdDetailsPageState i18.closeHousehold.closeHouseHoldDetailDescLabel, ), ), - DigitCard(children: [ ReactiveWrapperField( formControlName: _administrationAreaKey, showErrors: (control) => @@ -238,7 +240,6 @@ class ClosedHouseholdDetailsPageState ), ); }), - ]), ]), ), ], diff --git a/packages/closed_household/lib/pages/closed_household_summary.dart b/packages/closed_household/lib/pages/closed_household_summary.dart index bfcdf5dbf..bdb1d7088 100644 --- a/packages/closed_household/lib/pages/closed_household_summary.dart +++ b/packages/closed_household/lib/pages/closed_household_summary.dart @@ -58,7 +58,7 @@ class ClosedHouseholdSummaryPageState showcaseButton: ShowcaseButton(), ), footer: DigitCard( - padding: EdgeInsets.all(theme.spacerTheme.spacer2), + margin: const EdgeInsets.only(top: spacer2), children: [ BlocBuilder( builder: (context, scannerState) { @@ -123,8 +123,11 @@ class ClosedHouseholdSummaryPageState SliverToBoxAdapter( child: Column( children: [ - DigitCard(children: [ + DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ LabelValueSummary( + padding: EdgeInsets.zero, heading: localizations.translate( i18.closeHousehold.closeHouseholdSummaryLabel), withDivider: false, @@ -136,6 +139,7 @@ class ClosedHouseholdSummaryPageState DateTime.now().millisecondsSinceEpoch, dateFormat: 'dd MMM yyyy')) .toString(), + labelFlex: 5, ), LabelValueItem( label: localizations.translate( @@ -144,6 +148,7 @@ class ClosedHouseholdSummaryPageState .boundary! .name .toString(), + labelFlex: 5, ), LabelValueItem( label: localizations.translate( @@ -151,19 +156,23 @@ class ClosedHouseholdSummaryPageState value: householdState.householdHeadName ?? localizations .translate(i18.common.coreCommonNA), + labelFlex: 5, ), LabelValueItem( label: localizations.translate(i18 .closeHousehold.closeHouseholdGpsAccuracyLabel), value: '${householdState.locationAccuracy.toStringAsFixed(2)} ${localizations.translate(i18.common.coreCommonMeters)}', + labelFlex: 5, ), ]), ]), BlocBuilder( builder: (context, state) { if (state.qrCodes.isNotEmpty) { - return DigitCard(children: [ + return DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ LabelValueSummary( heading: localizations.translate(i18.closeHousehold .closeHouseholdVoucherSummaryLabel), @@ -173,6 +182,7 @@ class ClosedHouseholdSummaryPageState label: localizations.translate(i18.closeHousehold .closeHouseholdVoucherCodeLabel), value: state.qrCodes.first, + labelFlex: 5, ), ], ), diff --git a/packages/closed_household/lib/widgets/back_navigation_help_header.dart b/packages/closed_household/lib/widgets/back_navigation_help_header.dart index 399794092..4d80b066c 100644 --- a/packages/closed_household/lib/widgets/back_navigation_help_header.dart +++ b/packages/closed_household/lib/widgets/back_navigation_help_header.dart @@ -1,7 +1,9 @@ import 'package:auto_route/auto_route.dart'; import 'package:closed_household/blocs/app_localization.dart'; import 'package:closed_household/widgets/showcase/showcase_button.dart'; +import 'package:digit_ui_components/theme/ComponentTheme/back_button_theme.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_back_button.dart'; import 'package:flutter/material.dart'; import '../../utils/i18_key_constants.dart' as i18; @@ -29,32 +31,32 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { final theme = Theme.of(context); return Padding( - padding: EdgeInsets.all( theme.spacerTheme.spacer2/ 2), + padding: EdgeInsets.all( theme.spacerTheme.spacer2), child: Row( children: [ Expanded( child: Row( children: [ if (showBackNavigation) - Flexible( - child: TextButton.icon( - style: TextButton.styleFrom( - foregroundColor: theme.colorScheme.surface, - padding: EdgeInsets.zero, - ), - onPressed: () { - context.router.maybePop(); - handleBack != null ? handleBack!() : null; - }, - icon: const Icon(Icons.arrow_left_sharp), - label: Text( - ClosedHouseholdLocalization.of(context).translate( - i18.common.coreCommonBack, - ), - overflow: TextOverflow.ellipsis, + DigitBackButton(label: ClosedHouseholdLocalization.of(context).translate( + i18.common.coreCommonBack, + ), + digitBackButtonThemeData: + const DigitBackButtonThemeData().copyWith( + context: context, + backDigitButtonIcon: Icon( + Icons.arrow_left, + size: MediaQuery.of(context).size.width < 500 + ? Theme.of(context).spacerTheme.spacer5 + : Theme.of(context).spacerTheme.spacer6, + color: Theme.of(context).colorTheme.primary.primary2, ), ), - ), + handleBack: () { + context.router.maybePop(); + handleBack != null ? handleBack!() : null; + }, + ) ], ), ), diff --git a/packages/closed_household/pubspec.lock b/packages/closed_household/pubspec.lock index 411394314..c160c8905 100644 --- a/packages/closed_household/pubspec.lock +++ b/packages/closed_household/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -380,10 +372,12 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.3" + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "5595f37310a63a92b2c1c7e386c74fe39df5555d" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git + version: "4.2.0" dart_style: dependency: transitive description: @@ -416,13 +410,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.1" - digit_components: - dependency: transitive - description: - path: "../digit_components" - relative: true - source: path - version: "1.0.2+1" digit_data_model: dependency: "direct main" description: @@ -430,13 +417,6 @@ packages: relative: true source: path version: "1.0.5-dev.1" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" digit_scanner: dependency: "direct main" description: @@ -509,14 +489,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.18.0" - easy_stepper: - dependency: transitive - description: - name: easy_stepper - sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" - url: "https://pub.dev" - source: hosted - version: "0.8.5+1" fake_async: dependency: transitive description: @@ -581,46 +553,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" - url: "https://pub.dev" - source: hosted - version: "2.17.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" fixnum: dependency: transitive description: @@ -666,14 +598,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.13" - flutter_focus_watcher: - dependency: transitive - description: - name: flutter_focus_watcher - sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 - url: "https://pub.dev" - source: hosted - version: "2.0.0" flutter_keyboard_visibility: dependency: "direct main" description: @@ -772,14 +696,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" flutter_web_plugins: dependency: transitive description: flutter @@ -1361,14 +1277,6 @@ packages: url: "https://pub.dev" source: hosted version: "8.0.0" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" pool: dependency: transitive description: @@ -1401,14 +1309,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a - url: "https://pub.dev" - source: hosted - version: "2.1.1" reactive_forms: dependency: "direct main" description: @@ -1432,14 +1332,6 @@ packages: relative: true source: path version: "1.0.4-dev.5" - remove_emoji_input_formatter: - dependency: transitive - description: - name: remove_emoji_input_formatter - sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" - url: "https://pub.dev" - source: hosted - version: "0.0.1+1" rxdart: dependency: transitive description: @@ -1590,7 +1482,7 @@ packages: source: hosted version: "1.2.0" survey_form: - dependency: "direct overridden" + dependency: transitive description: path: "../survey_form" relative: true diff --git a/packages/closed_household/pubspec.yaml b/packages/closed_household/pubspec.yaml index a5d2d1887..a61f51358 100644 --- a/packages/closed_household/pubspec.yaml +++ b/packages/closed_household/pubspec.yaml @@ -32,10 +32,14 @@ dependencies: uuid: ^4.4.0 recase: ^4.1.0 pluto_grid: ^8.0.0 - digit_scanner: ^1.0.2 + digit_scanner: + path: + ../digit_scanner gs1_barcode_parser: ^1.0.5 auto_route: ^8.1.3 - digit_data_model: ^1.0.5-dev.1 + digit_data_model: + path: + ../digit_data_model package_info_plus: ^8.0.0 digit_showcase: ^1.0.0 collection: ^1.16.0 @@ -43,7 +47,9 @@ dependencies: stream_transform: ^2.1.0 async: ^2.11.0 formula_parser: ^2.0.1 - registration_delivery: ^1.0.3+1 + registration_delivery: + path: + ../registration_delivery location: ^6.0.2 diff --git a/packages/digit_scanner/lib/pages/qr_scanner.dart b/packages/digit_scanner/lib/pages/qr_scanner.dart index c0eebb623..755916d0b 100644 --- a/packages/digit_scanner/lib/pages/qr_scanner.dart +++ b/packages/digit_scanner/lib/pages/qr_scanner.dart @@ -6,6 +6,7 @@ import 'package:camera/camera.dart'; import 'package:digit_scanner/utils/scanner_utils.dart'; import 'package:digit_scanner/widgets/localized.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/input_wrapper.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; @@ -215,12 +216,13 @@ class _DigitScannerPageState extends LocalizedState { child: DigitCard( margin: const EdgeInsets.only(top: spacer1), padding: const EdgeInsets.fromLTRB( - spacer1, 0, spacer1, 0), + spacer3, spacer1, spacer3, 0), children: [ DigitButton( label: localizations .translate(i18.common.coreCommonSubmit), size: DigitButtonSize.large, + mainAxisSize: MainAxisSize.max, type: DigitButtonType.primary, onPressed: () async { if (widget.isGS1code && @@ -248,7 +250,7 @@ class _DigitScannerPageState extends LocalizedState { ), Positioned( - bottom: (spacer1 * 7.5), + bottom: (spacer1 * 10), height: widget.isGS1code ? state.barCodes.length < 3 ? (state.barCodes.length * 60) + 80 @@ -413,99 +415,102 @@ class _DigitScannerPageState extends LocalizedState { return ReactiveFormBuilder( form: () => buildForm(), builder: (context, form, child) { - return DigitCard( - children: [ - ScrollableContent( - backgroundColor: theme.colorScheme.onError, - header: GestureDetector( - onTap: () { + return ScrollableContent( + backgroundColor: theme.colorScheme.onError, + header: GestureDetector( + onTap: () { + setState(() { + manualCode = false; + initializeCameras(); + }); + }, + child: Align( + alignment: Alignment.topRight, + child: Icon(Icons.close, color: Theme.of(context).colorTheme.text.primary,), + ), + ), + footer: Padding( + padding: const EdgeInsets.all(spacer4), + child: DigitButton( + mainAxisSize: MainAxisSize.max, + onPressed: () async { + if (form + .control(_manualCodeFormKey) + .value == + null || + form + .control(_manualCodeFormKey) + .value + .toString() + .trim() + .isEmpty) { + Toast.showToast( + context, + type: ToastType.error, + message: localizations.translate( + i18.scanner.enterManualCode), + ); + } else { + final bloc = + context.read(); + codes.add(form + .control(_manualCodeFormKey) + .value); + bloc.add( + DigitScannerEvent.handleScanner( + barCode: state.barCodes, + qrCode: codes, + ), + ); + if (widget.isGS1code && + result.length < widget.quantity) { + DigitScannerUtils().buildDialog( + context, + localizations, + widget.quantity, + ); + } + setState(() { manualCode = false; initializeCameras(); }); - }, - child: const Align( - alignment: Alignment.topRight, - child: Icon(Icons.close), - ), + } + }, + type: DigitButtonType.primary, + size: DigitButtonSize.large, + label: localizations.translate( + i18.common.coreCommonSubmit, ), - footer: DigitButton( - onPressed: () async { - if (form - .control(_manualCodeFormKey) - .value == - null || - form - .control(_manualCodeFormKey) - .value - .toString() - .trim() - .isEmpty) { - Toast.showToast( - context, - type: ToastType.error, - message: localizations.translate( - i18.scanner.enterManualCode), - ); - } else { - final bloc = - context.read(); - codes.add(form - .control(_manualCodeFormKey) - .value); - bloc.add( - DigitScannerEvent.handleScanner( - barCode: state.barCodes, - qrCode: codes, - ), - ); - if (widget.isGS1code && - result.length < widget.quantity) { - DigitScannerUtils().buildDialog( - context, - localizations, - widget.quantity, - ); - } - - setState(() { - manualCode = false; - initializeCameras(); - }); - } - }, - type: DigitButtonType.primary, - size: DigitButtonSize.large, - label: localizations.translate( - i18.common.coreCommonSubmit, + ), + ), + children: [ + DigitCard(children: [ + Align( + alignment: Alignment.topLeft, + child: Text( + localizations.translate( + i18.scanner.enterManualCode, + ), + style: theme.textTheme.headlineLarge, ), ), - children: [ - Align( - alignment: Alignment.topLeft, - child: Text( - localizations.translate( - i18.scanner.enterManualCode, + const SizedBox( + height: spacer2, + ), + ReactiveWrapperField( + formControlName: _manualCodeFormKey, + builder: (field) { + return InputField( + label: localizations.translate( + i18.scanner.resourceCode, ), - style: theme.textTheme.headlineLarge, - ), - ), - const SizedBox( - height: spacer2, - ), - ReactiveWrapperField( - formControlName: _manualCodeFormKey, - builder: (field) { - return InputField( - label: localizations.translate( - i18.scanner.resourceCode, - ), - type: InputType.text, - ); - }, - ), - ], - ) + type: InputType.text, + ); + }, + ), + ]) + ], ); }); diff --git a/packages/digit_scanner/lib/utils/scanner_utils.dart b/packages/digit_scanner/lib/utils/scanner_utils.dart index cc5d544ca..a9cd4748f 100644 --- a/packages/digit_scanner/lib/utils/scanner_utils.dart +++ b/packages/digit_scanner/lib/utils/scanner_utils.dart @@ -1,9 +1,10 @@ import 'package:audioplayers/audioplayers.dart'; import 'package:camera/camera.dart'; -import 'package:digit_components/digit_components.dart'; -import 'package:digit_components/widgets/atoms/digit_toaster.dart'; import 'package:digit_scanner/blocs/app_localization.dart'; import 'package:digit_scanner/utils/extensions/extensions.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; +import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:google_mlkit_barcode_scanning/google_mlkit_barcode_scanning.dart'; @@ -25,39 +26,49 @@ class DigitScannerUtils { i18.scanner.scannerDialogContent, ) .replaceAll('{quantity}', quantity.toString()); - await DigitDialog.show( - context, - options: DigitDialogOptions( - titleText: localizations.translate( + await showCustomPopup( + context: context, + builder: (popupContext) => Popup( + title: localizations.translate( i18.scanner.scannerDialogTitle, ), - contentText: contentLocalization, - primaryAction: DigitDialogActions( - label: localizations.translate( - i18.scanner.scannerDialogPrimaryAction, + onOutsideTap: () { + Navigator.of(popupContext).pop(); + }, + description:contentLocalization, + type: PopUpType.simple, + actions: [ + DigitButton( + label: localizations.translate( + i18.scanner.scannerDialogPrimaryAction, + ), + onPressed: () { + Navigator.of( + popupContext, + rootNavigator: true, + ).pop(false); + }, + type: DigitButtonType.primary, + size: DigitButtonSize.large, ), - action: (ctx) { - Navigator.of( - context, - rootNavigator: true, - ).pop(false); - }, - ), - secondaryAction: DigitDialogActions( - label: localizations.translate( - i18.scanner.scannerDialogSecondaryAction, + DigitButton( + label: localizations.translate( + i18.scanner.scannerDialogSecondaryAction, + ), + onPressed: () { + Navigator.of( + context, + rootNavigator: true, + ).pop(true); + + Navigator.of( + context, + ).pop(); + }, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, ), - action: (ctx) { - Navigator.of( - context, - rootNavigator: true, - ).pop(true); - - Navigator.of( - context, - ).pop(); - }, - ), + ], ), ); } @@ -196,13 +207,10 @@ class DigitScannerUtils { // Check if the player has completed playing or if the result list is empty if (player.state == PlayerState.completed || result.isEmpty) { // Display a toast message with the provided error message - DigitToast.show( + Toast.showToast( context, - options: DigitToastOptions( - localizations.translate(message), // Translate the message - true, // Show as an error - DigitTheme.instance.mobileTheme, // Use the current theme - ), + type: ToastType.error, + message: localizations.translate(message), ); } diff --git a/packages/digit_scanner/lib/widgets/vision_detector_views/camera_view.dart b/packages/digit_scanner/lib/widgets/vision_detector_views/camera_view.dart index 49318aeca..a2d06f18f 100644 --- a/packages/digit_scanner/lib/widgets/vision_detector_views/camera_view.dart +++ b/packages/digit_scanner/lib/widgets/vision_detector_views/camera_view.dart @@ -1,10 +1,11 @@ import 'dart:io'; import 'package:camera/camera.dart'; -import 'package:digit_components/digit_components.dart'; import 'package:digit_scanner/blocs/app_localization.dart'; import 'package:digit_scanner/utils/i18_key_constants.dart' as i18; import 'package:digit_scanner/widgets/localized.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -75,13 +76,14 @@ class _CameraViewState extends State { } Widget _liveFeedBody(BuildContext context) { + final theme = Theme.of(context); final localizations = ScannerLocalization.of(context); if (_cameras.isEmpty) return Container(); if (_controller == null) return Container(); if (_controller?.value.isInitialized == false) return Container(); return Container( - color: DigitTheme.instance.colorScheme.onSurface, + color: theme.colorTheme.generic.background, child: Stack( fit: StackFit.expand, children: [ @@ -116,10 +118,11 @@ class _CameraViewState extends State { child: FloatingActionButton( heroTag: Object(), onPressed: () => Navigator.of(context).pop(), - backgroundColor: DigitTheme.instance.colorScheme.onSurface, - child: const Icon( + backgroundColor: Theme.of(context).colorTheme.generic.background, + child: Icon( Icons.arrow_back_ios_outlined, size: 20, + color: Theme.of(context).colorTheme.text.primary, ), ), ), @@ -181,7 +184,7 @@ class _CameraViewState extends State { min: _minAvailableZoom, max: _maxAvailableZoom, activeColor: DigitTheme.instance.colorScheme.onPrimary, - inactiveColor: const DigitColors().seaShellGray, + inactiveColor: const DigitColors().light.genericBackground, onChanged: (value) async { setState(() { _currentZoomLevel = value; @@ -201,7 +204,7 @@ class _CameraViewState extends State { child: Center( child: Text( '${_currentZoomLevel.toStringAsFixed(1)}x', - style: TextStyle(color: const DigitColors().white), + style: TextStyle(color: const DigitColors().light.paperPrimary), ), ), ), @@ -227,7 +230,7 @@ class _CameraViewState extends State { padding: const EdgeInsets.all(3.0), decoration: BoxDecoration( border: Border.all( - width: kPadding / 2, + width: spacer1, color: DigitTheme.instance.colorScheme.error, ), ), diff --git a/packages/digit_scanner/pubspec.lock b/packages/digit_scanner/pubspec.lock index bb03229f1..0166d480c 100644 --- a/packages/digit_scanner/pubspec.lock +++ b/packages/digit_scanner/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "67.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -25,14 +17,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.4.1" - ansicolor: - dependency: transitive - description: - name: ansicolor - sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" - url: "https://pub.dev" - source: hosted - version: "2.0.3" archive: dependency: transitive description: @@ -353,21 +337,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_mappable: - dependency: transitive - description: - name: dart_mappable - sha256: f69a961ae8589724ebb542e588f228ae844c5f78028899cbe2cc718977c1b382 - url: "https://pub.dev" - source: hosted - version: "4.3.0" - dart_mappable_builder: - dependency: "direct overridden" - description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.3" dart_style: dependency: transitive description: @@ -384,20 +353,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.1" - digit_components: - dependency: "direct overridden" - description: - path: "../digit_components" - relative: true - source: path - version: "1.0.2+1" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" digit_ui_components: dependency: "direct main" description: @@ -415,14 +370,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - easy_stepper: - dependency: transitive - description: - name: easy_stepper - sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" - url: "https://pub.dev" - source: hosted - version: "0.8.5+1" fake_async: dependency: transitive description: @@ -487,46 +434,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+3" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "9e69806bb3d905aeec3c1242e0e1475de6ea6d48f456af29d598fb229a2b4e5e" - url: "https://pub.dev" - source: hosted - version: "2.18.2" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" fixnum: dependency: transitive description: @@ -572,62 +479,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.13" - flutter_focus_watcher: - dependency: transitive - description: - name: flutter_focus_watcher - sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility: - dependency: transitive - description: - name: flutter_keyboard_visibility - sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" - url: "https://pub.dev" - source: hosted - version: "5.4.1" - flutter_keyboard_visibility_linux: - dependency: transitive - description: - name: flutter_keyboard_visibility_linux - sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_macos: - dependency: transitive - description: - name: flutter_keyboard_visibility_macos - sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_platform_interface: - dependency: transitive - description: - name: flutter_keyboard_visibility_platform_interface - sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_web: - dependency: transitive - description: - name: flutter_keyboard_visibility_web - sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_windows: - dependency: transitive - description: - name: flutter_keyboard_visibility_windows - sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 - url: "https://pub.dev" - source: hosted - version: "1.0.0" flutter_lints: dependency: "direct dev" description: @@ -678,14 +529,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" flutter_web_plugins: dependency: transitive description: flutter @@ -1107,22 +950,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - package_info_plus: - dependency: transitive - description: - name: package_info_plus - sha256: da8d9ac8c4b1df253d1a328b7bf01ae77ef132833479ab40763334db13b91cce - url: "https://pub.dev" - source: hosted - version: "8.1.1" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 - url: "https://pub.dev" - source: hosted - version: "3.0.1" path: dependency: "direct main" description: @@ -1219,14 +1046,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" pool: dependency: transitive description: @@ -1259,14 +1078,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a - url: "https://pub.dev" - source: hosted - version: "2.1.1" reactive_forms: dependency: "direct main" description: @@ -1275,14 +1086,6 @@ packages: url: "https://pub.dev" source: hosted version: "17.0.1" - remove_emoji_input_formatter: - dependency: transitive - description: - name: remove_emoji_input_formatter - sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" - url: "https://pub.dev" - source: hosted - version: "0.0.1+1" shelf: dependency: transitive description: @@ -1448,14 +1251,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" - type_plus: - dependency: transitive - description: - name: type_plus - sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 - url: "https://pub.dev" - source: hosted - version: "2.1.1" typed_data: dependency: transitive description: diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart index df03d9c75..97659817d 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart @@ -107,7 +107,6 @@ class _BeneficiaryChecklistPageState enableFixedDigitButton: true, footer: DigitCard( margin: const EdgeInsets.only(top: spacer2), - padding: const EdgeInsets.all(spacer2), children: [ DigitButton( label: localizations @@ -269,7 +268,9 @@ class _BeneficiaryChecklistPageState children: [ Form( key: checklistFormKey, //assigning key to form - child: DigitCard(padding: EdgeInsets.zero, children: [ + child: DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ ...initialAttributes!.map(( e, ) { @@ -423,12 +424,12 @@ class _BeneficiaryChecklistPageState ), ] else if (e.dataType == 'Boolean') ...[ if (!(e.code ?? '').contains('.')) - DigitCard(children: [ BlocBuilder( builder: (context, state) { return Align( alignment: Alignment.topLeft, child: SelectionCard( + showParentContainer: true, title: localizations.translate( '${selectedServiceDefinition?.code}.${e.code}', ), @@ -486,13 +487,9 @@ class _BeneficiaryChecklistPageState ); }, ), - ]), ], ]); }), - const SizedBox( - height: 15, - ), ]), ), ], diff --git a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart index 2abebf36a..00532ffd4 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart @@ -254,8 +254,6 @@ class DeliverInterventionPageState return DigitCard( margin: const EdgeInsets.only( top: spacer2), - padding: - const EdgeInsets.all(spacer2), children: [ ValueListenableBuilder( valueListenable: clickedStatus, diff --git a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart index d6e63cf92..c3b607e54 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart @@ -72,7 +72,6 @@ class DeliverySummaryPageState extends LocalizedState { ]), footer: DigitCard( margin: const EdgeInsets.only(top: spacer2), - padding: const EdgeInsets.all(spacer2), children: [ ValueListenableBuilder( valueListenable: clickedStatus, @@ -182,6 +181,7 @@ class DeliverySummaryPageState extends LocalizedState { margin: const EdgeInsets.all(spacer2), children: [ LabelValueSummary( + padding: EdgeInsets.zero, heading: localizations.translate(i18 .householdLocation .householdLocationLabelText), @@ -201,7 +201,9 @@ class DeliverySummaryPageState extends LocalizedState { .titleCase ?? localizations.translate( i18.common.coreCommonNA), - isInline: true), + isInline: true, + labelFlex: 5, + ), LabelValueItem( label: localizations.translate(i18 .householdLocation.landmarkFormLabel), @@ -209,13 +211,16 @@ class DeliverySummaryPageState extends LocalizedState { ?.household?.address?.landmark ?? localizations.translate( i18.common.coreCommonNA), - isInline: true), + isInline: true, + labelFlex: 5, + ), ]), ]), DigitCard( margin: const EdgeInsets.all(spacer2), children: [ LabelValueSummary( + padding: EdgeInsets.zero, heading: localizations.translate( i18.householdDetails.householdDetailsLabel), withDivider: true, @@ -227,7 +232,9 @@ class DeliverySummaryPageState extends LocalizedState { ?.household?.memberCount .toString() ?? '0', - isInline: true), + isInline: true, + labelFlex: 5, + ), LabelValueItem( label: localizations.translate(i18 .householdDetails @@ -246,7 +253,9 @@ class DeliverySummaryPageState extends LocalizedState { ?.value .toString() ?? '0', - isInline: true), + isInline: true, + labelFlex: 5, + ), LabelValueItem( label: localizations.translate(i18 .householdDetails @@ -264,13 +273,16 @@ class DeliverySummaryPageState extends LocalizedState { ?.value .toString() ?? '0', - isInline: true), + isInline: true, + labelFlex: 5, + ), ]), ]), DigitCard( margin: const EdgeInsets.all(spacer2), children: [ LabelValueSummary( + padding: EdgeInsets.zero, heading: localizations.translate( i18.householdDetails.houseDetailsLabel), withDivider: true, @@ -291,7 +303,9 @@ class DeliverySummaryPageState extends LocalizedState { ?.value .toString() ?? '0', - isInline: true), + isInline: true, + labelFlex: 5, + ), LabelValueItem( label: localizations.translate( i18.householdDetails.typeOfStructure), @@ -314,7 +328,9 @@ class DeliverySummaryPageState extends LocalizedState { getLocalizedMessage(item)) .toList() .join(', '), - isInline: true), + isInline: true, + labelFlex: 5, + ), ]), ]), BlocBuilder( @@ -344,6 +360,7 @@ class DeliverySummaryPageState extends LocalizedState { margin: const EdgeInsets.all(spacer2), children: [ LabelValueSummary( + padding: EdgeInsets.zero, heading: localizations.translate( '${RegistrationDeliverySingleton().selectedProject?.name.toUpperCase()}_${i18.deliverIntervention.deliveryDetailsLabel}_${deliverState.oldTask?.status}'), withDivider: true, @@ -386,6 +403,7 @@ class DeliverySummaryPageState extends LocalizedState { .join('\n') ?? localizations.translate( i18.common.coreCommonNA), + labelFlex: 5, ), ]), ]); diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index ee3422189..fc91f2595 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -8,6 +8,7 @@ import 'package:digit_ui_components/theme/spacers.dart'; import 'package:digit_ui_components/utils/date_utils.dart'; import 'package:digit_ui_components/widgets/atoms/digit_action_card.dart'; import 'package:digit_ui_components/widgets/atoms/digit_button.dart'; +import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; @@ -93,7 +94,6 @@ class _HouseholdOverviewPageState DeliverInterventionState>( builder: (ctx, deliverInterventionState) => DigitCard( margin: const EdgeInsets.only(top: spacer2), - padding: const EdgeInsets.all(spacer2), children: [ state.householdMemberWrapper.tasks?.lastOrNull ?.status == @@ -207,7 +207,9 @@ class _HouseholdOverviewPageState ), slivers: [ SliverToBoxAdapter( - child: DigitCard(children: [ + child: DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.max, diff --git a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart index 280f19b3b..fb29c698c 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart @@ -162,15 +162,14 @@ class RefusedDeliveryPageState extends LocalizedState { ]), slivers: [ SliverToBoxAdapter( - child: DigitCard(children: [ - Padding( - padding: const EdgeInsets.all(spacer2), - child: Text( - localizations.translate( - i18.deliverIntervention.refusedDeliveryLabel, - ), - style: textTheme.headingXl, + child: DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ + Text( + localizations.translate( + i18.deliverIntervention.refusedDeliveryLabel, ), + style: textTheme.headingXl, ), refusedDeliveryShowcaseData.dateOfVisit.buildWith( child: ReactiveWrapperField( @@ -201,8 +200,9 @@ class RefusedDeliveryPageState extends LocalizedState { title: localizations.translate( i18.deliverIntervention.reasonForRefusalLabel, ), + showParentContainer: true, isRequired: true, - width: MediaQuery.of(context).size.width * .36, + width: MediaQuery.of(context).size.width * .34, allowMultipleSelection: false, options: RegistrationDeliverySingleton() .refusalReasons ?? diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart index 05ea5cb02..34ab06d1e 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart @@ -64,7 +64,6 @@ class HouseDetailsPageState extends LocalizedState { ), footer: DigitCard( margin: const EdgeInsets.only(top: spacer2), - padding: const EdgeInsets.all(spacer2), children: [ DigitButton( onPressed: () { @@ -220,9 +219,11 @@ class HouseDetailsPageState extends LocalizedState { ]), slivers: [ SliverToBoxAdapter( - child: DigitCard(children: [ + child: DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ Padding( - padding: const EdgeInsets.all(spacer2), + padding: const EdgeInsets.all(0), child: Text( localizations.translate( i18.householdDetails.houseDetailsLabel, @@ -232,6 +233,7 @@ class HouseDetailsPageState extends LocalizedState { ), houseShowcaseData.typeOfStructure.buildWith( child: SelectionCard( + showParentContainer: true, isRequired: true, title: localizations.translate( i18.householdDetails.typeOfStructure), diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart index 8aac7e581..0889fccdc 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart @@ -88,7 +88,6 @@ class HouseHoldDetailsPageState extends LocalizedState { enableFixedDigitButton: true, footer: DigitCard( margin: const EdgeInsets.only(top: spacer2), - padding: const EdgeInsets.all(spacer2), children: [ DigitButton( label: registrationState.mapOrNull( @@ -361,9 +360,11 @@ class HouseHoldDetailsPageState extends LocalizedState { ]), slivers: [ SliverToBoxAdapter( - child: DigitCard(children: [ + child: DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ DigitTextBlock( - padding: const EdgeInsets.all(spacer2), + padding: const EdgeInsets.all(0), heading: localizations.translate( i18.householdDetails.householdDetailsLabel, ), diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index 43e55a532..ca64732cc 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -118,7 +118,6 @@ class HouseholdLocationPageState extends LocalizedState { ), footer: DigitCard( margin: const EdgeInsets.only(top: spacer2), - padding: const EdgeInsets.all(spacer2), children: [ BlocBuilder( builder: (context, locationState) { @@ -267,7 +266,9 @@ class HouseholdLocationPageState extends LocalizedState { ]), slivers: [ SliverToBoxAdapter( - child: DigitCard(children: [ + child: DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ DigitTextBlock( padding: const EdgeInsets.only(top: spacer2), heading: localizations.translate( diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index 301b6f072..74218c4ad 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -105,7 +105,6 @@ class IndividualDetailsPageState extends LocalizedState { ]), footer: DigitCard( margin: const EdgeInsets.only(top: spacer2), - padding: const EdgeInsets.all(spacer2), children: [ ValueListenableBuilder( valueListenable: clickedStatus, @@ -313,15 +312,14 @@ class IndividualDetailsPageState extends LocalizedState { ]), slivers: [ SliverToBoxAdapter( - child: DigitCard(children: [ - Padding( - padding: const EdgeInsets.only(bottom: spacer2), - child: Text( - localizations.translate( - i18.individualDetails.individualsDetailsLabelText, - ), - style: textTheme.headingXl, + child: DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ + Text( + localizations.translate( + i18.individualDetails.individualsDetailsLabelText, ), + style: textTheme.headingXl, ), individualDetailsShowcaseData.nameOfIndividual.buildWith( child: ReactiveWrapperField( @@ -495,6 +493,7 @@ class IndividualDetailsPageState extends LocalizedState { ), SelectionCard( isRequired: true, + showParentContainer: true, title: localizations.translate( i18.individualDetails.genderLabelText, ), @@ -558,7 +557,7 @@ class IndividualDetailsPageState extends LocalizedState { ), ), ), - const SizedBox(height: 16), + // const SizedBox(height: spacer4), if ((RegistrationDeliverySingleton().beneficiaryType == BeneficiaryType.household && widget.isHeadOfHousehold) || diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index 952cba0d2..aad794d03 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -124,6 +124,7 @@ class _SearchBeneficiaryPageState builder: (context, locationState) { return Column( mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, children: [ locationState.latitude != null ? Padding( @@ -238,13 +239,17 @@ class _SearchBeneficiaryPageState ), if (searchHouseholdsState.resultsNotFound && !searchHouseholdsState.loading) - InfoCard( - type: InfoType.info, - description: localizations.translate( - i18.searchBeneficiary.beneficiaryInfoDescription, - ), - title: localizations.translate( - i18.searchBeneficiary.beneficiaryInfoTitle, + Padding( + padding: const EdgeInsets.only( + left: spacer2, top: spacer2, right: spacer2), + child: InfoCard( + type: InfoType.info, + description: localizations.translate( + i18.searchBeneficiary.beneficiaryInfoDescription, + ), + title: localizations.translate( + i18.searchBeneficiary.beneficiaryInfoTitle, + ), ), ), ], @@ -359,7 +364,7 @@ class _SearchBeneficiaryPageState ), bottomNavigationBar: DigitCard( margin: const EdgeInsets.only(top: spacer2), - padding: const EdgeInsets.all(spacer2), + padding: const EdgeInsets.all(spacer4), children: [ DigitButton( label: localizations.translate( diff --git a/packages/registration_delivery/lib/pages/summary_page.dart b/packages/registration_delivery/lib/pages/summary_page.dart index 728fe6b88..31ba15b9e 100644 --- a/packages/registration_delivery/lib/pages/summary_page.dart +++ b/packages/registration_delivery/lib/pages/summary_page.dart @@ -101,7 +101,6 @@ class SummaryPageState extends LocalizedState { ]), footer: DigitCard( margin: const EdgeInsets.only(top: spacer2), - padding: const EdgeInsets.all(spacer2), children: [ ValueListenableBuilder( valueListenable: clickedStatus, @@ -205,6 +204,7 @@ class SummaryPageState extends LocalizedState { margin: const EdgeInsets.all(spacer2), children: [ LabelValueSummary( + padding: EdgeInsets.zero, heading: localizations.translate(i18 .householdLocation .householdLocationLabelText), @@ -216,7 +216,9 @@ class SummaryPageState extends LocalizedState { ?.address?.locality?.code ?? localizations.translate( i18.common.coreCommonNA), - isInline: true), + isInline: true, + labelFlex: 5, + ), LabelValueItem( label: localizations.translate(i18 .householdLocation.landmarkFormLabel), @@ -224,13 +226,16 @@ class SummaryPageState extends LocalizedState { ?.address?.landmark ?? localizations.translate( i18.common.coreCommonNA), - isInline: true), + isInline: true, + labelFlex: 5, + ), ]), ]), DigitCard( margin: const EdgeInsets.all(spacer2), children: [ LabelValueSummary( + padding: EdgeInsets.zero, heading: localizations.translate( i18.householdDetails.householdDetailsLabel), items: [ @@ -241,7 +246,8 @@ class SummaryPageState extends LocalizedState { .householdModel?.memberCount .toString() ?? '0', - isInline: true), + isInline: true, + labelFlex: 5,), LabelValueItem( label: localizations.translate(i18 .householdDetails @@ -257,7 +263,9 @@ class SummaryPageState extends LocalizedState { ?.value .toString() ?? '0', - isInline: true), + isInline: true, + labelFlex: 5, + ), LabelValueItem( label: localizations.translate(i18 .householdDetails @@ -272,13 +280,16 @@ class SummaryPageState extends LocalizedState { ?.value .toString() ?? '0', - isInline: true), + isInline: true, + labelFlex: 5, + ), ]), ]), DigitCard( margin: const EdgeInsets.all(spacer2), children: [ LabelValueSummary( + padding: EdgeInsets.zero, heading: localizations.translate( i18.householdDetails.houseDetailsLabel), items: [ @@ -295,7 +306,9 @@ class SummaryPageState extends LocalizedState { ?.value .toString() ?? '0', - isInline: true), + isInline: true, + labelFlex: 5, + ), LabelValueItem( label: localizations.translate( i18.householdDetails.typeOfStructure), @@ -315,13 +328,16 @@ class SummaryPageState extends LocalizedState { getLocalizedMessage(item)) .toList() .join(', '), - isInline: true), + isInline: true, + labelFlex: 5, + ), ]), ]), DigitCard( margin: const EdgeInsets.all(spacer2), children: [ LabelValueSummary( + padding: EdgeInsets.zero, heading: localizations.translate(i18 .individualDetails .individualsDetailsLabelText), @@ -344,7 +360,9 @@ class SummaryPageState extends LocalizedState { ) => individualModel?.name?.givenName ?? localizations.translate( - i18.common.coreCommonNA)), + i18.common.coreCommonNA) + ), + labelFlex: 5, ), LabelValueItem( label: localizations.translate( @@ -374,6 +392,7 @@ class SummaryPageState extends LocalizedState { .toString() : localizations.translate( i18.common.coreCommonNA)), + labelFlex: 5, ), LabelValueItem( label: localizations.translate( @@ -399,6 +418,7 @@ class SummaryPageState extends LocalizedState { '') : localizations.translate( i18.common.coreCommonNA)), + labelFlex: 5, ), ]), ]), diff --git a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart index aa990ace3..943fc17b9 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart @@ -35,6 +35,7 @@ class BeneficiaryCard extends StatelessWidget { style: theme.textTheme.headlineSmall, ), ), + if(status != null) Offstage( offstage: status == null, child: status == Status.visited.toValue() || diff --git a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart index be2406e6a..f05bbf808 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart @@ -282,7 +282,7 @@ class ViewBeneficiaryCardState extends LocalizedState { projectBeneficiary?.clientReferenceId); return DigitCard( - margin: const EdgeInsets.only(top: spacer2, bottom: spacer2), + margin: const EdgeInsets.all(spacer2), children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -328,6 +328,7 @@ class ViewBeneficiaryCardState extends LocalizedState { ), ], ), + if(isCardExpanded) Offstage( offstage: !isCardExpanded, child: DigitTable( diff --git a/packages/registration_delivery/lib/widgets/member_card/member_card.dart b/packages/registration_delivery/lib/widgets/member_card/member_card.dart index 70fcb9c1a..2879644da 100644 --- a/packages/registration_delivery/lib/widgets/member_card/member_card.dart +++ b/packages/registration_delivery/lib/widgets/member_card/member_card.dart @@ -105,53 +105,56 @@ class MemberCard extends StatelessWidget { Positioned( child: Align( alignment: Alignment.topRight, - child: DigitButton( - isDisabled: (projectBeneficiaries ?? []).isEmpty, - onPressed: () => showDialog( - context: context, - builder: (ctx) => DigitActionCard( - onOutsideTap: () { - Navigator.of(context, rootNavigator: true).pop(); - }, - actions: [ - DigitButton( - prefixIcon: Icons.person, - label: localizations.translate( - i18.memberCard.assignAsHouseholdhead, + child: Padding( + padding: const EdgeInsets.only(top: spacer2), + child: DigitButton( + isDisabled: (projectBeneficiaries ?? []).isEmpty, + onPressed: () => showDialog( + context: context, + builder: (ctx) => DigitActionCard( + onOutsideTap: () { + Navigator.of(context, rootNavigator: true).pop(); + }, + actions: [ + DigitButton( + prefixIcon: Icons.person, + label: localizations.translate( + i18.memberCard.assignAsHouseholdhead, + ), + isDisabled: isHead ? true : false, + onPressed: setAsHeadAction, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, ), - isDisabled: isHead ? true : false, - onPressed: setAsHeadAction, - type: DigitButtonType.secondary, - size: DigitButtonSize.large, - ), - DigitButton( - prefixIcon: Icons.edit, - label: localizations.translate( - i18.memberCard.editIndividualDetails, + DigitButton( + prefixIcon: Icons.edit, + label: localizations.translate( + i18.memberCard.editIndividualDetails, + ), + onPressed: editMemberAction, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, ), - onPressed: editMemberAction, - type: DigitButtonType.secondary, - size: DigitButtonSize.large, - ), - DigitButton( - prefixIcon: Icons.delete, - label: localizations.translate( - i18.memberCard.deleteIndividualActionText, + DigitButton( + prefixIcon: Icons.delete, + label: localizations.translate( + i18.memberCard.deleteIndividualActionText, + ), + isDisabled: isHead ? true : false, + onPressed: deleteMemberAction, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, ), - isDisabled: isHead ? true : false, - onPressed: deleteMemberAction, - type: DigitButtonType.secondary, - size: DigitButtonSize.large, - ), - ], + ], + ), ), + label: localizations.translate( + i18.memberCard.editDetails, + ), + prefixIcon: Icons.edit, + type: DigitButtonType.tertiary, + size: DigitButtonSize.medium, ), - label: localizations.translate( - i18.memberCard.editDetails, - ), - prefixIcon: Icons.edit, - type: DigitButtonType.tertiary, - size: DigitButtonSize.medium, ), ), ), diff --git a/packages/registration_delivery/lib/widgets/table_card/table_card.dart b/packages/registration_delivery/lib/widgets/table_card/table_card.dart index eef551f17..f0231569a 100644 --- a/packages/registration_delivery/lib/widgets/table_card/table_card.dart +++ b/packages/registration_delivery/lib/widgets/table_card/table_card.dart @@ -29,10 +29,12 @@ class DigitTableCard extends StatelessWidget { @override Widget build(BuildContext context) { return LabelValueSummary( + padding: EdgeInsets.all(0), items: element.keys .map((e) => LabelValueItem( label: e, value: element[e].toString(), + labelFlex: 5, )) .toList(), ); diff --git a/packages/survey_form/lib/pages/survey_form_boundary_view.dart b/packages/survey_form/lib/pages/survey_form_boundary_view.dart index b9cebde84..2e6c911ba 100644 --- a/packages/survey_form/lib/pages/survey_form_boundary_view.dart +++ b/packages/survey_form/lib/pages/survey_form_boundary_view.dart @@ -39,7 +39,6 @@ class SurveyFormBoundaryViewPageState footer: DigitCard( cardType: CardType.primary, margin: const EdgeInsets.only(top: spacer2), - padding: const EdgeInsets.all(spacer2), children: [ DigitButton( type: DigitButtonType.primary, @@ -52,7 +51,9 @@ class SurveyFormBoundaryViewPageState ), ]), children: [ - DigitCard(cardType: CardType.primary, children: [ + DigitCard( + margin: const EdgeInsets.all(spacer2), + cardType: CardType.primary, children: [ Text( localizations.translate( i18.surveyForm.surveyFormDetailLabel, diff --git a/packages/survey_form/lib/pages/survey_form_preview.dart b/packages/survey_form/lib/pages/survey_form_preview.dart index 47833f577..702c6858c 100644 --- a/packages/survey_form/lib/pages/survey_form_preview.dart +++ b/packages/survey_form/lib/pages/survey_form_preview.dart @@ -46,7 +46,6 @@ class SurveyFormPreviewPageState extends LocalizedState { ? DigitCard( cardType: CardType.primary, margin: const EdgeInsets.only(top: spacer2), - padding: const EdgeInsets.all(spacer2), children: [ DigitButton( mainAxisSize: MainAxisSize.max, diff --git a/packages/survey_form/lib/pages/survey_form_view.dart b/packages/survey_form/lib/pages/survey_form_view.dart index 228f0c6c1..ce0bfc65f 100644 --- a/packages/survey_form/lib/pages/survey_form_view.dart +++ b/packages/survey_form/lib/pages/survey_form_view.dart @@ -105,7 +105,6 @@ class SurveyFormViewPageState extends LocalizedState { footer: DigitCard( cardType: CardType.primary, margin: const EdgeInsets.only(top: spacer2), - padding: const EdgeInsets.all(spacer2), children: [ DigitButton( label: localizations @@ -538,7 +537,7 @@ class SurveyFormViewPageState extends LocalizedState { ] else if (e.dataType == 'SingleValueList') ...[ if (!(e.code ?? '').contains('.')) DigitCard( - cardType: CardType.primary, + cardType: CardType.secondary, children: [ _buildSurveyForm( e, @@ -701,160 +700,158 @@ class SurveyFormViewPageState extends LocalizedState { return Align( alignment: Alignment.topLeft, - child: Padding( - padding: const EdgeInsets.all(spacer4), // Add padding here - child: LabeledField( - label: localizations.translate( - '${selectedServiceDefinition?.code}.${item.code}', - ), - isRequired: item.required ?? false, - child: Column(children: [ - BlocBuilder( - builder: (context, state) { - return Align( - alignment: Alignment.topLeft, - child: FormField( - autovalidateMode: AutovalidateMode.onUserInteraction, - validator: (value1) { - if (item.required == true && - (controller[index].text == null || - controller[index].text == '')) { - return localizations.translate( - i18.common.coreCommonReasonRequired, + child: LabeledField( + label: localizations.translate( + '${selectedServiceDefinition?.code}.${item.code}', + ), + isRequired: item.required ?? false, + child: Column(children: [ + BlocBuilder( + builder: (context, state) { + return Align( + alignment: Alignment.topLeft, + child: FormField( + autovalidateMode: AutovalidateMode.onUserInteraction, + validator: (value1) { + if (item.required == true && + (controller[index].text == null || + controller[index].text == '')) { + return localizations.translate( + i18.common.coreCommonReasonRequired, + ); + } + + return null; + }, + builder: (field) => RadioList( + radioDigitButtons: item.values != null + ? item.values! + .where((e) => + e != i18.surveyForm.notSelectedKey) + .toList() + .map((item) => RadioButtonModel( + code: item, + name: localizations.translate( + 'CORE_COMMON_${item.trim().toUpperCase()}', + ), + )) + .toList() + : [], + errorMessage: field.errorText, + groupValue: controller[index].text.trim(), + onChanged: (value) { + field.didChange(value); + context.read().add( + ServiceSurveyFormEvent( + value: Random().nextInt(100).toString(), + submitTriggered: submitTriggered, + ), ); + setState(() { + // Clear child controllers and update visibility + for (final matchingChildItem in childItems) { + final childIndex = initialAttributes + ?.indexOf(matchingChildItem); + if (childIndex != null) { + // controller[childIndex].clear(); + visibleSurveyFormIndexes + .removeWhere((v) => v == childIndex); + } } - return null; - }, - builder: (field) => RadioList( - radioDigitButtons: item.values != null - ? item.values! - .where((e) => - e != i18.surveyForm.notSelectedKey) - .toList() - .map((item) => RadioButtonModel( - code: item, - name: localizations.translate( - 'CORE_COMMON_${item.trim().toUpperCase()}', - ), - )) - .toList() - : [], - errorMessage: field.errorText, - groupValue: controller[index].text.trim(), - onChanged: (value) { - field.didChange(value); - context.read().add( - ServiceSurveyFormEvent( - value: Random().nextInt(100).toString(), - submitTriggered: submitTriggered, - ), - ); - setState(() { - // Clear child controllers and update visibility - for (final matchingChildItem in childItems) { - final childIndex = initialAttributes - ?.indexOf(matchingChildItem); - if (childIndex != null) { - // controller[childIndex].clear(); - visibleSurveyFormIndexes - .removeWhere((v) => v == childIndex); - } - } - - // Update the current controller's value - controller[index].value = - TextEditingController.fromValue( - TextEditingValue( - text: value!.code, - ), - ).value; + // Update the current controller's value + controller[index].value = + TextEditingController.fromValue( + TextEditingValue( + text: value!.code, + ), + ).value; - if (excludedIndexes.isNotEmpty) { - for (int i = 0; - i < excludedIndexes.length; - i++) { - // Clear excluded child controllers - if (item.dataType != 'SingleValueList') { - // controller[excludedIndexes[i]].value = - // TextEditingController.fromValue( - // const TextEditingValue( - // text: '', - // ), - // ).value; - } - } + if (excludedIndexes.isNotEmpty) { + for (int i = 0; + i < excludedIndexes.length; + i++) { + // Clear excluded child controllers + if (item.dataType != 'SingleValueList') { + // controller[excludedIndexes[i]].value = + // TextEditingController.fromValue( + // const TextEditingValue( + // text: '', + // ), + // ).value; } + } + } - // Remove corresponding controllers based on the removed attributes - }); - }, + // Remove corresponding controllers based on the removed attributes + }); + }, + ), + ), + ); + }, + ), + BlocBuilder( + builder: (context, state) { + return (controller[index].text == + item.values?[1].trim() && + !(isHealthFacilityWorker && + widget.referralClientRefId != null)) + ? Padding( + padding: const EdgeInsets.only( + left: spacer1, + right: spacer1, + bottom: spacer4, ), - ), - ); - }, - ), - BlocBuilder( - builder: (context, state) { - return (controller[index].text == - item.values?[1].trim() && - !(isHealthFacilityWorker && - widget.referralClientRefId != null)) - ? Padding( - padding: const EdgeInsets.only( - left: spacer1, - right: spacer1, - bottom: spacer4, - ), - child: FormField( - autovalidateMode: - AutovalidateMode.onUserInteraction, - validator: (value1) { - if (item.required == true && - (additionalController[index].text == - null || - additionalController[index].text == - '')) { - return localizations.translate( - i18.common.coreCommonReasonRequired, - ); - } + child: FormField( + autovalidateMode: + AutovalidateMode.onUserInteraction, + validator: (value1) { + if (item.required == true && + (additionalController[index].text == + null || + additionalController[index].text == + '')) { + return localizations.translate( + i18.common.coreCommonReasonRequired, + ); + } - return null; - }, - builder: (field) { - return LabeledField( - label: localizations.translate( - '${selectedServiceDefinition?.code}.${item.code}.ADDITIONAL_FIELD', - ), - isRequired: item.required ?? false, - child: DigitTextFormInput( - onChange: (value) { - field.didChange(value); - additionalController[index].text = - value; - }, - errorMessage: field.errorText, - maxLength: 1000, - charCount: true, - controller: additionalController[index], - )); - }, - ), - ) - : const SizedBox(); - }, - ), - if (childItems.isNotEmpty && - controller[index].text.trim().isNotEmpty) ...[ - _buildNestedSurveyForm( - item.code.toString(), - index, - controller[index].text.trim(), - context, - ), - ], - ]))), + return null; + }, + builder: (field) { + return LabeledField( + label: localizations.translate( + '${selectedServiceDefinition?.code}.${item.code}.ADDITIONAL_FIELD', + ), + isRequired: item.required ?? false, + child: DigitTextFormInput( + onChange: (value) { + field.didChange(value); + additionalController[index].text = + value; + }, + errorMessage: field.errorText, + maxLength: 1000, + charCount: true, + controller: additionalController[index], + )); + }, + ), + ) + : const SizedBox(); + }, + ), + if (childItems.isNotEmpty && + controller[index].text.trim().isNotEmpty) ...[ + _buildNestedSurveyForm( + item.code.toString(), + index, + controller[index].text.trim(), + context, + ), + ], + ])), ); } else if (item.dataType == 'String') { return FormField( diff --git a/packages/survey_form/lib/widgets/back_navigation_help_header.dart b/packages/survey_form/lib/widgets/back_navigation_help_header.dart index bec30e349..6e0a74f12 100644 --- a/packages/survey_form/lib/widgets/back_navigation_help_header.dart +++ b/packages/survey_form/lib/widgets/back_navigation_help_header.dart @@ -1,5 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/ComponentTheme/back_button_theme.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/digit_back_button.dart'; import 'package:flutter/material.dart'; @@ -41,6 +43,15 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { child: DigitBackButton( label: SurveyFormLocalization.of(context) .translate(i18.common.coreCommonBack), + digitBackButtonThemeData: + const DigitBackButtonThemeData().copyWith( + context: context, + backDigitButtonIcon: Icon( + Icons.arrow_left, + size: Theme.of(context).spacerTheme.spacer5, + color: Theme.of(context).colorTheme.primary.primary2, + ), + ), handleBack: () { context.router.maybePop(); handleBack != null ? handleBack!() : null; From 9e9fdb2e4f28a664f390defbeb27f14535fd2833 Mon Sep 17 00:00:00 2001 From: rachana-egov Date: Thu, 12 Dec 2024 11:56:05 +0530 Subject: [PATCH 190/241] Complaint new component integration --- .../pages/inbox/complaints_details_view.dart | 118 +++++----- .../lib/pages/inbox/complaints_inbox.dart | 204 +++++++++-------- .../pages/inbox/complaints_inbox_filter.dart | 116 +++++----- .../pages/inbox/complaints_inbox_search.dart | 1 - .../pages/registration/complaint_type.dart | 34 ++- .../registration/complaints_details.dart | 205 +++++++++--------- .../registration/complaints_location.dart | 16 +- .../header/back_navigation_help_header.dart | 30 ++- .../lib/pages/manage_stocks.dart | 142 ++++++------ .../pages/record_stock/warehouse_details.dart | 195 ++++++++--------- .../widgets/back_navigation_help_header.dart | 34 +-- 11 files changed, 557 insertions(+), 538 deletions(-) diff --git a/packages/complaints/lib/pages/inbox/complaints_details_view.dart b/packages/complaints/lib/pages/inbox/complaints_details_view.dart index ea5029e42..da65714e5 100644 --- a/packages/complaints/lib/pages/inbox/complaints_details_view.dart +++ b/packages/complaints/lib/pages/inbox/complaints_details_view.dart @@ -38,7 +38,7 @@ class ComplaintsDetailsViewPage extends StatelessWidget { Align( alignment: Alignment.centerLeft, child: Padding( - padding: const EdgeInsets.only(left: spacer2, top: spacer5), + padding: const EdgeInsets.only(left: spacer2, top: spacer2, bottom: spacer2), child: Text( localizations .translate(i18.complaints.complaintsDetailsLabel), @@ -50,8 +50,7 @@ class ComplaintsDetailsViewPage extends StatelessWidget { ), footer: DigitCard( cardType: CardType.primary, - margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), - padding: const EdgeInsets.all(spacer2), + margin: const EdgeInsets.only(top: spacer2), children: [ DigitButton( onPressed: () { @@ -64,64 +63,69 @@ class ComplaintsDetailsViewPage extends StatelessWidget { ), ]), children: [ - Padding( - padding: const EdgeInsets.only(top: spacer4), - child: DigitCard( - cardType: CardType.primary, - children: [ - LabelValueSummary( - padding: const EdgeInsets.only(top: spacer4, bottom: spacer4), - // labelFlex: 6, - items: [ - LabelValueItem( - label: localizations.translate(i18.complaints.inboxNumberLabel), - value: complaint.serviceRequestId ?? - "${localizations.translate(i18.complaints.inboxNotGeneratedLabel)}\n${localizations.translate(i18.complaints.inboxSyncRequiredLabel)}", - valueTextStyle: complaint.serviceRequestId !=null ? textTheme.bodyS.copyWith(color: theme.colorTheme.primary.primary1) : null , - ), - LabelValueItem( - label: localizations.translate(i18.complaints.inboxTypeLabel), - value: localizations.translate( - complaint.serviceCode.snakeCase.toUpperCase().trim(), - ) - ), - LabelValueItem( - label: localizations.translate(i18.complaints.inboxDateLabel), - value: complaint.auditDetails?.createdTime.toDateTime - .getFormattedDate() ?? - "", - ), - LabelValueItem( - label: localizations.translate(i18.complaints.complainantName), - value: complaint.user.name ?? "", - ), - LabelValueItem( - label: localizations.translate(i18.complaints.inboxAreaLabel), - value: complaint.address.locality?.name ?? "", - ), - LabelValueItem( - label: localizations.translate( - i18.complaints.complainantContactNumber, - ), - value: complaint.user.mobileNumber ?? "", - ), - LabelValueItem( - label: localizations.translate(i18.complaints.inboxStatusLabel), + DigitCard( + margin: const EdgeInsets.all(spacer2), + cardType: CardType.primary, + children: [ + LabelValueSummary( + padding: EdgeInsets.zero, + items: [ + LabelValueItem( + label: localizations.translate(i18.complaints.inboxNumberLabel), + value: complaint.serviceRequestId ?? + "${localizations.translate(i18.complaints.inboxNotGeneratedLabel)}\n${localizations.translate(i18.complaints.inboxSyncRequiredLabel)}", + valueTextStyle: complaint.serviceRequestId !=null ? textTheme.bodyS.copyWith(color: theme.colorTheme.primary.primary1) : null , + labelFlex: 5, + ), + LabelValueItem( + label: localizations.translate(i18.complaints.inboxTypeLabel), value: localizations.translate( - "COMPLAINTS_STATUS_${complaint.applicationStatus.name.snakeCase.toUpperCase()}", + complaint.serviceCode.snakeCase.toUpperCase().trim(), ), + labelFlex: 5, + ), + LabelValueItem( + label: localizations.translate(i18.complaints.inboxDateLabel), + value: complaint.auditDetails?.createdTime.toDateTime + .getFormattedDate() ?? + "", + labelFlex: 5, + ), + LabelValueItem( + label: localizations.translate(i18.complaints.complainantName), + value: complaint.user.name ?? "", + labelFlex: 5, + ), + LabelValueItem( + label: localizations.translate(i18.complaints.inboxAreaLabel), + value: complaint.address.locality?.name ?? "", + labelFlex: 5, + ), + LabelValueItem( + label: localizations.translate( + i18.complaints.complainantContactNumber, ), - LabelValueItem( - label: localizations - .translate(i18.complaints.complaintDescription), - value: localizations.translate( - complaint.description, - ), + value: complaint.user.mobileNumber ?? "", + labelFlex: 5, + ), + LabelValueItem( + label: localizations.translate(i18.complaints.inboxStatusLabel), + value: localizations.translate( + "COMPLAINTS_STATUS_${complaint.applicationStatus.name.snakeCase.toUpperCase()}", ), - ] - ) - ]), - ), + labelFlex: 5, + ), + LabelValueItem( + label: localizations + .translate(i18.complaints.complaintDescription), + value: localizations.translate( + complaint.description, + ), + labelFlex: 5, + ), + ] + ) + ]), ], ), ); diff --git a/packages/complaints/lib/pages/inbox/complaints_inbox.dart b/packages/complaints/lib/pages/inbox/complaints_inbox.dart index 00a2d544c..3f1df3037 100644 --- a/packages/complaints/lib/pages/inbox/complaints_inbox.dart +++ b/packages/complaints/lib/pages/inbox/complaints_inbox.dart @@ -69,53 +69,56 @@ class ComplaintsInboxPageState extends LocalizedState { ), ...[ SliverToBoxAdapter( - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Padding( - padding: const EdgeInsets.only(left: spacer2 * 2), - child: DigitButton( - type: DigitButtonType.tertiary, - size: DigitButtonSize.medium, - prefixIcon: Icons.search, - label: localizations.translate( - i18.complaints.searchCTA, + child: Padding( + padding: const EdgeInsets.only(bottom: spacer2), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Padding( + padding: const EdgeInsets.only(left: spacer2 * 2), + child: DigitButton( + type: DigitButtonType.tertiary, + size: DigitButtonSize.medium, + prefixIcon: Icons.search, + label: localizations.translate( + i18.complaints.searchCTA, + ), + onPressed: () { + router.push(ComplaintsInboxSearchRoute()); + }, ), - onPressed: () { - router.push(ComplaintsInboxSearchRoute()); - }, ), - ), - Padding( - padding: EdgeInsets.zero, - child: DigitButton( - type: DigitButtonType.tertiary, - size: DigitButtonSize.medium, - label: localizations.translate( - i18.complaints.filterCTA, + Padding( + padding: EdgeInsets.zero, + child: DigitButton( + type: DigitButtonType.tertiary, + size: DigitButtonSize.medium, + label: localizations.translate( + i18.complaints.filterCTA, + ), + prefixIcon: Icons.filter_list_alt, + onPressed: () { + router.push(ComplaintsInboxFilterRoute()); + }, ), - prefixIcon: Icons.filter_list_alt, - onPressed: () { - router.push(ComplaintsInboxFilterRoute()); - }, ), - ), - Padding( - padding: - const EdgeInsets.only(right: spacer2 * 2), - child: DigitButton( - type: DigitButtonType.tertiary, - size: DigitButtonSize.medium, - label: localizations.translate( - i18.complaints.sortCTA, + Padding( + padding: + const EdgeInsets.only(right: spacer2 * 2), + child: DigitButton( + type: DigitButtonType.tertiary, + size: DigitButtonSize.medium, + label: localizations.translate( + i18.complaints.sortCTA, + ), + prefixIcon: Icons.segment, + onPressed: () { + router.push(ComplaintsInboxSortRoute()); + }, ), - prefixIcon: Icons.segment, - onPressed: () { - router.push(ComplaintsInboxSortRoute()); - }, ), - ), - ], + ], + ), ), ), SliverList( @@ -153,7 +156,6 @@ class ComplaintsInboxPageState extends LocalizedState { DigitCard( cardType: CardType.primary, margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), - padding: const EdgeInsets.all(spacer2), children: [ DigitButton( label: localizations.translate( @@ -209,68 +211,64 @@ class _ComplaintsInboxItem extends StatelessWidget { final theme = Theme.of(context); final textTheme = theme.digitTextTheme(context); - return Padding( - padding: const EdgeInsets.only(top: spacer3), - child: DigitCard(cardType: CardType.primary, children: [ - Padding( - padding: const EdgeInsets.only(top: spacer2, bottom: spacer2), - child: LabelValueSummary( - padding: const EdgeInsets.only(top: spacer2, bottom: spacer2), - // labelFlex: 5, - items: [ - LabelValueItem( - label: localizations - .translate(i18.complaints.inboxNumberLabel), - value: item.serviceRequestId ?? - "${localizations.translate(i18.complaints.inboxNotGeneratedLabel)}\n${localizations.translate(i18.complaints.inboxSyncRequiredLabel)}", - valueTextStyle: item.serviceRequestId !=null ? textTheme.bodyS.copyWith(color: theme.colorTheme.primary.primary1) : null , - ), - LabelValueItem( - label: localizations.translate(i18.complaints.inboxTypeLabel), - value: localizations.translate( - item.serviceCode.snakeCase.toUpperCase().trim(), - ), - ), - LabelValueItem( - label: - localizations.translate(i18.complaints.inboxDateLabel), - value: item.auditDetails?.createdTime.toDateTime - .getFormattedDate() ?? - ""), - LabelValueItem( - label: - localizations.translate(i18.complaints.inboxAreaLabel), - value: item.address.locality?.name ?? ""), - LabelValueItem( - label: localizations - .translate(i18.complaints.inboxStatusLabel), - value: localizations.translate( - "COMPLAINTS_STATUS_${item.applicationStatus.name.snakeCase.toUpperCase()}", - )), - ], - )), - Padding( - padding: const EdgeInsets.only(top: spacer2 * 2), - child: Row( - children: [ - Expanded( - flex: 1, - child: DigitButton( - label: - localizations.translate(i18.searchBeneficiary.iconLabel), - type: DigitButtonType.secondary, - size: DigitButtonSize.large, - onPressed: () { - context.router.push(ComplaintsDetailsViewRoute( - complaint: item, - )); - }, - ), + return DigitCard( + margin: const EdgeInsets.all(spacer2), + cardType: CardType.primary, children: [ + LabelValueSummary( + padding: EdgeInsets.zero, + items: [ + LabelValueItem( + label: localizations + .translate(i18.complaints.inboxNumberLabel), + value: item.serviceRequestId ?? + "${localizations.translate(i18.complaints.inboxNotGeneratedLabel)}\n${localizations.translate(i18.complaints.inboxSyncRequiredLabel)}", + valueTextStyle: item.serviceRequestId !=null ? textTheme.bodyS.copyWith(color: theme.colorTheme.primary.primary1) : null , + labelFlex: 5, + ), + LabelValueItem( + label: localizations.translate(i18.complaints.inboxTypeLabel), + value: localizations.translate( + item.serviceCode.snakeCase.toUpperCase().trim(), + ), + labelFlex: 5, + ), + LabelValueItem( + label: + localizations.translate(i18.complaints.inboxDateLabel), + value: item.auditDetails?.createdTime.toDateTime + .getFormattedDate() ?? + "", + labelFlex: 5, + ), + + LabelValueItem( + label: + localizations.translate(i18.complaints.inboxAreaLabel), + value: item.address.locality?.name ?? "", + labelFlex: 5, + ), + LabelValueItem( + label: localizations + .translate(i18.complaints.inboxStatusLabel), + value: localizations.translate( + "COMPLAINTS_STATUS_${item.applicationStatus.name.snakeCase.toUpperCase()}", ), - ], + labelFlex: 5, ), - ), - ]), - ); + ], + ), + DigitButton( + label: + localizations.translate(i18.searchBeneficiary.iconLabel), + type: DigitButtonType.secondary, + size: DigitButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () { + context.router.push(ComplaintsDetailsViewRoute( + complaint: item, + )); + }, + ), + ]); } } diff --git a/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart b/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart index abb84c0fa..1f643f9bc 100644 --- a/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart +++ b/packages/complaints/lib/pages/inbox/complaints_inbox_filter.dart @@ -125,7 +125,6 @@ class ComplaintsInboxFilterPageState footer: DigitCard( cardType: CardType.primary, margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), - padding: const EdgeInsets.all(spacer2), children: [ Row( mainAxisAlignment: MainAxisAlignment.center, @@ -245,6 +244,7 @@ class ComplaintsInboxFilterPageState return Align( alignment: Alignment.topLeft, child: RadioList( + containerPadding: const EdgeInsets.only(bottom: spacer4), radioDigitButtons: _complaintAssignmentTypes .asMap() .entries @@ -271,38 +271,35 @@ class ComplaintsInboxFilterPageState ); }, ), - Padding( - padding: const EdgeInsets.only(top: spacer2), - child: LabeledField( - label: localizations.translate( - i18.complaints.complaintsTypeHeading, - ), - child: DigitDropdown( - items: complaintTypes - .toList() - .asMap() - .entries - .map((item) => DropdownItem( - name: localizations.translate( - item.value - .toString() - .trim() - .snakeCase - .toUpperCase()), - code: item.value, - )) - .toList(), - emptyItemText: localizations - .translate(i18.common.noMatchFound), - isSearchable: true, - onSelect: (value) => formGroup - .control(_complaintType) - .value = value.code, - ), + LabeledField( + label: localizations.translate( + i18.complaints.complaintsTypeHeading, + ), + child: DigitDropdown( + items: complaintTypes + .toList() + .asMap() + .entries + .map((item) => DropdownItem( + name: localizations.translate( + item.value + .toString() + .trim() + .snakeCase + .toUpperCase()), + code: item.value, + )) + .toList(), + emptyItemText: localizations + .translate(i18.common.noMatchFound), + isSearchable: true, + onSelect: (value) => formGroup + .control(_complaintType) + .value = value.code, ), ), Padding( - padding: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.only(top: spacer4), child: LabeledField( label: localizations .translate(i18.complaints.locality), @@ -328,36 +325,39 @@ class ComplaintsInboxFilterPageState ), ), if (uniqueStatuses.isNotEmpty) ...[ - LabeledField( - label: localizations.translate( - i18.complaints.inboxStatusLabel, - ), - child: Column( - children: [ - ...uniqueStatuses.map((e) => Padding( - padding: const EdgeInsets.only( - top: spacer4, - ), - child: DigitCheckbox( - label: - '${localizations.translate('COMPLAINTS_STATUS_${e.name.snakeCase.toUpperCase()}')} (${statusCount[e.index]})', - value: selected[e] ?? false, - onChanged: (value) { - setState(() { - if (selected[e]!) { - statuses.remove(e); - selected[e] = false; + Padding( + padding: const EdgeInsets.only(top: spacer4), + child: LabeledField( + label: localizations.translate( + i18.complaints.inboxStatusLabel, + ), + child: Column( + children: [ + ...uniqueStatuses.map((e) => Padding( + padding: const EdgeInsets.only( + top: spacer2, + ), + child: DigitCheckbox( + label: + '${localizations.translate('COMPLAINTS_STATUS_${e.name.snakeCase.toUpperCase()}')} (${statusCount[e.index]})', + value: selected[e] ?? false, + onChanged: (value) { + setState(() { + if (selected[e]!) { + statuses.remove(e); + selected[e] = false; - return; - } + return; + } - selected[e] = true; - statuses.add(e); - }); - }, - ), - )), - ], + selected[e] = true; + statuses.add(e); + }); + }, + ), + )), + ], + ), ), ), ], diff --git a/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart b/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart index 79003ffd6..50af6eb82 100644 --- a/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart +++ b/packages/complaints/lib/pages/inbox/complaints_inbox_search.dart @@ -81,7 +81,6 @@ class ComplaintsInboxSearchPageState footer: DigitCard( cardType: CardType.primary, margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), - padding: const EdgeInsets.all(spacer2), children: [ DigitButton( mainAxisSize: MainAxisSize.max, diff --git a/packages/complaints/lib/pages/registration/complaint_type.dart b/packages/complaints/lib/pages/registration/complaint_type.dart index 924d27bda..32e7de2d4 100644 --- a/packages/complaints/lib/pages/registration/complaint_type.dart +++ b/packages/complaints/lib/pages/registration/complaint_type.dart @@ -60,7 +60,6 @@ class ComplaintTypePageState extends LocalizedState { footer: DigitCard( cardType: CardType.primary, margin: const EdgeInsets.only(top: spacer2), - padding: const EdgeInsets.all(spacer2), children: [ DigitButton( mainAxisSize: MainAxisSize.max, @@ -115,21 +114,21 @@ class ComplaintTypePageState extends LocalizedState { ]), slivers: [ SliverToBoxAdapter( - child: DigitCard(cardType: CardType.primary, children: [ - Padding( - padding: const EdgeInsets.only(bottom: spacer2), - child: Text( - localizations.translate( - i18.complaints.complaintsTypeHeading, - ), - style: textTheme.headingXl, + child: DigitCard( + margin: const EdgeInsets.all(spacer2), + cardType: CardType.primary, children: [ + Text( + localizations.translate( + i18.complaints.complaintsTypeHeading, ), + style: textTheme.headingXl, ), LabeledField( label: localizations.translate( i18.complaints.complaintsTypeLabel, ), child: RadioList( + containerPadding: const EdgeInsets.only(bottom: spacer4), radioDigitButtons: (ComplaintsSingleton().complaintTypes?.isNotEmpty ?? false) ? ComplaintsSingleton().complaintTypes! .map( @@ -174,23 +173,16 @@ class ComplaintTypePageState extends LocalizedState { form.control(_complaintType).invalid) ...[ Align( alignment: Alignment.topLeft, - child: Padding( - padding: const EdgeInsets.only( - top: spacer1, - bottom: spacer1, + child: Text( + localizations.translate( + i18.complaints.validationRadioRequiredError, ), - child: Text( - localizations.translate( - i18.complaints.validationRadioRequiredError, - ), - style: TextStyle( - color: theme.colorTheme.alert.error, - ), + style: TextStyle( + color: theme.colorTheme.alert.error, ), ), ), ], - const SizedBox(height: spacer4), ]), ), ], diff --git a/packages/complaints/lib/pages/registration/complaints_details.dart b/packages/complaints/lib/pages/registration/complaints_details.dart index 3c5739d66..5ec000717 100644 --- a/packages/complaints/lib/pages/registration/complaints_details.dart +++ b/packages/complaints/lib/pages/registration/complaints_details.dart @@ -65,7 +65,7 @@ class ComplaintsDetailsPageState extends LocalizedState { ), builder: (_, form, __) => BlocListener( listener: (context, state) { - context.navigateTo(ComplaintsInboxWrapperRoute()); + context.navigateTo(const ComplaintsInboxWrapperRoute()); }, child: BlocConsumer( @@ -90,7 +90,6 @@ class ComplaintsDetailsPageState extends LocalizedState { footer: DigitCard( cardType: CardType.primary, margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), - padding: const EdgeInsets.all(spacer2), children: [ DigitButton( label: form.control(_complaintDetailsForm).disabled @@ -223,7 +222,9 @@ class ComplaintsDetailsPageState extends LocalizedState { ), ]), children: [ - DigitCard(cardType: CardType.primary, children: [ + DigitCard( + margin: const EdgeInsets.all(spacer2), + cardType: CardType.primary, children: [ Text( localizations.translate( i18.complaints.complaintsDetailsLabel, @@ -267,37 +268,41 @@ class ComplaintsDetailsPageState extends LocalizedState { children: [ Align( alignment: AlignmentDirectional.topStart, - child: RadioList( - radioDigitButtons: complainantRaisedFor - .map((item) => RadioButtonModel( - code: item, - name: - localizations.translate(item.trim()), - )) - .toList(), - groupValue: - form.control(_complaintRaisedFor).value ?? "", - onChanged: (changedValue) { - if (form.control(_complaintRaisedFor).disabled) - return; + child: Padding( + padding: const EdgeInsets.only(top: spacer2), + child: RadioList( + containerPadding: const EdgeInsets.only(bottom: spacer3), + radioDigitButtons: complainantRaisedFor + .map((item) => RadioButtonModel( + code: item, + name: + localizations.translate(item.trim()), + )) + .toList(), + groupValue: + form.control(_complaintRaisedFor).value ?? "", + onChanged: (changedValue) { + if (form.control(_complaintRaisedFor).disabled) + return; - if (changedValue.code == - i18.complaints.raisedForAnotherUser) { - form.control(_complainantName).value = ""; - form.control(_complainantContactNumber).value = - ""; - } else { - form.control(_complainantName).value = - ComplaintsSingleton().userName; - form.control(_complainantContactNumber).value = - ComplaintsSingleton().userMobileNumber; - } + if (changedValue.code == + i18.complaints.raisedForAnotherUser) { + form.control(_complainantName).value = ""; + form.control(_complainantContactNumber).value = + ""; + } else { + form.control(_complainantName).value = + ComplaintsSingleton().userName; + form.control(_complainantContactNumber).value = + ComplaintsSingleton().userMobileNumber; + } - setState(() { - form.control(_complaintRaisedFor).value = - changedValue.code; - }); - }, + setState(() { + form.control(_complaintRaisedFor).value = + changedValue.code; + }); + }, + ), ), ), if (form.touched && @@ -322,78 +327,74 @@ class ComplaintsDetailsPageState extends LocalizedState { ], ), ), - Column( - children: [ - ReactiveWrapperField( - formControlName: _complainantName, - validationMessages: { - 'required': (object) => localizations.translate( - i18.complaints.validationRequiredError), - 'maxLength': (object) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', '64'), - }, - builder: (field) { - return LabeledField( - label: localizations.translate( - i18.complaints.complainantName, - ), - isRequired: true, - child: DigitTextFormInput( - readOnly:(isRaisedForSelf)? - (field.value == null || field.value.isEmpty) - ? false - : true:false, - initialValue: field.value, - isRequired: true, - errorMessage: field.errorText, - onChange: (value) => form - .control(_complainantName) - .value = value, - ), - ); - }), - ReactiveWrapperField( - formControlName: _complainantContactNumber, - validationMessages: { - 'mobileNumber': (object) => - localizations.translate(i18.individualDetails - .mobileNumberInvalidFormatValidationMessage), - 'required': (object) => localizations.translate( - i18.complaints.validationRequiredError), - 'minLength': (object) => localizations.translate( - i18.complaints.validationMinLengthError), - 'maxLength': (object) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', '10'), - }, - builder: (field) { - return LabeledField( - label: localizations.translate( - i18.complaints.complainantContactNumber, - ), - isRequired: true, - child: DigitTextFormInput( - readOnly: (isRaisedForSelf)?(field.value == - null || - field.value.isEmpty) + ReactiveWrapperField( + formControlName: _complainantName, + validationMessages: { + 'required': (object) => localizations.translate( + i18.complaints.validationRequiredError), + 'maxLength': (object) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', '64'), + }, + builder: (field) { + return LabeledField( + label: localizations.translate( + i18.complaints.complainantName, + ), + isRequired: true, + child: DigitTextFormInput( + readOnly:(isRaisedForSelf)? + (field.value == null || field.value.isEmpty) ? false : true:false, - initialValue: field.value, - isRequired: true, - keyboardType: TextInputType.number, - inputFormatters: [ - FilteringTextInputFormatter.digitsOnly, - ], - errorMessage: field.errorText, - onChange: (value) => form - .control(_complainantContactNumber) - .value = value, - ), - ); - }), - ], - ), + initialValue: field.value, + isRequired: true, + errorMessage: field.errorText, + onChange: (value) => form + .control(_complainantName) + .value = value, + ), + ); + }), + ReactiveWrapperField( + formControlName: _complainantContactNumber, + validationMessages: { + 'mobileNumber': (object) => + localizations.translate(i18.individualDetails + .mobileNumberInvalidFormatValidationMessage), + 'required': (object) => localizations.translate( + i18.complaints.validationRequiredError), + 'minLength': (object) => localizations.translate( + i18.complaints.validationMinLengthError), + 'maxLength': (object) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', '10'), + }, + builder: (field) { + return LabeledField( + label: localizations.translate( + i18.complaints.complainantContactNumber, + ), + isRequired: true, + child: DigitTextFormInput( + readOnly: (isRaisedForSelf)?(field.value == + null || + field.value.isEmpty) + ? false + : true:false, + initialValue: field.value, + isRequired: true, + keyboardType: TextInputType.number, + inputFormatters: [ + FilteringTextInputFormatter.digitsOnly, + ], + errorMessage: field.errorText, + onChange: (value) => form + .control(_complainantContactNumber) + .value = value, + ), + ); + }), ReactiveWrapperField( formControlName: _supervisorName, validationMessages: { diff --git a/packages/complaints/lib/pages/registration/complaints_location.dart b/packages/complaints/lib/pages/registration/complaints_location.dart index 0d80236d9..a7f5df7f4 100644 --- a/packages/complaints/lib/pages/registration/complaints_location.dart +++ b/packages/complaints/lib/pages/registration/complaints_location.dart @@ -87,7 +87,6 @@ class ComplaintsLocationPageState footer: DigitCard( cardType: CardType.primary, margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), - padding: const EdgeInsets.all(spacer2), children: [ DigitButton( label: @@ -138,15 +137,14 @@ class ComplaintsLocationPageState ), ]), children: [ - DigitCard(cardType: CardType.primary, children: [ - Padding( - padding: const EdgeInsets.only(bottom: spacer2), - child: Text( - localizations.translate( - i18.complaints.complaintsLocationLabel, - ), - style: textTheme.headingXl, + DigitCard( + margin: const EdgeInsets.all(spacer2), + cardType: CardType.primary, children: [ + Text( + localizations.translate( + i18.complaints.complaintsLocationLabel, ), + style: textTheme.headingXl, ), ReactiveWrapperField( formControlName: _addressLine1Key, diff --git a/packages/complaints/lib/widgets/header/back_navigation_help_header.dart b/packages/complaints/lib/widgets/header/back_navigation_help_header.dart index d9a9676e3..65f84d33d 100644 --- a/packages/complaints/lib/widgets/header/back_navigation_help_header.dart +++ b/packages/complaints/lib/widgets/header/back_navigation_help_header.dart @@ -1,5 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/ComponentTheme/back_button_theme.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/digit_back_button.dart'; import 'package:flutter/material.dart'; @@ -27,25 +29,31 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { final theme = Theme.of(context); return Padding( - padding: const EdgeInsets.all(spacer2 / 2), + padding: const EdgeInsets.all(spacer2), child: Row( children: [ Expanded( child: Row( children: [ if (showBackNavigation) - Align( - alignment: Alignment.topLeft, - child: Padding( - padding: const EdgeInsets.all(spacer2), - child: DigitBackButton( - handleBack: () { - context.router.maybePop(); - handleBack != null ? handleBack!() : null; - }, + + DigitBackButton(label: ComplaintsLocalization.of(context).translate( + i18.common.coreCommonBack, + ), + digitBackButtonThemeData: + const DigitBackButtonThemeData().copyWith( + context: context, + backDigitButtonIcon: Icon( + Icons.arrow_left, + size:Theme.of(context).spacerTheme.spacer5, + color: Theme.of(context).colorTheme.primary.primary2, ), ), - ), + handleBack: () { + context.router.maybePop(); + handleBack != null ? handleBack!() : null; + }, + ) ], ), ), diff --git a/packages/inventory_management/lib/pages/manage_stocks.dart b/packages/inventory_management/lib/pages/manage_stocks.dart index da1cf9b00..a3a5bab87 100644 --- a/packages/inventory_management/lib/pages/manage_stocks.dart +++ b/packages/inventory_management/lib/pages/manage_stocks.dart @@ -40,8 +40,7 @@ class ManageStocksPageState extends LocalizedState { mainAxisSize: MainAxisSize.min, children: [ Padding( - padding: const EdgeInsets.fromLTRB( - spacer4, spacer2, spacer4, spacer2), + padding: const EdgeInsets.only(left: spacer2, right: spacer2, bottom: spacer4), child: Align( alignment: Alignment.topLeft, child: Text( @@ -52,69 +51,88 @@ class ManageStocksPageState extends LocalizedState { ), ), Column(children: [ - MenuCard( - heading: localizations - .translate(i18.manageStock.recordStockReceiptLabel), - description: localizations - .translate(i18.manageStock.recordStockReceiptDescription), - icon: Icons.file_download_outlined, - onTap: () { - context.router.push( - RecordStockWrapperRoute( - type: StockRecordEntryType.receipt, + Padding( + padding: const EdgeInsets.only(left: spacer2, right: spacer2), + child: MenuCard( + heading: localizations + .translate(i18.manageStock.recordStockReceiptLabel), + description: localizations + .translate(i18.manageStock.recordStockReceiptDescription), + icon: Icons.file_download_outlined, + onTap: () { + context.router.push( + RecordStockWrapperRoute( + type: StockRecordEntryType.receipt, + ), + ); + }, + ), + ), + const SizedBox(height: spacer4,), + Padding( + padding: const EdgeInsets.only(left: spacer2, right: spacer2), + child: MenuCard( + heading: localizations + .translate(i18.manageStock.recordStockIssuedLabel), + description: localizations.translate( + i18.manageStock.recordStockIssuedDescription), + icon: Icons.file_upload_outlined, + onTap: () => context.router.push( + RecordStockWrapperRoute( + type: StockRecordEntryType.dispatch, + ), + )), + ), + const SizedBox(height: spacer4,), + Padding( + padding: const EdgeInsets.only(left: spacer2, right: spacer2), + child: MenuCard( + heading: localizations + .translate(i18.manageStock.recordStockReturnedLabel), + description: localizations.translate( + i18.manageStock.recordStockReturnedDescription, ), - ); - }, + icon: Icons.settings_backup_restore, + onTap: () => context.router.push( + RecordStockWrapperRoute( + type: StockRecordEntryType.returned, + ), + )), + ), + const SizedBox(height: spacer4,), + Padding( + padding: const EdgeInsets.only(left: spacer2, right: spacer2), + child: MenuCard( + heading: localizations + .translate(i18.manageStock.recordStockDamagedLabel), + description: localizations.translate( + i18.manageStock.recordStockDamagedDescription, + ), + icon: Icons.store, + onTap: () => context.router.push( + RecordStockWrapperRoute( + type: StockRecordEntryType.damaged, + ), + )), + ), + const SizedBox(height: spacer4,), + Padding( + padding: const EdgeInsets.only(left: spacer2, right: spacer2), + child: MenuCard( + heading: localizations + .translate(i18.manageStock.recordStockLossLabel), + description: localizations.translate( + i18.manageStock.recordStockDamagedDescription, + ), + icon: Icons.store, + onTap: () => context.router.push( + RecordStockWrapperRoute( + type: StockRecordEntryType.loss, + ), + )), ), - MenuCard( - heading: localizations - .translate(i18.manageStock.recordStockIssuedLabel), - description: localizations.translate( - i18.manageStock.recordStockIssuedDescription), - icon: Icons.file_upload_outlined, - onTap: () => context.router.push( - RecordStockWrapperRoute( - type: StockRecordEntryType.dispatch, - ), - )), - MenuCard( - heading: localizations - .translate(i18.manageStock.recordStockReturnedLabel), - description: localizations.translate( - i18.manageStock.recordStockReturnedDescription, - ), - icon: Icons.settings_backup_restore, - onTap: () => context.router.push( - RecordStockWrapperRoute( - type: StockRecordEntryType.returned, - ), - )), - MenuCard( - heading: localizations - .translate(i18.manageStock.recordStockDamagedLabel), - description: localizations.translate( - i18.manageStock.recordStockDamagedDescription, - ), - icon: Icons.store, - onTap: () => context.router.push( - RecordStockWrapperRoute( - type: StockRecordEntryType.damaged, - ), - )), - MenuCard( - heading: localizations - .translate(i18.manageStock.recordStockLossLabel), - description: localizations.translate( - i18.manageStock.recordStockDamagedDescription, - ), - icon: Icons.store, - onTap: () => context.router.push( - RecordStockWrapperRoute( - type: StockRecordEntryType.loss, - ), - )), ]), - const SizedBox(height: 16), + const SizedBox(height: spacer4), ], ), ], diff --git a/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart b/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart index d33ac0487..625d0f210 100644 --- a/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart @@ -133,6 +133,7 @@ class WarehouseDetailsPageState extends LocalizedState { builder: (context, form, child) { return DigitButton( type: DigitButtonType.primary, + mainAxisSize: MainAxisSize.max, size: DigitButtonSize.large, isDisabled: !form.valid, label: localizations.translate( @@ -237,6 +238,7 @@ class WarehouseDetailsPageState extends LocalizedState { ), children: [ DigitCard( + margin: const EdgeInsets.all(spacer2), children: [ Text( InventorySingleton().isDistributor! && @@ -252,109 +254,106 @@ class WarehouseDetailsPageState extends LocalizedState { ), style: theme.textTheme.displayMedium, ), - Column(children: [ - ReactiveWrapperField( - formControlName: _dateOfEntryKey, - builder: (field) { - return InputField( - type: InputType.date, - label: localizations.translate( - i18.warehouseDetails - .dateOfReceipt, - ), - confirmText: localizations.translate( - i18.common.coreCommonOk, - ), - cancelText: localizations.translate( - i18.common.coreCommonCancel, - ), - initialValue: DateFormat( - 'dd/MM/yy') - .format( - field.control.value), - readOnly: true, - ); - }), - ReactiveWrapperField( - formControlName: _administrativeUnitKey, - builder: (field) { - return InputField( - type: InputType.text, - label: localizations.translate( - i18.warehouseDetails - .administrativeUnit, - ), - initialValue: field.control.value, - readOnly: true, - ); - } - ), - ]), - ]), + ReactiveWrapperField( + formControlName: _dateOfEntryKey, + builder: (field) { + return InputField( + type: InputType.date, + label: localizations.translate( + i18.warehouseDetails + .dateOfReceipt, + ), + confirmText: localizations.translate( + i18.common.coreCommonOk, + ), + cancelText: localizations.translate( + i18.common.coreCommonCancel, + ), + initialValue: DateFormat( + 'dd/MM/yy') + .format( + field.control.value), + readOnly: true, + ); + }), + ReactiveWrapperField( + formControlName: _administrativeUnitKey, + builder: (field) { + return InputField( + type: InputType.text, + label: localizations.translate( + i18.warehouseDetails + .administrativeUnit, + ), + initialValue: field.control.value, + readOnly: true, + ); + } + ), InkWell( - onTap: () async { - clearQRCodes(); - form.control(_teamCodeKey).value = ''; + onTap: () async { + clearQRCodes(); + form.control(_teamCodeKey).value = ''; - final facility = - await Navigator.of(context).push( - MaterialPageRoute( - builder: (context) => - InventoryFacilitySelectionPage( - facilities: facilities, + final facility = + await Navigator.of(context).push( + MaterialPageRoute( + builder: (context) => + InventoryFacilitySelectionPage( + facilities: facilities, + ), ), - ), - ); - - if (facility == null) return; - form.control(_warehouseKey).value = - localizations.translate( - 'FAC_${facility.id}'); - controller1.text = localizations.translate( - 'FAC_${facility.id}'); + ); - setState(() { - selectedFacilityId = facility.id; - }); - if (facility.id == 'Delivery Team') { - setState(() { - deliveryTeamSelected = true; - }); - } else { - setState(() { - deliveryTeamSelected = false; - }); - } - }, - child: IgnorePointer( - child: ReactiveWrapperField( - formControlName: _warehouseKey, - validationMessages: { - 'required': (object) => + if (facility == null) return; + form.control(_warehouseKey).value = localizations.translate( - '${i18.individualDetails - .nameLabelText}_IS_REQUIRED', - ), + 'FAC_${facility.id}'); + controller1.text = localizations.translate( + 'FAC_${facility.id}'); + + setState(() { + selectedFacilityId = facility.id; + }); + if (facility.id == 'Delivery Team') { + setState(() { + deliveryTeamSelected = true; + }); + } else { + setState(() { + deliveryTeamSelected = false; + }); + } }, - showErrors: (control) => control.invalid && control.touched, - builder: (field) { - return InputField( - type: InputType.search, - label: localizations.translate( - i18.stockReconciliationDetails - .facilityLabel, - ), - controller: controller1, - isRequired: true, - errorMessage: field.errorText, - onChange: (value) { - field.control.markAsTouched(); - }, - ); - } - ), - ), - ), + child: IgnorePointer( + child: ReactiveWrapperField( + formControlName: _warehouseKey, + validationMessages: { + 'required': (object) => + localizations.translate( + '${i18.individualDetails + .nameLabelText}_IS_REQUIRED', + ), + }, + showErrors: (control) => control.invalid && control.touched, + builder: (field) { + return InputField( + type: InputType.search, + label: localizations.translate( + i18.stockReconciliationDetails + .facilityLabel, + ), + controller: controller1, + isRequired: true, + errorMessage: field.errorText, + onChange: (value) { + field.control.markAsTouched(); + }, + ); + } + ), + ), + ), if (deliveryTeamSelected) ReactiveWrapperField( formControlName: _teamCodeKey, @@ -401,6 +400,8 @@ class WarehouseDetailsPageState extends LocalizedState { }, ); }) + ]), + ], ); }, diff --git a/packages/inventory_management/lib/widgets/back_navigation_help_header.dart b/packages/inventory_management/lib/widgets/back_navigation_help_header.dart index 3fc512d89..7a327946d 100644 --- a/packages/inventory_management/lib/widgets/back_navigation_help_header.dart +++ b/packages/inventory_management/lib/widgets/back_navigation_help_header.dart @@ -1,5 +1,8 @@ import 'package:auto_route/auto_route.dart'; +import 'package:digit_ui_components/theme/ComponentTheme/back_button_theme.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/theme/spacers.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_back_button.dart'; import 'package:flutter/material.dart'; import 'package:inventory_management/blocs/app_localization.dart'; @@ -33,25 +36,22 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { child: Row( children: [ if (showBackNavigation) - Flexible( - child: TextButton.icon( - style: TextButton.styleFrom( - foregroundColor: theme.colorScheme.onSurface, - padding: EdgeInsets.zero, - ), - onPressed: () { - context.router.maybePop(); - handleBack != null ? handleBack!() : null; - }, - icon: const Icon(Icons.arrow_left_sharp), - label: Text( - InventoryLocalization.of(context).translate( - i18.common.coreCommonBack, - ), - overflow: TextOverflow.ellipsis, + DigitBackButton(label: InventoryLocalization.of(context).translate( + i18.common.coreCommonBack, + ), + digitBackButtonThemeData: + const DigitBackButtonThemeData().copyWith( + context: context, + backDigitButtonIcon: Icon( + Icons.arrow_left, + size:Theme.of(context).spacerTheme.spacer5, ), ), - ), + handleBack: () { + context.router.maybePop(); + handleBack != null ? handleBack!() : null; + }, + ) ], ), ), From a2996c11635bb5b29f571f90ea8af7a590aa1eeb Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Thu, 12 Dec 2024 13:35:04 +0530 Subject: [PATCH 191/241] version update fixes --- .../android/app/build.gradle | 6 +- .../android/app/src/main/AndroidManifest.xml | 18 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../lib/models/entities/status.dart | 33 +- .../pubspec.lock | 2415 +++++++++++++++++ .../pubspec.yaml | 2 +- packages/registration_delivery/pubspec.lock | 64 +- 7 files changed, 2510 insertions(+), 30 deletions(-) create mode 100644 apps/health_campaign_field_worker_app/pubspec.lock diff --git a/apps/health_campaign_field_worker_app/android/app/build.gradle b/apps/health_campaign_field_worker_app/android/app/build.gradle index 4ec7c839d..0a3a128be 100644 --- a/apps/health_campaign_field_worker_app/android/app/build.gradle +++ b/apps/health_campaign_field_worker_app/android/app/build.gradle @@ -30,12 +30,12 @@ android { ndkVersion flutter.ndkVersion compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } kotlinOptions { - jvmTarget = '1.8' + jvmTarget = '17' } sourceSets { diff --git a/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml b/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml index 14af9d02b..ee5bf8e02 100644 --- a/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml +++ b/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml @@ -13,7 +13,7 @@ - + @@ -31,16 +31,16 @@ android:allowBackup="false" - android:fullBackupOnly="false" android:fullBackupContent="false" + android:fullBackupOnly="false" + android:icon="@mipmap/ic_launcher" + android:label="HCM"> + android:exported="false" + android:foregroundServiceType="location" /> - + =3.4.0 <4.0.0" + flutter: ">=3.22.0" diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index d24d2184e..a6b4c5c31 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -51,7 +51,7 @@ dependencies: flutter_portal: ^1.1.4 flutter_background_service: ^5.0.5 flutter_local_notifications: ^17.1.2 - device_info_plus: ^10.1.0 + device_info_plus: ^9.1.2 battery_plus: ^6.0.1 workmanager: ^0.5.2 digit_firebase_services: ^0.0.1 diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index d04059551..cb704b0eb 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -372,10 +380,9 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - name: dart_mappable_builder - sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e - url: "https://pub.dev" - source: hosted + path: "../dart_mappable_builder" + relative: true + source: path version: "4.2.3" dart_style: dependency: transitive @@ -408,6 +415,13 @@ packages: relative: true source: path version: "1.0.5-dev.1" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_scanner: dependency: "direct main" description: @@ -544,6 +558,46 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: @@ -1729,5 +1783,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <3.9.0" + dart: ">=3.4.0 <4.0.0" flutter: ">=3.22.0" From c984db691b3288eb59aaf9334804ebbb7a4e1c05 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Thu, 12 Dec 2024 15:14:54 +0530 Subject: [PATCH 192/241] sync null check fixes --- .../lib/pages/login.dart | 4 ++-- .../lib/sync_annotation_module.dart | 3 +-- .../lib/sync_annotation_module.sync.dart | 18 +++++++++++++----- .../lib/data/sync_service_annotation.dart | 8 ++++---- 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/pages/login.dart b/apps/health_campaign_field_worker_app/lib/pages/login.dart index cb1277d20..12178988b 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/login.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/login.dart @@ -229,12 +229,12 @@ class _LoginPageState extends LocalizedState { FormGroup buildForm() => fb.group({ _userId: FormControl( - value: '', + value: 'USR-260849', validators: [Validators.required], ), _password: FormControl( validators: [Validators.required], - value: '', + value: 'eGov@123', ), _privacyCheck: FormControl( value: false, diff --git a/apps/health_campaign_field_worker_app/lib/sync_annotation_module.dart b/apps/health_campaign_field_worker_app/lib/sync_annotation_module.dart index 156b65cf2..49427949c 100644 --- a/apps/health_campaign_field_worker_app/lib/sync_annotation_module.dart +++ b/apps/health_campaign_field_worker_app/lib/sync_annotation_module.dart @@ -16,5 +16,4 @@ import 'package:sync_service/data/sync_service_annotation.dart'; 'referral', 'hFReferral', ]) -class SyncModule { -} +class SyncModule {} diff --git a/apps/health_campaign_field_worker_app/lib/sync_annotation_module.sync.dart b/apps/health_campaign_field_worker_app/lib/sync_annotation_module.sync.dart index 41539c23a..2002e3806 100644 --- a/apps/health_campaign_field_worker_app/lib/sync_annotation_module.sync.dart +++ b/apps/health_campaign_field_worker_app/lib/sync_annotation_module.sync.dart @@ -45,7 +45,9 @@ class SyncDownEntity { }) .whereNotNull() .toList(); - additionalIds.addAll(addressAdditionalIds ?? []); + if (addressAdditionalIds != null) { + additionalIds.addAll(addressAdditionalIds ?? []); + } final identifiersAdditionalIds = responseEntity?.identifiers ?.map((e) { final id = e.id; @@ -57,7 +59,9 @@ class SyncDownEntity { }) .whereNotNull() .toList(); - additionalIds.addAll(identifiersAdditionalIds ?? []); + if (identifiersAdditionalIds != null) { + additionalIds.addAll(identifiersAdditionalIds ?? []); + } await local.opLogManager.updateServerGeneratedIds( model: UpdateServerGeneratedIdModel( clientReferenceId: entity.clientReferenceId, @@ -98,13 +102,15 @@ class SyncDownEntity { final rowVersion = responseEntity?.rowVersion; if (serverGeneratedId != null) { final additionalIds = []; - final addressAdditionalIds = responseEntity?.address != null + final addressAdditionalIds = responseEntity?.address!.id == null ? null : AdditionalId( idType: "householdAddressId", id: responseEntity!.address!.id!, ); - additionalIds.addAll([addressAdditionalIds!] ?? []); + if (addressAdditionalIds != null) { + additionalIds.addAll([addressAdditionalIds!] ?? []); + } await local.opLogManager.updateServerGeneratedIds( model: UpdateServerGeneratedIdModel( clientReferenceId: entity.clientReferenceId, @@ -316,7 +322,9 @@ class SyncDownEntity { }) .whereNotNull() .toList(); - additionalIds.addAll(resourcesAdditionalIds ?? []); + if (resourcesAdditionalIds != null) { + additionalIds.addAll(resourcesAdditionalIds ?? []); + } await local.opLogManager.updateServerGeneratedIds( model: UpdateServerGeneratedIdModel( clientReferenceId: entity.clientReferenceId, diff --git a/packages/sync_service/lib/data/sync_service_annotation.dart b/packages/sync_service/lib/data/sync_service_annotation.dart index 3f0f035eb..ff81edd67 100644 --- a/packages/sync_service/lib/data/sync_service_annotation.dart +++ b/packages/sync_service/lib/data/sync_service_annotation.dart @@ -35,7 +35,7 @@ import 'package:super_annotations/super_annotations.dart'; /// 'task.resource_s', /// ])] /// class Example { - // Class implementation +// Class implementation /// } class SyncServiceAnnotation extends ClassAnnotation { @@ -109,11 +109,11 @@ class SyncServiceAnnotation extends ClassAnnotation { ..writeln(' );') ..writeln(' }).whereNotNull().toList();') ..writeln( - ' additionalIds.addAll(${removePluralSuffix(part)}AdditionalIds ?? []);'); + ' if(${removePluralSuffix(part)}AdditionalIds!=null){ additionalIds.addAll(${removePluralSuffix(part)}AdditionalIds ?? []);}'); } else { methodBuffer ..writeln( - ' final ${part}AdditionalIds = responseEntity?.${part} != null') + ' final ${part}AdditionalIds = responseEntity?.${part}!.id == null') ..writeln(' ? null') ..writeln(' : AdditionalId(') ..writeln( @@ -121,7 +121,7 @@ class SyncServiceAnnotation extends ClassAnnotation { ..writeln(' id: responseEntity!.${part}!.id!,') ..writeln(' );') ..writeln( - ' additionalIds.addAll([${part}AdditionalIds!] ?? []);'); + ' if(${part}AdditionalIds != null) { additionalIds.addAll([${part}AdditionalIds!] ?? []); }'); } } } From 8f256e0882adc7d0422ee10627f387dcdde56144 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Thu, 12 Dec 2024 17:00:41 +0530 Subject: [PATCH 193/241] merge conflicts fixes and boundary module fix --- .../lib/app.dart | 13 +- .../lib/widgets/sidebar/side_bar.dart | 21 +-- .../record_reason_checklist.dart | 60 +++--- .../record_referral_details.dart | 25 ++- .../pages/beneficiary/refer_beneficiary.dart | 7 +- .../lib/pages/beneficiary/side_effects.dart | 18 +- .../lib/pages/summary_page.dart | 176 +++++++++--------- .../lib/utils/utils.dart | 23 +-- 8 files changed, 170 insertions(+), 173 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/app.dart b/apps/health_campaign_field_worker_app/lib/app.dart index 1f071314f..b5fa3fb6c 100644 --- a/apps/health_campaign_field_worker_app/lib/app.dart +++ b/apps/health_campaign_field_worker_app/lib/app.dart @@ -1,5 +1,4 @@ import 'package:attendance_management/attendance_management.dart'; -import 'package:survey_form/survey_form.dart'; import 'package:closed_household/blocs/closed_household.dart'; import 'package:closed_household/closed_household.dart'; import 'package:digit_components/digit_components.dart'; @@ -19,8 +18,7 @@ import 'package:registration_delivery/models/entities/household.dart'; import 'package:registration_delivery/models/entities/household_member.dart'; import 'package:registration_delivery/models/entities/project_beneficiary.dart'; import 'package:registration_delivery/models/entities/task.dart'; -import 'package:sync_service/data/sync_service.dart'; -import 'package:sync_service/data/sync_service_annotation.dart'; +import 'package:survey_form/survey_form.dart'; import 'blocs/app_initialization/app_initialization.dart'; import 'blocs/auth/auth.dart'; @@ -186,13 +184,8 @@ class MainApplicationState extends State widget.sql) ..add( LocalizationEvent.onLoadLocalization( - module: localizationModulesList.interfaces - .where((element) => - element.type == - Modules.localizationModule) - .map((e) => e.name.toString()) - .join(',') - .toString(), + module: + "hcm-boundary-${envConfig.variables.hierarchyType.toLowerCase()},${localizationModulesList.interfaces.where((element) => element.type == Modules.localizationModule).map((e) => e.name.toString()).join(',')}", tenantId: appConfig.tenantId.toString(), locale: firstLanguage, path: Constants.localizationApiPath, diff --git a/apps/health_campaign_field_worker_app/lib/widgets/sidebar/side_bar.dart b/apps/health_campaign_field_worker_app/lib/widgets/sidebar/side_bar.dart index 8d9f3c8d0..faf63d8f9 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/sidebar/side_bar.dart +++ b/apps/health_campaign_field_worker_app/lib/widgets/sidebar/side_bar.dart @@ -13,6 +13,7 @@ import '../../blocs/localization/localization.dart'; import '../../models/data_model.dart'; import '../../models/entities/roles_type.dart'; import '../../router/app_router.dart'; +import '../../utils/environment_config.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; @@ -110,9 +111,7 @@ class SideBar extends StatelessWidget { i18.common.coreCommonlanguage, ), icon: Icons.language, - onPressed: () { - - }, + onPressed: () {}, content: Offstage( offstage: languages == null, child: BlocBuilder( @@ -130,14 +129,8 @@ class SideBar extends StatelessWidget { context .read() .add(LocalizationEvent.onLoadLocalization( - module: localizationModulesList - .interfaces - .where((element) => - element.type == - Modules.localizationModule) - .map((e) => e.name.toString()) - .join(',') - .toString(), + module: + "hcm-boundary-${envConfig.variables.hierarchyType.toLowerCase()},${localizationModulesList.interfaces.where((element) => element.type == Modules.localizationModule).map((e) => e.name.toString()).join(',')}", tenantId: appConfig.tenantId ?? "default", locale: value.value.toString(), @@ -185,9 +178,9 @@ class SideBar extends StatelessWidget { onPressed: () async { final connectivityResult = await (Connectivity().checkConnectivity()); - final isOnline = - connectivityResult.firstOrNull == ConnectivityResult.wifi || - connectivityResult.firstOrNull == ConnectivityResult.mobile; + final isOnline = connectivityResult.firstOrNull == + ConnectivityResult.wifi || + connectivityResult.firstOrNull == ConnectivityResult.mobile; if (isOnline) { if (context.mounted) { diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart index b0b6b3528..78393d784 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart @@ -13,6 +13,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart'; import 'package:referral_reconciliation/utils/constants.dart'; +import 'package:referral_reconciliation/utils/extensions/extensions.dart'; import 'package:survey_form/survey_form.dart'; import '../../blocs/referral_recon_service_definition.dart'; @@ -24,6 +25,7 @@ import '../../widgets/localized.dart'; @RoutePage() class ReferralReasonChecklistPage extends LocalizedStatefulWidget { final String? referralClientRefId; + const ReferralReasonChecklistPage({ super.key, this.referralClientRefId, @@ -216,34 +218,32 @@ class _ReferralReasonChecklistPageState accountId: ReferralReconSingleton() .projectId, - auditDetails: - AuditDetails( - createdBy: - ReferralReconSingleton() - .userUUid, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: - ReferralReconSingleton() - .userUUid, - lastModifiedTime: - context - .millisecondsSinceEpoch(), - ), - clientAuditDetails: - ClientAuditDetails( - createdBy: - ReferralReconSingleton() - .userUUid, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: - ReferralReconSingleton() - .userUUid, - lastModifiedTime: - context - .millisecondsSinceEpoch(), - ),additionalDetails: { + auditDetails: AuditDetails( + createdBy: + ReferralReconSingleton() + .userUUid, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: + ReferralReconSingleton() + .userUUid, + lastModifiedTime: context + .millisecondsSinceEpoch(), + ), + clientAuditDetails: + ClientAuditDetails( + createdBy: + ReferralReconSingleton() + .userUUid, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: + ReferralReconSingleton() + .userUUid, + lastModifiedTime: context + .millisecondsSinceEpoch(), + ), + additionalDetails: { "boundaryCode": ReferralReconSingleton() .boundary @@ -791,8 +791,8 @@ class _ReferralReasonChecklistPageState : theme.colorTheme.paper.secondary, child: _buildChecklist( matchingChildItem, - initialAttributes?.indexOf(matchingChildItem) ?? - parentIndex, // Pass parentIndex here as we're building at the same level + initialAttributes?.indexOf(matchingChildItem) ?? parentIndex, + // Pass parentIndex here as we're building at the same level selectedServiceDefinition, context, ), diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart index 0d95da231..f3408d460 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart @@ -317,7 +317,12 @@ class _RecordReferralDetailsPageState HFReferralAdditionalFields( version: 1, fields: [ - AdditionalField("boundaryCode",ReferralReconSingleton().boundary?.code),if (hfCoordinator != + AdditionalField( + "boundaryCode", + ReferralReconSingleton() + .boundary + ?.code), + if (hfCoordinator != null && hfCoordinator .toString() @@ -664,7 +669,12 @@ class _RecordReferralDetailsPageState HFReferralAdditionalFields( version: 1, fields: [ - AdditionalField("boundaryCode",ReferralReconSingleton().boundary?.code),if (hfCoordinator != + AdditionalField( + "boundaryCode", + ReferralReconSingleton() + .boundary + ?.code), + if (hfCoordinator != null && hfCoordinator .toString() @@ -952,17 +962,6 @@ class _RecordReferralDetailsPageState }), ReactiveWrapperField( formControlName: _ageKey, - label: localizations.translate( - i18.common.ageInMonths, - ), - readOnly: viewOnly, - keyboardType: TextInputType.number, - inputFormatters: [ - FilteringTextInputFormatter - .digitsOnly, - LengthLimitingTextInputFormatter(4) - ], - isRequired: true, validationMessages: { 'required': (_) => localizations.translate( diff --git a/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart b/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart index 78ef575b7..f101d5e74 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart @@ -180,7 +180,12 @@ class ReferBeneficiaryPageState extends LocalizedState { additionalFields: ReferralAdditionalFields( version: 1, fields: [ - AdditionalField("boundaryCode",RegistrationDeliverySingleton().boundary?.code),if (referralComment != null && + AdditionalField( + "boundaryCode", + RegistrationDeliverySingleton() + .boundary + ?.code), + if (referralComment != null && referralComment .toString() .trim() diff --git a/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart b/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart index 6e5302500..a0bb61b15 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart @@ -144,12 +144,18 @@ class SideEffectsPageState extends LocalizedState { SideEffectsSubmitEvent( SideEffectModel( id: null, - additionalFields: SideEffectAdditionalFields( - version: 1, - fields: [ - AdditionalField("boundaryCode",RegistrationDeliverySingleton().boundary?.code), - ], - ),taskClientReferenceId: + additionalFields: + SideEffectAdditionalFields( + version: 1, + fields: [ + AdditionalField( + "boundaryCode", + RegistrationDeliverySingleton() + .boundary + ?.code), + ], + ), + taskClientReferenceId: widget .tasks .last diff --git a/packages/registration_delivery/lib/pages/summary_page.dart b/packages/registration_delivery/lib/pages/summary_page.dart index 31ba15b9e..454a00ddf 100644 --- a/packages/registration_delivery/lib/pages/summary_page.dart +++ b/packages/registration_delivery/lib/pages/summary_page.dart @@ -204,29 +204,29 @@ class SummaryPageState extends LocalizedState { margin: const EdgeInsets.all(spacer2), children: [ LabelValueSummary( - padding: EdgeInsets.zero, + padding: EdgeInsets.zero, heading: localizations.translate(i18 .householdLocation .householdLocationLabelText), items: [ LabelValueItem( - label: localizations.translate( - i18.householdLocation.villageLabel), - value: householdState.householdModel - ?.address?.locality?.code ?? - localizations.translate( - i18.common.coreCommonNA), - isInline: true, - labelFlex: 5, + label: localizations.translate( + i18.householdLocation.villageLabel), + value: localizations.translate( + householdState.householdModel?.address + ?.locality?.code ?? + i18.common.coreCommonNA), + isInline: true, + labelFlex: 5, ), LabelValueItem( - label: localizations.translate(i18 - .householdLocation.landmarkFormLabel), - value: householdState.householdModel - ?.address?.landmark ?? - localizations.translate( - i18.common.coreCommonNA), - isInline: true, + label: localizations.translate(i18 + .householdLocation.landmarkFormLabel), + value: householdState.householdModel + ?.address?.landmark ?? + localizations + .translate(i18.common.coreCommonNA), + isInline: true, labelFlex: 5, ), ]), @@ -240,47 +240,48 @@ class SummaryPageState extends LocalizedState { i18.householdDetails.householdDetailsLabel), items: [ LabelValueItem( - label: localizations.translate( - i18.beneficiaryDetails.totalMembers), - value: householdState - .householdModel?.memberCount - .toString() ?? - '0', - isInline: true, - labelFlex: 5,), + label: localizations.translate( + i18.beneficiaryDetails.totalMembers), + value: householdState + .householdModel?.memberCount + .toString() ?? + '0', + isInline: true, + labelFlex: 5, + ), LabelValueItem( - label: localizations.translate(i18 - .householdDetails - .noOfPregnantWomenCountLabel), - value: householdState.householdModel - ?.additionalFields?.fields - .where((h) => - h.key == - AdditionalFieldsType - .pregnantWomen - .toValue()) - .firstOrNull - ?.value - .toString() ?? - '0', - isInline: true, + label: localizations.translate(i18 + .householdDetails + .noOfPregnantWomenCountLabel), + value: householdState.householdModel + ?.additionalFields?.fields + .where((h) => + h.key == + AdditionalFieldsType + .pregnantWomen + .toValue()) + .firstOrNull + ?.value + .toString() ?? + '0', + isInline: true, labelFlex: 5, ), LabelValueItem( - label: localizations.translate(i18 - .householdDetails - .noOfChildrenBelow5YearsLabel), - value: householdState.householdModel - ?.additionalFields?.fields - .where((h) => - h.key == - AdditionalFieldsType.children - .toValue()) - .firstOrNull - ?.value - .toString() ?? - '0', - isInline: true, + label: localizations.translate(i18 + .householdDetails + .noOfChildrenBelow5YearsLabel), + value: householdState.householdModel + ?.additionalFields?.fields + .where((h) => + h.key == + AdditionalFieldsType.children + .toValue()) + .firstOrNull + ?.value + .toString() ?? + '0', + isInline: true, labelFlex: 5, ), ]), @@ -294,41 +295,41 @@ class SummaryPageState extends LocalizedState { i18.householdDetails.houseDetailsLabel), items: [ LabelValueItem( - label: localizations.translate( - i18.householdDetails.noOfRoomsLabel), - value: householdState.householdModel - ?.additionalFields?.fields - .where((h) => - h.key == - AdditionalFieldsType.noOfRooms - .toValue()) - .firstOrNull - ?.value - .toString() ?? - '0', - isInline: true, + label: localizations.translate( + i18.householdDetails.noOfRoomsLabel), + value: householdState.householdModel + ?.additionalFields?.fields + .where((h) => + h.key == + AdditionalFieldsType.noOfRooms + .toValue()) + .firstOrNull + ?.value + .toString() ?? + '0', + isInline: true, labelFlex: 5, ), LabelValueItem( - label: localizations.translate( - i18.householdDetails.typeOfStructure), - value: (householdState.householdModel - ?.additionalFields?.fields - .where((h) => - h.key == - AdditionalFieldsType - .houseStructureTypes - .toValue()) - .firstOrNull - ?.value ?? - []) - .toString() - .split('|') - .map((item) => - getLocalizedMessage(item)) - .toList() - .join(', '), - isInline: true, + label: localizations.translate( + i18.householdDetails.typeOfStructure), + value: (householdState.householdModel + ?.additionalFields?.fields + .where((h) => + h.key == + AdditionalFieldsType + .houseStructureTypes + .toValue()) + .firstOrNull + ?.value ?? + []) + .toString() + .split('|') + .map( + (item) => getLocalizedMessage(item)) + .toList() + .join(', '), + isInline: true, labelFlex: 5, ), ]), @@ -337,7 +338,7 @@ class SummaryPageState extends LocalizedState { margin: const EdgeInsets.all(spacer2), children: [ LabelValueSummary( - padding: EdgeInsets.zero, + padding: EdgeInsets.zero, heading: localizations.translate(i18 .individualDetails .individualsDetailsLabelText), @@ -360,8 +361,7 @@ class SummaryPageState extends LocalizedState { ) => individualModel?.name?.givenName ?? localizations.translate( - i18.common.coreCommonNA) - ), + i18.common.coreCommonNA)), labelFlex: 5, ), LabelValueItem( diff --git a/packages/registration_delivery/lib/utils/utils.dart b/packages/registration_delivery/lib/utils/utils.dart index 00cc8ca6a..cbb74c5ee 100644 --- a/packages/registration_delivery/lib/utils/utils.dart +++ b/packages/registration_delivery/lib/utils/utils.dart @@ -168,8 +168,8 @@ DeliveryDoseCriteria? fetchProductVariant(ProjectCycleDelivery? currentDelivery, if (individualModel != null) { final individualAge = DigitDateUtils.calculateAge( DigitDateUtils.getFormattedDateToDateTime( - individualModel.dateOfBirth!, - ) ?? + individualModel.dateOfBirth!, + ) ?? DateTime.now(), ); individualAgeInMonths = individualAge.years * 12 + individualAge.months; @@ -179,14 +179,14 @@ DeliveryDoseCriteria? fetchProductVariant(ProjectCycleDelivery? currentDelivery, if (householdModel != null && householdModel.additionalFields != null) { memberCount = householdModel.memberCount; roomCount = int.tryParse(householdModel.additionalFields?.fields - .where((h) => h.key == AdditionalFieldsType.noOfRooms.toValue()) - .firstOrNull - ?.value - .toString() ?? + .where((h) => h.key == AdditionalFieldsType.noOfRooms.toValue()) + .firstOrNull + ?.value + .toString() ?? '1')!; structureType = householdModel.additionalFields?.fields .where((h) => - h.key == AdditionalFieldsType.houseStructureTypes.toValue()) + h.key == AdditionalFieldsType.houseStructureTypes.toValue()) .firstOrNull ?.value .toString(); @@ -236,13 +236,14 @@ String maskString(String input) { return maskedString; } + class CustomFormulaParser { // Modify the function to accept stringKeys as nullable static Map parseCondition( - String condition, - Map variables, { - List? stringKeys, - } // Accept stringKeys as nullable + String condition, + Map variables, { + List? stringKeys, + } // Accept stringKeys as nullable ) { // If stringKeys is null or empty, default to FormulaParser for all conditions if (stringKeys == null || stringKeys.isEmpty) { From 452c2ee997485a50c08e01ceaeacbbb25442fdb0 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:42:39 +0530 Subject: [PATCH 194/241] V1.5 sync count patch (#620) * updated hardcoded sync count, retry count and error api path * Published digit_data_model version update --- packages/digit_data_model/CHANGELOG.md | 5 + .../lib/data/data_repository.dart | 2 +- .../lib/data/repositories/oplog/oplog.dart | 11 +- .../record_reason_checklist.dart | 110 +++++++++--------- .../lib/pages/survey_form_view.dart | 29 +++-- 5 files changed, 84 insertions(+), 73 deletions(-) diff --git a/packages/digit_data_model/CHANGELOG.md b/packages/digit_data_model/CHANGELOG.md index 094746386..99fb77765 100644 --- a/packages/digit_data_model/CHANGELOG.md +++ b/packages/digit_data_model/CHANGELOG.md @@ -2,6 +2,11 @@ * Merged pgr and survey_form package changes +## 1.0.4+1 + +* Bug Fix: + * Updated syncRetryCount,syncRetryInterval and errorPath to dynamic + ## 1.0.4 * Added user_action entity for digit_location_tracker package diff --git a/packages/digit_data_model/lib/data/data_repository.dart b/packages/digit_data_model/lib/data/data_repository.dart index 6561840fd..869831b1f 100644 --- a/packages/digit_data_model/lib/data/data_repository.dart +++ b/packages/digit_data_model/lib/data/data_repository.dart @@ -297,7 +297,7 @@ abstract class RemoteRepository { .syncedDownEqualTo(false) .nonRecoverableErrorEqualTo(false) .syncDownRetryCountGreaterThan( - 5 - 1, + DigitDataModelSingleton().syncDownRetryCount - 1, ) .createdByEqualTo(createdBy) .findAllSync(); @@ -112,7 +112,8 @@ abstract class OpLogManager { var oplogs = isar.opLogs .filter() .syncedUpEqualTo(true) - .syncDownRetryCountLessThan(5) + .syncDownRetryCountLessThan( + DigitDataModelSingleton().syncDownRetryCount) .syncedDownEqualTo(false) .entityTypeEqualTo(type) .findAllSync(); @@ -299,7 +300,8 @@ abstract class OpLogManager { OpLogEntry updatedEntry = entry.copyWith( syncDownRetryCount: syncDownRetryCount + 1, ); - if (updatedEntry.syncDownRetryCount >= 5) { + if (updatedEntry.syncDownRetryCount >= + DigitDataModelSingleton().syncDownRetryCount) { markAsNonRecoverable = true; updatedEntry = updatedEntry.copyWith(nonRecoverableError: true); } @@ -315,7 +317,8 @@ abstract class OpLogManager { await Future.delayed(const Duration(seconds: 1)); } else { await Future.delayed(Duration( - seconds: 5 * oplogs.first.syncDownRetryCount, + seconds: DigitDataModelSingleton().retryTimeInterval * + oplogs.first.syncDownRetryCount, )); } diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart index 78393d784..06caed99b 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart @@ -196,60 +196,64 @@ class _ReferralReasonChecklistPageState context.read().add( ServiceCreateEvent( serviceModel: ServiceModel( - createdAt: DigitDateUtils - .getDateFromTimestamp( - DateTime.now() - .toLocal() - .millisecondsSinceEpoch, - dateFormat: - defaultDateTimeFormat, - ), - tenantId: value - .selectedServiceDefinition! - .tenantId, - clientId: widget - .referralClientRefId - .toString(), - serviceDefId: value - .selectedServiceDefinition - ?.id, - attributes: attributes, - rowVersion: 1, - accountId: - ReferralReconSingleton() - .projectId, - auditDetails: AuditDetails( - createdBy: - ReferralReconSingleton() - .userUUid, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: - ReferralReconSingleton() - .userUUid, - lastModifiedTime: context - .millisecondsSinceEpoch(), - ), - clientAuditDetails: - ClientAuditDetails( - createdBy: - ReferralReconSingleton() - .userUUid, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: - ReferralReconSingleton() - .userUUid, - lastModifiedTime: context - .millisecondsSinceEpoch(), - ), - additionalDetails: { - "boundaryCode": + createdAt: DigitDateUtils + .getDateFromTimestamp( + DateTime.now() + .toLocal() + .millisecondsSinceEpoch, + dateFormat: + defaultDateTimeFormat, + ), + tenantId: value + .selectedServiceDefinition! + .tenantId, + clientId: widget + .referralClientRefId + .toString(), + serviceDefId: value + .selectedServiceDefinition + ?.id, + attributes: attributes, + rowVersion: 1, + accountId: ReferralReconSingleton() - .boundary - ?.code - }, - ), + .projectId, + auditDetails: + AuditDetails( + createdBy: + ReferralReconSingleton() + .userUUid, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: + ReferralReconSingleton() + .userUUid, + lastModifiedTime: context + .millisecondsSinceEpoch(), + ), + clientAuditDetails: + ClientAuditDetails( + createdBy: + ReferralReconSingleton() + .userUUid, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: + ReferralReconSingleton() + .userUUid, + lastModifiedTime: context + .millisecondsSinceEpoch(), + ), + additionalFields: + ServiceAdditionalFields( + version: 1, + fields: [ + AdditionalField( + 'boundaryCode', + SurveyFormSingleton() + .boundary + ?.code) + ])), ), ); diff --git a/packages/survey_form/lib/pages/survey_form_view.dart b/packages/survey_form/lib/pages/survey_form_view.dart index ce0bfc65f..f70231157 100644 --- a/packages/survey_form/lib/pages/survey_form_view.dart +++ b/packages/survey_form/lib/pages/survey_form_view.dart @@ -259,6 +259,11 @@ class SurveyFormViewPageState extends LocalizedState { 'longitude', longitude, ), + AdditionalField( + 'boundaryCode', + SurveyFormSingleton() + .boundary + ?.code) ], ), )); @@ -726,8 +731,8 @@ class SurveyFormViewPageState extends LocalizedState { builder: (field) => RadioList( radioDigitButtons: item.values != null ? item.values! - .where((e) => - e != i18.surveyForm.notSelectedKey) + .where( + (e) => e != i18.surveyForm.notSelectedKey) .toList() .map((item) => RadioButtonModel( code: item, @@ -750,8 +755,8 @@ class SurveyFormViewPageState extends LocalizedState { setState(() { // Clear child controllers and update visibility for (final matchingChildItem in childItems) { - final childIndex = initialAttributes - ?.indexOf(matchingChildItem); + final childIndex = + initialAttributes?.indexOf(matchingChildItem); if (childIndex != null) { // controller[childIndex].clear(); visibleSurveyFormIndexes @@ -768,9 +773,7 @@ class SurveyFormViewPageState extends LocalizedState { ).value; if (excludedIndexes.isNotEmpty) { - for (int i = 0; - i < excludedIndexes.length; - i++) { + for (int i = 0; i < excludedIndexes.length; i++) { // Clear excluded child controllers if (item.dataType != 'SingleValueList') { // controller[excludedIndexes[i]].value = @@ -793,8 +796,7 @@ class SurveyFormViewPageState extends LocalizedState { ), BlocBuilder( builder: (context, state) { - return (controller[index].text == - item.values?[1].trim() && + return (controller[index].text == item.values?[1].trim() && !(isHealthFacilityWorker && widget.referralClientRefId != null)) ? Padding( @@ -808,10 +810,8 @@ class SurveyFormViewPageState extends LocalizedState { AutovalidateMode.onUserInteraction, validator: (value1) { if (item.required == true && - (additionalController[index].text == - null || - additionalController[index].text == - '')) { + (additionalController[index].text == null || + additionalController[index].text == '')) { return localizations.translate( i18.common.coreCommonReasonRequired, ); @@ -828,8 +828,7 @@ class SurveyFormViewPageState extends LocalizedState { child: DigitTextFormInput( onChange: (value) { field.didChange(value); - additionalController[index].text = - value; + additionalController[index].text = value; }, errorMessage: field.errorText, maxLength: 1000, From c4e49d55030688ab0a4b067591dd657438ceefd3 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Thu, 12 Dec 2024 18:27:38 +0530 Subject: [PATCH 195/241] merge conflicts fixes --- .../data/local_store/sql_store/sql_store.dart | 41 ++-- .../local_store/sql_store/sql_store.g.dart | 12 +- .../pgr_application_status.mapper.dart | 2 +- .../reason_checklist_preview.dart | 6 +- .../lib/pages/survey_form_view.dart | 180 +++++++++--------- 5 files changed, 118 insertions(+), 123 deletions(-) diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart index 5b85c7134..4dc193a34 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.dart @@ -111,17 +111,17 @@ class LocalSqlDataStore extends _$LocalSqlDataStore { int get schemaVersion => 5; // Increment schema version @override - MigrationStrategy get migration => MigrationStrategy( - onUpgrade: (migrator, from, to) async { - if (from < 5) { - //Add column for projectType in Project Table - try { - await m.addColumn(project, project.projectType); - } catch (e) { - } - } - if (from < 5) { - await customStatement(''' + MigrationStrategy get migration => + MigrationStrategy( + onUpgrade: (migrator, from, to) async { + if (from < 5) { + //Add column for projectType in Project Table + try { + await migrator.addColumn(project, project.projectType); + } catch (e) {} + } + if (from < 5) { + await customStatement(''' CREATE TABLE attributes_temp ( id TEXT, dataType TEXT, @@ -149,8 +149,8 @@ class LocalSqlDataStore extends _$LocalSqlDataStore { ); '''); - // Step 2: Copy data from the old table to the new table - await customStatement(''' + // Step 2: Copy data from the old table to the new table + await customStatement(''' INSERT INTO attributes_temp ( id, dataType, referenceId, tenantId, code, values, isActive, required, regex, "order", auditCreatedBy, nonRecoverableError, auditCreatedTime, clientCreatedTime, @@ -167,14 +167,15 @@ class LocalSqlDataStore extends _$LocalSqlDataStore { FROM attributes; '''); - // Step 3: Drop the old table - await migrator.deleteTable('attributes'); + // Step 3: Drop the old table + await migrator.deleteTable('attributes'); - // Step 4: Rename the new table to the old table's name - await customStatement('ALTER TABLE attributes_temp RENAME TO attributes;'); - } - }, - ); + // Step 4: Rename the new table to the old table's name + await customStatement( + 'ALTER TABLE attributes_temp RENAME TO attributes;'); + } + }, + ); /// The `_openConnection` method opens a connection to the database. /// It returns a `LazyDatabase` that opens the database when it is first accessed. diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart index 3972029ee..fc72319e1 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart @@ -49433,7 +49433,7 @@ typedef $$AttributesTableInsertCompanionBuilder = AttributesCompanion Function({ Value tenantId, Value code, Value values, - Value isActive, + Value isActive, Value required, Value regex, Value order, @@ -49459,7 +49459,7 @@ typedef $$AttributesTableUpdateCompanionBuilder = AttributesCompanion Function({ Value tenantId, Value code, Value values, - Value isActive, + Value isActive, Value required, Value regex, Value order, @@ -49505,7 +49505,7 @@ class $$AttributesTableTableManager extends RootTableManager< Value tenantId = const Value.absent(), Value code = const Value.absent(), Value values = const Value.absent(), - Value isActive = const Value.absent(), + Value isActive = const Value.absent(), Value required = const Value.absent(), Value regex = const Value.absent(), Value order = const Value.absent(), @@ -49557,7 +49557,7 @@ class $$AttributesTableTableManager extends RootTableManager< Value tenantId = const Value.absent(), Value code = const Value.absent(), Value values = const Value.absent(), - Value isActive = const Value.absent(), + Value isActive = const Value.absent(), Value required = const Value.absent(), Value regex = const Value.absent(), Value order = const Value.absent(), @@ -49650,7 +49650,7 @@ class $$AttributesTableFilterComposer builder: (column, joinBuilders) => ColumnFilters(column, joinBuilders: joinBuilders)); - ColumnFilters get isActive => $state.composableBuilder( + ColumnFilters get isActive => $state.composableBuilder( column: $state.table.isActive, builder: (column, joinBuilders) => ColumnFilters(column, joinBuilders: joinBuilders)); @@ -49769,7 +49769,7 @@ class $$AttributesTableOrderingComposer builder: (column, joinBuilders) => ColumnOrderings(column, joinBuilders: joinBuilders)); - ColumnOrderings get isActive => $state.composableBuilder( + ColumnOrderings get isActive => $state.composableBuilder( column: $state.table.isActive, builder: (column, joinBuilders) => ColumnOrderings(column, joinBuilders: joinBuilders)); diff --git a/packages/digit_data_model/lib/models/entities/pgr_application_status.mapper.dart b/packages/digit_data_model/lib/models/entities/pgr_application_status.mapper.dart index 34759f6df..b60c63f04 100644 --- a/packages/digit_data_model/lib/models/entities/pgr_application_status.mapper.dart +++ b/packages/digit_data_model/lib/models/entities/pgr_application_status.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'pgr_application_status.dart'; diff --git a/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart b/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart index 44144b119..a80e6055b 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart @@ -3,11 +3,11 @@ import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/digit_divider.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; -import 'package:survey_form/survey_form.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:intl/intl.dart'; import 'package:referral_reconciliation/utils/constants.dart'; +import 'package:survey_form/survey_form.dart'; import '../../blocs/referral_recon_service_definition.dart'; import '../../router/referral_reconciliation_router.gm.dart'; @@ -214,7 +214,9 @@ class _ReferralReasonChecklistPreviewPageState 'SingleValueList' ? localizations .translate( - e.value.toString().toUpperCase(), + e.value + .toString() + .toUpperCase(), ) : e.value ?? "", ), diff --git a/packages/survey_form/lib/pages/survey_form_view.dart b/packages/survey_form/lib/pages/survey_form_view.dart index 286890c07..8319d1c6e 100644 --- a/packages/survey_form/lib/pages/survey_form_view.dart +++ b/packages/survey_form/lib/pages/survey_form_view.dart @@ -123,7 +123,7 @@ class SurveyFormViewPageState extends LocalizedState { ), ); final isValid = - surveyFormFormKey.currentState?.validate(); + surveyFormKey.currentState?.validate(); if (!isValid!) { return; } @@ -379,8 +379,8 @@ class SurveyFormViewPageState extends LocalizedState { ), ), ...initialAttributes! - .where((att) => att.isActive == true) - .map(( + .where((att) => att.isActive == true) + .map(( e, ) { int index = (initialAttributes ?? []).indexOf(e); @@ -417,7 +417,7 @@ class SurveyFormViewPageState extends LocalizedState { onChange: (value) { field.didChange(value); controller[index].text = value; - surveyFormFormKey.currentState + surveyFormKey.currentState ?.validate(); }, errorMessage: field.errorText, @@ -465,7 +465,7 @@ class SurveyFormViewPageState extends LocalizedState { onChange: (value) { field.didChange(value); controller[index].text = value; - surveyFormFormKey.currentState + surveyFormKey.currentState ?.validate(); }, errorMessage: field.errorText, @@ -496,9 +496,8 @@ class SurveyFormViewPageState extends LocalizedState { builder: (context, state) { return Column( children: e.values! - .map((e) => DigitCheckbox( - label: localizations - .translate( + .map((item) => DigitCheckbox( + label: localizations.translate( '${selectedServiceDefinition?.code}.${item}'), value: controller[index] .text @@ -536,13 +535,10 @@ class SurveyFormViewPageState extends LocalizedState { ).value; // If the field is required and no option is selected, trigger validation - if (e.required == - true && + if (e.required == true && val.isEmpty) { - submitTriggered = - true; + submitTriggered = true; } - }, )) .toList(), @@ -727,91 +723,87 @@ class SurveyFormViewPageState extends LocalizedState { BlocBuilder( builder: (context, state) { return Align( - alignment: Alignment.topLeft, - child: FormField( - autovalidateMode: AutovalidateMode.onUserInteraction, - validator: (value1) { - if (item.required == true && - (controller[index].text == null || - controller[index].text == '')) { - return localizations.translate( - i18.common.coreCommonReasonRequired, - ); - } - - return null; - }, - builder: (field) => RadioList( - radioDigitButtons: item.values != null - ? item.values! - .where( - (e) => e != i18.surveyForm.notSelectedKey) - .toList() - .map((item) => RadioButtonModel( - code: item, - name: localizations.translate( - 'CORE_COMMON_${item.trim().toUpperCase()}', - ), - )) - .toList() - : [], - errorMessage: field.errorText, - groupValue: controller[index].text.trim(), - onChanged: (value) { - field.didChange(value); - context.read().add( - ServiceSurveyFormEvent( - value: Random().nextInt(100).toString(), - submitTriggered: submitTriggered, - ), + alignment: Alignment.topLeft, + child: FormField( + autovalidateMode: AutovalidateMode.onUserInteraction, + validator: (value1) { + if (item.required == true && + (controller[index].text == null || + controller[index].text == '')) { + return localizations.translate( + i18.common.coreCommonReasonRequired, ); - setState(() { - // Clear child controllers and update visibility - for (final matchingChildItem in childItems) { - final childIndex = - initialAttributes?.indexOf(matchingChildItem); - if (childIndex != null) { - // controller[childIndex].clear(); - visibleSurveyFormIndexes - .removeWhere((v) => v == childIndex); - } } - // Update the current controller's value - controller[index].value = - TextEditingController.fromValue( - TextEditingValue( - text: value!.code, - ), - ).value; + return null; + }, + builder: (field) => RadioList( + radioDigitButtons: item.values != null + ? item.values! + .where((e) => + e != i18.surveyForm.notSelectedKey) + .toList() + .map((item) => RadioButtonModel( + code: item, + name: localizations.translate( + 'CORE_COMMON_${item.trim().toUpperCase()}', + ), + )) + .toList() + : [], + errorMessage: field.errorText, + groupValue: controller[index].text.trim(), + onChanged: (value) { + field.didChange(value); + context.read().add( + ServiceSurveyFormEvent( + value: + Random().nextInt(100).toString(), + submitTriggered: submitTriggered, + ), + ); + setState(() { + // Clear child controllers and update visibility + for (final matchingChildItem + in childItems) { + final childIndex = initialAttributes + ?.indexOf(matchingChildItem); + if (childIndex != null) { + // controller[childIndex].clear(); + visibleSurveyFormIndexes.removeWhere( + (v) => v == childIndex); + } + } - if (excludedIndexes.isNotEmpty) { - for (int i = 0; i < excludedIndexes.length; i++) { - // Clear excluded child controllers - if (item.dataType != 'SingleValueList') { - // controller[excludedIndexes[i]].value = - // TextEditingController.fromValue( - // const TextEditingValue( - // text: '', - // ), - // ).value; - } - } - } + // Update the current controller's value + controller[index].value = + TextEditingController.fromValue( + TextEditingValue( + text: value!.code, + ), + ).value; - // Remove corresponding controllers based on the removed attributes - }); - }, - items: item.values != null - ? item.values! - .where((e) => e != i18.surveyForm.notSelectedKey) - .toList() - : [], - itemBuilder: (item) => - RadioButtonBuilder(localizations.translate( - '${selectedServiceDefinition?.code}.${item.trim()}', - )), - ); + if (excludedIndexes.isNotEmpty) { + for (int i = 0; + i < excludedIndexes.length; + i++) { + // Clear excluded child controllers + if (item.dataType != + 'SingleValueList') { + // controller[excludedIndexes[i]].value = + // TextEditingController.fromValue( + // const TextEditingValue( + // text: '', + // ), + // ).value; + } + } + } + + // Remove corresponding controllers based on the removed attributes + }); + }, + ))); }, ), BlocBuilder( @@ -972,7 +964,7 @@ class SurveyFormViewPageState extends LocalizedState { children: item.values! .map((e) => DigitCheckbox( label: localizations.translate( - '${selectedServiceDefinition?.code}.${e}'), + '${selectedServiceDefinition?.code}.${e}'), value: controller[index].text.split('.').contains(e), onChanged: (value) { From 13a7b3b585cbb9d6498d843afb1b14f3ef7af8da Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Thu, 12 Dec 2024 18:48:10 +0530 Subject: [PATCH 196/241] lock file changes --- packages/closed_household/pubspec.lock | 69 +- packages/digit_location_tracker/pubspec.lock | 989 +++++++++++++++++- packages/inventory_management/pubspec.lock | 64 +- packages/referral_reconciliation/pubspec.lock | 87 -- packages/survey_form/pubspec.lock | 65 +- 5 files changed, 1127 insertions(+), 147 deletions(-) diff --git a/packages/closed_household/pubspec.lock b/packages/closed_household/pubspec.lock index c160c8905..6f6e66ee7 100644 --- a/packages/closed_household/pubspec.lock +++ b/packages/closed_household/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -372,12 +380,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "5595f37310a63a92b2c1c7e386c74fe39df5555d" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git - version: "4.2.0" + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.3" dart_style: dependency: transitive description: @@ -417,6 +423,13 @@ packages: relative: true source: path version: "1.0.5-dev.1" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_scanner: dependency: "direct main" description: @@ -553,6 +566,46 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: @@ -1482,7 +1535,7 @@ packages: source: hosted version: "1.2.0" survey_form: - dependency: transitive + dependency: "direct overridden" description: path: "../survey_form" relative: true @@ -1769,5 +1822,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <3.9.0" + dart: ">=3.4.0 <4.0.0" flutter: ">=3.22.0" diff --git a/packages/digit_location_tracker/pubspec.lock b/packages/digit_location_tracker/pubspec.lock index 09c994d99..d31789108 100644 --- a/packages/digit_location_tracker/pubspec.lock +++ b/packages/digit_location_tracker/pubspec.lock @@ -1,6 +1,54 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" + url: "https://pub.dev" + source: hosted + version: "67.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" + url: "https://pub.dev" + source: hosted + version: "6.4.1" + ansicolor: + dependency: transitive + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + url: "https://pub.dev" + source: hosted + version: "2.0.3" + archive: + dependency: transitive + description: + name: archive + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d + url: "https://pub.dev" + source: hosted + version: "3.6.1" + args: + dependency: transitive + description: + name: args + sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6 + url: "https://pub.dev" + source: hosted + version: "2.6.0" async: dependency: transitive description: @@ -25,6 +73,110 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + build: + dependency: transitive + description: + name: build + sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + build_config: + dependency: transitive + description: + name: build_config + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" + source: hosted + version: "1.1.1" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + build_runner: + dependency: transitive + description: + name: build_runner + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" + url: "https://pub.dev" + source: hosted + version: "2.4.11" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: e3c79f69a64bdfcd8a776a3c28db4eb6e3fb5356d013ae5eb2e52007706d5dbe + url: "https://pub.dev" + source: hosted + version: "7.3.1" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb + url: "https://pub.dev" + source: hosted + version: "8.9.2" + camera: + dependency: transitive + description: + name: camera + sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167" + url: "https://pub.dev" + source: hosted + version: "0.11.0+2" + camera_android_camerax: + dependency: transitive + description: + name: camera_android_camerax + sha256: "011be2ab0e5b3e3aa8094413fa890f8c5c5afd7cfdaef353a992047d4dab5780" + url: "https://pub.dev" + source: hosted + version: "0.6.8+2" + camera_avfoundation: + dependency: transitive + description: + name: camera_avfoundation + sha256: "2e4c568f70e406ccb87376bc06b53d2f5bebaab71e2fbcc1a950e31449381bcf" + url: "https://pub.dev" + source: hosted + version: "0.9.17+5" + camera_platform_interface: + dependency: transitive + description: + name: camera_platform_interface + sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 + url: "https://pub.dev" + source: hosted + version: "2.8.0" + camera_web: + dependency: transitive + description: + name: camera_web + sha256: "595f28c89d1fb62d77c73c633193755b781c6d2e0ebcd8dc25b763b514e6ba8f" + url: "https://pub.dev" + source: hosted + version: "0.3.5" characters: dependency: transitive description: @@ -33,6 +185,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + charcode: + dependency: transitive + description: + name: charcode + sha256: fb0f1107cac15a5ea6ef0a6ef71a807b9e4267c713bb93e00e92d737cc8dbd8a + url: "https://pub.dev" + source: hosted + version: "1.4.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" clock: dependency: transitive description: @@ -41,6 +209,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 + url: "https://pub.dev" + source: hosted + version: "4.10.0" collection: dependency: transitive description: @@ -57,6 +233,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.1" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" + url: "https://pub.dev" + source: hosted + version: "0.3.4+2" crypto: dependency: transitive description: @@ -65,6 +249,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" + url: "https://pub.dev" + source: hosted + version: "1.0.2" dart_mappable: dependency: transitive description: @@ -73,22 +265,44 @@ packages: url: "https://pub.dev" source: hosted version: "4.3.0" - db_viewer: + dart_mappable_builder: + dependency: "direct overridden" + description: + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.3" + dart_style: dependency: transitive description: - name: db_viewer - sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" + name: dart_style + sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "2.3.6" digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "0e5a1f8c5f0548e573af9c0279942f2dbc332042865614e0b89fe5952002ef1f" - url: "https://pub.dev" - source: hosted - version: "1.0.4" + path: "../digit_data_model" + relative: true + source: path + version: "1.0.5-dev.1" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" + digit_ui_components: + dependency: transitive + description: + path: "flutter/digit-ui-components/digit_components" + ref: version_update + resolved-ref: c68a3ceb1f00c6128780c0cbeb58d9aa8c4d7a13 + url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" + source: git + version: "0.0.1+7" dio: dependency: transitive description: @@ -105,22 +319,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" - drift: + dotted_border: dependency: transitive description: - name: drift - sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" url: "https://pub.dev" source: hosted - version: "2.15.0" - drift_db_viewer: + version: "2.1.0" + drift: dependency: transitive description: - name: drift_db_viewer - sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" + name: drift + sha256: "4e0ffee40d23f0b809e6cff1ad202886f51d629649073ed42d9cd1d194ea943e" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.19.1+1" fake_async: dependency: transitive description: @@ -137,6 +351,102 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" + file: + dependency: transitive + description: + name: file + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://pub.dev" + source: hosted + version: "7.0.1" + file_picker: + dependency: transitive + description: + name: file_picker + sha256: "2ca051989f69d1b2ca012b2cf3ccf78c70d40144f0861ff2c063493f7c8c3d45" + url: "https://pub.dev" + source: hosted + version: "8.0.5" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc" + url: "https://pub.dev" + source: hosted + version: "0.9.4+2" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "8f5d2f6590d51ecd9179ba39c64f722edc15226cc93dcc8698466ad36a4a85a4" + url: "https://pub.dev" + source: hosted + version: "0.9.3+3" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be + url: "https://pub.dev" + source: hosted + version: "1.1.1" flutter: dependency: "direct main" description: flutter @@ -182,6 +492,30 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.6" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" flutter_lints: dependency: "direct dev" description: @@ -190,6 +524,43 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.3" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda" + url: "https://pub.dev" + source: hosted + version: "2.0.22" + flutter_spinkit: + dependency: transitive + description: + name: flutter_spinkit + sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 + url: "https://pub.dev" + source: hosted + version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + flutter_svg: + dependency: transitive + description: + name: flutter_svg + sha256: "54900a1a1243f3c4a5506d853a2b5c2dbc38d5f27e52a52618a8054401431123" + url: "https://pub.dev" + source: hosted + version: "2.0.16" flutter_test: dependency: "direct dev" description: flutter @@ -200,6 +571,14 @@ packages: description: flutter source: sdk version: "0.0.0" + fluttertoast: + dependency: transitive + description: + name: fluttertoast + sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" + url: "https://pub.dev" + source: hosted + version: "8.2.8" freezed_annotation: dependency: "direct main" description: @@ -208,6 +587,118 @@ packages: url: "https://pub.dev" source: hosted version: "2.4.4" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 + url: "https://pub.dev" + source: hosted + version: "4.0.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" + url: "https://pub.dev" + source: hosted + version: "4.6.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" + url: "https://pub.dev" + source: hosted + version: "2.3.8+1" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + google_fonts: + dependency: transitive + description: + name: google_fonts + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 + url: "https://pub.dev" + source: hosted + version: "6.2.1" + graphs: + dependency: transitive + description: + name: graphs + sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + horizontal_data_table: + dependency: transitive + description: + name: horizontal_data_table + sha256: c8ab5256bbced698a729f3e0ff2cb0e8e97416cdbb082860370eaf883badf722 + url: "https://pub.dev" + source: hosted + version: "4.3.1" + html: + dependency: transitive + description: + name: html + sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" + url: "https://pub.dev" + source: hosted + version: "0.15.5" + http: + dependency: transitive + description: + name: http + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 + url: "https://pub.dev" + source: hosted + version: "1.2.2" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" + source: hosted + version: "3.2.1" http_parser: dependency: transitive description: @@ -216,6 +707,86 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a" + url: "https://pub.dev" + source: hosted + version: "1.1.2" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "8c5abf0dcc24fe6e8e0b4a5c0b51a5cf30cefdf6407a3213dae61edc75a70f56" + url: "https://pub.dev" + source: hosted + version: "0.8.12+12" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83" + url: "https://pub.dev" + source: hosted + version: "3.0.6" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: "4f0568120c6fcc0aaa04511cb9f9f4d29fc3d0139884b1d06be88dcec7641d6b" + url: "https://pub.dev" + source: hosted + version: "0.8.12+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: "9ec26d410ff46f483c5519c29c02ef0e02e13a543f882b152d4bfd2f06802f80" + url: "https://pub.dev" + source: hosted + version: "2.10.0" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + intl: + dependency: transitive + description: + name: intl + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + url: "https://pub.dev" + source: hosted + version: "0.19.0" + io: + dependency: transitive + description: + name: io + sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b + url: "https://pub.dev" + source: hosted + version: "1.0.5" isar: dependency: "direct main" description: @@ -248,6 +819,30 @@ packages: url: "https://pub.dev" source: hosted version: "4.9.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -260,50 +855,74 @@ packages: dependency: "direct main" description: name: location - sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1" + sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "6.0.2" location_platform_interface: dependency: "direct main" description: name: location_platform_interface - sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1" + sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.0" location_web: dependency: transitive description: name: location_web - sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b + sha256: "49dda13d415c4603c5775a33fb22f575e0aa3f0ec2916644ddcd722db31ee884" + url: "https://pub.dev" + source: hosted + version: "5.0.2" + logging: + dependency: transitive + description: + name: logging + sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 + url: "https://pub.dev" + source: hosted + version: "1.3.0" + lottie: + dependency: transitive + description: + name: lottie + sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "3.1.3" matcher: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" + mime: + dependency: transitive + description: + name: mime + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" + url: "https://pub.dev" + source: hosted + version: "1.0.6" mocktail: dependency: transitive description: @@ -320,14 +939,46 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" + overlay_builder: + dependency: transitive + description: + name: overlay_builder + sha256: "58b97bc5f67a2e2bb7006dd88e697ac757dfffc9dbd1e7dfc1917fb510a4b5c8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + package_config: + dependency: transitive + description: + name: package_config + sha256: "92d4488434b520a62570293fbd33bb556c7d49230791c1b4bbd973baf6d2dc67" + url: "https://pub.dev" + source: hosted + version: "2.1.1" path: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + url: "https://pub.dev" + source: hosted + version: "1.9.0" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.1.0" path_provider: dependency: "direct main" description: @@ -424,6 +1075,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.1" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + url: "https://pub.dev" + source: hosted + version: "6.0.2" platform: dependency: transitive description: @@ -440,6 +1099,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" provider: dependency: transitive description: @@ -448,6 +1115,30 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.2" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "7b3cfbf654f3edd0c6298ecd5be782ce997ddf0e00531b9464b55245185bbbbd" + url: "https://pub.dev" + source: hosted + version: "2.1.5" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 + url: "https://pub.dev" + source: hosted + version: "1.3.0" + reactive_forms: + dependency: transitive + description: + name: reactive_forms + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" + url: "https://pub.dev" + source: hosted + version: "17.0.1" recase: dependency: transitive description: @@ -456,11 +1147,35 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" + shelf: + dependency: transitive + description: + name: shelf + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 + url: "https://pub.dev" + source: hosted + version: "1.4.1" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67 + url: "https://pub.dev" + source: hosted + version: "2.0.1" sky_engine: dependency: transitive description: flutter source: sdk version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" + url: "https://pub.dev" + source: hosted + version: "1.5.0" source_span: dependency: transitive description: @@ -469,14 +1184,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqlite3: dependency: transitive description: name: sqlite3 - sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" + sha256: fde692580bee3379374af1f624eb3e113ab2865ecb161dbe2d8ac2de9735dbdb url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.5" sqlite3_flutter_libs: dependency: transitive description: @@ -501,6 +1224,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.2" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" string_scanner: dependency: transitive description: @@ -521,10 +1252,18 @@ packages: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" + timing: + dependency: transitive + description: + name: timing + sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe" + url: "https://pub.dev" + source: hosted + version: "1.0.2" type_plus: dependency: transitive description: @@ -541,14 +1280,118 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + url_launcher: + dependency: transitive + description: + name: url_launcher + sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" + url: "https://pub.dev" + source: hosted + version: "6.3.1" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79 + url: "https://pub.dev" + source: hosted + version: "6.3.9" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2" + url: "https://pub.dev" + source: hosted + version: "3.2.2" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" + url: "https://pub.dev" + source: hosted + version: "2.3.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4" + url: "https://pub.dev" + source: hosted + version: "3.1.3" uuid: dependency: transitive description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.5.1" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: "27d5fefe86fb9aace4a9f8375b56b3c292b64d8c04510df230f849850d912cb7" + url: "https://pub.dev" + source: hosted + version: "1.1.15" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: "2430b973a4ca3c4dbc9999b62b8c719a160100dcbae5c819bae0cacce32c9cdb" + url: "https://pub.dev" + source: hosted + version: "1.1.12" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "1b4b9e706a10294258727674a340ae0d6e64a7231980f9f9a3d12e4b42407aad" + url: "https://pub.dev" + source: hosted + version: "1.1.16" vector_math: dependency: transitive description: @@ -557,14 +1400,62 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + url: "https://pub.dev" + source: hosted + version: "14.2.1" + watcher: + dependency: transitive + description: + name: watcher + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" web: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + url: "https://pub.dev" + source: hosted + version: "0.5.1" + web_socket: + dependency: transitive + description: + name: web_socket + sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83" + url: "https://pub.dev" + source: hosted + version: "0.1.6" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + win32: + dependency: transitive + description: + name: win32 + sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "5.2.0" xdg_directories: dependency: transitive description: @@ -573,6 +1464,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" sdks: - dart: ">=3.2.0 <4.0.0" - flutter: ">=3.16.0" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.22.0" diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index 7d6603fd7..e19206faf 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -372,10 +380,9 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - name: dart_mappable_builder - sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e - url: "https://pub.dev" - source: hosted + path: "../dart_mappable_builder" + relative: true + source: path version: "4.2.3" dart_style: dependency: transitive @@ -408,6 +415,13 @@ packages: relative: true source: path version: "1.0.5-dev.1" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_scanner: dependency: "direct main" description: @@ -528,6 +542,46 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+3" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: @@ -1626,5 +1680,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <3.9.0" + dart: ">=3.4.0 <4.0.0" flutter: ">=3.22.0" diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index 1f63b6e7d..d970ecf56 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -392,14 +392,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.2" - db_viewer: - dependency: transitive - description: - name: db_viewer - sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" - url: "https://pub.dev" - source: hosted - version: "1.1.0" diff_match_patch: dependency: transitive description: @@ -408,13 +400,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.1" - digit_components: - dependency: transitive - description: - path: "../digit_components" - relative: true - source: path - version: "1.0.2+1" digit_data_model: dependency: "direct main" description: @@ -469,14 +454,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.18.0" - drift_db_viewer: - dependency: "direct main" - description: - name: drift_db_viewer - sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" drift_dev: dependency: "direct dev" description: @@ -485,14 +462,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.18.0" - easy_stepper: - dependency: transitive - description: - name: easy_stepper - sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" - url: "https://pub.dev" - source: hosted - version: "0.8.5+1" fake_async: dependency: transitive description: @@ -642,14 +611,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.13" - flutter_focus_watcher: - dependency: transitive - description: - name: flutter_focus_watcher - sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 - url: "https://pub.dev" - source: hosted - version: "2.0.0" flutter_keyboard_visibility: dependency: "direct main" description: @@ -748,14 +709,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" flutter_web_plugins: dependency: transitive description: flutter @@ -1201,22 +1154,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - package_info_plus: - dependency: transitive - description: - name: package_info_plus - sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 - url: "https://pub.dev" - source: hosted - version: "8.0.2" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 - url: "https://pub.dev" - source: hosted - version: "3.0.1" path: dependency: "direct main" description: @@ -1321,14 +1258,6 @@ packages: url: "https://pub.dev" source: hosted version: "8.0.0" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" pool: dependency: transitive description: @@ -1361,14 +1290,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.3" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a - url: "https://pub.dev" - source: hosted - version: "2.1.1" reactive_forms: dependency: "direct main" description: @@ -1385,14 +1306,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" - remove_emoji_input_formatter: - dependency: transitive - description: - name: remove_emoji_input_formatter - sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" - url: "https://pub.dev" - source: hosted - version: "0.0.1+1" rxdart: dependency: transitive description: diff --git a/packages/survey_form/pubspec.lock b/packages/survey_form/pubspec.lock index de2848dff..79ce9b65c 100644 --- a/packages/survey_form/pubspec.lock +++ b/packages/survey_form/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "64.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -308,12 +316,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "5595f37310a63a92b2c1c7e386c74fe39df5555d" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git - version: "4.2.0" + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.3" dart_style: dependency: transitive description: @@ -337,6 +343,13 @@ packages: relative: true source: path version: "1.0.5-dev.1" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_ui_components: dependency: "direct main" description: @@ -450,6 +463,46 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: From ce3a71b1e2ada7bfee9b810911b1d91ebb24af4b Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Thu, 12 Dec 2024 23:10:44 +0530 Subject: [PATCH 197/241] added missing userLocation case for sync count inventory package component upgrade fixes --- .../lib/data/sync_service_mapper.dart | 7 +- .../lib/utils/utils.dart | 48 - .../lib/pages/acknowledgement.dart | 76 +- .../record_stock/record_stock_wrapper.dart | 28 +- .../lib/pages/record_stock/stock_details.dart | 1597 +++++++++-------- 5 files changed, 868 insertions(+), 888 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart b/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart index fd75729bb..5de83bfb2 100644 --- a/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart +++ b/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart @@ -1,17 +1,13 @@ import 'dart:async'; import 'dart:convert'; -import 'package:attendance_management/attendance_management.dart'; import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; -import 'package:inventory_management/inventory_management.dart'; -import 'package:referral_reconciliation/referral_reconciliation.dart'; import 'package:registration_delivery/registration_delivery.dart'; -import 'package:sync_service/data/sync_entity_mapper_listener.dart'; import 'package:sync_service/data/repositories/sync/remote_type.dart'; +import 'package:sync_service/data/sync_entity_mapper_listener.dart'; import '../sync_annotation_module.sync.dart'; -import '../utils/environment_config.dart'; class SyncServiceMapper extends SyncEntityMapperListener { @override @@ -121,6 +117,7 @@ class SyncServiceMapper extends SyncEntityMapperListener { case DataModelType.referral: case DataModelType.hFReferral: case DataModelType.attendance: + case DataModelType.userLocation: return true; default: return false; diff --git a/apps/health_campaign_field_worker_app/lib/utils/utils.dart b/apps/health_campaign_field_worker_app/lib/utils/utils.dart index a48608bd8..fbcdb809f 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/utils.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/utils.dart @@ -11,7 +11,6 @@ import 'package:digit_components/theme/digit_theme.dart'; import 'package:digit_components/widgets/atoms/digit_toaster.dart'; import 'package:digit_components/widgets/digit_dialog.dart'; import 'package:digit_components/widgets/digit_sync_dialog.dart'; -import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/data_model.init.dart' as data_model_mappers; import 'package:digit_dss/digit_dss.dart' as dss_mappers; import 'package:disable_battery_optimization/disable_battery_optimization.dart'; @@ -407,53 +406,6 @@ initializeAllMappers() async { await Future.wait(initializations); } -int getSyncCount(List oplogs) { - int count = oplogs.where((element) { - if (element.syncedDown == false && element.syncedUp == true) { - switch (element.entityType) { - case DataModelType.household: - case DataModelType.individual: - case DataModelType.householdMember: - case DataModelType.projectBeneficiary: - case DataModelType.task: - case DataModelType.stock: - case DataModelType.stockReconciliation: - case DataModelType.sideEffect: - case DataModelType.referral: - case DataModelType.hFReferral: - case DataModelType.attendance: - case DataModelType.service: - return true; - default: - return false; - } - } else { - switch (element.entityType) { - // add syncCount case for package - case DataModelType.household: - case DataModelType.individual: - case DataModelType.householdMember: - case DataModelType.projectBeneficiary: - case DataModelType.task: - case DataModelType.stock: - case DataModelType.stockReconciliation: - case DataModelType.service: - case DataModelType.complaints: - case DataModelType.sideEffect: - case DataModelType.referral: - case DataModelType.hFReferral: - case DataModelType.attendance: - case DataModelType.userLocation: - return true; - default: - return false; - } - } - }).length; - - return count; -} - class LocalizationParams { static final LocalizationParams _singleton = LocalizationParams._internal(); diff --git a/packages/inventory_management/lib/pages/acknowledgement.dart b/packages/inventory_management/lib/pages/acknowledgement.dart index 875cf9485..5eabb5f28 100644 --- a/packages/inventory_management/lib/pages/acknowledgement.dart +++ b/packages/inventory_management/lib/pages/acknowledgement.dart @@ -3,6 +3,7 @@ import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/molecules/panel_cards.dart'; import 'package:flutter/material.dart'; + import '../utils/i18_key_constants.dart' as i18; import '../widgets/localized.dart'; @@ -12,6 +13,7 @@ class InventoryAcknowledgementPage extends LocalizedStatefulWidget { final String? label; final String? description; final Map? descriptionTableData; + const InventoryAcknowledgementPage({ super.key, super.appLocalizations, @@ -34,7 +36,7 @@ class AcknowledgementPageState return Scaffold( body: PanelCard( - title: widget.label ?? + title: widget.label ?? localizations.translate( i18.acknowledgementSuccess.acknowledgementLabelText, ), @@ -43,6 +45,7 @@ class AcknowledgementPageState localizations.translate( i18.acknowledgementSuccess.acknowledgementDescriptionText, ), + /// TODO: need to update this as listview card // additionWidgets: widget.isDataRecordSuccess // ? DigitTableCard( @@ -51,23 +54,24 @@ class AcknowledgementPageState // : null, actions: [ DigitButton( - label: localizations.translate(i18.acknowledgementSuccess.actionLabelText), + label: localizations.translate( + i18.acknowledgementSuccess.acknowledgementLabelText), onPressed: () { context.router.maybePop(); }, type: DigitButtonType.primary, size: DigitButtonSize.large), - if(!widget.isDataRecordSuccess) - DigitButton( - label: localizations - .translate(i18.acknowledgementSuccess.actionLabelText), - onPressed: () { - final parent = context.router.parent() as StackRouter; - // Pop twice to navigate back to the previous screen - parent.popUntilRoot(); - }, - type: DigitButtonType.secondary, - size: DigitButtonSize.large), + if (!widget.isDataRecordSuccess) + DigitButton( + label: localizations + .translate(i18.acknowledgementSuccess.actionLabelText), + onPressed: () { + final parent = context.router.parent() as StackRouter; + // Pop twice to navigate back to the previous screen + parent.popUntilRoot(); + }, + type: DigitButtonType.secondary, + size: DigitButtonSize.large), ], // action: () { // context.router.maybePop(); @@ -84,31 +88,31 @@ class AcknowledgementPageState child: DigitCard( margin: const EdgeInsets.fromLTRB(0, spacer2, 0, 0), children: [ - DigitButton( - size: DigitButtonSize.large, - type: DigitButtonType.secondary, - label: localizations - .translate(i18.acknowledgementSuccess.goToHome), - onPressed: () { - context.router.popUntilRoot(); - }, - ), - const SizedBox( - height: 12, - ), - DigitButton( - size: DigitButtonSize.large, - type: DigitButtonType.primary, - onPressed: () { - context.router.popUntilRoot(); - }, - label: localizations - .translate(i18.acknowledgementSuccess.downloadmoredata), - ), - ], - ), + DigitButton( + size: DigitButtonSize.large, + type: DigitButtonType.secondary, + label: localizations + .translate(i18.acknowledgementSuccess.goToHome), + onPressed: () { + context.router.popUntilRoot(); + }, + ), + const SizedBox( + height: 12, + ), + DigitButton( + size: DigitButtonSize.large, + type: DigitButtonType.primary, + onPressed: () { + context.router.popUntilRoot(); + }, + label: localizations + .translate(i18.acknowledgementSuccess.downloadmoredata), + ), + ], ), ), + ), ); } } diff --git a/packages/inventory_management/lib/pages/record_stock/record_stock_wrapper.dart b/packages/inventory_management/lib/pages/record_stock/record_stock_wrapper.dart index b066065f4..3b82830a9 100644 --- a/packages/inventory_management/lib/pages/record_stock/record_stock_wrapper.dart +++ b/packages/inventory_management/lib/pages/record_stock/record_stock_wrapper.dart @@ -1,11 +1,14 @@ // Importing necessary packages and modules import 'package:auto_route/auto_route.dart'; +import 'package:digit_ui_components/services/location_bloc.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:inventory_management/inventory_management.dart'; import 'package:inventory_management/utils/extensions/extensions.dart'; import 'package:inventory_management/widgets/component_wrapper/facility_bloc_wrapper.dart'; import 'package:inventory_management/widgets/component_wrapper/product_variant_bloc_wrapper.dart'; +import 'package:location/location.dart'; + import '../../blocs/record_stock.dart'; // This class is a wrapper for the RecordStock page. @@ -39,15 +42,24 @@ class RecordStockWrapperPage extends StatelessWidget projectId: InventorySingleton().projectId, child: ProductVariantBlocWrapper( projectId: InventorySingleton().projectId, - child: BlocProvider( - create: (_) => RecordStockBloc( - stockRepository: - context.repository(context), - RecordStockCreateState( - entryType: type, - projectId: InventorySingleton().projectId, + child: MultiBlocProvider( + providers: [ + BlocProvider( + create: (context) { + return RecordStockBloc( + stockRepository: context + .repository(context), + RecordStockCreateState( + entryType: type, + projectId: InventorySingleton().projectId, + ), + ); + }, + ), + BlocProvider( + create: (_) => LocationBloc(location: Location()), ), - ), + ], child: this, ), ), diff --git a/packages/inventory_management/lib/pages/record_stock/stock_details.dart b/packages/inventory_management/lib/pages/record_stock/stock_details.dart index dcfc4496e..7f98225e4 100644 --- a/packages/inventory_management/lib/pages/record_stock/stock_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/stock_details.dart @@ -9,7 +9,6 @@ import 'package:digit_ui_components/widgets/atoms/input_wrapper.dart'; import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; -import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:gs1_barcode_parser/gs1_barcode_parser.dart'; @@ -211,878 +210,894 @@ class StockDetailsPageState extends LocalizedState { children: [ ReactiveFormConsumer( builder: (context, form, child) { - if (form + if (form .control(_deliveryTeamKey) .value .toString() .isEmpty || - form.control(_deliveryTeamKey).value == null || - scannerState.qrCodes.isNotEmpty) { - form.control(_deliveryTeamKey).value = + form.control(_deliveryTeamKey).value == + null || + scannerState.qrCodes.isNotEmpty) { + form.control(_deliveryTeamKey).value = scannerState.qrCodes.isNotEmpty ? scannerState.qrCodes.last : ''; - } - return DigitButton( - type: DigitButtonType.primary, - size: DigitButtonSize.large, - onPressed: !form.valid - ? (){} - : () async { - form.markAllAsTouched(); - if (!form.valid) { - return; - } - final primaryId = - BlocProvider.of( - context, - ).state.primaryId; - final secondaryParty = - selectedFacilityId != null - ? FacilityModel( - id: selectedFacilityId - .toString(), - ) - : null; - final deliveryTeamName = form - .control(_deliveryTeamKey) - .value as String?; - - if (deliveryTeamSelected && - (form - .control( - _deliveryTeamKey, - ) - .value == - null || - form - .control(_deliveryTeamKey) - .value - .toString() - .trim() - .isEmpty)) { - Toast.showToast( - context, - type: ToastType.error, - message: localizations.translate( - i18.stockDetails.teamCodeRequired, - ), - ); - } else if ((primaryId == - secondaryParty?.id) || - (primaryId == deliveryTeamName)) { - Toast.showToast( + } + return DigitButton( + type: DigitButtonType.primary, + size: DigitButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: !form.valid + ? () {} + : () async { + form.markAllAsTouched(); + if (!form.valid) { + return; + } + final primaryId = + BlocProvider.of( context, - type: ToastType.error, - message: localizations.translate( - i18.stockDetails - .senderReceiverValidation, - ), - ); - } else { - FocusManager.instance.primaryFocus - ?.unfocus(); - context - .read() - .add(const LoadLocationEvent()); - DigitComponentsUtils - .showDialog( + ).state.primaryId; + final secondaryParty = + selectedFacilityId != null + ? FacilityModel( + id: selectedFacilityId + .toString(), + ) + : null; + final deliveryTeamName = form + .control(_deliveryTeamKey) + .value as String?; + + if (deliveryTeamSelected && + (form + .control( + _deliveryTeamKey, + ) + .value == + null || + form + .control(_deliveryTeamKey) + .value + .toString() + .trim() + .isEmpty)) { + Toast.showToast( + context, + type: ToastType.error, + message: localizations.translate( + i18.stockDetails.teamCodeRequired, + ), + ); + } else if ((primaryId == + secondaryParty?.id) || + (primaryId == deliveryTeamName)) { + Toast.showToast( context, - localizations.translate(i18 - .common.locationCapturing), - DialogType.inProgress); - Future.delayed( - const Duration(seconds: 2), - () async { - DigitComponentsUtils - .hideDialog(context); - final bloc = - context.read(); + type: ToastType.error, + message: localizations.translate( + i18.stockDetails + .senderReceiverValidation, + ), + ); + } else { + FocusManager.instance.primaryFocus + ?.unfocus(); + context + .read() + .add(const LoadLocationEvent()); + DigitComponentsUtils.showDialog( + context, + localizations.translate( + i18.common.locationCapturing), + DialogType.inProgress); + Future.delayed( + const Duration(seconds: 2), + () async { + DigitComponentsUtils.hideDialog( + context); + final bloc = + context.read(); - final productVariant = form - .control(_productVariantKey) - .value as ProductVariantModel; + final productVariant = form + .control(_productVariantKey) + .value as ProductVariantModel; - switch (entryType) { - case StockRecordEntryType.receipt: - transactionReason = - TransactionReason.received - .toValue(); - break; - case StockRecordEntryType.dispatch: - transactionReason = null; - break; - case StockRecordEntryType.returned: - transactionReason = - TransactionReason.returned - .toValue(); - break; - default: - transactionReason = form - .control( - _transactionReasonKey, - ) - .value as String?; - break; - } + switch (entryType) { + case StockRecordEntryType.receipt: + transactionReason = + TransactionReason.received + .toValue(); + break; + case StockRecordEntryType + .dispatch: + transactionReason = null; + break; + case StockRecordEntryType + .returned: + transactionReason = + TransactionReason.returned + .toValue(); + break; + default: + transactionReason = form + .control( + _transactionReasonKey, + ) + .value as String?; + break; + } - final quantity = form - .control(_transactionQuantityKey) - .value; + final quantity = form + .control( + _transactionQuantityKey) + .value; - final waybillNumber = form - .control(_waybillNumberKey) - .value as String?; + final waybillNumber = form + .control(_waybillNumberKey) + .value as String?; - final waybillQuantity = form - .control(_waybillQuantityKey) - .value as String?; + final waybillQuantity = form + .control(_waybillQuantityKey) + .value as String?; - final vehicleNumber = form - .control(_vehicleNumberKey) - .value as String?; + final vehicleNumber = form + .control(_vehicleNumberKey) + .value as String?; - final lat = locationState.latitude; - final lng = locationState.longitude; + final lat = locationState.latitude; + final lng = locationState.longitude; - final hasLocationData = - lat != null && lng != null; + final hasLocationData = + lat != null && lng != null; - final comments = form - .control(_commentsKey) - .value as String?; + final comments = form + .control(_commentsKey) + .value as String?; - final deliveryTeamName = form - .control(_deliveryTeamKey) - .value as String?; + final deliveryTeamName = form + .control(_deliveryTeamKey) + .value as String?; - String? senderId; - String? senderType; - String? receiverId; - String? receiverType; + String? senderId; + String? senderType; + String? receiverId; + String? receiverType; - final primaryType = - BlocProvider.of( - context, - ).state.primaryType; + final primaryType = BlocProvider.of< + RecordStockBloc>( + context, + ).state.primaryType; - final primaryId = - BlocProvider.of( - context, - ).state.primaryId; + final primaryId = BlocProvider.of< + RecordStockBloc>( + context, + ).state.primaryId; - switch (entryType) { - case StockRecordEntryType.receipt: - case StockRecordEntryType.loss: - case StockRecordEntryType.damaged: - case StockRecordEntryType.returned: - if (deliveryTeamSelected) { - senderId = deliveryTeamName; - senderType = "STAFF"; - } else { - senderId = secondaryParty?.id; - senderType = "WAREHOUSE"; - } - receiverId = primaryId; - receiverType = primaryType; + switch (entryType) { + case StockRecordEntryType.receipt: + case StockRecordEntryType.loss: + case StockRecordEntryType.damaged: + case StockRecordEntryType + .returned: + if (deliveryTeamSelected) { + senderId = deliveryTeamName; + senderType = "STAFF"; + } else { + senderId = secondaryParty?.id; + senderType = "WAREHOUSE"; + } + receiverId = primaryId; + receiverType = primaryType; - break; - case StockRecordEntryType.dispatch: - if (deliveryTeamSelected) { - receiverId = deliveryTeamName; - receiverType = "STAFF"; - } else { - receiverId = secondaryParty?.id; - receiverType = "WAREHOUSE"; - } - senderId = primaryId; - senderType = primaryType; - break; - } + break; + case StockRecordEntryType + .dispatch: + if (deliveryTeamSelected) { + receiverId = deliveryTeamName; + receiverType = "STAFF"; + } else { + receiverId = + secondaryParty?.id; + receiverType = "WAREHOUSE"; + } + senderId = primaryId; + senderType = primaryType; + break; + } - final stockModel = StockModel( - clientReferenceId: - IdGen.i.identifier, - productVariantId: productVariant.id, - transactionReason: - transactionReason, - transactionType: transactionType, - referenceId: stockState.projectId, - referenceIdType: 'PROJECT', - quantity: quantity.toString(), - wayBillNumber: waybillNumber, - receiverId: receiverId, - receiverType: receiverType, - senderId: senderId, - senderType: senderType, - auditDetails: AuditDetails( - createdBy: InventorySingleton() - .loggedInUserUuid, - createdTime: context - .millisecondsSinceEpoch(), - ), - clientAuditDetails: - ClientAuditDetails( - createdBy: InventorySingleton() - .loggedInUserUuid, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: - InventorySingleton() - .loggedInUserUuid, - lastModifiedTime: context - .millisecondsSinceEpoch(), - ), - additionalFields: [ - waybillQuantity, - vehicleNumber, - comments, - ].any((element) => - element != null) || - hasLocationData - ? StockAdditionalFields( - version: 1, - fields: [ - AdditionalField( - InventoryManagementEnums - .name - .toValue(), - InventorySingleton() - .loggedInUser - ?.name, - ), - if (waybillQuantity != - null && - waybillQuantity - .trim() - .isNotEmpty) - AdditionalField( - 'waybill_quantity', + final stockModel = StockModel( + clientReferenceId: + IdGen.i.identifier, + productVariantId: + productVariant.id, + transactionReason: + transactionReason, + transactionType: transactionType, + referenceId: stockState.projectId, + referenceIdType: 'PROJECT', + quantity: quantity.toString(), + wayBillNumber: waybillNumber, + receiverId: receiverId, + receiverType: receiverType, + senderId: senderId, + senderType: senderType, + auditDetails: AuditDetails( + createdBy: InventorySingleton() + .loggedInUserUuid, + createdTime: context + .millisecondsSinceEpoch(), + ), + clientAuditDetails: + ClientAuditDetails( + createdBy: InventorySingleton() + .loggedInUserUuid, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: + InventorySingleton() + .loggedInUserUuid, + lastModifiedTime: context + .millisecondsSinceEpoch(), + ), + additionalFields: [ waybillQuantity, - ), - if (vehicleNumber != - null && - vehicleNumber - .trim() - .isNotEmpty) - AdditionalField( - 'vehicle_number', vehicleNumber, - ), - if (comments != null && - comments - .trim() - .isNotEmpty) - AdditionalField( - 'comments', comments, - ), - if (deliveryTeamName != - null && - deliveryTeamName - .trim() + ].any((element) => + element != null) || + hasLocationData + ? StockAdditionalFields( + version: 1, + fields: [ + AdditionalField( + InventoryManagementEnums + .name + .toValue(), + InventorySingleton() + .loggedInUser + ?.name, + ), + if (waybillQuantity != + null && + waybillQuantity + .trim() + .isNotEmpty) + AdditionalField( + 'waybill_quantity', + waybillQuantity, + ), + if (vehicleNumber != + null && + vehicleNumber + .trim() + .isNotEmpty) + AdditionalField( + 'vehicle_number', + vehicleNumber, + ), + if (comments != null && + comments + .trim() + .isNotEmpty) + AdditionalField( + 'comments', + comments, + ), + if (deliveryTeamName != + null && + deliveryTeamName + .trim() + .isNotEmpty) + AdditionalField( + 'deliveryTeam', + deliveryTeamName, + ), + if (hasLocationData) ...[ + AdditionalField( + 'lat', + lat, + ), + AdditionalField( + 'lng', + lng, + ), + ], + if (scannerState + .barCodes .isNotEmpty) - AdditionalField( - 'deliveryTeam', - deliveryTeamName, - ), - if (hasLocationData) ...[ - AdditionalField( - 'lat', - lat, - ), - AdditionalField( - 'lng', - lng, - ), - ], - if (scannerState - .barCodes.isNotEmpty) - addBarCodesToFields( - scannerState - .barCodes), - ], - ) - : null, - ); + addBarCodesToFields( + scannerState + .barCodes), + ], + ) + : null, + ); - bloc.add( - RecordStockSaveStockDetailsEvent( - stockModel: stockModel, - ), - ); + bloc.add( + RecordStockSaveStockDetailsEvent( + stockModel: stockModel, + ), + ); - final submit = - showCustomPopup( - context: context, - builder: (popupContext) => Popup( - title:localizations.translate( - i18.stockDetails.dialogTitle, - ), - onOutsideTap: () { - Navigator.of(popupContext).pop(false); - }, - description:localizations.translate( - i18.stockDetails.dialogContent, - ), - type: PopUpType.simple, - actions: [ - DigitButton( - label: localizations.translate( - i18.common.coreCommonSubmit, - ), - onPressed: () { - Navigator.of( - popupContext, - rootNavigator: true, - ).pop(true); - }, - type: DigitButtonType.primary, - size: DigitButtonSize.large, + final submit = + await showCustomPopup( + context: context, + builder: (popupContext) => Popup( + title: localizations.translate( + i18.stockDetails.dialogTitle, + ), + onOutsideTap: () { + Navigator.of(popupContext) + .pop(false); + }, + description: + localizations.translate( + i18.stockDetails + .dialogContent, + ), + type: PopUpType.simple, + actions: [ + DigitButton( + label: + localizations.translate( + i18.common + .coreCommonSubmit, ), - DigitButton( - label: localizations.translate( - i18.common.coreCommonCancel, - ), - onPressed: () { - Navigator.of( - popupContext, - rootNavigator: true, - ).pop(false); - }, - type: DigitButtonType.primary, - size: DigitButtonSize.large, + onPressed: () { + Navigator.of( + popupContext, + rootNavigator: true, + ).pop(true); + }, + type: + DigitButtonType.primary, + size: DigitButtonSize.large, + ), + DigitButton( + label: + localizations.translate( + i18.common + .coreCommonCancel, ), - ], - ), - ) as bool; + onPressed: () { + Navigator.of( + popupContext, + rootNavigator: true, + ).pop(false); + }, + type: + DigitButtonType.primary, + size: DigitButtonSize.large, + ), + ], + ), + ) as bool; - if (submit ?? false) { - bloc.add( - const RecordStockCreateStockEntryEvent(), - ); - } - }); - } - }, - isDisabled: !form.valid, - label: localizations - .translate(i18.common.coreCommonSubmit), - ); - }) + if (submit ?? false) { + bloc.add( + const RecordStockCreateStockEntryEvent(), + ); + } + }); + } + }, + isDisabled: !form.valid, + label: localizations + .translate(i18.common.coreCommonSubmit), + ); + }) ], ), children: [ DigitCard( - children: [ - Text( - localizations.translate(pageTitle), - style: theme.textTheme.displayMedium, - ), - BlocBuilder( - builder: (context, state) { - return state.maybeWhen( - orElse: () => const Offstage(), - loading: () => const Center( - child: CircularProgressIndicator(), + children: [ + Text( + localizations.translate(pageTitle), + style: theme.textTheme.displayMedium, + ), + BlocBuilder( + builder: (context, state) { + return state.maybeWhen( + orElse: () => const Offstage(), + loading: () => const Center( + child: CircularProgressIndicator(), + ), + empty: () => Center( + child: Text(localizations.translate( + i18.stockDetails.noProductsFound, + )), + ), + fetched: (productVariants) { + return ReactiveWrapperField( + formControlName: _productVariantKey, + validationMessages: { + 'required': (object) => + '${module.selectProductLabel}_IS_REQUIRED', + }, + showErrors: (control) => + control.invalid && control.touched, + builder: (field) { + return LabeledField( + label: localizations.translate( + module.selectProductLabel, + ), + isRequired: true, + child: DigitDropdown( + errorMessage: field.errorText, + emptyItemText: + localizations.translate( + i18.common.noMatchFound, + ), + items: productVariants + .map((variant) { + return DropdownItem( + name: localizations.translate( + variant.sku ?? variant.id, + ), + code: variant.id, + ); + }).toList(), + onSelect: (value) { + /// Find the selected product variant model by matching the id + final selectedVariant = + productVariants.firstWhere( + (variant) => + variant.id == value.code, + ); + + /// Update the form control with the selected product variant model + field.control.value = + selectedVariant; + }, + ), + ); + }, + ); + }, + ); + }, + ), + if ([ + StockRecordEntryType.loss, + StockRecordEntryType.damaged, + ].contains(entryType)) + ReactiveWrapperField( + formControlName: _transactionReasonKey, + builder: (field) { + return LabeledField( + label: localizations.translate( + transactionReasonLabel ?? 'Reason', ), - empty: () => Center( - child: Text(localizations.translate( - i18.stockDetails.noProductsFound, - )), + isRequired: true, + child: DigitDropdown( + emptyItemText: localizations.translate( + i18.common.noMatchFound, + ), + items: reasons!.map((reason) { + return DropdownItem( + name: + localizations.translate(reason), + code: reason.toString(), + ); + }).toList(), + onSelect: (value) { + final selectedReason = + reasons?.firstWhere( + (reason) => + reason.toString() == value.code, + ); + field.control.value = selectedReason; + }, ), - fetched: (productVariants) { - return ReactiveWrapperField( - formControlName: _productVariantKey, - validationMessages: { - 'required': (object) => - '${module.selectProductLabel}_IS_REQUIRED', - }, - showErrors: (control) => control.invalid && control.touched, - builder: (field) { - return LabeledField( - label: localizations.translate( - module.selectProductLabel, - ), - isRequired: true, - child: DigitDropdown( - errorMessage: field.errorText, - emptyItemText: - localizations.translate( - i18.common.noMatchFound, - ), - items: productVariants - .map((variant) { - return DropdownItem( - name: - localizations.translate( - variant.sku ?? variant.id, - ), - code: variant.id, - ); - }).toList(), - onSelect: (value) { - /// Find the selected product variant model by matching the id - final selectedVariant = - productVariants - .firstWhere( - (variant) => - variant.id == - value.code, - ); - /// Update the form control with the selected product variant model - field.control.value = - selectedVariant; - }, - ), - ); - }, - ); - }, ); }, ), - if ([ - StockRecordEntryType.loss, - StockRecordEntryType.damaged, - ].contains(entryType)) - ReactiveWrapperField( - formControlName: _transactionReasonKey, - builder: (field) { - return LabeledField( - label: localizations.translate( - transactionReasonLabel ?? 'Reason', - ), - isRequired: true, - child: DigitDropdown( - emptyItemText: - localizations.translate( - i18.common.noMatchFound, + BlocBuilder( + builder: (context, state) { + return state.maybeWhen( + orElse: () => const Offstage(), + loading: () => const Center( + child: CircularProgressIndicator(), ), - items: - reasons!.map((reason) { - return - DropdownItem( - name: localizations - .translate(reason), - code: reason.toString(), - ); - }).toList(), - onSelect: (value) { - final selectedReason = - reasons - ?.firstWhere( - (reason) => - reason.toString() == - value.code, - ); - field.control.value = - selectedReason; - }, - ), - ); - }, - ), - BlocBuilder( - builder: (context, state) { - return state.maybeWhen( - orElse: () => const Offstage(), - loading: () => const Center( - child: - CircularProgressIndicator(), + fetched: (facilities, allFacilities) { + return Column( + children: [ + const SizedBox( + height: spacer4, ), - fetched: (facilities, allFacilities) { - return Column( - children: [ - const SizedBox(height: spacer4,), - InkWell( - onTap: () async { - clearQRCodes(); - form - .control(_deliveryTeamKey) - .value = ''; + InkWell( + onTap: () async { + clearQRCodes(); + form + .control(_deliveryTeamKey) + .value = ''; - final facility = await context - .router - .push( - InventoryFacilitySelectionRoute( - facilities: - facilities)) - as FacilityModel?; + final facility = + await context.router.push( + InventoryFacilitySelectionRoute( + facilities: + facilities)) + as FacilityModel?; - if (facility == null) return; - form - .control(_secondaryPartyKey) - .value = - localizations.translate( - 'FAC_${facility.id}', - ); - controller1.text = - localizations.translate( - 'FAC_${facility.id}'); + if (facility == null) return; + form + .control(_secondaryPartyKey) + .value = + localizations.translate( + 'FAC_${facility.id}', + ); + controller1.text = + localizations.translate( + 'FAC_${facility.id}'); + setState(() { + selectedFacilityId = + facility.id; + }); + if (facility.id == + 'Delivery Team') { setState(() { - selectedFacilityId = - facility.id; + deliveryTeamSelected = true; }); - if (facility.id == - 'Delivery Team') { - setState(() { - deliveryTeamSelected = true; - }); - } else { - setState(() { - deliveryTeamSelected = false; - }); - } - }, - child: IgnorePointer( - child: ReactiveWrapperField( - formControlName: - _secondaryPartyKey, - validationMessages: { - 'required': (object) => - localizations - .translate( - '${i18.individualDetails.nameLabelText}_IS_REQUIRED', - ), - }, - showErrors: (control) => control.invalid && control.touched, - builder: (field) { - return InputField( - type: InputType.search, - isRequired: true, - label: localizations + } else { + setState(() { + deliveryTeamSelected = + false; + }); + } + }, + child: IgnorePointer( + child: ReactiveWrapperField( + formControlName: + _secondaryPartyKey, + validationMessages: { + 'required': (object) => + localizations .translate( - '${pageTitle}_${i18.stockReconciliationDetails.stockLabel}', + '${i18.individualDetails.nameLabelText}_IS_REQUIRED', ), - onChange: (value) { - field.control.markAsTouched(); - }, - controller: controller1, - errorMessage: field.errorText, - ); - }), - ), + }, + showErrors: (control) => + control.invalid && + control.touched, + builder: (field) { + return InputField( + type: InputType.search, + isRequired: true, + label: localizations + .translate( + '${pageTitle}_${i18.stockReconciliationDetails.stockLabel}', + ), + onChange: (value) { + field.control + .markAsTouched(); + }, + controller: controller1, + errorMessage: + field.errorText, + ); + }), + ), + ), + ], + ); + }); + }, + ), + // TODO: as this case i need to set when occurring + Visibility( + visible: deliveryTeamSelected, + child: ReactiveWrapperField( + formControlName: _deliveryTeamKey, + builder: (field) { + return InputField( + type: InputType.text, + label: localizations.translate( + i18.stockReconciliationDetails + .teamCodeLabel, + ), + isRequired: deliveryTeamSelected, + suffixIcon: Icons.qr_code_2, + onSuffixTap: (value) { + //[TODO: Add route to auto_route] + Navigator.of(context).push( + MaterialPageRoute( + builder: (context) => + const DigitScannerPage( + quantity: 5, + isGS1code: false, + singleValue: false, ), - ], + settings: const RouteSettings( + name: '/qr-scanner'), + ), ); - }); + }, + onChange: (val) { + String? value = val; + if (value != null && + value.trim().isNotEmpty) { + context + .read() + .add( + DigitScannerEvent + .handleScanner( + barCode: [], + qrCode: [value], + manualCode: value, + ), + ); + } else { + clearQRCodes(); + } + }, + ); + }), + // DigitTextFormField( + // label: localizations.translate( + // i18.stockReconciliationDetails + // .teamCodeLabel, + // ), + // onChanged: (val) { + // String? value = val.value as String?; + // if (value != null && + // value.trim().isNotEmpty) { + // context.read().add( + // DigitScannerEvent.handleScanner( + // barCode: [], + // qrCode: [value], + // manualCode: value, + // ), + // ); + // } else { + // clearQRCodes(); + // } + // }, + // suffix: IconButton( + // onPressed: () { + // //[TODO: Add route to auto_route] + // Navigator.of(context).push( + // MaterialPageRoute( + // builder: (context) => + // const DigitScannerPage( + // quantity: 5, + // isGS1code: false, + // singleValue: false, + // ), + // settings: const RouteSettings( + // name: '/qr-scanner'), + // ), + // ); + // }, + // icon: Icon( + // Icons.qr_code_2, + // color: theme.colorScheme.secondary, + // ), + // ), + // isRequired: deliveryTeamSelected, + // maxLines: 3, + // formControlName: _deliveryTeamKey, + // ), + ), + ReactiveWrapperField( + formControlName: _transactionQuantityKey, + validationMessages: { + "number": (object) => + localizations.translate( + '${quantityCountLabel}_ERROR', + ), + "max": (object) => localizations.translate( + '${quantityCountLabel}_MAX_ERROR', + ), + "min": (object) => localizations.translate( + '${quantityCountLabel}_MIN_ERROR', + ), }, - ), - // TODO: as this case i need to set when occurring - Visibility( - visible: deliveryTeamSelected, - child: ReactiveWrapperField( - formControlName: _deliveryTeamKey, - builder: (field) { - return InputField( - type: InputType.text, - label: localizations.translate( - i18.stockReconciliationDetails - .teamCodeLabel, - ), - isRequired: deliveryTeamSelected, - suffixIcon: Icons.qr_code_2, - onSuffixTap: (value){ - //[TODO: Add route to auto_route] - Navigator.of(context).push( - MaterialPageRoute( - builder: (context) => - const DigitScannerPage( - quantity: 5, - isGS1code: false, - singleValue: false, - ), - settings: const RouteSettings( - name: '/qr-scanner'), - ), - ); - }, - onChange: (val) { - String? value = val; - if (value != null && - value.trim().isNotEmpty) { - context.read().add( - DigitScannerEvent.handleScanner( - barCode: [], - qrCode: [value], - manualCode: value, - ), - ); + showErrors: (control) => + control.invalid && control.touched, + builder: (field) { + return LabeledField( + label: localizations.translate( + quantityCountLabel, + ), + isRequired: true, + child: BaseDigitFormInput( + errorMessage: field.errorText, + keyboardType: const TextInputType + .numberWithOptions( + decimal: true, + ), + onChange: (val) { + field.control.markAsTouched(); + if (int.parse(val) > 10000000000) { + field.control.value = 10000; + } else { + if (val != '') { + field.control.value = + int.parse(val); } else { - clearQRCodes(); + field.control.value = null; } - }, - ); - }), - // DigitTextFormField( - // label: localizations.translate( - // i18.stockReconciliationDetails - // .teamCodeLabel, - // ), - // onChanged: (val) { - // String? value = val.value as String?; - // if (value != null && - // value.trim().isNotEmpty) { - // context.read().add( - // DigitScannerEvent.handleScanner( - // barCode: [], - // qrCode: [value], - // manualCode: value, - // ), - // ); - // } else { - // clearQRCodes(); - // } - // }, - // suffix: IconButton( - // onPressed: () { - // //[TODO: Add route to auto_route] - // Navigator.of(context).push( - // MaterialPageRoute( - // builder: (context) => - // const DigitScannerPage( - // quantity: 5, - // isGS1code: false, - // singleValue: false, - // ), - // settings: const RouteSettings( - // name: '/qr-scanner'), - // ), - // ); - // }, - // icon: Icon( - // Icons.qr_code_2, - // color: theme.colorScheme.secondary, - // ), - // ), - // isRequired: deliveryTeamSelected, - // maxLines: 3, - // formControlName: _deliveryTeamKey, - // ), - ), + } + }, + ), + ); + }), + if (isWareHouseMgr) ReactiveWrapperField( - formControlName: _transactionQuantityKey, - validationMessages: { - "number": (object) => - localizations.translate( - '${quantityCountLabel}_ERROR', - ), - "max": (object) => - localizations.translate( - '${quantityCountLabel}_MAX_ERROR', - ), - "min": (object) => - localizations.translate( - '${quantityCountLabel}_MIN_ERROR', - ), - }, - showErrors: (control) => control.invalid && control.touched, + formControlName: _waybillNumberKey, builder: (field) { - return LabeledField( + return InputField( + type: InputType.text, label: localizations.translate( - quantityCountLabel, - ), - isRequired: true, - child: BaseDigitFormInput( - errorMessage: field.errorText, - keyboardType: const TextInputType - .numberWithOptions( - decimal: true, - ), - onChange: (val) { - field.control.markAsTouched(); - if (int.parse(val) > 10000000000) { - field.control.value = 10000; - } else { - if(val !=''){ - field.control.value = - int.parse(val); - }else{ - field.control.value = null; - } - } - }, + i18.stockDetails.waybillNumberLabel, ), + onChange: (val) { + field.control.value = val; + }, ); }), - if (isWareHouseMgr) - ReactiveWrapperField( - formControlName: _waybillNumberKey, - builder: (field) { - return InputField( - type: InputType.text, - label: localizations.translate( - i18.stockDetails.waybillNumberLabel, - ), - onChange: (val) { - field.control.value = val; - }, - ); - }), - if (isWareHouseMgr) - ReactiveWrapperField( - formControlName: _waybillQuantityKey, - builder: (field) { - return InputField( - type: InputType.text, - label: localizations.translate( - i18.stockDetails - .quantityOfProductIndicatedOnWaybillLabel, - ), - initialValue: '0', - onChange: (val) { - if (val == '') { - field.control.value = '0'; - } else { - field.control.value = val; - } - }, - ); - }), - if (isWareHouseMgr) - transportTypes.isNotEmpty - ? ReactiveWrapperField( - formControlName: _typeOfTransportKey, + if (isWareHouseMgr) + ReactiveWrapperField( + formControlName: _waybillQuantityKey, builder: (field) { - return LabeledField( + return InputField( + type: InputType.text, label: localizations.translate( i18.stockDetails - .transportTypeLabel, - ), - child: DigitDropdown( - emptyItemText: - localizations.translate( - i18.common.noMatchFound, - ), - items: - transportTypes.map((type) { - return DropdownItem( - name: localizations - .translate(type.name), - code: type.code, - ); - }).toList(), - onSelect: (value) { - field.control.value = - value.name; - }, + .quantityOfProductIndicatedOnWaybillLabel, ), - ); - }, - ) - : const Offstage(), - if (isWareHouseMgr) - ReactiveWrapperField( - formControlName: _vehicleNumberKey, - builder: (field) { - return InputField( - type: InputType.text, - label: localizations.translate( - i18.stockDetails.vehicleNumberLabel, - ), - onChange: (val) { + initialValue: '0', + onChange: (val) { + if (val == '') { + field.control.value = '0'; + } else { field.control.value = val; - }, - ); - }), + } + }, + ); + }), + if (isWareHouseMgr) + transportTypes.isNotEmpty + ? ReactiveWrapperField( + formControlName: _typeOfTransportKey, + builder: (field) { + return LabeledField( + label: localizations.translate( + i18.stockDetails + .transportTypeLabel, + ), + child: DigitDropdown( + emptyItemText: + localizations.translate( + i18.common.noMatchFound, + ), + items: transportTypes.map((type) { + return DropdownItem( + name: localizations + .translate(type.name), + code: type.code, + ); + }).toList(), + onSelect: (value) { + field.control.value = + value.name; + }, + ), + ); + }, + ) + : const Offstage(), + if (isWareHouseMgr) ReactiveWrapperField( - formControlName: _commentsKey, + formControlName: _vehicleNumberKey, builder: (field) { return InputField( - type: InputType.textArea, + type: InputType.text, label: localizations.translate( - i18.stockDetails.commentsLabel, + i18.stockDetails.vehicleNumberLabel, ), onChange: (val) { field.control.value = val; }, ); }), - scannerState.barCodes.isEmpty - ? DigitButton( - mainAxisSize: MainAxisSize.max, - size: DigitButtonSize.large, - type: DigitButtonType.secondary, - onPressed: () { - //[TODO: Add route to auto_route] - Navigator.of(context).push( - MaterialPageRoute( - builder: (context) => - const DigitScannerPage( - quantity: 5, - isGS1code: true, - singleValue: false, - ), - settings: const RouteSettings( - name: '/qr-scanner'), + ReactiveWrapperField( + formControlName: _commentsKey, + builder: (field) { + return InputField( + type: InputType.textArea, + label: localizations.translate( + i18.stockDetails.commentsLabel, ), + onChange: (val) { + field.control.value = val; + }, ); - }, - prefixIcon: Icons.qr_code, - label: localizations.translate( - i18.common.scanBales, - ), - ) - : Column(children: [ - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Align( - alignment: Alignment.centerLeft, - child: Text( - localizations.translate(i18 - .stockDetails - .scannedResources), - style: DigitTheme - .instance - .mobileTheme - .textTheme - .labelSmall, - ), + }), + scannerState.barCodes.isEmpty + ? DigitButton( + mainAxisSize: MainAxisSize.max, + size: DigitButtonSize.large, + type: DigitButtonType.secondary, + onPressed: () { + //[TODO: Add route to auto_route] + Navigator.of(context).push( + MaterialPageRoute( + builder: (context) => + const DigitScannerPage( + quantity: 5, + isGS1code: true, + singleValue: false, ), - Padding( - padding: const EdgeInsets.only( - bottom: spacer4, - ), - child: IconButton( - alignment: - Alignment.centerRight, - color: - theme.colorScheme.secondary, - icon: const Icon(Icons.edit), - onPressed: () { - //[TODO: Add route to auto_route] - Navigator.of(context).push( - MaterialPageRoute( - builder: (context) => - const DigitScannerPage( - quantity: 5, - isGS1code: true, - singleValue: false, - ), - settings: - const RouteSettings( - name: - '/qr-scanner'), + settings: const RouteSettings( + name: '/qr-scanner'), + ), + ); + }, + prefixIcon: Icons.qr_code, + label: localizations.translate( + i18.common.scanBales, + ), + ) + : Column(children: [ + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Align( + alignment: Alignment.centerLeft, + child: Text( + localizations.translate(i18 + .stockDetails + .scannedResources), + style: DigitTheme + .instance + .mobileTheme + .textTheme + .labelSmall, + ), + ), + Padding( + padding: const EdgeInsets.only( + bottom: spacer4, + ), + child: IconButton( + alignment: Alignment.centerRight, + color: + theme.colorScheme.secondary, + icon: const Icon(Icons.edit), + onPressed: () { + //[TODO: Add route to auto_route] + Navigator.of(context).push( + MaterialPageRoute( + builder: (context) => + const DigitScannerPage( + quantity: 5, + isGS1code: true, + singleValue: false, ), - ); - }, - ), + settings: + const RouteSettings( + name: + '/qr-scanner'), + ), + ); + }, ), - ], - ), - ...scannedResources.map((e) => Align( - alignment: Alignment.centerLeft, - child: Text(e - .elements.values.first.data - .toString()), - )) - ]) - ], - ), + ), + ], + ), + ...scannedResources.map((e) => Align( + alignment: Alignment.centerLeft, + child: Text(e + .elements.values.first.data + .toString()), + )) + ]) + ], + ), ], ); }); From cc02ec3fbc048a67d6cbf8f779eb3718fb905e40 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Fri, 13 Dec 2024 09:15:31 +0530 Subject: [PATCH 198/241] reverted super annotations for sync package --- .../build.yaml | 5 +- .../lib/data/sync_service_mapper.dart | 657 +++++++++++++++++- .../lib/sync_annotation_module.dart | 19 - .../lib/sync_annotation_module.sync.dart | 471 ------------- .../pubspec.lock | 8 - .../pubspec.yaml | 1 - .../lib/data/sync_service_annotation.dart | 179 ----- .../sync_service/lib/sync_service_lib.dart | 7 +- packages/sync_service/pubspec.yaml | 59 +- 9 files changed, 682 insertions(+), 724 deletions(-) delete mode 100644 apps/health_campaign_field_worker_app/lib/sync_annotation_module.dart delete mode 100644 apps/health_campaign_field_worker_app/lib/sync_annotation_module.sync.dart delete mode 100644 packages/sync_service/lib/data/sync_service_annotation.dart diff --git a/apps/health_campaign_field_worker_app/build.yaml b/apps/health_campaign_field_worker_app/build.yaml index c0579ceef..27c12a092 100644 --- a/apps/health_campaign_field_worker_app/build.yaml +++ b/apps/health_campaign_field_worker_app/build.yaml @@ -7,7 +7,4 @@ targets: - lib/pages/**.dart auto_route_generator:auto_router_generator: generate_for: - - lib/router/**router.dart - super_annotations: - options: - targets: [ sync ] \ No newline at end of file + - lib/router/**router.dart \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart b/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart index 5de83bfb2..9389bf865 100644 --- a/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart +++ b/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart @@ -1,13 +1,16 @@ import 'dart:async'; import 'dart:convert'; +import 'package:attendance_management/attendance_management.dart'; import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:inventory_management/inventory_management.dart'; +import 'package:referral_reconciliation/referral_reconciliation.dart'; import 'package:registration_delivery/registration_delivery.dart'; import 'package:sync_service/data/repositories/sync/remote_type.dart'; import 'package:sync_service/data/sync_entity_mapper_listener.dart'; -import '../sync_annotation_module.sync.dart'; +import '../utils/environment_config.dart'; class SyncServiceMapper extends SyncEntityMapperListener { @override @@ -137,15 +140,653 @@ class SyncServiceMapper extends SyncEntityMapperListener { RemoteRepository remote, LocalRepository local) async { List responseEntities = []; + const taskResourceIdKey = 'taskResourceId'; + const individualIdentifierIdKey = 'individualIdentifierId'; + const householdAddressIdKey = 'householdAddressId'; + const individualAddressIdKey = 'individualAddressId'; + + switch (typeGroupedEntity.key) { + case DataModelType.individual: + responseEntities = await remote.search(IndividualSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as IndividualModel; + final responseEntity = + responseEntities.whereType().firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + final identifierAdditionalIds = responseEntity?.identifiers + ?.map((e) { + final id = e.id; + + if (id == null) return null; + + return AdditionalId( + idType: individualIdentifierIdKey, + id: id, + ); + }) + .whereNotNull() + .toList(); + + final addressAdditionalIds = responseEntity?.address + ?.map((e) { + final id = e.id; + + if (id == null) return null; + + return AdditionalId( + idType: individualAddressIdKey, + id: id, + ); + }) + .whereNotNull() + .toList(); + + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + nonRecoverableError: entity.nonRecoverableError, + additionalIds: [ + if (identifierAdditionalIds != null) + ...identifierAdditionalIds, + if (addressAdditionalIds != null) ...addressAdditionalIds, + ], + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; + + case DataModelType.household: + responseEntities = await remote.search(HouseholdSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as HouseholdModel; + final responseEntity = + responseEntities.whereType().firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + final addressAdditionalId = responseEntity?.address?.id == null + ? null + : AdditionalId( + idType: householdAddressIdKey, + id: responseEntity!.address!.id!, + ); + + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + additionalIds: [ + if (addressAdditionalId != null) addressAdditionalId, + ], + dataOperation: element.operation, + rowVersion: rowVersion, + nonRecoverableError: element.nonRecoverableError, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; + + case DataModelType.householdMember: + responseEntities = await remote.search(HouseholdMemberSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as HouseholdMemberModel; + final responseEntity = responseEntities + .whereType() + .firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; + + case DataModelType.sideEffect: + responseEntities = await remote.search(SideEffectSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + + for (var element in typeGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as SideEffectModel; + var responseEntity = + responseEntities.whereType().firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + case DataModelType.referral: + responseEntities = await remote.search(ReferralSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + + for (var element in typeGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as ReferralModel; + var responseEntity = + responseEntities.whereType().firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + case DataModelType.projectBeneficiary: + responseEntities = await remote.search(ProjectBeneficiarySearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as ProjectBeneficiaryModel; + final responseEntity = responseEntities + .whereType() + .firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; + case DataModelType.task: + responseEntities = await remote.search(TaskSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + isDeleted: true, + )); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final taskModel = element.entity as TaskModel; + var responseEntity = + responseEntities.whereType().firstWhereOrNull( + (e) => e.clientReferenceId == taskModel.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: taskModel.clientReferenceId, + serverGeneratedId: serverGeneratedId, + additionalIds: responseEntity?.resources + ?.map((e) { + final id = e.id; + if (id == null) return null; + + return AdditionalId( + idType: taskResourceIdKey, + id: id, + ); + }) + .whereNotNull() + .toList(), + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(taskModel.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + taskModel.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; + case DataModelType.hFReferral: + responseEntities = await remote.search( + HFReferralSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + ), + ); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as HFReferralModel; + final responseEntity = + responseEntities.whereType().firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + nonRecoverableError: entity.nonRecoverableError, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; + + case DataModelType.attendance: + responseEntities = await remote.search(AttendanceLogSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId!) + .whereNotNull() + .toList(), + tenantId: envConfig.variables.tenantId, + )); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as AttendanceLogModel; + final responseEntity = + responseEntities.whereType().firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId.toString(), + serverGeneratedId: serverGeneratedId, + nonRecoverableError: entity.nonRecoverableError, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = + await local.opLogManager.updateSyncDownRetry( + entity.clientReferenceId.toString(), + ); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; + + case DataModelType.stock: + responseEntities = await remote.search( + StockSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + ), + ); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as StockModel; + final responseEntity = + responseEntities.whereType().firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId!, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } - responseEntities = await SyncDownEntity().syncEntities(typeGroupedEntity, - operationGroupedEntity, entities, responseEntities, remote, local); + break; + + case DataModelType.stockReconciliation: + responseEntities = await remote.search(StockReconciliationSearchModel( + clientReferenceId: entities + .whereType() + .map((e) => e.clientReferenceId) + .whereNotNull() + .toList(), + )); + + for (var element in operationGroupedEntity.value) { + if (element.id == null) continue; + final entity = element.entity as StockReconciliationModel; + final responseEntity = responseEntities + .whereType() + .firstWhereOrNull( + (e) => e.clientReferenceId == entity.clientReferenceId, + ); + + final serverGeneratedId = responseEntity?.id; + final rowVersion = responseEntity?.rowVersion; + + if (serverGeneratedId != null) { + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serverGeneratedId, + dataOperation: element.operation, + rowVersion: rowVersion, + ), + ); + } else { + final bool markAsNonRecoverable = await local.opLogManager + .updateSyncDownRetry(entity.clientReferenceId); + + if (markAsNonRecoverable) { + await local.update( + entity.copyWith( + nonRecoverableError: true, + ), + createOpLog: false, + ); + } + } + } + + break; + + // case DataModelType.complaints: + // if (remote is! PgrServiceRemoteRepository) return responseEntities; + // + // final futures = entities + // .whereType() + // .map((e) => e.serviceRequestId) + // .whereNotNull() + // .map( + // (e) { + // final future = remote.searchWithoutClientReferenceId( + // PgrServiceSearchModel( + // serviceRequestId: e, + // ), + // ); + // + // return Future.sync(() => future); + // }, + // ); + // + // final resolvedFutures = await Future.wait(futures); + // + // responseEntities = resolvedFutures + // .expand((element) => element) + // .whereType() + // // We only need serviceRequestId and application status + // .map((e) => PgrServiceModel( + // clientReferenceId: '', + // tenantId: e.tenantId ?? '', + // serviceCode: e.serviceCode ?? '', + // description: e.description ?? '', + // serviceRequestId: e.serviceRequestId, + // applicationStatus: e.applicationStatus ?? + // PgrServiceApplicationStatus.pendingAssignment, + // user: PgrComplainantModel( + // clientReferenceId: '', + // tenantId: '', + // complaintClientReferenceId: e.serviceRequestId ?? '', + // ), + // address: PgrAddressModel(), + // )) + // .toList(); + // + // for (var element in operationGroupedEntity.value) { + // if (element.id == null) continue; + // final entity = element.entity as PgrServiceModel; + // final responseEntity = + // responseEntities.whereType().firstWhereOrNull( + // (e) => e.clientReferenceId == entity.clientReferenceId, + // ); + // + // final serverGeneratedId = responseEntity?.serviceRequestId; + // final rowVersion = responseEntity?.rowVersion; + // + // if (serverGeneratedId != null) { + // await local.opLogManager.updateServerGeneratedIds( + // model: UpdateServerGeneratedIdModel( + // clientReferenceId: entity.clientReferenceId, + // serverGeneratedId: serverGeneratedId, + // dataOperation: element.operation, + // rowVersion: rowVersion, + // ), + // ); + // } + // } + // break; + + default: + break; + } return responseEntities; } @override - EntityModel updatedEntity(EntityModel entity, OpLogEntry entry, + EntityModel updatedEntity(EntityModel entity, OpLogEntry e, String? serverGeneratedId) { var updatedEntity = entity; @@ -155,7 +796,7 @@ class SyncServiceMapper extends SyncEntityMapperListener { const individualAddressIdKey = 'individualAddressId'; if (updatedEntity is HouseholdModel) { - final addressId = entry.additionalIds.firstWhereOrNull( + final addressId = e.additionalIds.firstWhereOrNull( (element) { return element.idType == householdAddressIdKey; }, @@ -169,13 +810,13 @@ class SyncServiceMapper extends SyncEntityMapperListener { } if (updatedEntity is IndividualModel) { - final identifierId = entry.additionalIds.firstWhereOrNull( + final identifierId = e.additionalIds.firstWhereOrNull( (element) { return element.idType == individualIdentifierIdKey; }, )?.id; - final addressId = entry.additionalIds.firstWhereOrNull( + final addressId = e.additionalIds.firstWhereOrNull( (element) { return element.idType == individualAddressIdKey; }, @@ -196,7 +837,7 @@ class SyncServiceMapper extends SyncEntityMapperListener { } if (updatedEntity is TaskModel) { - final resourceId = entry.additionalIds + final resourceId = e.additionalIds .firstWhereOrNull( (element) => element.idType == taskResourceIdKey, ) diff --git a/apps/health_campaign_field_worker_app/lib/sync_annotation_module.dart b/apps/health_campaign_field_worker_app/lib/sync_annotation_module.dart deleted file mode 100644 index 49427949c..000000000 --- a/apps/health_campaign_field_worker_app/lib/sync_annotation_module.dart +++ /dev/null @@ -1,19 +0,0 @@ -@CodeGen(runAfter: [], targets: ['sync']) -library sync_annotation_module; - -import 'package:super_annotations/super_annotations.dart'; -import 'package:sync_service/data/sync_service_annotation.dart'; - -@SyncServiceAnnotation([ - 'individual.address_.identifier_s', - 'household.address', - 'projectBeneficiary', - 'householdMember', - 'stock', - 'stockReconciliation', - 'task.resource_s', - 'sideEffect', - 'referral', - 'hFReferral', -]) -class SyncModule {} diff --git a/apps/health_campaign_field_worker_app/lib/sync_annotation_module.sync.dart b/apps/health_campaign_field_worker_app/lib/sync_annotation_module.sync.dart deleted file mode 100644 index 2002e3806..000000000 --- a/apps/health_campaign_field_worker_app/lib/sync_annotation_module.sync.dart +++ /dev/null @@ -1,471 +0,0 @@ -import 'package:collection/collection.dart'; -import 'package:digit_data_model/data_model.dart'; -import 'package:inventory_management/inventory_management.dart'; -import 'package:referral_reconciliation/referral_reconciliation.dart'; -import 'package:registration_delivery/registration_delivery.dart'; - -class SyncDownEntity { - syncEntities( - MapEntry>> typeGroupedEntity, - MapEntry>> - operationGroupedEntity, - List entities, - List responseEntities, - RemoteRepository remote, - LocalRepository local) async { - switch (typeGroupedEntity.key.name) { - case "individual": - responseEntities = await remote.search(IndividualSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - for (var element in operationGroupedEntity.value) { - if (element.id == null) continue; - final entity = element.entity as IndividualModel; - final responseEntity = responseEntities - .whereType() - .firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId); - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - final additionalIds = []; - final addressAdditionalIds = responseEntity?.address - ?.map((e) { - final id = e.id; - if (id == null) return null; - return AdditionalId( - idType: "individualAddressId", - id: id, - ); - }) - .whereNotNull() - .toList(); - if (addressAdditionalIds != null) { - additionalIds.addAll(addressAdditionalIds ?? []); - } - final identifiersAdditionalIds = responseEntity?.identifiers - ?.map((e) { - final id = e.id; - if (id == null) return null; - return AdditionalId( - idType: "individualIdentifierSId", - id: id, - ); - }) - .whereNotNull() - .toList(); - if (identifiersAdditionalIds != null) { - additionalIds.addAll(identifiersAdditionalIds ?? []); - } - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - nonRecoverableError: entity.nonRecoverableError, - additionalIds: additionalIds, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - if (markAsNonRecoverable) { - await local.update(entity.copyWith(nonRecoverableError: true), - createOpLog: false); - } - } - } - break; - case "household": - responseEntities = await remote.search(HouseholdSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - for (var element in operationGroupedEntity.value) { - if (element.id == null) continue; - final entity = element.entity as HouseholdModel; - final responseEntity = responseEntities - .whereType() - .firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId); - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - final additionalIds = []; - final addressAdditionalIds = responseEntity?.address!.id == null - ? null - : AdditionalId( - idType: "householdAddressId", - id: responseEntity!.address!.id!, - ); - if (addressAdditionalIds != null) { - additionalIds.addAll([addressAdditionalIds!] ?? []); - } - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - nonRecoverableError: entity.nonRecoverableError, - additionalIds: additionalIds, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - if (markAsNonRecoverable) { - await local.update(entity.copyWith(nonRecoverableError: true), - createOpLog: false); - } - } - } - break; - case "projectBeneficiary": - responseEntities = await remote.search(ProjectBeneficiarySearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - for (var element in operationGroupedEntity.value) { - if (element.id == null) continue; - final entity = element.entity as ProjectBeneficiaryModel; - final responseEntity = responseEntities - .whereType() - .firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId); - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - final additionalIds = []; - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - nonRecoverableError: entity.nonRecoverableError, - additionalIds: additionalIds, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - if (markAsNonRecoverable) { - await local.update(entity.copyWith(nonRecoverableError: true), - createOpLog: false); - } - } - } - break; - case "householdMember": - responseEntities = await remote.search(HouseholdMemberSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - for (var element in operationGroupedEntity.value) { - if (element.id == null) continue; - final entity = element.entity as HouseholdMemberModel; - final responseEntity = responseEntities - .whereType() - .firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId); - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - final additionalIds = []; - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - nonRecoverableError: entity.nonRecoverableError, - additionalIds: additionalIds, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - if (markAsNonRecoverable) { - await local.update(entity.copyWith(nonRecoverableError: true), - createOpLog: false); - } - } - } - break; - case "stock": - responseEntities = await remote.search(StockSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - for (var element in operationGroupedEntity.value) { - if (element.id == null) continue; - final entity = element.entity as StockModel; - final responseEntity = responseEntities - .whereType() - .firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId); - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - final additionalIds = []; - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - nonRecoverableError: entity.nonRecoverableError, - additionalIds: additionalIds, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - if (markAsNonRecoverable) { - await local.update(entity.copyWith(nonRecoverableError: true), - createOpLog: false); - } - } - } - break; - case "stockReconciliation": - responseEntities = await remote.search(StockReconciliationSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - for (var element in operationGroupedEntity.value) { - if (element.id == null) continue; - final entity = element.entity as StockReconciliationModel; - final responseEntity = responseEntities - .whereType() - .firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId); - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - final additionalIds = []; - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - nonRecoverableError: entity.nonRecoverableError, - additionalIds: additionalIds, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - if (markAsNonRecoverable) { - await local.update(entity.copyWith(nonRecoverableError: true), - createOpLog: false); - } - } - } - break; - case "task": - responseEntities = await remote.search(TaskSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - for (var element in operationGroupedEntity.value) { - if (element.id == null) continue; - final entity = element.entity as TaskModel; - final responseEntity = responseEntities - .whereType() - .firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId); - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - final additionalIds = []; - final resourcesAdditionalIds = responseEntity?.resources - ?.map((e) { - final id = e.id; - if (id == null) return null; - return AdditionalId( - idType: "taskResourceSId", - id: id, - ); - }) - .whereNotNull() - .toList(); - if (resourcesAdditionalIds != null) { - additionalIds.addAll(resourcesAdditionalIds ?? []); - } - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - nonRecoverableError: entity.nonRecoverableError, - additionalIds: additionalIds, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - if (markAsNonRecoverable) { - await local.update(entity.copyWith(nonRecoverableError: true), - createOpLog: false); - } - } - } - break; - case "sideEffect": - responseEntities = await remote.search(SideEffectSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - for (var element in operationGroupedEntity.value) { - if (element.id == null) continue; - final entity = element.entity as SideEffectModel; - final responseEntity = responseEntities - .whereType() - .firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId); - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - final additionalIds = []; - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - nonRecoverableError: entity.nonRecoverableError, - additionalIds: additionalIds, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - if (markAsNonRecoverable) { - await local.update(entity.copyWith(nonRecoverableError: true), - createOpLog: false); - } - } - } - break; - case "referral": - responseEntities = await remote.search(ReferralSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - for (var element in operationGroupedEntity.value) { - if (element.id == null) continue; - final entity = element.entity as ReferralModel; - final responseEntity = responseEntities - .whereType() - .firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId); - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - final additionalIds = []; - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - nonRecoverableError: entity.nonRecoverableError, - additionalIds: additionalIds, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - if (markAsNonRecoverable) { - await local.update(entity.copyWith(nonRecoverableError: true), - createOpLog: false); - } - } - } - break; - case "hFReferral": - responseEntities = await remote.search(HFReferralSearchModel( - clientReferenceId: entities - .whereType() - .map((e) => e.clientReferenceId) - .whereNotNull() - .toList(), - isDeleted: true, - )); - for (var element in operationGroupedEntity.value) { - if (element.id == null) continue; - final entity = element.entity as HFReferralModel; - final responseEntity = responseEntities - .whereType() - .firstWhereOrNull( - (e) => e.clientReferenceId == entity.clientReferenceId); - final serverGeneratedId = responseEntity?.id; - final rowVersion = responseEntity?.rowVersion; - if (serverGeneratedId != null) { - final additionalIds = []; - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( - clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serverGeneratedId, - nonRecoverableError: entity.nonRecoverableError, - additionalIds: additionalIds, - dataOperation: element.operation, - rowVersion: rowVersion, - ), - ); - } else { - final bool markAsNonRecoverable = await local.opLogManager - .updateSyncDownRetry(entity.clientReferenceId); - if (markAsNonRecoverable) { - await local.update(entity.copyWith(nonRecoverableError: true), - createOpLog: false); - } - } - } - break; - } - return responseEntities; - } -} diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index dcb742bdf..7c4bd1fa1 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -2060,14 +2060,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" - super_annotations: - dependency: "direct main" - description: - name: super_annotations - sha256: "6ccb4a2066de1ae3d1869184350b641b0b66fa6b98e158abeffdc9c47a3bf49c" - url: "https://pub.dev" - source: hosted - version: "0.8.1" survey_form: dependency: "direct main" description: diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index a6b4c5c31..a7a8fe03c 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -71,7 +71,6 @@ dependencies: disable_battery_optimization: ^1.1.1 digit_dss: ^1.0.1 closed_household: ^1.0.1+1 - super_annotations: ^0.8.1 digit_location_tracker: ^0.0.1-dev.1 permission_handler: ^11.3.1 survey_form: ^0.0.1-dev.2 diff --git a/packages/sync_service/lib/data/sync_service_annotation.dart b/packages/sync_service/lib/data/sync_service_annotation.dart deleted file mode 100644 index ff81edd67..000000000 --- a/packages/sync_service/lib/data/sync_service_annotation.dart +++ /dev/null @@ -1,179 +0,0 @@ -import 'package:recase/recase.dart'; -import 'package:super_annotations/super_annotations.dart'; - -/// This class uses the [SyncServiceAnnotation] to define entities that require synchronization. -/// -/// The `SyncServiceAnnotation` is applied with a list of entity types that define which -/// entities should be synchronized down from a remote repository. -/// -/// ### Example Usage -/// -/// To add a new entity type to the synchronization list, modify the annotation as shown below: -/// -/// ```dart -/// @SyncServiceAnnotation([ -/// 'newEntityType', // Add your entity type here -/// 'individual.address_.identifier_s', -/// 'household.address', -/// 'projectBeneficiary', -/// // Other existing types... -/// ]) -/// class SyncModule { -/// // Your sync module implementation -/// } -/// ``` -/// -/// Additionally, ensure that the entity type follows the expected naming conventions: -/// -/// - Entity types can include nested entities separated by dots (`.`). -/// - If the entity type ends with a pluralized suffix (`_s` or `_`), the synchronization logic will treat it accordingly. -/// -/// For further details, see the [SyncServiceAnnotation] class and its documentation. -/// [@SyncServiceAnnotation([ -/// 'individual.address_.identifier_s', -/// 'household.address', -/// 'task.resource_s', -/// ])] -/// class Example { -// Class implementation -/// } - -class SyncServiceAnnotation extends ClassAnnotation { - final List types; - - const SyncServiceAnnotation(this.types); - - @override - void apply(Class target, LibraryBuilder output) { - final StringBuffer methodBuffer = StringBuffer() - ..writeln('class SyncDownEntity {') - ..writeln('syncEntities(') - ..writeln( - ' MapEntry>> typeGroupedEntity,') - ..writeln( - ' MapEntry>> operationGroupedEntity,') - ..writeln(' List entities,') - ..writeln(' List responseEntities,') - ..writeln(' RemoteRepository remote,') - ..writeln( - ' LocalRepository local) async {') - ..writeln(' switch (typeGroupedEntity.key.name) {'); - - for (var entity in types) { - final entityPascalCase = entity.contains('.') - ? entity.split('.')[0].pascalCase - : entity.pascalCase; - - methodBuffer - ..writeln( - ' case "${entity.contains('.') ? entity.split('.')[0] : entity}":') - ..writeln( - ' responseEntities = await remote.search(${entityPascalCase}SearchModel(') - ..writeln( - ' clientReferenceId: entities.whereType<${entityPascalCase}Model>()') - ..writeln(' .map((e) => e.clientReferenceId)') - ..writeln(' .whereNotNull()') - ..writeln(' .toList(),') - ..writeln(' isDeleted: true,') - ..writeln(' ));') - ..writeln(' for (var element in operationGroupedEntity.value) {') - ..writeln(' if (element.id == null) continue;') - ..writeln( - ' final entity = element.entity as ${entityPascalCase}Model;') - ..writeln( - ' final responseEntity = responseEntities.whereType<${entityPascalCase}Model>()') - ..writeln( - ' .firstWhereOrNull((e) => e.clientReferenceId == entity.clientReferenceId);') - ..writeln(' final serverGeneratedId = responseEntity?.id;') - ..writeln(' final rowVersion = responseEntity?.rowVersion;'); - - methodBuffer - ..writeln(' if (serverGeneratedId != null) {') - ..writeln(' final additionalIds = [];'); - - // Check each part after the first dot - if (entity.contains('.')) { - final parts = entity.split('.'); - parts.removeAt(0); // Remove the first part - for (var part in parts) { - if (isPlural(part)) { - methodBuffer - ..writeln( - ' final ${removePluralSuffix(part)}AdditionalIds = responseEntity?.${removePluralSuffix(part)}?.map((e) {') - ..writeln(' final id = e.id;') - ..writeln(' if (id == null) return null;') - ..writeln(' return AdditionalId(') - ..writeln( - ' idType: "${entity.contains('.') ? entity.split('.')[0] : entity}${isPlural(part.pascalCase) ? removePluralSuffix(part) : part.pascalCase}Id",') - ..writeln(' id: id,') - ..writeln(' );') - ..writeln(' }).whereNotNull().toList();') - ..writeln( - ' if(${removePluralSuffix(part)}AdditionalIds!=null){ additionalIds.addAll(${removePluralSuffix(part)}AdditionalIds ?? []);}'); - } else { - methodBuffer - ..writeln( - ' final ${part}AdditionalIds = responseEntity?.${part}!.id == null') - ..writeln(' ? null') - ..writeln(' : AdditionalId(') - ..writeln( - ' idType: "${entity.contains('.') ? entity.split('.')[0] : entity}${part.pascalCase}Id",') - ..writeln(' id: responseEntity!.${part}!.id!,') - ..writeln(' );') - ..writeln( - ' if(${part}AdditionalIds != null) { additionalIds.addAll([${part}AdditionalIds!] ?? []); }'); - } - } - } - - methodBuffer - ..writeln( - ' await local.opLogManager.updateServerGeneratedIds(') - ..writeln(' model: UpdateServerGeneratedIdModel(') - ..writeln(' clientReferenceId: entity.clientReferenceId,') - ..writeln(' serverGeneratedId: serverGeneratedId,') - ..writeln( - ' nonRecoverableError: entity.nonRecoverableError,') - ..writeln(' additionalIds: additionalIds,') - ..writeln(' dataOperation: element.operation,') - ..writeln(' rowVersion: rowVersion,') - ..writeln(' ),') - ..writeln(' );') - ..writeln(' } else {'); - - methodBuffer - ..writeln( - ' final bool markAsNonRecoverable = await local.opLogManager.updateSyncDownRetry(entity.clientReferenceId);') - ..writeln(' if (markAsNonRecoverable) {') - ..writeln( - ' await local.update(entity.copyWith(nonRecoverableError: true), createOpLog: false);') - ..writeln(' }') - ..writeln(' }') - ..writeln(' }') - ..writeln(' break;'); - } - - methodBuffer - ..writeln(' }') - ..writeln(' return responseEntities;}') - ..writeln('}'); - - output.body.add(Code(methodBuffer.toString())); - } - - bool isPlural(String word) { - var result = word.contains('_') ? true : false; - return result; - } - - String removePluralSuffix(String word) { - const pluralSuffixes = ['_']; - - for (var suffix in pluralSuffixes) { - if (word.contains(suffix)) { - return word.replaceAll('_', ''); - } - } - return word; - } -} diff --git a/packages/sync_service/lib/sync_service_lib.dart b/packages/sync_service/lib/sync_service_lib.dart index ed3473ad8..5d94e9324 100644 --- a/packages/sync_service/lib/sync_service_lib.dart +++ b/packages/sync_service/lib/sync_service_lib.dart @@ -1,11 +1,10 @@ library sync_service; -export 'data/sync_entity_mapper_listener.dart'; -export 'data/sync_service.dart'; +export 'blocs/sync/sync.dart'; export 'data/repositories/sync/remote_type.dart'; export 'data/repositories/sync/sync_down.dart'; export 'data/repositories/sync/sync_up.dart'; +export 'data/sync_entity_mapper_listener.dart'; +export 'data/sync_service.dart'; export 'models/bandwidth/bandwidth_model.dart'; -export 'blocs/sync/sync.dart'; export 'utils/utils.dart'; -export 'data/sync_service_annotation.dart'; \ No newline at end of file diff --git a/packages/sync_service/pubspec.yaml b/packages/sync_service/pubspec.yaml index 18895fbca..a505b27ee 100644 --- a/packages/sync_service/pubspec.yaml +++ b/packages/sync_service/pubspec.yaml @@ -33,7 +33,6 @@ dependencies: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES ref: version_update path: ./flutter/digit-ui-components/digit_components - super_annotations: ^0.8.1 dev_dependencies: flutter_test: @@ -57,33 +56,33 @@ dev_dependencies: # The following section is specific to Flutter packages. flutter: - # To add assets to your package, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - # - # For details regarding assets in packages, see - # https://flutter.dev/assets-and-images/#from-packages - # - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware +# To add assets to your package, add an assets section, like this: +# assets: +# - images/a_dot_burr.jpeg +# - images/a_dot_ham.jpeg +# +# For details regarding assets in packages, see +# https://flutter.dev/assets-and-images/#from-packages +# +# An image asset can refer to one or more resolution-specific "variants", see +# https://flutter.dev/assets-and-images/#resolution-aware - # To add custom fonts to your package, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts in packages, see - # https://flutter.dev/custom-fonts/#from-packages +# To add custom fonts to your package, add a fonts section here, +# in this "flutter" section. Each entry in this list should have a +# "family" key with the font family name, and a "fonts" key with a +# list giving the asset and other descriptors for the font. For +# example: +# fonts: +# - family: Schyler +# fonts: +# - asset: fonts/Schyler-Regular.ttf +# - asset: fonts/Schyler-Italic.ttf +# style: italic +# - family: Trajan Pro +# fonts: +# - asset: fonts/TrajanPro.ttf +# - asset: fonts/TrajanPro_Bold.ttf +# weight: 700 +# +# For details regarding fonts in packages, see +# https://flutter.dev/custom-fonts/#from-packages From 35c75c4c35463d30b5c1c9e7be9699d4fd754e0f Mon Sep 17 00:00:00 2001 From: Ramkrishna-egov Date: Fri, 13 Dec 2024 10:52:16 +0530 Subject: [PATCH 199/241] Updated missing changes in Side Effects Model --- .../lib/blocs/attendance_individual_bloc.dart | 4 +- .../local_store/sql_store/sql_store.g.dart | 82 +++++++ .../tables/package_tables/side_effect.dart | 1 + .../lib/models/entities/side_effect.dart | 4 + .../beneficiary/delivery_summary_page.dart | 206 +++++++++--------- .../lib/pages/beneficiary/side_effects.dart | 5 + 6 files changed, 196 insertions(+), 106 deletions(-) diff --git a/packages/attendance_management/lib/blocs/attendance_individual_bloc.dart b/packages/attendance_management/lib/blocs/attendance_individual_bloc.dart index 178ccc56f..2c6524703 100644 --- a/packages/attendance_management/lib/blocs/attendance_individual_bloc.dart +++ b/packages/attendance_management/lib/blocs/attendance_individual_bloc.dart @@ -174,7 +174,9 @@ class AttendanceIndividualBloc "latitude": event.latitude, "longitude": event.longitude, } - : null), + : { + EnumValues.boundaryCode.toValue(): AttendanceSingleton().boundary?.code, + }), AttendanceLogModel( individualId: e.individualId, registerId: e.registerId, diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart index fc72319e1..cef14c5c3 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/sql_store.g.dart @@ -36953,6 +36953,13 @@ class $SideEffectTable extends SideEffect late final GeneratedColumn taskClientReferenceId = GeneratedColumn('task_client_reference_id', aliasedName, true, type: DriftSqlType.string, requiredDuringInsert: false); + static const VerificationMeta _projectBeneficiaryClientReferenceIdMeta = + const VerificationMeta('projectBeneficiaryClientReferenceId'); + @override + late final GeneratedColumn projectBeneficiaryClientReferenceId = + GeneratedColumn( + 'project_beneficiary_client_reference_id', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); static const VerificationMeta _reAttemptsMeta = const VerificationMeta('reAttempts'); @override @@ -37062,6 +37069,7 @@ class $SideEffectTable extends SideEffect id, projectId, taskClientReferenceId, + projectBeneficiaryClientReferenceId, reAttempts, symptoms, auditCreatedBy, @@ -37102,6 +37110,13 @@ class $SideEffectTable extends SideEffect taskClientReferenceId.isAcceptableOrUnknown( data['task_client_reference_id']!, _taskClientReferenceIdMeta)); } + if (data.containsKey('project_beneficiary_client_reference_id')) { + context.handle( + _projectBeneficiaryClientReferenceIdMeta, + projectBeneficiaryClientReferenceId.isAcceptableOrUnknown( + data['project_beneficiary_client_reference_id']!, + _projectBeneficiaryClientReferenceIdMeta)); + } if (data.containsKey('re_attempts')) { context.handle( _reAttemptsMeta, @@ -37210,6 +37225,9 @@ class $SideEffectTable extends SideEffect taskClientReferenceId: attachedDatabase.typeMapping.read( DriftSqlType.string, data['${effectivePrefix}task_client_reference_id']), + projectBeneficiaryClientReferenceId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}project_beneficiary_client_reference_id']), reAttempts: attachedDatabase.typeMapping .read(DriftSqlType.int, data['${effectivePrefix}re_attempts']), symptoms: attachedDatabase.typeMapping @@ -37255,6 +37273,7 @@ class SideEffectData extends DataClass implements Insertable { final String? id; final String? projectId; final String? taskClientReferenceId; + final String? projectBeneficiaryClientReferenceId; final int? reAttempts; final String? symptoms; final String? auditCreatedBy; @@ -37275,6 +37294,7 @@ class SideEffectData extends DataClass implements Insertable { {this.id, this.projectId, this.taskClientReferenceId, + this.projectBeneficiaryClientReferenceId, this.reAttempts, this.symptoms, this.auditCreatedBy, @@ -37303,6 +37323,10 @@ class SideEffectData extends DataClass implements Insertable { if (!nullToAbsent || taskClientReferenceId != null) { map['task_client_reference_id'] = Variable(taskClientReferenceId); } + if (!nullToAbsent || projectBeneficiaryClientReferenceId != null) { + map['project_beneficiary_client_reference_id'] = + Variable(projectBeneficiaryClientReferenceId); + } if (!nullToAbsent || reAttempts != null) { map['re_attempts'] = Variable(reAttempts); } @@ -37361,6 +37385,10 @@ class SideEffectData extends DataClass implements Insertable { taskClientReferenceId: taskClientReferenceId == null && nullToAbsent ? const Value.absent() : Value(taskClientReferenceId), + projectBeneficiaryClientReferenceId: + projectBeneficiaryClientReferenceId == null && nullToAbsent + ? const Value.absent() + : Value(projectBeneficiaryClientReferenceId), reAttempts: reAttempts == null && nullToAbsent ? const Value.absent() : Value(reAttempts), @@ -37418,6 +37446,8 @@ class SideEffectData extends DataClass implements Insertable { projectId: serializer.fromJson(json['projectId']), taskClientReferenceId: serializer.fromJson(json['taskClientReferenceId']), + projectBeneficiaryClientReferenceId: serializer + .fromJson(json['projectBeneficiaryClientReferenceId']), reAttempts: serializer.fromJson(json['reAttempts']), symptoms: serializer.fromJson(json['symptoms']), auditCreatedBy: serializer.fromJson(json['auditCreatedBy']), @@ -37445,6 +37475,8 @@ class SideEffectData extends DataClass implements Insertable { 'projectId': serializer.toJson(projectId), 'taskClientReferenceId': serializer.toJson(taskClientReferenceId), + 'projectBeneficiaryClientReferenceId': + serializer.toJson(projectBeneficiaryClientReferenceId), 'reAttempts': serializer.toJson(reAttempts), 'symptoms': serializer.toJson(symptoms), 'auditCreatedBy': serializer.toJson(auditCreatedBy), @@ -37468,6 +37500,8 @@ class SideEffectData extends DataClass implements Insertable { {Value id = const Value.absent(), Value projectId = const Value.absent(), Value taskClientReferenceId = const Value.absent(), + Value projectBeneficiaryClientReferenceId = + const Value.absent(), Value reAttempts = const Value.absent(), Value symptoms = const Value.absent(), Value auditCreatedBy = const Value.absent(), @@ -37490,6 +37524,10 @@ class SideEffectData extends DataClass implements Insertable { taskClientReferenceId: taskClientReferenceId.present ? taskClientReferenceId.value : this.taskClientReferenceId, + projectBeneficiaryClientReferenceId: + projectBeneficiaryClientReferenceId.present + ? projectBeneficiaryClientReferenceId.value + : this.projectBeneficiaryClientReferenceId, reAttempts: reAttempts.present ? reAttempts.value : this.reAttempts, symptoms: symptoms.present ? symptoms.value : this.symptoms, auditCreatedBy: @@ -37532,6 +37570,8 @@ class SideEffectData extends DataClass implements Insertable { ..write('id: $id, ') ..write('projectId: $projectId, ') ..write('taskClientReferenceId: $taskClientReferenceId, ') + ..write( + 'projectBeneficiaryClientReferenceId: $projectBeneficiaryClientReferenceId, ') ..write('reAttempts: $reAttempts, ') ..write('symptoms: $symptoms, ') ..write('auditCreatedBy: $auditCreatedBy, ') @@ -37557,6 +37597,7 @@ class SideEffectData extends DataClass implements Insertable { id, projectId, taskClientReferenceId, + projectBeneficiaryClientReferenceId, reAttempts, symptoms, auditCreatedBy, @@ -37580,6 +37621,8 @@ class SideEffectData extends DataClass implements Insertable { other.id == this.id && other.projectId == this.projectId && other.taskClientReferenceId == this.taskClientReferenceId && + other.projectBeneficiaryClientReferenceId == + this.projectBeneficiaryClientReferenceId && other.reAttempts == this.reAttempts && other.symptoms == this.symptoms && other.auditCreatedBy == this.auditCreatedBy && @@ -37602,6 +37645,7 @@ class SideEffectCompanion extends UpdateCompanion { final Value id; final Value projectId; final Value taskClientReferenceId; + final Value projectBeneficiaryClientReferenceId; final Value reAttempts; final Value symptoms; final Value auditCreatedBy; @@ -37623,6 +37667,7 @@ class SideEffectCompanion extends UpdateCompanion { this.id = const Value.absent(), this.projectId = const Value.absent(), this.taskClientReferenceId = const Value.absent(), + this.projectBeneficiaryClientReferenceId = const Value.absent(), this.reAttempts = const Value.absent(), this.symptoms = const Value.absent(), this.auditCreatedBy = const Value.absent(), @@ -37645,6 +37690,7 @@ class SideEffectCompanion extends UpdateCompanion { this.id = const Value.absent(), this.projectId = const Value.absent(), this.taskClientReferenceId = const Value.absent(), + this.projectBeneficiaryClientReferenceId = const Value.absent(), this.reAttempts = const Value.absent(), this.symptoms = const Value.absent(), this.auditCreatedBy = const Value.absent(), @@ -37667,6 +37713,7 @@ class SideEffectCompanion extends UpdateCompanion { Expression? id, Expression? projectId, Expression? taskClientReferenceId, + Expression? projectBeneficiaryClientReferenceId, Expression? reAttempts, Expression? symptoms, Expression? auditCreatedBy, @@ -37690,6 +37737,9 @@ class SideEffectCompanion extends UpdateCompanion { if (projectId != null) 'project_id': projectId, if (taskClientReferenceId != null) 'task_client_reference_id': taskClientReferenceId, + if (projectBeneficiaryClientReferenceId != null) + 'project_beneficiary_client_reference_id': + projectBeneficiaryClientReferenceId, if (reAttempts != null) 're_attempts': reAttempts, if (symptoms != null) 'symptoms': symptoms, if (auditCreatedBy != null) 'audit_created_by': auditCreatedBy, @@ -37716,6 +37766,7 @@ class SideEffectCompanion extends UpdateCompanion { {Value? id, Value? projectId, Value? taskClientReferenceId, + Value? projectBeneficiaryClientReferenceId, Value? reAttempts, Value? symptoms, Value? auditCreatedBy, @@ -37738,6 +37789,9 @@ class SideEffectCompanion extends UpdateCompanion { projectId: projectId ?? this.projectId, taskClientReferenceId: taskClientReferenceId ?? this.taskClientReferenceId, + projectBeneficiaryClientReferenceId: + projectBeneficiaryClientReferenceId ?? + this.projectBeneficiaryClientReferenceId, reAttempts: reAttempts ?? this.reAttempts, symptoms: symptoms ?? this.symptoms, auditCreatedBy: auditCreatedBy ?? this.auditCreatedBy, @@ -37771,6 +37825,10 @@ class SideEffectCompanion extends UpdateCompanion { map['task_client_reference_id'] = Variable(taskClientReferenceId.value); } + if (projectBeneficiaryClientReferenceId.present) { + map['project_beneficiary_client_reference_id'] = + Variable(projectBeneficiaryClientReferenceId.value); + } if (reAttempts.present) { map['re_attempts'] = Variable(reAttempts.value); } @@ -37831,6 +37889,8 @@ class SideEffectCompanion extends UpdateCompanion { ..write('id: $id, ') ..write('projectId: $projectId, ') ..write('taskClientReferenceId: $taskClientReferenceId, ') + ..write( + 'projectBeneficiaryClientReferenceId: $projectBeneficiaryClientReferenceId, ') ..write('reAttempts: $reAttempts, ') ..write('symptoms: $symptoms, ') ..write('auditCreatedBy: $auditCreatedBy, ') @@ -54112,6 +54172,7 @@ typedef $$SideEffectTableInsertCompanionBuilder = SideEffectCompanion Function({ Value id, Value projectId, Value taskClientReferenceId, + Value projectBeneficiaryClientReferenceId, Value reAttempts, Value symptoms, Value auditCreatedBy, @@ -54134,6 +54195,7 @@ typedef $$SideEffectTableUpdateCompanionBuilder = SideEffectCompanion Function({ Value id, Value projectId, Value taskClientReferenceId, + Value projectBeneficiaryClientReferenceId, Value reAttempts, Value symptoms, Value auditCreatedBy, @@ -54176,6 +54238,8 @@ class $$SideEffectTableTableManager extends RootTableManager< Value id = const Value.absent(), Value projectId = const Value.absent(), Value taskClientReferenceId = const Value.absent(), + Value projectBeneficiaryClientReferenceId = + const Value.absent(), Value reAttempts = const Value.absent(), Value symptoms = const Value.absent(), Value auditCreatedBy = const Value.absent(), @@ -54198,6 +54262,8 @@ class $$SideEffectTableTableManager extends RootTableManager< id: id, projectId: projectId, taskClientReferenceId: taskClientReferenceId, + projectBeneficiaryClientReferenceId: + projectBeneficiaryClientReferenceId, reAttempts: reAttempts, symptoms: symptoms, auditCreatedBy: auditCreatedBy, @@ -54220,6 +54286,8 @@ class $$SideEffectTableTableManager extends RootTableManager< Value id = const Value.absent(), Value projectId = const Value.absent(), Value taskClientReferenceId = const Value.absent(), + Value projectBeneficiaryClientReferenceId = + const Value.absent(), Value reAttempts = const Value.absent(), Value symptoms = const Value.absent(), Value auditCreatedBy = const Value.absent(), @@ -54242,6 +54310,8 @@ class $$SideEffectTableTableManager extends RootTableManager< id: id, projectId: projectId, taskClientReferenceId: taskClientReferenceId, + projectBeneficiaryClientReferenceId: + projectBeneficiaryClientReferenceId, reAttempts: reAttempts, symptoms: symptoms, auditCreatedBy: auditCreatedBy, @@ -54293,6 +54363,12 @@ class $$SideEffectTableFilterComposer builder: (column, joinBuilders) => ColumnFilters(column, joinBuilders: joinBuilders)); + ColumnFilters get projectBeneficiaryClientReferenceId => + $state.composableBuilder( + column: $state.table.projectBeneficiaryClientReferenceId, + builder: (column, joinBuilders) => + ColumnFilters(column, joinBuilders: joinBuilders)); + ColumnFilters get reAttempts => $state.composableBuilder( column: $state.table.reAttempts, builder: (column, joinBuilders) => @@ -54392,6 +54468,12 @@ class $$SideEffectTableOrderingComposer builder: (column, joinBuilders) => ColumnOrderings(column, joinBuilders: joinBuilders)); + ColumnOrderings get projectBeneficiaryClientReferenceId => + $state.composableBuilder( + column: $state.table.projectBeneficiaryClientReferenceId, + builder: (column, joinBuilders) => + ColumnOrderings(column, joinBuilders: joinBuilders)); + ColumnOrderings get reAttempts => $state.composableBuilder( column: $state.table.reAttempts, builder: (column, joinBuilders) => diff --git a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/side_effect.dart b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/side_effect.dart index bc048e1f5..faafe7a2e 100644 --- a/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/side_effect.dart +++ b/packages/digit_data_model/lib/data/local_store/sql_store/tables/package_tables/side_effect.dart @@ -9,6 +9,7 @@ class SideEffect extends Table { TextColumn get id => text().nullable()(); TextColumn get projectId => text().nullable()(); TextColumn get taskClientReferenceId => text().nullable()(); + TextColumn get projectBeneficiaryClientReferenceId => text().nullable()(); IntColumn get reAttempts => integer().nullable()(); TextColumn get symptoms => text().nullable()(); TextColumn get auditCreatedBy => text().nullable()(); diff --git a/packages/registration_delivery/lib/models/entities/side_effect.dart b/packages/registration_delivery/lib/models/entities/side_effect.dart index c405455c2..1577f12b8 100644 --- a/packages/registration_delivery/lib/models/entities/side_effect.dart +++ b/packages/registration_delivery/lib/models/entities/side_effect.dart @@ -48,6 +48,7 @@ class SideEffectModel extends EntityModel with SideEffectModelMappable { final String? id; final String? projectId; final String? taskClientReferenceId; + final String? projectBeneficiaryClientReferenceId; final int? reAttempts; final List? symptoms; final bool? nonRecoverableError; @@ -60,6 +61,7 @@ class SideEffectModel extends EntityModel with SideEffectModelMappable { this.additionalFields, this.id, this.projectId, + this.projectBeneficiaryClientReferenceId, this.taskClientReferenceId, this.reAttempts, this.symptoms, @@ -93,6 +95,8 @@ class SideEffectModel extends EntityModel with SideEffectModelMappable { clientReferenceId: Value(clientReferenceId), tenantId: Value(tenantId), rowVersion: Value(rowVersion), + projectBeneficiaryClientReferenceId: + Value(projectBeneficiaryClientReferenceId), ); } } diff --git a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart index c3b607e54..b5421dd58 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart @@ -188,30 +188,26 @@ class DeliverySummaryPageState extends LocalizedState { withDivider: true, items: [ LabelValueItem( - label: localizations.translate( - i18.householdLocation.villageLabel), - value: deliverState - .householdMemberWrapper - ?.household - ?.address - ?.locality - ?.code - .split('_') - .last - .titleCase ?? - localizations.translate( - i18.common.coreCommonNA), - isInline: true, - labelFlex: 5, + label: localizations.translate( + i18.householdLocation.villageLabel), + value: deliverState.householdMemberWrapper + ?.household?.address?.locality?.code + .split('_') + .last + .titleCase ?? + localizations + .translate(i18.common.coreCommonNA), + isInline: true, + labelFlex: 5, ), LabelValueItem( - label: localizations.translate(i18 - .householdLocation.landmarkFormLabel), - value: deliverState.householdMemberWrapper - ?.household?.address?.landmark ?? - localizations.translate( - i18.common.coreCommonNA), - isInline: true, + label: localizations.translate(i18 + .householdLocation.landmarkFormLabel), + value: deliverState.householdMemberWrapper + ?.household?.address?.landmark ?? + localizations + .translate(i18.common.coreCommonNA), + isInline: true, labelFlex: 5, ), ]), @@ -226,54 +222,54 @@ class DeliverySummaryPageState extends LocalizedState { withDivider: true, items: [ LabelValueItem( - label: localizations.translate( - i18.beneficiaryDetails.totalMembers), - value: deliverState.householdMemberWrapper - ?.household?.memberCount - .toString() ?? - '0', - isInline: true, + label: localizations.translate( + i18.beneficiaryDetails.totalMembers), + value: deliverState.householdMemberWrapper + ?.household?.memberCount + .toString() ?? + '0', + isInline: true, labelFlex: 5, ), LabelValueItem( - label: localizations.translate(i18 - .householdDetails - .noOfPregnantWomenCountLabel), - value: deliverState - .householdMemberWrapper - ?.household - ?.additionalFields - ?.fields - .where((h) => - h.key == - AdditionalFieldsType - .pregnantWomen - .toValue()) - .firstOrNull - ?.value - .toString() ?? - '0', - isInline: true, + label: localizations.translate(i18 + .householdDetails + .noOfPregnantWomenCountLabel), + value: deliverState + .householdMemberWrapper + ?.household + ?.additionalFields + ?.fields + .where((h) => + h.key == + AdditionalFieldsType + .pregnantWomen + .toValue()) + .firstOrNull + ?.value + .toString() ?? + '0', + isInline: true, labelFlex: 5, ), LabelValueItem( - label: localizations.translate(i18 - .householdDetails - .noOfChildrenBelow5YearsLabel), - value: deliverState - .householdMemberWrapper - ?.household - ?.additionalFields - ?.fields - .where((h) => - h.key == - AdditionalFieldsType.children - .toValue()) - .firstOrNull - ?.value - .toString() ?? - '0', - isInline: true, + label: localizations.translate(i18 + .householdDetails + .noOfChildrenBelow5YearsLabel), + value: deliverState + .householdMemberWrapper + ?.household + ?.additionalFields + ?.fields + .where((h) => + h.key == + AdditionalFieldsType.children + .toValue()) + .firstOrNull + ?.value + .toString() ?? + '0', + isInline: true, labelFlex: 5, ), ]), @@ -282,53 +278,53 @@ class DeliverySummaryPageState extends LocalizedState { margin: const EdgeInsets.all(spacer2), children: [ LabelValueSummary( - padding: EdgeInsets.zero, + padding: EdgeInsets.zero, heading: localizations.translate( i18.householdDetails.houseDetailsLabel), withDivider: true, items: [ LabelValueItem( - label: localizations.translate( - i18.householdDetails.noOfRoomsLabel), - value: deliverState - .householdMemberWrapper - ?.household - ?.additionalFields - ?.fields - .where((h) => - h.key == - AdditionalFieldsType.noOfRooms - .toValue()) - .firstOrNull - ?.value - .toString() ?? - '0', - isInline: true, + label: localizations.translate( + i18.householdDetails.noOfRoomsLabel), + value: deliverState + .householdMemberWrapper + ?.household + ?.additionalFields + ?.fields + .where((h) => + h.key == + AdditionalFieldsType.noOfRooms + .toValue()) + .firstOrNull + ?.value + .toString() ?? + '0', + isInline: true, labelFlex: 5, ), LabelValueItem( - label: localizations.translate( - i18.householdDetails.typeOfStructure), - value: (deliverState - .householdMemberWrapper - ?.household - ?.additionalFields - ?.fields - .where((h) => - h.key == - AdditionalFieldsType - .houseStructureTypes - .toValue()) - .firstOrNull - ?.value ?? - []) - .toString() - .split('|') - .map((item) => - getLocalizedMessage(item)) - .toList() - .join(', '), - isInline: true, + label: localizations.translate( + i18.householdDetails.typeOfStructure), + value: (deliverState + .householdMemberWrapper + ?.household + ?.additionalFields + ?.fields + .where((h) => + h.key == + AdditionalFieldsType + .houseStructureTypes + .toValue()) + .firstOrNull + ?.value ?? + []) + .toString() + .split('|') + .map( + (item) => getLocalizedMessage(item)) + .toList() + .join(', '), + isInline: true, labelFlex: 5, ), ]), @@ -362,7 +358,7 @@ class DeliverySummaryPageState extends LocalizedState { LabelValueSummary( padding: EdgeInsets.zero, heading: localizations.translate( - '${RegistrationDeliverySingleton().selectedProject?.name.toUpperCase()}_${i18.deliverIntervention.deliveryDetailsLabel}_${deliverState.oldTask?.status}'), + '${RegistrationDeliverySingleton().selectedProject?.projectType?.toUpperCase()}_${i18.deliverIntervention.deliveryDetailsLabel}_${deliverState.oldTask?.status}'), withDivider: true, items: [ LabelValueItem( @@ -375,7 +371,7 @@ class DeliverySummaryPageState extends LocalizedState { .toValue() ? i18.deliverIntervention .reasonForRefusalLabel - : '${RegistrationDeliverySingleton().selectedProject?.name.toUpperCase()}_${i18.deliverIntervention.typeOfResourceUsed}'), + : '${RegistrationDeliverySingleton().selectedProject?.projectType?.toUpperCase()}_${i18.deliverIntervention.typeOfResourceUsed}'), value: deliverState.oldTask?.status == Status.administeredFailed .toValue() || diff --git a/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart b/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart index a0bb61b15..ff8c71255 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart @@ -160,6 +160,11 @@ class SideEffectsPageState extends LocalizedState { .tasks .last .clientReferenceId, + projectBeneficiaryClientReferenceId: + widget + .tasks + .last + .projectBeneficiaryClientReferenceId, projectId: RegistrationDeliverySingleton() .projectId, From f946887657c9387b2d847c7eebc14e4760f77adc Mon Sep 17 00:00:00 2001 From: Naveen J <83631045+naveen-egov@users.noreply.github.com> Date: Fri, 13 Dec 2024 10:56:21 +0530 Subject: [PATCH 200/241] Create flutter-build-apk.yml Added a new workflow --- .../.github/workflows/flutter-build-apk.yml | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 .github/workflows/.github/workflows/flutter-build-apk.yml diff --git a/.github/workflows/.github/workflows/flutter-build-apk.yml b/.github/workflows/.github/workflows/flutter-build-apk.yml new file mode 100644 index 000000000..1d957b4e0 --- /dev/null +++ b/.github/workflows/.github/workflows/flutter-build-apk.yml @@ -0,0 +1,74 @@ +name: Build APK Workflow + +on: + push: + branches: ['develop', 'master'] # This specifies that the workflow will run on any push to the 'main' branch + pull_request: + branches: ['develop', 'master'] # Optionally, run on pull requests targeting the 'main' branch + +jobs: + build-apk: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up JDK 11 + uses: actions/setup-java@v3 + with: + java-version: '11' + distribution: 'temurin' # Specify the Java distribution + + - name: Flutter action + uses: subosito/flutter-action@v2.8.0 + with: + flutter-version: "3.16.5" + + - name: Set up Android SDK + uses: android-actions/setup-android@v2 + with: + api-level: 30 + build-tools: 30.0.3 + + - name: Install Dependencies + run: flutter pub get + + - name: Create .env file + run: | + echo "BASE_URL=${{ vars.BASE_URL }}" >> apps/health_campaign_field_worker_app/.env + echo "MDMS_API_PATH=${{ vars.MDMS_API_PATH }}" >> apps/health_campaign_field_worker_app/.env + echo "TENANT_ID=${{ vars.TENANT_ID }}" >> apps/health_campaign_field_worker_app/.env + echo "ACTIONS_API_PATH=${{ vars.ACTIONS_API_PATH }}" >> apps/health_campaign_field_worker_app/.env + echo "SYNC_DOWN_RETRY_COUNT=${{ vars.SYNC_DOWN_RETRY_COUNT }}" >> apps/health_campaign_field_worker_app/.env + echo "RETRY_TIME_INTERVAL=${{ vars.RETRY_TIME_INTERVAL }}" >> apps/health_campaign_field_worker_app/.env + echo "CONNECT_TIMEOUT=${{ vars.CONNECT_TIMEOUT }}" >> apps/health_campaign_field_worker_app/.env + echo "RECEIVE_TIMEOUT=${{ vars.RECEIVE_TIMEOUT }}" >> apps/health_campaign_field_worker_app/.env + echo "SEND_TIMEOUT=${{ vars.SEND_TIMEOUT }}" >> apps/health_campaign_field_worker_app/.env + echo "CHECK_BANDWIDTH_API=${{ vars.CHECK_BANDWIDTH_API }}" >> apps/health_campaign_field_worker_app/.env + echo "HIERARCHY_TYPE=${{ vars.HIERARCHY_TYPE }}" >> apps/health_campaign_field_worker_app/.env + echo "ENV_NAME=${{ vars.ENV_NAME }}" >> apps/health_campaign_field_worker_app/.env + + - name: Verify .env file + run: | + ls -l apps/health_campaign_field_worker_app/.env + cat apps/health_campaign_field_worker_app/.env + + - name: Run APK build script + env: + BUILD_CONFIG: release # or profile depending on your choice + run: bash ./tools/generate-apk.sh + + # Archive the APK as a build artifact so it can be downloaded + - name: Upload APKs + uses: actions/upload-artifact@v3 + with: + name: app-release-apk + path: apps/health_campaign_field_worker_app/build/app/outputs/flutter-apk/app-release.apk + + - name: Upload .env as artifact + uses: actions/upload-artifact@v3 + with: + name: env-file + path: apps/health_campaign_field_worker_app/.env + include-hidden-files: true From 1f89fbdc6a25fb106d9a3f52f95fe0ece01383ab Mon Sep 17 00:00:00 2001 From: naveen-egov Date: Fri, 13 Dec 2024 11:00:00 +0530 Subject: [PATCH 201/241] moved the file to workflow folder --- .github/workflows/{.github/workflows => }/flutter-build-apk.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{.github/workflows => }/flutter-build-apk.yml (100%) diff --git a/.github/workflows/.github/workflows/flutter-build-apk.yml b/.github/workflows/flutter-build-apk.yml similarity index 100% rename from .github/workflows/.github/workflows/flutter-build-apk.yml rename to .github/workflows/flutter-build-apk.yml From 2a65eaba5819b5b16f4018a76c5c4d988a0fc395 Mon Sep 17 00:00:00 2001 From: Naveen J <83631045+naveen-egov@users.noreply.github.com> Date: Fri, 13 Dec 2024 11:02:29 +0530 Subject: [PATCH 202/241] Update flutter-build-apk.yml Updated the flutter version --- .github/workflows/flutter-build-apk.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/flutter-build-apk.yml b/.github/workflows/flutter-build-apk.yml index 1d957b4e0..3093abb2a 100644 --- a/.github/workflows/flutter-build-apk.yml +++ b/.github/workflows/flutter-build-apk.yml @@ -23,7 +23,7 @@ jobs: - name: Flutter action uses: subosito/flutter-action@v2.8.0 with: - flutter-version: "3.16.5" + flutter-version: "3.22.2" - name: Set up Android SDK uses: android-actions/setup-android@v2 From b57ff16af505cbf78597ddacc15784f13d245b9c Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Fri, 13 Dec 2024 11:13:40 +0530 Subject: [PATCH 203/241] updated digit_ui_components to dev branch updated loaders updated readme for sync package --- .../pubspec.lock | 4 +- .../pubspec.yaml | 2 +- .../lib/pages/mark_attendance.dart | 3 +- packages/attendance_management/pubspec.lock | 4 +- packages/attendance_management/pubspec.yaml | 2 +- packages/closed_household/pubspec.lock | 4 +- packages/closed_household/pubspec.yaml | 4 +- packages/complaints/example/pubspec.lock | 4 +- packages/complaints/example/pubspec.yaml | 4 +- packages/complaints/pubspec.lock | 4 +- packages/complaints/pubspec.yaml | 2 +- packages/digit_data_model/pubspec.lock | 24 +- packages/digit_data_model/pubspec.yaml | 60 ++--- .../lib/pages/dashboard/dashboard.dart | 2 +- packages/digit_dss/pubspec.lock | 4 +- packages/digit_dss/pubspec.yaml | 2 +- packages/digit_scanner/example/pubspec.lock | 4 +- packages/digit_scanner/pubspec.lock | 209 +++++++++++++++++- packages/digit_scanner/pubspec.yaml | 2 +- packages/inventory_management/pubspec.lock | 4 +- packages/inventory_management/pubspec.yaml | 2 +- packages/referral_reconciliation/pubspec.lock | 4 +- packages/referral_reconciliation/pubspec.yaml | 2 +- packages/registration_delivery/pubspec.lock | 4 +- packages/registration_delivery/pubspec.yaml | 2 +- packages/survey_form/example/pubspec.lock | 30 +-- packages/survey_form/example/pubspec.yaml | 2 +- packages/survey_form/pubspec.lock | 28 +-- packages/survey_form/pubspec.yaml | 62 +++--- packages/sync_service/LICENSE | 22 +- packages/sync_service/README.md | 62 ++++-- packages/sync_service/pubspec.yaml | 2 +- 32 files changed, 404 insertions(+), 166 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 7c4bd1fa1..e04932ae8 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -554,8 +554,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: version_update - resolved-ref: c68a3ceb1f00c6128780c0cbeb58d9aa8c4d7a13 + ref: develop + resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index a7a8fe03c..b7909ef3a 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -21,7 +21,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: version_update + ref: develop path: ./flutter/digit-ui-components/digit_components digit_components: ^1.0.2 auto_route: ^8.3.0 diff --git a/packages/attendance_management/lib/pages/mark_attendance.dart b/packages/attendance_management/lib/pages/mark_attendance.dart index 32cecfb9d..ad3585631 100644 --- a/packages/attendance_management/lib/pages/mark_attendance.dart +++ b/packages/attendance_management/lib/pages/mark_attendance.dart @@ -301,8 +301,7 @@ class _MarkAttendancePageState extends State { }, loading: () { return Center( - child: - DigitLoaders.circularLoader(context: context), + child: DigitLoaders.inlineLoader(), ); }, ); diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index b424c9901..98aab47b6 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -362,8 +362,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: version_update - resolved-ref: c68a3ceb1f00c6128780c0cbeb58d9aa8c4d7a13 + ref: develop + resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index 3a9b5c896..02602cf3a 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: version_update + ref: develop path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 diff --git a/packages/closed_household/pubspec.lock b/packages/closed_household/pubspec.lock index 6f6e66ee7..e2382b57c 100644 --- a/packages/closed_household/pubspec.lock +++ b/packages/closed_household/pubspec.lock @@ -449,8 +449,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: version_update - resolved-ref: c68a3ceb1f00c6128780c0cbeb58d9aa8c4d7a13 + ref: develop + resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" diff --git a/packages/closed_household/pubspec.yaml b/packages/closed_household/pubspec.yaml index a61f51358..55571b514 100644 --- a/packages/closed_household/pubspec.yaml +++ b/packages/closed_household/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: version_update + ref: develop path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 @@ -39,7 +39,7 @@ dependencies: auto_route: ^8.1.3 digit_data_model: path: - ../digit_data_model + ../digit_data_model package_info_plus: ^8.0.0 digit_showcase: ^1.0.0 collection: ^1.16.0 diff --git a/packages/complaints/example/pubspec.lock b/packages/complaints/example/pubspec.lock index 3a316aa25..cf944c71a 100644 --- a/packages/complaints/example/pubspec.lock +++ b/packages/complaints/example/pubspec.lock @@ -300,8 +300,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: version_update - resolved-ref: ad45e31f470630b5876f38c0bc7744c5bf05b02b + ref: develop + resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" diff --git a/packages/complaints/example/pubspec.yaml b/packages/complaints/example/pubspec.yaml index 752694196..ed8ce9cf8 100644 --- a/packages/complaints/example/pubspec.yaml +++ b/packages/complaints/example/pubspec.yaml @@ -36,11 +36,11 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 complaints: - path : ../ + path: ../ digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: version_update + ref: develop path: ./flutter/digit-ui-components/digit_components diff --git a/packages/complaints/pubspec.lock b/packages/complaints/pubspec.lock index a97aaaaeb..543140f2c 100644 --- a/packages/complaints/pubspec.lock +++ b/packages/complaints/pubspec.lock @@ -338,8 +338,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: version_update - resolved-ref: c68a3ceb1f00c6128780c0cbeb58d9aa8c4d7a13 + ref: develop + resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" diff --git a/packages/complaints/pubspec.yaml b/packages/complaints/pubspec.yaml index a3b95e303..b04b2c32b 100644 --- a/packages/complaints/pubspec.yaml +++ b/packages/complaints/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: version_update + ref: develop path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 diff --git a/packages/digit_data_model/pubspec.lock b/packages/digit_data_model/pubspec.lock index 65520d6db..5c0c096f9 100644 --- a/packages/digit_data_model/pubspec.lock +++ b/packages/digit_data_model/pubspec.lock @@ -149,18 +149,18 @@ packages: dependency: transitive description: name: camera - sha256: dfa8fc5a1adaeb95e7a54d86a5bd56f4bb0e035515354c8ac6d262e35cec2ec8 + sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167" url: "https://pub.dev" source: hosted - version: "0.10.6" - camera_android: + version: "0.11.0+2" + camera_android_camerax: dependency: transitive description: - name: camera_android - sha256: "32f04948a284b71d938fe275616faf4957d07f9b3aab8021bfc8c418301a289e" + name: camera_android_camerax + sha256: "011be2ab0e5b3e3aa8094413fa890f8c5c5afd7cfdaef353a992047d4dab5780" url: "https://pub.dev" source: hosted - version: "0.10.9+11" + version: "0.6.8+2" camera_avfoundation: dependency: transitive description: @@ -324,8 +324,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: version_update - resolved-ref: "68e80b1a2f13e166698274cae5b1ca6a850c476b" + ref: develop + resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -617,10 +617,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 url: "https://pub.dev" source: hosted - version: "4.0.5" + version: "6.2.1" graphs: dependency: transitive description: @@ -865,10 +865,10 @@ packages: dependency: transitive description: name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "3.1.3" matcher: dependency: transitive description: diff --git a/packages/digit_data_model/pubspec.yaml b/packages/digit_data_model/pubspec.yaml index 8f0622488..b109e2593 100644 --- a/packages/digit_data_model/pubspec.yaml +++ b/packages/digit_data_model/pubspec.yaml @@ -28,7 +28,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: version_update + ref: develop path: ./flutter/digit-ui-components/digit_components dev_dependencies: @@ -53,33 +53,33 @@ dev_dependencies: # The following section is specific to Flutter packages. flutter: - # To add assets to your package, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - # - # For details regarding assets in packages, see - # https://flutter.dev/assets-and-images/#from-packages - # - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware +# To add assets to your package, add an assets section, like this: +# assets: +# - images/a_dot_burr.jpeg +# - images/a_dot_ham.jpeg +# +# For details regarding assets in packages, see +# https://flutter.dev/assets-and-images/#from-packages +# +# An image asset can refer to one or more resolution-specific "variants", see +# https://flutter.dev/assets-and-images/#resolution-aware - # To add custom fonts to your package, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts in packages, see - # https://flutter.dev/custom-fonts/#from-packages +# To add custom fonts to your package, add a fonts section here, +# in this "flutter" section. Each entry in this list should have a +# "family" key with the font family name, and a "fonts" key with a +# list giving the asset and other descriptors for the font. For +# example: +# fonts: +# - family: Schyler +# fonts: +# - asset: fonts/Schyler-Regular.ttf +# - asset: fonts/Schyler-Italic.ttf +# style: italic +# - family: Trajan Pro +# fonts: +# - asset: fonts/TrajanPro.ttf +# - asset: fonts/TrajanPro_Bold.ttf +# weight: 700 +# +# For details regarding fonts in packages, see +# https://flutter.dev/custom-fonts/#from-packages diff --git a/packages/digit_dss/lib/pages/dashboard/dashboard.dart b/packages/digit_dss/lib/pages/dashboard/dashboard.dart index 8d553fbdb..d29c89c3c 100644 --- a/packages/digit_dss/lib/pages/dashboard/dashboard.dart +++ b/packages/digit_dss/lib/pages/dashboard/dashboard.dart @@ -55,7 +55,7 @@ class UserDashboardPageState extends LocalizedState { setState(() { isLoading = true; }); - DigitLoaders.showLoadingDialog(context: context); + DigitLoaders.inlineLoader(); } }, fetched: ( diff --git a/packages/digit_dss/pubspec.lock b/packages/digit_dss/pubspec.lock index f03de929a..d900c6840 100644 --- a/packages/digit_dss/pubspec.lock +++ b/packages/digit_dss/pubspec.lock @@ -377,8 +377,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: version_update - resolved-ref: c68a3ceb1f00c6128780c0cbeb58d9aa8c4d7a13 + ref: develop + resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" diff --git a/packages/digit_dss/pubspec.yaml b/packages/digit_dss/pubspec.yaml index fda0661cf..5dbc3bc0c 100644 --- a/packages/digit_dss/pubspec.yaml +++ b/packages/digit_dss/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: version_update + ref: develop path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 reactive_forms: ^17.0.0 diff --git a/packages/digit_scanner/example/pubspec.lock b/packages/digit_scanner/example/pubspec.lock index 051c604e8..91869e0d2 100644 --- a/packages/digit_scanner/example/pubspec.lock +++ b/packages/digit_scanner/example/pubspec.lock @@ -339,8 +339,8 @@ packages: dependency: transitive description: path: "flutter/digit-ui-components/digit_components" - ref: version_update - resolved-ref: c68a3ceb1f00c6128780c0cbeb58d9aa8c4d7a13 + ref: develop + resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" diff --git a/packages/digit_scanner/pubspec.lock b/packages/digit_scanner/pubspec.lock index 0166d480c..97e95aa17 100644 --- a/packages/digit_scanner/pubspec.lock +++ b/packages/digit_scanner/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "67.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -17,6 +25,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.4.1" + ansicolor: + dependency: transitive + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + url: "https://pub.dev" + source: hosted + version: "2.0.3" archive: dependency: transitive description: @@ -337,6 +353,21 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" + dart_mappable: + dependency: transitive + description: + name: dart_mappable + sha256: f69a961ae8589724ebb542e588f228ae844c5f78028899cbe2cc718977c1b382 + url: "https://pub.dev" + source: hosted + version: "4.3.0" + dart_mappable_builder: + dependency: "direct overridden" + description: + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.3" dart_style: dependency: transitive description: @@ -353,12 +384,26 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.1" + digit_components: + dependency: "direct overridden" + description: + path: "../digit_components" + relative: true + source: path + version: "1.0.2+1" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_ui_components: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: version_update - resolved-ref: c68a3ceb1f00c6128780c0cbeb58d9aa8c4d7a13 + ref: develop + resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -370,6 +415,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" + easy_stepper: + dependency: transitive + description: + name: easy_stepper + sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" + url: "https://pub.dev" + source: hosted + version: "0.8.5+1" fake_async: dependency: transitive description: @@ -434,6 +487,46 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+3" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "9e69806bb3d905aeec3c1242e0e1475de6ea6d48f456af29d598fb229a2b4e5e" + url: "https://pub.dev" + source: hosted + version: "2.18.2" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: @@ -479,6 +572,62 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.13" + flutter_focus_watcher: + dependency: transitive + description: + name: flutter_focus_watcher + sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility: + dependency: transitive + description: + name: flutter_keyboard_visibility + sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" + url: "https://pub.dev" + source: hosted + version: "5.4.1" + flutter_keyboard_visibility_linux: + dependency: transitive + description: + name: flutter_keyboard_visibility_linux + sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_macos: + dependency: transitive + description: + name: flutter_keyboard_visibility_macos + sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_platform_interface: + dependency: transitive + description: + name: flutter_keyboard_visibility_platform_interface + sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_web: + dependency: transitive + description: + name: flutter_keyboard_visibility_web + sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_windows: + dependency: transitive + description: + name: flutter_keyboard_visibility_windows + sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 + url: "https://pub.dev" + source: hosted + version: "1.0.0" flutter_lints: dependency: "direct dev" description: @@ -529,6 +678,14 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_typeahead: + dependency: transitive + description: + name: flutter_typeahead + sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 + url: "https://pub.dev" + source: hosted + version: "4.8.0" flutter_web_plugins: dependency: transitive description: flutter @@ -950,6 +1107,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" + package_info_plus: + dependency: transitive + description: + name: package_info_plus + sha256: "70c421fe9d9cc1a9a7f3b05ae56befd469fe4f8daa3b484823141a55442d858d" + url: "https://pub.dev" + source: hosted + version: "8.1.2" + package_info_plus_platform_interface: + dependency: transitive + description: + name: package_info_plus_platform_interface + sha256: a5ef9986efc7bf772f2696183a3992615baa76c1ffb1189318dd8803778fb05b + url: "https://pub.dev" + source: hosted + version: "3.0.2" path: dependency: "direct main" description: @@ -1046,6 +1219,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" + pointer_interceptor: + dependency: transitive + description: + name: pointer_interceptor + sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 + url: "https://pub.dev" + source: hosted + version: "0.9.3+7" pool: dependency: transitive description: @@ -1078,6 +1259,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + reactive_flutter_typeahead: + dependency: transitive + description: + name: reactive_flutter_typeahead + sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a + url: "https://pub.dev" + source: hosted + version: "2.1.1" reactive_forms: dependency: "direct main" description: @@ -1086,6 +1275,14 @@ packages: url: "https://pub.dev" source: hosted version: "17.0.1" + remove_emoji_input_formatter: + dependency: transitive + description: + name: remove_emoji_input_formatter + sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" + url: "https://pub.dev" + source: hosted + version: "0.0.1+1" shelf: dependency: transitive description: @@ -1251,6 +1448,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + type_plus: + dependency: transitive + description: + name: type_plus + sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 + url: "https://pub.dev" + source: hosted + version: "2.1.1" typed_data: dependency: transitive description: diff --git a/packages/digit_scanner/pubspec.yaml b/packages/digit_scanner/pubspec.yaml index c71212aac..983c6c681 100644 --- a/packages/digit_scanner/pubspec.yaml +++ b/packages/digit_scanner/pubspec.yaml @@ -40,7 +40,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: version_update + ref: develop path: ./flutter/digit-ui-components/digit_components reactive_forms: ^17.0.0 gs1_barcode_parser: ^1.0.5 diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index e19206faf..7f9493f49 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -433,8 +433,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: version_update - resolved-ref: c68a3ceb1f00c6128780c0cbeb58d9aa8c4d7a13 + ref: develop + resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index 63dd4aec3..1c0c5940a 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: version_update + ref: develop path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index d970ecf56..a698b2848 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -425,8 +425,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: version_update - resolved-ref: c68a3ceb1f00c6128780c0cbeb58d9aa8c4d7a13 + ref: develop + resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" diff --git a/packages/referral_reconciliation/pubspec.yaml b/packages/referral_reconciliation/pubspec.yaml index 8208c52e2..2b121e71c 100644 --- a/packages/referral_reconciliation/pubspec.yaml +++ b/packages/referral_reconciliation/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: version_update + ref: develop path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index cb704b0eb..766d0a087 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -441,8 +441,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: version_update - resolved-ref: ad45e31f470630b5876f38c0bc7744c5bf05b02b + ref: develop + resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index 3277d082f..be150a5db 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: version_update + ref: develop path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 diff --git a/packages/survey_form/example/pubspec.lock b/packages/survey_form/example/pubspec.lock index 1025e27d4..6c191d6ff 100644 --- a/packages/survey_form/example/pubspec.lock +++ b/packages/survey_form/example/pubspec.lock @@ -133,26 +133,26 @@ packages: dependency: transitive description: name: camera - sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" + sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167" url: "https://pub.dev" source: hosted - version: "0.10.5+9" - camera_android: + version: "0.11.0+2" + camera_android_camerax: dependency: transitive description: - name: camera_android - sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 + name: camera_android_camerax + sha256: "011be2ab0e5b3e3aa8094413fa890f8c5c5afd7cfdaef353a992047d4dab5780" url: "https://pub.dev" source: hosted - version: "0.10.9+2" + version: "0.6.8+2" camera_avfoundation: dependency: transitive description: name: camera_avfoundation - sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" + sha256: "2e4c568f70e406ccb87376bc06b53d2f5bebaab71e2fbcc1a950e31449381bcf" url: "https://pub.dev" source: hosted - version: "0.9.13+10" + version: "0.9.17+5" camera_platform_interface: dependency: transitive description: @@ -284,8 +284,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: version_update - resolved-ref: "68e80b1a2f13e166698274cae5b1ca6a850c476b" + ref: develop + resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -569,10 +569,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 url: "https://pub.dev" source: hosted - version: "4.0.5" + version: "6.2.1" graphs: dependency: transitive description: @@ -809,10 +809,10 @@ packages: dependency: transitive description: name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "3.1.3" matcher: dependency: transitive description: @@ -1347,4 +1347,4 @@ packages: version: "3.1.2" sdks: dart: ">=3.4.0 <4.0.0" - flutter: ">=3.19.0" + flutter: ">=3.22.0" diff --git a/packages/survey_form/example/pubspec.yaml b/packages/survey_form/example/pubspec.yaml index cf5d2e74b..7b4364417 100644 --- a/packages/survey_form/example/pubspec.yaml +++ b/packages/survey_form/example/pubspec.yaml @@ -31,7 +31,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: version_update + ref: develop path: ./flutter/digit-ui-components/digit_components survey_form: path: ../ diff --git a/packages/survey_form/pubspec.lock b/packages/survey_form/pubspec.lock index 79ce9b65c..d1ecb0638 100644 --- a/packages/survey_form/pubspec.lock +++ b/packages/survey_form/pubspec.lock @@ -173,26 +173,26 @@ packages: dependency: transitive description: name: camera - sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797" + sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167" url: "https://pub.dev" source: hosted - version: "0.10.5+9" - camera_android: + version: "0.11.0+2" + camera_android_camerax: dependency: transitive description: - name: camera_android - sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 + name: camera_android_camerax + sha256: "011be2ab0e5b3e3aa8094413fa890f8c5c5afd7cfdaef353a992047d4dab5780" url: "https://pub.dev" source: hosted - version: "0.10.9+2" + version: "0.6.8+2" camera_avfoundation: dependency: transitive description: name: camera_avfoundation - sha256: "608b56b0880722f703871329c4d7d4c2f379c8e2936940851df7fc041abc6f51" + sha256: "2e4c568f70e406ccb87376bc06b53d2f5bebaab71e2fbcc1a950e31449381bcf" url: "https://pub.dev" source: hosted - version: "0.9.13+10" + version: "0.9.17+5" camera_platform_interface: dependency: transitive description: @@ -354,8 +354,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: version_update - resolved-ref: "68e80b1a2f13e166698274cae5b1ca6a850c476b" + ref: develop + resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -695,10 +695,10 @@ packages: dependency: transitive description: name: google_fonts - sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 url: "https://pub.dev" source: hosted - version: "4.0.5" + version: "6.2.1" graphs: dependency: transitive description: @@ -943,10 +943,10 @@ packages: dependency: transitive description: name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "3.1.3" matcher: dependency: transitive description: diff --git a/packages/survey_form/pubspec.yaml b/packages/survey_form/pubspec.yaml index e89e6ed13..f09381fcc 100644 --- a/packages/survey_form/pubspec.yaml +++ b/packages/survey_form/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: version_update + ref: develop path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 @@ -28,7 +28,7 @@ dependencies: auto_route: ^8.1.3 digit_data_model: path: - ../digit_data_model + ../digit_data_model collection: ^1.16.0 location: ^6.0.2 dio: ^5.1.2 @@ -56,33 +56,33 @@ dev_dependencies: # The following section is specific to Flutter packages. flutter: - # To add assets to your package, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - # - # For details regarding assets in packages, see - # https://flutter.dev/assets-and-images/#from-packages - # - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware +# To add assets to your package, add an assets section, like this: +# assets: +# - images/a_dot_burr.jpeg +# - images/a_dot_ham.jpeg +# +# For details regarding assets in packages, see +# https://flutter.dev/assets-and-images/#from-packages +# +# An image asset can refer to one or more resolution-specific "variants", see +# https://flutter.dev/assets-and-images/#resolution-aware - # To add custom fonts to your package, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts in packages, see - # https://flutter.dev/custom-fonts/#from-packages +# To add custom fonts to your package, add a fonts section here, +# in this "flutter" section. Each entry in this list should have a +# "family" key with the font family name, and a "fonts" key with a +# list giving the asset and other descriptors for the font. For +# example: +# fonts: +# - family: Schyler +# fonts: +# - asset: fonts/Schyler-Regular.ttf +# - asset: fonts/Schyler-Italic.ttf +# style: italic +# - family: Trajan Pro +# fonts: +# - asset: fonts/TrajanPro.ttf +# - asset: fonts/TrajanPro_Bold.ttf +# weight: 700 +# +# For details regarding fonts in packages, see +# https://flutter.dev/custom-fonts/#from-packages diff --git a/packages/sync_service/LICENSE b/packages/sync_service/LICENSE index ba75c69f7..f7d7ac958 100644 --- a/packages/sync_service/LICENSE +++ b/packages/sync_service/LICENSE @@ -1 +1,21 @@ -TODO: Add your license here. +MIT License + +Copyright (c) 2024 eGovernments Foundation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/packages/sync_service/README.md b/packages/sync_service/README.md index 02fe8ecab..4186a82f4 100644 --- a/packages/sync_service/README.md +++ b/packages/sync_service/README.md @@ -1,39 +1,53 @@ - +## Features -TODO: Put a short description of the package here that helps potential users -know whether this package might be useful for them. +SyncBloc: Handles refresh and syncup -## Features +Data: +The `SyncEntityMapperListener` is an abstract class that defines methods for handling sync entity +mapping. This class provides methods for writing to the entity database, getting the sync count, +handling entity responses, and updating entities. +The `SyncService` class provides methods to perform sync operations - performSync, writeToEntityDB, +getPendingSyncRecordsCount, filterEntityByBandwidth, filterOpLogByBandwidth, SyncError class -TODO: List what your package can do. Maybe include images, gifs, or videos. +Repositories - +RepositoryType - provides methods to get the remote and local repositories for a given data model +type - getRemoteForType, getLocalForType +PerformSyncDown - provides a method to perform a sync down operation. +PerformSyncUp - provides a method to perform a sync up operation. -## Getting started +Models: Bandwidth Model -TODO: List prerequisites and provide or point to information on how to -start using the package. +## Getting Started + +To use this package, add the following dependency to your `pubspec.yaml` file: + +```yaml +dependencies: + sync_service: ^latest +``` ## Usage -TODO: Include short and useful examples for package users. Add longer examples -to `/example` folder. +Here are some examples of how to use the DataModel package in your project: + +Extend the `SyncUpOperation` implement the required methods. ```dart -const like = 'sample'; + class CustomSyncRegistry implements SyncUpOperation { + CustomSyncRegistry({ + this.remote + }); +} ``` -## Additional information +Extend the `SyncEntityMapperListener` class and implement the required methods. -TODO: Tell users more about the package: where to find more information, how to -contribute to the package, how to file issues, what response they can expect -from the package authors, and more. +```dart + class SyncServiceMapper extends SyncEntityMapperListener { +} +``` \ No newline at end of file diff --git a/packages/sync_service/pubspec.yaml b/packages/sync_service/pubspec.yaml index a505b27ee..d3b3d77ac 100644 --- a/packages/sync_service/pubspec.yaml +++ b/packages/sync_service/pubspec.yaml @@ -31,7 +31,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: version_update + ref: develop path: ./flutter/digit-ui-components/digit_components dev_dependencies: From 9c3fb7702affc51b03ac956507696609a5b22bb0 Mon Sep 17 00:00:00 2001 From: Naveen Renati Date: Wed, 23 Oct 2024 10:04:09 +0530 Subject: [PATCH 204/241] individual name search fix --- .../individual_global_search.dart | 50 ++++- .../local/household_global_search.dart | 14 ++ .../local/individual_global_search.dart | 181 +++++++++++++----- 3 files changed, 189 insertions(+), 56 deletions(-) diff --git a/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart b/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart index dc95e0659..d6daaca5f 100644 --- a/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart +++ b/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart @@ -141,14 +141,6 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { null, ); - final List individualClientReferenceIds = householdMembersList - .map((e) => e.individualClientReferenceId.toString()) - .toList(); - - individualsList = await individual.search( - IndividualSearchModel(clientReferenceId: individualClientReferenceIds), - ); - late List houseHoldClientReferenceIds = []; houseHoldClientReferenceIds = householdMembersList @@ -159,6 +151,33 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { clientReferenceId: houseHoldClientReferenceIds, )); + householdMembersList = await fetchHouseholdMembersBulk( + null, + houseHoldClientReferenceIds, + ); + + individualsList = await individual.search( + IndividualSearchModel( + clientReferenceId: householdMembersList + .map((e) => e.individualClientReferenceId.toString()) + .toList(), + ), + ); + + final List individualClientReferenceIds = householdMembersList + .map((e) => e.individualClientReferenceId.toString()) + .toList(); + + projectBeneficiariesList = await projectBeneficiary.search( + ProjectBeneficiarySearchModel( + projectId: [RegistrationDeliverySingleton().projectId.toString()], + beneficiaryClientReferenceId: + individualClientReferenceIds.map((e) => e).toList())); + + individualsList = await individual.search( + IndividualSearchModel(clientReferenceId: individualClientReferenceIds), + ); + finalResults.forEach((element) { taskList.add(element); }); @@ -193,7 +212,7 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { individualClientReferenceIds.map((e) => e.toString()).toList())); // Search for individual results using the extracted IDs and search text. - final List householdMembers = + List householdMembers = await fetchHouseholdMembersBulk( individualClientReferenceIds, null, @@ -205,6 +224,19 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { .toList(), )); + householdMembers = await fetchHouseholdMembersBulk( + null, + householdList.map((e) => e.clientReferenceId).toList(), + ); + + individualsList = await individual.search( + IndividualSearchModel( + clientReferenceId: householdMembers + .map((e) => e.individualClientReferenceId.toString()) + .toList(), + ), + ); + projectBeneficiariesList = await projectBeneficiary.search( ProjectBeneficiarySearchModel( projectId: [RegistrationDeliverySingleton().projectId.toString()], diff --git a/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart b/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart index e91a431ec..ec9147421 100644 --- a/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart +++ b/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart @@ -266,6 +266,20 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { sql.name.givenName.contains( params.nameSearch!, ), + sql.name.familyName.contains( + params.nameSearch!, + ), + buildOr([ + sql.name.givenName.contains( + params.nameSearch!, + ), + sql.name.familyName.contains( + params.nameSearch!, + ), + sql.name.otherNames.equals( + params.nameSearch!, + ), + ]), ]), ])); } diff --git a/packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart b/packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart index 199722557..1dfad5ded 100644 --- a/packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart +++ b/packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'dart:math' as math; +import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; import 'package:flutter/material.dart'; @@ -219,19 +220,15 @@ class IndividualGlobalSearchRepository extends LocalRepository { return selectQuery; } else if (params.nameSearch != null || params.nameSearch!.isNotEmpty && selectQuery == null) { - selectQuery = super - .sql - .individual - .select() - .join([joinName(sql), joinIndividualAddress(sql)]); + selectQuery = super.sql.individual.select().join( + [joinName(sql), joinIdentifier(sql), joinIndividualAddress(sql)]); await searchByName(selectQuery, params, sql); selectQuery = selectQuery.join([ leftOuterJoin( sql.householdMember, sql.householdMember.individualClientReferenceId .equalsExp(sql.individual.clientReferenceId)) - ]) - ..where(sql.householdMember.isHeadOfHousehold.equals(true)); + ]); selectQuery.join([ leftOuterJoin( sql.household, @@ -245,9 +242,7 @@ class IndividualGlobalSearchRepository extends LocalRepository { } else if (params.nameSearch != null && params.nameSearch!.isNotEmpty && selectQuery != null) { - selectQuery = selectQuery.join([ - joinName(sql), - ]); + selectQuery = selectQuery.join([joinName(sql), joinIdentifier(sql)]); selectQuery = searchByName(selectQuery, params, sql); } return selectQuery; @@ -261,6 +256,20 @@ class IndividualGlobalSearchRepository extends LocalRepository { sql.name.givenName.contains( params.nameSearch!, ), + sql.name.familyName.contains( + params.nameSearch!, + ), + buildOr([ + sql.name.givenName.contains( + params.nameSearch!, + ), + sql.name.familyName.contains( + params.nameSearch!, + ), + sql.name.otherNames.equals( + params.nameSearch!, + ), + ]), ]), ])); } @@ -325,6 +334,7 @@ class IndividualGlobalSearchRepository extends LocalRepository { Status.closeHousehold.name: Status.closeHousehold, }; var applyFilter = filter; + var appliedFilter = statusMap[filter]!.toValue(); if (selectQuery == null) { selectQuery = sql.select(sql.task).join([ leftOuterJoin( @@ -333,11 +343,11 @@ class IndividualGlobalSearchRepository extends LocalRepository { .equalsExp(sql.task.projectBeneficiaryClientReferenceId)), leftOuterJoin( sql.individual, - sql.individual.clientReferenceId - .equalsExp(sql.projectBeneficiary.beneficiaryClientReferenceId)), + sql.individual.clientReferenceId.equalsExp( + sql.projectBeneficiary.beneficiaryClientReferenceId)), ]) ..where(sql.task.status.equals( - statusMap[applyFilter]!.toValue(), + appliedFilter, )); if (!(params.filter!.contains(Status.notRegistered.name))) { selectQuery @@ -370,6 +380,15 @@ class IndividualGlobalSearchRepository extends LocalRepository { ); } + joinIdentifier(LocalSqlDataStore sql) { + return leftOuterJoin( + sql.identifier, + sql.identifier.clientReferenceId.equalsExp( + sql.individual.clientReferenceId, + ), + ); + } + joinIndividualAddress(LocalSqlDataStore sql) { return leftOuterJoin( sql.address, @@ -414,38 +433,71 @@ class IndividualGlobalSearchRepository extends LocalRepository { final individual = e.readTableOrNull(sql.individual); final address = e.readTableOrNull(sql.address); final name = e.readTableOrNull(sql.name); + final identifier = e.readTableOrNull(sql.identifier); return IndividualModel( - id: individual?.id, - tenantId: individual?.tenantId, - clientReferenceId: individual!.clientReferenceId, + id: individual.id, + tenantId: individual.tenantId, + individualId: individual.individualId, + clientReferenceId: individual.clientReferenceId, dateOfBirth: individual.dateOfBirth, - name: NameModel( - givenName: name?.givenName, - individualClientReferenceId: individual.clientReferenceId, - tenantId: individual.tenantId, - auditDetails: AuditDetails( - createdBy: individual.auditCreatedBy!, - createdTime: individual.auditCreatedTime!, - lastModifiedBy: individual.auditModifiedBy, - lastModifiedTime: individual.auditModifiedTime, - ), - ), - rowVersion: individual.rowVersion, + mobileNumber: individual.mobileNumber, isDeleted: individual.isDeleted, - auditDetails: AuditDetails( - createdBy: individual.auditCreatedBy!, - createdTime: individual.auditCreatedTime!, - lastModifiedBy: individual.auditModifiedBy, - lastModifiedTime: individual.auditModifiedTime, - ), - address: address == null + rowVersion: individual.rowVersion, + clientAuditDetails: (individual.clientCreatedBy != null && + individual.clientCreatedTime != null) + ? ClientAuditDetails( + createdBy: individual.clientCreatedBy!, + createdTime: individual.clientCreatedTime!, + lastModifiedBy: individual.clientModifiedBy, + lastModifiedTime: individual.clientModifiedTime, + ) + : null, + auditDetails: (individual.auditCreatedBy != null && + individual.auditCreatedTime != null) + ? AuditDetails( + createdBy: individual.auditCreatedBy!, + createdTime: individual.auditCreatedTime!, + lastModifiedBy: individual.auditModifiedBy, + lastModifiedTime: individual.auditModifiedTime, + ) + : null, + name: name == null ? null - : [ - AddressModel( + : NameModel( + id: name.id, + individualClientReferenceId: individual.clientReferenceId, + familyName: name.familyName, + givenName: name.givenName, + otherNames: name.otherNames, + rowVersion: name.rowVersion, + tenantId: name.tenantId, + auditDetails: (name.auditCreatedBy != null && + name.auditCreatedTime != null) + ? AuditDetails( + createdBy: name.auditCreatedBy!, + createdTime: name.auditCreatedTime!, + lastModifiedBy: name.auditModifiedBy, + lastModifiedTime: name.auditModifiedTime, + ) + : null, + clientAuditDetails: (name.clientCreatedBy != null && + name.clientCreatedTime != null) + ? ClientAuditDetails( + createdBy: name.clientCreatedBy!, + createdTime: name.clientCreatedTime!, + lastModifiedBy: name.clientModifiedBy, + lastModifiedTime: name.clientModifiedTime, + ) + : null, + ), + bloodGroup: individual.bloodGroup, + address: [ + address == null + ? null + : AddressModel( id: address.id, - relatedClientReferenceId: - address.relatedClientReferenceId, + relatedClientReferenceId: individual.clientReferenceId, tenantId: address.tenantId, doorNo: address.doorNo, latitude: address.latitude, @@ -456,22 +508,57 @@ class IndividualGlobalSearchRepository extends LocalRepository { addressLine2: address.addressLine2, city: address.city, pincode: address.pincode, + type: address.type, locality: address.localityBoundaryCode != null ? LocalityModel( code: address.localityBoundaryCode!, name: address.localityBoundaryName, ) : null, - type: address.type, rowVersion: address.rowVersion, - auditDetails: AuditDetails( - createdBy: individual.auditCreatedBy!, - createdTime: individual.auditCreatedTime!, - lastModifiedBy: individual.auditModifiedBy, - lastModifiedTime: individual.auditModifiedTime, - ), + auditDetails: (address.auditCreatedBy != null && + address.auditCreatedTime != null) + ? AuditDetails( + createdBy: address.auditCreatedBy!, + createdTime: address.auditCreatedTime!, + lastModifiedBy: address.auditModifiedBy, + lastModifiedTime: address.auditModifiedTime, + ) + : null, + clientAuditDetails: (address.clientCreatedBy != null && + address.clientCreatedTime != null) + ? ClientAuditDetails( + createdBy: address.clientCreatedBy!, + createdTime: address.clientCreatedTime!, + lastModifiedBy: address.clientModifiedBy, + lastModifiedTime: address.clientModifiedTime, + ) + : null, ), - ], + ].whereNotNull().toList(), + gender: individual.gender, + identifiers: [ + if (identifier != null) + IdentifierModel( + id: identifier.id, + clientReferenceId: individual.clientReferenceId, + identifierType: identifier.identifierType, + identifierId: identifier.identifierId, + rowVersion: identifier.rowVersion, + tenantId: identifier.tenantId, + auditDetails: AuditDetails( + createdBy: identifier.auditCreatedBy!, + createdTime: identifier.auditCreatedTime!, + lastModifiedBy: identifier.auditModifiedBy, + lastModifiedTime: identifier.auditModifiedTime, + ), + ), + ], + additionalFields: individual.additionalFields == null + ? null + : IndividualAdditionalFieldsMapper.fromJson( + individual.additionalFields!, + ), ); }) .where((element) => element.isDeleted != true) From b2e6ee3bd89863dcd49ad798c17ceb0192e717d3 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Fri, 13 Dec 2024 13:52:49 +0530 Subject: [PATCH 205/241] solved the localization issue in survey_form_view.dart and taking the digit_ui_component from hcm_changes branch --- .../pubspec.lock | 13 +- .../pubspec.yaml | 2 +- packages/attendance_management/pubspec.lock | 89 +- packages/attendance_management/pubspec.yaml | 2 +- packages/closed_household/pubspec.lock | 73 +- packages/closed_household/pubspec.yaml | 2 +- packages/complaints/example/pubspec.lock | 4 +- packages/complaints/example/pubspec.yaml | 2 +- packages/complaints/pubspec.lock | 110 +-- packages/complaints/pubspec.yaml | 2 +- packages/digit_data_model/pubspec.lock | 14 +- packages/digit_data_model/pubspec.yaml | 2 +- packages/digit_dss/pubspec.lock | 92 +- packages/digit_dss/pubspec.yaml | 2 +- packages/digit_firebase_services/pubspec.lock | 56 +- packages/digit_location_tracker/pubspec.lock | 913 +----------------- packages/digit_scanner/example/pubspec.lock | 4 +- packages/digit_scanner/pubspec.lock | 209 +--- packages/digit_scanner/pubspec.yaml | 2 +- packages/digit_showcase/pubspec.lock | 56 +- packages/forms_engine/pubspec.lock | 120 +-- packages/inventory_management/pubspec.lock | 68 +- packages/inventory_management/pubspec.yaml | 2 +- packages/referral_reconciliation/pubspec.lock | 59 +- packages/referral_reconciliation/pubspec.yaml | 2 +- packages/registration_delivery/pubspec.lock | 61 +- packages/registration_delivery/pubspec.yaml | 2 +- packages/survey_form/example/pubspec.lock | 4 +- packages/survey_form/example/pubspec.yaml | 2 +- .../lib/pages/survey_form_view.dart | 3 +- packages/survey_form/pubspec.lock | 69 +- packages/survey_form/pubspec.yaml | 2 +- packages/sync_service/pubspec.yaml | 2 +- 33 files changed, 236 insertions(+), 1809 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index e04932ae8..bb7db31c6 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -441,10 +441,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../../packages/dart_mappable_builder" - relative: true - source: path - version: "4.2.3" + name: dart_mappable_builder + sha256: "04a6e7117382f8a8689b3e363bee6c3de8c9ea4332e664148fe01bd576eb1126" + url: "https://pub.dev" + source: hosted + version: "4.3.0" dart_style: dependency: transitive description: @@ -554,8 +555,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f + ref: hcm_changes + resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index b7909ef3a..f358f7f1c 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -21,7 +21,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop + ref: hcm_changes path: ./flutter/digit-ui-components/digit_components digit_components: ^1.0.2 auto_route: ^8.3.0 diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index 98aab47b6..1688c0676 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "64.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -316,9 +308,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + name: dart_mappable_builder + sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e + url: "https://pub.dev" + source: hosted version: "4.2.3" dart_style: dependency: transitive @@ -347,23 +340,17 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path + name: digit_data_model + sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" + url: "https://pub.dev" + source: hosted version: "1.0.5-dev.1" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" digit_ui_components: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f + ref: hcm_changes + resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -479,46 +466,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" - url: "https://pub.dev" - source: hosted - version: "2.17.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" fixnum: dependency: transitive description: @@ -663,10 +610,10 @@ packages: dependency: transitive description: name: geolocator_android - sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" url: "https://pub.dev" source: hosted - version: "4.6.1" + version: "4.3.1" geolocator_apple: dependency: transitive description: @@ -1248,14 +1195,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" - sprintf: - dependency: transitive - description: - name: sprintf - sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" - url: "https://pub.dev" - source: hosted - version: "7.0.0" sqlite3: dependency: transitive description: @@ -1452,10 +1391,10 @@ packages: dependency: transitive description: name: uuid - sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" url: "https://pub.dev" source: hosted - version: "4.5.1" + version: "3.0.7" vector_graphics: dependency: transitive description: diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index 02602cf3a..36a89e96d 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop + ref: hcm_changes path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 diff --git a/packages/closed_household/pubspec.lock b/packages/closed_household/pubspec.lock index e2382b57c..b08b8c445 100644 --- a/packages/closed_household/pubspec.lock +++ b/packages/closed_household/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -380,10 +372,12 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.3" + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "5595f37310a63a92b2c1c7e386c74fe39df5555d" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git + version: "4.2.0" dart_style: dependency: transitive description: @@ -423,13 +417,6 @@ packages: relative: true source: path version: "1.0.5-dev.1" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" digit_scanner: dependency: "direct main" description: @@ -449,8 +436,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f + ref: hcm_changes + resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -566,46 +553,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" - url: "https://pub.dev" - source: hosted - version: "2.17.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" fixnum: dependency: transitive description: @@ -1535,7 +1482,7 @@ packages: source: hosted version: "1.2.0" survey_form: - dependency: "direct overridden" + dependency: transitive description: path: "../survey_form" relative: true @@ -1822,5 +1769,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <4.0.0" + dart: ">=3.4.0 <3.9.0" flutter: ">=3.22.0" diff --git a/packages/closed_household/pubspec.yaml b/packages/closed_household/pubspec.yaml index 55571b514..6964d64a8 100644 --- a/packages/closed_household/pubspec.yaml +++ b/packages/closed_household/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop + ref: hcm_changes path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 diff --git a/packages/complaints/example/pubspec.lock b/packages/complaints/example/pubspec.lock index cf944c71a..e1eb142be 100644 --- a/packages/complaints/example/pubspec.lock +++ b/packages/complaints/example/pubspec.lock @@ -300,8 +300,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f + ref: hcm_changes + resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" diff --git a/packages/complaints/example/pubspec.yaml b/packages/complaints/example/pubspec.yaml index ed8ce9cf8..d72659f76 100644 --- a/packages/complaints/example/pubspec.yaml +++ b/packages/complaints/example/pubspec.yaml @@ -40,7 +40,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop + ref: hcm_changes path: ./flutter/digit-ui-components/digit_components diff --git a/packages/complaints/pubspec.lock b/packages/complaints/pubspec.lock index 543140f2c..062d345e7 100644 --- a/packages/complaints/pubspec.lock +++ b/packages/complaints/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "67.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -300,10 +292,12 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.3" + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "5595f37310a63a92b2c1c7e386c74fe39df5555d" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git + version: "4.2.0" dart_style: dependency: transitive description: @@ -312,6 +306,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.6" + db_viewer: + dependency: transitive + description: + name: db_viewer + sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" + url: "https://pub.dev" + source: hosted + version: "1.1.0" diff_match_patch: dependency: transitive description: @@ -323,23 +325,17 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path - version: "1.0.5-dev.1" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" + name: digit_data_model + sha256: "14ebea5f17921081025963b379efd5e16d155dd920d5a42ab2f2f392afb649de" + url: "https://pub.dev" + source: hosted + version: "1.0.4-dev.1" digit_ui_components: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f + ref: hcm_changes + resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -375,6 +371,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.19.1+1" + drift_db_viewer: + dependency: transitive + description: + name: drift_db_viewer + sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" fake_async: dependency: transitive description: @@ -439,46 +443,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+3" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" - url: "https://pub.dev" - source: hosted - version: "2.17.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" fixnum: dependency: transitive description: @@ -631,10 +595,10 @@ packages: dependency: transitive description: name: geolocator_android - sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" url: "https://pub.dev" source: hosted - version: "4.6.1" + version: "4.3.1" geolocator_apple: dependency: transitive description: @@ -1224,14 +1188,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" - sprintf: - dependency: transitive - description: - name: sprintf - sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" - url: "https://pub.dev" - source: hosted - version: "7.0.0" sqlite3: dependency: transitive description: @@ -1420,10 +1376,10 @@ packages: dependency: transitive description: name: uuid - sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" url: "https://pub.dev" source: hosted - version: "4.5.1" + version: "3.0.7" vector_graphics: dependency: transitive description: diff --git a/packages/complaints/pubspec.yaml b/packages/complaints/pubspec.yaml index b04b2c32b..e612365de 100644 --- a/packages/complaints/pubspec.yaml +++ b/packages/complaints/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop + ref: hcm_changes path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 diff --git a/packages/digit_data_model/pubspec.lock b/packages/digit_data_model/pubspec.lock index 5c0c096f9..58f73a551 100644 --- a/packages/digit_data_model/pubspec.lock +++ b/packages/digit_data_model/pubspec.lock @@ -292,10 +292,12 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.3" + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "5595f37310a63a92b2c1c7e386c74fe39df5555d" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git + version: "4.2.0" dart_style: dependency: transitive description: @@ -324,8 +326,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f + ref: hcm_changes + resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" diff --git a/packages/digit_data_model/pubspec.yaml b/packages/digit_data_model/pubspec.yaml index b109e2593..a58e01e58 100644 --- a/packages/digit_data_model/pubspec.yaml +++ b/packages/digit_data_model/pubspec.yaml @@ -28,7 +28,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop + ref: hcm_changes path: ./flutter/digit-ui-components/digit_components dev_dependencies: diff --git a/packages/digit_dss/pubspec.lock b/packages/digit_dss/pubspec.lock index d900c6840..ab06b403b 100644 --- a/packages/digit_dss/pubspec.lock +++ b/packages/digit_dss/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -323,10 +315,12 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.3" + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "5595f37310a63a92b2c1c7e386c74fe39df5555d" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git + version: "4.2.0" dart_style: dependency: transitive description: @@ -362,23 +356,17 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path + name: digit_data_model + sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" + url: "https://pub.dev" + source: hosted version: "1.0.5-dev.1" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" digit_ui_components: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f + ref: hcm_changes + resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -494,46 +482,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+3" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" - url: "https://pub.dev" - source: hosted - version: "2.17.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" fixnum: dependency: transitive description: @@ -678,10 +626,10 @@ packages: dependency: transitive description: name: geolocator_android - sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" url: "https://pub.dev" source: hosted - version: "4.6.1" + version: "4.3.1" geolocator_apple: dependency: transitive description: @@ -1287,14 +1235,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" - sprintf: - dependency: transitive - description: - name: sprintf - sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" - url: "https://pub.dev" - source: hosted - version: "7.0.0" sqlite3: dependency: transitive description: @@ -1499,10 +1439,10 @@ packages: dependency: transitive description: name: uuid - sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" url: "https://pub.dev" source: hosted - version: "4.5.1" + version: "3.0.7" vector_graphics: dependency: transitive description: diff --git a/packages/digit_dss/pubspec.yaml b/packages/digit_dss/pubspec.yaml index 5dbc3bc0c..92b574200 100644 --- a/packages/digit_dss/pubspec.yaml +++ b/packages/digit_dss/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop + ref: hcm_changes path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 reactive_forms: ^17.0.0 diff --git a/packages/digit_firebase_services/pubspec.lock b/packages/digit_firebase_services/pubspec.lock index 20c7bd06b..7b890a488 100644 --- a/packages/digit_firebase_services/pubspec.lock +++ b/packages/digit_firebase_services/pubspec.lock @@ -128,6 +128,30 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.7" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -140,34 +164,34 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" path: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" plugin_platform_interface: dependency: transitive description: @@ -225,10 +249,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" vector_math: dependency: transitive description: @@ -237,6 +261,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + url: "https://pub.dev" + source: hosted + version: "14.2.1" web: dependency: transitive description: @@ -246,5 +278,5 @@ packages: source: hosted version: "0.3.0" sdks: - dart: ">=3.2.0 <4.0.0" - flutter: ">=3.3.0" + dart: ">=3.3.0 <4.0.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/digit_location_tracker/pubspec.lock b/packages/digit_location_tracker/pubspec.lock index d31789108..edf788cfd 100644 --- a/packages/digit_location_tracker/pubspec.lock +++ b/packages/digit_location_tracker/pubspec.lock @@ -1,54 +1,6 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" - url: "https://pub.dev" - source: hosted - version: "67.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" - analyzer: - dependency: transitive - description: - name: analyzer - sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" - url: "https://pub.dev" - source: hosted - version: "6.4.1" - ansicolor: - dependency: transitive - description: - name: ansicolor - sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" - url: "https://pub.dev" - source: hosted - version: "2.0.3" - archive: - dependency: transitive - description: - name: archive - sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d - url: "https://pub.dev" - source: hosted - version: "3.6.1" - args: - dependency: transitive - description: - name: args - sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6 - url: "https://pub.dev" - source: hosted - version: "2.6.0" async: dependency: transitive description: @@ -73,110 +25,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" - build: - dependency: transitive - description: - name: build - sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" - url: "https://pub.dev" - source: hosted - version: "2.4.1" - build_config: - dependency: transitive - description: - name: build_config - sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 - url: "https://pub.dev" - source: hosted - version: "1.1.1" - build_daemon: - dependency: transitive - description: - name: build_daemon - sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - build_resolvers: - dependency: transitive - description: - name: build_resolvers - sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" - url: "https://pub.dev" - source: hosted - version: "2.4.2" - build_runner: - dependency: transitive - description: - name: build_runner - sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" - url: "https://pub.dev" - source: hosted - version: "2.4.11" - build_runner_core: - dependency: transitive - description: - name: build_runner_core - sha256: e3c79f69a64bdfcd8a776a3c28db4eb6e3fb5356d013ae5eb2e52007706d5dbe - url: "https://pub.dev" - source: hosted - version: "7.3.1" - built_collection: - dependency: transitive - description: - name: built_collection - sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" - url: "https://pub.dev" - source: hosted - version: "5.1.1" - built_value: - dependency: transitive - description: - name: built_value - sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb - url: "https://pub.dev" - source: hosted - version: "8.9.2" - camera: - dependency: transitive - description: - name: camera - sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167" - url: "https://pub.dev" - source: hosted - version: "0.11.0+2" - camera_android_camerax: - dependency: transitive - description: - name: camera_android_camerax - sha256: "011be2ab0e5b3e3aa8094413fa890f8c5c5afd7cfdaef353a992047d4dab5780" - url: "https://pub.dev" - source: hosted - version: "0.6.8+2" - camera_avfoundation: - dependency: transitive - description: - name: camera_avfoundation - sha256: "2e4c568f70e406ccb87376bc06b53d2f5bebaab71e2fbcc1a950e31449381bcf" - url: "https://pub.dev" - source: hosted - version: "0.9.17+5" - camera_platform_interface: - dependency: transitive - description: - name: camera_platform_interface - sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 - url: "https://pub.dev" - source: hosted - version: "2.8.0" - camera_web: - dependency: transitive - description: - name: camera_web - sha256: "595f28c89d1fb62d77c73c633193755b781c6d2e0ebcd8dc25b763b514e6ba8f" - url: "https://pub.dev" - source: hosted - version: "0.3.5" characters: dependency: transitive description: @@ -185,22 +33,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" - charcode: - dependency: transitive - description: - name: charcode - sha256: fb0f1107cac15a5ea6ef0a6ef71a807b9e4267c713bb93e00e92d737cc8dbd8a - url: "https://pub.dev" - source: hosted - version: "1.4.0" - checked_yaml: - dependency: transitive - description: - name: checked_yaml - sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff - url: "https://pub.dev" - source: hosted - version: "2.0.3" clock: dependency: transitive description: @@ -209,14 +41,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" - code_builder: - dependency: transitive - description: - name: code_builder - sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 - url: "https://pub.dev" - source: hosted - version: "4.10.0" collection: dependency: transitive description: @@ -233,14 +57,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.1" - cross_file: - dependency: transitive - description: - name: cross_file - sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" - url: "https://pub.dev" - source: hosted - version: "0.3.4+2" crypto: dependency: transitive description: @@ -249,14 +65,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" - csslib: - dependency: transitive - description: - name: csslib - sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" - url: "https://pub.dev" - source: hosted - version: "1.0.2" dart_mappable: dependency: transitive description: @@ -265,44 +73,22 @@ packages: url: "https://pub.dev" source: hosted version: "4.3.0" - dart_mappable_builder: - dependency: "direct overridden" - description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.3" - dart_style: + db_viewer: dependency: transitive description: - name: dart_style - sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" + name: db_viewer + sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" url: "https://pub.dev" source: hosted - version: "2.3.6" + version: "1.1.0" digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path - version: "1.0.5-dev.1" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" - digit_ui_components: - dependency: transitive - description: - path: "flutter/digit-ui-components/digit_components" - ref: version_update - resolved-ref: c68a3ceb1f00c6128780c0cbeb58d9aa8c4d7a13 - url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" - source: git - version: "0.0.1+7" + name: digit_data_model + sha256: "08f5273e691cc16e0f89aefac97887abb63739b7db3a00165c1be269aacedffd" + url: "https://pub.dev" + source: hosted + version: "1.0.4+1" dio: dependency: transitive description: @@ -319,14 +105,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" - dotted_border: - dependency: transitive - description: - name: dotted_border - sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" - url: "https://pub.dev" - source: hosted - version: "2.1.0" drift: dependency: transitive description: @@ -335,6 +113,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.19.1+1" + drift_db_viewer: + dependency: transitive + description: + name: drift_db_viewer + sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" fake_async: dependency: transitive description: @@ -351,102 +137,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - file: - dependency: transitive - description: - name: file - sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 - url: "https://pub.dev" - source: hosted - version: "7.0.1" - file_picker: - dependency: transitive - description: - name: file_picker - sha256: "2ca051989f69d1b2ca012b2cf3ccf78c70d40144f0861ff2c063493f7c8c3d45" - url: "https://pub.dev" - source: hosted - version: "8.0.5" - file_selector_linux: - dependency: transitive - description: - name: file_selector_linux - sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" - url: "https://pub.dev" - source: hosted - version: "0.9.3+2" - file_selector_macos: - dependency: transitive - description: - name: file_selector_macos - sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc" - url: "https://pub.dev" - source: hosted - version: "0.9.4+2" - file_selector_platform_interface: - dependency: transitive - description: - name: file_selector_platform_interface - sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b - url: "https://pub.dev" - source: hosted - version: "2.6.2" - file_selector_windows: - dependency: transitive - description: - name: file_selector_windows - sha256: "8f5d2f6590d51ecd9179ba39c64f722edc15226cc93dcc8698466ad36a4a85a4" - url: "https://pub.dev" - source: hosted - version: "0.9.3+3" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" - url: "https://pub.dev" - source: hosted - version: "2.17.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" - fixnum: - dependency: transitive - description: - name: fixnum - sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be - url: "https://pub.dev" - source: hosted - version: "1.1.1" flutter: dependency: "direct main" description: flutter @@ -492,30 +182,6 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.6" - flutter_dropzone: - dependency: transitive - description: - name: flutter_dropzone - sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 - url: "https://pub.dev" - source: hosted - version: "3.0.7" - flutter_dropzone_platform_interface: - dependency: transitive - description: - name: flutter_dropzone_platform_interface - sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" - url: "https://pub.dev" - source: hosted - version: "2.2.0" - flutter_dropzone_web: - dependency: transitive - description: - name: flutter_dropzone_web - sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 - url: "https://pub.dev" - source: hosted - version: "3.0.13" flutter_lints: dependency: "direct dev" description: @@ -524,43 +190,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.3" - flutter_localizations: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - flutter_plugin_android_lifecycle: - dependency: transitive - description: - name: flutter_plugin_android_lifecycle - sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda" - url: "https://pub.dev" - source: hosted - version: "2.0.22" - flutter_spinkit: - dependency: transitive - description: - name: flutter_spinkit - sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 - url: "https://pub.dev" - source: hosted - version: "5.2.1" - flutter_styled_toast: - dependency: transitive - description: - name: flutter_styled_toast - sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 - url: "https://pub.dev" - source: hosted - version: "2.2.1" - flutter_svg: - dependency: transitive - description: - name: flutter_svg - sha256: "54900a1a1243f3c4a5506d853a2b5c2dbc38d5f27e52a52618a8054401431123" - url: "https://pub.dev" - source: hosted - version: "2.0.16" flutter_test: dependency: "direct dev" description: flutter @@ -571,14 +200,6 @@ packages: description: flutter source: sdk version: "0.0.0" - fluttertoast: - dependency: transitive - description: - name: fluttertoast - sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" - url: "https://pub.dev" - source: hosted - version: "8.2.8" freezed_annotation: dependency: "direct main" description: @@ -587,118 +208,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.4.4" - frontend_server_client: - dependency: transitive - description: - name: frontend_server_client - sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 - url: "https://pub.dev" - source: hosted - version: "4.0.0" - geolocator: - dependency: transitive - description: - name: geolocator - sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 - url: "https://pub.dev" - source: hosted - version: "10.1.1" - geolocator_android: - dependency: transitive - description: - name: geolocator_android - sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" - url: "https://pub.dev" - source: hosted - version: "4.6.1" - geolocator_apple: - dependency: transitive - description: - name: geolocator_apple - sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" - url: "https://pub.dev" - source: hosted - version: "2.3.8+1" - geolocator_platform_interface: - dependency: transitive - description: - name: geolocator_platform_interface - sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" - url: "https://pub.dev" - source: hosted - version: "4.2.4" - geolocator_web: - dependency: transitive - description: - name: geolocator_web - sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" - url: "https://pub.dev" - source: hosted - version: "2.2.1" - geolocator_windows: - dependency: transitive - description: - name: geolocator_windows - sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" - url: "https://pub.dev" - source: hosted - version: "0.2.3" - glob: - dependency: transitive - description: - name: glob - sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - google_fonts: - dependency: transitive - description: - name: google_fonts - sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 - url: "https://pub.dev" - source: hosted - version: "6.2.1" - graphs: - dependency: transitive - description: - name: graphs - sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - horizontal_data_table: - dependency: transitive - description: - name: horizontal_data_table - sha256: c8ab5256bbced698a729f3e0ff2cb0e8e97416cdbb082860370eaf883badf722 - url: "https://pub.dev" - source: hosted - version: "4.3.1" - html: - dependency: transitive - description: - name: html - sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" - url: "https://pub.dev" - source: hosted - version: "0.15.5" - http: - dependency: transitive - description: - name: http - sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 - url: "https://pub.dev" - source: hosted - version: "1.2.2" - http_multi_server: - dependency: transitive - description: - name: http_multi_server - sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" - url: "https://pub.dev" - source: hosted - version: "3.2.1" http_parser: dependency: transitive description: @@ -707,86 +216,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" - image_picker: - dependency: transitive - description: - name: image_picker - sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a" - url: "https://pub.dev" - source: hosted - version: "1.1.2" - image_picker_android: - dependency: transitive - description: - name: image_picker_android - sha256: "8c5abf0dcc24fe6e8e0b4a5c0b51a5cf30cefdf6407a3213dae61edc75a70f56" - url: "https://pub.dev" - source: hosted - version: "0.8.12+12" - image_picker_for_web: - dependency: transitive - description: - name: image_picker_for_web - sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83" - url: "https://pub.dev" - source: hosted - version: "3.0.6" - image_picker_ios: - dependency: transitive - description: - name: image_picker_ios - sha256: "4f0568120c6fcc0aaa04511cb9f9f4d29fc3d0139884b1d06be88dcec7641d6b" - url: "https://pub.dev" - source: hosted - version: "0.8.12+1" - image_picker_linux: - dependency: transitive - description: - name: image_picker_linux - sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" - url: "https://pub.dev" - source: hosted - version: "0.2.1+1" - image_picker_macos: - dependency: transitive - description: - name: image_picker_macos - sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" - url: "https://pub.dev" - source: hosted - version: "0.2.1+1" - image_picker_platform_interface: - dependency: transitive - description: - name: image_picker_platform_interface - sha256: "9ec26d410ff46f483c5519c29c02ef0e02e13a543f882b152d4bfd2f06802f80" - url: "https://pub.dev" - source: hosted - version: "2.10.0" - image_picker_windows: - dependency: transitive - description: - name: image_picker_windows - sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" - url: "https://pub.dev" - source: hosted - version: "0.2.1+1" - intl: - dependency: transitive - description: - name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf - url: "https://pub.dev" - source: hosted - version: "0.19.0" - io: - dependency: transitive - description: - name: io - sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b - url: "https://pub.dev" - source: hosted - version: "1.0.5" isar: dependency: "direct main" description: @@ -875,22 +304,6 @@ packages: url: "https://pub.dev" source: hosted version: "5.0.2" - logging: - dependency: transitive - description: - name: logging - sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 - url: "https://pub.dev" - source: hosted - version: "1.3.0" - lottie: - dependency: transitive - description: - name: lottie - sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" - url: "https://pub.dev" - source: hosted - version: "3.1.3" matcher: dependency: transitive description: @@ -915,14 +328,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.12.0" - mime: - dependency: transitive - description: - name: mime - sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" - url: "https://pub.dev" - source: hosted - version: "1.0.6" mocktail: dependency: transitive description: @@ -939,22 +344,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" - overlay_builder: - dependency: transitive - description: - name: overlay_builder - sha256: "58b97bc5f67a2e2bb7006dd88e697ac757dfffc9dbd1e7dfc1917fb510a4b5c8" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - package_config: - dependency: transitive - description: - name: package_config - sha256: "92d4488434b520a62570293fbd33bb556c7d49230791c1b4bbd973baf6d2dc67" - url: "https://pub.dev" - source: hosted - version: "2.1.1" path: dependency: transitive description: @@ -963,22 +352,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.0" - path_drawing: - dependency: transitive - description: - name: path_drawing - sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 - url: "https://pub.dev" - source: hosted - version: "1.0.1" - path_parsing: - dependency: transitive - description: - name: path_parsing - sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" - url: "https://pub.dev" - source: hosted - version: "1.1.0" path_provider: dependency: "direct main" description: @@ -1075,14 +448,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.1" - petitparser: - dependency: transitive - description: - name: petitparser - sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 - url: "https://pub.dev" - source: hosted - version: "6.0.2" platform: dependency: transitive description: @@ -1099,14 +464,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - pool: - dependency: transitive - description: - name: pool - sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" - url: "https://pub.dev" - source: hosted - version: "1.5.1" provider: dependency: transitive description: @@ -1115,30 +472,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.2" - pub_semver: - dependency: transitive - description: - name: pub_semver - sha256: "7b3cfbf654f3edd0c6298ecd5be782ce997ddf0e00531b9464b55245185bbbbd" - url: "https://pub.dev" - source: hosted - version: "2.1.5" - pubspec_parse: - dependency: transitive - description: - name: pubspec_parse - sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 - url: "https://pub.dev" - source: hosted - version: "1.3.0" - reactive_forms: - dependency: transitive - description: - name: reactive_forms - sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" - url: "https://pub.dev" - source: hosted - version: "17.0.1" recase: dependency: transitive description: @@ -1147,35 +480,11 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" - shelf: - dependency: transitive - description: - name: shelf - sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 - url: "https://pub.dev" - source: hosted - version: "1.4.1" - shelf_web_socket: - dependency: transitive - description: - name: shelf_web_socket - sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67 - url: "https://pub.dev" - source: hosted - version: "2.0.1" sky_engine: dependency: transitive description: flutter source: sdk version: "0.0.99" - source_gen: - dependency: transitive - description: - name: source_gen - sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" - url: "https://pub.dev" - source: hosted - version: "1.5.0" source_span: dependency: transitive description: @@ -1184,14 +493,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" - sprintf: - dependency: transitive - description: - name: sprintf - sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" - url: "https://pub.dev" - source: hosted - version: "7.0.0" sqlite3: dependency: transitive description: @@ -1224,14 +525,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.2" - stream_transform: - dependency: transitive - description: - name: stream_transform - sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" string_scanner: dependency: transitive description: @@ -1256,14 +549,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.0" - timing: - dependency: transitive - description: - name: timing - sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe" - url: "https://pub.dev" - source: hosted - version: "1.0.2" type_plus: dependency: transitive description: @@ -1280,118 +565,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" - universal_html: - dependency: transitive - description: - name: universal_html - sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" - url: "https://pub.dev" - source: hosted - version: "2.2.4" - universal_io: - dependency: transitive - description: - name: universal_io - sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" - url: "https://pub.dev" - source: hosted - version: "2.2.2" - url_launcher: - dependency: transitive - description: - name: url_launcher - sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" - url: "https://pub.dev" - source: hosted - version: "6.3.1" - url_launcher_android: - dependency: transitive - description: - name: url_launcher_android - sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79 - url: "https://pub.dev" - source: hosted - version: "6.3.9" - url_launcher_ios: - dependency: transitive - description: - name: url_launcher_ios - sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626" - url: "https://pub.dev" - source: hosted - version: "6.3.2" - url_launcher_linux: - dependency: transitive - description: - name: url_launcher_linux - sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" - url: "https://pub.dev" - source: hosted - version: "3.2.1" - url_launcher_macos: - dependency: transitive - description: - name: url_launcher_macos - sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2" - url: "https://pub.dev" - source: hosted - version: "3.2.2" - url_launcher_platform_interface: - dependency: transitive - description: - name: url_launcher_platform_interface - sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - url_launcher_web: - dependency: transitive - description: - name: url_launcher_web - sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" - url: "https://pub.dev" - source: hosted - version: "2.3.3" - url_launcher_windows: - dependency: transitive - description: - name: url_launcher_windows - sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4" - url: "https://pub.dev" - source: hosted - version: "3.1.3" uuid: dependency: transitive description: name: uuid - sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" url: "https://pub.dev" source: hosted - version: "4.5.1" - vector_graphics: - dependency: transitive - description: - name: vector_graphics - sha256: "27d5fefe86fb9aace4a9f8375b56b3c292b64d8c04510df230f849850d912cb7" - url: "https://pub.dev" - source: hosted - version: "1.1.15" - vector_graphics_codec: - dependency: transitive - description: - name: vector_graphics_codec - sha256: "2430b973a4ca3c4dbc9999b62b8c719a160100dcbae5c819bae0cacce32c9cdb" - url: "https://pub.dev" - source: hosted - version: "1.1.12" - vector_graphics_compiler: - dependency: transitive - description: - name: vector_graphics_compiler - sha256: "1b4b9e706a10294258727674a340ae0d6e64a7231980f9f9a3d12e4b42407aad" - url: "https://pub.dev" - source: hosted - version: "1.1.16" + version: "3.0.7" vector_math: dependency: transitive description: @@ -1400,14 +581,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - visibility_detector: - dependency: transitive - description: - name: visibility_detector - sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 - url: "https://pub.dev" - source: hosted - version: "0.4.0+2" vm_service: dependency: transitive description: @@ -1416,14 +589,6 @@ packages: url: "https://pub.dev" source: hosted version: "14.2.1" - watcher: - dependency: transitive - description: - name: watcher - sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" - url: "https://pub.dev" - source: hosted - version: "1.1.0" web: dependency: transitive description: @@ -1432,30 +597,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.5.1" - web_socket: - dependency: transitive - description: - name: web_socket - sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83" - url: "https://pub.dev" - source: hosted - version: "0.1.6" - web_socket_channel: - dependency: transitive - description: - name: web_socket_channel - sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f" - url: "https://pub.dev" - source: hosted - version: "3.0.1" - win32: - dependency: transitive - description: - name: win32 - sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" - url: "https://pub.dev" - source: hosted - version: "5.2.0" xdg_directories: dependency: transitive description: @@ -1464,22 +605,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" - xml: - dependency: transitive - description: - name: xml - sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 - url: "https://pub.dev" - source: hosted - version: "6.5.0" - yaml: - dependency: transitive - description: - name: yaml - sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" - url: "https://pub.dev" - source: hosted - version: "3.1.2" sdks: dart: ">=3.4.0 <4.0.0" flutter: ">=3.22.0" diff --git a/packages/digit_scanner/example/pubspec.lock b/packages/digit_scanner/example/pubspec.lock index 91869e0d2..bf2c34008 100644 --- a/packages/digit_scanner/example/pubspec.lock +++ b/packages/digit_scanner/example/pubspec.lock @@ -339,8 +339,8 @@ packages: dependency: transitive description: path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f + ref: hcm_changes + resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" diff --git a/packages/digit_scanner/pubspec.lock b/packages/digit_scanner/pubspec.lock index 97e95aa17..f59cb4d83 100644 --- a/packages/digit_scanner/pubspec.lock +++ b/packages/digit_scanner/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "67.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -25,14 +17,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.4.1" - ansicolor: - dependency: transitive - description: - name: ansicolor - sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" - url: "https://pub.dev" - source: hosted - version: "2.0.3" archive: dependency: transitive description: @@ -353,21 +337,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_mappable: - dependency: transitive - description: - name: dart_mappable - sha256: f69a961ae8589724ebb542e588f228ae844c5f78028899cbe2cc718977c1b382 - url: "https://pub.dev" - source: hosted - version: "4.3.0" - dart_mappable_builder: - dependency: "direct overridden" - description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.3" dart_style: dependency: transitive description: @@ -384,26 +353,12 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.1" - digit_components: - dependency: "direct overridden" - description: - path: "../digit_components" - relative: true - source: path - version: "1.0.2+1" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" digit_ui_components: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f + ref: hcm_changes + resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -415,14 +370,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - easy_stepper: - dependency: transitive - description: - name: easy_stepper - sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" - url: "https://pub.dev" - source: hosted - version: "0.8.5+1" fake_async: dependency: transitive description: @@ -487,46 +434,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+3" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "9e69806bb3d905aeec3c1242e0e1475de6ea6d48f456af29d598fb229a2b4e5e" - url: "https://pub.dev" - source: hosted - version: "2.18.2" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" fixnum: dependency: transitive description: @@ -572,62 +479,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.13" - flutter_focus_watcher: - dependency: transitive - description: - name: flutter_focus_watcher - sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility: - dependency: transitive - description: - name: flutter_keyboard_visibility - sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" - url: "https://pub.dev" - source: hosted - version: "5.4.1" - flutter_keyboard_visibility_linux: - dependency: transitive - description: - name: flutter_keyboard_visibility_linux - sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_macos: - dependency: transitive - description: - name: flutter_keyboard_visibility_macos - sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_platform_interface: - dependency: transitive - description: - name: flutter_keyboard_visibility_platform_interface - sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_web: - dependency: transitive - description: - name: flutter_keyboard_visibility_web - sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_windows: - dependency: transitive - description: - name: flutter_keyboard_visibility_windows - sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 - url: "https://pub.dev" - source: hosted - version: "1.0.0" flutter_lints: dependency: "direct dev" description: @@ -678,14 +529,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" flutter_web_plugins: dependency: transitive description: flutter @@ -1107,22 +950,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - package_info_plus: - dependency: transitive - description: - name: package_info_plus - sha256: "70c421fe9d9cc1a9a7f3b05ae56befd469fe4f8daa3b484823141a55442d858d" - url: "https://pub.dev" - source: hosted - version: "8.1.2" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: a5ef9986efc7bf772f2696183a3992615baa76c1ffb1189318dd8803778fb05b - url: "https://pub.dev" - source: hosted - version: "3.0.2" path: dependency: "direct main" description: @@ -1219,14 +1046,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" pool: dependency: transitive description: @@ -1259,14 +1078,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a - url: "https://pub.dev" - source: hosted - version: "2.1.1" reactive_forms: dependency: "direct main" description: @@ -1275,14 +1086,6 @@ packages: url: "https://pub.dev" source: hosted version: "17.0.1" - remove_emoji_input_formatter: - dependency: transitive - description: - name: remove_emoji_input_formatter - sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" - url: "https://pub.dev" - source: hosted - version: "0.0.1+1" shelf: dependency: transitive description: @@ -1448,14 +1251,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" - type_plus: - dependency: transitive - description: - name: type_plus - sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 - url: "https://pub.dev" - source: hosted - version: "2.1.1" typed_data: dependency: transitive description: diff --git a/packages/digit_scanner/pubspec.yaml b/packages/digit_scanner/pubspec.yaml index 983c6c681..b8f761ec3 100644 --- a/packages/digit_scanner/pubspec.yaml +++ b/packages/digit_scanner/pubspec.yaml @@ -40,7 +40,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop + ref: hcm_changes path: ./flutter/digit-ui-components/digit_components reactive_forms: ^17.0.0 gs1_barcode_parser: ^1.0.5 diff --git a/packages/digit_showcase/pubspec.lock b/packages/digit_showcase/pubspec.lock index c4c977b97..6f0b0670d 100644 --- a/packages/digit_showcase/pubspec.lock +++ b/packages/digit_showcase/pubspec.lock @@ -67,6 +67,30 @@ packages: description: flutter source: sdk version: "0.0.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -79,34 +103,34 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" path: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" sky_engine: dependency: transitive description: flutter @@ -156,10 +180,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" vector_math: dependency: transitive description: @@ -168,14 +192,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - web: + vm_service: dependency: transitive description: - name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + name: vm_service + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "14.2.1" sdks: - dart: ">=3.2.0-194.0.dev <4.0.0" - flutter: ">=1.17.0" + dart: ">=3.3.0 <4.0.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/forms_engine/pubspec.lock b/packages/forms_engine/pubspec.lock index d15cb12fa..b3553cb93 100644 --- a/packages/forms_engine/pubspec.lock +++ b/packages/forms_engine/pubspec.lock @@ -17,14 +17,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.2.0" - ansicolor: - dependency: transitive - description: - name: ansicolor - sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" - url: "https://pub.dev" - source: hosted - version: "2.0.3" archive: dependency: transitive description: @@ -217,21 +209,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_mappable: - dependency: transitive - description: - name: dart_mappable - sha256: "47269caf2060533c29b823ff7fa9706502355ffcb61e7f2a374e3a0fb2f2c3f0" - url: "https://pub.dev" - source: hosted - version: "4.2.2" - dart_mappable_builder: - dependency: "direct overridden" - description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.3" dart_style: dependency: transitive description: @@ -254,38 +231,7 @@ packages: path: "../digit_components" relative: true source: path - version: "1.0.2" - digit_data_model: - dependency: "direct overridden" - description: - path: "../digit_data_model" - relative: true - source: path - version: "1.0.4" - dio: - dependency: transitive - description: - name: dio - sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" - url: "https://pub.dev" - source: hosted - version: "5.7.0" - dio_web_adapter: - dependency: transitive - description: - name: dio_web_adapter - sha256: "33259a9276d6cea88774a0000cfae0d861003497755969c92faa223108620dc8" - url: "https://pub.dev" - source: hosted - version: "2.0.0" - drift: - dependency: transitive - description: - name: drift - sha256: "15b51e0ee1970455c0c3f7e560f3ac02ecb9c04711a9657586e470b234659dba" - url: "https://pub.dev" - source: hosted - version: "2.20.0" + version: "1.0.2+1" easy_stepper: dependency: transitive description: @@ -538,22 +484,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" - isar: - dependency: transitive - description: - name: isar - sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" - isar_flutter_libs: - dependency: transitive - description: - name: isar_flutter_libs - sha256: bc6768cc4b9c61aabff77152e7f33b4b17d2fc93134f7af1c3dd51500fe8d5e8 - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" js: dependency: transitive description: @@ -874,14 +804,6 @@ packages: url: "https://pub.dev" source: hosted version: "17.0.1" - recase: - dependency: transitive - description: - name: recase - sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 - url: "https://pub.dev" - source: hosted - version: "4.1.0" remove_emoji_input_formatter: dependency: transitive description: @@ -967,30 +889,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" - sprintf: - dependency: transitive - description: - name: sprintf - sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" - url: "https://pub.dev" - source: hosted - version: "7.0.0" - sqlite3: - dependency: transitive - description: - name: sqlite3 - sha256: "45f168ae2213201b54e09429ed0c593dc2c88c924a1488d6f9c523a255d567cb" - url: "https://pub.dev" - source: hosted - version: "2.4.6" - sqlite3_flutter_libs: - dependency: transitive - description: - name: sqlite3_flutter_libs - sha256: "62bbb4073edbcdf53f40c80775f33eea01d301b7b81417e5b3fb7395416258c1" - url: "https://pub.dev" - source: hosted - version: "0.5.24" stack_trace: dependency: transitive description: @@ -1063,14 +961,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" - type_plus: - dependency: transitive - description: - name: type_plus - sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 - url: "https://pub.dev" - source: hosted - version: "2.1.1" typed_data: dependency: transitive description: @@ -1079,14 +969,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" - uuid: - dependency: transitive - description: - name: uuid - sha256: f33d6bb662f0e4f79dcd7ada2e6170f3b3a2530c28fc41f49a411ddedd576a77 - url: "https://pub.dev" - source: hosted - version: "4.5.0" vector_math: dependency: transitive description: diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index 7f9493f49..273e9a7f5 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -380,9 +372,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + name: dart_mappable_builder + sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e + url: "https://pub.dev" + source: hosted version: "4.2.3" dart_style: dependency: transitive @@ -415,13 +408,6 @@ packages: relative: true source: path version: "1.0.5-dev.1" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" digit_scanner: dependency: "direct main" description: @@ -433,8 +419,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f + ref: hcm_changes + resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -542,46 +528,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+3" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" - url: "https://pub.dev" - source: hosted - version: "2.17.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" fixnum: dependency: transitive description: @@ -1680,5 +1626,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <4.0.0" + dart: ">=3.4.0 <3.9.0" flutter: ">=3.22.0" diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index 1c0c5940a..2e2eb1275 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop + ref: hcm_changes path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index a698b2848..945e33357 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -407,13 +399,6 @@ packages: relative: true source: path version: "1.0.5-dev.1" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" digit_scanner: dependency: "direct main" description: @@ -425,8 +410,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f + ref: hcm_changes + resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -526,46 +511,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" - url: "https://pub.dev" - source: hosted - version: "2.17.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" fixnum: dependency: transitive description: diff --git a/packages/referral_reconciliation/pubspec.yaml b/packages/referral_reconciliation/pubspec.yaml index 2b121e71c..dddede389 100644 --- a/packages/referral_reconciliation/pubspec.yaml +++ b/packages/referral_reconciliation/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop + ref: hcm_changes path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 766d0a087..b7116245d 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -415,13 +407,6 @@ packages: relative: true source: path version: "1.0.5-dev.1" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" digit_scanner: dependency: "direct main" description: @@ -441,8 +426,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f + ref: hcm_changes + resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -558,46 +543,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" - url: "https://pub.dev" - source: hosted - version: "2.17.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" fixnum: dependency: transitive description: @@ -1783,5 +1728,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <4.0.0" + dart: ">=3.4.0 <3.9.0" flutter: ">=3.22.0" diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index be150a5db..efefbe7b5 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop + ref: hcm_changes path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 diff --git a/packages/survey_form/example/pubspec.lock b/packages/survey_form/example/pubspec.lock index 6c191d6ff..6b2bf9c07 100644 --- a/packages/survey_form/example/pubspec.lock +++ b/packages/survey_form/example/pubspec.lock @@ -284,8 +284,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f + ref: hcm_changes + resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" diff --git a/packages/survey_form/example/pubspec.yaml b/packages/survey_form/example/pubspec.yaml index 7b4364417..1d9cf1f99 100644 --- a/packages/survey_form/example/pubspec.yaml +++ b/packages/survey_form/example/pubspec.yaml @@ -31,7 +31,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop + ref: hcm_changes path: ./flutter/digit-ui-components/digit_components survey_form: path: ../ diff --git a/packages/survey_form/lib/pages/survey_form_view.dart b/packages/survey_form/lib/pages/survey_form_view.dart index 8319d1c6e..224e5c83a 100644 --- a/packages/survey_form/lib/pages/survey_form_view.dart +++ b/packages/survey_form/lib/pages/survey_form_view.dart @@ -715,6 +715,7 @@ class SurveyFormViewPageState extends LocalizedState { return Align( alignment: Alignment.topLeft, child: LabeledField( + charCondition: true, label: localizations.translate( '${selectedServiceDefinition?.code}.${item.code}', ), @@ -746,7 +747,7 @@ class SurveyFormViewPageState extends LocalizedState { .map((item) => RadioButtonModel( code: item, name: localizations.translate( - 'CORE_COMMON_${item.trim().toUpperCase()}', + '${selectedServiceDefinition?.code}.${item.trim()}', ), )) .toList() diff --git a/packages/survey_form/pubspec.lock b/packages/survey_form/pubspec.lock index d1ecb0638..95a94db7e 100644 --- a/packages/survey_form/pubspec.lock +++ b/packages/survey_form/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "64.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -316,10 +308,12 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.3" + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: "5595f37310a63a92b2c1c7e386c74fe39df5555d" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git + version: "4.2.0" dart_style: dependency: transitive description: @@ -343,19 +337,12 @@ packages: relative: true source: path version: "1.0.5-dev.1" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" digit_ui_components: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: e34fbbd8ca46b85c86e2c8c2a031f16d8237d81f + ref: hcm_changes + resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -463,46 +450,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" - url: "https://pub.dev" - source: hosted - version: "2.17.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" fixnum: dependency: transitive description: diff --git a/packages/survey_form/pubspec.yaml b/packages/survey_form/pubspec.yaml index f09381fcc..17d9a0169 100644 --- a/packages/survey_form/pubspec.yaml +++ b/packages/survey_form/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop + ref: hcm_changes path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 diff --git a/packages/sync_service/pubspec.yaml b/packages/sync_service/pubspec.yaml index d3b3d77ac..6a3ed1561 100644 --- a/packages/sync_service/pubspec.yaml +++ b/packages/sync_service/pubspec.yaml @@ -31,7 +31,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop + ref: hcm_changes path: ./flutter/digit-ui-components/digit_components dev_dependencies: From 660aa9aa9180a4e765c31b6e76997bf21b9e8de7 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Fri, 13 Dec 2024 14:06:05 +0530 Subject: [PATCH 206/241] component ui fixes --- .../lib/pages/acknowledgement.dart | 15 +- .../lib/pages/record_stock/stock_details.dart | 4 +- .../lib/pages/reports/report_details.dart | 290 +++-- .../lib/pages/reports/report_selection.dart | 164 +-- .../stock_reconciliation.dart | 824 +++++++------ .../local/household_global_search.dart | 3 +- .../beneficiary/beneficiary_details.dart | 6 +- .../beneficiary/delivery_summary_page.dart | 11 +- .../pages/beneficiary/household_overview.dart | 1053 +++++++++-------- .../beneficiary/widgets/past_delivery.dart | 117 +- .../widgets/record_delivery_cycle.dart | 177 ++- .../lib/utils/utils.dart | 21 +- .../resource_beneficiary_card.dart | 1 + .../lib/pages/survey_form_view.dart | 2 +- 14 files changed, 1415 insertions(+), 1273 deletions(-) diff --git a/packages/inventory_management/lib/pages/acknowledgement.dart b/packages/inventory_management/lib/pages/acknowledgement.dart index 5eabb5f28..20fc3b2dc 100644 --- a/packages/inventory_management/lib/pages/acknowledgement.dart +++ b/packages/inventory_management/lib/pages/acknowledgement.dart @@ -54,24 +54,13 @@ class AcknowledgementPageState // : null, actions: [ DigitButton( - label: localizations.translate( - i18.acknowledgementSuccess.acknowledgementLabelText), + label: localizations + .translate(i18.acknowledgementSuccess.actionLabelText), onPressed: () { context.router.maybePop(); }, type: DigitButtonType.primary, size: DigitButtonSize.large), - if (!widget.isDataRecordSuccess) - DigitButton( - label: localizations - .translate(i18.acknowledgementSuccess.actionLabelText), - onPressed: () { - final parent = context.router.parent() as StackRouter; - // Pop twice to navigate back to the previous screen - parent.popUntilRoot(); - }, - type: DigitButtonType.secondary, - size: DigitButtonSize.large), ], // action: () { // context.router.maybePop(); diff --git a/packages/inventory_management/lib/pages/record_stock/stock_details.dart b/packages/inventory_management/lib/pages/record_stock/stock_details.dart index 7f98225e4..0f558ce6d 100644 --- a/packages/inventory_management/lib/pages/record_stock/stock_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/stock_details.dart @@ -566,8 +566,8 @@ class StockDetailsPageState extends LocalizedState { rootNavigator: true, ).pop(false); }, - type: - DigitButtonType.primary, + type: DigitButtonType + .secondary, size: DigitButtonSize.large, ), ], diff --git a/packages/inventory_management/lib/pages/reports/report_details.dart b/packages/inventory_management/lib/pages/reports/report_details.dart index 183b6493d..6c1712eac 100644 --- a/packages/inventory_management/lib/pages/reports/report_details.dart +++ b/packages/inventory_management/lib/pages/reports/report_details.dart @@ -45,6 +45,8 @@ class InventoryReportDetailsPageState static const _facilityKey = 'facilityKey'; String? selectedFacilityId; + TextEditingController controller1 = TextEditingController(); + /// Handles the selection of a facility and product variant from the form and triggers the loading of the corresponding inventory report data. /// /// This function takes a [FormGroup] and an [InventoryReportBloc] as parameters. @@ -123,8 +125,9 @@ class InventoryReportDetailsPageState DigitButton( size: DigitButtonSize.large, type: DigitButtonType.secondary, + mainAxisSize: MainAxisSize.max, onPressed: () => context.router.popUntilRoot(), - label: localizations.translate( + label: localizations.translate( i18.inventoryReportDetails.backToHomeButtonLabel, ), ), @@ -190,40 +193,84 @@ class InventoryReportDetailsPageState return Column( children: [ DigitCard( - children: [ - if (isWareHouseManager) - BlocConsumer( - listener: (context, state) => - state.whenOrNull( - empty: () => - NoFacilitiesAssignedDialog - .show( - context, - localizations, - ), + margin: const EdgeInsets.all(spacer2), + children: [ + if (isWareHouseManager) + BlocConsumer( + listener: (context, state) => + state.whenOrNull( + empty: () => + NoFacilitiesAssignedDialog + .show( + context, + localizations, ), - builder: (context, state) { - final facilities = - state.whenOrNull( - fetched: (facilities, - allFacilities) => - facilities, - ) ?? - []; - - return InkWell( - onTap: () { - handleFacilitySelection( - form, facilities); - }, - child: IgnorePointer( - child: ReactiveWrapperField( - formControlName: _facilityKey, - builder: (field){ + ), + builder: (context, state) { + final facilities = + state.whenOrNull( + fetched: (facilities, + allFacilities) => + facilities, + ) ?? + []; + + return InkWell( + onTap: () async { + if (mounted) { + final stockReconciliationBloc = + context.read< + StockReconciliationBloc>(); + + final facility = await context + .router + .push(InventoryFacilitySelectionRoute( + facilities: + facilities)) + as FacilityModel?; + + if (facility == null) { + return; + } + form + .control(_facilityKey) + .value = + localizations.translate( + 'FAC_${facility.id}', + ); + + setState(() { + selectedFacilityId = + facility.id; + }); + + controller1.text = + localizations.translate( + 'FAC_${facility.id}'); + stockReconciliationBloc.add( + StockReconciliationSelectFacilityEvent( + facility, + ), + ); + + if (mounted) { + handleSelection( + form, + context.read< + InventoryReportBloc>()); + } + } + }, + child: IgnorePointer( + child: ReactiveWrapperField( + formControlName: + _facilityKey, + builder: (field) { return InputField( type: InputType.search, isRequired: true, + controller: controller1, label: localizations .translate( i18.stockReconciliationDetails @@ -232,83 +279,90 @@ class InventoryReportDetailsPageState ); }, ), - ), - ); - }, - ), - BlocBuilder< - InventoryProductVariantBloc, - InventoryProductVariantState>( - builder: (context, state) { - return state.maybeWhen( - orElse: () => const Offstage(), - loading: () => const Center( - child: - CircularProgressIndicator(), ), - empty: () => Center( - child: Text( - i18.stockDetails - .noProductsFound, - ), + ); + }, + ), + BlocBuilder( + builder: (context, state) { + return state.maybeWhen( + orElse: () => const Offstage(), + loading: () => const Center( + child: + CircularProgressIndicator(), + ), + empty: () => Center( + child: Text( + i18.stockDetails + .noProductsFound, ), - fetched: (productVariants) { - return ReactiveWrapperField( - formControlName: - _productVariantKey, - validationMessages: { - 'required': (object) => - localizations.translate( - i18.common - .corecommonRequired, - ), - }, - builder: (field) { - return LabeledField( - isRequired: true, - label: + ), + fetched: (productVariants) { + return ReactiveWrapperField( + formControlName: + _productVariantKey, + validationMessages: { + 'required': (object) => localizations.translate( - i18.stockReconciliationDetails - .productLabel, + i18.common + .corecommonRequired, ), - child: DigitDropdown( - emptyItemText: - localizations.translate( - i18.common.noMatchFound, - ), - items: productVariants.map(( - variant) { - return DropdownItem( - name: localizations - .translate( - variant.sku ?? - variant.id, - ), - code: variant.id, - ); - }).toList(), - onSelect: (value) { - /// Find the selected product variant model by matching the id - final selectedVariant = productVariants.firstWhere( - (variant) => variant.id == value.code, - ); - /// Update the form control with the selected product variant model - field.control.value = selectedVariant; - - handleSelection( - form, - context.read< - InventoryReportBloc>()); - }, + }, + builder: (field) { + return LabeledField( + isRequired: true, + label: localizations + .translate( + i18.stockReconciliationDetails + .productLabel, + ), + child: DigitDropdown( + emptyItemText: + localizations + .translate( + i18.common + .noMatchFound, ), - ); - }, - ); - }, - ); - }, - ), - ], + items: productVariants + .map((variant) { + return DropdownItem( + name: localizations + .translate( + variant.sku ?? + variant.id, + ), + code: variant.id, + ); + }).toList(), + onSelect: (value) { + /// Find the selected product variant model by matching the id + final selectedVariant = + productVariants + .firstWhere( + (variant) => + variant.id == + value.code, + ); + + /// Update the form control with the selected product variant model + field.control.value = + selectedVariant; + + handleSelection( + form, + context.read< + InventoryReportBloc>()); + }, + ), + ); + }, + ); + }, + ); + }, + ), + ], ), Expanded( child: Align( @@ -328,8 +382,7 @@ class InventoryReportDetailsPageState if (data.isEmpty) { return Padding( padding: const EdgeInsets.all( - spacer4 - ), + spacer4), child: _NoReportContent( title: title, message: noRecordsMessage, @@ -438,8 +491,7 @@ class InventoryReportDetailsPageState if (data.isEmpty) { return Padding( padding: const EdgeInsets.all( - spacer4 - ), + spacer4), child: _NoReportContent( title: title, message: noRecordsMessage, @@ -734,29 +786,7 @@ class InventoryReportDetailsPageState } handleFacilitySelection( - FormGroup form, List facilities) async { - final stockReconciliationBloc = context.read(); - - final facility = await context.router - .push(InventoryFacilitySelectionRoute(facilities: facilities)) - as FacilityModel?; - - if (facility == null) { - return; - } - form.control(_facilityKey).value = localizations.translate( - 'FAC_${facility.id}', - ); - stockReconciliationBloc.add( - StockReconciliationSelectFacilityEvent( - facility, - ), - ); - - if (mounted) { - handleSelection(form, context.read()); - } - } + FormGroup form, List facilities) async {} } class _ReportDetailsContent extends StatelessWidget { diff --git a/packages/inventory_management/lib/pages/reports/report_selection.dart b/packages/inventory_management/lib/pages/reports/report_selection.dart index b8b22c442..e2a1d1a70 100644 --- a/packages/inventory_management/lib/pages/reports/report_selection.dart +++ b/packages/inventory_management/lib/pages/reports/report_selection.dart @@ -55,95 +55,119 @@ class InventoryReportSelectionPageState ), ), Column(children: [ - MenuCard( - heading: localizations.translate( - i18.inventoryReportSelection.inventoryReportReceiptLabel, - ), - description: localizations.translate(i18 - .inventoryReportSelection - .inventoryReportReceiptDescription), - icon: Icons.login, - onTap: () => context.router.push( - InventoryReportDetailsRoute( - reportType: InventoryReportType.receipt, + Padding( + padding: const EdgeInsets.symmetric(horizontal: spacer2), + child: MenuCard( + heading: localizations.translate( + i18.inventoryReportSelection.inventoryReportReceiptLabel, + ), + description: localizations.translate(i18 + .inventoryReportSelection + .inventoryReportReceiptDescription), + icon: Icons.login, + onTap: () => context.router.push( + InventoryReportDetailsRoute( + reportType: InventoryReportType.receipt, + ), ), ), ), - MenuCard( - heading: localizations.translate( - i18.inventoryReportSelection.inventoryReportIssuedLabel, - ), - description: localizations.translate(i18 - .inventoryReportSelection - .inventoryReportIssuedDescription), - icon: Icons.logout, - onTap: () => context.router.push( - InventoryReportDetailsRoute( - reportType: InventoryReportType.dispatch, + const SizedBox(height: spacer4), + Padding( + padding: const EdgeInsets.symmetric(horizontal: spacer2), + child: MenuCard( + heading: localizations.translate( + i18.inventoryReportSelection.inventoryReportIssuedLabel, + ), + description: localizations.translate(i18 + .inventoryReportSelection + .inventoryReportIssuedDescription), + icon: Icons.logout, + onTap: () => context.router.push( + InventoryReportDetailsRoute( + reportType: InventoryReportType.dispatch, + ), ), ), ), - MenuCard( - heading: localizations.translate(i18 - .inventoryReportSelection.inventoryReportReturnedLabel), - description: localizations.translate( - i18.inventoryReportSelection - .inventoryReportReturnedDescription, - ), - icon: Icons.settings_backup_restore, - onTap: () => context.router.push( - InventoryReportDetailsRoute( - reportType: InventoryReportType.returned, + const SizedBox(height: spacer4), + Padding( + padding: const EdgeInsets.symmetric(horizontal: spacer2), + child: MenuCard( + heading: localizations.translate(i18 + .inventoryReportSelection.inventoryReportReturnedLabel), + description: localizations.translate( + i18.inventoryReportSelection + .inventoryReportReturnedDescription, + ), + icon: Icons.settings_backup_restore, + onTap: () => context.router.push( + InventoryReportDetailsRoute( + reportType: InventoryReportType.returned, + ), ), ), ), - MenuCard( - heading: localizations.translate( - i18.inventoryReportSelection.inventoryReportDamagedLabel, - ), - description: localizations.translate( - i18.inventoryReportSelection - .inventoryReportDamagedDescription, - ), - icon: Icons.store, - onTap: () => context.router.push( - InventoryReportDetailsRoute( - reportType: InventoryReportType.damage, + const SizedBox(height: spacer4), + Padding( + padding: const EdgeInsets.symmetric(horizontal: spacer2), + child: MenuCard( + heading: localizations.translate( + i18.inventoryReportSelection.inventoryReportDamagedLabel, + ), + description: localizations.translate( + i18.inventoryReportSelection + .inventoryReportDamagedDescription, + ), + icon: Icons.store, + onTap: () => context.router.push( + InventoryReportDetailsRoute( + reportType: InventoryReportType.damage, + ), ), ), ), - MenuCard( - heading: localizations.translate( - i18.inventoryReportSelection.inventoryReportLossLabel, - ), - description: localizations.translate( - i18.inventoryReportSelection.inventoryReportLossDescription, - ), - icon: Icons.store, - onTap: () => context.router.push( - InventoryReportDetailsRoute( - reportType: InventoryReportType.loss, + const SizedBox(height: spacer4), + Padding( + padding: const EdgeInsets.symmetric(horizontal: spacer2), + child: MenuCard( + heading: localizations.translate( + i18.inventoryReportSelection.inventoryReportLossLabel, + ), + description: localizations.translate( + i18.inventoryReportSelection + .inventoryReportLossDescription, + ), + icon: Icons.store, + onTap: () => context.router.push( + InventoryReportDetailsRoute( + reportType: InventoryReportType.loss, + ), ), ), ), - MenuCard( - heading: localizations.translate( - i18.inventoryReportSelection - .inventoryReportReconciliationLabel, - ), - description: localizations.translate( - i18.inventoryReportSelection - .inventoryReportReconciliationDescription, - ), - icon: Icons.store, - onTap: () => context.router.push( - InventoryReportDetailsRoute( - reportType: InventoryReportType.reconciliation, + const SizedBox(height: spacer4), + Padding( + padding: const EdgeInsets.symmetric(horizontal: spacer2), + child: MenuCard( + heading: localizations.translate( + i18.inventoryReportSelection + .inventoryReportReconciliationLabel, + ), + description: localizations.translate( + i18.inventoryReportSelection + .inventoryReportReconciliationDescription, + ), + icon: Icons.store, + onTap: () => context.router.push( + InventoryReportDetailsRoute( + reportType: InventoryReportType.reconciliation, + ), ), ), ), ]), - const SizedBox(height: 16), + const SizedBox(height: spacer4), ], ), ], diff --git a/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart b/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart index f890f4a3d..e05978f4b 100644 --- a/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart +++ b/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart @@ -7,7 +7,6 @@ import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; -import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:intl/intl.dart'; @@ -114,445 +113,496 @@ class StockReconciliationPageState header: const BackNavigationHelpHeaderWidget(), footer: SizedBox( child: DigitCard( - margin: const EdgeInsets.fromLTRB( - 0, spacer2, 0, 0), - children:[ - ReactiveFormConsumer( - builder: (ctx, form, child) => - DigitButton( - size: DigitButtonSize.large, - type: DigitButtonType.primary, - onPressed: !form.valid || - (form - .control(_productVariantKey) - .value == - null) - ? (){} - : () async { - form.markAllAsTouched(); - FocusManager.instance.primaryFocus - ?.unfocus(); - if (!form.valid) return; - - final bloc = ctx.read< - StockReconciliationBloc>(); + margin: const EdgeInsets.fromLTRB( + 0, spacer2, 0, 0), + children: [ + ReactiveFormConsumer( + builder: (ctx, form, child) => + DigitButton( + mainAxisSize: MainAxisSize.max, + size: DigitButtonSize.large, + type: DigitButtonType.primary, + onPressed: !form.valid || + (form + .control( + _productVariantKey) + .value == + null) + ? () {} + : () async { + form.markAllAsTouched(); + FocusManager + .instance.primaryFocus + ?.unfocus(); + if (!form.valid) return; - final facilityId = - InventorySingleton() - .isDistributor! && - !InventorySingleton() - .isWareHouseMgr! - ? FacilityModel( - id: InventorySingleton() - .loggedInUserUuid!, - ) - : FacilityModel( - id: selectedFacilityId - .toString(), - ); + final bloc = ctx.read< + StockReconciliationBloc>(); - final productVariant = form - .control(_productVariantKey) - .value as ProductVariantModel; + final facilityId = + InventorySingleton() + .isDistributor! && + !InventorySingleton() + .isWareHouseMgr! + ? FacilityModel( + id: InventorySingleton() + .loggedInUserUuid!, + ) + : FacilityModel( + id: selectedFacilityId + .toString(), + ); - final calculatedCount = form - .control(_manualCountKey) - .value as String; + final productVariant = form + .control(_productVariantKey) + .value as ProductVariantModel; - final comments = form - .control( - _reconciliationCommentsKey, - ) - .value as String?; + final calculatedCount = form + .control(_manualCountKey) + .value as String; - final model = - StockReconciliationModel( - clientReferenceId: - IdGen.i.identifier, - dateOfReconciliation: stockState - .dateOfReconciliation - .millisecondsSinceEpoch, - facilityId: facilityId.id, - productVariantId: - productVariant.id, - calculatedCount: stockState - .stockInHand - .toInt(), - commentsOnReconciliation: - comments, - physicalCount: int.tryParse( - calculatedCount, - ) ?? - 0, - auditDetails: AuditDetails( - createdBy: InventorySingleton() - .loggedInUserUuid, - createdTime: context - .millisecondsSinceEpoch(), - ), - clientAuditDetails: - ClientAuditDetails( - createdBy: InventorySingleton() - .loggedInUserUuid, - createdTime: context - .millisecondsSinceEpoch(), - lastModifiedBy: - InventorySingleton() - .loggedInUserUuid, - lastModifiedTime: context - .millisecondsSinceEpoch(), - ), - ); + final comments = form + .control( + _reconciliationCommentsKey, + ) + .value as String?; - final submit = - showCustomPopup( - context: context, - builder: (popupContext) => Popup( - title: localizations.translate( - i18.stockReconciliationDetails - .dialogTitle, - ), - onOutsideTap: () { - Navigator.of( - popupContext, - rootNavigator: true, - ).pop(false); - }, - description: localizations.translate( - i18.stockReconciliationDetails - .dialogContent, - ), - type: PopUpType.simple, - actions: [ - DigitButton( - label: localizations.translate( - i18.common.coreCommonSubmit, - ), - onPressed: () { - Navigator.of( - popupContext, - rootNavigator: true, - ).pop(true); - }, - type: DigitButtonType.primary, - size: DigitButtonSize.large, + final model = + StockReconciliationModel( + clientReferenceId: + IdGen.i.identifier, + dateOfReconciliation: stockState + .dateOfReconciliation + .millisecondsSinceEpoch, + facilityId: facilityId.id, + productVariantId: + productVariant.id, + calculatedCount: stockState + .stockInHand + .toInt(), + commentsOnReconciliation: + comments, + physicalCount: int.tryParse( + calculatedCount, + ) ?? + 0, + auditDetails: AuditDetails( + createdBy: + InventorySingleton() + .loggedInUserUuid, + createdTime: context + .millisecondsSinceEpoch(), ), - DigitButton( - label: localizations.translate( - i18.common.coreCommonCancel, + clientAuditDetails: + ClientAuditDetails( + createdBy: + InventorySingleton() + .loggedInUserUuid, + createdTime: context + .millisecondsSinceEpoch(), + lastModifiedBy: + InventorySingleton() + .loggedInUserUuid, + lastModifiedTime: context + .millisecondsSinceEpoch(), + ), + ); + + final submit = + await showCustomPopup( + context: context, + builder: (popupContext) => + Popup( + title: + localizations.translate( + i18.stockReconciliationDetails + .dialogTitle, ), - onPressed: () { + onOutsideTap: () { Navigator.of( popupContext, rootNavigator: true, ).pop(false); }, - type: DigitButtonType.secondary, - size: DigitButtonSize.large, + description: + localizations.translate( + i18.stockReconciliationDetails + .dialogContent, + ), + type: PopUpType.simple, + actions: [ + DigitButton( + label: localizations + .translate( + i18.common + .coreCommonSubmit, + ), + onPressed: () { + Navigator.of( + popupContext, + rootNavigator: true, + ).pop(true); + }, + type: DigitButtonType + .primary, + size: DigitButtonSize + .large, + ), + DigitButton( + label: localizations + .translate( + i18.common + .coreCommonCancel, + ), + onPressed: () { + Navigator.of( + popupContext, + rootNavigator: true, + ).pop(false); + }, + type: DigitButtonType + .secondary, + size: DigitButtonSize + .large, + ), + ], ), - ], - ), - ) as bool; + ) as bool; - if (submit ?? false) { - bloc.add( - StockReconciliationCreateEvent( - model, - ), - ); - } - }, - label: localizations.translate( - i18.common.coreCommonSubmit, - ), + if (submit ?? false) { + bloc.add( + StockReconciliationCreateEvent( + model, + ), + ); + } + }, + label: localizations.translate( + i18.common.coreCommonSubmit, ), - ), - ] - ), + ), + ), + ]), ), children: [ DigitCard( - children: [ - Text( - localizations.translate( - i18.stockReconciliationDetails - .reconciliationPageTitle, - ), - style: Theme.of(context) - .textTheme - .displayMedium, + margin: const EdgeInsets.all(spacer2), + children: [ + Text( + localizations.translate( + i18.stockReconciliationDetails + .reconciliationPageTitle, ), - if (InventorySingleton().isWareHouseMgr!) - BlocConsumer( - listener: (context, state) => - state.whenOrNull( - empty: () => - NoFacilitiesAssignedDialog.show( - context, - localizations, - ), + style: Theme.of(context) + .textTheme + .displayMedium, + ), + if (InventorySingleton().isWareHouseMgr!) + BlocConsumer( + listener: (context, state) => + state.whenOrNull( + empty: () => + NoFacilitiesAssignedDialog.show( + context, + localizations, ), - builder: (context, state) { - return state.maybeWhen( - orElse: () => const Offstage(), - loading: () => const Center( - child: - CircularProgressIndicator(), - ), - fetched: - (facilities, allFacilities) { - return Column( - children: [ - const SizedBox(height: 16,), - InkWell( - onTap: () async { - final stockReconciliationBloc = + ), + builder: (context, state) { + return state.maybeWhen( + orElse: () => const Offstage(), + loading: () => const Center( + child: + CircularProgressIndicator(), + ), + fetched: + (facilities, allFacilities) { + return Column( + children: [ + InkWell( + onTap: () async { + final stockReconciliationBloc = context.read< StockReconciliationBloc>(); - final facility = await context + final facility = await context .router .push(InventoryFacilitySelectionRoute( - facilities: - facilities)) + facilities: + facilities)) as FacilityModel?; - if (facility == null) - return; - form + if (facility == null) + return; + form .control(_facilityKey) .value = - localizations.translate( - 'FAC_${facility.id}', - ); - controller1.text = localizations.translate( - 'FAC_${facility.id}', - ); - setState(() { - selectedFacilityId = - facility.id; - }); - stockReconciliationBloc.add( - StockReconciliationSelectFacilityEvent( - facility, - ), - ); - }, - child: IgnorePointer( - child: ReactiveWrapperField( - formControlName: _facilityKey, - builder: (field){ - return InputField( - type: InputType.search, - isRequired: true, - controller: controller1, - label: localizations - .translate( - i18.stockReconciliationDetails - .facilityLabel, - ), - ); - }, - ), - ), - ), - const SizedBox(height: 16,), - ], - ); - }); - }, - ), - BlocBuilder( - builder: (context, state) { - return state.maybeWhen( - orElse: () => const Offstage(), - loading: () => const Center( - child: CircularProgressIndicator(), - ), - empty: () => Center( - child: Text( - i18.stockDetails.noProductsFound, - ), - ), - fetched: (productVariants) { - return ReactiveWrapperField( - formControlName: _productVariantKey, - validationMessages: { - 'required': (error) => localizations.translate(i18 - .common - .corecommonRequired), - }, - showErrors: (control) => control.invalid && control.touched, - builder: (field) { - return LabeledField( - isRequired: true, - label: localizations - .translate( - i18 - .stockReconciliationDetails - .productLabel, - ), - child: DigitDropdown( - emptyItemText: localizations.translate( - i18.common.noMatchFound, - ), - items: productVariants.map(( - variant) { - return DropdownItem( - name: localizations - .translate( - variant.sku ?? - variant.id, - ), - code: variant.id, + localizations + .translate( + 'FAC_${facility.id}', ); - }).toList(), - onSelect: (value) { - field.control.markAsTouched(); - /// Find the selected product variant model by matching the id - final selectedVariant = productVariants.firstWhere( - (variant) => variant.id == value.code, + controller1.text = + localizations + .translate( + 'FAC_${facility.id}', ); - /// Update the form control with the selected product variant model - field.control.value = selectedVariant; - - ctx - .read< - StockReconciliationBloc>() + setState(() { + selectedFacilityId = + facility.id; + }); + stockReconciliationBloc .add( - StockReconciliationSelectProductEvent( - value.code, - isDistributor: InventorySingleton() - .isDistributor! && - !InventorySingleton() - .isWareHouseMgr!, + StockReconciliationSelectFacilityEvent( + facility, ), ); }, + child: IgnorePointer( + child: + ReactiveWrapperField( + formControlName: + _facilityKey, + builder: (field) { + return InputField( + type: InputType + .search, + isRequired: true, + controller: + controller1, + label: localizations + .translate( + i18.stockReconciliationDetails + .facilityLabel, + ), + ); + }, + ), + ), ), - ); - }, - ); - }, - ); + ], + ); + }); }, ), - LabelValueItem(label: localizations.translate(i18 + BlocBuilder( + builder: (context, state) { + return state.maybeWhen( + orElse: () => const Offstage(), + loading: () => const Center( + child: CircularProgressIndicator(), + ), + empty: () => Center( + child: Text( + i18.stockDetails.noProductsFound, + ), + ), + fetched: (productVariants) { + return ReactiveWrapperField( + formControlName: _productVariantKey, + validationMessages: { + 'required': (error) => + localizations.translate(i18 + .common + .corecommonRequired), + }, + showErrors: (control) => + control.invalid && + control.touched, + builder: (field) { + return LabeledField( + isRequired: true, + label: localizations.translate( + i18.stockReconciliationDetails + .productLabel, + ), + child: DigitDropdown( + emptyItemText: + localizations.translate( + i18.common.noMatchFound, + ), + items: productVariants + .map((variant) { + return DropdownItem( + name: localizations + .translate( + variant.sku ?? + variant.id, + ), + code: variant.id, + ); + }).toList(), + onSelect: (value) { + field.control + .markAsTouched(); + + /// Find the selected product variant model by matching the id + final selectedVariant = + productVariants + .firstWhere( + (variant) => + variant.id == + value.code, + ); + + /// Update the form control with the selected product variant model + field.control.value = + selectedVariant; + + ctx + .read< + StockReconciliationBloc>() + .add( + StockReconciliationSelectProductEvent( + value.code, + isDistributor: InventorySingleton() + .isDistributor! && + !InventorySingleton() + .isWareHouseMgr!, + ), + ); + }, + ), + ); + }, + ); + }, + ); + }, + ), + LabelValueItem( + label: localizations.translate(i18 .stockReconciliationDetails - .dateOfReconciliation), value: DateFormat('dd MMMM yyyy').format( - stockState.dateOfReconciliation)), - const DigitDivider(), - LabelValueItem(label: localizations.translate( + .dateOfReconciliation), + value: DateFormat('dd MMMM yyyy').format( + stockState.dateOfReconciliation), + labelFlex: 5, + ), + const DigitDivider(), + LabelValueItem( + label: localizations.translate( i18.stockReconciliationDetails .stockReceived, - ), value: stockState.stockReceived - .toStringAsFixed(0)), - const DigitDivider(), - LabelValueItem(label: localizations.translate( + ), + value: stockState.stockReceived + .toStringAsFixed(0), + labelFlex: 5, + ), + const DigitDivider(), + LabelValueItem( + label: localizations.translate( i18.stockReconciliationDetails .stockIssued, - ), value: stockState.stockIssued - .toStringAsFixed(0)), - const DigitDivider(), - LabelValueItem(label: localizations.translate( + ), + value: stockState.stockIssued + .toStringAsFixed(0), + labelFlex: 5, + ), + const DigitDivider(), + LabelValueItem( + label: localizations.translate( i18.stockReconciliationDetails .stockReturned, - ), value: stockState.stockReturned - .toStringAsFixed(0)), - const DigitDivider(), - LabelValueItem(label: localizations.translate( - i18.stockReconciliationDetails - .stockLost, - ), value: stockState.stockLost - .toStringAsFixed(0)), - const DigitDivider(), - LabelValueItem(label: localizations.translate( + ), + value: stockState.stockReturned + .toStringAsFixed(0), + labelFlex: 5, + ), + const DigitDivider(), + LabelValueItem( + label: localizations.translate( + i18.stockReconciliationDetails.stockLost, + ), + value: + stockState.stockLost.toStringAsFixed(0), + labelFlex: 5, + ), + const DigitDivider(), + LabelValueItem( + label: localizations.translate( i18.stockReconciliationDetails .stockDamaged, - ), value: stockState.stockDamaged - .toStringAsFixed(0)), - const DigitDivider(), - LabelValueItem(label: localizations.translate( - i18.stockReconciliationDetails - .stockOnHand), value: stockState.stockInHand - .toStringAsFixed(0)), - InfoCard( - type: InfoType.info, - description: localizations.translate( - i18.stockReconciliationDetails - .infoCardContent, - ), - title: localizations.translate( - i18.stockReconciliationDetails - .infoCardTitle, - ), ), - const SizedBox( - height: spacer4, - ), - const DigitDivider(), - const SizedBox( - height: spacer2, + value: stockState.stockDamaged + .toStringAsFixed(0), + labelFlex: 5, + ), + const DigitDivider(), + LabelValueItem( + label: localizations.translate(i18 + .stockReconciliationDetails + .stockOnHand), + value: stockState.stockInHand + .toStringAsFixed(0), + labelFlex: 5, + ), + InfoCard( + type: InfoType.info, + description: localizations.translate( + i18.stockReconciliationDetails + .infoCardContent, ), - ReactiveWrapperField( - formControlName: _manualCountKey, - validationMessages: { - "required": (object) => i18 - .stockReconciliationDetails - .manualCountRequiredError, - "number": (object) => i18 - .stockReconciliationDetails - .manualCountInvalidType, - "min": (object) => i18 - .stockReconciliationDetails - .manualCountMinError, - "max": (object) => i18 - .stockReconciliationDetails - .manualCountMaxError, - }, - showErrors: (control) => control.invalid && control.touched, - builder: (field) { - return LabeledField( - label: localizations.translate( - i18.stockReconciliationDetails - .manualCountLabel, - ), - isRequired: true, - child: BaseDigitFormInput( - errorMessage: field.errorText, - keyboardType: - const TextInputType - .numberWithOptions( - decimal: false, - ), - initialValue: '0', - onChange: (value){ - field.control.markAsTouched(); - field.control.value = value; - }, - ), - ); - } + title: localizations.translate( + i18.stockReconciliationDetails + .infoCardTitle, ), - ReactiveWrapperField( - formControlName: _reconciliationCommentsKey, - builder: (field){ - return InputField( - type: InputType.textArea, - label: localizations - .translate( + ), + const DigitDivider(), + ReactiveWrapperField( + formControlName: _manualCountKey, + validationMessages: { + "required": (object) => i18 + .stockReconciliationDetails + .manualCountRequiredError, + "number": (object) => i18 + .stockReconciliationDetails + .manualCountInvalidType, + "min": (object) => i18 + .stockReconciliationDetails + .manualCountMinError, + "max": (object) => i18 + .stockReconciliationDetails + .manualCountMaxError, + }, + showErrors: (control) => + control.invalid && control.touched, + builder: (field) { + return LabeledField( + label: localizations.translate( i18.stockReconciliationDetails - .commentsLabel, + .manualCountLabel, + ), + isRequired: true, + child: BaseDigitFormInput( + errorMessage: field.errorText, + keyboardType: const TextInputType + .numberWithOptions( + decimal: false, + ), + initialValue: '0', + onChange: (value) { + field.control.markAsTouched(); + field.control.value = value; + }, ), - textAreaScroll: TextAreaScroll.smart, - onChange: (value){ - field.control.value= value; - }, ); - }, - ), - ], - ), + }), + ReactiveWrapperField( + formControlName: _reconciliationCommentsKey, + builder: (field) { + return InputField( + type: InputType.textArea, + label: localizations.translate( + i18.stockReconciliationDetails + .commentsLabel, + ), + textAreaScroll: TextAreaScroll.smart, + onChange: (value) { + field.control.value = value; + }, + ); + }, + ), + ], + ), ], ), ); diff --git a/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart b/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart index ec9147421..13dca03cc 100644 --- a/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart +++ b/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart @@ -234,8 +234,7 @@ class HouseHoldGlobalSearchRepository extends LocalRepository { sql.householdMember, sql.householdMember.individualClientReferenceId .equalsExp(sql.individual.clientReferenceId)) - ]) - ..where(sql.householdMember.isHeadOfHousehold.equals(true)); + ]); selectQuery.join([ leftOuterJoin( sql.household, diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart index 2d70d3fd7..6423490fc 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart @@ -250,8 +250,7 @@ class BeneficiaryDetailsPageState ), children: [ DigitCard( - margin: const EdgeInsets.only( - top: spacer2, bottom: spacer2), + margin: const EdgeInsets.all(spacer2), children: [ Text( localizations.translate(i18.beneficiaryDetails @@ -394,8 +393,7 @@ class BeneficiaryDetailsPageState []) .isNotEmpty) DigitCard( - margin: const EdgeInsets.only( - top: spacer2, bottom: spacer2), + margin: const EdgeInsets.all(spacer2), children: [ Column( children: RegistrationDeliverySingleton() diff --git a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart index b5421dd58..00102ed38 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart @@ -190,13 +190,16 @@ class DeliverySummaryPageState extends LocalizedState { LabelValueItem( label: localizations.translate( i18.householdLocation.villageLabel), - value: deliverState.householdMemberWrapper - ?.household?.address?.locality?.code + value: localizations.translate(deliverState + .householdMemberWrapper + ?.household + ?.address + ?.locality + ?.code .split('_') .last .titleCase ?? - localizations - .translate(i18.common.coreCommonNA), + i18.common.coreCommonNA), isInline: true, labelFlex: 5, ), diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index fc91f2595..9d819126c 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -8,7 +8,6 @@ import 'package:digit_ui_components/theme/spacers.dart'; import 'package:digit_ui_components/utils/date_utils.dart'; import 'package:digit_ui_components/widgets/atoms/digit_action_card.dart'; import 'package:digit_ui_components/widgets/atoms/digit_button.dart'; -import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; @@ -208,552 +207,576 @@ class _HouseholdOverviewPageState slivers: [ SliverToBoxAdapter( child: DigitCard( - margin: const EdgeInsets.all(spacer2), + margin: const EdgeInsets.all(spacer2), children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.max, - children: [ - if ((state.householdMemberWrapper - .projectBeneficiaries ?? - []) - .isNotEmpty) - Align( - alignment: Alignment.centerLeft, - child: DigitButton( - onPressed: () { - final projectId = - RegistrationDeliverySingleton() - .projectId!; - - final bloc = - context.read(); - bloc.add( - HouseholdOverviewReloadEvent( - projectId: projectId, - projectBeneficiaryType: - beneficiaryType, - ), - ); - showDialog( - context: context, - builder: (ctx) => DigitActionCard( - actions: [ - DigitButton( - prefixIcon: Icons.edit, - label: localizations.translate( - i18.householdOverView - .householdOverViewEditLabel, - ), - type: DigitButtonType.secondary, - size: DigitButtonSize.large, - onPressed: () async { - Navigator.of( - context, - rootNavigator: true, - ).pop(); - - HouseholdMemberWrapper wrapper = - state - .householdMemberWrapper; - - final timestamp = wrapper - .headOfHousehold - ?.clientAuditDetails - ?.createdTime; - final date = DateTime - .fromMillisecondsSinceEpoch( - timestamp ?? - DateTime.now() - .millisecondsSinceEpoch, - ); + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.max, + children: [ + if ((state.householdMemberWrapper + .projectBeneficiaries ?? + []) + .isNotEmpty) + Align( + alignment: Alignment.centerLeft, + child: DigitButton( + onPressed: () { + final projectId = + RegistrationDeliverySingleton() + .projectId!; + + final bloc = context + .read(); + bloc.add( + HouseholdOverviewReloadEvent( + projectId: projectId, + projectBeneficiaryType: + beneficiaryType, + ), + ); + showDialog( + context: context, + builder: (ctx) => DigitActionCard( + actions: [ + DigitButton( + prefixIcon: Icons.edit, + label: + localizations.translate( + i18.householdOverView + .householdOverViewEditLabel, + ), + type: + DigitButtonType.secondary, + size: DigitButtonSize.large, + onPressed: () async { + Navigator.of( + context, + rootNavigator: true, + ).pop(); + + HouseholdMemberWrapper + wrapper = state + .householdMemberWrapper; + + final timestamp = wrapper + .headOfHousehold + ?.clientAuditDetails + ?.createdTime; + final date = DateTime + .fromMillisecondsSinceEpoch( + timestamp ?? + DateTime.now() + .millisecondsSinceEpoch, + ); - final address = - wrapper.household?.address; + final address = wrapper + .household?.address; - if (address == null) return; + if (address == null) return; - final projectBeneficiary = state - .householdMemberWrapper - .projectBeneficiaries - ?.firstWhereOrNull( - (element) => - element - .beneficiaryClientReferenceId == - wrapper.household - ?.clientReferenceId, - ); + final projectBeneficiary = state + .householdMemberWrapper + .projectBeneficiaries + ?.firstWhereOrNull( + (element) => + element + .beneficiaryClientReferenceId == + wrapper.household + ?.clientReferenceId, + ); - await context.router.root.push( - BeneficiaryRegistrationWrapperRoute( - initialState: - BeneficiaryRegistrationEditHouseholdState( - addressModel: address, - individualModel: state + await context.router.root + .push( + BeneficiaryRegistrationWrapperRoute( + initialState: + BeneficiaryRegistrationEditHouseholdState( + addressModel: address, + individualModel: state + .householdMemberWrapper + .members ?? + [], + householdModel: state .householdMemberWrapper - .members ?? - [], - householdModel: state - .householdMemberWrapper - .household!, - registrationDate: date, - projectBeneficiaryModel: - projectBeneficiary, - ), - children: [ - HouseholdLocationRoute(), - ], - ), - ); - }, + .household!, + registrationDate: + date, + projectBeneficiaryModel: + projectBeneficiary, + ), + children: [ + HouseholdLocationRoute(), + ], + ), + ); + }, + ), + ], ), - ], + ); + }, + label: localizations.translate( + i18.householdOverView + .householdOverViewEditIconText, ), - ); - }, - label: localizations.translate( - i18.householdOverView - .householdOverViewEditIconText, + type: DigitButtonType.tertiary, + size: DigitButtonSize.medium, + prefixIcon: Icons.edit, + ), + ), + // BlocBuilder( + // builder: (ctx, deliverInterventionState) => + // Offstage( + // offstage: beneficiaryType == + // BeneficiaryType.individual, + // child: Align( + // alignment: Alignment.centerLeft, + // child: DigitIconButton( + // icon: getStatusAttributes(state, + // deliverInterventionState)['icon'], + // iconText: localizations.translate( + // getStatusAttributes(state, + // deliverInterventionState)[ + // 'textLabel'], + // ), // [TODO: map task status accordingly based on projectBeneficiaries and tasks] + // iconTextColor: getStatusAttributes(state, + // deliverInterventionState)['color'], + // iconColor: getStatusAttributes(state, + // deliverInterventionState)['color'], + // ), + // ), + // ), + // ), + Padding( + padding: const EdgeInsets.all(spacer2), + child: Text( + localizations.translate(i18 + .householdOverView + .householdOverViewLabel), + style: textTheme.headingXl, ), - type: DigitButtonType.tertiary, - size: DigitButtonSize.medium, - prefixIcon: Icons.edit, ), - ), - // BlocBuilder( - // builder: (ctx, deliverInterventionState) => - // Offstage( - // offstage: beneficiaryType == - // BeneficiaryType.individual, - // child: Align( - // alignment: Alignment.centerLeft, - // child: DigitIconButton( - // icon: getStatusAttributes(state, - // deliverInterventionState)['icon'], - // iconText: localizations.translate( - // getStatusAttributes(state, - // deliverInterventionState)[ - // 'textLabel'], - // ), // [TODO: map task status accordingly based on projectBeneficiaries and tasks] - // iconTextColor: getStatusAttributes(state, - // deliverInterventionState)['color'], - // iconColor: getStatusAttributes(state, - // deliverInterventionState)['color'], - // ), - // ), - // ), - // ), - Padding( - padding: const EdgeInsets.all(spacer2), - child: Text( - localizations.translate(i18.householdOverView - .householdOverViewLabel), - style: textTheme.headingXl, - ), - ), - Padding( - padding: const EdgeInsets.only( - left: spacer2, - right: spacer2, - ), - child: BlocBuilder( - builder: (ctx, deliverInterventionState) { - bool shouldShowStatus = beneficiaryType == - BeneficiaryType.household; - - return Column( - children: [ - DigitTableCard( - element: { - localizations.translate(i18 - .householdOverView - .householdOverViewHouseholdHeadNameLabel): - state + Padding( + padding: const EdgeInsets.only( + left: spacer2, + right: spacer2, + ), + child: BlocBuilder( + builder: + (ctx, deliverInterventionState) { + bool shouldShowStatus = beneficiaryType == + BeneficiaryType.household; + + return Column( + children: [ + DigitTableCard( + element: { + localizations.translate(i18 + .householdOverView + .householdOverViewHouseholdHeadNameLabel): + state + .householdMemberWrapper + .headOfHousehold + ?.name + ?.givenName ?? + localizations.translate( + i18.common + .coreCommonNA), + localizations.translate( + i18.householdLocation + .administrationAreaFormLabel, + ): localizations.translate(state .householdMemberWrapper .headOfHousehold - ?.name - ?.givenName ?? - localizations.translate( - i18.common.coreCommonNA), - localizations.translate( - i18.householdLocation - .administrationAreaFormLabel, - ): state - .householdMemberWrapper - .headOfHousehold - ?.address - ?.first - .locality - ?.code, - localizations.translate( - i18.deliverIntervention - .memberCountText, - ): state.householdMemberWrapper - .household?.memberCount, - if (shouldShowStatus) - localizations.translate(i18 - .beneficiaryDetails.status): - localizations.translate( - getStatusAttributes(state, - deliverInterventionState)[ - 'textLabel'], - ) - }, - ), - ], - ); - }), - ), - Column( - children: - (state.householdMemberWrapper.members ?? []) - .map( - (e) { - final isHead = state - .householdMemberWrapper - .headOfHousehold - ?.clientReferenceId == - e.clientReferenceId; - final projectBeneficiaryId = state - .householdMemberWrapper - .projectBeneficiaries - ?.firstWhereOrNull((b) => - b.beneficiaryClientReferenceId == - e.clientReferenceId) - ?.clientReferenceId; - - final projectBeneficiary = state - .householdMemberWrapper - .projectBeneficiaries - ?.where( - (element) => - element - .beneficiaryClientReferenceId == - (RegistrationDeliverySingleton() - .beneficiaryType == - BeneficiaryType.individual - ? e.clientReferenceId - : state - .householdMemberWrapper - .household - ?.clientReferenceId), - ) - .toList(); - - final taskData = (projectBeneficiary ?? []) - .isNotEmpty - ? state.householdMemberWrapper.tasks - ?.where((element) => - element - .projectBeneficiaryClientReferenceId == - projectBeneficiary - ?.first.clientReferenceId) - .toList() - : null; - final referralData = (projectBeneficiary ?? + ?.address + ?.first + .locality + ?.code ?? + i18.common.coreCommonNA), + localizations.translate( + i18.deliverIntervention + .memberCountText, + ): state.householdMemberWrapper + .household?.memberCount, + if (shouldShowStatus) + localizations.translate(i18 + .beneficiaryDetails + .status): + localizations.translate( + getStatusAttributes(state, + deliverInterventionState)[ + 'textLabel'], + ) + }, + ), + ], + ); + }), + ), + Column( + children: + (state.householdMemberWrapper.members ?? []) - .isNotEmpty - ? state.householdMemberWrapper.referrals - ?.where((element) => - element - .projectBeneficiaryClientReferenceId == - projectBeneficiary - ?.first.clientReferenceId) - .toList() - : null; - final sideEffectData = taskData != null && - taskData.isNotEmpty - ? state - .householdMemberWrapper.sideEffects - ?.where((element) => - element.taskClientReferenceId == - taskData.lastOrNull - ?.clientReferenceId) - .toList() - : null; - final ageInYears = e.dateOfBirth != null - ? DigitDateUtils.calculateAge( - DigitDateUtils - .getFormattedDateToDateTime( - e.dateOfBirth!, - ) ?? - DateTime.now(), - ).years - : 0; - final ageInMonths = e.dateOfBirth != null - ? DigitDateUtils.calculateAge( - DigitDateUtils - .getFormattedDateToDateTime( - e.dateOfBirth!, - ) ?? - DateTime.now(), - ).months - : 0; - final currentCycle = - RegistrationDeliverySingleton() - .projectType - ?.cycles - ?.firstWhereOrNull( - (e) => - (e.startDate) < - DateTime.now() - .millisecondsSinceEpoch && - (e.endDate) > - DateTime.now() - .millisecondsSinceEpoch, - ); + .map( + (e) { + final isHead = state + .householdMemberWrapper + .headOfHousehold + ?.clientReferenceId == + e.clientReferenceId; + final projectBeneficiaryId = state + .householdMemberWrapper + .projectBeneficiaries + ?.firstWhereOrNull((b) => + b.beneficiaryClientReferenceId == + e.clientReferenceId) + ?.clientReferenceId; - final isBeneficiaryRefused = - checkIfBeneficiaryRefused( - taskData, - ); - final isBeneficiaryReferred = - checkIfBeneficiaryReferred( - referralData, - currentCycle, - ); - - return MemberCard( - isHead: isHead, - individual: e, - projectBeneficiaries: - projectBeneficiary ?? [], - tasks: taskData, - sideEffects: sideEffectData, - editMemberAction: () async { - final bloc = - ctx.read(); - - Navigator.of( - context, - rootNavigator: true, - ).pop(); - - final address = e.address; - if (address == null || - address.isEmpty) { - return; - } - - final projectId = - RegistrationDeliverySingleton() - .projectId!; - bloc.add( - HouseholdOverviewReloadEvent( - projectId: projectId, - projectBeneficiaryType: - beneficiaryType, - ), - ); + final projectBeneficiary = state + .householdMemberWrapper + .projectBeneficiaries + ?.where( + (element) => + element + .beneficiaryClientReferenceId == + (RegistrationDeliverySingleton() + .beneficiaryType == + BeneficiaryType + .individual + ? e.clientReferenceId + : state + .householdMemberWrapper + .household + ?.clientReferenceId), + ) + .toList(); - await context.router.root.push( - BeneficiaryRegistrationWrapperRoute( - initialState: - BeneficiaryRegistrationEditIndividualState( - individualModel: e, - householdModel: state - .householdMemberWrapper - .household!, - addressModel: address.first, - projectBeneficiaryModel: state - .householdMemberWrapper - .projectBeneficiaries - ?.firstWhereOrNull( - (element) => + final taskData = (projectBeneficiary ?? + []) + .isNotEmpty + ? state.householdMemberWrapper.tasks + ?.where((element) => element - .beneficiaryClientReferenceId == - (RegistrationDeliverySingleton() - .beneficiaryType == - BeneficiaryType - .individual - ? e.clientReferenceId - : state - .householdMemberWrapper - .household - ?.clientReferenceId), - ), - ), - children: [ - IndividualDetailsRoute( - isHeadOfHousehold: isHead, - ), - ], - ), + .projectBeneficiaryClientReferenceId == + projectBeneficiary?.first + .clientReferenceId) + .toList() + : null; + final referralData = (projectBeneficiary ?? + []) + .isNotEmpty + ? state.householdMemberWrapper + .referrals + ?.where((element) => + element + .projectBeneficiaryClientReferenceId == + projectBeneficiary?.first + .clientReferenceId) + .toList() + : null; + final sideEffectData = taskData != + null && + taskData.isNotEmpty + ? state.householdMemberWrapper + .sideEffects + ?.where((element) => + element + .taskClientReferenceId == + taskData.lastOrNull + ?.clientReferenceId) + .toList() + : null; + final ageInYears = e.dateOfBirth != null + ? DigitDateUtils.calculateAge( + DigitDateUtils + .getFormattedDateToDateTime( + e.dateOfBirth!, + ) ?? + DateTime.now(), + ).years + : 0; + final ageInMonths = + e.dateOfBirth != null + ? DigitDateUtils.calculateAge( + DigitDateUtils + .getFormattedDateToDateTime( + e.dateOfBirth!, + ) ?? + DateTime.now(), + ).months + : 0; + final currentCycle = + RegistrationDeliverySingleton() + .projectType + ?.cycles + ?.firstWhereOrNull( + (e) => + (e.startDate) < + DateTime.now() + .millisecondsSinceEpoch && + (e.endDate) > + DateTime.now() + .millisecondsSinceEpoch, + ); + + final isBeneficiaryRefused = + checkIfBeneficiaryRefused( + taskData, ); - }, - setAsHeadAction: () { - ctx.read().add( - HouseholdOverviewSetAsHeadEvent( - individualModel: e, - projectId: - RegistrationDeliverySingleton() - .projectId!, - householdModel: state - .householdMemberWrapper - .household!, + final isBeneficiaryReferred = + checkIfBeneficiaryReferred( + referralData, + currentCycle, + ); + + return MemberCard( + isHead: isHead, + individual: e, + projectBeneficiaries: + projectBeneficiary ?? [], + tasks: taskData, + sideEffects: sideEffectData, + editMemberAction: () async { + final bloc = ctx + .read(); + + Navigator.of( + context, + rootNavigator: true, + ).pop(); + + final address = e.address; + if (address == null || + address.isEmpty) { + return; + } + + final projectId = + RegistrationDeliverySingleton() + .projectId!; + bloc.add( + HouseholdOverviewReloadEvent( + projectId: projectId, projectBeneficiaryType: beneficiaryType, ), ); - Navigator.of( - context, - rootNavigator: true, - ).pop(); - }, - deleteMemberAction: () { - showCustomPopup( - context: context, - builder: (BuildContext) { - return Popup( - title: localizations.translate(i18 - .householdOverView - .householdOverViewActionCardTitle), - type: PopUpType.simple, - actions: [ - DigitButton( - label: localizations - .translate(i18 - .householdOverView - .householdOverViewPrimaryActionLabel), - onPressed: () { - Navigator.of( - context, - rootNavigator: true, - ) - ..pop() - ..pop(); - context - .read< - HouseholdOverviewBloc>() - .add( - HouseholdOverviewEvent - .selectedIndividual( - individualModel: - e, + await context.router.root.push( + BeneficiaryRegistrationWrapperRoute( + initialState: + BeneficiaryRegistrationEditIndividualState( + individualModel: e, + householdModel: state + .householdMemberWrapper + .household!, + addressModel: address.first, + projectBeneficiaryModel: state + .householdMemberWrapper + .projectBeneficiaries + ?.firstWhereOrNull( + (element) => + element + .beneficiaryClientReferenceId == + (RegistrationDeliverySingleton() + .beneficiaryType == + BeneficiaryType + .individual + ? e + .clientReferenceId + : state + .householdMemberWrapper + .household + ?.clientReferenceId), + ), + ), + children: [ + IndividualDetailsRoute( + isHeadOfHousehold: isHead, + ), + ], + ), + ); + }, + setAsHeadAction: () { + ctx + .read() + .add( + HouseholdOverviewSetAsHeadEvent( + individualModel: e, + projectId: + RegistrationDeliverySingleton() + .projectId!, + householdModel: state + .householdMemberWrapper + .household!, + projectBeneficiaryType: + beneficiaryType, + ), + ); + + Navigator.of( + context, + rootNavigator: true, + ).pop(); + }, + deleteMemberAction: () { + showCustomPopup( + context: context, + builder: (BuildContext) { + return Popup( + title: localizations + .translate(i18 + .householdOverView + .householdOverViewActionCardTitle), + type: PopUpType.simple, + actions: [ + DigitButton( + label: localizations + .translate(i18 + .householdOverView + .householdOverViewPrimaryActionLabel), + onPressed: () { + Navigator.of( + context, + rootNavigator: + true, + ) + ..pop() + ..pop(); + context + .read< + HouseholdOverviewBloc>() + .add( + HouseholdOverviewEvent + .selectedIndividual( + individualModel: + e, + ), + ); + context.router.push( + ReasonForDeletionRoute( + isHousholdDelete: + false, ), ); - context.router.push( - ReasonForDeletionRoute( - isHousholdDelete: - false, - ), - ); - }, - type: DigitButtonType - .primary, - size: DigitButtonSize - .large), - DigitButton( - label: localizations - .translate(i18 - .householdOverView - .householdOverViewSecondaryActionLabel), - onPressed: () { - Navigator.of( - context, - rootNavigator: true, - ).pop(); - }, - type: DigitButtonType - .tertiary, - size: - DigitButtonSize.large) - ]); + }, + type: DigitButtonType + .primary, + size: DigitButtonSize + .large), + DigitButton( + label: localizations + .translate(i18 + .householdOverView + .householdOverViewSecondaryActionLabel), + onPressed: () { + Navigator.of( + context, + rootNavigator: + true, + ).pop(); + }, + type: DigitButtonType + .tertiary, + size: DigitButtonSize + .large) + ]); + }, + ); }, - ); - }, - isNotEligible: RegistrationDeliverySingleton() - .projectType - ?.cycles != - null - ? !checkEligibilityForAgeAndSideEffect( - DigitDOBAgeConvertor( - years: ageInYears, - months: ageInMonths, - ), + isNotEligible: RegistrationDeliverySingleton() - .projectType, - (taskData ?? []).isNotEmpty - ? taskData?.lastOrNull - : null, - sideEffectData, - ) - : false, - name: e.name?.givenName ?? ' - - ', - years: (e.dateOfBirth == null - ? null - : DigitDateUtils.calculateAge( - DigitDateUtils - .getFormattedDateToDateTime( - e.dateOfBirth!, - ) ?? - DateTime.now(), - ).years), - months: (e.dateOfBirth == null - ? null - : DigitDateUtils.calculateAge( - DigitDateUtils - .getFormattedDateToDateTime( - e.dateOfBirth!, - ) ?? - DateTime.now(), - ).months), - gender: e.gender?.name, - isBeneficiaryRefused: - isBeneficiaryRefused && - !checkStatus( - taskData, - currentCycle, - ), - isBeneficiaryReferred: - isBeneficiaryReferred, - isDelivered: taskData == null - ? false - : taskData.isNotEmpty && + .projectType + ?.cycles != + null + ? !checkEligibilityForAgeAndSideEffect( + DigitDOBAgeConvertor( + years: ageInYears, + months: ageInMonths, + ), + RegistrationDeliverySingleton() + .projectType, + (taskData ?? []) + .isNotEmpty + ? taskData?.lastOrNull + : null, + sideEffectData, + ) + : false, + name: e.name?.givenName ?? ' - - ', + years: (e.dateOfBirth == null + ? null + : DigitDateUtils.calculateAge( + DigitDateUtils + .getFormattedDateToDateTime( + e.dateOfBirth!, + ) ?? + DateTime.now(), + ).years), + months: (e.dateOfBirth == null + ? null + : DigitDateUtils.calculateAge( + DigitDateUtils + .getFormattedDateToDateTime( + e.dateOfBirth!, + ) ?? + DateTime.now(), + ).months), + gender: e.gender?.name, + isBeneficiaryRefused: + isBeneficiaryRefused && !checkStatus( taskData, currentCycle, - ) - ? true - : false, - localizations: localizations, - projectBeneficiaryClientReferenceId: - projectBeneficiaryId, - ); - }, - ).toList(), - ), - const SizedBox( - height: spacer2, - ), - Center( - child: DigitButton( - isDisabled: (state.householdMemberWrapper - .projectBeneficiaries ?? - []) - .isEmpty, - onPressed: () => addIndividual( - context, - state.householdMemberWrapper.household!, + ), + isBeneficiaryReferred: + isBeneficiaryReferred, + isDelivered: taskData == null + ? false + : taskData.isNotEmpty && + !checkStatus( + taskData, + currentCycle, + ) + ? true + : false, + localizations: localizations, + projectBeneficiaryClientReferenceId: + projectBeneficiaryId, + ); + }, + ).toList(), ), - label: localizations.translate( - i18.householdOverView - .householdOverViewAddActionText, + const SizedBox( + height: spacer2, ), - prefixIcon: Icons.add_circle, - type: DigitButtonType.tertiary, - size: DigitButtonSize.medium, - ), - ), - const SizedBox( - height: spacer2, + Center( + child: DigitButton( + isDisabled: (state.householdMemberWrapper + .projectBeneficiaries ?? + []) + .isEmpty, + onPressed: () => addIndividual( + context, + state.householdMemberWrapper.household!, + ), + label: localizations.translate( + i18.householdOverView + .householdOverViewAddActionText, + ), + prefixIcon: Icons.add_circle, + type: DigitButtonType.tertiary, + size: DigitButtonSize.medium, + ), + ), + const SizedBox( + height: spacer2, + ), + ], ), - ], - ), - ]), + ]), ), ], ), diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart index e91f7a386..346aade6d 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart @@ -14,19 +14,19 @@ import '../../../widgets/table_card/table_card.dart'; // This function builds a table with the given data and headers Widget buildTableContent( - DeliverInterventionState deliverInterventionState, - BuildContext context, - List? variant, - IndividualModel? individualModel, - HouseholdModel? householdModel, - ) { + DeliverInterventionState deliverInterventionState, + BuildContext context, + List? variant, + IndividualModel? individualModel, + HouseholdModel? householdModel, +) { // Calculate the current cycle. If deliverInterventionState.cycle is negative, set it to 0. final currentCycle = - deliverInterventionState.cycle >= 0 ? deliverInterventionState.cycle : 0; + deliverInterventionState.cycle >= 0 ? deliverInterventionState.cycle : 0; // Calculate the current dose. If deliverInterventionState.dose is negative, set it to 0. final currentDose = - deliverInterventionState.dose >= 0 ? deliverInterventionState.dose : 0; + deliverInterventionState.dose >= 0 ? deliverInterventionState.dose : 0; final localizations = RegistrationDeliveryLocalization.of(context); // Defining a list of table headers for resource popup @@ -36,7 +36,8 @@ Widget buildTableContent( cellValue: 'dose', ), DigitTableColumn( - header: localizations.translate(i18.beneficiaryDetails.beneficiaryResources), + header: + localizations.translate(i18.beneficiaryDetails.beneficiaryResources), cellValue: 'resources', ), ]; @@ -44,11 +45,12 @@ Widget buildTableContent( // Calculate the height of the container based on the number of items in the table final ProjectTypeModel projectType = - RegistrationDeliverySingleton().projectType!; + RegistrationDeliverySingleton().projectType!; final item = - projectType.cycles?[currentCycle - 1].deliveries?[currentDose - 1]; + projectType.cycles?[currentCycle - 1].deliveries?[currentDose - 1]; final productVariants = - fetchProductVariant(item, individualModel, householdModel)?.productVariants; + fetchProductVariant(item, individualModel, householdModel) + ?.productVariants; final numRows = productVariants?.length ?? 0; const rowHeight = 84; const paddingHeight = (spacer2 * 2); @@ -75,58 +77,63 @@ Widget buildTableContent( element: { localizations.translate( i18.beneficiaryDetails.beneficiaryAge, - ): fetchProductVariant(item, individualModel, householdModel)?.condition != null - ? localizations.translate( - fetchProductVariant(item, individualModel, householdModel)!.condition!) + ): fetchProductVariant(item, individualModel, householdModel) + ?.condition != + null + ? localizations.translate(fetchProductVariant( + item, individualModel, householdModel)! + .condition!) : null, }, ), ), const DigitDivider(), // Build the DigitTable with the data - fetchProductVariant(item, individualModel, householdModel)?.productVariants != null + fetchProductVariant(item, individualModel, householdModel) + ?.productVariants != + null ? DigitTable( - enableBorder: true, - showSelectedState: false, - showPagination: false, - columns: columnListResource, - rows: [ - ...fetchProductVariant(item, individualModel, householdModel )! - .productVariants! - .map( - (e) { - // Retrieve the SKU value for the product variant. - final value = variant - ?.firstWhereOrNull( - (element) => element.id == e.productVariantId, - ) - ?.sku; - final quantity = e.quantity; + enableBorder: true, + showSelectedState: false, + showPagination: false, + columns: columnListResource, + rows: [ + ...fetchProductVariant(item, individualModel, householdModel)! + .productVariants! + .map( + (e) { + // Retrieve the SKU value for the product variant. + final value = variant + ?.firstWhereOrNull( + (element) => element.id == e.productVariantId, + ) + ?.sku; + final quantity = e.quantity; - return DigitTableRow( - tableRow: [ - // Display the dose information in the first column if it's the first row, - // otherwise, display an empty cell. + return DigitTableRow(tableRow: [ + // Display the dose information in the first column if it's the first row, + // otherwise, display an empty cell. - fetchProductVariant(item, individualModel, householdModel) - ?.productVariants - ?.indexOf(e) == - 0 - ? DigitTableData( - '${localizations.translate(i18.deliverIntervention.dose)} ${deliverInterventionState.dose}', - cellKey: 'dose', - ) - : DigitTableData('',cellKey: ''), - // Display the SKU value in the second column. - DigitTableData( - '$quantity - ${localizations.translate(value.toString())}', - cellKey: 'resources', - ), - ]); - }, - ), - ], - ) + fetchProductVariant( + item, individualModel, householdModel) + ?.productVariants + ?.indexOf(e) == + 0 + ? DigitTableData( + '${localizations.translate(i18.deliverIntervention.dose)} ${deliverInterventionState.dose}', + cellKey: 'dose', + ) + : DigitTableData('', cellKey: ''), + // Display the SKU value in the second column. + DigitTableData( + '$quantity - ${localizations.translate(value.toString())}', + cellKey: 'resources', + ), + ]); + }, + ), + ], + ) : Text(localizations.translate(i18.common.noProjectSelected)) ], ), diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart index 1bb3edf52..bc0fcb59c 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart @@ -43,15 +43,18 @@ class RecordDeliveryCycleState extends LocalizedState { final headerList = [ DigitTableColumn( - header: localizations.translate(i18.beneficiaryDetails.beneficiaryDoseNo), + header: + localizations.translate(i18.beneficiaryDetails.beneficiaryDoseNo), cellValue: 'dose', ), DigitTableColumn( - header: localizations.translate(i18.beneficiaryDetails.beneficiaryStatus), + header: + localizations.translate(i18.beneficiaryDetails.beneficiaryStatus), cellValue: 'status', ), DigitTableColumn( - header: localizations.translate(i18.beneficiaryDetails.beneficiaryCompletedOn), + header: localizations + .translate(i18.beneficiaryDetails.beneficiaryCompletedOn), cellValue: 'completedOn', ), ]; // List of table headers for displaying cycle and dose information @@ -74,15 +77,15 @@ class RecordDeliveryCycleState extends LocalizedState { return Column(children: [ deliverState.hasCycleArrived ? buildCycleAndDoseTable( - widget.projectCycles - .where( - (e) => e.id == deliverState.cycle, - ) - .toList(), - headerList, - deliverState.dose - 1, - true, - ) + widget.projectCycles + .where( + (e) => e.id == deliverState.cycle, + ) + .toList(), + headerList, + deliverState.dose - 1, + true, + ) : const SizedBox.shrink(), if ((pastCycles ?? []).isNotEmpty) Column( @@ -93,11 +96,11 @@ class RecordDeliveryCycleState extends LocalizedState { return Column(children: [ isExpanded ? buildCycleAndDoseTable( - pastCycles ?? [], - headerList, - null, - false, - ) + pastCycles ?? [], + headerList, + null, + false, + ) : const Offstage(), SizedBox( width: MediaQuery.of(context).size.width, @@ -111,12 +114,12 @@ class RecordDeliveryCycleState extends LocalizedState { }, child: Row( mainAxisAlignment: - MainAxisAlignment.center, + MainAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ Padding( padding: - const EdgeInsets.symmetric( + const EdgeInsets.symmetric( horizontal: spacer2 / 2, ), child: TextButton( @@ -131,35 +134,38 @@ class RecordDeliveryCycleState extends LocalizedState { fontSize: spacer2 * 2, color: Theme.of(context) .colorTheme - .primary.primary1, + .primary + .primary1, ), isExpanded ? localizations.translate( - i18.deliverIntervention - .hidePastCycles, - ) + i18.deliverIntervention + .hidePastCycles, + ) : localizations.translate( - i18.deliverIntervention - .viewPastCycles, - ), + i18.deliverIntervention + .viewPastCycles, + ), ), ), ), !isExpanded ? Icon( - color: Theme.of(context) - .colorTheme - .primary.primary1, - Icons.keyboard_arrow_down, - size: 24, - ) + color: Theme.of(context) + .colorTheme + .primary + .primary1, + Icons.keyboard_arrow_down, + size: 24, + ) : Icon( - color: Theme.of(context) - .colorTheme - .primary.primary1, - Icons.keyboard_arrow_up, - size: 24, - ), + color: Theme.of(context) + .colorTheme + .primary + .primary1, + Icons.keyboard_arrow_up, + size: 24, + ), ], ), ), @@ -182,11 +188,11 @@ class RecordDeliveryCycleState extends LocalizedState { } Widget buildCycleAndDoseTable( - List cycles, - List headerList, - int? selectedIndex, - bool isCurrentCycle, - ) { + List cycles, + List headerList, + int? selectedIndex, + bool isCurrentCycle, + ) { final theme = DigitTheme.instance.mobileTheme; final widgetList = []; @@ -201,15 +207,13 @@ class RecordDeliveryCycleState extends LocalizedState { Padding( padding: isCurrentCycle ? const EdgeInsets.all(spacer2) - : const EdgeInsets.all( - spacer2 - ), + : const EdgeInsets.all(spacer2), child: Align( alignment: Alignment.centerLeft, child: Text( isCurrentCycle ? localizations - .translate(i18.beneficiaryDetails.currentCycleLabel) + .translate(i18.beneficiaryDetails.currentCycleLabel) : '${localizations.translate(i18.beneficiaryDetails.beneficiaryCycle)} ${e.id}', style: theme.textTheme.headlineLarge, textAlign: TextAlign.left, @@ -217,35 +221,35 @@ class RecordDeliveryCycleState extends LocalizedState { ), ), DigitTable( - tableHeight: ((e.deliveries?.length ?? 0) + 1) * 57.5, + tableHeight: ((e.deliveries?.length ?? 0) + 1) * 80, tableWidth: MediaQuery.of(context).size.width, enableBorder: true, showSelectedState: false, showPagination: false, - highlightedRows: (selectedIndex!=null)?[selectedIndex]:[], + highlightedRows: (selectedIndex != null) ? [selectedIndex] : [], columns: headerList, rows: e.deliveries!.mapIndexed( - (index, item) { + (index, item) { final tasks = widget.taskData ?.where((element) => - element.additionalFields?.fields - .firstWhereOrNull( - (f) => - f.key == - AdditionalFieldsType.doseIndex - .toValue(), - ) - ?.value == - '0${item.id}' && - element.additionalFields?.fields - .firstWhereOrNull( - (c) => - c.key == - AdditionalFieldsType.cycleIndex - .toValue(), - ) - ?.value == - '0${e.id}') + element.additionalFields?.fields + .firstWhereOrNull( + (f) => + f.key == + AdditionalFieldsType.doseIndex + .toValue(), + ) + ?.value == + '0${item.id}' && + element.additionalFields?.fields + .firstWhereOrNull( + (c) => + c.key == + AdditionalFieldsType.cycleIndex + .toValue(), + ) + ?.value == + '0${e.id}') .lastOrNull; return DigitTableRow(tableRow: [ @@ -264,46 +268,41 @@ class RecordDeliveryCycleState extends LocalizedState { color: index == selectedIndex ? null : tasks?.status == - Status.administeredSuccess.toValue() - ? DigitTheme - .instance.colorScheme.onSurfaceVariant - : DigitTheme.instance.colorScheme.error, + Status.administeredSuccess.toValue() + ? DigitTheme + .instance.colorScheme.onSurfaceVariant + : DigitTheme.instance.colorScheme.error, fontWeight: - index == selectedIndex ? FontWeight.w700 : null, + index == selectedIndex ? FontWeight.w700 : null, ), ), DigitTableData( tasks?.status == Status.administeredFailed.toValue() || - (tasks?.additionalFields?.fields - .where((e) => - e.key == - AdditionalFieldsType.deliveryStrategy - .toValue()) - .firstOrNull - ?.value == - DeliverStrategyType.indirect.toValue()) + (tasks?.additionalFields?.fields + .where((e) => + e.key == + AdditionalFieldsType.deliveryStrategy + .toValue()) + .firstOrNull + ?.value == + DeliverStrategyType.indirect.toValue()) ? ' -- ' : tasks?.clientAuditDetails?.createdTime.toDateTime - .getFormattedDate() ?? - ' -- ', + .getFormattedDate() ?? + ' -- ', cellKey: 'completedOn', ), ]); }, ).toList(), ), - const SizedBox( - height: 16, - ), - const Divider( - thickness: 1.0, - ), ], ), ); } return Column( + mainAxisSize: MainAxisSize.min, children: widgetList, ); } diff --git a/packages/registration_delivery/lib/utils/utils.dart b/packages/registration_delivery/lib/utils/utils.dart index cbb74c5ee..e31105bca 100644 --- a/packages/registration_delivery/lib/utils/utils.dart +++ b/packages/registration_delivery/lib/utils/utils.dart @@ -64,7 +64,7 @@ bool checkIfBeneficiaryRefused( ) { final isBeneficiaryRefused = (tasks != null && (tasks).isNotEmpty && - tasks.last.status == Status.administeredFailed.toValue()); + tasks.last.status == Status.beneficiaryRefused.toValue()); return isBeneficiaryRefused; } @@ -409,27 +409,46 @@ class RegistrationDeliverySingleton { } String? get tenantId => _tenantId; + String? get loggedInUserUuid => _loggedInUserUuid; + double? get maxRadius => _maxRadius; + String? get projectId => _projectId; + BeneficiaryType? get beneficiaryType => _beneficiaryType; + ProjectTypeModel? get projectType => _projectType; + ProjectModel? get selectedProject => _selectedProject; + BoundaryModel? get boundary => _boundaryModel; + PersistenceConfiguration? get persistenceConfiguration => _persistenceConfiguration; + List? get genderOptions => _genderOptions; + List? get idTypeOptions => _idTypeOptions; + List? get householdDeletionReasonOptions => _householdDeletionReasonOptions; + List? get householdMemberDeletionReasonOptions => _householdMemberDeletionReasonOptions; + List? get deliveryCommentOptions => _deliveryCommentOptions; + List? get symptomsTypes => _symptomsTypes; + List? get searchHouseHoldFilter => _searchHouseHoldFilter; + List? get referralReasons => _referralReasons; + List? get houseStructureTypes => _houseStructureTypes; + List? get refusalReasons => _refusalReasons; + UserModel? get loggedInUser => _loggedInUser; } diff --git a/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart index bdaa1af5e..41c94c625 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart @@ -42,6 +42,7 @@ class ResourceBeneficiaryCardState fetched: (productVariants) { return SelectionCard( equalWidthOptions: true, + showParentContainer: true, options: productVariants, onSelectionChanged: (selectedOptions) { if (selectedOptions.isNotEmpty) { diff --git a/packages/survey_form/lib/pages/survey_form_view.dart b/packages/survey_form/lib/pages/survey_form_view.dart index 8319d1c6e..c291eb093 100644 --- a/packages/survey_form/lib/pages/survey_form_view.dart +++ b/packages/survey_form/lib/pages/survey_form_view.dart @@ -746,7 +746,7 @@ class SurveyFormViewPageState extends LocalizedState { .map((item) => RadioButtonModel( code: item, name: localizations.translate( - 'CORE_COMMON_${item.trim().toUpperCase()}', + item.trim().toUpperCase(), ), )) .toList() From 96451e273ca577ac85a00feb0d83722eb811d285 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Fri, 13 Dec 2024 14:48:09 +0530 Subject: [PATCH 207/241] solved the scanner issue. --- .../digit_scanner/lib/pages/qr_scanner.dart | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/packages/digit_scanner/lib/pages/qr_scanner.dart b/packages/digit_scanner/lib/pages/qr_scanner.dart index 755916d0b..727037321 100644 --- a/packages/digit_scanner/lib/pages/qr_scanner.dart +++ b/packages/digit_scanner/lib/pages/qr_scanner.dart @@ -424,9 +424,15 @@ class _DigitScannerPageState extends LocalizedState { initializeCameras(); }); }, - child: Align( + child: Align( alignment: Alignment.topRight, - child: Icon(Icons.close, color: Theme.of(context).colorTheme.text.primary,), + child: Icon( + Icons.close, + color: Theme.of(context) + .colorTheme + .text + .primary, + ), ), ), footer: Padding( @@ -502,15 +508,18 @@ class _DigitScannerPageState extends LocalizedState { formControlName: _manualCodeFormKey, builder: (field) { return InputField( - label: localizations.translate( - i18.scanner.resourceCode, - ), - type: InputType.text, - ); + label: localizations.translate( + i18.scanner.resourceCode, + ), + type: InputType.text, + onChange: (value) { + form + .control(_manualCodeFormKey) + .value = value; + }); }, ), ]) - ], ); }); From e74307117c651f50ab8c1d76f7e80d24cc05941f Mon Sep 17 00:00:00 2001 From: rachana-egov Date: Fri, 13 Dec 2024 15:00:31 +0530 Subject: [PATCH 208/241] Added loader animation files --- .../assets/animated_json/inline_loader.json | 1 + .../assets/animated_json/overlay_loader.json | 1 + .../assets/animated_json/page_loader.json | 1 + 3 files changed, 3 insertions(+) create mode 100644 apps/health_campaign_field_worker_app/assets/animated_json/inline_loader.json create mode 100644 apps/health_campaign_field_worker_app/assets/animated_json/overlay_loader.json create mode 100644 apps/health_campaign_field_worker_app/assets/animated_json/page_loader.json diff --git a/apps/health_campaign_field_worker_app/assets/animated_json/inline_loader.json b/apps/health_campaign_field_worker_app/assets/animated_json/inline_loader.json new file mode 100644 index 000000000..e5a3cc656 --- /dev/null +++ b/apps/health_campaign_field_worker_app/assets/animated_json/inline_loader.json @@ -0,0 +1 @@ +{"nm":"Main Scene","ddd":0,"h":500,"w":500,"meta":{"g":"@lottiefiles/creator 1.37.0"},"layers":[{"ty":4,"nm":"Shape Layer 5","sr":1,"st":20,"op":620,"ip":20,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[251,250]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":20},{"s":[360],"t":110}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","ix":1,"cix":2,"np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,-100]},"s":{"a":0,"k":[10,10]}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":0},"c":{"a":0,"k":[0,0,0]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.7765,0.2902,0.051]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":1},{"ty":4,"nm":"Shape Layer 4","sr":1,"st":15,"op":615,"ip":15,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[251,250]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":15},{"s":[360],"t":105}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","ix":1,"cix":2,"np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,-100]},"s":{"a":0,"k":[20,20]}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":0},"c":{"a":0,"k":[0,0,0]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.7765,0.2902,0.051]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":2},{"ty":4,"nm":"Shape Layer 3","sr":1,"st":10,"op":610,"ip":10,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[251,250]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":10},{"s":[360],"t":100}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","ix":1,"cix":2,"np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,-100]},"s":{"a":0,"k":[30,30]}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":0},"c":{"a":0,"k":[0,0,0]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.7765,0.2902,0.051]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":3},{"ty":4,"nm":"Shape Layer 2","sr":1,"st":5,"op":605,"ip":5,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[251,250]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":5},{"s":[360],"t":95}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","ix":1,"cix":2,"np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,-100]},"s":{"a":0,"k":[40,40]}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":0},"c":{"a":0,"k":[0,0,0]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.7765,0.2902,0.051]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":4},{"ty":4,"nm":"Shape Layer 1","sr":1,"st":0,"op":600,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[250,250]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":0},{"s":[360],"t":90}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","ix":1,"cix":2,"np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,-100]},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[50,50],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[40,40],"t":84},{"s":[50,50],"t":100}]}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":0},"c":{"a":0,"k":[0,0,0]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.7765,0.2902,0.051]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":5}],"v":"5.7.0","fr":60,"op":106,"ip":0,"assets":[]} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/assets/animated_json/overlay_loader.json b/apps/health_campaign_field_worker_app/assets/animated_json/overlay_loader.json new file mode 100644 index 000000000..9a9759f2d --- /dev/null +++ b/apps/health_campaign_field_worker_app/assets/animated_json/overlay_loader.json @@ -0,0 +1 @@ +{"nm":"Main Scene","ddd":0,"h":500,"w":500,"meta":{"g":"@lottiefiles/creator 1.37.1"},"layers":[{"ty":4,"nm":"Shape Layer 5","sr":1,"st":20,"op":620,"ip":20,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[251,250]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":20},{"s":[360],"t":110}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","ix":1,"cix":2,"np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,-100]},"s":{"a":0,"k":[10,10]}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":0},"c":{"a":0,"k":[0,0,0]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":1},{"ty":4,"nm":"Shape Layer 4","sr":1,"st":15,"op":615,"ip":15,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[251,250]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":15},{"s":[360],"t":105}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","ix":1,"cix":2,"np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,-100]},"s":{"a":0,"k":[20,20]}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":0},"c":{"a":0,"k":[0,0,0]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":2},{"ty":4,"nm":"Shape Layer 3","sr":1,"st":10,"op":610,"ip":10,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[251,250]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":10},{"s":[360],"t":100}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","ix":1,"cix":2,"np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,-100]},"s":{"a":0,"k":[30,30]}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":0},"c":{"a":0,"k":[0,0,0]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":3},{"ty":4,"nm":"Shape Layer 2","sr":1,"st":5,"op":605,"ip":5,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[251,250]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":5},{"s":[360],"t":95}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","ix":1,"cix":2,"np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,-100]},"s":{"a":0,"k":[40,40]}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":0},"c":{"a":0,"k":[0,0,0]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":4},{"ty":4,"nm":"Shape Layer 1","sr":1,"st":0,"op":600,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[250,250]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":0},{"s":[360],"t":90}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","ix":1,"cix":2,"np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,-100]},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[50,50],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[40,40],"t":84},{"s":[50,50],"t":100}]}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":0},"c":{"a":0,"k":[0,0,0]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":5}],"v":"5.7.0","fr":60,"op":106,"ip":0,"assets":[]} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/assets/animated_json/page_loader.json b/apps/health_campaign_field_worker_app/assets/animated_json/page_loader.json new file mode 100644 index 000000000..ef02f47ca --- /dev/null +++ b/apps/health_campaign_field_worker_app/assets/animated_json/page_loader.json @@ -0,0 +1 @@ +{"nm":"Main Scene","ddd":0,"h":500,"w":500,"meta":{"g":"@lottiefiles/creator 1.37.1"},"layers":[{"ty":4,"nm":"Shape Layer 5","sr":1,"st":20,"op":620,"ip":20,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[251,250]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":20},{"s":[360],"t":110}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","ix":1,"cix":2,"np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,-100]},"s":{"a":0,"k":[10,10]}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":0},"c":{"a":0,"k":[0,0,0]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.0353,0.2902,0.4]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":1},{"ty":4,"nm":"Shape Layer 4","sr":1,"st":15,"op":615,"ip":15,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[251,250]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":15},{"s":[360],"t":105}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","ix":1,"cix":2,"np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,-100]},"s":{"a":0,"k":[20,20]}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":0},"c":{"a":0,"k":[0,0,0]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.0353,0.2902,0.4]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":2},{"ty":4,"nm":"Shape Layer 3","sr":1,"st":10,"op":610,"ip":10,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[251,250]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":10},{"s":[360],"t":100}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","ix":1,"cix":2,"np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,-100]},"s":{"a":0,"k":[30,30]}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":0},"c":{"a":0,"k":[0,0,0]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.0353,0.2902,0.4]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":3},{"ty":4,"nm":"Shape Layer 2","sr":1,"st":5,"op":605,"ip":5,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[251,250]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":5},{"s":[360],"t":95}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","ix":1,"cix":2,"np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,-100]},"s":{"a":0,"k":[40,40]}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":0},"c":{"a":0,"k":[0,0,0]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.0353,0.2902,0.4]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":4},{"ty":4,"nm":"Shape Layer 1","sr":1,"st":0,"op":600,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[250,250]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":0},{"s":[360],"t":90}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","ix":1,"cix":2,"np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,-100]},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[50,50],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[40,40],"t":84},{"s":[50,50],"t":100}]}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":0},"c":{"a":0,"k":[0,0,0]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.0353,0.2902,0.4]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":5}],"v":"5.7.0","fr":60,"op":106,"ip":0,"assets":[]} \ No newline at end of file From c7f84239f33d5d871dddf4bf7cedb08d3ee11521 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Fri, 13 Dec 2024 15:23:21 +0530 Subject: [PATCH 209/241] sync package publish attendance loader fix in mark page --- .../lib/utils/constants.dart | 6 ++ .../pubspec.lock | 18 ++--- .../pubspec.yaml | 2 +- .../lib/blocs/attendance_individual_bloc.dart | 23 +++++-- packages/survey_form/pubspec.lock | 65 +++++++++++++++++-- packages/sync_service/pubspec.yaml | 7 +- 6 files changed, 92 insertions(+), 29 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/utils/constants.dart b/apps/health_campaign_field_worker_app/lib/utils/constants.dart index 1b2eda364..fe95a6767 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/constants.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/constants.dart @@ -35,12 +35,15 @@ class Constants { late Future _isar; late String _version; static final Constants _instance = Constants._(); + Constants._() { _isar = openIsar(); } + factory Constants() { return _instance; } + Future initialize(version) async { await initializeAllMappers(); setInitialDataOfPackages(); @@ -302,6 +305,7 @@ final scaffoldMessengerKey = GlobalKey(); class KeyValue { String label; dynamic key; + KeyValue(this.label, this.key); } @@ -310,6 +314,7 @@ class StatusKeys { bool isBeneficiaryRefused; bool isBeneficiaryReferred; bool isStatusReset; + StatusKeys(this.isNotEligible, this.isBeneficiaryRefused, this.isBeneficiaryReferred, this.isStatusReset); } @@ -355,6 +360,7 @@ class DownloadBeneficiary { String? prefixLabel; String? suffixLabel; AppConfiguration? appConfiguartion; + DownloadBeneficiary({ required this.title, required this.projectId, diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index bb7db31c6..e395f4e3a 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -441,11 +441,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - name: dart_mappable_builder - sha256: "04a6e7117382f8a8689b3e363bee6c3de8c9ea4332e664148fe01bd576eb1126" - url: "https://pub.dev" - source: hosted - version: "4.3.0" + path: "../../packages/dart_mappable_builder" + relative: true + source: path + version: "4.2.3" dart_style: dependency: transitive description: @@ -2079,9 +2078,10 @@ packages: sync_service: dependency: "direct main" description: - path: "../../packages/sync_service" - relative: true - source: path + name: sync_service + sha256: ba4720b48bf4a80c3299118000bf7851dae871480b75ab95f0e5a830cddc2e39 + url: "https://pub.dev" + source: hosted version: "0.0.1-dev.1" synchronized: dependency: transitive @@ -2404,5 +2404,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <4.0.0" + dart: ">=3.4.1 <4.0.0" flutter: ">=3.22.0" diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index f358f7f1c..284b99b74 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -61,7 +61,7 @@ dependencies: digit_showcase: ^1.0.0 qr_flutter: ^4.1.0 disk_space_update: ^0.0.2 - sync_service: ^0.0.1 + sync_service: ^0.0.1-dev.1 attendance_management: ^1.0.2+4 digit_scanner: ^1.0.3+1 inventory_management: ^1.0.3+4 diff --git a/packages/attendance_management/lib/blocs/attendance_individual_bloc.dart b/packages/attendance_management/lib/blocs/attendance_individual_bloc.dart index 2c6524703..a1678f173 100644 --- a/packages/attendance_management/lib/blocs/attendance_individual_bloc.dart +++ b/packages/attendance_management/lib/blocs/attendance_individual_bloc.dart @@ -175,8 +175,9 @@ class AttendanceIndividualBloc "longitude": event.longitude, } : { - EnumValues.boundaryCode.toValue(): AttendanceSingleton().boundary?.code, - }), + EnumValues.boundaryCode.toValue(): + AttendanceSingleton().boundary?.code, + }), AttendanceLogModel( individualId: e.individualId, registerId: e.registerId, @@ -196,11 +197,13 @@ class AttendanceIndividualBloc ? { EnumValues.latitude.toValue(): event.latitude, EnumValues.longitude.toValue(): event.longitude, - EnumValues.boundaryCode.toValue(): AttendanceSingleton().boundary?.code, + EnumValues.boundaryCode.toValue(): + AttendanceSingleton().boundary?.code, } : { - EnumValues.boundaryCode.toValue(): AttendanceSingleton().boundary?.code, - }) + EnumValues.boundaryCode.toValue(): + AttendanceSingleton().boundary?.code, + }) ]); } }); @@ -249,7 +252,7 @@ class AttendanceIndividualBloc checkResponse( List logResponse, List attendees, - AttendanceIndividualLogSearchEvent event) async* { + AttendanceIndividualLogSearchEvent event) async { bool anyLogPresent = false; final currentDate = DateTime.fromMillisecondsSinceEpoch(event.currentDate); int twelvePM = @@ -296,7 +299,7 @@ class AttendanceIndividualBloc : 1); }).toList(); - yield (AttendanceIndividualState.loaded( + emit(AttendanceIndividualState.loaded( attendanceCollectionModel: attendees, viewOnly: anyLogPresent)); } @@ -406,6 +409,7 @@ class AttendanceIndividualEvent with _$AttendanceIndividualEvent { required int limit, @Default(false) bool isSingleSession, }) = AttendanceIndividualLogSearchEvent; + // Event for marking individual attendance const factory AttendanceIndividualEvent.individualAttendanceMark({ @Default(0) int entryTime, @@ -415,6 +419,7 @@ class AttendanceIndividualEvent with _$AttendanceIndividualEvent { required String individualId, required String registerId, }) = AttendanceMarkEvent; + // Event for saving attendance as draft const factory AttendanceIndividualEvent.saveAsDraft({ required int entryTime, @@ -436,10 +441,13 @@ class AttendanceIndividualEvent with _$AttendanceIndividualEvent { @freezed class AttendanceIndividualState with _$AttendanceIndividualState { const AttendanceIndividualState._(); + // Initial state const factory AttendanceIndividualState.initial() = _Initial; + // Loading state const factory AttendanceIndividualState.loading() = _Loading; + // Loaded state with attendance data factory AttendanceIndividualState.loaded({ List? attendanceSearchModelList, @@ -450,6 +458,7 @@ class AttendanceIndividualState with _$AttendanceIndividualState { @Default(10) int limitData, @Default(false) bool viewOnly, }) = _AttendanceRowModelLoaded; + // Error state const factory AttendanceIndividualState.error(String? error) = _Error; } diff --git a/packages/survey_form/pubspec.lock b/packages/survey_form/pubspec.lock index 95a94db7e..6006c60b0 100644 --- a/packages/survey_form/pubspec.lock +++ b/packages/survey_form/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "64.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -308,12 +316,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "5595f37310a63a92b2c1c7e386c74fe39df5555d" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git - version: "4.2.0" + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.3" dart_style: dependency: transitive description: @@ -337,6 +343,13 @@ packages: relative: true source: path version: "1.0.5-dev.1" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_ui_components: dependency: "direct main" description: @@ -450,6 +463,46 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: diff --git a/packages/sync_service/pubspec.yaml b/packages/sync_service/pubspec.yaml index 6a3ed1561..d6dba781a 100644 --- a/packages/sync_service/pubspec.yaml +++ b/packages/sync_service/pubspec.yaml @@ -1,5 +1,5 @@ name: sync_service -description: "A new Flutter package project." +description: "Sync Service package provides access to sync to offline applications" version: 0.0.1-dev.1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/sync_service repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -28,11 +28,6 @@ dependencies: provider: ^6.1.2 flutter_secure_storage: ^9.2.2 digit_data_model: ^1.0.4 - digit_ui_components: - git: - url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: hcm_changes - path: ./flutter/digit-ui-components/digit_components dev_dependencies: flutter_test: From d07756cdb7e7b1f545163e091b1a426085ac1905 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Fri, 13 Dec 2024 15:29:39 +0530 Subject: [PATCH 210/241] disabled selection state in table --- packages/attendance_management/lib/pages/mark_attendance.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/attendance_management/lib/pages/mark_attendance.dart b/packages/attendance_management/lib/pages/mark_attendance.dart index ad3585631..22c34b733 100644 --- a/packages/attendance_management/lib/pages/mark_attendance.dart +++ b/packages/attendance_management/lib/pages/mark_attendance.dart @@ -268,6 +268,7 @@ class _MarkAttendancePageState extends State { children: [ tableData.isNotEmpty ? table.DigitTable( + showSelectedState: false, tableHeight: viewOnly ? MediaQuery.of(context) .size From b93fd78f866db6d047d9f5de76d510759bb135ae Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Fri, 13 Dec 2024 15:47:42 +0530 Subject: [PATCH 211/241] removed creds --- apps/health_campaign_field_worker_app/lib/pages/login.dart | 4 ++-- apps/health_campaign_field_worker_app/pubspec.lock | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/pages/login.dart b/apps/health_campaign_field_worker_app/lib/pages/login.dart index 12178988b..cb1277d20 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/login.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/login.dart @@ -229,12 +229,12 @@ class _LoginPageState extends LocalizedState { FormGroup buildForm() => fb.group({ _userId: FormControl( - value: 'USR-260849', + value: '', validators: [Validators.required], ), _password: FormControl( validators: [Validators.required], - value: 'eGov@123', + value: '', ), _privacyCheck: FormControl( value: false, diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index e395f4e3a..c6fae0604 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -535,7 +535,7 @@ packages: path: "../../packages/digit_location_tracker" relative: true source: path - version: "0.0.1-dev.1" + version: "0.0.1-dev.2" digit_scanner: dependency: "direct main" description: From 3ea14d051dea37c2deb5ae94952c5eabbae2951a Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Fri, 13 Dec 2024 16:17:46 +0530 Subject: [PATCH 212/241] solved the scanner ui issue (#633) --- packages/digit_scanner/lib/pages/qr_scanner.dart | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/digit_scanner/lib/pages/qr_scanner.dart b/packages/digit_scanner/lib/pages/qr_scanner.dart index 727037321..e7b5aebaa 100644 --- a/packages/digit_scanner/lib/pages/qr_scanner.dart +++ b/packages/digit_scanner/lib/pages/qr_scanner.dart @@ -311,7 +311,7 @@ class _DigitScannerPageState extends LocalizedState { left: spacer1, right: spacer1, ), - height: spacer6, + height: spacer9, decoration: BoxDecoration( color: DigitTheme .instance.colorScheme.surface, @@ -326,7 +326,7 @@ class _DigitScannerPageState extends LocalizedState { ), ), padding: - const EdgeInsets.all(spacer1), + const EdgeInsets.all(spacer2), child: Row( crossAxisAlignment: CrossAxisAlignment.end, @@ -353,6 +353,9 @@ class _DigitScannerPageState extends LocalizedState { ), ), IconButton( + padding: const EdgeInsets.only( + bottom: spacer2, + ), icon: Icon( Icons.delete, color: From 890026a77697532797921bd21a0bc8c6608c87c8 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Fri, 13 Dec 2024 16:29:22 +0530 Subject: [PATCH 213/241] cancel button fix --- .../lib/pages/session_select.dart | 278 +++++++++--------- 1 file changed, 133 insertions(+), 145 deletions(-) diff --git a/packages/attendance_management/lib/pages/session_select.dart b/packages/attendance_management/lib/pages/session_select.dart index 5081ff3ae..a79de6369 100644 --- a/packages/attendance_management/lib/pages/session_select.dart +++ b/packages/attendance_management/lib/pages/session_select.dart @@ -104,153 +104,141 @@ class _AttendanceDateSessionSelectionPageState padding: EdgeInsets.all(theme.spacerTheme.spacer2), children: [ - ReactiveValueListenableBuilder( - formControlName: _dateOfSession, - builder: (context, value, _) { - return DigitButton( - size: DigitButtonSize.large, - type: DigitButtonType.primary, - mainAxisSize: MainAxisSize.max, - label: localizations.translate( - isAttendanceCompleted( - value.value as DateTime) - ? i18 - .attendance.viewAttendance - : i18.attendance - .markAttendance, - ), - onPressed: () async { - form.markAllAsTouched(); - if (selectedRegister - .additionalDetails?[ - EnumValues.sessions - .toValue()] == - 2 && - form - .control( - _sessionRadio) - .value == - null) { - form - .control(_sessionRadio) - .setErrors({'': true}); - - form - .control(_sessionRadio) - .setValidators( - [Validators.required]); + DigitButton( + size: DigitButtonSize.large, + type: DigitButtonType.primary, + mainAxisSize: MainAxisSize.max, + label: localizations.translate( + isAttendanceCompleted(form + .control(_dateOfSession) + .value as DateTime) + ? i18.attendance.viewAttendance + : i18.attendance.markAttendance, + ), + onPressed: () async { + form.markAllAsTouched(); + if (selectedRegister.additionalDetails?[ + EnumValues.sessions + .toValue()] == + 2 && + form.control(_sessionRadio).value == + null) { + form + .control(_sessionRadio) + .setErrors({'': true}); - // Ensure form control is updated after changing validators - form - .control(_sessionRadio) - .updateValueAndValidity(); - } else { - if (!form.valid) { - return; - } else { - final session = form - .control(_sessionRadio) - .value; - DateTime dateSession = form - .control(_dateOfSession) - .value; + form + .control(_sessionRadio) + .setValidators( + [Validators.required]); - final entryTime = selectedRegister - .additionalDetails?[ - EnumValues - .sessions - .toValue()] == - 2 - ? AttendanceDateTimeManagement - .getMillisecondEpoch( - dateSession, - form - .control( - _sessionRadio) - .value != - null - ? int.parse(form - .control( - _sessionRadio) - .value) - : 0, - "entryTime", - ) - : (DateTime( - dateSession.year, - dateSession.month, - dateSession.day, - 9) - .millisecondsSinceEpoch); + // Ensure form control is updated after changing validators + form + .control(_sessionRadio) + .updateValueAndValidity(); + } else { + if (!form.valid) { + return; + } else { + final session = form + .control(_sessionRadio) + .value; + DateTime dateSession = form + .control(_dateOfSession) + .value; - final exitTime = selectedRegister - .additionalDetails?[ - EnumValues - .sessions - .toValue()] == - 2 - ? AttendanceDateTimeManagement - .getMillisecondEpoch( - dateSession, - form - .control( - _sessionRadio) - .value != - null - ? int.parse(form - .control( - _sessionRadio) - .value) - : 1, - "exitTime", - ) - : (DateTime( - dateSession.year, - dateSession.month, - dateSession.day, - 18) - .millisecondsSinceEpoch); + final entryTime = selectedRegister + .additionalDetails?[ + EnumValues.sessions + .toValue()] == + 2 + ? AttendanceDateTimeManagement + .getMillisecondEpoch( + dateSession, + form + .control( + _sessionRadio) + .value != + null + ? int.parse(form + .control( + _sessionRadio) + .value) + : 0, + "entryTime", + ) + : (DateTime( + dateSession.year, + dateSession.month, + dateSession.day, + 9) + .millisecondsSinceEpoch); - final submit = - await context.router.push( - MarkAttendanceRoute( - attendees: selectedRegister - .attendees != - null - //Filtering attendees based on current time and enrollment date of the attendee - ? (selectedRegister - .attendees ?? - []) - .where((att) => - att.enrollmentDate != - null && - att.enrollmentDate! <= - entryTime) - .toList() - : [], - dateTime: dateSession, - session: session != null - ? int.parse(session) - : null, - entryTime: entryTime, - exitTime: exitTime, - registerId: - selectedRegister.id, - tenantId: selectedRegister - .tenantId - .toString(), - ), - ); - if (submit == null) { + final exitTime = selectedRegister + .additionalDetails?[ + EnumValues.sessions + .toValue()] == + 2 + ? AttendanceDateTimeManagement + .getMillisecondEpoch( + dateSession, form - .control(_sessionRadio) - .value = null; - } - } - } - }, - ); - }) + .control( + _sessionRadio) + .value != + null + ? int.parse(form + .control( + _sessionRadio) + .value) + : 1, + "exitTime", + ) + : (DateTime( + dateSession.year, + dateSession.month, + dateSession.day, + 18) + .millisecondsSinceEpoch); + + final submit = + await context.router.push( + MarkAttendanceRoute( + attendees: selectedRegister + .attendees != + null + //Filtering attendees based on current time and enrollment date of the attendee + ? (selectedRegister + .attendees ?? + []) + .where((att) => + att.enrollmentDate != + null && + att.enrollmentDate! <= + entryTime) + .toList() + : [], + dateTime: dateSession, + session: session != null + ? int.parse(session) + : null, + entryTime: entryTime, + exitTime: exitTime, + registerId: selectedRegister.id, + tenantId: selectedRegister + .tenantId + .toString(), + ), + ); + if (submit == null) { + form + .control(_sessionRadio) + .value = null; + } + } + } + }, + ) ]), children: [ DigitCard(children: [ @@ -441,9 +429,9 @@ class _AttendanceDateSessionSelectionPageState l.keys.first.toString()) == AttendanceDateTimeManagement.getFilteredDate( selectedDate.toString())) - .first - .values - .first; + .firstOrNull + ?.values + .firstOrNull; return selectDateCompleted; } From 08ed907c7d160bb5e40682884020ded21ee83c28 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Fri, 13 Dec 2024 17:25:06 +0530 Subject: [PATCH 214/241] checklist help text and action label PR merge --- .../pages/beneficiary/household_overview.dart | 3 +- .../widgets/beneficiary/beneficiary_card.dart | 66 ++--- packages/registration_delivery/pubspec.lock | 57 ++++- .../lib/pages/survey_form_view.dart | 19 ++ packages/survey_form/pubspec.lock | 234 +++++++++--------- 5 files changed, 226 insertions(+), 153 deletions(-) diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index 2ffaf5ebb..1297e03a7 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -102,8 +102,7 @@ class _HouseholdOverviewPageState vertical: spacer2), child: DigitButton( label: localizations.translate( - '${RegistrationDeliverySingleton().selectedProject!.name}_${i18.memberCard - .deliverDetailsUpdateLabel}', + '${RegistrationDeliverySingleton().selectedProject!.name}_${i18.memberCard.deliverDetailsUpdateLabel}', ), isDisabled: state .householdMemberWrapper diff --git a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart index 616bd43de..58d03883d 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart @@ -36,39 +36,39 @@ class BeneficiaryCard extends StatelessWidget { style: theme.textTheme.headlineSmall, ), ), - if(status != null) - Offstage( - offstage: status == null, - child: status == Status.visited.toValue() || - status == Status.registered.toValue() || - status == Status.administeredSuccess.toValue() || - status == Status.delivered.toValue() - ? DigitButton( - prefixIcon: Icons.check_circle, - label: RegistrationDeliveryLocalization.of(context) - .translate(status.toString() == - Status.administeredSuccess.toValue() - ? '${RegistrationDeliverySingleton().selectedProject!.name}_${status.toString()}' - : status.toString())), - textColor: theme.colorScheme.onSurfaceVariant, - iconColor: theme.colorScheme.onSurfaceVariant, - isDisabled: true, - onPressed: () {}, - type: DigitButtonType.tertiary, - size: DigitButtonSize.medium, - ) - : DigitButton( - prefixIcon: Icons.info_rounded, - label: RegistrationDeliveryLocalization.of(context) - .translate(status.toString()), - textColor: theme.colorScheme.error, - iconColor: theme.colorScheme.error, - type: DigitButtonType.tertiary, - size: DigitButtonSize.medium, - isDisabled: true, - onPressed: () {}, - ), - ), + if (status != null) + Offstage( + offstage: status == null, + child: status == Status.visited.toValue() || + status == Status.registered.toValue() || + status == Status.administeredSuccess.toValue() || + status == Status.delivered.toValue() + ? DigitButton( + prefixIcon: Icons.check_circle, + label: RegistrationDeliveryLocalization.of(context) + .translate(status.toString() == + Status.administeredSuccess.toValue() + ? '${RegistrationDeliverySingleton().selectedProject!.name}_${status.toString()}' + : status.toString()), + textColor: theme.colorScheme.onSurfaceVariant, + iconColor: theme.colorScheme.onSurfaceVariant, + isDisabled: true, + onPressed: () {}, + type: DigitButtonType.tertiary, + size: DigitButtonSize.medium, + ) + : DigitButton( + prefixIcon: Icons.info_rounded, + label: RegistrationDeliveryLocalization.of(context) + .translate(status.toString()), + textColor: theme.colorScheme.error, + iconColor: theme.colorScheme.error, + type: DigitButtonType.tertiary, + size: DigitButtonSize.medium, + isDisabled: true, + onPressed: () {}, + ), + ), if (subtitle != null) Padding( padding: const EdgeInsets.all(4), diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index b7116245d..899223b0e 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -407,6 +415,13 @@ packages: relative: true source: path version: "1.0.5-dev.1" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_scanner: dependency: "direct main" description: @@ -543,6 +558,46 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: @@ -1728,5 +1783,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <3.9.0" + dart: ">=3.4.0 <4.0.0" flutter: ">=3.22.0" diff --git a/packages/survey_form/lib/pages/survey_form_view.dart b/packages/survey_form/lib/pages/survey_form_view.dart index 224e5c83a..4ef7357af 100644 --- a/packages/survey_form/lib/pages/survey_form_view.dart +++ b/packages/survey_form/lib/pages/survey_form_view.dart @@ -383,6 +383,10 @@ class SurveyFormViewPageState extends LocalizedState { .map(( e, ) { + String? description = e.additionalDetails?.entries + .where((a) => a.key == 'helpText') + .first + .value; int index = (initialAttributes ?? []).indexOf(e); return Column(children: [ if (e.dataType == 'String' && @@ -412,6 +416,11 @@ class SurveyFormViewPageState extends LocalizedState { label: localizations.translate( '${value.selectedServiceDefinition?.code}.${e.code}', ), + description: description != null + ? localizations.translate( + '${value.selectedServiceDefinition?.code}.$description', + ) + : null, isRequired: e.required ?? false, child: DigitTextFormInput( onChange: (value) { @@ -460,6 +469,11 @@ class SurveyFormViewPageState extends LocalizedState { '${value.selectedServiceDefinition?.code}.${e.code}', ) .trim(), + description: description != null + ? localizations.translate( + '${value.selectedServiceDefinition?.code}.$description', + ) + : null, isRequired: e.required ?? false, child: DigitTextFormInput( onChange: (value) { @@ -490,6 +504,11 @@ class SurveyFormViewPageState extends LocalizedState { label: localizations.translate( '${value.selectedServiceDefinition?.code}.${e.code}', ), + description: description != null + ? localizations.translate( + '${value.selectedServiceDefinition?.code}.$description', + ) + : null, isRequired: e.required ?? false, child: BlocBuilder( diff --git a/packages/survey_form/pubspec.lock b/packages/survey_form/pubspec.lock index 6006c60b0..d96e50fcd 100644 --- a/packages/survey_form/pubspec.lock +++ b/packages/survey_form/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 + sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" url: "https://pub.dev" source: hosted - version: "64.0.0" + version: "67.0.0" _flutterfire_internals: dependency: transitive description: @@ -21,10 +21,10 @@ packages: dependency: transitive description: name: analyzer - sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" + sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" url: "https://pub.dev" source: hosted - version: "6.2.0" + version: "6.4.1" analyzer_plugin: dependency: transitive description: @@ -53,10 +53,10 @@ packages: dependency: transitive description: name: args - sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" + sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6 url: "https://pub.dev" source: hosted - version: "2.5.0" + version: "2.6.0" async: dependency: transitive description: @@ -77,10 +77,10 @@ packages: dependency: "direct dev" description: name: auto_route_generator - sha256: ba28133d3a3bf0a66772bcc98dade5843753cd9f1a8fb4802b842895515b67d3 + sha256: a21d7a936c917488653c972f62d884d8adcf8c5d37acc7cd24da33cf784546c0 url: "https://pub.dev" source: hosted - version: "8.0.0" + version: "8.1.0" bloc: dependency: transitive description: @@ -125,10 +125,10 @@ packages: dependency: transitive description: name: build_daemon - sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" + sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9" url: "https://pub.dev" source: hosted - version: "4.0.1" + version: "4.0.2" build_resolvers: dependency: transitive description: @@ -141,18 +141,18 @@ packages: dependency: transitive description: name: build_runner - sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" url: "https://pub.dev" source: hosted - version: "2.4.9" + version: "2.4.11" build_runner_core: dependency: transitive description: name: build_runner_core - sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" + sha256: e3c79f69a64bdfcd8a776a3c28db4eb6e3fb5356d013ae5eb2e52007706d5dbe url: "https://pub.dev" source: hosted - version: "7.3.0" + version: "7.3.1" built_collection: dependency: transitive description: @@ -205,10 +205,10 @@ packages: dependency: transitive description: name: camera_web - sha256: b9235ec0a2ce949daec546f1f3d86f05c3921ed31c7d9ab6b7c03214d152fc2d + sha256: "595f28c89d1fb62d77c73c633193755b781c6d2e0ebcd8dc25b763b514e6ba8f" url: "https://pub.dev" source: hosted - version: "0.3.4" + version: "0.3.5" characters: dependency: transitive description: @@ -221,10 +221,10 @@ packages: dependency: transitive description: name: charcode - sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 + sha256: fb0f1107cac15a5ea6ef0a6ef71a807b9e4267c713bb93e00e92d737cc8dbd8a url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.4.0" checked_yaml: dependency: transitive description: @@ -237,10 +237,10 @@ packages: dependency: transitive description: name: cli_util - sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 + sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c url: "https://pub.dev" source: hosted - version: "0.4.1" + version: "0.4.2" clock: dependency: transitive description: @@ -269,18 +269,18 @@ packages: dependency: transitive description: name: convert - sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" coverage: dependency: transitive description: name: coverage - sha256: "3945034e86ea203af7a056d98e98e42a5518fff200d6e8e6647e1886b07e936e" + sha256: e3493833ea012784c740e341952298f1cc77f1f01b1bbc3eb4eecf6984fb7f43 url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.11.1" cross_file: dependency: transitive description: @@ -293,10 +293,10 @@ packages: dependency: transitive description: name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.6" csslib: dependency: transitive description: @@ -355,7 +355,7 @@ packages: description: path: "flutter/digit-ui-components/digit_components" ref: hcm_changes - resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 + resolved-ref: "05e86809fdbef4e443616a5c266043c353924953" url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -371,10 +371,10 @@ packages: dependency: transitive description: name: dio_web_adapter - sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac" + sha256: "33259a9276d6cea88774a0000cfae0d861003497755969c92faa223108620dc8" url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "2.0.0" dotted_border: dependency: transitive description: @@ -387,18 +387,18 @@ packages: dependency: "direct main" description: name: drift - sha256: "6acedc562ffeed308049f78fb1906abad3d65714580b6745441ee6d50ec564cd" + sha256: "4e0ffee40d23f0b809e6cff1ad202886f51d629649073ed42d9cd1d194ea943e" url: "https://pub.dev" source: hosted - version: "2.18.0" + version: "2.19.1+1" drift_dev: dependency: "direct dev" description: name: drift_dev - sha256: d9b020736ea85fff1568699ce18b89fabb3f0f042e8a7a05e84a3ec20d39acde + sha256: ac7647c6cedca99724ca300cff9181f6dd799428f8ed71f94159ed0528eaec26 url: "https://pub.dev" source: hosted - version: "2.18.0" + version: "2.19.1" fake_async: dependency: transitive description: @@ -411,10 +411,10 @@ packages: dependency: transitive description: name: ffi - sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.3" file: dependency: transitive description: @@ -427,26 +427,26 @@ packages: dependency: transitive description: name: file_picker - sha256: d1d0ac3966b36dc3e66eeefb40280c17feb87fa2099c6e22e6a1fc959327bd03 + sha256: "825aec673606875c33cd8d3c4083f1a3c3999015a84178b317b7ef396b7384f3" url: "https://pub.dev" source: hosted - version: "8.0.0+1" + version: "8.0.7" file_selector_linux: dependency: transitive description: name: file_selector_linux - sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" url: "https://pub.dev" source: hosted - version: "0.9.2+1" + version: "0.9.3+2" file_selector_macos: dependency: transitive description: name: file_selector_macos - sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 + sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc" url: "https://pub.dev" source: hosted - version: "0.9.4" + version: "0.9.4+2" file_selector_platform_interface: dependency: transitive description: @@ -459,10 +459,10 @@ packages: dependency: transitive description: name: file_selector_windows - sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" + sha256: "8f5d2f6590d51ecd9179ba39c64f722edc15226cc93dcc8698466ad36a4a85a4" url: "https://pub.dev" source: hosted - version: "0.9.3+2" + version: "0.9.3+3" firebase_core: dependency: transitive description: @@ -565,10 +565,10 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: "8cf40eebf5dec866a6d1956ad7b4f7016e6c0cc69847ab946833b7d43743809f" + sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda" url: "https://pub.dev" source: hosted - version: "2.0.19" + version: "2.0.22" flutter_spinkit: dependency: transitive description: @@ -589,10 +589,10 @@ packages: dependency: "direct main" description: name: flutter_svg - sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" + sha256: "54900a1a1243f3c4a5506d853a2b5c2dbc38d5f27e52a52618a8054401431123" url: "https://pub.dev" source: hosted - version: "2.0.10+1" + version: "2.0.16" flutter_test: dependency: "direct dev" description: flutter @@ -607,10 +607,10 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" + sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" url: "https://pub.dev" source: hosted - version: "8.2.5" + version: "8.2.8" freezed: dependency: "direct dev" description: @@ -631,10 +631,10 @@ packages: dependency: transitive description: name: frontend_server_client - sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "4.0.0" geolocator: dependency: transitive description: @@ -703,10 +703,10 @@ packages: dependency: transitive description: name: graphs - sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 + sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" group_radio_button: dependency: "direct main" description: @@ -759,34 +759,34 @@ packages: dependency: transitive description: name: image_picker - sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8" + sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a" url: "https://pub.dev" source: hosted - version: "1.0.8" + version: "1.1.2" image_picker_android: dependency: transitive description: name: image_picker_android - sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" + sha256: "8c5abf0dcc24fe6e8e0b4a5c0b51a5cf30cefdf6407a3213dae61edc75a70f56" url: "https://pub.dev" source: hosted - version: "0.8.9+6" + version: "0.8.12+12" image_picker_for_web: dependency: transitive description: name: image_picker_for_web - sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3 + sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.6" image_picker_ios: dependency: transitive description: name: image_picker_ios - sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 + sha256: "4f0568120c6fcc0aaa04511cb9f9f4d29fc3d0139884b1d06be88dcec7641d6b" url: "https://pub.dev" source: hosted - version: "0.8.9+1" + version: "0.8.12+1" image_picker_linux: dependency: transitive description: @@ -807,10 +807,10 @@ packages: dependency: transitive description: name: image_picker_platform_interface - sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b + sha256: "9ec26d410ff46f483c5519c29c02ef0e02e13a543f882b152d4bfd2f06802f80" url: "https://pub.dev" source: hosted - version: "2.9.3" + version: "2.10.0" image_picker_windows: dependency: transitive description: @@ -831,10 +831,10 @@ packages: dependency: transitive description: name: io - sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "1.0.5" isar: dependency: transitive description: @@ -935,10 +935,10 @@ packages: dependency: transitive description: name: logging - sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.3.0" lottie: dependency: transitive description: @@ -1015,10 +1015,10 @@ packages: dependency: transitive description: name: package_config - sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + sha256: "92d4488434b520a62570293fbd33bb556c7d49230791c1b4bbd973baf6d2dc67" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" path: dependency: transitive description: @@ -1039,34 +1039,34 @@ packages: dependency: transitive description: name: path_parsing - sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.1.0" path_provider: dependency: transitive description: name: path_provider - sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 + sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.1.5" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d + sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7" url: "https://pub.dev" source: hosted - version: "2.2.4" + version: "2.2.10" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" + sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.1" path_provider_linux: dependency: transitive description: @@ -1135,10 +1135,10 @@ packages: dependency: transitive description: name: pub_semver - sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + sha256: "7b3cfbf654f3edd0c6298ecd5be782ce997ddf0e00531b9464b55245185bbbbd" url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.1.5" pubspec_parse: dependency: transitive description: @@ -1183,10 +1183,10 @@ packages: dependency: transitive description: name: shelf_static - sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e + sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3 url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.1.3" shelf_web_socket: dependency: transitive description: @@ -1220,18 +1220,18 @@ packages: dependency: transitive description: name: source_map_stack_trace - sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" + sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" source_maps: dependency: transitive description: name: source_maps - sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" + sha256: "190222579a448b03896e0ca6eca5998fa810fda630c1d65e2f78b3f638f54812" url: "https://pub.dev" source: hosted - version: "0.10.12" + version: "0.10.13" source_span: dependency: transitive description: @@ -1252,26 +1252,26 @@ packages: dependency: transitive description: name: sqlite3 - sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" + sha256: fde692580bee3379374af1f624eb3e113ab2865ecb161dbe2d8ac2de9735dbdb url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.5" sqlite3_flutter_libs: dependency: transitive description: name: sqlite3_flutter_libs - sha256: "7ae52b23366e5295005022e62fa093f64bfe190810223ea0ebf733a4cd140bce" + sha256: "636b0fe8a2de894e5455572f6cbbc458f4ffecfe9f860b79439e27041ea4f0b9" url: "https://pub.dev" source: hosted - version: "0.5.26" + version: "0.5.27" sqlparser: dependency: transitive description: name: sqlparser - sha256: ade9a67fd70d0369329ed3373208de7ebd8662470e8c396fc8d0d60f9acdfc9f + sha256: "3be52b4968fc2f098ba735863404756d2fe3ea0729cf006a5b5612618f74ca04" url: "https://pub.dev" source: hosted - version: "0.36.0" + version: "0.37.1" stack_trace: dependency: transitive description: @@ -1340,10 +1340,10 @@ packages: dependency: transitive description: name: timing - sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe" url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.0.2" type_plus: dependency: transitive description: @@ -1380,42 +1380,42 @@ packages: dependency: transitive description: name: url_launcher - sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" + sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" url: "https://pub.dev" source: hosted - version: "6.3.0" + version: "6.3.1" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: "17cd5e205ea615e2c6ea7a77323a11712dffa0720a8a90540db57a01347f9ad9" + sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79 url: "https://pub.dev" source: hosted - version: "6.3.2" + version: "6.3.9" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" + sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626" url: "https://pub.dev" source: hosted - version: "6.2.4" + version: "6.3.2" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 + sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.2.1" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" + sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2" url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "3.2.2" url_launcher_platform_interface: dependency: transitive description: @@ -1436,10 +1436,10 @@ packages: dependency: transitive description: name: url_launcher_windows - sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" + sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "3.1.3" uuid: dependency: transitive description: @@ -1452,26 +1452,26 @@ packages: dependency: transitive description: name: vector_graphics - sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" + sha256: "27d5fefe86fb9aace4a9f8375b56b3c292b64d8c04510df230f849850d912cb7" url: "https://pub.dev" source: hosted - version: "1.1.11+1" + version: "1.1.15" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da + sha256: "2430b973a4ca3c4dbc9999b62b8c719a160100dcbae5c819bae0cacce32c9cdb" url: "https://pub.dev" source: hosted - version: "1.1.11+1" + version: "1.1.12" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" + sha256: "1b4b9e706a10294258727674a340ae0d6e64a7231980f9f9a3d12e4b42407aad" url: "https://pub.dev" source: hosted - version: "1.1.11+1" + version: "1.1.16" vector_math: dependency: transitive description: @@ -1516,10 +1516,10 @@ packages: dependency: transitive description: name: web_socket_channel - sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + sha256: "58c6666b342a38816b2e7e50ed0f1e261959630becd4c879c4f26bfa14aa5a42" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.5" webkit_inspection_protocol: dependency: transitive description: @@ -1532,18 +1532,18 @@ packages: dependency: transitive description: name: win32 - sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" + sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a" url: "https://pub.dev" source: hosted - version: "5.2.0" + version: "5.5.4" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "1.1.0" xml: dependency: transitive description: From 959628165d4245d6edaaa6c232457644a16fd416 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Fri, 13 Dec 2024 17:56:24 +0530 Subject: [PATCH 215/241] modified helpText mapping to additionalFields --- packages/survey_form/lib/pages/survey_form_view.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/survey_form/lib/pages/survey_form_view.dart b/packages/survey_form/lib/pages/survey_form_view.dart index 4ef7357af..6e1b87183 100644 --- a/packages/survey_form/lib/pages/survey_form_view.dart +++ b/packages/survey_form/lib/pages/survey_form_view.dart @@ -383,10 +383,10 @@ class SurveyFormViewPageState extends LocalizedState { .map(( e, ) { - String? description = e.additionalDetails?.entries + String? description = e.additionalFields?.fields .where((a) => a.key == 'helpText') - .first - .value; + .firstOrNull + ?.value; int index = (initialAttributes ?? []).indexOf(e); return Column(children: [ if (e.dataType == 'String' && From cbbfb7b94ab4178313eb2ba696877270cc7bdd43 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Fri, 13 Dec 2024 18:19:04 +0530 Subject: [PATCH 216/241] pulled back changes https://github.com/HCM-MOZ-IMPEL/health-campaign-field-worker-app-impel/commit/3f7e76b0bd39d2ab6ede2e2c6730f5e0bd169a00 --- .../pubspec.lock | 2 +- .../beneficiary_registration.dart | 30 ++++- .../household_overview.dart | 123 ++++++++++++++++-- 3 files changed, 141 insertions(+), 14 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index c6fae0604..8a11202f3 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -555,7 +555,7 @@ packages: description: path: "flutter/digit-ui-components/digit_components" ref: hcm_changes - resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 + resolved-ref: "05e86809fdbef4e443616a5c266043c353924953" url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" diff --git a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart index 1714d41e2..0b2b6f069 100644 --- a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart +++ b/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart @@ -408,6 +408,11 @@ class BeneficiaryRegistrationBloc editHousehold: (value) async { emit(value.copyWith(loading: true)); try { + final HouseholdModel? existingHousehold = + (await householdRepository.search(HouseholdSearchModel( + clientReferenceId: [value.householdModel.clientReferenceId], + ))) + .firstOrNull; await householdRepository.update( event.household.copyWith( clientAuditDetails: ClientAuditDetails( @@ -425,6 +430,10 @@ class BeneficiaryRegistrationBloc relatedClientReferenceId: value.householdModel.clientReferenceId, ), + id: existingHousehold?.id, + rowVersion: existingHousehold?.rowVersion ?? 1, + nonRecoverableError: + existingHousehold?.nonRecoverableError ?? false, ), ); final projectBeneficiary = await projectBeneficiaryRepository.search( @@ -491,6 +500,11 @@ class BeneficiaryRegistrationBloc } for (var element in value.individualModel) { + final IndividualModel? existingIndividual = + (await individualRepository.search(IndividualSearchModel( + clientReferenceId: [element.clientReferenceId], + ))) + .firstOrNull; await individualRepository.update( element.copyWith( address: [ @@ -502,6 +516,10 @@ class BeneficiaryRegistrationBloc ); }), ], + id: existingIndividual?.id, + rowVersion: existingIndividual?.rowVersion ?? 1, + nonRecoverableError: + existingIndividual?.nonRecoverableError ?? false, ), ); } @@ -547,7 +565,17 @@ class BeneficiaryRegistrationBloc ], ), ); - await individualRepository.update(individual); + final IndividualModel? existingIndividual = + (await individualRepository.search(IndividualSearchModel( + clientReferenceId: [individual.clientReferenceId], + ))) + .firstOrNull; + await individualRepository.update(individual.copyWith( + id: existingIndividual?.id, + rowVersion: existingIndividual?.rowVersion ?? 1, + nonRecoverableError: + existingIndividual?.nonRecoverableError ?? false, + )); if (projectBeneficiary.isNotEmpty) { if (projectBeneficiary.first.tag != event.tag) { await projectBeneficiaryRepository diff --git a/packages/registration_delivery/lib/blocs/household_overview/household_overview.dart b/packages/registration_delivery/lib/blocs/household_overview/household_overview.dart index 96fc6d58b..e85ac489b 100644 --- a/packages/registration_delivery/lib/blocs/household_overview/household_overview.dart +++ b/packages/registration_delivery/lib/blocs/household_overview/household_overview.dart @@ -222,16 +222,65 @@ class HouseholdOverviewBloc HouseholdOverviewEmitter emit, ) async { // Delete the household from the repository. + final HouseholdModel? existingHousehold = + (await householdRepository.search(HouseholdSearchModel( + clientReferenceId: [event.householdModel.clientReferenceId], + ))) + .firstOrNull; await householdRepository.delete( event.householdModel.copyWith( - rowVersion: event.householdModel.rowVersion, + id: existingHousehold?.id, + rowVersion: existingHousehold?.rowVersion ?? 1, + nonRecoverableError: existingHousehold?.nonRecoverableError ?? false, ), ); // Iterate through individual members of the household. for (final i in event.members) { - // Delete the individual from the repository. - await individualRepository.delete(i); +// Delete the individual from the repository. + final IndividualModel? existingIndividual = + (await individualRepository.search(IndividualSearchModel( + clientReferenceId: [i.clientReferenceId], + ))) + .firstOrNull; + await individualRepository.delete(i.copyWith( + id: existingIndividual?.id, + rowVersion: existingIndividual?.rowVersion ?? 1, + nonRecoverableError: existingIndividual?.nonRecoverableError ?? false, + )); + if (event.projectBeneficiaryType == BeneficiaryType.individual) { + // Search for project beneficiary associated with the deleted individual. + final projectBeneficiaries = await projectBeneficiaryRepository.search( + ProjectBeneficiarySearchModel( + beneficiaryClientReferenceId: [ + i.clientReferenceId, + ], + ), + ); + // Delete the associated project beneficiaries. + for (final projectBeneficiary in projectBeneficiaries) { + await projectBeneficiaryRepository.delete( + projectBeneficiary.copyWith( + rowVersion: projectBeneficiary.rowVersion, + clientAuditDetails: (projectBeneficiary + .clientAuditDetails?.createdBy != + null && + projectBeneficiary.clientAuditDetails?.createdTime != + null) + ? ClientAuditDetails( + createdBy: + projectBeneficiary.clientAuditDetails!.createdBy, + createdTime: + projectBeneficiary.clientAuditDetails!.createdTime, + lastModifiedBy: + projectBeneficiary.clientAuditDetails!.lastModifiedBy, + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + ) + : null, + ), + ); + } + } // Search for household members associated with the deleted individual. final householdMember = @@ -250,12 +299,23 @@ class HouseholdOverviewBloc } } - // Delete the project beneficiary associated with the household. - await projectBeneficiaryRepository.delete( - event.projectBeneficiaryModel.copyWith( - rowVersion: event.projectBeneficiaryModel.rowVersion, - ), - ); + if (BeneficiaryType.household == event.projectBeneficiaryType) { + // Delete the project beneficiary associated with the household. + final ProjectBeneficiaryModel? existingProjectBeneficiary = + (await projectBeneficiaryRepository + .search(ProjectBeneficiarySearchModel( + clientReferenceId: [event.projectBeneficiaryModel.clientReferenceId], + ))) + .firstOrNull; + await projectBeneficiaryRepository.delete( + event.projectBeneficiaryModel.copyWith( + id: existingProjectBeneficiary?.id, + rowVersion: existingProjectBeneficiary?.rowVersion ?? 1, + nonRecoverableError: + existingProjectBeneficiary?.nonRecoverableError ?? false, + ), + ); + } } // This function handles the deletion of an individual from a household. @@ -263,9 +323,48 @@ class HouseholdOverviewBloc HouseholdOverviewDeleteIndividualEvent event, HouseholdOverviewEmitter emit, ) async { - // Delete the individual from the repository. - await individualRepository.delete(event.individualModel); - +// Delete the individual from the repository. + final IndividualModel? existingIndividual = + (await individualRepository.search(IndividualSearchModel( + clientReferenceId: [event.individualModel.clientReferenceId], + ))) + .firstOrNull; + await individualRepository.delete(event.individualModel.copyWith( + id: existingIndividual?.id, + rowVersion: existingIndividual?.rowVersion ?? 1, + nonRecoverableError: existingIndividual?.nonRecoverableError ?? false, + )); + if (event.projectBeneficiaryType == BeneficiaryType.individual) { + // Search for project beneficiary associated with the deleted individual. + final projectBeneficiaries = await projectBeneficiaryRepository.search( + ProjectBeneficiarySearchModel( + beneficiaryClientReferenceId: [ + event.individualModel.clientReferenceId, + ], + ), + ); + // Delete the associated project beneficiaries. + for (final projectBeneficiary in projectBeneficiaries) { + await projectBeneficiaryRepository.delete( + projectBeneficiary.copyWith( + rowVersion: projectBeneficiary.rowVersion, + clientAuditDetails: (projectBeneficiary + .clientAuditDetails?.createdBy != + null && + projectBeneficiary.clientAuditDetails?.createdTime != null) + ? ClientAuditDetails( + createdBy: projectBeneficiary.clientAuditDetails!.createdBy, + createdTime: + projectBeneficiary.clientAuditDetails!.createdTime, + lastModifiedBy: + projectBeneficiary.clientAuditDetails!.lastModifiedBy, + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + ) + : null, + ), + ); + } + } // Search for household members associated with the deleted individual. final householdMembers = await householdMemberRepository.search( HouseholdMemberSearchModel( From 44cc45945d07190bc505f8a7e53a55a4b975760c Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Sun, 15 Dec 2024 20:12:53 +0530 Subject: [PATCH 217/241] theme fixing (#634) * solved the scanner ui issue * taking the theme from digit_ui_component --- .../lib/pages/closed_household_details.dart | 3 ++- .../lib/pages/facility_selection.dart | 3 ++- .../lib/pages/manage_stocks.dart | 4 +++- .../lib/pages/record_stock/stock_details.dart | 6 ++++-- .../lib/pages/record_stock/warehouse_details.dart | 4 +++- .../lib/pages/reports/report_details.dart | 3 ++- .../lib/pages/reports/report_selection.dart | 4 +++- .../stock_reconciliation/stock_reconciliation.dart | 5 ++--- .../create_referral/reason_checklist_preview.dart | 9 ++++----- .../create_referral/record_facility_details.dart | 3 ++- .../create_referral/record_reason_checklist.dart | 12 +++++++----- .../create_referral/record_referral_details.dart | 3 ++- .../project_facility/project_facility_selection.dart | 3 ++- .../lib/pages/search_referral_reconciliations.dart | 3 ++- .../lib/widgets/back_navigation_help_header.dart | 3 ++- .../lib/widgets/beneficiary_card.dart | 7 ++++--- .../lib/pages/beneficiary/dose_administered.dart | 7 ++++--- .../beneficiary/record_past_delivery_details.dart | 4 +++- .../beneficiary_registration/household_location.dart | 1 + .../beneficiary_registration/individual_details.dart | 4 ++-- 20 files changed, 56 insertions(+), 35 deletions(-) diff --git a/packages/closed_household/lib/pages/closed_household_details.dart b/packages/closed_household/lib/pages/closed_household_details.dart index a98c9099c..55e1e4559 100644 --- a/packages/closed_household/lib/pages/closed_household_details.dart +++ b/packages/closed_household/lib/pages/closed_household_details.dart @@ -56,6 +56,7 @@ class ClosedHouseholdDetailsPageState Widget build(BuildContext context) { final theme = Theme.of(context); final bloc = context.read(); + final textTheme = theme.digitTextTheme(context); return Scaffold( body: ReactiveFormBuilder( @@ -151,7 +152,7 @@ class ClosedHouseholdDetailsPageState heading: localizations.translate( i18.closeHousehold.closeHouseHoldDetailLabel, ), - headingStyle: theme.textTheme.displayMedium, + headingStyle: textTheme.headingXl, description: localizations.translate( i18.closeHousehold.closeHouseHoldDetailDescLabel, ), diff --git a/packages/inventory_management/lib/pages/facility_selection.dart b/packages/inventory_management/lib/pages/facility_selection.dart index ec46e9483..ae7acdeb7 100644 --- a/packages/inventory_management/lib/pages/facility_selection.dart +++ b/packages/inventory_management/lib/pages/facility_selection.dart @@ -39,6 +39,7 @@ class InventoryFacilitySelectionPageState color: theme.colorScheme.outline, width: 1.0, ); + final textTheme = theme.digitTextTheme(context); return SafeArea( child: ReactiveFormBuilder( @@ -80,7 +81,7 @@ class InventoryFacilitySelectionPageState localizations.translate( i18.common.facilitySearchHeaderLabel, ), - style: theme.textTheme.displayMedium, + style: textTheme.headingXl, textAlign: TextAlign.left, ), ), diff --git a/packages/inventory_management/lib/pages/manage_stocks.dart b/packages/inventory_management/lib/pages/manage_stocks.dart index a3a5bab87..dd9c583d3 100644 --- a/packages/inventory_management/lib/pages/manage_stocks.dart +++ b/packages/inventory_management/lib/pages/manage_stocks.dart @@ -1,5 +1,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/menu_card.dart'; import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; @@ -30,6 +31,7 @@ class ManageStocksPageState extends LocalizedState { @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); return Scaffold( body: ScrollableContent( @@ -45,7 +47,7 @@ class ManageStocksPageState extends LocalizedState { alignment: Alignment.topLeft, child: Text( localizations.translate(i18.manageStock.label), - style: theme.textTheme.displayMedium, + style: textTheme.headingXl, textAlign: TextAlign.center, ), ), diff --git a/packages/inventory_management/lib/pages/record_stock/stock_details.dart b/packages/inventory_management/lib/pages/record_stock/stock_details.dart index 0f558ce6d..df0e72c2b 100644 --- a/packages/inventory_management/lib/pages/record_stock/stock_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/stock_details.dart @@ -4,6 +4,7 @@ import 'package:digit_scanner/blocs/scanner.dart'; import 'package:digit_scanner/pages/qr_scanner.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/services/location_bloc.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/utils/component_utils.dart'; import 'package:digit_ui_components/widgets/atoms/input_wrapper.dart'; import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; @@ -89,6 +90,7 @@ class StockDetailsPageState extends LocalizedState { @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); bool isWareHouseMgr = InventorySingleton().isWareHouseMgr; @@ -594,7 +596,7 @@ class StockDetailsPageState extends LocalizedState { children: [ Text( localizations.translate(pageTitle), - style: theme.textTheme.displayMedium, + style: textTheme.headingXl, ), BlocBuilder( @@ -1066,7 +1068,7 @@ class StockDetailsPageState extends LocalizedState { child: IconButton( alignment: Alignment.centerRight, color: - theme.colorScheme.secondary, + theme.colorTheme.primary.primary1, icon: const Icon(Icons.edit), onPressed: () { //[TODO: Add route to auto_route] diff --git a/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart b/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart index 625d0f210..023454d86 100644 --- a/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/warehouse_details.dart @@ -3,6 +3,7 @@ import 'package:digit_data_model/data_model.dart'; import 'package:digit_scanner/blocs/scanner.dart'; import 'package:digit_scanner/pages/qr_scanner.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/input_wrapper.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/scrollable_content.dart'; @@ -69,6 +70,7 @@ class WarehouseDetailsPageState extends LocalizedState { Widget build(BuildContext context) { final theme = Theme.of(context); final recordStockBloc = BlocProvider.of(context); + final textTheme = theme.digitTextTheme(context); return InventorySingleton().projectId.isEmpty ? Center( @@ -252,7 +254,7 @@ class WarehouseDetailsPageState extends LocalizedState { i18.warehouseDetails .warehouseDetailsLabel, ), - style: theme.textTheme.displayMedium, + style: textTheme.headingXl, ), ReactiveWrapperField( formControlName: _dateOfEntryKey, diff --git a/packages/inventory_management/lib/pages/reports/report_details.dart b/packages/inventory_management/lib/pages/reports/report_details.dart index 6c1712eac..70611f8d0 100644 --- a/packages/inventory_management/lib/pages/reports/report_details.dart +++ b/packages/inventory_management/lib/pages/reports/report_details.dart @@ -2,6 +2,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/input_wrapper.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; @@ -156,7 +157,7 @@ class InventoryReportDetailsPageState child: Text( title, maxLines: 1, - style: Theme.of(context).textTheme.displayMedium, + style: Theme.of(context).digitTextTheme(context).headingXl, ), ), ), diff --git a/packages/inventory_management/lib/pages/reports/report_selection.dart b/packages/inventory_management/lib/pages/reports/report_selection.dart index e2a1d1a70..ad2301125 100644 --- a/packages/inventory_management/lib/pages/reports/report_selection.dart +++ b/packages/inventory_management/lib/pages/reports/report_selection.dart @@ -1,5 +1,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/menu_card.dart'; import 'package:flutter/material.dart'; import 'package:inventory_management/router/inventory_router.gm.dart'; @@ -31,6 +32,7 @@ class InventoryReportSelectionPageState @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); return Scaffold( body: ScrollableContent( @@ -49,7 +51,7 @@ class InventoryReportSelectionPageState alignment: Alignment.topLeft, child: Text( localizations.translate(i18.inventoryReportSelection.label), - style: theme.textTheme.displayMedium, + style: textTheme.headingXl, textAlign: TextAlign.center, ), ), diff --git a/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart b/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart index e05978f4b..ecb0cbcd1 100644 --- a/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart +++ b/packages/inventory_management/lib/pages/stock_reconciliation/stock_reconciliation.dart @@ -1,6 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/digit_divider.dart'; import 'package:digit_ui_components/widgets/atoms/input_wrapper.dart'; import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; @@ -293,9 +294,7 @@ class StockReconciliationPageState i18.stockReconciliationDetails .reconciliationPageTitle, ), - style: Theme.of(context) - .textTheme - .displayMedium, + style: Theme.of(context).digitTextTheme(context).headingXl, ), if (InventorySingleton().isWareHouseMgr!) BlocConsumer( diff --git a/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart b/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart index a80e6055b..b93730a75 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/reason_checklist_preview.dart @@ -32,6 +32,7 @@ class _ReferralReasonChecklistPreviewPageState @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); return Scaffold( body: ScrollableContent( @@ -100,8 +101,7 @@ class _ReferralReasonChecklistPreviewPageState e.createdAt.toString(), ), ), - style: theme - .textTheme.headlineMedium, + style: textTheme.headingM, ), ), Row( @@ -167,7 +167,7 @@ class _ReferralReasonChecklistPreviewPageState item2?.code ?? '', ), style: - theme.textTheme.displayMedium, + textTheme.headingXl, ), ), ...(value2.attributes ?? []) @@ -192,8 +192,7 @@ class _ReferralReasonChecklistPreviewPageState .translate( "${item2?.code ?? ''}.${e.attributeCode!}", ), - style: theme.textTheme - .headlineSmall, + style: textTheme.headingS, ), ), Container( diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart index 30c86eebd..0406ebf95 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_facility_details.dart @@ -59,6 +59,7 @@ class _ReferralFacilityPageState extends LocalizedState { @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); // final router = context.router; return BlocConsumer( @@ -198,7 +199,7 @@ class _ReferralFacilityPageState extends LocalizedState { .facilityDetails, ), style: - theme.textTheme.displayMedium, + textTheme.headingXl, ), ), ], diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart index 06caed99b..075cc8b37 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_reason_checklist.dart @@ -63,6 +63,7 @@ class _ReferralReasonChecklistPageState @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); return PopScope( canPop: false, @@ -298,7 +299,7 @@ class _ReferralReasonChecklistPageState '${localizations.translate( value.selectedServiceDefinition!.code.toString(), )} ${localizations.translate(i18.checklist.checklist)}', - style: theme.textTheme.displayMedium, + style: textTheme.headingXl, textAlign: TextAlign.left, ), ), @@ -395,7 +396,7 @@ class _ReferralReasonChecklistPageState '${localizations.translate( '${value.selectedServiceDefinition?.code}.${e.code}', )} ${e.required == true ? '*' : ''}', - style: theme.textTheme.headlineSmall, + style: textTheme.headingS, ), ], ), @@ -490,6 +491,7 @@ class _ReferralReasonChecklistPageState BuildContext context, ) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); /* Check the data type of the attribute*/ if (item.dataType == 'SingleValueList') { @@ -522,7 +524,7 @@ class _ReferralReasonChecklistPageState '${localizations.translate( '${selectedServiceDefinition?.code}.${item.code}', )} ${item.required == true ? '*' : ''}', - style: theme.textTheme.headlineSmall, + style: textTheme.headingS, ), ), ), @@ -611,7 +613,7 @@ class _ReferralReasonChecklistPageState i18.common.corecommonRequired, ), style: TextStyle( - color: theme.colorScheme.error, + color: theme.colorTheme.alert.error, ), ), ), @@ -717,7 +719,7 @@ class _ReferralReasonChecklistPageState '${localizations.translate( '${selectedServiceDefinition?.code}.${item.code}', )} ${item.required == true ? '*' : ''}', - style: theme.textTheme.headlineSmall, + style: textTheme.headingS, ), ], ), diff --git a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart index f3408d460..597ae276f 100644 --- a/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart +++ b/packages/referral_reconciliation/lib/pages/create_referral/record_referral_details.dart @@ -64,6 +64,7 @@ class _RecordReferralDetailsPageState @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); return BlocBuilder( @@ -810,7 +811,7 @@ class _RecordReferralDetailsPageState .referralDetails, ), style: - theme.textTheme.displayMedium, + textTheme.headingXl, ), ), ], diff --git a/packages/referral_reconciliation/lib/pages/project_facility/project_facility_selection.dart b/packages/referral_reconciliation/lib/pages/project_facility/project_facility_selection.dart index 2c513d6a4..83e2bb29e 100644 --- a/packages/referral_reconciliation/lib/pages/project_facility/project_facility_selection.dart +++ b/packages/referral_reconciliation/lib/pages/project_facility/project_facility_selection.dart @@ -35,6 +35,7 @@ class _ReferralReconProjectFacilitySelectionPageState @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); final BorderSide borderSide = BorderSide( color: theme.colorScheme.outline, width: 1.0, @@ -87,7 +88,7 @@ class _ReferralReconProjectFacilitySelectionPageState localizations.translate( i18.common.projectFacilitySearchHeaderLabel, ), - style: theme.textTheme.displayMedium, + style: textTheme.headingXl, textAlign: TextAlign.left, ), ), diff --git a/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart b/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart index 4d1545323..86bc03776 100644 --- a/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart +++ b/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart @@ -57,6 +57,7 @@ class _SearchReferralReconciliationsPageState @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); return KeyboardVisibilityBuilder( builder: (context, isKeyboardVisible) => BlocProvider< SearchReferralsBloc>( @@ -106,7 +107,7 @@ class _SearchReferralReconciliationsPageState .searchReferralsHeader, ), style: - theme.textTheme.displayMedium, + textTheme.headingXl, textAlign: TextAlign.left, ), ), diff --git a/packages/referral_reconciliation/lib/widgets/back_navigation_help_header.dart b/packages/referral_reconciliation/lib/widgets/back_navigation_help_header.dart index e66578ad2..c68ae80d1 100644 --- a/packages/referral_reconciliation/lib/widgets/back_navigation_help_header.dart +++ b/packages/referral_reconciliation/lib/widgets/back_navigation_help_header.dart @@ -24,6 +24,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); return Padding( padding: EdgeInsets.all(theme.spacerTheme.spacer2 / 2), @@ -36,7 +37,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { Flexible( child: TextButton.icon( style: TextButton.styleFrom( - foregroundColor: theme.colorScheme.onSurface, + foregroundColor: theme.colorTheme.generic.background, padding: EdgeInsets.zero, ), onPressed: () { diff --git a/packages/referral_reconciliation/lib/widgets/beneficiary_card.dart b/packages/referral_reconciliation/lib/widgets/beneficiary_card.dart index 1eb514dde..d55249f8c 100644 --- a/packages/referral_reconciliation/lib/widgets/beneficiary_card.dart +++ b/packages/referral_reconciliation/lib/widgets/beneficiary_card.dart @@ -23,6 +23,7 @@ class ReferralBeneficiaryCard extends StatelessWidget { @override Widget build(BuildContext context) { final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); return Column( mainAxisAlignment: MainAxisAlignment.start, @@ -32,7 +33,7 @@ class ReferralBeneficiaryCard extends StatelessWidget { padding: EdgeInsets.all(theme.spacerTheme.spacer2 / 2), child: Text( title, - style: theme.textTheme.headlineSmall, + style: textTheme.headingS, ), ), Offstage( @@ -79,14 +80,14 @@ class ReferralBeneficiaryCard extends StatelessWidget { padding: EdgeInsets.all(theme.spacerTheme.spacer2 / 2), child: Text( subtitle, - style: theme.textTheme.bodyMedium, + style: textTheme.bodyS, ), ), Padding( padding: EdgeInsets.all(theme.spacerTheme.spacer2 / 2), child: Text( description, - style: theme.textTheme.bodySmall, + style: textTheme.bodyS, ), ), ], diff --git a/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart b/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart index 863afeb32..ac0a4a317 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart @@ -3,6 +3,7 @@ import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/models/RadioButtonModel.dart'; import 'package:digit_ui_components/services/location_bloc.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/table_cell.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_table.dart'; @@ -56,6 +57,7 @@ class DoseAdministeredPageState extends LocalizedState { final theme = Theme.of(context); final localizations = RegistrationDeliveryLocalization.of(context); final overViewBloc = context.read().state; + final textTheme = theme.digitTextTheme(context); // Define a list of TableHeader objects for the header of a table final headerListResource = [ DigitTableColumn( @@ -312,7 +314,7 @@ class DoseAdministeredPageState extends LocalizedState { localizations.translate( i18.deliverIntervention.wasTheDoseAdministered, ), - style: theme.textTheme.displayMedium, + style: textTheme.headingXl, ), ReactiveWrapperField( formControlName: _doseAdministeredKey, @@ -409,8 +411,7 @@ class DoseAdministeredPageState extends LocalizedState { i18.beneficiaryDetails .resourcesTobeProvided, ), - style: theme - .textTheme.displayMedium, + style: textTheme.headingXl, ), ), ), diff --git a/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart b/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart index 6ef4f4a4d..44b3712c8 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart @@ -2,6 +2,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:collection/collection.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/models/RadioButtonModel.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; @@ -44,6 +45,7 @@ class RecordPastDeliveryDetailsPageState final theme = Theme.of(context); final localizations = RegistrationDeliveryLocalization.of(context); final router = context.router; + final textTheme = theme.digitTextTheme(context); final futureTaskList = widget.tasks ?.where((task) => task.status == Status.delivered.toValue()) @@ -256,7 +258,7 @@ class RecordPastDeliveryDetailsPageState localizations.translate( i18.deliverIntervention.recordPastDeliveryDeatils, ), - style: theme.textTheme.displayMedium, + style: DigitTheme.instance.mobileTheme.textTheme.displayMedium, ), ), ...(futureTaskList?.asMap().entries.map((entry) { diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart index ca64732cc..a8b251f03 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart @@ -3,6 +3,7 @@ import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/models/entities/address_type.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/services/location_bloc.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/utils/component_utils.dart'; import 'package:digit_ui_components/widgets/atoms/text_block.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index 74218c4ad..5476f6844 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -579,7 +579,7 @@ class IndividualDetailsPageState extends LocalizedState { localizations.translate( i18.deliverIntervention.voucherCode, ), - style: theme.textTheme.headlineSmall, + style: textTheme.headingS, ), ), Flexible( @@ -594,7 +594,7 @@ class IndividualDetailsPageState extends LocalizedState { bottom: spacer2 * 2, ), child: IconButton( - color: theme.colorScheme.secondary, + color: theme.colorTheme.primary.primary1, icon: const Icon(Icons.edit), onPressed: () { Navigator.of(context).push( From 21b38dc793f88e44d834269596f38d8b1066d2a4 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Mon, 16 Dec 2024 11:31:41 +0530 Subject: [PATCH 218/241] dashboard loader fix scanner results persisting fix --- .../lib/pages/dashboard/dashboard.dart | 5 +- .../individual_details.dart | 634 +++++++++--------- 2 files changed, 333 insertions(+), 306 deletions(-) diff --git a/packages/digit_dss/lib/pages/dashboard/dashboard.dart b/packages/digit_dss/lib/pages/dashboard/dashboard.dart index d29c89c3c..0b48c52f8 100644 --- a/packages/digit_dss/lib/pages/dashboard/dashboard.dart +++ b/packages/digit_dss/lib/pages/dashboard/dashboard.dart @@ -55,7 +55,7 @@ class UserDashboardPageState extends LocalizedState { setState(() { isLoading = true; }); - DigitLoaders.inlineLoader(); + DigitLoaders.overlayLoader(context: context); } }, fetched: ( @@ -139,6 +139,9 @@ class UserDashboardPageState extends LocalizedState { : const NeverScrollableScrollPhysics(), rows: table.tableData, columns: table.headerList, + tableHeight: + MediaQuery.of(context).size.height * .3, + showSelectedState: false, ), )) .toList(), diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index 5476f6844..7e436e4f7 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -170,6 +170,9 @@ class IndividualDetailsPageState extends LocalizedState { ); final scannerBloc = context.read(); + scannerBloc.add( + const DigitScannerEvent.handleScanner(), + ); if (scannerBloc.state.duplicate) { Toast.showToast(context, @@ -182,6 +185,9 @@ class IndividualDetailsPageState extends LocalizedState { clickedStatus.value = true; final scannerBloc = context.read(); + scannerBloc.add( + const DigitScannerEvent.handleScanner(), + ); bloc.add( BeneficiaryRegistrationSummaryEvent( projectId: projectId!, @@ -204,6 +210,9 @@ class IndividualDetailsPageState extends LocalizedState { ) { final scannerBloc = context.read(); + scannerBloc.add( + const DigitScannerEvent.handleScanner(), + ); final individual = _getIndividualModel( context, form: form, @@ -270,7 +279,9 @@ class IndividualDetailsPageState extends LocalizedState { if (context.mounted) { final scannerBloc = context.read(); - + scannerBloc.add( + const DigitScannerEvent.handleScanner(), + ); if (scannerBloc.state.duplicate) { Toast.showToast( context, @@ -315,335 +326,348 @@ class IndividualDetailsPageState extends LocalizedState { child: DigitCard( margin: const EdgeInsets.all(spacer2), children: [ - Text( - localizations.translate( - i18.individualDetails.individualsDetailsLabelText, - ), - style: textTheme.headingXl, - ), - individualDetailsShowcaseData.nameOfIndividual.buildWith( - child: ReactiveWrapperField( - formControlName: _individualNameKey, - validationMessages: { - 'required': (object) => localizations.translate( - '${i18.individualDetails.nameLabelText}_IS_REQUIRED', - ), - 'maxLength': (object) => localizations - .translate(i18.common.maxCharsRequired) - .replaceAll('{}', maxLength.toString()), - }, - builder: (field) => LabeledField( - label: localizations.translate( - i18.individualDetails.nameLabelText, + Text( + localizations.translate( + i18.individualDetails.individualsDetailsLabelText, ), - isRequired: true, - child: DigitTextFormInput( - initialValue: - form.control(_individualNameKey).value, - onChange: (value) { - form.control(_individualNameKey).value = value; + style: textTheme.headingXl, + ), + individualDetailsShowcaseData.nameOfIndividual + .buildWith( + child: ReactiveWrapperField( + formControlName: _individualNameKey, + validationMessages: { + 'required': (object) => localizations.translate( + '${i18.individualDetails.nameLabelText}_IS_REQUIRED', + ), + 'maxLength': (object) => localizations + .translate(i18.common.maxCharsRequired) + .replaceAll('{}', maxLength.toString()), }, - errorMessage: field.errorText, + builder: (field) => LabeledField( + label: localizations.translate( + i18.individualDetails.nameLabelText, + ), + isRequired: true, + child: DigitTextFormInput( + initialValue: + form.control(_individualNameKey).value, + onChange: (value) { + form.control(_individualNameKey).value = + value; + }, + errorMessage: field.errorText, + ), + ), ), ), - ), - ), - Offstage( - offstage: !widget.isHeadOfHousehold, - child: DigitCheckbox( - label: localizations.translate( - i18.individualDetails.checkboxLabelText, + Offstage( + offstage: !widget.isHeadOfHousehold, + child: DigitCheckbox( + label: localizations.translate( + i18.individualDetails.checkboxLabelText, + ), + value: widget.isHeadOfHousehold, + readOnly: widget.isHeadOfHousehold, + onChanged: (_) {}, + ), ), - value: widget.isHeadOfHousehold, - readOnly: widget.isHeadOfHousehold, - onChanged: (_) {}, - ), - ), - ReactiveWrapperField( - formControlName: _idTypeKey, - validationMessages: { - 'required': (_) => localizations.translate( - i18.common.corecommonRequired, + ReactiveWrapperField( + formControlName: _idTypeKey, + validationMessages: { + 'required': (_) => localizations.translate( + i18.common.corecommonRequired, + ), + }, + builder: (field) => LabeledField( + label: localizations.translate( + i18.individualDetails.idTypeLabelText, ), - }, - builder: (field) => LabeledField( - label: localizations.translate( - i18.individualDetails.idTypeLabelText, + isRequired: true, + child: DigitDropdown( + selectedOption: + (form.control(_idTypeKey).value != null) + ? DropdownItem( + name: localizations.translate( + form.control(_idTypeKey).value), + code: form.control(_idTypeKey).value) + : const DropdownItem(name: '', code: ''), + items: RegistrationDeliverySingleton() + .idTypeOptions! + .map( + (e) => DropdownItem( + name: localizations.translate(e), + code: e), + ) + .toList(), + onSelect: (value) { + form.control(_idTypeKey).value = value.code; + setState(() { + if (value.code == 'DEFAULT') { + form.control(_idNumberKey).value = + IdGen.i.identifier.toString(); + } else { + form.control(_idNumberKey).value = null; + } + }); + }, + emptyItemText: localizations + .translate(i18.common.noMatchFound), + errorMessage: form.control(_idTypeKey).hasErrors + ? localizations.translate( + i18.common.corecommonRequired, + ) + : null, + ), + ), + ), + if (form.control(_idTypeKey).value != 'DEFAULT') + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ReactiveFormConsumer( + builder: (context, formGroup, child) { + return ReactiveWrapperField( + formControlName: _idNumberKey, + validationMessages: { + 'required': (object) => + localizations.translate( + '${i18.individualDetails.idNumberLabelText}_IS_REQUIRED', + ), + }, + builder: (field) => LabeledField( + label: localizations.translate( + i18.individualDetails.idNumberLabelText, + ), + isRequired: form + .control(_idNumberKey) + .validators + .isNotEmpty, + child: DigitTextFormInput( + readOnly: + form.control(_idTypeKey).value == + 'DEFAULT', + initialValue: + form.control(_idNumberKey).value, + onChange: (value) { + form.control(_idNumberKey).value = + value; + }, + errorMessage: field.errorText, + ), + ), + ); + }, + ), + const SizedBox(height: 4), + ], + ), + if (form.control(_idTypeKey).value == 'DEFAULT') + const SizedBox( + height: spacer2, + ), + individualDetailsShowcaseData.dateOfBirth.buildWith( + child: DigitDobPicker( + datePickerFormControl: _dobKey, + datePickerLabel: localizations.translate( + i18.individualDetails.dobLabelText, + ), + ageFieldLabel: localizations.translate( + i18.individualDetails.ageLabelText, + ), + yearsHintLabel: localizations.translate( + i18.individualDetails.yearsHintText, + ), + monthsHintLabel: localizations.translate( + i18.individualDetails.monthsHintText, + ), + separatorLabel: localizations.translate( + i18.individualDetails.separatorLabelText, + ), + yearsAndMonthsErrMsg: localizations.translate( + i18.individualDetails.yearsAndMonthsErrorText, + ), + errorMessage: form.control(_dobKey).hasErrors + ? localizations + .translate(i18.common.corecommonRequired) + : null, + initialDate: before150Years, + onChangeOfFormControl: (value) { + if (value != null) { + setState(() { + form.control(_dobKey).setErrors({'': false}); + }); + } + // Handle changes to the control's value here + form.control(_dobKey).value = value; + }, + cancelText: localizations + .translate(i18.common.coreCommonCancel), + confirmText: localizations + .translate(i18.common.coreCommonOk), + ), ), - isRequired: true, - child: DigitDropdown( - selectedOption: - (form.control(_idTypeKey).value != null) - ? DropdownItem( - name: localizations.translate( - form.control(_idTypeKey).value), - code: form.control(_idTypeKey).value) - : const DropdownItem(name: '', code: ''), - items: RegistrationDeliverySingleton() - .idTypeOptions! + SelectionCard( + isRequired: true, + showParentContainer: true, + title: localizations.translate( + i18.individualDetails.genderLabelText, + ), + allowMultipleSelection: false, + width: 126, + initialSelection: + form.control(_genderKey).value != null + ? [form.control(_genderKey).value] + : [], + options: RegistrationDeliverySingleton() + .genderOptions! .map( - (e) => DropdownItem( - name: localizations.translate(e), code: e), + (e) => e, ) .toList(), - onSelect: (value) { - form.control(_idTypeKey).value = value.code; + onSelectionChanged: (value) { setState(() { - if (value.code == 'DEFAULT') { - form.control(_idNumberKey).value = - IdGen.i.identifier.toString(); + if (value.isNotEmpty) { + form.control(_genderKey).value = value.first; } else { - form.control(_idNumberKey).value = null; + form.control(_genderKey).value = null; + setState(() { + form + .control(_genderKey) + .setErrors({'': true}); + }); } }); }, - emptyItemText: - localizations.translate(i18.common.noMatchFound), - errorMessage: form.control(_idTypeKey).hasErrors - ? localizations.translate( - i18.common.corecommonRequired, - ) + valueMapper: (value) { + return localizations.translate(value); + }, + errorMessage: form.control(_genderKey).hasErrors + ? localizations + .translate(i18.common.corecommonRequired) : null, ), - ), - ), - if (form.control(_idTypeKey).value != 'DEFAULT') - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ReactiveFormConsumer( - builder: (context, formGroup, child) { - return ReactiveWrapperField( - formControlName: _idNumberKey, - validationMessages: { - 'required': (object) => - localizations.translate( - '${i18.individualDetails.idNumberLabelText}_IS_REQUIRED', - ), - }, - builder: (field) => LabeledField( - label: localizations.translate( - i18.individualDetails.idNumberLabelText, - ), - isRequired: form - .control(_idNumberKey) - .validators - .isNotEmpty, - child: DigitTextFormInput( - readOnly: form.control(_idTypeKey).value == - 'DEFAULT', - initialValue: - form.control(_idNumberKey).value, - onChange: (value) { - form.control(_idNumberKey).value = value; - }, - errorMessage: field.errorText, - ), - ), - ); + individualDetailsShowcaseData.mobile.buildWith( + child: ReactiveWrapperField( + formControlName: _mobileNumberKey, + validationMessages: { + 'maxLength': (object) => localizations.translate( + i18.individualDetails + .mobileNumberLengthValidationMessage), + 'minLength': (object) => localizations.translate( + i18.individualDetails + .mobileNumberLengthValidationMessage), }, + builder: (field) => LabeledField( + label: localizations.translate( + i18.individualDetails.mobileNumberLabelText, + ), + child: DigitTextFormInput( + keyboardType: TextInputType.number, + maxLength: 10, + inputFormatters: [ + FilteringTextInputFormatter.digitsOnly, + ], + initialValue: + form.control(_mobileNumberKey).value, + onChange: (value) { + form.control(_mobileNumberKey).value = value; + }, + ), + ), ), - const SizedBox(height: 4), - ], - ), - if (form.control(_idTypeKey).value == 'DEFAULT') - const SizedBox( - height: spacer2, - ), - individualDetailsShowcaseData.dateOfBirth.buildWith( - child: DigitDobPicker( - datePickerFormControl: _dobKey, - datePickerLabel: localizations.translate( - i18.individualDetails.dobLabelText, - ), - ageFieldLabel: localizations.translate( - i18.individualDetails.ageLabelText, ), - yearsHintLabel: localizations.translate( - i18.individualDetails.yearsHintText, - ), - monthsHintLabel: localizations.translate( - i18.individualDetails.monthsHintText, - ), - separatorLabel: localizations.translate( - i18.individualDetails.separatorLabelText, - ), - yearsAndMonthsErrMsg: localizations.translate( - i18.individualDetails.yearsAndMonthsErrorText, - ), - errorMessage: form.control(_dobKey).hasErrors - ? localizations - .translate(i18.common.corecommonRequired) - : null, - initialDate: before150Years, - onChangeOfFormControl: (value) { - if (value != null) { - setState(() { - form.control(_dobKey).setErrors({'': false}); - }); - } - // Handle changes to the control's value here - form.control(_dobKey).value = value; - }, - cancelText: localizations - .translate(i18.common.coreCommonCancel), - confirmText: - localizations.translate(i18.common.coreCommonOk), - ), - ), - SelectionCard( - isRequired: true, - showParentContainer: true, - title: localizations.translate( - i18.individualDetails.genderLabelText, - ), - allowMultipleSelection: false, - width: 126, - initialSelection: form.control(_genderKey).value != null - ? [form.control(_genderKey).value] - : [], - options: RegistrationDeliverySingleton() - .genderOptions! - .map( - (e) => e, - ) - .toList(), - onSelectionChanged: (value) { - setState(() { - if (value.isNotEmpty) { - form.control(_genderKey).value = value.first; - } else { - form.control(_genderKey).value = null; - setState(() { - form.control(_genderKey).setErrors({'': true}); - }); - } - }); - }, - valueMapper: (value) { - return localizations.translate(value); - }, - errorMessage: form.control(_genderKey).hasErrors - ? localizations - .translate(i18.common.corecommonRequired) - : null, - ), - individualDetailsShowcaseData.mobile.buildWith( - child: ReactiveWrapperField( - formControlName: _mobileNumberKey, - validationMessages: { - 'maxLength': (object) => localizations.translate(i18 - .individualDetails - .mobileNumberLengthValidationMessage), - 'minLength': (object) => localizations.translate(i18 - .individualDetails - .mobileNumberLengthValidationMessage), - }, - builder: (field) => LabeledField( - label: localizations.translate( - i18.individualDetails.mobileNumberLabelText, - ), - child: DigitTextFormInput( - keyboardType: TextInputType.number, - maxLength: 10, - inputFormatters: [ - FilteringTextInputFormatter.digitsOnly, - ], - initialValue: form.control(_mobileNumberKey).value, - onChange: (value) { - form.control(_mobileNumberKey).value = value; + // const SizedBox(height: spacer4), + if ((RegistrationDeliverySingleton().beneficiaryType == + BeneficiaryType.household && + widget.isHeadOfHousehold) || + (RegistrationDeliverySingleton().beneficiaryType == + BeneficiaryType.individual)) + BlocBuilder( + buildWhen: (p, c) { + return true; }, - ), - ), - ), - ), - // const SizedBox(height: spacer4), - if ((RegistrationDeliverySingleton().beneficiaryType == - BeneficiaryType.household && - widget.isHeadOfHousehold) || - (RegistrationDeliverySingleton().beneficiaryType == - BeneficiaryType.individual)) - BlocBuilder( - buildWhen: (p, c) { - return true; - }, - builder: (context, state) => state.qrCodes.isNotEmpty - ? Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - SizedBox( - width: - MediaQuery.of(context).size.width / 3, - child: Text( - localizations.translate( - i18.deliverIntervention.voucherCode, + builder: (context, state) => state + .qrCodes.isNotEmpty + ? Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + SizedBox( + width: + MediaQuery.of(context).size.width / + 3, + child: Text( + localizations.translate( + i18.deliverIntervention.voucherCode, + ), + style: textTheme.headingS, + ), ), - style: textTheme.headingS, - ), - ), - Flexible( - child: Text( - overflow: TextOverflow.ellipsis, - localizations - .translate(state.qrCodes.last), - ), - ), - Padding( - padding: const EdgeInsets.only( - bottom: spacer2 * 2, - ), - child: IconButton( - color: theme.colorTheme.primary.primary1, - icon: const Icon(Icons.edit), - onPressed: () { - Navigator.of(context).push( - //[TODO: Add the route to auto_route] - MaterialPageRoute( - builder: (context) => - const DigitScannerPage( - quantity: 1, - isGS1code: false, - singleValue: true, - isEditEnabled: true, - ), - settings: const RouteSettings( - name: '/qr-scanner'), + Flexible( + child: Text( + overflow: TextOverflow.ellipsis, + localizations + .translate(state.qrCodes.last), + ), + ), + Padding( + padding: const EdgeInsets.only( + bottom: spacer2 * 2, + ), + child: IconButton( + color: + theme.colorTheme.primary.primary1, + icon: const Icon(Icons.edit), + onPressed: () { + Navigator.of(context).push( + //[TODO: Add the route to auto_route] + MaterialPageRoute( + builder: (context) => + const DigitScannerPage( + quantity: 1, + isGS1code: false, + singleValue: true, + isEditEnabled: true, + ), + settings: const RouteSettings( + name: '/qr-scanner'), + ), + ); + }, + ), + ), + ], + + // ignore: no-empty-block + ) + : DigitButton( + type: DigitButtonType.secondary, + size: DigitButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () { + Navigator.of(context).push( + // [TODO: Add the route to auto_route] + MaterialPageRoute( + builder: (context) => + const DigitScannerPage( + quantity: 1, + isGS1code: false, + singleValue: true, ), - ); - }, + settings: const RouteSettings( + name: '/qr-scanner'), + ), + ); + }, + prefixIcon: Icons.qr_code, + label: localizations.translate( + i18.individualDetails + .linkVoucherToIndividual, ), ), - ], - - // ignore: no-empty-block - ) - : DigitButton( - type: DigitButtonType.secondary, - size: DigitButtonSize.large, - mainAxisSize: MainAxisSize.max, - onPressed: () { - Navigator.of(context).push( - // [TODO: Add the route to auto_route] - MaterialPageRoute( - builder: (context) => - const DigitScannerPage( - quantity: 1, - isGS1code: false, - singleValue: true, - ), - settings: const RouteSettings( - name: '/qr-scanner'), - ), - ); - }, - prefixIcon: Icons.qr_code, - label: localizations.translate( - i18.individualDetails.linkVoucherToIndividual, - ), - ), - ), - ]), + ), + ]), ), ], ); From 2d06c436c6dbe21e7b4070f0bff85253abe69bbc Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Mon, 16 Dec 2024 15:11:18 +0530 Subject: [PATCH 219/241] ui fixes --- .../lib/pages/manage_attendance.dart | 7 +- .../lib/pages/dashboard/dashboard.dart | 1 + .../widgets/back_navigation_help_header.dart | 2 +- .../digit_scanner/lib/pages/qr_scanner.dart | 2 +- .../widgets/back_navigation_help_header.dart | 2 +- .../lib/pages/beneficiary/side_effects.dart | 47 +++--- .../beneficiary/widgets/past_delivery.dart | 94 +++++------ .../widgets/record_delivery_cycle.dart | 149 +++++++++--------- 8 files changed, 160 insertions(+), 144 deletions(-) diff --git a/packages/attendance_management/lib/pages/manage_attendance.dart b/packages/attendance_management/lib/pages/manage_attendance.dart index 76ede97c0..59f6975be 100644 --- a/packages/attendance_management/lib/pages/manage_attendance.dart +++ b/packages/attendance_management/lib/pages/manage_attendance.dart @@ -199,8 +199,8 @@ class _ManageAttendancePageState extends State { ...list, if (list.length > 1) PoweredByDigit( - version: AttendanceSingleton() - .appVersion), // Show here if more than one register + version: AttendanceSingleton().appVersion), + // Show here if more than one register ], ), registerLoading: () => const Center( @@ -278,7 +278,8 @@ class RegisterCard extends StatelessWidget { LabelValueSummary( padding: EdgeInsets.all(theme.spacerTheme.spacer3), items: data.keys.map((e) { - return LabelValueItem(label: e, value: data[e]?.toString() ?? ''); + return LabelValueItem( + label: e, labelFlex: 5, value: data[e]?.toString() ?? ''); }).toList(), ), show diff --git a/packages/digit_dss/lib/pages/dashboard/dashboard.dart b/packages/digit_dss/lib/pages/dashboard/dashboard.dart index 0b48c52f8..f838572b1 100644 --- a/packages/digit_dss/lib/pages/dashboard/dashboard.dart +++ b/packages/digit_dss/lib/pages/dashboard/dashboard.dart @@ -142,6 +142,7 @@ class UserDashboardPageState extends LocalizedState { tableHeight: MediaQuery.of(context).size.height * .3, showSelectedState: false, + showPagination: false, ), )) .toList(), diff --git a/packages/digit_dss/lib/widgets/back_navigation_help_header.dart b/packages/digit_dss/lib/widgets/back_navigation_help_header.dart index fb2a98f97..124e10f5c 100644 --- a/packages/digit_dss/lib/widgets/back_navigation_help_header.dart +++ b/packages/digit_dss/lib/widgets/back_navigation_help_header.dart @@ -36,7 +36,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { Flexible( child: TextButton.icon( style: TextButton.styleFrom( - foregroundColor: theme.colorScheme.surface, + foregroundColor: theme.colorScheme.primary, padding: EdgeInsets.zero, ), onPressed: () { diff --git a/packages/digit_scanner/lib/pages/qr_scanner.dart b/packages/digit_scanner/lib/pages/qr_scanner.dart index e7b5aebaa..a248139df 100644 --- a/packages/digit_scanner/lib/pages/qr_scanner.dart +++ b/packages/digit_scanner/lib/pages/qr_scanner.dart @@ -216,7 +216,7 @@ class _DigitScannerPageState extends LocalizedState { child: DigitCard( margin: const EdgeInsets.only(top: spacer1), padding: const EdgeInsets.fromLTRB( - spacer3, spacer1, spacer3, 0), + spacer3, spacer1, spacer3, spacer1), children: [ DigitButton( label: localizations diff --git a/packages/referral_reconciliation/lib/widgets/back_navigation_help_header.dart b/packages/referral_reconciliation/lib/widgets/back_navigation_help_header.dart index c68ae80d1..87a0d7635 100644 --- a/packages/referral_reconciliation/lib/widgets/back_navigation_help_header.dart +++ b/packages/referral_reconciliation/lib/widgets/back_navigation_help_header.dart @@ -37,7 +37,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { Flexible( child: TextButton.icon( style: TextButton.styleFrom( - foregroundColor: theme.colorTheme.generic.background, + foregroundColor: theme.colorTheme.primary.primary2, padding: EdgeInsets.zero, ), onPressed: () { diff --git a/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart b/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart index ff8c71255..28820929d 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart @@ -274,28 +274,33 @@ class SideEffectsPageState extends LocalizedState { Column( children: symptomTypesOptions .mapIndexed( - (i, e) => DigitCheckbox( - label: localizations - .translate( - e.key, + (i, e) => Padding( + padding: + const EdgeInsets + .all(spacer2), + child: DigitCheckbox( + label: localizations + .translate( + e.key, + ), + value: + symptomsValues[i], + onChanged: (value) { + stateSetter( + () { + symptomsValues[ + i] = + !symptomsValues[ + i]; + symptomsSelected = + symptomsValues + .any( + (e) => e, + ); + }, + ); + }, ), - value: - symptomsValues[i], - onChanged: (value) { - stateSetter( - () { - symptomsValues[ - i] = - !symptomsValues[ - i]; - symptomsSelected = - symptomsValues - .any( - (e) => e, - ); - }, - ); - }, ), ) .toList(), diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart index 346aade6d..a4bd2a8a4 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart @@ -69,11 +69,13 @@ Widget buildTableContent( width: MediaQuery.of(context).size.width / 1.25, child: Column( crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, + // mainAxisSize: MainAxisSize.min, children: [ Padding( padding: const EdgeInsets.only(bottom: spacer1), child: DigitTableCard( + topPadding: const EdgeInsets.only(top: 0.0), + fraction: 2.5, element: { localizations.translate( i18.beneficiaryDetails.beneficiaryAge, @@ -89,52 +91,54 @@ Widget buildTableContent( ), const DigitDivider(), // Build the DigitTable with the data - fetchProductVariant(item, individualModel, householdModel) - ?.productVariants != - null - ? DigitTable( - enableBorder: true, - showSelectedState: false, - showPagination: false, - columns: columnListResource, - rows: [ - ...fetchProductVariant(item, individualModel, householdModel)! - .productVariants! - .map( - (e) { - // Retrieve the SKU value for the product variant. - final value = variant - ?.firstWhereOrNull( - (element) => element.id == e.productVariantId, - ) - ?.sku; - final quantity = e.quantity; + if (fetchProductVariant(item, individualModel, householdModel) + ?.productVariants != + null) + DigitTable( + enableBorder: true, + withRowDividers: true, + withColumnDividers: true, + showSelectedState: false, + showPagination: false, + columns: columnListResource, + rows: [ + ...fetchProductVariant(item, individualModel, householdModel)! + .productVariants! + .map( + (e) { + // Retrieve the SKU value for the product variant. + final value = variant + ?.firstWhereOrNull( + (element) => element.id == e.productVariantId, + ) + ?.sku; + final quantity = e.quantity; - return DigitTableRow(tableRow: [ - // Display the dose information in the first column if it's the first row, - // otherwise, display an empty cell. + return DigitTableRow(tableRow: [ + // Display the dose information in the first column if it's the first row, + // otherwise, display an empty cell. - fetchProductVariant( - item, individualModel, householdModel) - ?.productVariants - ?.indexOf(e) == - 0 - ? DigitTableData( - '${localizations.translate(i18.deliverIntervention.dose)} ${deliverInterventionState.dose}', - cellKey: 'dose', - ) - : DigitTableData('', cellKey: ''), - // Display the SKU value in the second column. - DigitTableData( - '$quantity - ${localizations.translate(value.toString())}', - cellKey: 'resources', - ), - ]); - }, - ), - ], - ) - : Text(localizations.translate(i18.common.noProjectSelected)) + fetchProductVariant(item, individualModel, householdModel) + ?.productVariants + ?.indexOf(e) == + 0 + ? DigitTableData( + '${localizations.translate(i18.deliverIntervention.dose)} ${deliverInterventionState.dose}', + cellKey: 'dose', + ) + : DigitTableData('', cellKey: ''), + // Display the SKU value in the second column. + DigitTableData( + '$quantity - ${localizations.translate(value.toString())}', + cellKey: 'resources', + ), + ]); + }, + ), + ], + ) + else + Text(localizations.translate(i18.common.noProjectSelected)) ], ), ); diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart b/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart index bc0fcb59c..e5c842a80 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart @@ -220,81 +220,86 @@ class RecordDeliveryCycleState extends LocalizedState { ), ), ), - DigitTable( - tableHeight: ((e.deliveries?.length ?? 0) + 1) * 80, - tableWidth: MediaQuery.of(context).size.width, - enableBorder: true, - showSelectedState: false, - showPagination: false, - highlightedRows: (selectedIndex != null) ? [selectedIndex] : [], - columns: headerList, - rows: e.deliveries!.mapIndexed( - (index, item) { - final tasks = widget.taskData - ?.where((element) => - element.additionalFields?.fields - .firstWhereOrNull( - (f) => - f.key == - AdditionalFieldsType.doseIndex - .toValue(), - ) - ?.value == - '0${item.id}' && - element.additionalFields?.fields - .firstWhereOrNull( - (c) => - c.key == - AdditionalFieldsType.cycleIndex - .toValue(), - ) - ?.value == - '0${e.id}') - .lastOrNull; + SizedBox( + width: MediaQuery.of(context).size.width, + height: ((e.deliveries?.length ?? 0) + 1) * 57.5, + child: DigitTable( + enableBorder: true, + withRowDividers: true, + withColumnDividers: true, + showSelectedState: false, + showPagination: false, + highlightedRows: (selectedIndex != null) ? [selectedIndex] : [], + columns: headerList, + rows: e.deliveries!.mapIndexed( + (index, item) { + final tasks = widget.taskData + ?.where((element) => + element.additionalFields?.fields + .firstWhereOrNull( + (f) => + f.key == + AdditionalFieldsType.doseIndex + .toValue(), + ) + ?.value == + '0${item.id}' && + element.additionalFields?.fields + .firstWhereOrNull( + (c) => + c.key == + AdditionalFieldsType.cycleIndex + .toValue(), + ) + ?.value == + '0${e.id}') + .lastOrNull; - return DigitTableRow(tableRow: [ - DigitTableData( - '${localizations.translate(i18.deliverIntervention.dose)} ${e.deliveries!.indexOf(item) + 1}', - cellKey: 'dose', - ), - DigitTableData( - localizations.translate( - index == selectedIndex - ? Status.toAdminister.toValue() - : tasks?.status ?? Status.inComplete.toValue(), + return DigitTableRow(tableRow: [ + DigitTableData( + '${localizations.translate(i18.deliverIntervention.dose)} ${e.deliveries!.indexOf(item) + 1}', + cellKey: 'dose', + ), + DigitTableData( + localizations.translate( + index == selectedIndex + ? Status.toAdminister.toValue() + : tasks?.status ?? Status.inComplete.toValue(), + ), + cellKey: 'status', + style: TextStyle( + color: index == selectedIndex + ? null + : tasks?.status == + Status.administeredSuccess.toValue() + ? DigitTheme + .instance.colorScheme.onSurfaceVariant + : DigitTheme.instance.colorScheme.error, + fontWeight: + index == selectedIndex ? FontWeight.w700 : null, + ), ), - cellKey: 'status', - style: TextStyle( - color: index == selectedIndex - ? null - : tasks?.status == - Status.administeredSuccess.toValue() - ? DigitTheme - .instance.colorScheme.onSurfaceVariant - : DigitTheme.instance.colorScheme.error, - fontWeight: - index == selectedIndex ? FontWeight.w700 : null, + DigitTableData( + tasks?.status == Status.administeredFailed.toValue() || + (tasks?.additionalFields?.fields + .where((e) => + e.key == + AdditionalFieldsType + .deliveryStrategy + .toValue()) + .firstOrNull + ?.value == + DeliverStrategyType.indirect.toValue()) + ? ' -- ' + : tasks?.clientAuditDetails?.createdTime.toDateTime + .getFormattedDate() ?? + ' -- ', + cellKey: 'completedOn', ), - ), - DigitTableData( - tasks?.status == Status.administeredFailed.toValue() || - (tasks?.additionalFields?.fields - .where((e) => - e.key == - AdditionalFieldsType.deliveryStrategy - .toValue()) - .firstOrNull - ?.value == - DeliverStrategyType.indirect.toValue()) - ? ' -- ' - : tasks?.clientAuditDetails?.createdTime.toDateTime - .getFormattedDate() ?? - ' -- ', - cellKey: 'completedOn', - ), - ]); - }, - ).toList(), + ]); + }, + ).toList(), + ), ), ], ), From 1e7467577a9701d396f7e23afbf00065e54c5469 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Tue, 17 Dec 2024 11:53:59 +0530 Subject: [PATCH 220/241] ui_components reference to dev branch github actions java version change to 17 ui fixes --- .github/workflows/flutter-build-apk.yml | 8 +- .../pubspec.lock | 31 +- .../pubspec.yaml | 2 +- packages/attendance_management/CHANGELOG.md | 22 +- packages/attendance_management/pubspec.lock | 91 ++- packages/attendance_management/pubspec.yaml | 12 +- packages/auto_route/pubspec.lock | 541 ----------------- packages/closed_household/CHANGELOG.md | 4 +- packages/closed_household/pubspec.lock | 86 ++- packages/closed_household/pubspec.yaml | 4 +- packages/complaints/example/pubspec.lock | 14 +- packages/complaints/example/pubspec.yaml | 2 +- .../additional_fields_type.mapper.dart | 2 +- packages/complaints/pubspec.lock | 118 ++-- packages/complaints/pubspec.yaml | 5 +- packages/digit_data_model/CHANGELOG.md | 18 +- packages/digit_data_model/pubspec.lock | 551 +----------------- packages/digit_data_model/pubspec.yaml | 7 +- packages/digit_dss/CHANGELOG.md | 17 +- packages/digit_dss/pubspec.lock | 96 ++- packages/digit_dss/pubspec.yaml | 8 +- packages/digit_location_tracker/CHANGELOG.md | 5 + packages/digit_location_tracker/pubspec.lock | 211 ++++++- packages/digit_location_tracker/pubspec.yaml | 30 +- packages/digit_scanner/CHANGELOG.md | 7 +- packages/digit_scanner/example/pubspec.lock | 125 +--- packages/digit_scanner/example/pubspec.yaml | 7 +- packages/digit_scanner/pubspec.lock | 209 ++++++- packages/digit_scanner/pubspec.yaml | 2 +- packages/inventory_management/CHANGELOG.md | 6 + packages/inventory_management/pubspec.lock | 70 ++- packages/inventory_management/pubspec.yaml | 4 +- packages/referral_reconciliation/CHANGELOG.md | 7 +- packages/referral_reconciliation/pubspec.lock | 63 +- packages/referral_reconciliation/pubspec.yaml | 4 +- packages/registration_delivery/CHANGELOG.md | 24 +- .../models/entities/side_effect.mapper.dart | 19 + .../pages/beneficiary/dose_administered.dart | 1 + .../beneficiary/view_beneficiary_card.dart | 134 +++-- packages/registration_delivery/pubspec.lock | 17 +- packages/registration_delivery/pubspec.yaml | 2 +- packages/survey_form/CHANGELOG.md | 5 + packages/survey_form/example/pubspec.lock | 8 +- packages/survey_form/example/pubspec.yaml | 2 +- packages/survey_form/pubspec.lock | 6 +- packages/survey_form/pubspec.yaml | 4 +- 46 files changed, 1087 insertions(+), 1524 deletions(-) delete mode 100644 packages/auto_route/pubspec.lock diff --git a/.github/workflows/flutter-build-apk.yml b/.github/workflows/flutter-build-apk.yml index 3093abb2a..771959435 100644 --- a/.github/workflows/flutter-build-apk.yml +++ b/.github/workflows/flutter-build-apk.yml @@ -2,9 +2,9 @@ name: Build APK Workflow on: push: - branches: ['develop', 'master'] # This specifies that the workflow will run on any push to the 'main' branch + branches: [ 'develop', 'master' ] # This specifies that the workflow will run on any push to the 'develop' or 'master' branches pull_request: - branches: ['develop', 'master'] # Optionally, run on pull requests targeting the 'main' branch + branches: [ 'develop', 'master' ] # Optionally, run on pull requests targeting the 'develop' or 'master' branches jobs: build-apk: @@ -14,10 +14,10 @@ jobs: - name: Checkout code uses: actions/checkout@v3 - - name: Set up JDK 11 + - name: Set up JDK 17 uses: actions/setup-java@v3 with: - java-version: '11' + java-version: '17' distribution: 'temurin' # Specify the Java distribution - name: Flutter action diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 8a11202f3..f6c4b718b 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -71,7 +71,7 @@ packages: path: "../../packages/attendance_management" relative: true source: path - version: "1.0.3-dev.1" + version: "1.0.3" audioplayers: dependency: transitive description: @@ -342,7 +342,7 @@ packages: path: "../../packages/closed_household" relative: true source: path - version: "1.0.2-dev.1" + version: "1.0.3" code_builder: dependency: transitive description: @@ -365,7 +365,7 @@ packages: path: "../../packages/complaints" relative: true source: path - version: "0.0.1-dev.1" + version: "1.0.0" connectivity_plus: dependency: "direct main" description: @@ -514,14 +514,14 @@ packages: path: "../../packages/digit_data_model" relative: true source: path - version: "1.0.5-dev.1" + version: "1.0.5" digit_dss: dependency: "direct main" description: path: "../../packages/digit_dss" relative: true source: path - version: "1.0.2" + version: "1.0.3" digit_firebase_services: dependency: "direct main" description: @@ -535,7 +535,7 @@ packages: path: "../../packages/digit_location_tracker" relative: true source: path - version: "0.0.1-dev.2" + version: "1.0.0" digit_scanner: dependency: "direct main" description: @@ -554,8 +554,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: hcm_changes - resolved-ref: "05e86809fdbef4e443616a5c266043c353924953" + ref: develop + resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -1352,7 +1352,7 @@ packages: path: "../../packages/inventory_management" relative: true source: path - version: "1.0.3+5" + version: "1.0.4" io: dependency: transitive description: @@ -1839,7 +1839,7 @@ packages: path: "../../packages/referral_reconciliation" relative: true source: path - version: "1.0.3-dev.1" + version: "1.0.3" registration_delivery: dependency: "direct main" description: @@ -2066,7 +2066,7 @@ packages: path: "../../packages/survey_form" relative: true source: path - version: "0.0.1-dev.2" + version: "1.0.0" sync_http: dependency: transitive description: @@ -2078,10 +2078,9 @@ packages: sync_service: dependency: "direct main" description: - name: sync_service - sha256: ba4720b48bf4a80c3299118000bf7851dae871480b75ab95f0e5a830cddc2e39 - url: "https://pub.dev" - source: hosted + path: "../../packages/sync_service" + relative: true + source: path version: "0.0.1-dev.1" synchronized: dependency: transitive @@ -2404,5 +2403,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.1 <4.0.0" + dart: ">=3.4.0 <4.0.0" flutter: ">=3.22.0" diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index ef6bad5b5..3d64bd5ab 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -21,7 +21,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: hcm_changes + ref: develop path: ./flutter/digit-ui-components/digit_components digit_components: ^1.0.2 auto_route: ^8.3.0 diff --git a/packages/attendance_management/CHANGELOG.md b/packages/attendance_management/CHANGELOG.md index 3f8c6380a..3eba96001 100644 --- a/packages/attendance_management/CHANGELOG.md +++ b/packages/attendance_management/CHANGELOG.md @@ -1,32 +1,38 @@ -## 1.0.3-dev.1 +## 1.0.3 + * Updated digit_data_model to latest version -* Updated survey_form to latest version +* Updated flutter version to 3.22 * Migrated to digit_ui_components ## 1.0.2+4 + * Fix for boundaryCode in attendance logs ## 1.0.2+3 + * Updated Attendance Singleton to add boundary ## 1.0.2+2 + * Updated digit_components, digit_data_model * Added boundaryCode to additionalDetails of attendanceLogs ## 1.0.2+1 + * Updated Digit_components ## 1.0.2 + * Capturing location on attendance submit * Pagination issue fix to fetch all attendees ## 0.0.0-dev.1 -* Initial release of the package +* Initial release of the package * Features: - - Manage Attendance: Mark attendance of the employees and send the data to parent application. - - Select Session: Select the session for which the attendance is to be marked. - - Mark Attendance: Mark the attendance of the employees. + - Manage Attendance: Mark attendance of the employees and send the data to parent application. + - Select Session: Select the session for which the attendance is to be marked. + - Mark Attendance: Mark the attendance of the employees. ## 0.0.0-dev.2 @@ -36,7 +42,6 @@ * Updated intl package version - ## 0.0.0-dev.4 * Updated digit_components version for dropdown fix @@ -62,10 +67,13 @@ * Added try catch for local repository to handle db lock ## 1.0.1+1 + * Get Precise location on Submitting latitude longitude details ## 1.0.2-dev.1 + * Removed captured Location Dialog on attendance submit ## 1.0.2-dev.2 + * Updated registers search to fetch all attendees to avoid limit on overall query \ No newline at end of file diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index 1688c0676..90dcaa6ec 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "64.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -308,10 +316,9 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - name: dart_mappable_builder - sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e - url: "https://pub.dev" - source: hosted + path: "../dart_mappable_builder" + relative: true + source: path version: "4.2.3" dart_style: dependency: transitive @@ -340,17 +347,23 @@ packages: digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" - url: "https://pub.dev" - source: hosted - version: "1.0.5-dev.1" + path: "../digit_data_model" + relative: true + source: path + version: "1.0.5" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_ui_components: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: hcm_changes - resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 + ref: develop + resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -466,6 +479,46 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: @@ -610,10 +663,10 @@ packages: dependency: transitive description: name: geolocator_android - sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" url: "https://pub.dev" source: hosted - version: "4.3.1" + version: "4.6.1" geolocator_apple: dependency: transitive description: @@ -1195,6 +1248,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqlite3: dependency: transitive description: @@ -1391,10 +1452,10 @@ packages: dependency: transitive description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.5.1" vector_graphics: dependency: transitive description: diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index 36a89e96d..4f3815bab 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -1,6 +1,6 @@ name: attendance_management description: Digit UI attendance management specification - This tool is designed for tracking user attendance with customizable session counts per day. -version: 1.0.3-dev.1 +version: 1.0.3 homepage: "https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/attendance_management" repository: "https://github.com/egovernments/health-campaign-field-worker-app" @@ -14,7 +14,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: hcm_changes + ref: develop path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 @@ -32,7 +32,7 @@ dependencies: path_provider: ^2.0.11 path: ^1.8.2 drift_db_viewer: ^2.0.0 - digit_data_model: ^1.0.5-dev.1 + digit_data_model: ^1.0.5 reactive_forms: ^17.0.0 dev_dependencies: @@ -44,7 +44,11 @@ dev_dependencies: freezed: ^2.5.2 bloc_test: ^9.1.0 mocktail: ^1.0.2 - dart_mappable_builder: ^4.2.2 + dart_mappable_builder: + git: + url: https://github.com/egovernments/health-campaign-field-worker-app/ + ref: master + path: ./packages/dart_mappable_builder drift_dev: ^2.18.0 build_runner: ^2.4.11 auto_route_generator: 8.0.0 diff --git a/packages/auto_route/pubspec.lock b/packages/auto_route/pubspec.lock deleted file mode 100644 index 0d28f4bc7..000000000 --- a/packages/auto_route/pubspec.lock +++ /dev/null @@ -1,541 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 - url: "https://pub.dev" - source: hosted - version: "64.0.0" - analyzer: - dependency: transitive - description: - name: analyzer - sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" - url: "https://pub.dev" - source: hosted - version: "6.2.0" - args: - dependency: transitive - description: - name: args - sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" - url: "https://pub.dev" - source: hosted - version: "2.5.0" - async: - dependency: transitive - description: - name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" - url: "https://pub.dev" - source: hosted - version: "2.11.0" - auto_route_generator: - dependency: "direct dev" - description: - name: auto_route_generator - sha256: "11067a3bcd643812518fe26c0c9ec073990286cabfd9d74b6da9ef9b913c4d22" - url: "https://pub.dev" - source: hosted - version: "7.3.2" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - build: - dependency: transitive - description: - name: build - sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" - url: "https://pub.dev" - source: hosted - version: "2.4.1" - build_config: - dependency: transitive - description: - name: build_config - sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 - url: "https://pub.dev" - source: hosted - version: "1.1.1" - build_daemon: - dependency: transitive - description: - name: build_daemon - sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" - url: "https://pub.dev" - source: hosted - version: "4.0.1" - build_resolvers: - dependency: transitive - description: - name: build_resolvers - sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" - url: "https://pub.dev" - source: hosted - version: "2.4.2" - build_runner: - dependency: "direct dev" - description: - name: build_runner - sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" - url: "https://pub.dev" - source: hosted - version: "2.4.9" - build_runner_core: - dependency: transitive - description: - name: build_runner_core - sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" - url: "https://pub.dev" - source: hosted - version: "7.3.0" - built_collection: - dependency: transitive - description: - name: built_collection - sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" - url: "https://pub.dev" - source: hosted - version: "5.1.1" - built_value: - dependency: transitive - description: - name: built_value - sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb - url: "https://pub.dev" - source: hosted - version: "8.9.2" - characters: - dependency: transitive - description: - name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - checked_yaml: - dependency: transitive - description: - name: checked_yaml - sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff - url: "https://pub.dev" - source: hosted - version: "2.0.3" - clock: - dependency: transitive - description: - name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.dev" - source: hosted - version: "1.1.1" - code_builder: - dependency: transitive - description: - name: code_builder - sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 - url: "https://pub.dev" - source: hosted - version: "4.10.0" - collection: - dependency: "direct main" - description: - name: collection - sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a - url: "https://pub.dev" - source: hosted - version: "1.18.0" - convert: - dependency: transitive - description: - name: convert - sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" - url: "https://pub.dev" - source: hosted - version: "3.1.1" - crypto: - dependency: transitive - description: - name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab - url: "https://pub.dev" - source: hosted - version: "3.0.3" - dart_style: - dependency: transitive - description: - name: dart_style - sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" - url: "https://pub.dev" - source: hosted - version: "2.3.6" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - file: - dependency: transitive - description: - name: file - sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" - url: "https://pub.dev" - source: hosted - version: "7.0.0" - fixnum: - dependency: transitive - description: - name: fixnum - sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_lints: - dependency: "direct dev" - description: - name: flutter_lints - sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - frontend_server_client: - dependency: transitive - description: - name: frontend_server_client - sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 - url: "https://pub.dev" - source: hosted - version: "4.0.0" - glob: - dependency: transitive - description: - name: glob - sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - graphs: - dependency: transitive - description: - name: graphs - sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 - url: "https://pub.dev" - source: hosted - version: "2.3.1" - http_multi_server: - dependency: transitive - description: - name: http_multi_server - sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" - url: "https://pub.dev" - source: hosted - version: "3.2.1" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - io: - dependency: transitive - description: - name: io - sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" - url: "https://pub.dev" - source: hosted - version: "1.0.4" - js: - dependency: transitive - description: - name: js - sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf - url: "https://pub.dev" - source: hosted - version: "0.7.1" - json_annotation: - dependency: transitive - description: - name: json_annotation - sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" - url: "https://pub.dev" - source: hosted - version: "4.9.0" - lints: - dependency: transitive - description: - name: lints - sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 - url: "https://pub.dev" - source: hosted - version: "3.0.0" - logging: - dependency: transitive - description: - name: logging - sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - matcher: - dependency: transitive - description: - name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" - url: "https://pub.dev" - source: hosted - version: "0.12.16" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" - url: "https://pub.dev" - source: hosted - version: "0.5.0" - meta: - dependency: "direct main" - description: - name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e - url: "https://pub.dev" - source: hosted - version: "1.10.0" - mime: - dependency: transitive - description: - name: mime - sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" - url: "https://pub.dev" - source: hosted - version: "1.0.6" - mockito: - dependency: "direct dev" - description: - name: mockito - sha256: "6841eed20a7befac0ce07df8116c8b8233ed1f4486a7647c7fc5a02ae6163917" - url: "https://pub.dev" - source: hosted - version: "5.4.4" - package_config: - dependency: transitive - description: - name: package_config - sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - path: - dependency: "direct main" - description: - name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" - url: "https://pub.dev" - source: hosted - version: "1.8.3" - petitparser: - dependency: transitive - description: - name: petitparser - sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 - url: "https://pub.dev" - source: hosted - version: "6.0.2" - pool: - dependency: transitive - description: - name: pool - sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" - url: "https://pub.dev" - source: hosted - version: "1.5.1" - pub_semver: - dependency: transitive - description: - name: pub_semver - sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - pubspec_parse: - dependency: transitive - description: - name: pubspec_parse - sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 - url: "https://pub.dev" - source: hosted - version: "1.3.0" - shelf: - dependency: transitive - description: - name: shelf - sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 - url: "https://pub.dev" - source: hosted - version: "1.4.1" - shelf_web_socket: - dependency: transitive - description: - name: shelf_web_socket - sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" - url: "https://pub.dev" - source: hosted - version: "1.0.4" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.99" - source_gen: - dependency: transitive - description: - name: source_gen - sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" - url: "https://pub.dev" - source: hosted - version: "1.5.0" - source_span: - dependency: transitive - description: - name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" - url: "https://pub.dev" - source: hosted - version: "1.10.0" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" - url: "https://pub.dev" - source: hosted - version: "1.11.1" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 - url: "https://pub.dev" - source: hosted - version: "2.1.2" - stream_transform: - dependency: transitive - description: - name: stream_transform - sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.dev" - source: hosted - version: "1.2.1" - test_api: - dependency: transitive - description: - name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" - url: "https://pub.dev" - source: hosted - version: "0.6.1" - timing: - dependency: transitive - description: - name: timing - sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c - url: "https://pub.dev" - source: hosted - version: "1.3.2" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - watcher: - dependency: transitive - description: - name: watcher - sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - web: - dependency: transitive - description: - name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 - url: "https://pub.dev" - source: hosted - version: "0.3.0" - web_socket_channel: - dependency: transitive - description: - name: web_socket_channel - sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b - url: "https://pub.dev" - source: hosted - version: "2.4.0" - xml: - dependency: transitive - description: - name: xml - sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 - url: "https://pub.dev" - source: hosted - version: "6.5.0" - yaml: - dependency: transitive - description: - name: yaml - sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" - url: "https://pub.dev" - source: hosted - version: "3.1.2" -sdks: - dart: ">=3.2.0 <4.0.0" - flutter: ">=3.16.0" diff --git a/packages/closed_household/CHANGELOG.md b/packages/closed_household/CHANGELOG.md index 5d25ceb15..122b4041a 100644 --- a/packages/closed_household/CHANGELOG.md +++ b/packages/closed_household/CHANGELOG.md @@ -1,5 +1,7 @@ -## 1.0.2-dev.1 +## 1.0.3 + * Updated digit_data_model to latest version +* Updated flutter version to 3.22 * Migrated to digit_ui_components ## 1.0.1+1 diff --git a/packages/closed_household/pubspec.lock b/packages/closed_household/pubspec.lock index b08b8c445..2195892b3 100644 --- a/packages/closed_household/pubspec.lock +++ b/packages/closed_household/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -372,12 +380,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "5595f37310a63a92b2c1c7e386c74fe39df5555d" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git - version: "4.2.0" + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.3" dart_style: dependency: transitive description: @@ -416,7 +422,14 @@ packages: path: "../digit_data_model" relative: true source: path - version: "1.0.5-dev.1" + version: "1.0.5" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_scanner: dependency: "direct main" description: @@ -427,17 +440,16 @@ packages: digit_showcase: dependency: "direct main" description: - name: digit_showcase - sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" - url: "https://pub.dev" - source: hosted - version: "1.0.0" + path: "../digit_showcase" + relative: true + source: path + version: "1.0.1" digit_ui_components: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: hcm_changes - resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 + ref: develop + resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -553,6 +565,46 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: @@ -1482,12 +1534,12 @@ packages: source: hosted version: "1.2.0" survey_form: - dependency: transitive + dependency: "direct overridden" description: path: "../survey_form" relative: true source: path - version: "0.0.1-dev.2" + version: "1.0.0" synchronized: dependency: transitive description: @@ -1769,5 +1821,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <3.9.0" + dart: ">=3.4.0 <4.0.0" flutter: ">=3.22.0" diff --git a/packages/closed_household/pubspec.yaml b/packages/closed_household/pubspec.yaml index 6964d64a8..cb21c7af0 100644 --- a/packages/closed_household/pubspec.yaml +++ b/packages/closed_household/pubspec.yaml @@ -1,6 +1,6 @@ name: closed_household description: This package enables health facility workers to mark household closed and update. -version: 1.0.2-dev.1 +version: 1.0.3 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/develop/packages/closed_household repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -14,7 +14,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: hcm_changes + ref: develop path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 diff --git a/packages/complaints/example/pubspec.lock b/packages/complaints/example/pubspec.lock index e1eb142be..c8d1d89d2 100644 --- a/packages/complaints/example/pubspec.lock +++ b/packages/complaints/example/pubspec.lock @@ -223,7 +223,7 @@ packages: path: ".." relative: true source: path - version: "0.0.1-dev.1" + version: "1.0.0" convert: dependency: transitive description: @@ -300,8 +300,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: hcm_changes - resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 + ref: develop + resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -430,14 +430,6 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.6" - flutter_dotenv: - dependency: transitive - description: - name: flutter_dotenv - sha256: "9357883bdd153ab78cbf9ffa07656e336b8bbb2b5a3ca596b0b27e119f7c7d77" - url: "https://pub.dev" - source: hosted - version: "5.1.0" flutter_dropzone: dependency: transitive description: diff --git a/packages/complaints/example/pubspec.yaml b/packages/complaints/example/pubspec.yaml index d72659f76..ed8ce9cf8 100644 --- a/packages/complaints/example/pubspec.yaml +++ b/packages/complaints/example/pubspec.yaml @@ -40,7 +40,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: hcm_changes + ref: develop path: ./flutter/digit-ui-components/digit_components diff --git a/packages/complaints/lib/models/entities/additional_fields_type.mapper.dart b/packages/complaints/lib/models/entities/additional_fields_type.mapper.dart index cf6a34c4d..256792837 100644 --- a/packages/complaints/lib/models/entities/additional_fields_type.mapper.dart +++ b/packages/complaints/lib/models/entities/additional_fields_type.mapper.dart @@ -1,7 +1,7 @@ // coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint -// ignore_for_file: unused_element, unnecessary_cast +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member // ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter part of 'additional_fields_type.dart'; diff --git a/packages/complaints/pubspec.lock b/packages/complaints/pubspec.lock index 062d345e7..f94eb6cce 100644 --- a/packages/complaints/pubspec.lock +++ b/packages/complaints/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "67.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -292,12 +300,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "5595f37310a63a92b2c1c7e386c74fe39df5555d" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git - version: "4.2.0" + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.3" dart_style: dependency: transitive description: @@ -306,14 +312,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.6" - db_viewer: - dependency: transitive - description: - name: db_viewer - sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" - url: "https://pub.dev" - source: hosted - version: "1.1.0" diff_match_patch: dependency: transitive description: @@ -325,17 +323,23 @@ packages: digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "14ebea5f17921081025963b379efd5e16d155dd920d5a42ab2f2f392afb649de" - url: "https://pub.dev" - source: hosted - version: "1.0.4-dev.1" + path: "../digit_data_model" + relative: true + source: path + version: "1.0.5" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_ui_components: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: hcm_changes - resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 + ref: develop + resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -371,14 +375,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.19.1+1" - drift_db_viewer: - dependency: transitive - description: - name: drift_db_viewer - sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" fake_async: dependency: transitive description: @@ -443,6 +439,46 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+3" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: @@ -464,14 +500,6 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.6" - flutter_dotenv: - dependency: "direct main" - description: - name: flutter_dotenv - sha256: b7c7be5cd9f6ef7a78429cabd2774d3c4af50e79cb2b7593e3d5d763ef95c61b - url: "https://pub.dev" - source: hosted - version: "5.2.1" flutter_dropzone: dependency: transitive description: @@ -595,10 +623,10 @@ packages: dependency: transitive description: name: geolocator_android - sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" url: "https://pub.dev" source: hosted - version: "4.3.1" + version: "4.6.1" geolocator_apple: dependency: transitive description: @@ -1188,6 +1216,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqlite3: dependency: transitive description: @@ -1376,10 +1412,10 @@ packages: dependency: transitive description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.5.1" vector_graphics: dependency: transitive description: diff --git a/packages/complaints/pubspec.yaml b/packages/complaints/pubspec.yaml index e612365de..8f8f1c0ad 100644 --- a/packages/complaints/pubspec.yaml +++ b/packages/complaints/pubspec.yaml @@ -1,6 +1,6 @@ name: complaints description: This package offers filing complaints features, allowing users to file complaints. -version: 0.0.1-dev.1 +version: 1.0.0 homepage: environment: @@ -13,7 +13,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: hcm_changes + ref: develop path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 @@ -24,7 +24,6 @@ dependencies: group_radio_button: ^1.3.0 reactive_forms: ^17.0.0 recase: ^4.1.0 - flutter_dotenv: ^5.0.2 flutter_svg: ^2.0.8 path_provider: ^2.0.11 drift: ^2.0.0 diff --git a/packages/digit_data_model/CHANGELOG.md b/packages/digit_data_model/CHANGELOG.md index 99fb77765..87e9b781f 100644 --- a/packages/digit_data_model/CHANGELOG.md +++ b/packages/digit_data_model/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.0.5 + +* Upgrade to Flutter 3.22 +* Added project_type in Project Table +* Changed isActive to bool in Service Attribute table + ## 1.0.5-dev.1 * Merged pgr and survey_form package changes @@ -5,7 +11,7 @@ ## 1.0.4+1 * Bug Fix: - * Updated syncRetryCount,syncRetryInterval and errorPath to dynamic + * Updated syncRetryCount,syncRetryInterval and errorPath to dynamic ## 1.0.4 @@ -42,7 +48,7 @@ ## 1.0.4-dev.1 -* Separated PGR Package +* Separated PGR Package * Moved Models, Bloc, Repositories related to PGR Package ## 1.0.3 @@ -53,11 +59,11 @@ ## 1.0.3-dev.4 * Updated individual local search results with user uuid mapping - + ## 1.0.3-dev.3 -* Created localization table - - Creation of the localization table. +* Created localization table + - Creation of the localization table. ## 1.0.3-dev.2 @@ -91,7 +97,7 @@ ## 0.0.0-dev.2 -* Boundary v2 Integrated, to use Boundary v1 0.0.0-dev.1 version can be used +* Boundary v2 Integrated, to use Boundary v1 0.0.0-dev.1 version can be used - Integration of Boundary v2 with the option to use Boundary v1 version 0.0.0-dev.1. ## 0.0.0-dev.1 diff --git a/packages/digit_data_model/pubspec.lock b/packages/digit_data_model/pubspec.lock index 58f73a551..416709327 100644 --- a/packages/digit_data_model/pubspec.lock +++ b/packages/digit_data_model/pubspec.lock @@ -33,14 +33,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.2" - archive: - dependency: transitive - description: - name: archive - sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d - url: "https://pub.dev" - source: hosted - version: "3.6.1" args: dependency: transitive description: @@ -145,46 +137,6 @@ packages: url: "https://pub.dev" source: hosted version: "8.9.2" - camera: - dependency: transitive - description: - name: camera - sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167" - url: "https://pub.dev" - source: hosted - version: "0.11.0+2" - camera_android_camerax: - dependency: transitive - description: - name: camera_android_camerax - sha256: "011be2ab0e5b3e3aa8094413fa890f8c5c5afd7cfdaef353a992047d4dab5780" - url: "https://pub.dev" - source: hosted - version: "0.6.8+2" - camera_avfoundation: - dependency: transitive - description: - name: camera_avfoundation - sha256: "2e4c568f70e406ccb87376bc06b53d2f5bebaab71e2fbcc1a950e31449381bcf" - url: "https://pub.dev" - source: hosted - version: "0.9.17+5" - camera_platform_interface: - dependency: transitive - description: - name: camera_platform_interface - sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 - url: "https://pub.dev" - source: hosted - version: "2.8.0" - camera_web: - dependency: transitive - description: - name: camera_web - sha256: "595f28c89d1fb62d77c73c633193755b781c6d2e0ebcd8dc25b763b514e6ba8f" - url: "https://pub.dev" - source: hosted - version: "0.3.5" characters: dependency: transitive description: @@ -257,14 +209,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.0" - cross_file: - dependency: transitive - description: - name: cross_file - sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" - url: "https://pub.dev" - source: hosted - version: "0.3.4+2" crypto: dependency: transitive description: @@ -273,14 +217,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" - csslib: - dependency: transitive - description: - name: csslib - sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" - url: "https://pub.dev" - source: hosted - version: "1.0.2" dart_mappable: dependency: "direct main" description: @@ -292,12 +228,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "5595f37310a63a92b2c1c7e386c74fe39df5555d" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git - version: "4.2.0" + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.3" dart_style: dependency: transitive description: @@ -322,15 +256,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.1" - digit_ui_components: - dependency: "direct main" - description: - path: "flutter/digit-ui-components/digit_components" - ref: hcm_changes - resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 - url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" - source: git - version: "0.0.1+7" dio: dependency: "direct main" description: @@ -339,14 +264,6 @@ packages: url: "https://pub.dev" source: hosted version: "5.4.3+1" - dotted_border: - dependency: transitive - description: - name: dotted_border - sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" - url: "https://pub.dev" - source: hosted - version: "2.1.0" drift: dependency: "direct main" description: @@ -387,46 +304,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" - file_picker: - dependency: transitive - description: - name: file_picker - sha256: "2ca051989f69d1b2ca012b2cf3ccf78c70d40144f0861ff2c063493f7c8c3d45" - url: "https://pub.dev" - source: hosted - version: "8.0.5" - file_selector_linux: - dependency: transitive - description: - name: file_selector_linux - sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" - url: "https://pub.dev" - source: hosted - version: "0.9.3+2" - file_selector_macos: - dependency: transitive - description: - name: file_selector_macos - sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc" - url: "https://pub.dev" - source: hosted - version: "0.9.4+2" - file_selector_platform_interface: - dependency: transitive - description: - name: file_selector_platform_interface - sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b - url: "https://pub.dev" - source: hosted - version: "2.6.2" - file_selector_windows: - dependency: transitive - description: - name: file_selector_windows - sha256: "8f5d2f6590d51ecd9179ba39c64f722edc15226cc93dcc8698466ad36a4a85a4" - url: "https://pub.dev" - source: hosted - version: "0.9.3+3" fixnum: dependency: transitive description: @@ -448,30 +325,6 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.5" - flutter_dropzone: - dependency: transitive - description: - name: flutter_dropzone - sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 - url: "https://pub.dev" - source: hosted - version: "3.0.7" - flutter_dropzone_platform_interface: - dependency: transitive - description: - name: flutter_dropzone_platform_interface - sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" - url: "https://pub.dev" - source: hosted - version: "2.2.0" - flutter_dropzone_web: - dependency: transitive - description: - name: flutter_dropzone_web - sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 - url: "https://pub.dev" - source: hosted - version: "3.0.13" flutter_lints: dependency: "direct dev" description: @@ -480,61 +333,11 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.0" - flutter_localizations: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - flutter_plugin_android_lifecycle: - dependency: transitive - description: - name: flutter_plugin_android_lifecycle - sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda" - url: "https://pub.dev" - source: hosted - version: "2.0.22" - flutter_spinkit: - dependency: transitive - description: - name: flutter_spinkit - sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 - url: "https://pub.dev" - source: hosted - version: "5.2.1" - flutter_styled_toast: - dependency: transitive - description: - name: flutter_styled_toast - sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 - url: "https://pub.dev" - source: hosted - version: "2.2.1" - flutter_svg: - dependency: transitive - description: - name: flutter_svg - sha256: "54900a1a1243f3c4a5506d853a2b5c2dbc38d5f27e52a52618a8054401431123" - url: "https://pub.dev" - source: hosted - version: "2.0.16" flutter_test: dependency: "direct dev" description: flutter source: sdk version: "0.0.0" - flutter_web_plugins: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - fluttertoast: - dependency: transitive - description: - name: fluttertoast - sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" - url: "https://pub.dev" - source: hosted - version: "8.2.5" freezed: dependency: "direct dev" description: @@ -559,54 +362,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.2.0" - geolocator: - dependency: transitive - description: - name: geolocator - sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 - url: "https://pub.dev" - source: hosted - version: "10.1.1" - geolocator_android: - dependency: transitive - description: - name: geolocator_android - sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" - url: "https://pub.dev" - source: hosted - version: "4.6.1" - geolocator_apple: - dependency: transitive - description: - name: geolocator_apple - sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" - url: "https://pub.dev" - source: hosted - version: "2.3.8+1" - geolocator_platform_interface: - dependency: transitive - description: - name: geolocator_platform_interface - sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" - url: "https://pub.dev" - source: hosted - version: "4.2.4" - geolocator_web: - dependency: transitive - description: - name: geolocator_web - sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" - url: "https://pub.dev" - source: hosted - version: "2.2.1" - geolocator_windows: - dependency: transitive - description: - name: geolocator_windows - sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" - url: "https://pub.dev" - source: hosted - version: "0.2.3" glob: dependency: transitive description: @@ -615,14 +370,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.2" - google_fonts: - dependency: transitive - description: - name: google_fonts - sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 - url: "https://pub.dev" - source: hosted - version: "6.2.1" graphs: dependency: transitive description: @@ -631,30 +378,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.1" - horizontal_data_table: - dependency: transitive - description: - name: horizontal_data_table - sha256: c8ab5256bbced698a729f3e0ff2cb0e8e97416cdbb082860370eaf883badf722 - url: "https://pub.dev" - source: hosted - version: "4.3.1" - html: - dependency: transitive - description: - name: html - sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" - url: "https://pub.dev" - source: hosted - version: "0.15.4" - http: - dependency: transitive - description: - name: http - sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 - url: "https://pub.dev" - source: hosted - version: "1.2.2" http_multi_server: dependency: transitive description: @@ -671,78 +394,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" - image_picker: - dependency: transitive - description: - name: image_picker - sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a" - url: "https://pub.dev" - source: hosted - version: "1.1.2" - image_picker_android: - dependency: transitive - description: - name: image_picker_android - sha256: "8c5abf0dcc24fe6e8e0b4a5c0b51a5cf30cefdf6407a3213dae61edc75a70f56" - url: "https://pub.dev" - source: hosted - version: "0.8.12+12" - image_picker_for_web: - dependency: transitive - description: - name: image_picker_for_web - sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83" - url: "https://pub.dev" - source: hosted - version: "3.0.6" - image_picker_ios: - dependency: transitive - description: - name: image_picker_ios - sha256: "4f0568120c6fcc0aaa04511cb9f9f4d29fc3d0139884b1d06be88dcec7641d6b" - url: "https://pub.dev" - source: hosted - version: "0.8.12+1" - image_picker_linux: - dependency: transitive - description: - name: image_picker_linux - sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" - url: "https://pub.dev" - source: hosted - version: "0.2.1+1" - image_picker_macos: - dependency: transitive - description: - name: image_picker_macos - sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" - url: "https://pub.dev" - source: hosted - version: "0.2.1+1" - image_picker_platform_interface: - dependency: transitive - description: - name: image_picker_platform_interface - sha256: "9ec26d410ff46f483c5519c29c02ef0e02e13a543f882b152d4bfd2f06802f80" - url: "https://pub.dev" - source: hosted - version: "2.10.0" - image_picker_windows: - dependency: transitive - description: - name: image_picker_windows - sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" - url: "https://pub.dev" - source: hosted - version: "0.2.1+1" - intl: - dependency: transitive - description: - name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf - url: "https://pub.dev" - source: hosted - version: "0.19.0" io: dependency: transitive description: @@ -831,30 +482,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.0" - location: - dependency: transitive - description: - name: location - sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" - url: "https://pub.dev" - source: hosted - version: "6.0.2" - location_platform_interface: - dependency: transitive - description: - name: location_platform_interface - sha256: "2ecde6bb0f88032b0bbbde37e18975b4468711dd92619c2235cc0c0ee93b4b8e" - url: "https://pub.dev" - source: hosted - version: "4.0.0" - location_web: - dependency: transitive - description: - name: location_web - sha256: "49dda13d415c4603c5775a33fb22f575e0aa3f0ec2916644ddcd722db31ee884" - url: "https://pub.dev" - source: hosted - version: "5.0.2" logging: dependency: transitive description: @@ -863,14 +490,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" - lottie: - dependency: transitive - description: - name: lottie - sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" - url: "https://pub.dev" - source: hosted - version: "3.1.3" matcher: dependency: transitive description: @@ -927,14 +546,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.2" - overlay_builder: - dependency: transitive - description: - name: overlay_builder - sha256: "58b97bc5f67a2e2bb7006dd88e697ac757dfffc9dbd1e7dfc1917fb510a4b5c8" - url: "https://pub.dev" - source: hosted - version: "1.1.0" package_config: dependency: transitive description: @@ -951,22 +562,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.0" - path_drawing: - dependency: transitive - description: - name: path_drawing - sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 - url: "https://pub.dev" - source: hosted - version: "1.0.1" - path_parsing: - dependency: transitive - description: - name: path_parsing - sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" - url: "https://pub.dev" - source: hosted - version: "1.1.0" path_provider: dependency: "direct main" description: @@ -1015,14 +610,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.2.1" - petitparser: - dependency: transitive - description: - name: petitparser - sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 - url: "https://pub.dev" - source: hosted - version: "6.0.2" platform: dependency: transitive description: @@ -1071,14 +658,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.3" - reactive_forms: - dependency: transitive - description: - name: reactive_forms - sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" - url: "https://pub.dev" - source: hosted - version: "17.0.1" recase: dependency: "direct main" description: @@ -1292,86 +871,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" - universal_html: - dependency: transitive - description: - name: universal_html - sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" - url: "https://pub.dev" - source: hosted - version: "2.2.4" - universal_io: - dependency: transitive - description: - name: universal_io - sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" - url: "https://pub.dev" - source: hosted - version: "2.2.2" - url_launcher: - dependency: transitive - description: - name: url_launcher - sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" - url: "https://pub.dev" - source: hosted - version: "6.3.1" - url_launcher_android: - dependency: transitive - description: - name: url_launcher_android - sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79 - url: "https://pub.dev" - source: hosted - version: "6.3.9" - url_launcher_ios: - dependency: transitive - description: - name: url_launcher_ios - sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626" - url: "https://pub.dev" - source: hosted - version: "6.3.2" - url_launcher_linux: - dependency: transitive - description: - name: url_launcher_linux - sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" - url: "https://pub.dev" - source: hosted - version: "3.2.1" - url_launcher_macos: - dependency: transitive - description: - name: url_launcher_macos - sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2" - url: "https://pub.dev" - source: hosted - version: "3.2.2" - url_launcher_platform_interface: - dependency: transitive - description: - name: url_launcher_platform_interface - sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - url_launcher_web: - dependency: transitive - description: - name: url_launcher_web - sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" - url: "https://pub.dev" - source: hosted - version: "2.3.3" - url_launcher_windows: - dependency: transitive - description: - name: url_launcher_windows - sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4" - url: "https://pub.dev" - source: hosted - version: "3.1.3" uuid: dependency: "direct main" description: @@ -1380,30 +879,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.5.1" - vector_graphics: - dependency: transitive - description: - name: vector_graphics - sha256: "27d5fefe86fb9aace4a9f8375b56b3c292b64d8c04510df230f849850d912cb7" - url: "https://pub.dev" - source: hosted - version: "1.1.15" - vector_graphics_codec: - dependency: transitive - description: - name: vector_graphics_codec - sha256: "2430b973a4ca3c4dbc9999b62b8c719a160100dcbae5c819bae0cacce32c9cdb" - url: "https://pub.dev" - source: hosted - version: "1.1.12" - vector_graphics_compiler: - dependency: transitive - description: - name: vector_graphics_compiler - sha256: "1b4b9e706a10294258727674a340ae0d6e64a7231980f9f9a3d12e4b42407aad" - url: "https://pub.dev" - source: hosted - version: "1.1.16" vector_math: dependency: transitive description: @@ -1412,14 +887,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - visibility_detector: - dependency: transitive - description: - name: visibility_detector - sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 - url: "https://pub.dev" - source: hosted - version: "0.4.0+2" vm_service: dependency: transitive description: @@ -1476,14 +943,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" - xml: - dependency: transitive - description: - name: xml - sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 - url: "https://pub.dev" - source: hosted - version: "6.5.0" xxh3: dependency: transitive description: @@ -1502,4 +961,4 @@ packages: version: "3.1.2" sdks: dart: ">=3.4.0 <4.0.0" - flutter: ">=3.22.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/digit_data_model/pubspec.yaml b/packages/digit_data_model/pubspec.yaml index a58e01e58..be8fd52c0 100644 --- a/packages/digit_data_model/pubspec.yaml +++ b/packages/digit_data_model/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_data_model description: The digit_data_model package is a data modeling library. It defines various classes, enums, and functions. -version: 1.0.5-dev.1 +version: 1.0.5 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_data_model repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -25,11 +25,6 @@ dependencies: dio: ^5.4.3+1 mocktail: ^1.0.3 collection: ^1.18.0 - digit_ui_components: - git: - url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: hcm_changes - path: ./flutter/digit-ui-components/digit_components dev_dependencies: flutter_test: diff --git a/packages/digit_dss/CHANGELOG.md b/packages/digit_dss/CHANGELOG.md index 4350f8da1..dbf14003e 100644 --- a/packages/digit_dss/CHANGELOG.md +++ b/packages/digit_dss/CHANGELOG.md @@ -1,26 +1,39 @@ +## 1.0.3 + +* Updated to latest package versions +* Updated flutter version to 3.22 +* Migrated to digit_ui_components + ## 1.0.2 + * Bug fixes - * Added last sync time + * Added last sync time * Added amount enum ## 1.0.1 + * Bug fixes * Added enums for dss charts * Fixed chart delete issue * Updated digit_scanner package, digit_components, digit_data_model, attendance_management ## 1.0.0 + * Initial DSS Dashboard Release supporting metric and table charts ## 0.0.1-dev.4 -* Added error toast for network failure + +* Added error toast for network failure * No result card added if no charts available ## 0.0.1-dev.3 + * Fixed user uuid search for dss charts ## 0.0.1-dev.2 + * Added userIds and project Id filters for all dss charts ## 0.0.1-dev.1 + * Initial DSS Dashboard Release diff --git a/packages/digit_dss/pubspec.lock b/packages/digit_dss/pubspec.lock index ab06b403b..cda4389b4 100644 --- a/packages/digit_dss/pubspec.lock +++ b/packages/digit_dss/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -63,7 +71,7 @@ packages: path: "../attendance_management" relative: true source: path - version: "1.0.3-dev.1" + version: "1.0.3" auto_route: dependency: "direct main" description: @@ -315,12 +323,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: "5595f37310a63a92b2c1c7e386c74fe39df5555d" - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git - version: "4.2.0" + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.3" dart_style: dependency: transitive description: @@ -356,17 +362,23 @@ packages: digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "63c878bfe49e3e8db190dd5cd35d7a7b93b2e3b6663cebaaee25ff0089c1112b" - url: "https://pub.dev" - source: hosted - version: "1.0.5-dev.1" + path: "../digit_data_model" + relative: true + source: path + version: "1.0.5" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_ui_components: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: hcm_changes - resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 + ref: develop + resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -482,6 +494,46 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+3" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: @@ -626,10 +678,10 @@ packages: dependency: transitive description: name: geolocator_android - sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" url: "https://pub.dev" source: hosted - version: "4.3.1" + version: "4.6.1" geolocator_apple: dependency: transitive description: @@ -1235,6 +1287,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqlite3: dependency: transitive description: @@ -1439,10 +1499,10 @@ packages: dependency: transitive description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.5.1" vector_graphics: dependency: transitive description: diff --git a/packages/digit_dss/pubspec.yaml b/packages/digit_dss/pubspec.yaml index 92b574200..9236611dc 100644 --- a/packages/digit_dss/pubspec.yaml +++ b/packages/digit_dss/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_dss description: "DSS Dashboard for campaign management" -version: 1.0.2 +version: 1.0.3 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/develop/packages/digit_dss repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -14,7 +14,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: hcm_changes + ref: develop path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 reactive_forms: ^17.0.0 @@ -23,14 +23,14 @@ dependencies: flutter_svg: ^2.0.8 dart_mappable: ^4.2.0 auto_route: ^8.1.3 - digit_data_model: ^1.0.3+1 + digit_data_model: ^1.0.5 package_info_plus: ^8.0.0 collection: ^1.18.0 async: ^2.11.0 dio: ^5.4.3+1 isar: ^3.1.0+1 isar_flutter_libs: ^3.1.0+1 - attendance_management: ^1.0.2+1 + attendance_management: ^1.0.3 dev_dependencies: flutter_test: diff --git a/packages/digit_location_tracker/CHANGELOG.md b/packages/digit_location_tracker/CHANGELOG.md index 0493f2b49..8bf1ddd8f 100644 --- a/packages/digit_location_tracker/CHANGELOG.md +++ b/packages/digit_location_tracker/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.0.0 + +* Updated to latest package versions +* Updated flutter version to 3.22 + ## 0.0.1-dev.2 * Modified Regex for handling negative latitude, longitude and added new accuracy field diff --git a/packages/digit_location_tracker/pubspec.lock b/packages/digit_location_tracker/pubspec.lock index edf788cfd..d425cd382 100644 --- a/packages/digit_location_tracker/pubspec.lock +++ b/packages/digit_location_tracker/pubspec.lock @@ -1,6 +1,46 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" + url: "https://pub.dev" + source: hosted + version: "67.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" + url: "https://pub.dev" + source: hosted + version: "6.4.1" + ansicolor: + dependency: transitive + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + url: "https://pub.dev" + source: hosted + version: "2.0.3" + args: + dependency: transitive + description: + name: args + sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6 + url: "https://pub.dev" + source: hosted + version: "2.6.0" async: dependency: transitive description: @@ -25,6 +65,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + build: + dependency: transitive + description: + name: build + sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" + url: "https://pub.dev" + source: hosted + version: "2.4.1" characters: dependency: transitive description: @@ -73,22 +121,35 @@ packages: url: "https://pub.dev" source: hosted version: "4.3.0" - db_viewer: + dart_mappable_builder: + dependency: "direct overridden" + description: + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.3" + dart_style: dependency: transitive description: - name: db_viewer - sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" + name: dart_style + sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "2.3.6" digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "08f5273e691cc16e0f89aefac97887abb63739b7db3a00165c1be269aacedffd" - url: "https://pub.dev" - source: hosted - version: "1.0.4+1" + path: "../digit_data_model" + relative: true + source: path + version: "1.0.5" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" dio: dependency: transitive description: @@ -113,14 +174,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.19.1+1" - drift_db_viewer: - dependency: transitive - description: - name: drift_db_viewer - sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" fake_async: dependency: transitive description: @@ -137,6 +190,62 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" + file: + dependency: transitive + description: + name: file + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://pub.dev" + source: hosted + version: "7.0.1" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be + url: "https://pub.dev" + source: hosted + version: "1.1.1" flutter: dependency: "direct main" description: flutter @@ -208,6 +317,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.4.4" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" http_parser: dependency: transitive description: @@ -304,6 +421,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.0.2" + logging: + dependency: transitive + description: + name: logging + sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 + url: "https://pub.dev" + source: hosted + version: "1.3.0" matcher: dependency: transitive description: @@ -344,6 +469,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" + package_config: + dependency: transitive + description: + name: package_config + sha256: "92d4488434b520a62570293fbd33bb556c7d49230791c1b4bbd973baf6d2dc67" + url: "https://pub.dev" + source: hosted + version: "2.1.1" path: dependency: transitive description: @@ -472,6 +605,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.2" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "7b3cfbf654f3edd0c6298ecd5be782ce997ddf0e00531b9464b55245185bbbbd" + url: "https://pub.dev" + source: hosted + version: "2.1.5" recase: dependency: transitive description: @@ -485,6 +626,14 @@ packages: description: flutter source: sdk version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" + url: "https://pub.dev" + source: hosted + version: "1.5.0" source_span: dependency: transitive description: @@ -493,6 +642,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqlite3: dependency: transitive description: @@ -569,10 +726,10 @@ packages: dependency: transitive description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.5.1" vector_math: dependency: transitive description: @@ -589,6 +746,14 @@ packages: url: "https://pub.dev" source: hosted version: "14.2.1" + watcher: + dependency: transitive + description: + name: watcher + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" web: dependency: transitive description: @@ -605,6 +770,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" sdks: dart: ">=3.4.0 <4.0.0" flutter: ">=3.22.0" diff --git a/packages/digit_location_tracker/pubspec.yaml b/packages/digit_location_tracker/pubspec.yaml index 68859db18..d60b93dfe 100644 --- a/packages/digit_location_tracker/pubspec.yaml +++ b/packages/digit_location_tracker/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_location_tracker description: "A comprehensive package to enable location_tracking in the application" -version: 0.0.1-dev.2 +version: 1.0.0 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_location_tracker repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -13,30 +13,30 @@ dependencies: sdk: flutter flutter_background_service: ^5.0.10 flutter_bloc: ^8.1.1 - freezed_annotation: ^2.2.0 + freezed_annotation: ^2.2.0 location: ^6.0.2 location_platform_interface: ^4.0.0 permission_handler: ^11.3.1 path_provider: ^2.0.11 isar: ^3.0.5 - digit_data_model: ^1.0.4 + digit_data_model: ^1.0.5 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^2.0.0 - -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -# The following section is specific to Flutter packages. -#flutter: - -# plugin: -# platforms: -# android: -# package: com.digit.location_tracker -# pluginClass: LocationTrackerPlugin + + # For information on the generic Dart part of this file, see the + # following page: https://dart.dev/tools/pub/pubspec + + # The following section is specific to Flutter packages. + #flutter: + + # plugin: + # platforms: + # android: + # package: com.digit.location_tracker + # pluginClass: LocationTrackerPlugin # To add assets to your package, add an assets section, like this: # assets: diff --git a/packages/digit_scanner/CHANGELOG.md b/packages/digit_scanner/CHANGELOG.md index c8dd1bd52..6dae0a87b 100644 --- a/packages/digit_scanner/CHANGELOG.md +++ b/packages/digit_scanner/CHANGELOG.md @@ -1,14 +1,19 @@ ## 1.0.4 + * Updated to latest package versions -* Updated flutter version to 3.22.1 +* Updated flutter version to 3.22 +* ## 1.0.3+1 + * Updated Digit_Components ## 1.0.3 + * Manual code entry fixes with stable version ## 1.0.3-dev.1 + * Fix for manual entry result not reflecting ## 1.0.2 diff --git a/packages/digit_scanner/example/pubspec.lock b/packages/digit_scanner/example/pubspec.lock index bf2c34008..a5842c743 100644 --- a/packages/digit_scanner/example/pubspec.lock +++ b/packages/digit_scanner/example/pubspec.lock @@ -321,13 +321,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.6" - digit_components: - dependency: "direct main" - description: - path: "../../digit_components" - relative: true - source: path - version: "1.0.2+1" digit_scanner: dependency: "direct main" description: @@ -336,11 +329,11 @@ packages: source: path version: "1.0.4" digit_ui_components: - dependency: transitive + dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: hcm_changes - resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 + ref: develop + resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -352,14 +345,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - easy_stepper: - dependency: transitive - description: - name: easy_stepper - sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" - url: "https://pub.dev" - source: hosted - version: "0.8.5+1" fake_async: dependency: transitive description: @@ -469,62 +454,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.13" - flutter_focus_watcher: - dependency: transitive - description: - name: flutter_focus_watcher - sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility: - dependency: transitive - description: - name: flutter_keyboard_visibility - sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" - url: "https://pub.dev" - source: hosted - version: "5.4.1" - flutter_keyboard_visibility_linux: - dependency: transitive - description: - name: flutter_keyboard_visibility_linux - sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_macos: - dependency: transitive - description: - name: flutter_keyboard_visibility_macos - sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_platform_interface: - dependency: transitive - description: - name: flutter_keyboard_visibility_platform_interface - sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_web: - dependency: transitive - description: - name: flutter_keyboard_visibility_web - sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_windows: - dependency: transitive - description: - name: flutter_keyboard_visibility_windows - sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 - url: "https://pub.dev" - source: hosted - version: "1.0.0" flutter_lints: dependency: "direct dev" description: @@ -575,14 +504,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" flutter_web_plugins: dependency: transitive description: flutter @@ -972,22 +893,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - package_info_plus: - dependency: transitive - description: - name: package_info_plus - sha256: da8d9ac8c4b1df253d1a328b7bf01ae77ef132833479ab40763334db13b91cce - url: "https://pub.dev" - source: hosted - version: "8.1.1" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 - url: "https://pub.dev" - source: hosted - version: "3.0.1" path: dependency: transitive description: @@ -1084,14 +989,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" pool: dependency: transitive description: @@ -1124,14 +1021,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a - url: "https://pub.dev" - source: hosted - version: "2.1.1" reactive_forms: dependency: transitive description: @@ -1140,14 +1029,6 @@ packages: url: "https://pub.dev" source: hosted version: "17.0.1" - remove_emoji_input_formatter: - dependency: transitive - description: - name: remove_emoji_input_formatter - sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" - url: "https://pub.dev" - source: hosted - version: "0.0.1+1" shelf: dependency: transitive description: diff --git a/packages/digit_scanner/example/pubspec.yaml b/packages/digit_scanner/example/pubspec.yaml index cf8a316a8..326b01ad7 100644 --- a/packages/digit_scanner/example/pubspec.yaml +++ b/packages/digit_scanner/example/pubspec.yaml @@ -38,8 +38,11 @@ dependencies: flutter_bloc: ^8.1.1 digit_scanner: path: ../../digit_scanner - digit_components: - path: ../../digit_components + digit_ui_components: + git: + url: https://github.com/egovernments/DIGIT-UI-LIBRARIES + ref: develop + path: ./flutter/digit-ui-components/digit_components dev_dependencies: flutter_test: diff --git a/packages/digit_scanner/pubspec.lock b/packages/digit_scanner/pubspec.lock index f59cb4d83..153d5d00b 100644 --- a/packages/digit_scanner/pubspec.lock +++ b/packages/digit_scanner/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "67.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -17,6 +25,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.4.1" + ansicolor: + dependency: transitive + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + url: "https://pub.dev" + source: hosted + version: "2.0.3" archive: dependency: transitive description: @@ -337,6 +353,21 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" + dart_mappable: + dependency: transitive + description: + name: dart_mappable + sha256: f69a961ae8589724ebb542e588f228ae844c5f78028899cbe2cc718977c1b382 + url: "https://pub.dev" + source: hosted + version: "4.3.0" + dart_mappable_builder: + dependency: "direct overridden" + description: + path: "../dart_mappable_builder" + relative: true + source: path + version: "4.2.3" dart_style: dependency: transitive description: @@ -353,12 +384,26 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.1" + digit_components: + dependency: "direct overridden" + description: + path: "../digit_components" + relative: true + source: path + version: "1.0.2+1" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_ui_components: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: hcm_changes - resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 + ref: develop + resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -370,6 +415,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" + easy_stepper: + dependency: transitive + description: + name: easy_stepper + sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" + url: "https://pub.dev" + source: hosted + version: "0.8.5+1" fake_async: dependency: transitive description: @@ -434,6 +487,46 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+3" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "9e69806bb3d905aeec3c1242e0e1475de6ea6d48f456af29d598fb229a2b4e5e" + url: "https://pub.dev" + source: hosted + version: "2.18.2" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: @@ -479,6 +572,62 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.13" + flutter_focus_watcher: + dependency: transitive + description: + name: flutter_focus_watcher + sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility: + dependency: transitive + description: + name: flutter_keyboard_visibility + sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" + url: "https://pub.dev" + source: hosted + version: "5.4.1" + flutter_keyboard_visibility_linux: + dependency: transitive + description: + name: flutter_keyboard_visibility_linux + sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_macos: + dependency: transitive + description: + name: flutter_keyboard_visibility_macos + sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_platform_interface: + dependency: transitive + description: + name: flutter_keyboard_visibility_platform_interface + sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_web: + dependency: transitive + description: + name: flutter_keyboard_visibility_web + sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_windows: + dependency: transitive + description: + name: flutter_keyboard_visibility_windows + sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 + url: "https://pub.dev" + source: hosted + version: "1.0.0" flutter_lints: dependency: "direct dev" description: @@ -529,6 +678,14 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_typeahead: + dependency: transitive + description: + name: flutter_typeahead + sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 + url: "https://pub.dev" + source: hosted + version: "4.8.0" flutter_web_plugins: dependency: transitive description: flutter @@ -950,6 +1107,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" + package_info_plus: + dependency: transitive + description: + name: package_info_plus + sha256: "70c421fe9d9cc1a9a7f3b05ae56befd469fe4f8daa3b484823141a55442d858d" + url: "https://pub.dev" + source: hosted + version: "8.1.2" + package_info_plus_platform_interface: + dependency: transitive + description: + name: package_info_plus_platform_interface + sha256: a5ef9986efc7bf772f2696183a3992615baa76c1ffb1189318dd8803778fb05b + url: "https://pub.dev" + source: hosted + version: "3.0.2" path: dependency: "direct main" description: @@ -1046,6 +1219,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" + pointer_interceptor: + dependency: transitive + description: + name: pointer_interceptor + sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 + url: "https://pub.dev" + source: hosted + version: "0.9.3+7" pool: dependency: transitive description: @@ -1078,6 +1259,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + reactive_flutter_typeahead: + dependency: transitive + description: + name: reactive_flutter_typeahead + sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a + url: "https://pub.dev" + source: hosted + version: "2.1.1" reactive_forms: dependency: "direct main" description: @@ -1086,6 +1275,14 @@ packages: url: "https://pub.dev" source: hosted version: "17.0.1" + remove_emoji_input_formatter: + dependency: transitive + description: + name: remove_emoji_input_formatter + sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" + url: "https://pub.dev" + source: hosted + version: "0.0.1+1" shelf: dependency: transitive description: @@ -1251,6 +1448,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + type_plus: + dependency: transitive + description: + name: type_plus + sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 + url: "https://pub.dev" + source: hosted + version: "2.1.1" typed_data: dependency: transitive description: diff --git a/packages/digit_scanner/pubspec.yaml b/packages/digit_scanner/pubspec.yaml index b8f761ec3..983c6c681 100644 --- a/packages/digit_scanner/pubspec.yaml +++ b/packages/digit_scanner/pubspec.yaml @@ -40,7 +40,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: hcm_changes + ref: develop path: ./flutter/digit-ui-components/digit_components reactive_forms: ^17.0.0 gs1_barcode_parser: ^1.0.5 diff --git a/packages/inventory_management/CHANGELOG.md b/packages/inventory_management/CHANGELOG.md index e097bdc3b..b0623ce75 100644 --- a/packages/inventory_management/CHANGELOG.md +++ b/packages/inventory_management/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.0.4 + +* Upgrade to Flutter 3.22 +* Updated digit_data_model, digit_scanner to latest version +* Migrated to digit_ui_components + ## 1.0.3+5 * Added audit and client audit details in stock reconciliation diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index 273e9a7f5..03d4c8ff1 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -372,10 +380,9 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - name: dart_mappable_builder - sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e - url: "https://pub.dev" - source: hosted + path: "../dart_mappable_builder" + relative: true + source: path version: "4.2.3" dart_style: dependency: transitive @@ -407,7 +414,14 @@ packages: path: "../digit_data_model" relative: true source: path - version: "1.0.5-dev.1" + version: "1.0.5" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_scanner: dependency: "direct main" description: @@ -419,8 +433,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: hcm_changes - resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 + ref: develop + resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -528,6 +542,46 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+3" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: @@ -1626,5 +1680,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <3.9.0" + dart: ">=3.4.0 <4.0.0" flutter: ">=3.22.0" diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index 2e2eb1275..3c0a9b4ec 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -1,6 +1,6 @@ name: inventory_management description: This package offers inventory management features, allowing users to view stock reports and perform inventory resource reconciliation. -version: 1.0.3+5 +version: 1.0.4 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/inventory_management repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -14,7 +14,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: hcm_changes + ref: develop path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 diff --git a/packages/referral_reconciliation/CHANGELOG.md b/packages/referral_reconciliation/CHANGELOG.md index 7cff12142..5d57bc4a1 100644 --- a/packages/referral_reconciliation/CHANGELOG.md +++ b/packages/referral_reconciliation/CHANGELOG.md @@ -1,6 +1,7 @@ -## 1.0.3-dev.1 -* Updated digit_data_model to latest version -* Updated survey_form to latest version +## 1.0.3 + +* Upgrade to Flutter 3.22 +* Updated digit_data_model, survey_form to latest version * Migrated to digit_ui_components ## 1.0.2+2 diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index 945e33357..3f1d967ae 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" analyzer: dependency: transitive description: @@ -398,7 +406,14 @@ packages: path: "../digit_data_model" relative: true source: path - version: "1.0.5-dev.1" + version: "1.0.5" + digit_firebase_services: + dependency: "direct overridden" + description: + path: "../digit_firebase_services" + relative: true + source: path + version: "0.0.1" digit_scanner: dependency: "direct main" description: @@ -410,8 +425,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: hcm_changes - resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 + ref: develop + resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -511,6 +526,46 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + url: "https://pub.dev" + source: hosted + version: "5.3.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + firebase_crashlytics: + dependency: transitive + description: + name: firebase_crashlytics + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + url: "https://pub.dev" + source: hosted + version: "3.5.7" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + url: "https://pub.dev" + source: hosted + version: "3.6.35" fixnum: dependency: transitive description: @@ -1406,7 +1461,7 @@ packages: path: "../survey_form" relative: true source: path - version: "0.0.1-dev.2" + version: "1.0.0" synchronized: dependency: transitive description: diff --git a/packages/referral_reconciliation/pubspec.yaml b/packages/referral_reconciliation/pubspec.yaml index dddede389..835e29495 100644 --- a/packages/referral_reconciliation/pubspec.yaml +++ b/packages/referral_reconciliation/pubspec.yaml @@ -1,6 +1,6 @@ name: referral_reconciliation description: "This module will enable the health facility supervisors to track referrals made by on-field health workers to different health facilities digitally via the Digit HCM app" -version: 1.0.3-dev.1 +version: 1.0.3 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/referral_reconciliation repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -14,7 +14,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: hcm_changes + ref: develop path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration_delivery/CHANGELOG.md index f795478ec..0a6edbfe3 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration_delivery/CHANGELOG.md @@ -1,18 +1,27 @@ +## 1.0.4 + +* Upgrade to Flutter 3.22 +* Updated latest version's of digit_data_model, survey_form, digit_scanner +* Migrated to digit_ui_components + ## 1.0.3+4 + * Delivery action label and administered_success status update based on the project ## 1.0.4-dev.5 + * Updated digit_data_model to latest version * Updated survey_form to latest version * Migrated to digit_ui_components ## 1.0.3+3 + * Updated Service model additionalDetails objectType in digit_data_model package ## 1.0.3+2 * Bug Fix - - * fixed wrong status map of beneficiaryRefused in utils + * fixed wrong status map of beneficiaryRefused in utils * Sorting tasks based on createTime ## 1.0.4-dev.1 @@ -22,8 +31,8 @@ ## 1.0.3+1 * Bug Fixes - - * Reload fix after edit - * Project Beneficiary create for all members if not registered for campaign + * Reload fix after edit + * Project Beneficiary create for all members if not registered for campaign * Updated digit_scanner package, digit_components, digit_data_model ## 1.0.3 @@ -42,11 +51,11 @@ ## 1.0.3-dev.10 -* Removed stepper if number of deliveries is greater than 1 +* Removed stepper if number of deliveries is greater than 1 ## 1.0.3-dev.9 -* Updated localization key +* Updated localization key * Resolved taskStatus key from task table entity ## 1.0.3-dev.8 @@ -63,7 +72,7 @@ ## 1.0.3-dev.5 -* Added count for filter search +* Added count for filter search * Bug fixes ## 1.0.3-dev.4 @@ -74,7 +83,6 @@ * Closed household flow change - ## 1.0.3-dev.2 * Closed household search fixes @@ -150,7 +158,7 @@ ## 0.0.0-dev.2 -* Boundary v2 Integrated, to use Boundary v1 0.0.0-dev.1 version can be used +* Boundary v2 Integrated, to use Boundary v1 0.0.0-dev.1 version can be used ## 0.0.0-dev.1 diff --git a/packages/registration_delivery/lib/models/entities/side_effect.mapper.dart b/packages/registration_delivery/lib/models/entities/side_effect.mapper.dart index 429c80d26..06ed7253e 100644 --- a/packages/registration_delivery/lib/models/entities/side_effect.mapper.dart +++ b/packages/registration_delivery/lib/models/entities/side_effect.mapper.dart @@ -276,6 +276,13 @@ class SideEffectModelMapper extends SubClassMapperBase { static String? _$projectId(SideEffectModel v) => v.projectId; static const Field _f$projectId = Field('projectId', _$projectId, opt: true); + static String? _$projectBeneficiaryClientReferenceId(SideEffectModel v) => + v.projectBeneficiaryClientReferenceId; + static const Field + _f$projectBeneficiaryClientReferenceId = Field( + 'projectBeneficiaryClientReferenceId', + _$projectBeneficiaryClientReferenceId, + opt: true); static String? _$taskClientReferenceId(SideEffectModel v) => v.taskClientReferenceId; static const Field _f$taskClientReferenceId = @@ -317,6 +324,8 @@ class SideEffectModelMapper extends SubClassMapperBase { #additionalFields: _f$additionalFields, #id: _f$id, #projectId: _f$projectId, + #projectBeneficiaryClientReferenceId: + _f$projectBeneficiaryClientReferenceId, #taskClientReferenceId: _f$taskClientReferenceId, #reAttempts: _f$reAttempts, #symptoms: _f$symptoms, @@ -344,6 +353,8 @@ class SideEffectModelMapper extends SubClassMapperBase { additionalFields: data.dec(_f$additionalFields), id: data.dec(_f$id), projectId: data.dec(_f$projectId), + projectBeneficiaryClientReferenceId: + data.dec(_f$projectBeneficiaryClientReferenceId), taskClientReferenceId: data.dec(_f$taskClientReferenceId), reAttempts: data.dec(_f$reAttempts), symptoms: data.dec(_f$symptoms), @@ -422,6 +433,7 @@ abstract class SideEffectModelCopyWith<$R, $In extends SideEffectModel, $Out> {SideEffectAdditionalFields? additionalFields, String? id, String? projectId, + String? projectBeneficiaryClientReferenceId, String? taskClientReferenceId, int? reAttempts, List? symptoms, @@ -469,6 +481,7 @@ class _SideEffectModelCopyWithImpl<$R, $Out> {Object? additionalFields = $none, Object? id = $none, Object? projectId = $none, + Object? projectBeneficiaryClientReferenceId = $none, Object? taskClientReferenceId = $none, Object? reAttempts = $none, Object? symptoms = $none, @@ -483,6 +496,9 @@ class _SideEffectModelCopyWithImpl<$R, $Out> if (additionalFields != $none) #additionalFields: additionalFields, if (id != $none) #id: id, if (projectId != $none) #projectId: projectId, + if (projectBeneficiaryClientReferenceId != $none) + #projectBeneficiaryClientReferenceId: + projectBeneficiaryClientReferenceId, if (taskClientReferenceId != $none) #taskClientReferenceId: taskClientReferenceId, if (reAttempts != $none) #reAttempts: reAttempts, @@ -503,6 +519,9 @@ class _SideEffectModelCopyWithImpl<$R, $Out> data.get(#additionalFields, or: $value.additionalFields), id: data.get(#id, or: $value.id), projectId: data.get(#projectId, or: $value.projectId), + projectBeneficiaryClientReferenceId: data.get( + #projectBeneficiaryClientReferenceId, + or: $value.projectBeneficiaryClientReferenceId), taskClientReferenceId: data.get(#taskClientReferenceId, or: $value.taskClientReferenceId), reAttempts: data.get(#reAttempts, or: $value.reAttempts), diff --git a/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart b/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart index ac0a4a317..c48207880 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart @@ -439,6 +439,7 @@ class DoseAdministeredPageState extends LocalizedState { DigitTable( enableBorder: true, showPagination: false, + showSelectedState: false, columns: headerListResource, rows: tableDataRows, tableHeight: diff --git a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart index f05bbf808..4ac6e2906 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart @@ -281,80 +281,78 @@ class ViewBeneficiaryCardState extends LocalizedState { t.projectBeneficiaryClientReferenceId == projectBeneficiary?.clientReferenceId); - return DigitCard( - margin: const EdgeInsets.all(spacer2), + return DigitCard(margin: const EdgeInsets.all(spacer2), children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - width: MediaQuery.of(context).size.width / 1.8, - child: BeneficiaryCard( - description: [ - householdMember.household?.address?.doorNo, - householdMember.household?.address?.addressLine1, - householdMember.household?.address?.addressLine2, - householdMember.household?.address?.landmark, - householdMember.household?.address?.city, - householdMember.household?.address?.pincode, - ].whereNotNull().take(2).join(' '), - subtitle: widget.distance != null - ? '${householdMember.members?.length ?? 1} ${householdMember.members?.length == 1 ? localizations.translate(i18.beneficiaryDetails.householdMemberSingular) : localizations.translate(i18.beneficiaryDetails.householdMemberPlural)}\n${((widget.distance!) * 1000).round() > 999 ? '(${((widget.distance!).round())} km)' : '(${((widget.distance!) * 1000).round()} mts) ${localizations.translate(i18.beneficiaryDetails.fromCurrentLocation)}'}' - : '${householdMember.members?.length ?? 1} ${householdMember.members?.length == 1 ? localizations.translate(i18.beneficiaryDetails.householdMemberSingular) : localizations.translate(i18.beneficiaryDetails.householdMemberPlural)}', - status: getStatus( - tasks ?? [], - householdMember.projectBeneficiaries ?? [], - RegistrationDeliverySingleton().beneficiaryType == - BeneficiaryType.individual - ? isNotEligible - : false, - isBeneficiaryRefused), - title: [ - householdMember.headOfHousehold?.name?.givenName ?? - localizations.translate(i18.common.coreCommonNA), - householdMember.headOfHousehold?.name?.familyName, - ].whereNotNull().join(''), - ), - ), - Flexible( - child: DigitButton( - label: - localizations.translate(i18.searchBeneficiary.iconLabel), - onPressed: widget.onOpenPressed, - type: DigitButtonType.secondary, - size: DigitButtonSize.medium, - ), - ), - ], + SizedBox( + width: MediaQuery.of(context).size.width / 1.8, + child: BeneficiaryCard( + description: [ + householdMember.household?.address?.doorNo, + householdMember.household?.address?.addressLine1, + householdMember.household?.address?.addressLine2, + householdMember.household?.address?.landmark, + householdMember.household?.address?.city, + householdMember.household?.address?.pincode, + ].whereNotNull().take(2).join(' '), + subtitle: widget.distance != null + ? '${householdMember.members?.length ?? 1} ${householdMember.members?.length == 1 ? localizations.translate(i18.beneficiaryDetails.householdMemberSingular) : localizations.translate(i18.beneficiaryDetails.householdMemberPlural)}\n${((widget.distance!) * 1000).round() > 999 ? '(${((widget.distance!).round())} km)' : '(${((widget.distance!) * 1000).round()} mts) ${localizations.translate(i18.beneficiaryDetails.fromCurrentLocation)}'}' + : '${householdMember.members?.length ?? 1} ${householdMember.members?.length == 1 ? localizations.translate(i18.beneficiaryDetails.householdMemberSingular) : localizations.translate(i18.beneficiaryDetails.householdMemberPlural)}', + status: getStatus( + tasks ?? [], + householdMember.projectBeneficiaries ?? [], + RegistrationDeliverySingleton().beneficiaryType == + BeneficiaryType.individual + ? isNotEligible + : false, + isBeneficiaryRefused), + title: [ + householdMember.headOfHousehold?.name?.givenName ?? + localizations.translate(i18.common.coreCommonNA), + householdMember.headOfHousehold?.name?.familyName, + ].whereNotNull().join(''), + ), ), - if(isCardExpanded) - Offstage( - offstage: !isCardExpanded, - child: DigitTable( - enableBorder: true, - showPagination: false, - columns: filteredHeaderList, - rows: tableData ?? [], + Flexible( + child: DigitButton( + label: localizations.translate(i18.searchBeneficiary.iconLabel), + onPressed: widget.onOpenPressed, + type: DigitButtonType.secondary, + size: DigitButtonSize.medium, ), ), - Container( - height: 24, - margin: const EdgeInsets.all(4), - child: Center( - child: IconButton( - padding: EdgeInsets.zero, - icon: Icon( - isCardExpanded - ? Icons.keyboard_arrow_up - : Icons.keyboard_arrow_down, - size: 24, - ), - onPressed: () => isCardExpanded = !isCardExpanded, - ), + ], + ), + if (isCardExpanded) + Offstage( + offstage: !isCardExpanded, + child: DigitTable( + enableBorder: true, + showPagination: false, + showSelectedState: false, + columns: filteredHeaderList, + rows: tableData ?? [], + ), + ), + Container( + height: 24, + margin: const EdgeInsets.all(4), + child: Center( + child: IconButton( + padding: EdgeInsets.zero, + icon: Icon( + isCardExpanded + ? Icons.keyboard_arrow_up + : Icons.keyboard_arrow_down, + size: 24, ), + onPressed: () => isCardExpanded = !isCardExpanded, ), - ]); + ), + ), + ]); } String getTableCellText( diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 899223b0e..447a964bf 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -414,7 +414,7 @@ packages: path: "../digit_data_model" relative: true source: path - version: "1.0.5-dev.1" + version: "1.0.5" digit_firebase_services: dependency: "direct overridden" description: @@ -432,17 +432,16 @@ packages: digit_showcase: dependency: "direct main" description: - name: digit_showcase - sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" - url: "https://pub.dev" - source: hosted - version: "1.0.0" + path: "../digit_showcase" + relative: true + source: path + version: "1.0.1" digit_ui_components: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: hcm_changes - resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 + ref: develop + resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -1517,7 +1516,7 @@ packages: path: "../survey_form" relative: true source: path - version: "0.0.1-dev.2" + version: "1.0.0" synchronized: dependency: transitive description: diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index efefbe7b5..be150a5db 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: hcm_changes + ref: develop path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 diff --git a/packages/survey_form/CHANGELOG.md b/packages/survey_form/CHANGELOG.md index a4b25e89c..2b8b823e2 100644 --- a/packages/survey_form/CHANGELOG.md +++ b/packages/survey_form/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.0.0 + +* Upgrade to Flutter 3.22 +* Updated digit_data_model to latest version + ## 0.0.1-dev.2 * Migrated to digit_ui_components diff --git a/packages/survey_form/example/pubspec.lock b/packages/survey_form/example/pubspec.lock index 6b2bf9c07..036e62528 100644 --- a/packages/survey_form/example/pubspec.lock +++ b/packages/survey_form/example/pubspec.lock @@ -279,13 +279,13 @@ packages: path: "../../digit_data_model" relative: true source: path - version: "1.0.5-dev.1" + version: "1.0.5" digit_ui_components: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: hcm_changes - resolved-ref: c5dd67a70d57a01979932e7ceeb4720af0828cb9 + ref: develop + resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" @@ -1112,7 +1112,7 @@ packages: path: ".." relative: true source: path - version: "0.0.1-dev.2" + version: "1.0.0" term_glyph: dependency: transitive description: diff --git a/packages/survey_form/example/pubspec.yaml b/packages/survey_form/example/pubspec.yaml index 1d9cf1f99..7b4364417 100644 --- a/packages/survey_form/example/pubspec.yaml +++ b/packages/survey_form/example/pubspec.yaml @@ -31,7 +31,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: hcm_changes + ref: develop path: ./flutter/digit-ui-components/digit_components survey_form: path: ../ diff --git a/packages/survey_form/pubspec.lock b/packages/survey_form/pubspec.lock index d96e50fcd..2f7bd284a 100644 --- a/packages/survey_form/pubspec.lock +++ b/packages/survey_form/pubspec.lock @@ -342,7 +342,7 @@ packages: path: "../digit_data_model" relative: true source: path - version: "1.0.5-dev.1" + version: "1.0.5" digit_firebase_services: dependency: "direct overridden" description: @@ -354,8 +354,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: hcm_changes - resolved-ref: "05e86809fdbef4e443616a5c266043c353924953" + ref: develop + resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+7" diff --git a/packages/survey_form/pubspec.yaml b/packages/survey_form/pubspec.yaml index 17d9a0169..04d148fef 100644 --- a/packages/survey_form/pubspec.yaml +++ b/packages/survey_form/pubspec.yaml @@ -1,6 +1,6 @@ name: survey_form description: "This package enables supervisors to monitor certain activities and record observations according to defined set of questions." -version: 0.0.1-dev.2 +version: 1.0.0 homepage: "https://github.com/egovernments/health-campaign-field-worker-app/tree/checklist-package/packages/survey_form" repository: "https://github.com/egovernments/health-campaign-field-worker-app" @@ -14,7 +14,7 @@ dependencies: digit_ui_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: hcm_changes + ref: develop path: ./flutter/digit-ui-components/digit_components flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 From 4483a38e259ec74c2c399cfdb4759b20568758de Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Wed, 18 Dec 2024 17:21:34 +0530 Subject: [PATCH 221/241] ui fixes, bug fixes, version upgrades and package publish build apk workflow change --- .github/workflows/flutter-build-apk.yml | 4 +- .../lib/pages/home.dart | 4 + .../lib/pages/login.dart | 2 +- .../pubspec.lock | 141 +++++++----- .../pubspec.yaml | 30 ++- .../lib/utils/date_util_attendance.dart | 2 +- packages/attendance_management/pubspec.lock | 81 ++----- packages/attendance_management/pubspec.yaml | 8 +- .../lib/pages/closed_household_summary.dart | 39 ++-- packages/closed_household/pubspec.lock | 117 +++------- packages/closed_household/pubspec.yaml | 20 +- packages/complaints/CHANGELOG.md | 7 + packages/complaints/example/pubspec.lock | 73 +++--- packages/complaints/example/pubspec.yaml | 5 - .../lib/data/repositories/oplog/oplog.dart | 67 +++--- packages/complaints/pubspec.lock | 87 ++----- packages/complaints/pubspec.yaml | 16 +- packages/digit_components/CHANGELOG.md | 44 ++++ packages/digit_components/pubspec.yaml | 2 +- packages/digit_data_model/pubspec.lock | 8 +- packages/digit_data_model/pubspec.yaml | 4 +- packages/digit_dss/pubspec.lock | 11 +- packages/digit_dss/pubspec.yaml | 8 +- packages/digit_scanner/CHANGELOG.md | 2 +- packages/digit_scanner/example/pubspec.lock | 11 +- packages/digit_scanner/example/pubspec.yaml | 6 +- packages/digit_scanner/pubspec.lock | 216 +----------------- packages/digit_scanner/pubspec.yaml | 6 +- .../lib/pages/record_stock/stock_details.dart | 5 +- .../lib/pages/reports/report_details.dart | 3 +- packages/inventory_management/pubspec.lock | 89 ++------ packages/inventory_management/pubspec.yaml | 14 +- .../search_referral_reconciliations.dart | 14 +- packages/referral_reconciliation/pubspec.lock | 95 ++------ packages/referral_reconciliation/pubspec.yaml | 24 +- packages/registration_delivery/CHANGELOG.md | 2 +- .../individual_global_search.dart | 32 ++- .../pages/beneficiary/household_overview.dart | 1 + .../individual_details.dart | 33 ++- .../lib/pages/search_beneficiary.dart | 1 + .../widgets/beneficiary/beneficiary_card.dart | 1 + packages/registration_delivery/pubspec.lock | 106 +++------ packages/registration_delivery/pubspec.yaml | 26 +-- packages/survey_form/example/pubspec.lock | 18 +- packages/survey_form/example/pubspec.yaml | 6 +- packages/survey_form/pubspec.lock | 81 ++----- packages/survey_form/pubspec.yaml | 16 +- packages/sync_service/pubspec.yaml | 4 +- 48 files changed, 532 insertions(+), 1060 deletions(-) diff --git a/.github/workflows/flutter-build-apk.yml b/.github/workflows/flutter-build-apk.yml index 771959435..1d8ad0304 100644 --- a/.github/workflows/flutter-build-apk.yml +++ b/.github/workflows/flutter-build-apk.yml @@ -28,8 +28,8 @@ jobs: - name: Set up Android SDK uses: android-actions/setup-android@v2 with: - api-level: 30 - build-tools: 30.0.3 + api-level: 33 + build-tools: 33.0.2 - name: Install Dependencies run: flutter pub get diff --git a/apps/health_campaign_field_worker_app/lib/pages/home.dart b/apps/health_campaign_field_worker_app/lib/pages/home.dart index c80634670..31e26b3a0 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/home.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/home.dart @@ -547,6 +547,10 @@ class _HomePageState extends LocalizedState { .map((label) => homeItemsShowcaseMap[label]!) .toList(); + if (!context.selectedProject.name.contains('IRS')) { + filteredLabels.remove(i18.home.dashboard); + } + final List widgetList = filteredLabels.map((label) => homeItemsMap[label]!).toList(); diff --git a/apps/health_campaign_field_worker_app/lib/pages/login.dart b/apps/health_campaign_field_worker_app/lib/pages/login.dart index cb1277d20..cfba689e7 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/login.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/login.dart @@ -234,7 +234,7 @@ class _LoginPageState extends LocalizedState { ), _password: FormControl( validators: [Validators.required], - value: '', + value: 'eGov@123', ), _privacyCheck: FormControl( value: false, diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index f6c4b718b..8720984cd 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -68,9 +68,10 @@ packages: attendance_management: dependency: "direct main" description: - path: "../../packages/attendance_management" - relative: true - source: path + name: attendance_management + sha256: "7221a7ed0d20cbbb45357dca59c6f6aa247e935247eeb5a8991b79fa809200e4" + url: "https://pub.dev" + source: hosted version: "1.0.3" audioplayers: dependency: transitive @@ -265,7 +266,7 @@ packages: source: hosted version: "0.11.0+2" camera_android_camerax: - dependency: "direct overridden" + dependency: transitive description: name: camera_android_camerax sha256: "594b40a5ea0e144fdfe49e4036abe4ec9bd578b2ce3aabdb0668a02db376a1e8" @@ -339,9 +340,10 @@ packages: closed_household: dependency: "direct main" description: - path: "../../packages/closed_household" - relative: true - source: path + name: closed_household + sha256: d3e78f1a1f65a88b695d37d4fbf217cd3e259c8fdb11402dfb821225a11726c2 + url: "https://pub.dev" + source: hosted version: "1.0.3" code_builder: dependency: transitive @@ -362,9 +364,10 @@ packages: complaints: dependency: "direct main" description: - path: "../../packages/complaints" - relative: true - source: path + name: complaints + sha256: "6e383d4be32cee58696258c2f58176ef9869b2afc4aeed252e4b3757eb4bfb76" + url: "https://pub.dev" + source: hosted version: "1.0.0" connectivity_plus: dependency: "direct main" @@ -441,10 +444,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../../packages/dart_mappable_builder" - relative: true - source: path - version: "4.2.3" + name: dart_mappable_builder + sha256: "04a6e7117382f8a8689b3e363bee6c3de8c9ea4332e664148fe01bd576eb1126" + url: "https://pub.dev" + source: hosted + version: "4.3.0" dart_style: dependency: transitive description: @@ -504,61 +508,67 @@ packages: digit_components: dependency: "direct main" description: - path: "../../packages/digit_components" - relative: true - source: path - version: "1.0.2+1" + name: digit_components + sha256: "7097c7e8bd2fa96415eb4049a7fc2e4cb3dcb5a913d63703ca69cb785a069300" + url: "https://pub.dev" + source: hosted + version: "1.0.3" digit_data_model: dependency: "direct main" description: - path: "../../packages/digit_data_model" - relative: true - source: path + name: digit_data_model + sha256: c3bc7299a7d927ebb83d8e91c1d7a8a51f6a1d1295dafeacb642012b72b99a2f + url: "https://pub.dev" + source: hosted version: "1.0.5" digit_dss: dependency: "direct main" description: - path: "../../packages/digit_dss" - relative: true - source: path + name: digit_dss + sha256: cb5ae888503260dff1df2d4785ba2cac39a20348cfcd660e2212a8965b948dba + url: "https://pub.dev" + source: hosted version: "1.0.3" digit_firebase_services: dependency: "direct main" description: - path: "../../packages/digit_firebase_services" - relative: true - source: path + name: digit_firebase_services + sha256: ce76521d797e123b6fc95c9dfad7d4a918a93b97f57aecd0e1d517b46190909d + url: "https://pub.dev" + source: hosted version: "0.0.1" digit_location_tracker: dependency: "direct main" description: - path: "../../packages/digit_location_tracker" - relative: true - source: path + name: digit_location_tracker + sha256: a93bda5b07db112210e08c7a76f0627957d931d5106c8a7db8876503cc2fd06f + url: "https://pub.dev" + source: hosted version: "1.0.0" digit_scanner: dependency: "direct main" description: - path: "../../packages/digit_scanner" - relative: true - source: path + name: digit_scanner + sha256: c33af61ed9ab3d7740fc3c8948af4b763d946cba5e902f8bfb00948d4d69d60a + url: "https://pub.dev" + source: hosted version: "1.0.4" digit_showcase: dependency: "direct main" description: - path: "../../packages/digit_showcase" - relative: true - source: path - version: "1.0.1" + name: digit_showcase + sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" + url: "https://pub.dev" + source: hosted + version: "1.0.0" digit_ui_components: dependency: "direct main" description: - path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" - url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" - source: git - version: "0.0.1+7" + name: digit_ui_components + sha256: "57c4da5237be6025783e7357a02b6b492f02e38f711d674bf46f5f8c8a93ad76" + url: "https://pub.dev" + source: hosted + version: "0.0.2-dev.4" dio: dependency: "direct main" description: @@ -680,7 +690,7 @@ packages: source: hosted version: "8.0.7" file_selector_linux: - dependency: "direct overridden" + dependency: transitive description: name: file_selector_linux sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" @@ -696,7 +706,7 @@ packages: source: hosted version: "0.9.4+2" file_selector_platform_interface: - dependency: "direct overridden" + dependency: transitive description: name: file_selector_platform_interface sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b @@ -826,7 +836,7 @@ packages: source: hosted version: "3.0.7" flutter_dropzone_platform_interface: - dependency: "direct overridden" + dependency: transitive description: name: flutter_dropzone_platform_interface sha256: b4e2df75364bab2f4c3ca32b87193267d786b6e158c3f345c3a1daeb911d82b9 @@ -1349,9 +1359,10 @@ packages: inventory_management: dependency: "direct main" description: - path: "../../packages/inventory_management" - relative: true - source: path + name: inventory_management + sha256: e8ac85b2a4cfdcabdb9a0e49bc3231953b9c5c7e02c6aabadda6ffc3b78ef128 + url: "https://pub.dev" + source: hosted version: "1.0.4" io: dependency: transitive @@ -1836,17 +1847,19 @@ packages: referral_reconciliation: dependency: "direct main" description: - path: "../../packages/referral_reconciliation" - relative: true - source: path + name: referral_reconciliation + sha256: "0b7e439b105b7cc4c89cff822b801ab8eecce497031be1572e5415aa1e871208" + url: "https://pub.dev" + source: hosted version: "1.0.3" registration_delivery: dependency: "direct main" description: - path: "../../packages/registration_delivery" - relative: true - source: path - version: "1.0.4-dev.5" + name: registration_delivery + sha256: "8f6843cb5e1acd5e44026b663a28e80086e791107b9131487c7e3a38e43b1229" + url: "https://pub.dev" + source: hosted + version: "1.0.5" remove_emoji_input_formatter: dependency: transitive description: @@ -2063,9 +2076,10 @@ packages: survey_form: dependency: "direct main" description: - path: "../../packages/survey_form" - relative: true - source: path + name: survey_form + sha256: "5e3a08570fe8c97d7dfd0bc6f28b2ae829e2fe66ce987504920c20d091c47c19" + url: "https://pub.dev" + source: hosted version: "1.0.0" sync_http: dependency: transitive @@ -2078,9 +2092,10 @@ packages: sync_service: dependency: "direct main" description: - path: "../../packages/sync_service" - relative: true - source: path + name: sync_service + sha256: ba4720b48bf4a80c3299118000bf7851dae871480b75ab95f0e5a830cddc2e39 + url: "https://pub.dev" + source: hosted version: "0.0.1-dev.1" synchronized: dependency: transitive @@ -2403,5 +2418,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <4.0.0" + dart: ">=3.4.1 <3.9.0" flutter: ">=3.22.0" diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 3d64bd5ab..5f407fb20 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -18,12 +18,8 @@ dependencies: sqlite3_flutter_libs: ^0.5.11+1 path_provider: ^2.1.3 path: ^1.9.0 - digit_ui_components: - git: - url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop - path: ./flutter/digit-ui-components/digit_components - digit_components: ^1.0.2 + digit_ui_components: ^0.0.2-dev.4 + digit_components: ^1.0.3 auto_route: ^8.3.0 flutter_bloc: ^8.1.5 collection: ^1.18.0 @@ -62,19 +58,19 @@ dependencies: qr_flutter: ^4.1.0 disk_space_update: ^0.0.2 sync_service: ^0.0.1-dev.1 - attendance_management: ^1.0.2+4 - digit_scanner: ^1.0.3+1 - inventory_management: ^1.0.3+4 - referral_reconciliation: ^1.0.2+2 - digit_data_model: ^1.0.5-dev.1 - registration_delivery: ^1.0.3+2 + attendance_management: ^1.0.3 + digit_scanner: ^1.0.4 + inventory_management: ^1.0.4 + referral_reconciliation: ^1.0.3 + digit_data_model: ^1.0.5 + registration_delivery: ^1.0.5 disable_battery_optimization: ^1.1.1 - digit_dss: ^1.0.1 - closed_household: ^1.0.1+1 - digit_location_tracker: ^0.0.1-dev.2 + digit_dss: ^1.0.3 + closed_household: ^1.0.3 + digit_location_tracker: ^1.0.0 permission_handler: ^11.3.1 - survey_form: ^0.0.1-dev.2 - complaints: ^0.0.1-dev.2 + survey_form: ^1.0.0 + complaints: ^1.0.0 dev_dependencies: flutter_test: diff --git a/packages/attendance_management/lib/utils/date_util_attendance.dart b/packages/attendance_management/lib/utils/date_util_attendance.dart index 4707998b9..2473fecf7 100644 --- a/packages/attendance_management/lib/utils/date_util_attendance.dart +++ b/packages/attendance_management/lib/utils/date_util_attendance.dart @@ -39,7 +39,7 @@ class AttendanceDateTimeManagement { } static String getDateString(DateTime date) { - final DateFormat formatter = DateFormat('yyyy-MM-dd'); + final DateFormat formatter = DateFormat('dd/MM/yyyy'); return formatter.format(date); } diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index 90dcaa6ec..1ac5cfd25 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "64.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -316,9 +308,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: "1.6-final-dev" + resolved-ref: "1e7467577a9701d396f7e23afbf00065e54c5469" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.3" dart_style: dependency: transitive @@ -347,26 +341,19 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path + name: digit_data_model + sha256: c3bc7299a7d927ebb83d8e91c1d7a8a51f6a1d1295dafeacb642012b72b99a2f + url: "https://pub.dev" + source: hosted version: "1.0.5" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" digit_ui_components: dependency: "direct main" description: - path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" - url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" - source: git - version: "0.0.1+7" + name: digit_ui_components + sha256: "57c4da5237be6025783e7357a02b6b492f02e38f711d674bf46f5f8c8a93ad76" + url: "https://pub.dev" + source: hosted + version: "0.0.2-dev.4" dio: dependency: "direct main" description: @@ -479,46 +466,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" - url: "https://pub.dev" - source: hosted - version: "2.17.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" fixnum: dependency: transitive description: diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index 4f3815bab..be9f0307b 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -11,11 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_ui_components: - git: - url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop - path: ./flutter/digit-ui-components/digit_components + digit_ui_components: ^0.0.2-dev.4 flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 intl: ^0.19.0 @@ -47,7 +43,7 @@ dev_dependencies: dart_mappable_builder: git: url: https://github.com/egovernments/health-campaign-field-worker-app/ - ref: master + ref: 1.6-final-dev path: ./packages/dart_mappable_builder drift_dev: ^2.18.0 build_runner: ^2.4.11 diff --git a/packages/closed_household/lib/pages/closed_household_summary.dart b/packages/closed_household/lib/pages/closed_household_summary.dart index bdb1d7088..52915aadf 100644 --- a/packages/closed_household/lib/pages/closed_household_summary.dart +++ b/packages/closed_household/lib/pages/closed_household_summary.dart @@ -16,7 +16,6 @@ import '../../../widgets/localized.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../widgets/back_navigation_help_header.dart'; -import '../widgets/showcase/showcase_button.dart'; @RoutePage() class ClosedHouseholdSummaryPage extends LocalizedStatefulWidget { @@ -55,7 +54,6 @@ class ClosedHouseholdSummaryPageState enableFixedDigitButton: true, header: const BackNavigationHelpHeaderWidget( showHelp: false, - showcaseButton: ShowcaseButton(), ), footer: DigitCard( margin: const EdgeInsets.only(top: spacer2), @@ -123,11 +121,9 @@ class ClosedHouseholdSummaryPageState SliverToBoxAdapter( child: Column( children: [ - DigitCard( - margin: const EdgeInsets.all(spacer2), - children: [ + DigitCard(margin: const EdgeInsets.all(spacer2), children: [ LabelValueSummary( - padding: EdgeInsets.zero, + padding: EdgeInsets.zero, heading: localizations.translate( i18.closeHousehold.closeHouseholdSummaryLabel), withDivider: false, @@ -171,22 +167,25 @@ class ClosedHouseholdSummaryPageState builder: (context, state) { if (state.qrCodes.isNotEmpty) { return DigitCard( - margin: const EdgeInsets.all(spacer2), + margin: const EdgeInsets.all(spacer2), children: [ - LabelValueSummary( - heading: localizations.translate(i18.closeHousehold - .closeHouseholdVoucherSummaryLabel), - withDivider: false, - items: [ - LabelValueItem( - label: localizations.translate(i18.closeHousehold - .closeHouseholdVoucherCodeLabel), - value: state.qrCodes.first, - labelFlex: 5, + LabelValueSummary( + padding: EdgeInsets.zero, + heading: localizations.translate(i18 + .closeHousehold + .closeHouseholdVoucherSummaryLabel), + withDivider: false, + items: [ + LabelValueItem( + label: localizations.translate(i18 + .closeHousehold + .closeHouseholdVoucherCodeLabel), + value: state.qrCodes.first, + labelFlex: 5, + ), + ], ), - ], - ), - ]); + ]); } else { return const SizedBox(); } diff --git a/packages/closed_household/pubspec.lock b/packages/closed_household/pubspec.lock index 2195892b3..704277232 100644 --- a/packages/closed_household/pubspec.lock +++ b/packages/closed_household/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -380,9 +372,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: "1.6-final-dev" + resolved-ref: "1e7467577a9701d396f7e23afbf00065e54c5469" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.3" dart_style: dependency: transitive @@ -419,40 +413,35 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path + name: digit_data_model + sha256: c3bc7299a7d927ebb83d8e91c1d7a8a51f6a1d1295dafeacb642012b72b99a2f + url: "https://pub.dev" + source: hosted version: "1.0.5" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" digit_scanner: dependency: "direct main" description: - path: "../digit_scanner" - relative: true - source: path + name: digit_scanner + sha256: c33af61ed9ab3d7740fc3c8948af4b763d946cba5e902f8bfb00948d4d69d60a + url: "https://pub.dev" + source: hosted version: "1.0.4" digit_showcase: dependency: "direct main" description: - path: "../digit_showcase" - relative: true - source: path - version: "1.0.1" + name: digit_showcase + sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" + url: "https://pub.dev" + source: hosted + version: "1.0.0" digit_ui_components: dependency: "direct main" description: - path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" - url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" - source: git - version: "0.0.1+7" + name: digit_ui_components + sha256: "57c4da5237be6025783e7357a02b6b492f02e38f711d674bf46f5f8c8a93ad76" + url: "https://pub.dev" + source: hosted + version: "0.0.2-dev.4" dio: dependency: transitive description: @@ -565,46 +554,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" - url: "https://pub.dev" - source: hosted - version: "2.17.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" fixnum: dependency: transitive description: @@ -1380,10 +1329,11 @@ packages: registration_delivery: dependency: "direct main" description: - path: "../registration_delivery" - relative: true - source: path - version: "1.0.4-dev.5" + name: registration_delivery + sha256: "8f6843cb5e1acd5e44026b663a28e80086e791107b9131487c7e3a38e43b1229" + url: "https://pub.dev" + source: hosted + version: "1.0.5" rxdart: dependency: transitive description: @@ -1534,11 +1484,12 @@ packages: source: hosted version: "1.2.0" survey_form: - dependency: "direct overridden" + dependency: transitive description: - path: "../survey_form" - relative: true - source: path + name: survey_form + sha256: "5e3a08570fe8c97d7dfd0bc6f28b2ae829e2fe66ce987504920c20d091c47c19" + url: "https://pub.dev" + source: hosted version: "1.0.0" synchronized: dependency: transitive @@ -1821,5 +1772,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <4.0.0" + dart: ">=3.4.0 <3.9.0" flutter: ">=3.22.0" diff --git a/packages/closed_household/pubspec.yaml b/packages/closed_household/pubspec.yaml index cb21c7af0..27394bd01 100644 --- a/packages/closed_household/pubspec.yaml +++ b/packages/closed_household/pubspec.yaml @@ -11,11 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_ui_components: - git: - url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop - path: ./flutter/digit-ui-components/digit_components + digit_ui_components: ^0.0.2-dev.4 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 reactive_forms: ^17.0.0 @@ -32,14 +28,10 @@ dependencies: uuid: ^4.4.0 recase: ^4.1.0 pluto_grid: ^8.0.0 - digit_scanner: - path: - ../digit_scanner + digit_scanner: ^1.0.4 gs1_barcode_parser: ^1.0.5 auto_route: ^8.1.3 - digit_data_model: - path: - ../digit_data_model + digit_data_model: ^1.0.5 package_info_plus: ^8.0.0 digit_showcase: ^1.0.0 collection: ^1.16.0 @@ -47,9 +39,7 @@ dependencies: stream_transform: ^2.1.0 async: ^2.11.0 formula_parser: ^2.0.1 - registration_delivery: - path: - ../registration_delivery + registration_delivery: ^1.0.5 location: ^6.0.2 @@ -65,7 +55,7 @@ dev_dependencies: dart_mappable_builder: git: url: https://github.com/egovernments/health-campaign-field-worker-app/ - ref: master + ref: 1.6-final-dev path: ./packages/dart_mappable_builder auto_route_generator: ^8.0.0 build_runner: ^2.4.11 diff --git a/packages/complaints/CHANGELOG.md b/packages/complaints/CHANGELOG.md index 315ba0fd9..215f5481b 100644 --- a/packages/complaints/CHANGELOG.md +++ b/packages/complaints/CHANGELOG.md @@ -1,8 +1,15 @@ +## 1.0.0 + +* Upgrade to Flutter 3.22 +* Updated digit_data_model to latest version + ## 0.0.1-dev.1 + * Migrated to digit_ui_components * Updated digit_data_model to latest version ## 0.0.1-dev.1 + * Moved pgr models, blocs, local remote repository from digit_data_model * Updated digit_data_model * PGR Complaints Initial Release \ No newline at end of file diff --git a/packages/complaints/example/pubspec.lock b/packages/complaints/example/pubspec.lock index c8d1d89d2..5cf8bac6d 100644 --- a/packages/complaints/example/pubspec.lock +++ b/packages/complaints/example/pubspec.lock @@ -236,10 +236,10 @@ packages: dependency: transitive description: name: cross_file - sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" url: "https://pub.dev" source: hosted - version: "0.3.3+8" + version: "0.3.4+2" crypto: dependency: transitive description: @@ -280,31 +280,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.6" - db_viewer: - dependency: transitive - description: - name: db_viewer - sha256: "5f7e3cfcde9663321797d8f6f0c876f7c13f0825a2e77ec1ef065656797144d9" - url: "https://pub.dev" - source: hosted - version: "1.1.0" digit_data_model: dependency: transitive description: name: digit_data_model - sha256: "14ebea5f17921081025963b379efd5e16d155dd920d5a42ab2f2f392afb649de" + sha256: c3bc7299a7d927ebb83d8e91c1d7a8a51f6a1d1295dafeacb642012b72b99a2f url: "https://pub.dev" source: hosted - version: "1.0.4-dev.1" + version: "1.0.5" digit_ui_components: - dependency: "direct main" + dependency: transitive description: - path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" - url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" - source: git - version: "0.0.1+7" + name: digit_ui_components + sha256: "57c4da5237be6025783e7357a02b6b492f02e38f711d674bf46f5f8c8a93ad76" + url: "https://pub.dev" + source: hosted + version: "0.0.2-dev.4" dio: dependency: transitive description: @@ -333,18 +324,10 @@ packages: dependency: transitive description: name: drift - sha256: b50a8342c6ddf05be53bda1d246404cbad101b64dc73e8d6d1ac1090d119b4e2 + sha256: c2d073d35ad441730812f4ea05b5dd031fb81c5f9786a4f5fb77ecd6307b6f74 url: "https://pub.dev" source: hosted - version: "2.15.0" - drift_db_viewer: - dependency: transitive - description: - name: drift_db_viewer - sha256: "5ea77858c52b55460a1e8f34ab5f88324621d486717d876fd745765fbc227f3f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" + version: "2.22.1" fake_async: dependency: transitive description: @@ -545,10 +528,10 @@ packages: dependency: transitive description: name: geolocator_android - sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" url: "https://pub.dev" source: hosted - version: "4.3.1" + version: "4.6.1" geolocator_apple: dependency: transitive description: @@ -633,10 +616,10 @@ packages: dependency: transitive description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -1074,14 +1057,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqlite3: dependency: transitive description: name: sqlite3 - sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" + sha256: bb174b3ec2527f9c5f680f73a89af8149dd99782fbb56ea88ad0807c5638f2ed url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.7" sqlite3_flutter_libs: dependency: transitive description: @@ -1230,10 +1221,10 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.3.3" url_launcher_windows: dependency: transitive description: @@ -1246,10 +1237,10 @@ packages: dependency: transitive description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.5.1" vector_graphics: dependency: transitive description: @@ -1310,10 +1301,10 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "1.1.0" web_socket_channel: dependency: transitive description: diff --git a/packages/complaints/example/pubspec.yaml b/packages/complaints/example/pubspec.yaml index ed8ce9cf8..f582f74fe 100644 --- a/packages/complaints/example/pubspec.yaml +++ b/packages/complaints/example/pubspec.yaml @@ -37,11 +37,6 @@ dependencies: cupertino_icons: ^1.0.2 complaints: path: ../ - digit_ui_components: - git: - url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop - path: ./flutter/digit-ui-components/digit_components diff --git a/packages/complaints/lib/data/repositories/oplog/oplog.dart b/packages/complaints/lib/data/repositories/oplog/oplog.dart index 7e79e9ba6..6472721fc 100644 --- a/packages/complaints/lib/data/repositories/oplog/oplog.dart +++ b/packages/complaints/lib/data/repositories/oplog/oplog.dart @@ -3,7 +3,6 @@ import 'dart:async'; import 'package:digit_data_model/data_model.dart'; import 'package:isar/isar.dart'; - import '../../../models/pgr_complaints.dart'; class PgrServiceOpLogManager extends OpLogManager { @@ -60,37 +59,37 @@ class PgrServiceOpLogManager extends OpLogManager { return entriesList; } - //Note: PendingDownSync is not required for PGR Create Oplogs. This creates Mapper Exception issue for checking pending downsync entries of complaints type - // @override - // Future>> getPendingDownSync( - // DataModelType type, { - // required String createdBy, - // }) async { - // final pendingEntries = await isar.opLogs - // .filter() - // .entityTypeEqualTo(type) - // .serverGeneratedIdIsNotNull() - // .syncedUpEqualTo(true) - // .syncedDownEqualTo(false) - // .createdByEqualTo(createdBy) - // .sortByCreatedAt() - // .findAll(); - // - // final entriesList = pendingEntries - // .map((e) { - // final entity = e.getEntity(); - // if ([ - // PgrServiceApplicationStatus.created, - // PgrServiceApplicationStatus.pendingAssignment, - // ].contains(entity.applicationStatus)) { - // return OpLogEntry.fromOpLog(e); - // } - // - // return null; - // }) - // .whereNotNull() - // .toList(); - // - // return entriesList; - // } +//Note: PendingDownSync is not required for PGR Create Oplogs. This creates Mapper Exception issue for checking pending downsync entries of complaints type +// @override +// Future>> getPendingDownSync( +// DataModelType type, { +// required String createdBy, +// }) async { +// final pendingEntries = await isar.opLogs +// .filter() +// .entityTypeEqualTo(type) +// .serverGeneratedIdIsNotNull() +// .syncedUpEqualTo(true) +// .syncedDownEqualTo(false) +// .createdByEqualTo(createdBy) +// .sortByCreatedAt() +// .findAll(); +// +// final entriesList = pendingEntries +// .map((e) { +// final entity = e.getEntity(); +// if ([ +// PgrServiceApplicationStatus.created, +// PgrServiceApplicationStatus.pendingAssignment, +// ].contains(entity.applicationStatus)) { +// return OpLogEntry.fromOpLog(e); +// } +// +// return null; +// }) +// .whereNotNull() +// .toList(); +// +// return entriesList; +// } } diff --git a/packages/complaints/pubspec.lock b/packages/complaints/pubspec.lock index f94eb6cce..20435b65a 100644 --- a/packages/complaints/pubspec.lock +++ b/packages/complaints/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "67.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -300,9 +292,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: "1.6-final-dev" + resolved-ref: "1e7467577a9701d396f7e23afbf00065e54c5469" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.3" dart_style: dependency: transitive @@ -323,26 +317,19 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path + name: digit_data_model + sha256: c3bc7299a7d927ebb83d8e91c1d7a8a51f6a1d1295dafeacb642012b72b99a2f + url: "https://pub.dev" + source: hosted version: "1.0.5" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" digit_ui_components: dependency: "direct main" description: - path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" - url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" - source: git - version: "0.0.1+7" + name: digit_ui_components + sha256: "57c4da5237be6025783e7357a02b6b492f02e38f711d674bf46f5f8c8a93ad76" + url: "https://pub.dev" + source: hosted + version: "0.0.2-dev.4" dio: dependency: "direct main" description: @@ -439,46 +426,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+3" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" - url: "https://pub.dev" - source: hosted - version: "2.17.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" fixnum: dependency: transitive description: @@ -796,7 +743,7 @@ packages: source: hosted version: "0.2.1+1" intl: - dependency: transitive + dependency: "direct main" description: name: intl sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf @@ -812,7 +759,7 @@ packages: source: hosted version: "1.0.5" isar: - dependency: transitive + dependency: "direct main" description: name: isar sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" @@ -884,7 +831,7 @@ packages: source: hosted version: "4.0.0" location: - dependency: transitive + dependency: "direct main" description: name: location sha256: "37ffdadcd4b1498b769824f45ebb4de8ed46663a4a67ac27b33a590ee486579f" diff --git a/packages/complaints/pubspec.yaml b/packages/complaints/pubspec.yaml index 8f8f1c0ad..462456135 100644 --- a/packages/complaints/pubspec.yaml +++ b/packages/complaints/pubspec.yaml @@ -1,7 +1,8 @@ name: complaints description: This package offers filing complaints features, allowing users to file complaints. version: 1.0.0 -homepage: +homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/referral_reconciliation +repository: https://github.com/egovernments/health-campaign-field-worker-app environment: sdk: '>=3.0.0 <4.0.0' @@ -10,16 +11,15 @@ environment: dependencies: flutter: sdk: flutter - digit_ui_components: - git: - url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop - path: ./flutter/digit-ui-components/digit_components + digit_ui_components: ^0.0.2-dev.4 flutter_bloc: ^8.1.1 freezed_annotation: ^2.1.0 build_runner: ^2.2.1 auto_route: ^8.1.3 - digit_data_model: 1.0.4-dev.1 + intl: ^0.19.0 + location: ^6.0.2 + isar: ^3.1.0+1 + digit_data_model: ^1.0.5 dart_mappable: ^4.2.0 group_radio_button: ^1.3.0 reactive_forms: ^17.0.0 @@ -41,7 +41,7 @@ dev_dependencies: dart_mappable_builder: git: url: https://github.com/egovernments/health-campaign-field-worker-app/ - ref: master + ref: 1.6-final-dev path: ./packages/dart_mappable_builder bloc_test: ^9.1.0 mocktail: ^1.0.2 diff --git a/packages/digit_components/CHANGELOG.md b/packages/digit_components/CHANGELOG.md index 93100a196..f22e87447 100644 --- a/packages/digit_components/CHANGELOG.md +++ b/packages/digit_components/CHANGELOG.md @@ -1,121 +1,165 @@ +## 1.0.3 + +* Upgraded to Flutter 3.22 + ## 1.0.2+1 + * Added description field for Labeled Field component ## 1.0.2 + * Added privacy notice component ## 1.0.1+1 + * Changed similar dialogs to a common hideDialog ## 1.0.1 + * Added new loader dialog ## 1.0.0+9 + * Added maximum validation for digit_integer_form_picker ## 1.0.0+8 + * Added close icon button for digit_dialog ## 1.0.0+7 + * Added buttonDisabled for DigitIconButton ## 1.0.0+6 + * Added text direction for DigitIconButton * SelectionBox UI fixes * Details card UI fixes ## 1.0.0+5 + * Added new component details_card ## 1.0.0+4 + * Added new component selected box ## 1.0.0+3 + * Capture and Hide Location Dialog added to utils ## 1.0.0+2 + * DigitTextField component update ## 1.0.0+1 + * Stable release with searchable dropdown fix ## 1.0.0 + * Stable release ## 0.0.3+16 + * Removed flutter_localizations dependency ## 0.0.3+15 + * Updated digit_components to develop branch ## 0.0.3+14 + * Reactive Drop down fix ## 0.0.3+13 + * Fixed empty string issue in searchable_dropdown_field ## 0.0.3+12 + * Downgraded intl to 0.18.0 ## 0.0.3+11 + * Removed flutter localizations dependency ## 0.0.3+10 + * Updated homepage url ## 0.0.3+9 + * Updated homepage url ## 0.0.3+8 + * Updated intl version and added pubspec_override ## 0.0.3+7 + * Updated intl version and added pubspec_override ## 0.0.3+6 + * Updated flutter repository url ## 0.0.3+5 + * Updated flutter sdk version ## 0.0.3+4 + * Updated example folder ## 0.0.3+3 + * Updated intl version 0.18.1 ## 0.0.3+2 + * Updated repository URL and dart doc ## 0.0.3+1 + * Synced digit_components with flutter 3.16.5 version ## 0.0.2+1 + * Updated digit_components missing utils and components ## 0.0.2+0 + * Updated digit_components to the latest version ## 0.0.1+8 + * Updated Images in ReadMe File ## 0.0.1+6 + * Updated Components behaviour in ReadMe File ## 0.0.1+5 + * Example file with Reactive Forms ## 0.0.1+4 + * dart doc added and auto generated files added ## 0.0.1+3 + * example file added ## 0.0.1+2 + * Read Me file modified with Components example ## 0.0.1+1 + * Read Me file added ## 0.0.1 + * Initial Releaase \ No newline at end of file diff --git a/packages/digit_components/pubspec.yaml b/packages/digit_components/pubspec.yaml index c9539eab6..10ea58d9c 100644 --- a/packages/digit_components/pubspec.yaml +++ b/packages/digit_components/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_components description: Digit UI Design specification Flutter widgets. Import this package by adding digit_components in respective pubspec.yaml dependencies. -version: 1.0.2+1 +version: 1.0.3 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_components repository: https://github.com/egovernments/health-campaign-field-worker-app diff --git a/packages/digit_data_model/pubspec.lock b/packages/digit_data_model/pubspec.lock index 416709327..52da34c0e 100644 --- a/packages/digit_data_model/pubspec.lock +++ b/packages/digit_data_model/pubspec.lock @@ -228,9 +228,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: "1.6-final-dev" + resolved-ref: "1e7467577a9701d396f7e23afbf00065e54c5469" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.3" dart_style: dependency: transitive diff --git a/packages/digit_data_model/pubspec.yaml b/packages/digit_data_model/pubspec.yaml index be8fd52c0..5298d5f6a 100644 --- a/packages/digit_data_model/pubspec.yaml +++ b/packages/digit_data_model/pubspec.yaml @@ -1,6 +1,6 @@ name: digit_data_model description: The digit_data_model package is a data modeling library. It defines various classes, enums, and functions. -version: 1.0.5 +version: 1.0.5+1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/digit_data_model repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -38,7 +38,7 @@ dev_dependencies: dart_mappable_builder: git: url: https://github.com/egovernments/health-campaign-field-worker-app/ - ref: master + ref: 1.6-final-dev path: ./packages/dart_mappable_builder isar_generator: ^3.0.5 diff --git a/packages/digit_dss/pubspec.lock b/packages/digit_dss/pubspec.lock index cda4389b4..70d370a71 100644 --- a/packages/digit_dss/pubspec.lock +++ b/packages/digit_dss/pubspec.lock @@ -376,12 +376,11 @@ packages: digit_ui_components: dependency: "direct main" description: - path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" - url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" - source: git - version: "0.0.1+7" + name: digit_ui_components + sha256: "57c4da5237be6025783e7357a02b6b492f02e38f711d674bf46f5f8c8a93ad76" + url: "https://pub.dev" + source: hosted + version: "0.0.2-dev.4" dio: dependency: "direct main" description: diff --git a/packages/digit_dss/pubspec.yaml b/packages/digit_dss/pubspec.yaml index 9236611dc..8b0865af8 100644 --- a/packages/digit_dss/pubspec.yaml +++ b/packages/digit_dss/pubspec.yaml @@ -11,11 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_ui_components: - git: - url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop - path: ./flutter/digit-ui-components/digit_components + digit_ui_components: ^0.0.2-dev.4 flutter_bloc: ^8.1.5 reactive_forms: ^17.0.0 intl: ^0.19.0 @@ -45,7 +41,7 @@ dev_dependencies: dart_mappable_builder: git: url: https://github.com/egovernments/health-campaign-field-worker-app/ - ref: master + ref: 1.6-final-dev path: ./packages/dart_mappable_builder auto_route_generator: ^8.0.0 isar_generator: ^3.1.0+1 diff --git a/packages/digit_scanner/CHANGELOG.md b/packages/digit_scanner/CHANGELOG.md index 6dae0a87b..b627973c4 100644 --- a/packages/digit_scanner/CHANGELOG.md +++ b/packages/digit_scanner/CHANGELOG.md @@ -2,7 +2,7 @@ * Updated to latest package versions * Updated flutter version to 3.22 -* +* Migrated to digit_ui_components ## 1.0.3+1 diff --git a/packages/digit_scanner/example/pubspec.lock b/packages/digit_scanner/example/pubspec.lock index a5842c743..68f0a788d 100644 --- a/packages/digit_scanner/example/pubspec.lock +++ b/packages/digit_scanner/example/pubspec.lock @@ -331,12 +331,11 @@ packages: digit_ui_components: dependency: "direct main" description: - path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" - url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" - source: git - version: "0.0.1+7" + name: digit_ui_components + sha256: "57c4da5237be6025783e7357a02b6b492f02e38f711d674bf46f5f8c8a93ad76" + url: "https://pub.dev" + source: hosted + version: "0.0.2-dev.4" dotted_border: dependency: transitive description: diff --git a/packages/digit_scanner/example/pubspec.yaml b/packages/digit_scanner/example/pubspec.yaml index 326b01ad7..da03c7944 100644 --- a/packages/digit_scanner/example/pubspec.yaml +++ b/packages/digit_scanner/example/pubspec.yaml @@ -38,11 +38,7 @@ dependencies: flutter_bloc: ^8.1.1 digit_scanner: path: ../../digit_scanner - digit_ui_components: - git: - url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop - path: ./flutter/digit-ui-components/digit_components + digit_ui_components: ^0.0.2-dev.4 dev_dependencies: flutter_test: diff --git a/packages/digit_scanner/pubspec.lock b/packages/digit_scanner/pubspec.lock index 153d5d00b..340757dba 100644 --- a/packages/digit_scanner/pubspec.lock +++ b/packages/digit_scanner/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "67.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -25,14 +17,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.4.1" - ansicolor: - dependency: transitive - description: - name: ansicolor - sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" - url: "https://pub.dev" - source: hosted - version: "2.0.3" archive: dependency: transitive description: @@ -353,21 +337,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - dart_mappable: - dependency: transitive - description: - name: dart_mappable - sha256: f69a961ae8589724ebb542e588f228ae844c5f78028899cbe2cc718977c1b382 - url: "https://pub.dev" - source: hosted - version: "4.3.0" - dart_mappable_builder: - dependency: "direct overridden" - description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.3" dart_style: dependency: transitive description: @@ -384,29 +353,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.1" - digit_components: - dependency: "direct overridden" - description: - path: "../digit_components" - relative: true - source: path - version: "1.0.2+1" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" digit_ui_components: dependency: "direct main" description: - path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" - url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" - source: git - version: "0.0.1+7" + name: digit_ui_components + sha256: "57c4da5237be6025783e7357a02b6b492f02e38f711d674bf46f5f8c8a93ad76" + url: "https://pub.dev" + source: hosted + version: "0.0.2-dev.4" dotted_border: dependency: transitive description: @@ -415,14 +369,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - easy_stepper: - dependency: transitive - description: - name: easy_stepper - sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" - url: "https://pub.dev" - source: hosted - version: "0.8.5+1" fake_async: dependency: transitive description: @@ -487,46 +433,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+3" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "9e69806bb3d905aeec3c1242e0e1475de6ea6d48f456af29d598fb229a2b4e5e" - url: "https://pub.dev" - source: hosted - version: "2.18.2" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" fixnum: dependency: transitive description: @@ -572,62 +478,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.13" - flutter_focus_watcher: - dependency: transitive - description: - name: flutter_focus_watcher - sha256: a72ee539ae0237961308a25839887ca93a0b1cb6f87b0d492b139c8fccff8e79 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility: - dependency: transitive - description: - name: flutter_keyboard_visibility - sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" - url: "https://pub.dev" - source: hosted - version: "5.4.1" - flutter_keyboard_visibility_linux: - dependency: transitive - description: - name: flutter_keyboard_visibility_linux - sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_macos: - dependency: transitive - description: - name: flutter_keyboard_visibility_macos - sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_platform_interface: - dependency: transitive - description: - name: flutter_keyboard_visibility_platform_interface - sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_web: - dependency: transitive - description: - name: flutter_keyboard_visibility_web - sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_windows: - dependency: transitive - description: - name: flutter_keyboard_visibility_windows - sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 - url: "https://pub.dev" - source: hosted - version: "1.0.0" flutter_lints: dependency: "direct dev" description: @@ -678,14 +528,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_typeahead: - dependency: transitive - description: - name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 - url: "https://pub.dev" - source: hosted - version: "4.8.0" flutter_web_plugins: dependency: transitive description: flutter @@ -1107,22 +949,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - package_info_plus: - dependency: transitive - description: - name: package_info_plus - sha256: "70c421fe9d9cc1a9a7f3b05ae56befd469fe4f8daa3b484823141a55442d858d" - url: "https://pub.dev" - source: hosted - version: "8.1.2" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: a5ef9986efc7bf772f2696183a3992615baa76c1ffb1189318dd8803778fb05b - url: "https://pub.dev" - source: hosted - version: "3.0.2" path: dependency: "direct main" description: @@ -1219,14 +1045,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - pointer_interceptor: - dependency: transitive - description: - name: pointer_interceptor - sha256: adf7a637f97c077041d36801b43be08559fd4322d2127b3f20bb7be1b9eebc22 - url: "https://pub.dev" - source: hosted - version: "0.9.3+7" pool: dependency: transitive description: @@ -1259,14 +1077,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" - reactive_flutter_typeahead: - dependency: transitive - description: - name: reactive_flutter_typeahead - sha256: a5dbca4b537bd9dde245d4228e1a6ce937c05cd77c57ed45b9c05135540d5f1a - url: "https://pub.dev" - source: hosted - version: "2.1.1" reactive_forms: dependency: "direct main" description: @@ -1275,14 +1085,6 @@ packages: url: "https://pub.dev" source: hosted version: "17.0.1" - remove_emoji_input_formatter: - dependency: transitive - description: - name: remove_emoji_input_formatter - sha256: "82d195984f890de7a8fea936c698848e78c1a67ccefe18db3baf9f7a3bc0177f" - url: "https://pub.dev" - source: hosted - version: "0.0.1+1" shelf: dependency: transitive description: @@ -1448,14 +1250,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" - type_plus: - dependency: transitive - description: - name: type_plus - sha256: d5d1019471f0d38b91603adb9b5fd4ce7ab903c879d2fbf1a3f80a630a03fcc9 - url: "https://pub.dev" - source: hosted - version: "2.1.1" typed_data: dependency: transitive description: diff --git a/packages/digit_scanner/pubspec.yaml b/packages/digit_scanner/pubspec.yaml index 983c6c681..ce9e6f89f 100644 --- a/packages/digit_scanner/pubspec.yaml +++ b/packages/digit_scanner/pubspec.yaml @@ -37,11 +37,7 @@ dependencies: cupertino_icons: ^1.0.2 google_mlkit_barcode_scanning: ^0.12.0 camera: ^0.11.0+1 - digit_ui_components: - git: - url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop - path: ./flutter/digit-ui-components/digit_components + digit_ui_components: ^0.0.2-dev.4 reactive_forms: ^17.0.0 gs1_barcode_parser: ^1.0.5 flutter_bloc: ^8.1.1 diff --git a/packages/inventory_management/lib/pages/record_stock/stock_details.dart b/packages/inventory_management/lib/pages/record_stock/stock_details.dart index df0e72c2b..c6117b1fc 100644 --- a/packages/inventory_management/lib/pages/record_stock/stock_details.dart +++ b/packages/inventory_management/lib/pages/record_stock/stock_details.dart @@ -950,7 +950,6 @@ class StockDetailsPageState extends LocalizedState { i18.stockDetails .quantityOfProductIndicatedOnWaybillLabel, ), - initialValue: '0', onChange: (val) { if (val == '') { field.control.value = '0'; @@ -1067,8 +1066,8 @@ class StockDetailsPageState extends LocalizedState { ), child: IconButton( alignment: Alignment.centerRight, - color: - theme.colorTheme.primary.primary1, + color: theme + .colorTheme.primary.primary1, icon: const Icon(Icons.edit), onPressed: () { //[TODO: Add route to auto_route] diff --git a/packages/inventory_management/lib/pages/reports/report_details.dart b/packages/inventory_management/lib/pages/reports/report_details.dart index 70611f8d0..22e86346d 100644 --- a/packages/inventory_management/lib/pages/reports/report_details.dart +++ b/packages/inventory_management/lib/pages/reports/report_details.dart @@ -157,7 +157,8 @@ class InventoryReportDetailsPageState child: Text( title, maxLines: 1, - style: Theme.of(context).digitTextTheme(context).headingXl, + style: + Theme.of(context).digitTextTheme(context).headingXl, ), ), ), diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index 03d4c8ff1..db72d69b2 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -380,9 +372,10 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + name: dart_mappable_builder + sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e + url: "https://pub.dev" + source: hosted version: "4.2.3" dart_style: dependency: transitive @@ -411,33 +404,27 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path + name: digit_data_model + sha256: c3bc7299a7d927ebb83d8e91c1d7a8a51f6a1d1295dafeacb642012b72b99a2f + url: "https://pub.dev" + source: hosted version: "1.0.5" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" digit_scanner: dependency: "direct main" description: - path: "../digit_scanner" - relative: true - source: path + name: digit_scanner + sha256: c33af61ed9ab3d7740fc3c8948af4b763d946cba5e902f8bfb00948d4d69d60a + url: "https://pub.dev" + source: hosted version: "1.0.4" digit_ui_components: dependency: "direct main" description: - path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" - url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" - source: git - version: "0.0.1+7" + name: digit_ui_components + sha256: "57c4da5237be6025783e7357a02b6b492f02e38f711d674bf46f5f8c8a93ad76" + url: "https://pub.dev" + source: hosted + version: "0.0.2-dev.4" dio: dependency: "direct main" description: @@ -542,46 +529,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+3" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" - url: "https://pub.dev" - source: hosted - version: "2.17.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" fixnum: dependency: transitive description: @@ -1680,5 +1627,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <4.0.0" + dart: ">=3.4.0 <3.9.0" flutter: ">=3.22.0" diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index 3c0a9b4ec..344ede57b 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -11,11 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_ui_components: - git: - url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop - path: ./flutter/digit-ui-components/digit_components + digit_ui_components: ^0.0.2-dev.4 flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 reactive_forms: ^17.0.0 @@ -24,9 +20,7 @@ dependencies: dart_mappable: ^4.2.2 drift: ^2.18.0 auto_route: ^8.1.3 - digit_data_model: - path: - ../digit_data_model + digit_data_model: ^1.0.5 collection: ^1.18.0 dio: ^5.4.3+1 location: ^6.0.2 @@ -39,9 +33,7 @@ dependencies: path: ^1.8.2 drift_db_viewer: ^2.0.0 recase: ^4.1.0 - digit_scanner: - path: - ../digit_scanner + digit_scanner: ^1.0.4 pluto_grid: ^8.0.0 dev_dependencies: diff --git a/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart b/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart index 86bc03776..9c86a67c7 100644 --- a/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart +++ b/packages/referral_reconciliation/lib/pages/search_referral_reconciliations.dart @@ -1,18 +1,18 @@ import 'package:auto_route/auto_route.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:digit_scanner/blocs/scanner.dart'; +import 'package:digit_scanner/router/digit_scanner_router.gm.dart'; import 'package:digit_ui_components/enum/app_enums.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/digit_button.dart'; import 'package:digit_ui_components/widgets/atoms/digit_info_card.dart'; import 'package:digit_ui_components/widgets/atoms/digit_search_bar.dart'; import 'package:digit_ui_components/widgets/scrollable_content.dart'; -import 'package:survey_form/survey_form.dart'; -import 'package:digit_data_model/data_model.dart'; -import 'package:digit_scanner/blocs/scanner.dart'; -import 'package:digit_scanner/router/digit_scanner_router.gm.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart'; import 'package:referral_reconciliation/utils/extensions/extensions.dart'; +import 'package:survey_form/survey_form.dart'; import '../blocs/search_referral_reconciliations.dart'; import '../models/entities/hf_referral.dart'; @@ -106,8 +106,7 @@ class _SearchReferralReconciliationsPageState i18.referralReconciliation .searchReferralsHeader, ), - style: - textTheme.headingXl, + style: textTheme.headingXl, textAlign: TextAlign.left, ), ), @@ -144,7 +143,8 @@ class _SearchReferralReconciliationsPageState SizedBox( height: theme.spacerTheme.spacer2 * 2), - if (searchState.resultsNotFound) + if (searchState.resultsNotFound && + searchController.text.isNotEmpty) InfoCard( title: localizations.translate(i18 .referralReconciliation diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index 3f1d967ae..ed63fd65a 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -380,9 +372,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: "1.6-final-dev" + resolved-ref: "1e7467577a9701d396f7e23afbf00065e54c5469" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.3" dart_style: dependency: transitive @@ -403,33 +397,27 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path + name: digit_data_model + sha256: c3bc7299a7d927ebb83d8e91c1d7a8a51f6a1d1295dafeacb642012b72b99a2f + url: "https://pub.dev" + source: hosted version: "1.0.5" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" digit_scanner: dependency: "direct main" description: - path: "../digit_scanner" - relative: true - source: path + name: digit_scanner + sha256: c33af61ed9ab3d7740fc3c8948af4b763d946cba5e902f8bfb00948d4d69d60a + url: "https://pub.dev" + source: hosted version: "1.0.4" digit_ui_components: dependency: "direct main" description: - path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" - url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" - source: git - version: "0.0.1+7" + name: digit_ui_components + sha256: "57c4da5237be6025783e7357a02b6b492f02e38f711d674bf46f5f8c8a93ad76" + url: "https://pub.dev" + source: hosted + version: "0.0.2-dev.4" dio: dependency: "direct main" description: @@ -526,46 +514,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" - url: "https://pub.dev" - source: hosted - version: "2.17.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" fixnum: dependency: transitive description: @@ -1458,9 +1406,10 @@ packages: survey_form: dependency: "direct main" description: - path: "../survey_form" - relative: true - source: path + name: survey_form + sha256: "5e3a08570fe8c97d7dfd0bc6f28b2ae829e2fe66ce987504920c20d091c47c19" + url: "https://pub.dev" + source: hosted version: "1.0.0" synchronized: dependency: transitive diff --git a/packages/referral_reconciliation/pubspec.yaml b/packages/referral_reconciliation/pubspec.yaml index 835e29495..0a1746511 100644 --- a/packages/referral_reconciliation/pubspec.yaml +++ b/packages/referral_reconciliation/pubspec.yaml @@ -11,11 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_ui_components: - git: - url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop - path: ./flutter/digit-ui-components/digit_components + digit_ui_components: ^0.0.2-dev.4 flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 reactive_forms: ^17.0.0 @@ -35,18 +31,12 @@ dependencies: sqlite3_flutter_libs: ^0.5.10 path_provider: ^2.0.11 path: ^1.8.2 - digit_scanner: - path: - ../digit_scanner + digit_scanner: ^1.0.4 group_radio_button: ^1.3.0 flutter_keyboard_visibility: ^5.4.1 - digit_data_model: - path: - ../digit_data_model + digit_data_model: ^1.0.5 stream_transform: ^2.1.0 - survey_form: - path: - ../survey_form + survey_form: ^1.0.0 dev_dependencies: @@ -59,7 +49,11 @@ dev_dependencies: drift_dev: ^2.14.1 bloc_test: ^9.1.0 mocktail: ^1.0.2 - dart_mappable_builder: ^4.2.2 + dart_mappable_builder: + git: + url: https://github.com/egovernments/health-campaign-field-worker-app/ + ref: 1.6-final-dev + path: ./packages/dart_mappable_builder auto_route_generator: ^8.0.0 flutter: diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration_delivery/CHANGELOG.md index 0a6edbfe3..f8e5da736 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration_delivery/CHANGELOG.md @@ -1,4 +1,4 @@ -## 1.0.4 +## 1.0.5 * Upgrade to Flutter 3.22 * Updated latest version's of digit_data_model, survey_form, digit_scanner diff --git a/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart b/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart index d6daaca5f..c0972ac55 100644 --- a/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart +++ b/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart @@ -79,14 +79,14 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { clientReferenceId: individualClientReferenceIds.map((e) => e.toString()).toList())); - final List householdMembers = - await fetchHouseholdMembersBulk( + householdMembersList = await fetchHouseholdMembersBulk( individualClientReferenceIds, null, ); - final houseHoldIds = - householdMembers.map((e) => e.householdClientReferenceId!).toList(); + final houseHoldIds = householdMembersList + .map((e) => e.householdClientReferenceId!) + .toList(); householdList = await household.search( HouseholdSearchModel( @@ -94,12 +94,32 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { ), ); + individualsList = await individual.search( + IndividualSearchModel( + clientReferenceId: householdMembersList + .map((e) => e.individualClientReferenceId.toString()) + .toList(), + ), + ); + + individualClientReferenceIds = householdMembersList + .map((e) => e.individualClientReferenceId.toString()) + .toList(); + projectBeneficiariesList = await projectBeneficiary.search( ProjectBeneficiarySearchModel( - projectId: [RegistrationDeliverySingleton().projectId.toString()], + projectId: [ + event.globalSearchParams.filter!.contains(Status.registered.name) + ? RegistrationDeliverySingleton().projectId.toString() + : '' + ], beneficiaryClientReferenceId: individualClientReferenceIds.map((e) => e).toList())); + individualsList = await individual.search( + IndividualSearchModel(clientReferenceId: individualClientReferenceIds), + ); + List tasksRelated = await _processTasksAndRelatedData( projectBeneficiariesList, taskList, sideEffectsList, referralsList); @@ -108,7 +128,7 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { referralsList = tasksRelated[2]; await _processHouseholdEntries( - householdMembers, + householdMembersList, householdList, individualsList, projectBeneficiariesList, diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index 1297e03a7..18167ca45 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -104,6 +104,7 @@ class _HouseholdOverviewPageState label: localizations.translate( '${RegistrationDeliverySingleton().selectedProject!.name}_${i18.memberCard.deliverDetailsUpdateLabel}', ), + capitalizeLetters: false, isDisabled: state .householdMemberWrapper .tasks diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart index 7e436e4f7..93f41c144 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart @@ -5,6 +5,7 @@ import 'package:digit_scanner/blocs/scanner.dart'; import 'package:digit_scanner/pages/qr_scanner.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/utils/date_utils.dart'; import 'package:digit_ui_components/widgets/atoms/digit_dob_picker.dart'; import 'package:digit_ui_components/widgets/atoms/selection_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; @@ -120,7 +121,11 @@ class IndividualDetailsPageState extends LocalizedState { size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, onPressed: () async { - if (form.control(_dobKey).value == null) { + final age = DigitDateUtils.calculateAge( + form.control(_dobKey).value as DateTime, + ); + if ((age.years == 0 && age.months == 0) || + age.years >= 150 && age.months > 0) { form.control(_dobKey).setErrors({'': true}); } if (form.control(_idTypeKey).value == null) { @@ -492,11 +497,20 @@ class IndividualDetailsPageState extends LocalizedState { .translate(i18.common.corecommonRequired) : null, initialDate: before150Years, + initialValue: getInitialDateValue(form), onChangeOfFormControl: (value) { - if (value != null) { - setState(() { - form.control(_dobKey).setErrors({'': false}); - }); + if (value == null) { + form.control(_dobKey).setErrors({'': true}); + } else { + DigitDOBAgeConvertor age = + DigitDateUtils.calculateAge(value); + if ((age.years == 0 && age.months == 0) || + age.months > 11 || + (age.years >= 150 && age.months >= 0)) { + form.control(_dobKey).setErrors({'': true}); + } else { + form.control(_dobKey).removeError(''); + } } // Handle changes to the control's value here form.control(_dobKey).value = value; @@ -836,4 +850,13 @@ class IndividualDetailsPageState extends LocalizedState { (element) => element.toLowerCase() == individual?.gender?.name, ); } + + getInitialDateValue(FormGroup form) { + var date = form.control(_dobKey).value != null + ? DateFormat(Constants().dateTimeExtFormat) + .format(form.control(_dobKey).value) + : null; + + return date; + } } diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index 4571197cd..b314e34ff 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -218,6 +218,7 @@ class _SearchBeneficiaryPageState label: '${localizations.translate(getStatus(selectedFilters[index]))}' ' (${searchHouseholdsState.totalResults})', + capitalizedFirstLetter: false, onItemDelete: () { setState(() { selectedFilters.remove( diff --git a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart index 58d03883d..8fef436e6 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart @@ -50,6 +50,7 @@ class BeneficiaryCard extends StatelessWidget { Status.administeredSuccess.toValue() ? '${RegistrationDeliverySingleton().selectedProject!.name}_${status.toString()}' : status.toString()), + capitalizeLetters: false, textColor: theme.colorScheme.onSurfaceVariant, iconColor: theme.colorScheme.onSurfaceVariant, isDisabled: true, diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index 447a964bf..e027ca226 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -380,9 +372,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: "1.6-final-dev" + resolved-ref: "1e7467577a9701d396f7e23afbf00065e54c5469" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.3" dart_style: dependency: transitive @@ -411,40 +405,35 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path + name: digit_data_model + sha256: c3bc7299a7d927ebb83d8e91c1d7a8a51f6a1d1295dafeacb642012b72b99a2f + url: "https://pub.dev" + source: hosted version: "1.0.5" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" digit_scanner: dependency: "direct main" description: - path: "../digit_scanner" - relative: true - source: path + name: digit_scanner + sha256: c33af61ed9ab3d7740fc3c8948af4b763d946cba5e902f8bfb00948d4d69d60a + url: "https://pub.dev" + source: hosted version: "1.0.4" digit_showcase: dependency: "direct main" description: - path: "../digit_showcase" - relative: true - source: path - version: "1.0.1" + name: digit_showcase + sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" + url: "https://pub.dev" + source: hosted + version: "1.0.0" digit_ui_components: dependency: "direct main" description: - path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" - url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" - source: git - version: "0.0.1+7" + name: digit_ui_components + sha256: "57c4da5237be6025783e7357a02b6b492f02e38f711d674bf46f5f8c8a93ad76" + url: "https://pub.dev" + source: hosted + version: "0.0.2-dev.4" dio: dependency: "direct main" description: @@ -557,46 +546,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+2" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" - url: "https://pub.dev" - source: hosted - version: "2.17.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" fixnum: dependency: transitive description: @@ -1513,9 +1462,10 @@ packages: survey_form: dependency: "direct main" description: - path: "../survey_form" - relative: true - source: path + name: survey_form + sha256: "5e3a08570fe8c97d7dfd0bc6f28b2ae829e2fe66ce987504920c20d091c47c19" + url: "https://pub.dev" + source: hosted version: "1.0.0" synchronized: dependency: transitive @@ -1782,5 +1732,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <4.0.0" + dart: ">=3.4.0 <3.9.0" flutter: ">=3.22.0" diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index be150a5db..bcb76d2e8 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -1,6 +1,6 @@ name: registration_delivery description: This package enables health facility workers to register a household and individual members and deliver the resources. -version: 1.0.4-dev.5 +version: 1.0.5 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/registration_delivery repository: https://github.com/egovernments/health-campaign-field-worker-app @@ -11,11 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_ui_components: - git: - url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop - path: ./flutter/digit-ui-components/digit_components + digit_ui_components: ^0.0.2-dev.4 flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 reactive_forms: ^17.0.0 @@ -24,9 +20,7 @@ dependencies: dart_mappable: ^4.2.2 drift: ^2.18.0 auto_route: ^8.1.3 - digit_data_model: - path: - ../digit_data_model + digit_data_model: ^1.0.5 collection: ^1.18.0 dio: ^5.4.3+1 location: ^6.0.2 @@ -34,9 +28,7 @@ dependencies: uuid: ^4.4.0 recase: ^4.1.0 pluto_grid: ^8.0.0 - digit_scanner: - path: - ../digit_scanner + digit_scanner: ^1.0.4 fluttertoast: ^8.1.2 overlay_builder: ^1.1.0 sqlite3_flutter_libs: ^0.5.10 @@ -49,9 +41,7 @@ dependencies: async: ^2.11.0 formula_parser: ^2.0.1 flutter_keyboard_visibility: ^5.4.1 - survey_form: - path: - ../survey_form + survey_form: ^1.0.0 dev_dependencies: flutter_test: @@ -63,7 +53,11 @@ dev_dependencies: bloc_test: ^9.1.0 mocktail: ^1.0.2 build_runner: ^2.4.11 - dart_mappable_builder: ^4.2.2 + dart_mappable_builder: + git: + url: https://github.com/egovernments/health-campaign-field-worker-app/ + ref: 1.6-final-dev + path: ./packages/dart_mappable_builder auto_route_generator: ^8.0.0 flutter: diff --git a/packages/survey_form/example/pubspec.lock b/packages/survey_form/example/pubspec.lock index 036e62528..b71a66a16 100644 --- a/packages/survey_form/example/pubspec.lock +++ b/packages/survey_form/example/pubspec.lock @@ -276,19 +276,19 @@ packages: digit_data_model: dependency: transitive description: - path: "../../digit_data_model" - relative: true - source: path + name: digit_data_model + sha256: c3bc7299a7d927ebb83d8e91c1d7a8a51f6a1d1295dafeacb642012b72b99a2f + url: "https://pub.dev" + source: hosted version: "1.0.5" digit_ui_components: dependency: "direct main" description: - path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" - url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" - source: git - version: "0.0.1+7" + name: digit_ui_components + sha256: "57c4da5237be6025783e7357a02b6b492f02e38f711d674bf46f5f8c8a93ad76" + url: "https://pub.dev" + source: hosted + version: "0.0.2-dev.4" dio: dependency: transitive description: diff --git a/packages/survey_form/example/pubspec.yaml b/packages/survey_form/example/pubspec.yaml index 7b4364417..efb21d3b9 100644 --- a/packages/survey_form/example/pubspec.yaml +++ b/packages/survey_form/example/pubspec.yaml @@ -28,11 +28,7 @@ environment: # the latest version available on pub.dev. To see which dependencies have newer # versions available, run `flutter pub outdated`. dependencies: - digit_ui_components: - git: - url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop - path: ./flutter/digit-ui-components/digit_components + digit_ui_components: ^0.0.2-dev.4 survey_form: path: ../ diff --git a/packages/survey_form/pubspec.lock b/packages/survey_form/pubspec.lock index 2f7bd284a..076ded7c8 100644 --- a/packages/survey_form/pubspec.lock +++ b/packages/survey_form/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "67.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -316,9 +308,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "../dart_mappable_builder" - relative: true - source: path + path: "packages/dart_mappable_builder" + ref: "1.6-final-dev" + resolved-ref: "1e7467577a9701d396f7e23afbf00065e54c5469" + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.3" dart_style: dependency: transitive @@ -339,26 +333,19 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path + name: digit_data_model + sha256: c3bc7299a7d927ebb83d8e91c1d7a8a51f6a1d1295dafeacb642012b72b99a2f + url: "https://pub.dev" + source: hosted version: "1.0.5" - digit_firebase_services: - dependency: "direct overridden" - description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" digit_ui_components: dependency: "direct main" description: - path: "flutter/digit-ui-components/digit_components" - ref: develop - resolved-ref: "2cf22645849e58166fe78633d949569e1f138e97" - url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" - source: git - version: "0.0.1+7" + name: digit_ui_components + sha256: "57c4da5237be6025783e7357a02b6b492f02e38f711d674bf46f5f8c8a93ad76" + url: "https://pub.dev" + source: hosted + version: "0.0.2-dev.4" dio: dependency: "direct main" description: @@ -463,46 +450,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+3" - firebase_core: - dependency: transitive - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 - url: "https://pub.dev" - source: hosted - version: "5.3.1" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" - url: "https://pub.dev" - source: hosted - version: "2.17.5" - firebase_crashlytics: - dependency: transitive - description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" - url: "https://pub.dev" - source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" - url: "https://pub.dev" - source: hosted - version: "3.6.35" fixnum: dependency: transitive description: diff --git a/packages/survey_form/pubspec.yaml b/packages/survey_form/pubspec.yaml index 04d148fef..8b5705529 100644 --- a/packages/survey_form/pubspec.yaml +++ b/packages/survey_form/pubspec.yaml @@ -1,8 +1,8 @@ name: survey_form description: "This package enables supervisors to monitor certain activities and record observations according to defined set of questions." version: 1.0.0 -homepage: "https://github.com/egovernments/health-campaign-field-worker-app/tree/checklist-package/packages/survey_form" -repository: "https://github.com/egovernments/health-campaign-field-worker-app" +homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/survey_form +repository: https://github.com/egovernments/health-campaign-field-worker-app environment: sdk: '>=3.0.0 <4.0.0' @@ -11,11 +11,7 @@ environment: dependencies: flutter: sdk: flutter - digit_ui_components: - git: - url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: develop - path: ./flutter/digit-ui-components/digit_components + digit_ui_components: ^0.0.2-dev.4 flutter_bloc: ^8.1.5 freezed_annotation: ^2.4.1 reactive_forms: ^17.0.0 @@ -26,9 +22,7 @@ dependencies: dart_mappable: ^4.2.0 drift: ^2.0.0 auto_route: ^8.1.3 - digit_data_model: - path: - ../digit_data_model + digit_data_model: ^1.0.5 collection: ^1.16.0 location: ^6.0.2 dio: ^5.1.2 @@ -45,7 +39,7 @@ dev_dependencies: dart_mappable_builder: git: url: https://github.com/egovernments/health-campaign-field-worker-app/ - ref: master + ref: 1.6-final-dev path: ./packages/dart_mappable_builder drift_dev: ^2.14.1 auto_route_generator: ^8.0.0 diff --git a/packages/sync_service/pubspec.yaml b/packages/sync_service/pubspec.yaml index d6dba781a..418269925 100644 --- a/packages/sync_service/pubspec.yaml +++ b/packages/sync_service/pubspec.yaml @@ -27,7 +27,7 @@ dependencies: flutter_background_service: ^5.0.5 provider: ^6.1.2 flutter_secure_storage: ^9.2.2 - digit_data_model: ^1.0.4 + digit_data_model: ^1.0.5 dev_dependencies: flutter_test: @@ -42,7 +42,7 @@ dev_dependencies: dart_mappable_builder: git: url: https://github.com/egovernments/health-campaign-field-worker-app/ - ref: master + ref: 1.6-final-dev path: ./packages/dart_mappable_builder # For information on the generic Dart part of this file, see the From c87ce1066d15ede4253eb6e8a2e182fdf07db521 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Wed, 18 Dec 2024 17:42:17 +0530 Subject: [PATCH 222/241] registration_delivery package update --- apps/health_campaign_field_worker_app/pubspec.lock | 4 ++-- apps/health_campaign_field_worker_app/pubspec.yaml | 2 +- packages/registration_delivery/CHANGELOG.md | 4 ++++ .../lib/pages/beneficiary/household_overview.dart | 1 + packages/registration_delivery/pubspec.yaml | 2 +- 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 8720984cd..aa82b3848 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -1856,10 +1856,10 @@ packages: dependency: "direct main" description: name: registration_delivery - sha256: "8f6843cb5e1acd5e44026b663a28e80086e791107b9131487c7e3a38e43b1229" + sha256: d40054149a0dc54872c11547a25addbd09a139d3f76b6bc50e58b1741a7d8002 url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.5+1" remove_emoji_input_formatter: dependency: transitive description: diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 5f407fb20..683a7ad8c 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -63,7 +63,7 @@ dependencies: inventory_management: ^1.0.4 referral_reconciliation: ^1.0.3 digit_data_model: ^1.0.5 - registration_delivery: ^1.0.5 + registration_delivery: ^1.0.5+1 disable_battery_optimization: ^1.1.1 digit_dss: ^1.0.3 closed_household: ^1.0.3 diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration_delivery/CHANGELOG.md index f8e5da736..e47069469 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration_delivery/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.5+1 + +* householdOverViewActionText localization fix + ## 1.0.5 * Upgrade to Flutter 3.22 diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index 18167ca45..436095d6a 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -145,6 +145,7 @@ class _HouseholdOverviewPageState label: localizations.translate( '${RegistrationDeliverySingleton().selectedProject!.name}_${i18.householdOverView.householdOverViewActionText}', ), + capitalizeLetters: false, type: DigitButtonType.primary, size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index bcb76d2e8..f3feba4d1 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -1,6 +1,6 @@ name: registration_delivery description: This package enables health facility workers to register a household and individual members and deliver the resources. -version: 1.0.5 +version: 1.0.5+1 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/registration_delivery repository: https://github.com/egovernments/health-campaign-field-worker-app From ebf8835ebb060434e3535cf01fb65c42c5caa279 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Wed, 18 Dec 2024 17:51:56 +0530 Subject: [PATCH 223/241] registration_delivery package update --- apps/health_campaign_field_worker_app/pubspec.lock | 4 ++-- apps/health_campaign_field_worker_app/pubspec.yaml | 2 +- packages/registration_delivery/CHANGELOG.md | 4 ++++ .../lib/pages/beneficiary/household_overview.dart | 6 +++--- .../registration_delivery/lib/pages/search_beneficiary.dart | 2 +- .../lib/widgets/beneficiary/beneficiary_card.dart | 2 +- .../lib/widgets/status_filter/status_filter.dart | 2 +- packages/registration_delivery/pubspec.yaml | 2 +- 8 files changed, 14 insertions(+), 10 deletions(-) diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index aa82b3848..dff3b3736 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -1856,10 +1856,10 @@ packages: dependency: "direct main" description: name: registration_delivery - sha256: d40054149a0dc54872c11547a25addbd09a139d3f76b6bc50e58b1741a7d8002 + sha256: "4dd6e6781e367edf806d838e58771dff838eeff0d444534079a468789cadfbcb" url: "https://pub.dev" source: hosted - version: "1.0.5+1" + version: "1.0.5+2" remove_emoji_input_formatter: dependency: transitive description: diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 683a7ad8c..c85e790ba 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -63,7 +63,7 @@ dependencies: inventory_management: ^1.0.4 referral_reconciliation: ^1.0.3 digit_data_model: ^1.0.5 - registration_delivery: ^1.0.5+1 + registration_delivery: ^1.0.5+2 disable_battery_optimization: ^1.1.1 digit_dss: ^1.0.3 closed_household: ^1.0.3 diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration_delivery/CHANGELOG.md index e47069469..bcad861e0 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration_delivery/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.5+2 + +* Action label and status change with projectType + ## 1.0.5+1 * householdOverViewActionText localization fix diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart index 436095d6a..a6ea0f158 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart @@ -102,7 +102,7 @@ class _HouseholdOverviewPageState vertical: spacer2), child: DigitButton( label: localizations.translate( - '${RegistrationDeliverySingleton().selectedProject!.name}_${i18.memberCard.deliverDetailsUpdateLabel}', + '${RegistrationDeliverySingleton().selectedProject!.projectType}_${i18.memberCard.deliverDetailsUpdateLabel}', ), capitalizeLetters: false, isDisabled: state @@ -143,7 +143,7 @@ class _HouseholdOverviewPageState ) : DigitButton( label: localizations.translate( - '${RegistrationDeliverySingleton().selectedProject!.name}_${i18.householdOverView.householdOverViewActionText}', + '${RegistrationDeliverySingleton().selectedProject!.projectType}_${i18.householdOverView.householdOverViewActionText}', ), capitalizeLetters: false, type: DigitButtonType.primary, @@ -837,7 +837,7 @@ class _HouseholdOverviewPageState textLabel = state.householdMemberWrapper.tasks?.isNotEmpty ?? false ? getTaskStatus(state.householdMemberWrapper.tasks ?? []).toValue() == Status.administeredSuccess.toValue() - ? '${RegistrationDeliverySingleton().selectedProject!.name}_${getTaskStatus(state.householdMemberWrapper.tasks ?? []).toValue()}' + ? '${RegistrationDeliverySingleton().selectedProject!.projectType}_${getTaskStatus(state.householdMemberWrapper.tasks ?? []).toValue()}' : getTaskStatus(state.householdMemberWrapper.tasks ?? []) .toValue() : Status.registered.toValue(); diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration_delivery/lib/pages/search_beneficiary.dart index b314e34ff..46f5e156d 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration_delivery/lib/pages/search_beneficiary.dart @@ -548,7 +548,7 @@ class _SearchBeneficiaryPageState .key; if (mappedStatus != null) { return mappedStatus == Status.administeredSuccess.toValue() - ? '${RegistrationDeliverySingleton().selectedProject!.name}_$mappedStatus' + ? '${RegistrationDeliverySingleton().selectedProject!.projectType}_$mappedStatus' : mappedStatus; } else { return selectedFilter; diff --git a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart index 8fef436e6..98bd88e13 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart +++ b/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart @@ -48,7 +48,7 @@ class BeneficiaryCard extends StatelessWidget { label: RegistrationDeliveryLocalization.of(context) .translate(status.toString() == Status.administeredSuccess.toValue() - ? '${RegistrationDeliverySingleton().selectedProject!.name}_${status.toString()}' + ? '${RegistrationDeliverySingleton().selectedProject!.projectType}_${status.toString()}' : status.toString()), capitalizeLetters: false, textColor: theme.colorScheme.onSurfaceVariant, diff --git a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart index 6706f7473..3d2ef9bf6 100644 --- a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart +++ b/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart @@ -105,7 +105,7 @@ class StatusFilterState extends LocalizedState { valueMapper: (value) { return localizations.translate(value == Status.administeredSuccess - ? '${RegistrationDeliverySingleton().selectedProject!.name}_${value.toValue().toString()}' + ? '${RegistrationDeliverySingleton().selectedProject!.projectType}_${value.toValue().toString()}' : value.toValue().toString()); }, ), diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index f3feba4d1..e69849bfa 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -1,6 +1,6 @@ name: registration_delivery description: This package enables health facility workers to register a household and individual members and deliver the resources. -version: 1.0.5+1 +version: 1.0.5+2 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/registration_delivery repository: https://github.com/egovernments/health-campaign-field-worker-app From 7ed52ed744927c41f0a8c03d02814f003cc6d32a Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Wed, 18 Dec 2024 19:35:33 +0530 Subject: [PATCH 224/241] code rabbit comments resolved --- .../data/repositories/local/localization.dart | 3 +- .../lib/data/sync_registry.dart | 149 ++++++++++-------- .../lib/pages/login.dart | 2 +- .../lib/utils/localization_delegates.dart | 1 - .../lib/utils/utils.dart | 2 +- .../network_manager_provider_wrapper.dart | 6 - 6 files changed, 87 insertions(+), 76 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart index 0d8244287..ca1667f14 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart @@ -104,9 +104,10 @@ class LocalizationLocalRepository { FutureOr create( List result, LocalSqlDataStore sql) async { + if (result.isEmpty) return; return retryLocalCallOperation(() async { return sql.batch((batch) { - batch.insertAll(sql.localization, result); + batch.insertAllOnConflictUpdate(sql.localization, result); }); }); } diff --git a/apps/health_campaign_field_worker_app/lib/data/sync_registry.dart b/apps/health_campaign_field_worker_app/lib/data/sync_registry.dart index 518f786b5..331e08373 100644 --- a/apps/health_campaign_field_worker_app/lib/data/sync_registry.dart +++ b/apps/health_campaign_field_worker_app/lib/data/sync_registry.dart @@ -3,6 +3,7 @@ import 'package:complaints/models/pgr_complaints.dart'; import 'package:complaints/models/pgr_complaints_response.dart'; import 'package:digit_components/utils/app_logger.dart'; import 'package:digit_data_model/data_model.dart'; +import 'package:flutter/cupertino.dart'; import 'package:sync_service/data/repositories/sync/sync_up.dart'; class CustomSyncRegistry implements SyncUpOperation { @@ -12,17 +13,29 @@ class CustomSyncRegistry implements SyncUpOperation { @override Future update(List entities, LocalRepository local) async { - await remote.bulkUpdate(entities); + try { + await remote.bulkUpdate(entities); + } catch (e) { + debugPrint('$e'); + } } @override Future delete(List entities, LocalRepository local) async { - await remote.bulkDelete(entities); + try { + await remote.bulkDelete(entities); + } catch (e) { + debugPrint('$e'); + } } @override Future singleCreate(EntityModel entity, LocalRepository local) async { - await remote.singleCreate(entity); + try { + await remote.singleCreate(entity); + } catch (e) { + debugPrint('$e'); + } } @override @@ -34,76 +47,80 @@ class CustomSyncRegistry implements SyncUpOperation { operationGroupedEntity, required MapEntry>> typeGroupedEntity}) async { - switch (typeGroupedEntity.key) { - case DataModelType.complaints: - for (final entity in entities) { - if (remote is PgrServiceRemoteRepository && - entity is PgrServiceModel) { - final response = await remote.create(entity); - final responseData = response.data; - if (responseData is! Map) { - AppLogger.instance.error( - title: 'NetworkManager : PgrServiceRemoteRepository', - message: responseData, - stackTrace: StackTrace.current, - ); - continue; - } + try { + switch (typeGroupedEntity.key) { + case DataModelType.complaints: + for (final entity in entities) { + if (remote is PgrServiceRemoteRepository && + entity is PgrServiceModel) { + final response = await remote.create(entity); + final responseData = response.data; + if (responseData is! Map) { + AppLogger.instance.error( + title: 'NetworkManager : PgrServiceRemoteRepository', + message: responseData, + stackTrace: StackTrace.current, + ); + continue; + } - PgrServiceCreateResponseModel pgrServiceCreateResponseModel; - PgrComplaintResponseModel pgrComplaintModel; - try { - pgrServiceCreateResponseModel = - PgrServiceCreateResponseModelMapper.fromMap( - responseData, - ); - pgrComplaintModel = - pgrServiceCreateResponseModel.serviceWrappers.first; - } catch (e) { - rethrow; - } + PgrServiceCreateResponseModel pgrServiceCreateResponseModel; + PgrComplaintResponseModel pgrComplaintModel; + try { + pgrServiceCreateResponseModel = + PgrServiceCreateResponseModelMapper.fromMap( + responseData, + ); + pgrComplaintModel = + pgrServiceCreateResponseModel.serviceWrappers.first; + } catch (e) { + rethrow; + } - final service = pgrComplaintModel.service; - final serviceRequestId = service.serviceRequestId; + final service = pgrComplaintModel.service; + final serviceRequestId = service.serviceRequestId; - if (serviceRequestId == null || serviceRequestId.isEmpty) { - AppLogger.instance.error( - title: 'NetworkManager : PgrServiceRemoteRepository', - message: 'Service Request ID is null', - stackTrace: StackTrace.current, - ); - continue; - } - - await local.markSyncedUp( - entry: entry.firstWhere((element) => - element.clientReferenceId == entity.clientReferenceId), - clientReferenceId: entity.clientReferenceId, - nonRecoverableError: entity.nonRecoverableError, - ); + if (serviceRequestId == null || serviceRequestId.isEmpty) { + AppLogger.instance.error( + title: 'NetworkManager : PgrServiceRemoteRepository', + message: 'Service Request ID is null', + stackTrace: StackTrace.current, + ); + continue; + } - await local.opLogManager.updateServerGeneratedIds( - model: UpdateServerGeneratedIdModel( + await local.markSyncedUp( + entry: entry.firstWhere((element) => + element.clientReferenceId == entity.clientReferenceId), clientReferenceId: entity.clientReferenceId, - serverGeneratedId: serviceRequestId, - dataOperation: operationGroupedEntity.key, - rowVersion: entity.rowVersion, - ), - ); + nonRecoverableError: entity.nonRecoverableError, + ); - await local.update( - entity.copyWith( - serviceRequestId: serviceRequestId, - id: service.id, - applicationStatus: service.applicationStatus, - accountId: service.accountId, - ), - createOpLog: false, - ); + await local.opLogManager.updateServerGeneratedIds( + model: UpdateServerGeneratedIdModel( + clientReferenceId: entity.clientReferenceId, + serverGeneratedId: serviceRequestId, + dataOperation: operationGroupedEntity.key, + rowVersion: entity.rowVersion, + ), + ); + + await local.update( + entity.copyWith( + serviceRequestId: serviceRequestId, + id: service.id, + applicationStatus: service.applicationStatus, + accountId: service.accountId, + ), + createOpLog: false, + ); + } } - } - default: - await remote.bulkCreate(entities); + default: + await remote.bulkCreate(entities); + } + } catch (e) { + debugPrint('$e'); } } diff --git a/apps/health_campaign_field_worker_app/lib/pages/login.dart b/apps/health_campaign_field_worker_app/lib/pages/login.dart index cfba689e7..cb1277d20 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/login.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/login.dart @@ -234,7 +234,7 @@ class _LoginPageState extends LocalizedState { ), _password: FormControl( validators: [Validators.required], - value: 'eGov@123', + value: '', ), _privacyCheck: FormControl( value: false, diff --git a/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart b/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart index 3ac69b4c7..4da7c38a1 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart @@ -20,7 +20,6 @@ import 'package:referral_reconciliation/blocs/app_localization.dart' as referral_reconciliation_localization; import 'package:registration_delivery/blocs/app_localization.dart' as registration_delivery_localization; -import 'package:digit_components/blocs/localization.dart' as component_localization; import 'package:survey_form/blocs/app_localization.dart' as survey_form_localization; diff --git a/apps/health_campaign_field_worker_app/lib/utils/utils.dart b/apps/health_campaign_field_worker_app/lib/utils/utils.dart index fbcdb809f..fe1c005f5 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/utils.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/utils.dart @@ -100,7 +100,7 @@ performBackgroundService({ if (stopService) { if (isRunning) { - if (!isBackground && context != null) { + if (!isBackground && context != null && context.mounted) { if (context.mounted) { DigitToast.show( context, diff --git a/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart b/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart index 0e0af70d8..7b00ea572 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart +++ b/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart @@ -15,15 +15,9 @@ import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:inventory_management/inventory_management.dart'; -import 'package:inventory_management/inventory_management.dart'; -import 'package:inventory_management/inventory_management.dart'; import 'package:isar/isar.dart'; import 'package:provider/provider.dart'; import 'package:referral_reconciliation/referral_reconciliation.dart'; -import 'package:referral_reconciliation/referral_reconciliation.dart'; -import 'package:referral_reconciliation/referral_reconciliation.dart'; -import 'package:registration_delivery/registration_delivery.dart'; -import 'package:registration_delivery/registration_delivery.dart'; import 'package:registration_delivery/registration_delivery.dart'; import 'package:survey_form/survey_form.dart'; From 3dc40317dd15bd5b8515a23d0b779c9e30da69df Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Thu, 19 Dec 2024 10:01:51 +0530 Subject: [PATCH 225/241] code rabbit comments resolved --- .../lib/data/repositories/local/localization.dart | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart index ca1667f14..30b8e6523 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart @@ -66,9 +66,12 @@ class LocalizationLocalRepository { return result.map((row) { final data = row.readTableOrNull(sql.localization); + if (data == null) { + throw StateError('No data found for localization'); + } return Localization() - ..code = data!.code + ..code = data.code ..locale = data.locale ..module = data.module ..message = data.message; @@ -93,8 +96,13 @@ class LocalizationLocalRepository { return results.map((e) { final data = e.readTableOrNull(sql.localization); + + if (data == null) { + throw StateError('No data found for localization'); + } + return Localization() - ..code = data!.code + ..code = data.code ..locale = data.locale ..module = data.module ..message = data.message; From 1977a98d1416ce87260282154518821c90dfa078 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Thu, 19 Dec 2024 10:11:42 +0530 Subject: [PATCH 226/241] property check for apk git flow --- .../android/app/build.gradle | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/apps/health_campaign_field_worker_app/android/app/build.gradle b/apps/health_campaign_field_worker_app/android/app/build.gradle index 0a3a128be..9da54f41a 100644 --- a/apps/health_campaign_field_worker_app/android/app/build.gradle +++ b/apps/health_campaign_field_worker_app/android/app/build.gradle @@ -60,6 +60,14 @@ android { signingConfig signingConfigs.debug } } + + if (!project.hasProperty('USE_GOOGLE_SERVICES')) { + tasks.whenTaskAdded { task -> + if (task.name.contains("GoogleServices")) { + task.enabled = false + } + } + } } flutter { From 23ad109e7b78f4b11a81d2297c3b4ba262c8d95f Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Thu, 19 Dec 2024 12:08:33 +0530 Subject: [PATCH 227/241] build apk git action changes --- .github/workflows/flutter-build-apk.yml | 3 ++- .../android/app/build.gradle | 1 - packages/sync_service/build.yaml | 6 +----- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.github/workflows/flutter-build-apk.yml b/.github/workflows/flutter-build-apk.yml index 1d8ad0304..a8995a1b0 100644 --- a/.github/workflows/flutter-build-apk.yml +++ b/.github/workflows/flutter-build-apk.yml @@ -9,7 +9,8 @@ on: jobs: build-apk: runs-on: ubuntu-latest - + environment: UAT + steps: - name: Checkout code uses: actions/checkout@v3 diff --git a/apps/health_campaign_field_worker_app/android/app/build.gradle b/apps/health_campaign_field_worker_app/android/app/build.gradle index 9da54f41a..c876ac577 100644 --- a/apps/health_campaign_field_worker_app/android/app/build.gradle +++ b/apps/health_campaign_field_worker_app/android/app/build.gradle @@ -3,7 +3,6 @@ plugins { id 'kotlin-android' id 'dev.flutter.flutter-gradle-plugin' id 'com.google.gms.google-services' - id 'com.google.firebase.crashlytics' } def localProperties = new Properties() diff --git a/packages/sync_service/build.yaml b/packages/sync_service/build.yaml index 631c73b2f..05310222d 100644 --- a/packages/sync_service/build.yaml +++ b/packages/sync_service/build.yaml @@ -2,8 +2,4 @@ targets: $default: builders: dart_mappable_builder: - generate_for: - super_annotations: - options: - generate_for: - - lib/data/ \ No newline at end of file + generate_for: \ No newline at end of file From 29128ec97f73435bab305ebba6caef4107de32f0 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Thu, 19 Dec 2024 12:26:40 +0530 Subject: [PATCH 228/241] reverted localization insert --- .../lib/data/repositories/local/localization.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart index 30b8e6523..2ea70837d 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/local/localization.dart @@ -115,7 +115,7 @@ class LocalizationLocalRepository { if (result.isEmpty) return; return retryLocalCallOperation(() async { return sql.batch((batch) { - batch.insertAllOnConflictUpdate(sql.localization, result); + batch.insertAll(sql.localization, result); }); }); } From a5d768fba90dcca643014f05cda693ad309f0ee2 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Thu, 19 Dec 2024 13:43:23 +0530 Subject: [PATCH 229/241] changing env to qa for git actions --- .github/workflows/flutter-build-apk.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/flutter-build-apk.yml b/.github/workflows/flutter-build-apk.yml index a8995a1b0..8cac5fc5a 100644 --- a/.github/workflows/flutter-build-apk.yml +++ b/.github/workflows/flutter-build-apk.yml @@ -9,7 +9,7 @@ on: jobs: build-apk: runs-on: ubuntu-latest - environment: UAT + environment: QA steps: - name: Checkout code From 7f554b3ea0e6aa86383d925ee97c7596234b4b06 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Thu, 19 Dec 2024 15:03:27 +0530 Subject: [PATCH 230/241] Update generate-apk.sh --- tools/generate-apk.sh | 56 ++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/tools/generate-apk.sh b/tools/generate-apk.sh index 8b3225c82..9d4bc9be4 100755 --- a/tools/generate-apk.sh +++ b/tools/generate-apk.sh @@ -14,39 +14,41 @@ build_apk() { fi } -# Ask user for environment to build for -echo "Please select an environment to build for (UAT, DEV, QA or ALL):" -read env -env="${env:-ALL}" +# # Ask user for environment to build for +# echo "Please select an environment to build for (UAT, DEV, QA or ALL):" +# read env +# env="${env:-ALL}" # Ask user for build config echo "Please select a build config (release or profile):" read build_config build_config="${build_config:-release}" -# Build APK for specified environment(s) and build config -if [ "$env" == "ALL" ]; then - env_list=("UAT" "DEV" "QA") -else - env_list=("$env") -fi - -./tools/install_bricks.sh - -for env_option in "${env_list[@]}"; do - cd "$APP_DIR" || exit - - case $env_option in - "UAT") - cp ".env.uat" ".env" - ;; - "QA") - cp ".env.qa" ".env" - ;; - "DEV") - cp ".env.dev" ".env" - ;; - esac +cd "$APP_DIR" || exit + +# # Build APK for specified environment(s) and build config +# if [ "$env" == "ALL" ]; then +# env_list=("UAT" "DEV" "QA") +# else +# env_list=("$env") +# fi + +# ./tools/install_bricks.sh + +# for env_option in "${env_list[@]}"; do +# cd "$APP_DIR" || exit + +# case $env_option in +# "UAT") +# cp ".env.uat" ".env" +# ;; +# "QA") +# cp ".env.qa" ".env" +# ;; +# "DEV") +# cp ".env.dev" ".env" +# ;; +# esac build_apk cd ../../ || exit From b6ff46bada1231169bc261a116483aea69afe75d Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Thu, 19 Dec 2024 16:12:34 +0530 Subject: [PATCH 231/241] Update generate-apk.sh --- tools/generate-apk.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/generate-apk.sh b/tools/generate-apk.sh index 9d4bc9be4..403fd4b7f 100755 --- a/tools/generate-apk.sh +++ b/tools/generate-apk.sh @@ -55,7 +55,7 @@ cd "$APP_DIR" || exit mkdir -p outputs mv "$APP_DIR/build/app/outputs/flutter-apk/app-$build_config.apk" "outputs/app-$env_option-$build_config.apk" -done +# done open outputs echo "APK generation complete." From d12b9e0369fad54863cc227d99490e8f1c3cc4d1 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Thu, 19 Dec 2024 17:43:51 +0530 Subject: [PATCH 232/241] Android 34 support fix for registerReceiver issue --- .github/workflows/flutter-build-apk.yml | 2 +- .../android/app/build.gradle | 6 +- .../android/app/src/main/AndroidManifest.xml | 2 - .../main/kotlin/com/digit/hcm/MainActivity.kt | 59 ++++++++++++------- 4 files changed, 42 insertions(+), 27 deletions(-) diff --git a/.github/workflows/flutter-build-apk.yml b/.github/workflows/flutter-build-apk.yml index 8cac5fc5a..a8995a1b0 100644 --- a/.github/workflows/flutter-build-apk.yml +++ b/.github/workflows/flutter-build-apk.yml @@ -9,7 +9,7 @@ on: jobs: build-apk: runs-on: ubuntu-latest - environment: QA + environment: UAT steps: - name: Checkout code diff --git a/apps/health_campaign_field_worker_app/android/app/build.gradle b/apps/health_campaign_field_worker_app/android/app/build.gradle index c876ac577..614262029 100644 --- a/apps/health_campaign_field_worker_app/android/app/build.gradle +++ b/apps/health_campaign_field_worker_app/android/app/build.gradle @@ -25,7 +25,7 @@ if (flutterVersionName == null) { android { - compileSdkVersion 34 + compileSdk = flutter.compileSdkVersion ndkVersion flutter.ndkVersion compileOptions { @@ -46,8 +46,8 @@ android { applicationId "com.digit.hcm" // You can update the following values to match your application needs. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. - minSdkVersion 21 - targetSdkVersion flutter.targetSdkVersion + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() versionName flutterVersionName } diff --git a/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml b/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml index ee5bf8e02..5f39e8455 100644 --- a/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml +++ b/apps/health_campaign_field_worker_app/android/app/src/main/AndroidManifest.xml @@ -4,8 +4,6 @@ - - diff --git a/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/MainActivity.kt b/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/MainActivity.kt index 23b645978..bc533d3ac 100644 --- a/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/MainActivity.kt +++ b/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/MainActivity.kt @@ -1,18 +1,14 @@ package com.digit.hcm -import io.flutter.embedding.android.FlutterActivity -import android.os.Bundle -import java.io.File -import java.io.FileOutputStream -import io.flutter.plugin.common.MethodChannel -import android.content.Intent import android.content.BroadcastReceiver import android.content.Context +import android.content.Intent import android.content.IntentFilter -import android.os.Environment -import androidx.core.app.ActivityCompat -import androidx.core.content.ContextCompat +import android.os.Build +import android.os.Bundle import android.widget.Toast +import io.flutter.embedding.android.FlutterActivity +import io.flutter.plugin.common.MethodChannel class MainActivity : FlutterActivity() { private val CHANNEL = "com.digit.location_tracker" @@ -23,14 +19,20 @@ class MainActivity : FlutterActivity() { val accuracy = intent?.getFloatExtra("accuracy", 0.0f) // Retrieve accuracy here // Handle the location data here - Toast.makeText(context, "Latitude: $latitude, Longitude: $longitude, Accuracy: $accuracy", Toast.LENGTH_LONG).show() + Toast.makeText( + context, + "Latitude: $latitude, Longitude: $longitude, Accuracy: $accuracy", + Toast.LENGTH_LONG + ).show() // Optionally, you can send this data to Flutter via MethodChannel flutterEngine?.dartExecutor?.binaryMessenger?.let { - MethodChannel(it, CHANNEL).invokeMethod("locationUpdate", mapOf( - "latitude" to latitude, - "longitude" to longitude, - "accuracy" to accuracy - )) + MethodChannel(it, CHANNEL).invokeMethod( + "locationUpdate", mapOf( + "latitude" to latitude, + "longitude" to longitude, + "accuracy" to accuracy + ) + ) } } } @@ -38,29 +40,43 @@ class MainActivity : FlutterActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - MethodChannel(flutterEngine!!.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result -> + MethodChannel( + flutterEngine!!.dartExecutor.binaryMessenger, + CHANNEL + ).setMethodCallHandler { call, result -> when (call.method) { "startLocationUpdates" -> { val interval = (call.argument("interval")?.toLong()) ?: 60000L - val stopAfterTimestamp = (call.argument("stopAfterTimestamp")?.toLong()) ?: (System.currentTimeMillis() + 60000L) + val stopAfterTimestamp = (call.argument("stopAfterTimestamp")?.toLong()) + ?: (System.currentTimeMillis() + 60000L) if (!isMyServiceRunning(LocationService::class.java)) { startService(interval, stopAfterTimestamp) } else { - Toast.makeText(this, "Location service is already running", Toast.LENGTH_SHORT).show() + Toast.makeText( + this, + "Location service is already running", + Toast.LENGTH_SHORT + ).show() } result.success(null) } + "stopLocationUpdates" -> { stopService() result.success(null) } + else -> result.notImplemented() } } - // Register the receiver for location updates + // Register the receiver for location updates, with proper export settings for Android 13+ val filter = IntentFilter("LocationUpdate") - registerReceiver(locationReceiver, filter) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + registerReceiver(locationReceiver, filter, Context.RECEIVER_EXPORTED) + } else { + registerReceiver(locationReceiver, filter) + } } override fun onDestroy() { @@ -96,7 +112,8 @@ class MainActivity : FlutterActivity() { val manager = getSystemService(Context.ACTIVITY_SERVICE) as android.app.ActivityManager for (service in manager.getRunningServices(Int.MAX_VALUE)) { if (serviceClass.name == service.service.className) { - Toast.makeText(this, "Location service is already running", Toast.LENGTH_SHORT).show() + Toast.makeText(this, "Location service is already running", Toast.LENGTH_SHORT) + .show() return true } } From 52b0b14a9169351eb301b2ece54073bb50f28cf0 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Thu, 19 Dec 2024 17:43:57 +0530 Subject: [PATCH 233/241] Update generate-apk.sh --- tools/generate-apk.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/generate-apk.sh b/tools/generate-apk.sh index 403fd4b7f..163380112 100755 --- a/tools/generate-apk.sh +++ b/tools/generate-apk.sh @@ -57,5 +57,5 @@ cd "$APP_DIR" || exit mv "$APP_DIR/build/app/outputs/flutter-apk/app-$build_config.apk" "outputs/app-$env_option-$build_config.apk" # done -open outputs +# open outputs echo "APK generation complete." From 6f7ff66505ae2d2fe4cee9c000da767fee805e03 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Thu, 19 Dec 2024 21:33:39 +0530 Subject: [PATCH 234/241] code-rabbit comments resolved --- .../main/kotlin/com/digit/hcm/MainActivity.kt | 6 +++- .../lib/data/sync_service_mapper.dart | 2 ++ .../lib/pages/authenticated.dart | 28 ++++++++----------- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/MainActivity.kt b/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/MainActivity.kt index bc533d3ac..58329c178 100644 --- a/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/MainActivity.kt +++ b/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/MainActivity.kt @@ -16,7 +16,11 @@ class MainActivity : FlutterActivity() { override fun onReceive(context: Context?, intent: Intent?) { val latitude = intent?.getDoubleExtra("latitude", 0.0) val longitude = intent?.getDoubleExtra("longitude", 0.0) - val accuracy = intent?.getFloatExtra("accuracy", 0.0f) // Retrieve accuracy here + val accuracy = intent?.getFloatExtra("accuracy", 0.0f) ?: 0.0f + if (latitude == null || longitude == null) { + Log.e("LocationReceiver", "Received null location data") + return + } // Handle the location data here Toast.makeText( diff --git a/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart b/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart index 9389bf865..92b9957ee 100644 --- a/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart +++ b/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart @@ -712,6 +712,8 @@ class SyncServiceMapper extends SyncEntityMapperListener { break; + // Note: Uncomment the following code block to enable complaints sync down + // case DataModelType.complaints: // if (remote is! PgrServiceRemoteRepository) return responseEntities; // diff --git a/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart b/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart index c7f98a48f..90efab66c 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart @@ -133,14 +133,7 @@ class AuthenticatedPageWrapper extends StatelessWidget { .listen( (event) { if (!bloc.isClosed) { - bloc.add( - SyncRefreshEvent( - userId, - SyncServiceSingleton() - .entityMapper! - .getSyncCount(event), - ), - ); + triggerSyncRefreshEvent(bloc, userId, event); } }, ); @@ -154,14 +147,7 @@ class AuthenticatedPageWrapper extends StatelessWidget { .listen( (event) { if (!bloc.isClosed) { - bloc.add( - SyncRefreshEvent( - userId, - SyncServiceSingleton() - .entityMapper! - .getSyncCount(event), - ), - ); + triggerSyncRefreshEvent(bloc, userId, event); } }, ); @@ -244,4 +230,14 @@ class AuthenticatedPageWrapper extends StatelessWidget { ), ); } + + void triggerSyncRefreshEvent( + SyncBloc bloc, String userId, List event) { + bloc.add( + SyncRefreshEvent( + userId, + SyncServiceSingleton().entityMapper!.getSyncCount(event), + ), + ); + } } From 6ef26f5f3b41c96b6a0c57c180c59f234de6bb09 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Fri, 20 Dec 2024 10:28:26 +0530 Subject: [PATCH 235/241] Update flutter-build-apk.yml --- .github/workflows/flutter-build-apk.yml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/.github/workflows/flutter-build-apk.yml b/.github/workflows/flutter-build-apk.yml index a8995a1b0..fc8f7c2b6 100644 --- a/.github/workflows/flutter-build-apk.yml +++ b/.github/workflows/flutter-build-apk.yml @@ -58,7 +58,22 @@ jobs: - name: Run APK build script env: BUILD_CONFIG: release # or profile depending on your choice - run: bash ./tools/generate-apk.sh + run: | + echo "Current working directory: $(pwd)" + bash ./tools/generate-apk.sh + + # Step 8: Verify APK path and upload artifacts + - name: Check APK existence + run: | + echo "Looking for APK file" + if [ -f apps/health_campaign_field_worker_app/build/app/outputs/flutter-apk/app-release.apk ]; then + echo "APK found." + else + echo "APK not found in the expected path." + find . -name "app-release.apk" + exit 1 + fi + # Archive the APK as a build artifact so it can be downloaded - name: Upload APKs From b4cd31887c1d839ef7737337e34e13b08bfa2291 Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Fri, 20 Dec 2024 11:01:56 +0530 Subject: [PATCH 236/241] pointing dart_mappable_builder to master branch added log import in main activity --- .../main/kotlin/com/digit/hcm/MainActivity.kt | 1 + .../pubspec.lock | 11 +++++----- .../pubspec.yaml | 6 +++++- packages/attendance_management/pubspec.lock | 4 ++-- packages/attendance_management/pubspec.yaml | 2 +- packages/closed_household/pubspec.lock | 4 ++-- packages/closed_household/pubspec.yaml | 2 +- packages/complaints/pubspec.lock | 4 ++-- packages/complaints/pubspec.yaml | 2 +- packages/digit_data_model/pubspec.lock | 4 ++-- packages/digit_data_model/pubspec.yaml | 2 +- packages/digit_dss/pubspec.yaml | 2 +- packages/inventory_management/pubspec.lock | 18 ++++++++--------- packages/inventory_management/pubspec.yaml | 6 +++++- packages/referral_reconciliation/pubspec.lock | 18 ++++++++--------- packages/referral_reconciliation/pubspec.yaml | 2 +- packages/registration_delivery/pubspec.lock | 20 +++++++++---------- packages/registration_delivery/pubspec.yaml | 2 +- packages/survey_form/pubspec.lock | 4 ++-- packages/survey_form/pubspec.yaml | 2 +- packages/sync_service/pubspec.yaml | 2 +- 21 files changed, 62 insertions(+), 56 deletions(-) diff --git a/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/MainActivity.kt b/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/MainActivity.kt index 58329c178..917a69650 100644 --- a/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/MainActivity.kt +++ b/apps/health_campaign_field_worker_app/android/app/src/main/kotlin/com/digit/hcm/MainActivity.kt @@ -6,6 +6,7 @@ import android.content.Intent import android.content.IntentFilter import android.os.Build import android.os.Bundle +import android.util.Log import android.widget.Toast import io.flutter.embedding.android.FlutterActivity import io.flutter.plugin.common.MethodChannel diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index dff3b3736..88ebc49aa 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -444,11 +444,12 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - name: dart_mappable_builder - sha256: "04a6e7117382f8a8689b3e363bee6c3de8c9ea4332e664148fe01bd576eb1126" - url: "https://pub.dev" - source: hosted - version: "4.3.0" + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: ab088b8fc21a07ed7a56bf81c935ee51481ad253 + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git + version: "4.2.3" dart_style: dependency: transitive description: diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index c85e790ba..35e6eb202 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -85,7 +85,11 @@ dev_dependencies: auto_route_generator: ^8.0.0 bloc_test: ^9.1.0 mocktail: ^1.0.2 - dart_mappable_builder: ^4.2.2 + dart_mappable_builder: + git: + url: https://github.com/egovernments/health-campaign-field-worker-app/ + ref: master + path: ./packages/dart_mappable_builder isar_generator: ^3.1.0+1 flutter_launcher_icons: ^0.13.1 hrk_flutter_test_batteries: ^0.8.0 diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index 1ac5cfd25..8091eeedf 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -309,8 +309,8 @@ packages: dependency: "direct dev" description: path: "packages/dart_mappable_builder" - ref: "1.6-final-dev" - resolved-ref: "1e7467577a9701d396f7e23afbf00065e54c5469" + ref: master + resolved-ref: ab088b8fc21a07ed7a56bf81c935ee51481ad253 url: "https://github.com/egovernments/health-campaign-field-worker-app/" source: git version: "4.2.3" diff --git a/packages/attendance_management/pubspec.yaml b/packages/attendance_management/pubspec.yaml index be9f0307b..cdcc5d7dc 100644 --- a/packages/attendance_management/pubspec.yaml +++ b/packages/attendance_management/pubspec.yaml @@ -43,7 +43,7 @@ dev_dependencies: dart_mappable_builder: git: url: https://github.com/egovernments/health-campaign-field-worker-app/ - ref: 1.6-final-dev + ref: master path: ./packages/dart_mappable_builder drift_dev: ^2.18.0 build_runner: ^2.4.11 diff --git a/packages/closed_household/pubspec.lock b/packages/closed_household/pubspec.lock index 704277232..6be4e1220 100644 --- a/packages/closed_household/pubspec.lock +++ b/packages/closed_household/pubspec.lock @@ -373,8 +373,8 @@ packages: dependency: "direct dev" description: path: "packages/dart_mappable_builder" - ref: "1.6-final-dev" - resolved-ref: "1e7467577a9701d396f7e23afbf00065e54c5469" + ref: master + resolved-ref: ab088b8fc21a07ed7a56bf81c935ee51481ad253 url: "https://github.com/egovernments/health-campaign-field-worker-app/" source: git version: "4.2.3" diff --git a/packages/closed_household/pubspec.yaml b/packages/closed_household/pubspec.yaml index 27394bd01..951ebeba3 100644 --- a/packages/closed_household/pubspec.yaml +++ b/packages/closed_household/pubspec.yaml @@ -55,7 +55,7 @@ dev_dependencies: dart_mappable_builder: git: url: https://github.com/egovernments/health-campaign-field-worker-app/ - ref: 1.6-final-dev + ref: master path: ./packages/dart_mappable_builder auto_route_generator: ^8.0.0 build_runner: ^2.4.11 diff --git a/packages/complaints/pubspec.lock b/packages/complaints/pubspec.lock index 20435b65a..8643b1d09 100644 --- a/packages/complaints/pubspec.lock +++ b/packages/complaints/pubspec.lock @@ -293,8 +293,8 @@ packages: dependency: "direct dev" description: path: "packages/dart_mappable_builder" - ref: "1.6-final-dev" - resolved-ref: "1e7467577a9701d396f7e23afbf00065e54c5469" + ref: master + resolved-ref: ab088b8fc21a07ed7a56bf81c935ee51481ad253 url: "https://github.com/egovernments/health-campaign-field-worker-app/" source: git version: "4.2.3" diff --git a/packages/complaints/pubspec.yaml b/packages/complaints/pubspec.yaml index 462456135..2f3c722a2 100644 --- a/packages/complaints/pubspec.yaml +++ b/packages/complaints/pubspec.yaml @@ -41,7 +41,7 @@ dev_dependencies: dart_mappable_builder: git: url: https://github.com/egovernments/health-campaign-field-worker-app/ - ref: 1.6-final-dev + ref: master path: ./packages/dart_mappable_builder bloc_test: ^9.1.0 mocktail: ^1.0.2 diff --git a/packages/digit_data_model/pubspec.lock b/packages/digit_data_model/pubspec.lock index 52da34c0e..022798c26 100644 --- a/packages/digit_data_model/pubspec.lock +++ b/packages/digit_data_model/pubspec.lock @@ -229,8 +229,8 @@ packages: dependency: "direct dev" description: path: "packages/dart_mappable_builder" - ref: "1.6-final-dev" - resolved-ref: "1e7467577a9701d396f7e23afbf00065e54c5469" + ref: master + resolved-ref: ab088b8fc21a07ed7a56bf81c935ee51481ad253 url: "https://github.com/egovernments/health-campaign-field-worker-app/" source: git version: "4.2.3" diff --git a/packages/digit_data_model/pubspec.yaml b/packages/digit_data_model/pubspec.yaml index 5298d5f6a..14b3a3743 100644 --- a/packages/digit_data_model/pubspec.yaml +++ b/packages/digit_data_model/pubspec.yaml @@ -38,7 +38,7 @@ dev_dependencies: dart_mappable_builder: git: url: https://github.com/egovernments/health-campaign-field-worker-app/ - ref: 1.6-final-dev + ref: master path: ./packages/dart_mappable_builder isar_generator: ^3.0.5 diff --git a/packages/digit_dss/pubspec.yaml b/packages/digit_dss/pubspec.yaml index 8b0865af8..e7f72853a 100644 --- a/packages/digit_dss/pubspec.yaml +++ b/packages/digit_dss/pubspec.yaml @@ -41,7 +41,7 @@ dev_dependencies: dart_mappable_builder: git: url: https://github.com/egovernments/health-campaign-field-worker-app/ - ref: 1.6-final-dev + ref: master path: ./packages/dart_mappable_builder auto_route_generator: ^8.0.0 isar_generator: ^3.1.0+1 diff --git a/packages/inventory_management/pubspec.lock b/packages/inventory_management/pubspec.lock index db72d69b2..01cbeef67 100644 --- a/packages/inventory_management/pubspec.lock +++ b/packages/inventory_management/pubspec.lock @@ -372,10 +372,11 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - name: dart_mappable_builder - sha256: ab5cf9086862d3fceb9773e945b5f95cc5471a28c782a4fc451bd400a4e0c64e - url: "https://pub.dev" - source: hosted + path: "packages/dart_mappable_builder" + ref: master + resolved-ref: ab088b8fc21a07ed7a56bf81c935ee51481ad253 + url: "https://github.com/egovernments/health-campaign-field-worker-app/" + source: git version: "4.2.3" dart_style: dependency: transitive @@ -412,10 +413,9 @@ packages: digit_scanner: dependency: "direct main" description: - name: digit_scanner - sha256: c33af61ed9ab3d7740fc3c8948af4b763d946cba5e902f8bfb00948d4d69d60a - url: "https://pub.dev" - source: hosted + path: "../digit_scanner" + relative: true + source: path version: "1.0.4" digit_ui_components: dependency: "direct main" @@ -1627,5 +1627,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <3.9.0" + dart: ">=3.4.0 <4.0.0" flutter: ">=3.22.0" diff --git a/packages/inventory_management/pubspec.yaml b/packages/inventory_management/pubspec.yaml index 344ede57b..e9d619e55 100644 --- a/packages/inventory_management/pubspec.yaml +++ b/packages/inventory_management/pubspec.yaml @@ -46,7 +46,11 @@ dev_dependencies: bloc_test: ^9.1.0 build_runner: ^2.4.11 mocktail: ^1.0.2 - dart_mappable_builder: ^4.2.2 + dart_mappable_builder: + git: + url: https://github.com/egovernments/health-campaign-field-worker-app/ + ref: master + path: ./packages/dart_mappable_builder auto_route_generator: ^8.0.0 flutter: diff --git a/packages/referral_reconciliation/pubspec.lock b/packages/referral_reconciliation/pubspec.lock index ed63fd65a..7aa3b9bf2 100644 --- a/packages/referral_reconciliation/pubspec.lock +++ b/packages/referral_reconciliation/pubspec.lock @@ -373,8 +373,8 @@ packages: dependency: "direct dev" description: path: "packages/dart_mappable_builder" - ref: "1.6-final-dev" - resolved-ref: "1e7467577a9701d396f7e23afbf00065e54c5469" + ref: master + resolved-ref: ab088b8fc21a07ed7a56bf81c935ee51481ad253 url: "https://github.com/egovernments/health-campaign-field-worker-app/" source: git version: "4.2.3" @@ -405,10 +405,9 @@ packages: digit_scanner: dependency: "direct main" description: - name: digit_scanner - sha256: c33af61ed9ab3d7740fc3c8948af4b763d946cba5e902f8bfb00948d4d69d60a - url: "https://pub.dev" - source: hosted + path: "../digit_scanner" + relative: true + source: path version: "1.0.4" digit_ui_components: dependency: "direct main" @@ -1406,10 +1405,9 @@ packages: survey_form: dependency: "direct main" description: - name: survey_form - sha256: "5e3a08570fe8c97d7dfd0bc6f28b2ae829e2fe66ce987504920c20d091c47c19" - url: "https://pub.dev" - source: hosted + path: "../survey_form" + relative: true + source: path version: "1.0.0" synchronized: dependency: transitive diff --git a/packages/referral_reconciliation/pubspec.yaml b/packages/referral_reconciliation/pubspec.yaml index 0a1746511..16b417a0e 100644 --- a/packages/referral_reconciliation/pubspec.yaml +++ b/packages/referral_reconciliation/pubspec.yaml @@ -52,7 +52,7 @@ dev_dependencies: dart_mappable_builder: git: url: https://github.com/egovernments/health-campaign-field-worker-app/ - ref: 1.6-final-dev + ref: master path: ./packages/dart_mappable_builder auto_route_generator: ^8.0.0 diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration_delivery/pubspec.lock index e027ca226..445b4965b 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration_delivery/pubspec.lock @@ -373,8 +373,8 @@ packages: dependency: "direct dev" description: path: "packages/dart_mappable_builder" - ref: "1.6-final-dev" - resolved-ref: "1e7467577a9701d396f7e23afbf00065e54c5469" + ref: master + resolved-ref: ab088b8fc21a07ed7a56bf81c935ee51481ad253 url: "https://github.com/egovernments/health-campaign-field-worker-app/" source: git version: "4.2.3" @@ -413,10 +413,9 @@ packages: digit_scanner: dependency: "direct main" description: - name: digit_scanner - sha256: c33af61ed9ab3d7740fc3c8948af4b763d946cba5e902f8bfb00948d4d69d60a - url: "https://pub.dev" - source: hosted + path: "../digit_scanner" + relative: true + source: path version: "1.0.4" digit_showcase: dependency: "direct main" @@ -1462,10 +1461,9 @@ packages: survey_form: dependency: "direct main" description: - name: survey_form - sha256: "5e3a08570fe8c97d7dfd0bc6f28b2ae829e2fe66ce987504920c20d091c47c19" - url: "https://pub.dev" - source: hosted + path: "../survey_form" + relative: true + source: path version: "1.0.0" synchronized: dependency: transitive @@ -1732,5 +1730,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <3.9.0" + dart: ">=3.4.0 <4.0.0" flutter: ">=3.22.0" diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration_delivery/pubspec.yaml index e69849bfa..887564178 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration_delivery/pubspec.yaml @@ -56,7 +56,7 @@ dev_dependencies: dart_mappable_builder: git: url: https://github.com/egovernments/health-campaign-field-worker-app/ - ref: 1.6-final-dev + ref: master path: ./packages/dart_mappable_builder auto_route_generator: ^8.0.0 diff --git a/packages/survey_form/pubspec.lock b/packages/survey_form/pubspec.lock index 076ded7c8..87c091d6a 100644 --- a/packages/survey_form/pubspec.lock +++ b/packages/survey_form/pubspec.lock @@ -309,8 +309,8 @@ packages: dependency: "direct dev" description: path: "packages/dart_mappable_builder" - ref: "1.6-final-dev" - resolved-ref: "1e7467577a9701d396f7e23afbf00065e54c5469" + ref: master + resolved-ref: ab088b8fc21a07ed7a56bf81c935ee51481ad253 url: "https://github.com/egovernments/health-campaign-field-worker-app/" source: git version: "4.2.3" diff --git a/packages/survey_form/pubspec.yaml b/packages/survey_form/pubspec.yaml index 8b5705529..6e11732d5 100644 --- a/packages/survey_form/pubspec.yaml +++ b/packages/survey_form/pubspec.yaml @@ -39,7 +39,7 @@ dev_dependencies: dart_mappable_builder: git: url: https://github.com/egovernments/health-campaign-field-worker-app/ - ref: 1.6-final-dev + ref: master path: ./packages/dart_mappable_builder drift_dev: ^2.14.1 auto_route_generator: ^8.0.0 diff --git a/packages/sync_service/pubspec.yaml b/packages/sync_service/pubspec.yaml index 418269925..1d8c2af7f 100644 --- a/packages/sync_service/pubspec.yaml +++ b/packages/sync_service/pubspec.yaml @@ -42,7 +42,7 @@ dev_dependencies: dart_mappable_builder: git: url: https://github.com/egovernments/health-campaign-field-worker-app/ - ref: 1.6-final-dev + ref: master path: ./packages/dart_mappable_builder # For information on the generic Dart part of this file, see the From e57a2705f09061016a19ce1a8bddfc3caea2a3fd Mon Sep 17 00:00:00 2001 From: Naveen Renati <154230258+naveenr-egov@users.noreply.github.com> Date: Fri, 20 Dec 2024 11:02:19 +0530 Subject: [PATCH 237/241] lock file change --- packages/digit_dss/pubspec.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/digit_dss/pubspec.lock b/packages/digit_dss/pubspec.lock index 70d370a71..82ead67eb 100644 --- a/packages/digit_dss/pubspec.lock +++ b/packages/digit_dss/pubspec.lock @@ -365,7 +365,7 @@ packages: path: "../digit_data_model" relative: true source: path - version: "1.0.5" + version: "1.0.5+1" digit_firebase_services: dependency: "direct overridden" description: From 230496e3fb91f260a089bb70ff92e3eb7dee8324 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Fri, 20 Dec 2024 11:16:28 +0530 Subject: [PATCH 238/241] Update flutter-build-apk.yml --- .github/workflows/flutter-build-apk.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/flutter-build-apk.yml b/.github/workflows/flutter-build-apk.yml index fc8f7c2b6..d67bc526f 100644 --- a/.github/workflows/flutter-build-apk.yml +++ b/.github/workflows/flutter-build-apk.yml @@ -59,8 +59,10 @@ jobs: env: BUILD_CONFIG: release # or profile depending on your choice run: | - echo "Current working directory: $(pwd)" bash ./tools/generate-apk.sh + echo "Current working directory: $(pwd)" + echo "Listing all files at the current level:" + ls -l # Step 8: Verify APK path and upload artifacts - name: Check APK existence From 2595705cd0d7ecf0f4b506cfae4d79749c4c0c97 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Fri, 20 Dec 2024 11:42:13 +0530 Subject: [PATCH 239/241] Update flutter-build-apk.yml --- .github/workflows/flutter-build-apk.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/flutter-build-apk.yml b/.github/workflows/flutter-build-apk.yml index d67bc526f..076e96a60 100644 --- a/.github/workflows/flutter-build-apk.yml +++ b/.github/workflows/flutter-build-apk.yml @@ -68,7 +68,7 @@ jobs: - name: Check APK existence run: | echo "Looking for APK file" - if [ -f apps/health_campaign_field_worker_app/build/app/outputs/flutter-apk/app-release.apk ]; then + if [ -f apps/health_campaign_field_worker_app/build/app/outputs/apk/release/app-release.apk ]; then echo "APK found." else echo "APK not found in the expected path." @@ -76,13 +76,12 @@ jobs: exit 1 fi - # Archive the APK as a build artifact so it can be downloaded - name: Upload APKs uses: actions/upload-artifact@v3 with: name: app-release-apk - path: apps/health_campaign_field_worker_app/build/app/outputs/flutter-apk/app-release.apk + path: apps/health_campaign_field_worker_app/build/app/outputs/apk/release/app-release.apk - name: Upload .env as artifact uses: actions/upload-artifact@v3 From e503db7102ccee9aba8b665cfd0bbd6d42370c59 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Fri, 20 Dec 2024 12:05:03 +0530 Subject: [PATCH 240/241] Update generate-apk.sh --- tools/generate-apk.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/generate-apk.sh b/tools/generate-apk.sh index 163380112..63f8457c1 100755 --- a/tools/generate-apk.sh +++ b/tools/generate-apk.sh @@ -24,8 +24,6 @@ echo "Please select a build config (release or profile):" read build_config build_config="${build_config:-release}" -cd "$APP_DIR" || exit - # # Build APK for specified environment(s) and build config # if [ "$env" == "ALL" ]; then # env_list=("UAT" "DEV" "QA") @@ -33,7 +31,9 @@ cd "$APP_DIR" || exit # env_list=("$env") # fi -# ./tools/install_bricks.sh +./tools/install_bricks.sh + +cd "$APP_DIR" || exit # for env_option in "${env_list[@]}"; do # cd "$APP_DIR" || exit @@ -54,7 +54,7 @@ cd "$APP_DIR" || exit cd ../../ || exit mkdir -p outputs - mv "$APP_DIR/build/app/outputs/flutter-apk/app-$build_config.apk" "outputs/app-$env_option-$build_config.apk" + mv "$APP_DIR/build/app/outputs/apk/release/app-$build_config.apk" "outputs/app-$env_option-$build_config.apk" # done # open outputs From d135b54be7d2384e205847d9715646df2bac3aa7 Mon Sep 17 00:00:00 2001 From: Shashwat12-egov Date: Fri, 20 Dec 2024 14:20:48 +0530 Subject: [PATCH 241/241] Update generate-apk.sh --- tools/generate-apk.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/generate-apk.sh b/tools/generate-apk.sh index 63f8457c1..4d578fa4c 100755 --- a/tools/generate-apk.sh +++ b/tools/generate-apk.sh @@ -53,8 +53,8 @@ cd "$APP_DIR" || exit build_apk cd ../../ || exit - mkdir -p outputs - mv "$APP_DIR/build/app/outputs/apk/release/app-$build_config.apk" "outputs/app-$env_option-$build_config.apk" + # mkdir -p outputs + # mv "$APP_DIR/build/app/outputs/apk/release/app-$build_config.apk" "outputs/app-$env_option-$build_config.apk" # done # open outputs